Browse Source

干部培训记录管理

lizeyu 4 months ago
parent
commit
0cfdabfafe
24 changed files with 4109 additions and 6 deletions
  1. 51 1
      lib/数据更新脚本.txt
  2. 1 1
      src/main/java/com/ghsc/partybuild/controller/app/AppDzzfcController.java
  3. 1 1
      src/main/java/com/ghsc/partybuild/controller/publicity/PubDzzfcController.java
  4. 197 0
      src/main/java/com/ghsc/partybuild/controller/train/PxTrainingRecordController.java
  5. 17 0
      src/main/java/com/ghsc/partybuild/mapper/PxTrainingRecordCQuery.java
  6. 30 0
      src/main/java/com/ghsc/partybuild/mapper/PxTrainingRecordMapper.java
  7. 235 0
      src/main/java/com/ghsc/partybuild/model/PxTrainingRecord.java
  8. 1748 0
      src/main/java/com/ghsc/partybuild/model/PxTrainingRecordExample.java
  9. 1 1
      src/main/java/com/ghsc/partybuild/service/impl/PubDzzfcService.java
  10. 21 0
      src/main/java/com/ghsc/partybuild/service/PxTrainingRecordService.java
  11. 1 1
      src/main/java/com/ghsc/partybuild/service/impl/publicity/PubDzzfcServiceImpl.java
  12. 251 0
      src/main/java/com/ghsc/partybuild/service/impl/train/PxTrainingRecordServiceImpl.java
  13. 13 0
      src/main/java/com/ghsc/partybuild/vo/trian/PxTrainingRecordVo.java
  14. 1 0
      src/main/resources/generatorConfig.xml
  15. 74 0
      src/main/resources/mapping/PxTrainingRecordCQuery.xml
  16. 494 0
      src/main/resources/mapping/PxTrainingRecordMapper.xml
  17. 36 0
      src/main/resources/static/app/main/app.js
  18. 1 1
      src/main/resources/static/app/main/leaderwork/leaderteam/edit.html
  19. 70 0
      src/main/resources/static/app/main/train/trainingRecord/detail.html
  20. 26 0
      src/main/resources/static/app/main/train/trainingRecord/detail.js
  21. 176 0
      src/main/resources/static/app/main/train/trainingRecord/edit.html
  22. 149 0
      src/main/resources/static/app/main/train/trainingRecord/edit.js
  23. 247 0
      src/main/resources/static/app/main/train/trainingRecord/list.html
  24. 268 0
      src/main/resources/static/app/main/train/trainingRecord/list.js

+ 51 - 1
lib/数据更新脚本.txt

@@ -235,4 +235,54 @@ INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `
 -- 组织生活会
 INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('3e8c2439-b18e-0001-829d-7085c2a9999e', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '3e8c2439-b18e-11ec-829d-7085c2a9999e', NULL, 1, 'home.pf_meetingEdit1', '编辑组织生活会', NULL, NULL, NULL, 0, 0, NULL);
 INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('3e8c2439-b18e-0002-829d-7085c2a9999e', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '3e8c2439-b18e-11ec-829d-7085c2a9999e', NULL, 2, 'home.pf_meetingAdd1', '新增组织生活会', NULL, NULL, NULL, 0, 0, NULL);
-INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('3e8c2439-b18e-0003-829d-7085c2a9999e', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '3e8c2439-b18e-11ec-829d-7085c2a9999e', NULL, 3, 'home.pf_meetingDetail1', '查看组织生活会详情', NULL, NULL, NULL, 0, 0, NULL);
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('3e8c2439-b18e-0003-829d-7085c2a9999e', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '3e8c2439-b18e-11ec-829d-7085c2a9999e', NULL, 3, 'home.pf_meetingDetail1', '查看组织生活会详情', NULL, NULL, NULL, 0, 0, NULL);
+
+
+-- 2024.7.25 干部培训记录管理
+DROP TABLE IF EXISTS `px_training_record`;
+CREATE TABLE `px_training_record`  (
+  `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'id',
+  `rybm` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '人员编码',
+  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '姓名(可选择系统中的人员,如非系统人员可直接输入姓名)',
+  `pxdxlx` int NULL DEFAULT NULL COMMENT '培训对象类型pxdxlxType(中层干部、青年干部、党务纪检干部、其他)',
+  `gender` int NULL DEFAULT NULL COMMENT '性别',
+  `sfzh` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '身份证号',
+  `gzbm` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '工作部门',
+  `zw` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '职务',
+  `pxxmmc` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '培训项目名称',
+  `pxxs` int NULL DEFAULT NULL COMMENT '培训形式pxxsType(面授、研讨会、专题讲座、网络培训、实践研学、其它)',
+  `xxkssj` date NULL DEFAULT NULL COMMENT '学习开始时间',
+  `xxjssj` date NULL DEFAULT NULL COMMENT '学习结束时间',
+  `cxts` int NULL DEFAULT NULL COMMENT '参训天数',
+  `xss` int NULL DEFAULT NULL COMMENT '学时数',
+  `khqk` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '考核情况',
+  `ssjgmc` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '实施机构名称',
+  `xxdd` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学习地点',
+  `xxnr` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学习内容',
+  `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+  `create_time` datetime NULL  DEFAULT NULL COMMENT '创建时间',
+  `create_userid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
+  `update_userid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '修改人',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC COMMENT'干部培训记录管理';
+SET FOREIGN_KEY_CHECKS = 1;
+
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('0af16d13-c7f9-494e-0000-333edf772bbb', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', 'e1a2a3cc-0001-404b-b58e-517e4a9f3aef', NULL, 1, 'home.PxTrainingRecordAdd', '新增干部培训记录管理', '', '', '', 0, 0, NULL);
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('43820be1-c1fb-49bc-0000-218cc17947e1', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', 'e1a2a3cc-0001-404b-b58e-517e4a9f3aef', NULL, 2, 'home.PxTrainingRecordEdit', '编辑干部培训记录管理', '', '', '', 0, 0, NULL);
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('4aaeb0a8-0657-4dda-0000-cb21c08f26f2', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', 'e1a2a3cc-0001-404b-b58e-517e4a9f3aef', NULL, 3, 'home.PxTrainingRecordDetail', '查看干部培训记录管理详情', '', '', '', 0, 0, NULL);
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('e1a2a3cc-0001-404b-b58e-517e4a9f3aef', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '996c7331-1f94-48f0-b246-d6ddb178ae7f', NULL, 13, 'home.PxTrainingRecordList', '干部培训记录管理', '', '', '', 1, 0, NULL);
+
+-- 培训对象类型pxdxlxType(中层干部、青年干部、党务纪检干部、其他)
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-1001-9999-bdb74a278a72', 1, '中层干部', 'pxdxlxType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训对象类型', '2019-09-26 15:13:15', 'M', 'N');
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-2002-9999-bdb74a278a72', 2, '青年干部', 'pxdxlxType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训对象类型', '2019-09-26 15:13:15', 'M', 'N');
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-3002-9999-bdb74a278a72', 3, '党务纪检干部', 'pxdxlxType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训对象类型', '2019-09-26 15:13:15', 'M', 'N');
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-4002-9999-bdb74a278a72', 4, '其他', 'pxdxlxType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训对象类型', '2019-09-26 15:13:15', 'M', 'N');
+
+--  培训形式pxxsType(面授、研讨会、专题讲座、网络培训、实践研学、其它)
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-1101-9999-bdb74a278a72', 1, '面授', 'pxxsType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训形式', '2019-09-26 15:13:15', 'M', 'N');
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-2202-9999-bdb74a278a72', 2, '研讨会', 'pxxsType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训形式', '2019-09-26 15:13:15', 'M', 'N');
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-3302-9999-bdb74a278a72', 3, '专题讲座', 'pxxsType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训形式', '2019-09-26 15:13:15', 'M', 'N');
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-4402-9999-bdb74a278a72', 4, '网络培训', 'pxxsType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训形式', '2019-09-26 15:13:15', 'M', 'N');
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-4502-9999-bdb74a278a72', 5, '实践研学', 'pxxsType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训形式', '2019-09-26 15:13:15', 'M', 'N');
+INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('058a7fc0-0000-4602-9999-bdb74a278a72', 6, '其他', 'pxxsType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '培训形式', '2019-09-26 15:13:15', 'M', 'N');

+ 1 - 1
src/main/java/com/ghsc/partybuild/controller/app/AppDzzfcController.java

@@ -2,7 +2,7 @@ package com.ghsc.partybuild.controller.app;
 
 import com.ghsc.partybuild.controller.jsonmodel.RequsetData;
 import com.ghsc.partybuild.service.UserService;
-import com.ghsc.partybuild.service.impl.PubDzzfcService;
+import com.ghsc.partybuild.service.PubDzzfcService;
 import com.ghsc.partybuild.util.DateUtils;
 import com.ghsc.partybuild.vo.publicity.PubDzzfcVo;
 import com.github.pagehelper.PageInfo;

+ 1 - 1
src/main/java/com/ghsc/partybuild/controller/publicity/PubDzzfcController.java

@@ -3,7 +3,7 @@ package com.ghsc.partybuild.controller.publicity;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.ghsc.partybuild.controller.jsonmodel.RequsetData;
 import com.ghsc.partybuild.service.UserService;
-import com.ghsc.partybuild.service.impl.PubDzzfcService;
+import com.ghsc.partybuild.service.PubDzzfcService;
 import com.ghsc.partybuild.util.DateUtils;
 import com.ghsc.partybuild.util.JsonMapper;
 import com.ghsc.partybuild.vo.publicity.PubDzzfcVo;

+ 197 - 0
src/main/java/com/ghsc/partybuild/controller/train/PxTrainingRecordController.java

@@ -0,0 +1,197 @@
+package com.ghsc.partybuild.controller.train;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.ghsc.partybuild.controller.jsonmodel.RequsetData;
+import com.ghsc.partybuild.service.DictionaryService;
+import com.ghsc.partybuild.service.PxTrainingRecordService;
+import com.ghsc.partybuild.service.UserService;
+import com.ghsc.partybuild.util.DateUtils;
+import com.ghsc.partybuild.util.ExcelHelper;
+import com.ghsc.partybuild.util.JsonMapper;
+import com.ghsc.partybuild.util.StringUtils;
+import com.ghsc.partybuild.vo.trian.PxTrainingRecordVo;
+import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@Slf4j
+@RestController
+@RequestMapping(value = "/api/train/trainingrecord")
+public class PxTrainingRecordController {
+    @Autowired
+    private PxTrainingRecordService pxTrainingRecordService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private DictionaryService dictionaryService;
+    @Autowired
+    private StringUtils stringUtils;
+    @Autowired
+    private DateUtils dateUtils;
+    private static final String dateTimeFormat = "yyyy-MM-dd";
+
+    @ResponseBody
+    @GetMapping("/getList")
+    public RequsetData<PageInfo<PxTrainingRecordVo>> getList(int pageindex, int pagesize, @RequestParam(required = false) String dzzdm,
+                                                                             @RequestParam(required = false) String name, @RequestParam(required = false) String sfzh,
+                                                                             @RequestParam(required = false) String pxxmmc, @RequestParam(required = false) String pxxs,
+                                                                             @RequestParam(required = false) String pxdxlx,
+                                                                             @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date xxsjBegin,
+                                                                             @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date xxsjEnd) {
+        RequsetData<PageInfo<PxTrainingRecordVo>> result = new RequsetData<>();
+        result.setItem(pxTrainingRecordService.getList(pageindex, pagesize, null, dzzdm, name, sfzh, pxxmmc, pxxs, pxdxlx, xxsjBegin, xxsjEnd));
+        return result;
+    }
+
+    @ResponseBody
+    @GetMapping("/getById")
+    public RequsetData<PxTrainingRecordVo> getById(@RequestParam(required = false) String id) {
+        RequsetData<PxTrainingRecordVo> res = new RequsetData<>();
+
+        PxTrainingRecordVo model = pxTrainingRecordService.getById(id);
+        if (model == null || (model != null && stringUtils.IsNullOrEmpty(model.getId()))) {
+            UUID uuid = UUID.randomUUID();
+            model = new PxTrainingRecordVo();
+            model.setId(uuid.toString());
+        }
+
+        res.setItem(model);
+        return res;
+    }
+
+    @ResponseBody
+    @PostMapping("/save")
+    public RequsetData<String> save(@RequestBody PxTrainingRecordVo data) {
+        RequsetData<String> result = new RequsetData<String>();
+        int count = 0;
+        String message = "";
+
+        try {
+            count = pxTrainingRecordService.save(data, userService.getLoginUser().getUserid());
+        } catch (Exception e) {
+            e.printStackTrace();
+            message = e.toString();
+        }
+
+        if (count > 0) {
+            result.setSuccess(true);
+            result.setMsg("保存成功!");
+        } else {
+            result.setSuccess(false);
+            result.setMsg("保存失败!" + message);
+        }
+        return result;
+    }
+
+    @ResponseBody
+    @PostMapping("/delete")
+    public RequsetData<Integer> delete(@RequestBody Map<String, Object> reqMap) {
+        RequsetData<Integer> result = new RequsetData<>();
+        int count = 0;
+        String message = "";
+
+        try {
+            List<String> idList = JsonMapper.jsonToObject(reqMap.get("ids").toString(), new TypeReference<List<String>>() {
+            });
+            count = pxTrainingRecordService.delete(idList);
+        } catch (Exception e) {
+            e.printStackTrace();
+            message = e.toString();
+        }
+
+        if (count > 0) {
+            result.setItem(count);
+            result.setSuccess(true);
+            result.setMsg("删除成功!");
+        } else {
+            result.setSuccess(false);
+            result.setMsg("删除失败!" + message);
+        }
+        return result;
+    }
+
+    @RequestMapping(value = "/export", method = RequestMethod.GET)
+    public void export(HttpServletResponse response, @RequestParam(required = false) String dzzdm,
+                                       @RequestParam(required = false) String name, @RequestParam(required = false) String sfzh,
+                                       @RequestParam(required = false) String pxxmmc, @RequestParam(required = false) String pxxs,
+                                       @RequestParam(required = false) String pxdxlx,
+                                       @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date xxsjBegin,
+                                       @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date xxsjEnd) throws Exception {
+        /**查询数据**/
+        List<PxTrainingRecordVo> dataList = pxTrainingRecordService.getList(1, 1000000, null, dzzdm, name, sfzh, pxxmmc, pxxs, pxdxlx, xxsjBegin, xxsjEnd).getList();
+
+        ExcelHelper excelHelper = new ExcelHelper();
+        ExcelHelper.ExcelData data = excelHelper.new ExcelData();
+
+        //列名
+        data.setName("干部培训记录");
+        List<String> titles = new ArrayList();
+        titles.add("培训对象类型");
+        titles.add("姓名");
+        titles.add("性别");
+        titles.add("身份证号");
+        titles.add("工作部门");
+        titles.add("职务");
+        titles.add("培训项目名称");
+        titles.add("培训形式");
+        titles.add("学习开始时间");
+        titles.add("学习结束时间");
+        titles.add("参训天数");
+        titles.add("学时数");
+        data.setTitles(titles);
+
+        //数据
+        List<List<Object>> rows = new ArrayList();
+        for (PxTrainingRecordVo item : dataList) {
+            List<Object> row = new ArrayList();
+            row.add(item.getPxdxlxtypename());
+            row.add(item.getName());
+            row.add(item.getGendername());
+            row.add(item.getSfzh());
+            row.add(item.getGzbm());
+            row.add(item.getZw());
+            row.add(item.getPxxmmc());
+            row.add(item.getPxxstypename());
+            row.add(dateUtils.dateToStrFormat(item.getXxkssj(), "yyyy-MM-dd"));
+            row.add(dateUtils.dateToStrFormat(item.getXxjssj(), "yyyy-MM-dd"));
+            row.add(item.getCxts());
+            row.add(item.getXss());
+
+            rows.add(row);
+        }
+        data.setRows(rows);
+
+        excelHelper.exportExcel(response, "干部培训记录.xlsx", data);
+    }
+
+    @ResponseBody
+    @RequestMapping("/import")
+    public RequsetData<List<PxTrainingRecordVo>> importPxTrainingRecord(@RequestBody Map<String, Object> reqMap) {
+        RequsetData<List<PxTrainingRecordVo>> res = new RequsetData<>();
+        List<PxTrainingRecordVo> errorInfo = new ArrayList<>();
+        String message = "";
+        try {
+            List<PxTrainingRecordVo> dataList = JsonMapper.jsonToObject(reqMap.get("dataList").toString(), new TypeReference<List<PxTrainingRecordVo>>() {});
+
+            errorInfo = pxTrainingRecordService.importPxTrainingRecord(dataList, userService.getLoginUser().getUserid());
+        } catch (Exception e) {
+            e.printStackTrace();
+            message = e.toString();
+        }
+        if (errorInfo.size() <= 0 && stringUtils.IsNullOrEmpty(message)) {
+            res.setSuccess(true);
+            res.setMsg("操作成功!");
+        } else {
+            res.setSuccess(false);
+            res.setMsg("操作失败!" + message);
+            res.setItem(errorInfo);
+        }
+        return res;
+    }
+
+}

+ 17 - 0
src/main/java/com/ghsc/partybuild/mapper/PxTrainingRecordCQuery.java

@@ -0,0 +1,17 @@
+package com.ghsc.partybuild.mapper;
+
+import com.ghsc.partybuild.vo.trian.PxTrainingRecordVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+public interface PxTrainingRecordCQuery {
+    List<PxTrainingRecordVo> selectPxTrainingRecordList(@Param("id") String id,
+                                                        @Param("dzzdm") String dzzdm, @Param("name") String name,
+                                                        @Param("sfzh") String sfzh, @Param("pxxmmc") String pxxmmc,
+                                                        @Param("pxxs") String pxxs, @Param("pxdxlx") String pxdxlx,
+                                                        @Param("xxsjBegin") Date xxsjBegin, @Param("xxsjEnd") Date xxsjEnd);
+
+
+}

+ 30 - 0
src/main/java/com/ghsc/partybuild/mapper/PxTrainingRecordMapper.java

@@ -0,0 +1,30 @@
+package com.ghsc.partybuild.mapper;
+
+import com.ghsc.partybuild.model.PxTrainingRecord;
+import com.ghsc.partybuild.model.PxTrainingRecordExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface PxTrainingRecordMapper {
+    long countByExample(PxTrainingRecordExample example);
+
+    int deleteByExample(PxTrainingRecordExample example);
+
+    int deleteByPrimaryKey(String id);
+
+    int insert(PxTrainingRecord record);
+
+    int insertSelective(PxTrainingRecord record);
+
+    List<PxTrainingRecord> selectByExample(PxTrainingRecordExample example);
+
+    PxTrainingRecord selectByPrimaryKey(String id);
+
+    int updateByExampleSelective(@Param("record") PxTrainingRecord record, @Param("example") PxTrainingRecordExample example);
+
+    int updateByExample(@Param("record") PxTrainingRecord record, @Param("example") PxTrainingRecordExample example);
+
+    int updateByPrimaryKeySelective(PxTrainingRecord record);
+
+    int updateByPrimaryKey(PxTrainingRecord record);
+}

+ 235 - 0
src/main/java/com/ghsc/partybuild/model/PxTrainingRecord.java

@@ -0,0 +1,235 @@
+package com.ghsc.partybuild.model;
+
+import java.util.Date;
+
+public class PxTrainingRecord {
+    private String id;
+
+    private String rybm;
+
+    private String name;
+
+    private Integer pxdxlx;
+
+    private Integer gender;
+
+    private String sfzh;
+
+    private String gzbm;
+
+    private String zw;
+
+    private String pxxmmc;
+
+    private Integer pxxs;
+
+    private Date xxkssj;
+
+    private Date xxjssj;
+
+    private Integer cxts;
+
+    private Integer xss;
+
+    private String khqk;
+
+    private String ssjgmc;
+
+    private String xxdd;
+
+    private String xxnr;
+
+    private String remark;
+
+    private Date createTime;
+
+    private String createUserid;
+
+    private Date updateTime;
+
+    private String updateUserid;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id == null ? null : id.trim();
+    }
+
+    public String getRybm() {
+        return rybm;
+    }
+
+    public void setRybm(String rybm) {
+        this.rybm = rybm == null ? null : rybm.trim();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    public Integer getPxdxlx() {
+        return pxdxlx;
+    }
+
+    public void setPxdxlx(Integer pxdxlx) {
+        this.pxdxlx = pxdxlx;
+    }
+
+    public Integer getGender() {
+        return gender;
+    }
+
+    public void setGender(Integer gender) {
+        this.gender = gender;
+    }
+
+    public String getSfzh() {
+        return sfzh;
+    }
+
+    public void setSfzh(String sfzh) {
+        this.sfzh = sfzh == null ? null : sfzh.trim();
+    }
+
+    public String getGzbm() {
+        return gzbm;
+    }
+
+    public void setGzbm(String gzbm) {
+        this.gzbm = gzbm == null ? null : gzbm.trim();
+    }
+
+    public String getZw() {
+        return zw;
+    }
+
+    public void setZw(String zw) {
+        this.zw = zw == null ? null : zw.trim();
+    }
+
+    public String getPxxmmc() {
+        return pxxmmc;
+    }
+
+    public void setPxxmmc(String pxxmmc) {
+        this.pxxmmc = pxxmmc == null ? null : pxxmmc.trim();
+    }
+
+    public Integer getPxxs() {
+        return pxxs;
+    }
+
+    public void setPxxs(Integer pxxs) {
+        this.pxxs = pxxs;
+    }
+
+    public Date getXxkssj() {
+        return xxkssj;
+    }
+
+    public void setXxkssj(Date xxkssj) {
+        this.xxkssj = xxkssj;
+    }
+
+    public Date getXxjssj() {
+        return xxjssj;
+    }
+
+    public void setXxjssj(Date xxjssj) {
+        this.xxjssj = xxjssj;
+    }
+
+    public Integer getCxts() {
+        return cxts;
+    }
+
+    public void setCxts(Integer cxts) {
+        this.cxts = cxts;
+    }
+
+    public Integer getXss() {
+        return xss;
+    }
+
+    public void setXss(Integer xss) {
+        this.xss = xss;
+    }
+
+    public String getKhqk() {
+        return khqk;
+    }
+
+    public void setKhqk(String khqk) {
+        this.khqk = khqk == null ? null : khqk.trim();
+    }
+
+    public String getSsjgmc() {
+        return ssjgmc;
+    }
+
+    public void setSsjgmc(String ssjgmc) {
+        this.ssjgmc = ssjgmc == null ? null : ssjgmc.trim();
+    }
+
+    public String getXxdd() {
+        return xxdd;
+    }
+
+    public void setXxdd(String xxdd) {
+        this.xxdd = xxdd == null ? null : xxdd.trim();
+    }
+
+    public String getXxnr() {
+        return xxnr;
+    }
+
+    public void setXxnr(String xxnr) {
+        this.xxnr = xxnr == null ? null : xxnr.trim();
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCreateUserid() {
+        return createUserid;
+    }
+
+    public void setCreateUserid(String createUserid) {
+        this.createUserid = createUserid == null ? null : createUserid.trim();
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUpdateUserid() {
+        return updateUserid;
+    }
+
+    public void setUpdateUserid(String updateUserid) {
+        this.updateUserid = updateUserid == null ? null : updateUserid.trim();
+    }
+}

File diff suppressed because it is too large
+ 1748 - 0
src/main/java/com/ghsc/partybuild/model/PxTrainingRecordExample.java


+ 1 - 1
src/main/java/com/ghsc/partybuild/service/impl/PubDzzfcService.java

@@ -1,4 +1,4 @@
-package com.ghsc.partybuild.service.impl;
+package com.ghsc.partybuild.service;
 
 import com.ghsc.partybuild.vo.publicity.PubDzzfcVo;
 import com.github.pagehelper.PageInfo;

+ 21 - 0
src/main/java/com/ghsc/partybuild/service/PxTrainingRecordService.java

@@ -0,0 +1,21 @@
+package com.ghsc.partybuild.service;
+
+import com.ghsc.partybuild.vo.trian.PxTrainingRecordVo;
+import com.github.pagehelper.PageInfo;
+
+import java.util.Date;
+import java.util.List;
+
+public interface PxTrainingRecordService {
+    PageInfo<PxTrainingRecordVo> getList(int pageIndex, int pageSize, String id, String dzzdm, String xm,
+                                                         String sfzh, String pxxmmc,String pxxs, String pxdxlx,
+                                                         Date xxsjBegin, Date xxsjEnd);
+
+    PxTrainingRecordVo getById(String id);
+
+    int save(PxTrainingRecordVo data, String userId);
+
+    int delete(List<String> leaderTeamIdList);
+
+    List<PxTrainingRecordVo> importPxTrainingRecord(List<PxTrainingRecordVo> dataList, String userId);
+}

+ 1 - 1
src/main/java/com/ghsc/partybuild/service/impl/publicity/PubDzzfcServiceImpl.java

@@ -6,7 +6,7 @@ import com.ghsc.partybuild.model.CfDictionary;
 import com.ghsc.partybuild.model.PubDzzfc;
 import com.ghsc.partybuild.model.PubDzzfcExample;
 import com.ghsc.partybuild.service.DictionaryService;
-import com.ghsc.partybuild.service.impl.PubDzzfcService;
+import com.ghsc.partybuild.service.PubDzzfcService;
 import com.ghsc.partybuild.util.StringUtils;
 import com.ghsc.partybuild.vo.publicity.PubDzzfcVo;
 import com.github.pagehelper.PageHelper;

+ 251 - 0
src/main/java/com/ghsc/partybuild/service/impl/train/PxTrainingRecordServiceImpl.java

@@ -0,0 +1,251 @@
+package com.ghsc.partybuild.service.impl.train;
+
+import com.ghsc.partybuild.mapper.PxTrainingRecordCQuery;
+import com.ghsc.partybuild.mapper.PxTrainingRecordMapper;
+import com.ghsc.partybuild.model.*;
+import com.ghsc.partybuild.service.DictionaryService;
+import com.ghsc.partybuild.service.PxTrainingRecordService;
+import com.ghsc.partybuild.util.DateUtils;
+import com.ghsc.partybuild.util.StringUtils;
+import com.ghsc.partybuild.vo.trian.PxTrainingRecordVo;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service("PxTrainingRecordService")
+public class PxTrainingRecordServiceImpl implements PxTrainingRecordService {
+
+    @Autowired
+    private PxTrainingRecordMapper pxTrainingRecordMapper;
+    @Autowired
+    private PxTrainingRecordCQuery pxTrainingRecordCQuery;
+    @Autowired
+    private DictionaryService dictionaryService;
+    @Autowired
+    private StringUtils stringUtils;
+    @Autowired
+    private DateUtils dateUtils;
+
+    @Override
+    public PageInfo<PxTrainingRecordVo> getList(int pageIndex, int pageSize, String id, String dzzdm, String name,
+                                                          String sfzh, String pxxmmc, String pxxs, String pxdxlx,
+                                                          Date xxsjBegin, Date xxsjEnd) {
+        PageHelper.startPage(pageIndex, pageSize);
+        List<PxTrainingRecordVo> list = pxTrainingRecordCQuery.selectPxTrainingRecordList(id, dzzdm, name, sfzh, pxxmmc, pxxs, pxdxlx,xxsjBegin, xxsjEnd);
+
+        List<CfDictionary> pxdxlxTypeList =  dictionaryService.getDictionaryListByDicTypeKey("pxdxlxType");
+        List<CfDictionary> pxxsTypeList =  dictionaryService.getDictionaryListByDicTypeKey("pxxsType");
+        List<CfDictionary> dicSexList =  dictionaryService.getDictionaryListByDicTypeKey("dic_sex");
+
+        list.forEach(item -> {
+            item.setPxdxlxtypename(dictionaryService.getDicByKey(item.getPxdxlx(), pxdxlxTypeList).getDicvalue());
+            item.setPxxstypename(dictionaryService.getDicByKey(item.getPxxs(), pxxsTypeList).getDicvalue());
+            item.setGendername(dictionaryService.getDicByKey(item.getGender(), dicSexList).getDicvalue());
+        });
+
+        PageInfo<PxTrainingRecordVo> result = new PageInfo(list);
+        return result;
+    }
+
+    @Override
+    public PxTrainingRecordVo getById(String id) {
+        if (stringUtils.IsNullOrEmpty(id))
+            return null;
+
+        List<PxTrainingRecordVo> list = getList(1,999999, id, null, null, null, null, null, null, null, null).getList();
+
+        return list.size() > 0 ? list.get(0) : null;
+    }
+
+    @Override
+    public int save(PxTrainingRecordVo data, String userId) {
+        int result = 0;
+        PxTrainingRecord model = pxTrainingRecordMapper.selectByPrimaryKey(data.getId());
+        if (model == null) {
+            model = new PxTrainingRecord();
+            model.setId(data.getId());
+            model.setRybm(data.getRybm());
+            model.setName(data.getName());
+            model.setPxdxlx(data.getPxdxlx());
+            model.setGender(data.getGender());
+            model.setSfzh(data.getSfzh());
+            model.setGzbm(data.getGzbm());
+            model.setZw(data.getZw());
+            model.setPxxmmc(data.getPxxmmc());
+            model.setPxxs(data.getPxxs());
+            model.setXxkssj(data.getXxkssj());
+            model.setXxjssj(data.getXxjssj());
+            model.setCxts(data.getCxts());
+            model.setXss(data.getXss());
+            model.setKhqk(data.getKhqk());
+            model.setSsjgmc(data.getSsjgmc());
+            model.setXxdd(data.getXxdd());
+            model.setXxnr(data.getXxnr());
+            model.setRemark(data.getRemark());
+            model.setCreateTime(new Date());
+            model.setCreateUserid(userId);
+
+            result = pxTrainingRecordMapper.insert(model);
+        } else {
+            model.setRybm(data.getRybm());
+            model.setName(data.getName());
+            model.setPxdxlx(data.getPxdxlx());
+            model.setGender(data.getGender());
+            model.setSfzh(data.getSfzh());
+            model.setGzbm(data.getGzbm());
+            model.setZw(data.getZw());
+            model.setPxxmmc(data.getPxxmmc());
+            model.setPxxs(data.getPxxs());
+            model.setXxkssj(data.getXxkssj());
+            model.setXxjssj(data.getXxjssj());
+            model.setCxts(data.getCxts());
+            model.setXss(data.getXss());
+            model.setKhqk(data.getKhqk());
+            model.setSsjgmc(data.getSsjgmc());
+            model.setXxdd(data.getXxdd());
+            model.setXxnr(data.getXxnr());
+            model.setRemark(data.getRemark());
+            model.setUpdateTime(new Date());
+            model.setUpdateUserid(userId);
+
+            result = pxTrainingRecordMapper.updateByPrimaryKey(model);
+        }
+
+        return result;
+    }
+
+    @Override
+    public int delete(List<String> LeaderteamidList) {
+        PxTrainingRecordExample exp = new PxTrainingRecordExample();
+        exp.or().andIdIn(LeaderteamidList);
+
+        return pxTrainingRecordMapper.deleteByExample(exp);
+    }
+
+    @Override
+    public List<PxTrainingRecordVo> importPxTrainingRecord(List<PxTrainingRecordVo> dataList, String userId) {
+        return null;
+    }
+
+//
+//    public List<LeaderTeamVo> importLeaderTeam(int leaderTeamType, List<LeaderTeamVo> dataList, String userID) throws Exception {
+//        if (dataList.size() <= 0) {
+//            throw new Exception("请添加导入数据");
+//        }
+//        List<LeaderTeamVo> errorList = new ArrayList<>();
+//        List<LwLeaderteam> resultList = new ArrayList<>();
+//
+//        List<String> nameList = dataList.stream().filter(it -> !stringUtils.IsNullOrEmpty(it.getName())).map(it -> it.getName().trim()).collect(Collectors.toList());
+//
+//        List<CfDictionary> qualificationTypeList =  dictionaryService.getDictionaryListByDicTypeKey("QualificationType");
+//        List<CfDictionary> professionalTypeList =  dictionaryService.getDictionaryListByDicTypeKey("ProfessionalType");
+//        List<CfDictionary> educationTypeList =  dictionaryService.getDictionaryListByDicTypeKey("EducationType");
+//        List<CfDictionary> dicSexList =  dictionaryService.getDictionaryListByDicTypeKey("dic_sex");
+//        List<HashMap<String, Object>> nationList = partyDicService.getNationList();
+//
+//        List<LwLeaderteam> dbLwLeaderteamList = getLeaderteamList(nameList, leaderTeamType);
+//
+//        if (nameList.stream().distinct().count() != nameList.size()) {
+//            throw new Exception("导入数据存在相同姓名,请修改后重新导入!");
+//        }
+//
+//        for (int i = 0; i < dataList.size(); i++) {
+//            LeaderTeamVo item = dataList.get(i);
+//
+//            LwLeaderteam lwLeaderteam = dbLwLeaderteamList.stream().filter(it -> it.getName().equals(item.getName())).findFirst().orElse(new LwLeaderteam());
+//
+//            String errorInfo = "";
+//            Date birthDate = dateUtils.strToDateExt(item.getBirthdatestr());
+//            Date joinDate = dateUtils.strToDateExt(item.getJoindatestr());
+//            Date workDate = dateUtils.strToDateExt(item.getWorkdatestr());
+//            Date engageDate = dateUtils.strToDateExt(item.getEngagedatestr());
+//            Date nowPositionDate = dateUtils.strToDateExt(item.getNowpositiondatestr());
+//            Date samePositionDate = dateUtils.strToDateExt(item.getSamepositiondatestr());
+//
+//            item.setSex(dictionaryService.getDickeyByName(item.getSexname(), dicSexList));
+//            item.setEducationtype(dictionaryService.getDickeyByName(item.getEducationname(), educationTypeList));
+//            item.setQualificationtype(dictionaryService.getDickeyByName(item.getQualificationname(), qualificationTypeList));
+//            item.setProfessionaltype(dictionaryService.getDickeyByName(item.getProfessionalname(), professionalTypeList));
+//            if(!stringUtils.IsNullOrEmpty(item.getBirthplacename())){
+//                HashMap<String, Object> nationMap = nationList.stream().filter(x->stringUtils.valueOf(x.get("HZMC")).equals(item.getBirthplacename())).findFirst().orElse(null);
+//                item.setBirthplace(nationMap != null ? stringUtils.valueOf(nationMap.get("BM")) : "");
+//            }
+//
+//            if (stringUtils.IsNullOrEmpty(item.getName()))
+//                errorInfo += "请填写姓名!";
+//            if (stringUtils.IsNullOrEmpty(item.getDepartmentname()))
+//                errorInfo += "请填写机构!";
+//            if (stringUtils.IsNullOrEmpty(item.getPosition()))
+//                errorInfo += "请填写部门职务!";
+//            if(item.getSex() == null)
+//                errorInfo += "请根据单元格下拉选项选择性别!";
+//            if(item.getBirthplace() == null)
+//                errorInfo += "请根据单元格下拉选项选择民族!";
+//            if (stringUtils.IsNullOrEmpty(item.getNativeplace()))
+//                errorInfo += "请填写籍贯!";
+//            if (!stringUtils.IsNullOrEmpty(item.getBirthdatestr()) && birthDate == null)
+//                errorInfo += "出生年月格式错误!";
+//            if (!stringUtils.IsNullOrEmpty(item.getWorkdatestr()) && workDate == null)
+//                errorInfo += "参加工作时间格式错误!";
+//            if(item.getEducationtype() == null)
+//                errorInfo += "请根据单元格下拉选项选择学历!";
+//            if (stringUtils.IsNullOrEmpty(item.getParty()))
+//                errorInfo += "请填写党派!";
+//            if (!stringUtils.IsNullOrEmpty(item.getJoindatestr()) && joinDate == null)
+//                errorInfo += "加入时间格式错误!";
+//            if(item.getQualificationtype() == null)
+//                errorInfo += "请根据单元格下拉选项选择学位!";
+//            if (stringUtils.IsNullOrEmpty(item.getGraduationschoolmajor()))
+//                errorInfo += "请填写专业!";
+//            if (!stringUtils.IsNullOrEmpty(item.getNowpositiondatestr()) && nowPositionDate == null)
+//                errorInfo += "任行政现职时间格式错误!";
+//
+//            if (stringUtils.IsNullOrEmpty(errorInfo)) {
+//                lwLeaderteam.setName(item.getName());
+//                lwLeaderteam.setDepartmentname(item.getDepartmentname());
+//                lwLeaderteam.setPosition(item.getPosition());
+//                lwLeaderteam.setSex(item.getSex());
+//                lwLeaderteam.setBirthplace(item.getBirthplace());
+//                lwLeaderteam.setNativeplace(item.getNativeplace());
+//                lwLeaderteam.setBirthdate(birthDate);
+//                lwLeaderteam.setWorkdate(workDate);
+//                lwLeaderteam.setEducationtype(item.getEducationtype());
+//                lwLeaderteam.setParty(item.getParty());
+//                lwLeaderteam.setJoindate(joinDate);
+//                lwLeaderteam.setQualificationtype(item.getQualificationtype());
+//                lwLeaderteam.setGraduationschoolmajor(item.getGraduationschoolmajor());
+//                lwLeaderteam.setProfessionaltype(item.getProfessionaltype());
+//                lwLeaderteam.setEngagedate(engageDate);
+//                lwLeaderteam.setNowpositiondate(nowPositionDate);
+//                lwLeaderteam.setSamepositiondate(samePositionDate);
+//                lwLeaderteam.setWorkexperience(item.getWorkexperience());
+//                resultList.add(lwLeaderteam);
+//            } else {
+//                item.setErrorInfo("第" + (i + 1) + "行," + errorInfo);
+//                errorList.add(item);
+//            }
+//        }
+//
+//        if (errorList.size() <= 0) {
+//            resultList.forEach(item -> {
+//                if (dbLwLeaderteamList.stream().filter(it -> it.getName().equals(item.getName())).count() == 0) {
+//                    item.setLeaderteamid(UUID.randomUUID().toString());
+//                    item.setLeaderteamtype(leaderTeamType);
+//                    item.setCreateuserid(userID);
+//                    item.setCreatetime(new Date());
+//                    leaderteamMapper.insert(item);
+//                } else {
+//                    item.setUpdateuserid(userID);
+//                    item.setUpdatetime(new Date());
+//                    leaderteamMapper.updateByPrimaryKeyWithBLOBs(item);
+//                }
+//            });
+//        }
+//
+//        return errorList;
+//    }
+
+}

+ 13 - 0
src/main/java/com/ghsc/partybuild/vo/trian/PxTrainingRecordVo.java

@@ -0,0 +1,13 @@
+package com.ghsc.partybuild.vo.trian;
+
+import com.ghsc.partybuild.model.PxTrainingRecord;
+import lombok.Data;
+
+@Data
+public class PxTrainingRecordVo extends PxTrainingRecord {
+    public String dzzmc;
+    public String dzzdm;
+    public String gendername;
+    public String pxdxlxtypename;
+    public String pxxstypename;
+}

+ 1 - 0
src/main/resources/generatorConfig.xml

@@ -282,6 +282,7 @@
         <table schema="" tableName="pf_jljyxxyhd"></table>
         <table schema="" tableName="pf_jljyxxyhd_fb"></table>
         <table schema="" tableName="pub_dzzfc"></table>
+        <table schema="" tableName="px_training_record"></table>
 
         -->
     </context>

+ 74 - 0
src/main/resources/mapping/PxTrainingRecordCQuery.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ghsc.partybuild.mapper.PxTrainingRecordCQuery">
+    <resultMap id="BaseResultMap" type="com.ghsc.partybuild.vo.trian.PxTrainingRecordVo">
+        <id column="id" jdbcType="VARCHAR" property="id" />
+        <result column="rybm" jdbcType="VARCHAR" property="rybm" />
+        <result column="name" jdbcType="VARCHAR" property="name" />
+        <result column="pxdxlx" jdbcType="INTEGER" property="pxdxlx" />
+        <result column="gender" jdbcType="INTEGER" property="gender" />
+        <result column="sfzh" jdbcType="VARCHAR" property="sfzh" />
+        <result column="gzbm" jdbcType="VARCHAR" property="gzbm" />
+        <result column="zw" jdbcType="VARCHAR" property="zw" />
+        <result column="pxxmmc" jdbcType="VARCHAR" property="pxxmmc" />
+        <result column="pxxs" jdbcType="INTEGER" property="pxxs" />
+        <result column="xxkssj" jdbcType="DATE" property="xxkssj" />
+        <result column="xxjssj" jdbcType="DATE" property="xxjssj" />
+        <result column="cxts" jdbcType="INTEGER" property="cxts" />
+        <result column="xss" jdbcType="INTEGER" property="xss" />
+        <result column="khqk" jdbcType="VARCHAR" property="khqk" />
+        <result column="ssjgmc" jdbcType="VARCHAR" property="ssjgmc" />
+        <result column="xxdd" jdbcType="VARCHAR" property="xxdd" />
+        <result column="xxnr" jdbcType="VARCHAR" property="xxnr" />
+        <result column="remark" jdbcType="VARCHAR" property="remark" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="create_userid" jdbcType="VARCHAR" property="createUserid" />
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+        <result column="update_userid" jdbcType="VARCHAR" property="updateUserid" />
+        <result column="dzzmc" jdbcType="VARCHAR" property="dzzmc" />
+        <result column="dzzdm" jdbcType="VARCHAR" property="dzzdm" />
+    </resultMap>
+    <select id="selectPxTrainingRecordList" resultMap="BaseResultMap">
+        select ptr.id, ptr.rybm, ptr.name, ptr.pxdxlx, ptr.gender, ptr.sfzh, ptr.gzbm, ptr.zw, ptr.pxxmmc,
+                ptr.pxxs, ptr.xxkssj, ptr.xxjssj, ptr.cxts, ptr.xss, ptr.khqk, ptr.ssjgmc, ptr.xxdd, ptr.xxnr,
+                ptr.remark, ptr.create_time, ptr.create_userid, ptr.update_time, ptr.update_userid,
+                zz.dzzmc, zz.dzzdm
+        from px_training_record ptr
+        left join vm_ryjbxx vr on ptr.rybm = vr.RYBM
+        left join zz_zzqkxx zz on vr.SZDZBDM = zz.dzzdm
+        where 1=1
+        <if test="id != null and id != ''">
+            and ptr.id = #{id}
+        </if>
+        <if test="dzzdm != null and dzzdm != ''">
+            and ptr.leaderTeamType like concat( '%',#{dzzdm},'%')
+        </if>
+        <if test="name != null and name != ''">
+            and ptr.name like concat('%',#{name},'%')
+        </if>
+        <if test="sfzh != null and sfzh != ''">
+            and ptr.sfzh like concat('%',#{sfzh},'%')
+        </if>
+        <if test="pxxmmc != null and pxxmmc != ''">
+            and ptr.pxxmmc like concat('%',#{pxxmmc},'%')
+        </if>
+        <if test="pxxs != null and pxxs != ''">
+            and ptr.pxxs = #{pxxs}
+        </if>
+        <if test="pxdxlx != null and pxdxlx != ''">
+            and ptr.pxdxlx = #{pxdxlx}
+        </if>
+          <choose>
+              <when test="xxsjBegin!=null and xxsjEnd!=null ">
+                  and (ptr.xxkssj <![CDATA[ <= ]]> #{xxsjEnd} and ptr.xxjssj <![CDATA[ >= ]]> #{xxsjBegin})
+              </when>
+              <when test="xxsjBegin!=null">
+                  and ptr.xxkssj <![CDATA[ >= ]]> #{xxsjBegin}
+              </when>
+              <when test="xxsjEnd!=null">
+                  and ptr.xxjssj <![CDATA[ <= ]]> #{xxsjEnd}
+              </when>
+          </choose>
+        order by ptr.create_time desc
+    </select>
+</mapper>

+ 494 - 0
src/main/resources/mapping/PxTrainingRecordMapper.xml

@@ -0,0 +1,494 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ghsc.partybuild.mapper.PxTrainingRecordMapper">
+  <resultMap id="BaseResultMap" type="com.ghsc.partybuild.model.PxTrainingRecord">
+    <id column="id" jdbcType="VARCHAR" property="id" />
+    <result column="rybm" jdbcType="VARCHAR" property="rybm" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="pxdxlx" jdbcType="INTEGER" property="pxdxlx" />
+    <result column="gender" jdbcType="INTEGER" property="gender" />
+    <result column="sfzh" jdbcType="VARCHAR" property="sfzh" />
+    <result column="gzbm" jdbcType="VARCHAR" property="gzbm" />
+    <result column="zw" jdbcType="VARCHAR" property="zw" />
+    <result column="pxxmmc" jdbcType="VARCHAR" property="pxxmmc" />
+    <result column="pxxs" jdbcType="INTEGER" property="pxxs" />
+    <result column="xxkssj" jdbcType="DATE" property="xxkssj" />
+    <result column="xxjssj" jdbcType="DATE" property="xxjssj" />
+    <result column="cxts" jdbcType="INTEGER" property="cxts" />
+    <result column="xss" jdbcType="INTEGER" property="xss" />
+    <result column="khqk" jdbcType="VARCHAR" property="khqk" />
+    <result column="ssjgmc" jdbcType="VARCHAR" property="ssjgmc" />
+    <result column="xxdd" jdbcType="VARCHAR" property="xxdd" />
+    <result column="xxnr" jdbcType="VARCHAR" property="xxnr" />
+    <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="create_userid" jdbcType="VARCHAR" property="createUserid" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="update_userid" jdbcType="VARCHAR" property="updateUserid" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, rybm, name, pxdxlx, gender, sfzh, gzbm, zw, pxxmmc, pxxs, xxkssj, xxjssj, cxts, 
+    xss, khqk, ssjgmc, xxdd, xxnr, remark, create_time, create_userid, update_time, update_userid
+  </sql>
+  <select id="selectByExample" parameterType="com.ghsc.partybuild.model.PxTrainingRecordExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from px_training_record
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from px_training_record
+    where id = #{id,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from px_training_record
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.ghsc.partybuild.model.PxTrainingRecordExample">
+    delete from px_training_record
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.ghsc.partybuild.model.PxTrainingRecord">
+    insert into px_training_record (id, rybm, name, 
+      pxdxlx, gender, sfzh, 
+      gzbm, zw, pxxmmc, pxxs, 
+      xxkssj, xxjssj, cxts, xss, 
+      khqk, ssjgmc, xxdd, 
+      xxnr, remark, create_time, 
+      create_userid, update_time, update_userid
+      )
+    values (#{id,jdbcType=VARCHAR}, #{rybm,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, 
+      #{pxdxlx,jdbcType=INTEGER}, #{gender,jdbcType=INTEGER}, #{sfzh,jdbcType=VARCHAR}, 
+      #{gzbm,jdbcType=VARCHAR}, #{zw,jdbcType=VARCHAR}, #{pxxmmc,jdbcType=VARCHAR}, #{pxxs,jdbcType=INTEGER}, 
+      #{xxkssj,jdbcType=DATE}, #{xxjssj,jdbcType=DATE}, #{cxts,jdbcType=INTEGER}, #{xss,jdbcType=INTEGER}, 
+      #{khqk,jdbcType=VARCHAR}, #{ssjgmc,jdbcType=VARCHAR}, #{xxdd,jdbcType=VARCHAR}, 
+      #{xxnr,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{createUserid,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{updateUserid,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.ghsc.partybuild.model.PxTrainingRecord">
+    insert into px_training_record
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="rybm != null">
+        rybm,
+      </if>
+      <if test="name != null">
+        name,
+      </if>
+      <if test="pxdxlx != null">
+        pxdxlx,
+      </if>
+      <if test="gender != null">
+        gender,
+      </if>
+      <if test="sfzh != null">
+        sfzh,
+      </if>
+      <if test="gzbm != null">
+        gzbm,
+      </if>
+      <if test="zw != null">
+        zw,
+      </if>
+      <if test="pxxmmc != null">
+        pxxmmc,
+      </if>
+      <if test="pxxs != null">
+        pxxs,
+      </if>
+      <if test="xxkssj != null">
+        xxkssj,
+      </if>
+      <if test="xxjssj != null">
+        xxjssj,
+      </if>
+      <if test="cxts != null">
+        cxts,
+      </if>
+      <if test="xss != null">
+        xss,
+      </if>
+      <if test="khqk != null">
+        khqk,
+      </if>
+      <if test="ssjgmc != null">
+        ssjgmc,
+      </if>
+      <if test="xxdd != null">
+        xxdd,
+      </if>
+      <if test="xxnr != null">
+        xxnr,
+      </if>
+      <if test="remark != null">
+        remark,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="createUserid != null">
+        create_userid,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+      <if test="updateUserid != null">
+        update_userid,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="rybm != null">
+        #{rybm,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null">
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="pxdxlx != null">
+        #{pxdxlx,jdbcType=INTEGER},
+      </if>
+      <if test="gender != null">
+        #{gender,jdbcType=INTEGER},
+      </if>
+      <if test="sfzh != null">
+        #{sfzh,jdbcType=VARCHAR},
+      </if>
+      <if test="gzbm != null">
+        #{gzbm,jdbcType=VARCHAR},
+      </if>
+      <if test="zw != null">
+        #{zw,jdbcType=VARCHAR},
+      </if>
+      <if test="pxxmmc != null">
+        #{pxxmmc,jdbcType=VARCHAR},
+      </if>
+      <if test="pxxs != null">
+        #{pxxs,jdbcType=INTEGER},
+      </if>
+      <if test="xxkssj != null">
+        #{xxkssj,jdbcType=DATE},
+      </if>
+      <if test="xxjssj != null">
+        #{xxjssj,jdbcType=DATE},
+      </if>
+      <if test="cxts != null">
+        #{cxts,jdbcType=INTEGER},
+      </if>
+      <if test="xss != null">
+        #{xss,jdbcType=INTEGER},
+      </if>
+      <if test="khqk != null">
+        #{khqk,jdbcType=VARCHAR},
+      </if>
+      <if test="ssjgmc != null">
+        #{ssjgmc,jdbcType=VARCHAR},
+      </if>
+      <if test="xxdd != null">
+        #{xxdd,jdbcType=VARCHAR},
+      </if>
+      <if test="xxnr != null">
+        #{xxnr,jdbcType=VARCHAR},
+      </if>
+      <if test="remark != null">
+        #{remark,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createUserid != null">
+        #{createUserid,jdbcType=VARCHAR},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateUserid != null">
+        #{updateUserid,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.ghsc.partybuild.model.PxTrainingRecordExample" resultType="java.lang.Long">
+    select count(*) from px_training_record
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update px_training_record
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=VARCHAR},
+      </if>
+      <if test="record.rybm != null">
+        rybm = #{record.rybm,jdbcType=VARCHAR},
+      </if>
+      <if test="record.name != null">
+        name = #{record.name,jdbcType=VARCHAR},
+      </if>
+      <if test="record.pxdxlx != null">
+        pxdxlx = #{record.pxdxlx,jdbcType=INTEGER},
+      </if>
+      <if test="record.gender != null">
+        gender = #{record.gender,jdbcType=INTEGER},
+      </if>
+      <if test="record.sfzh != null">
+        sfzh = #{record.sfzh,jdbcType=VARCHAR},
+      </if>
+      <if test="record.gzbm != null">
+        gzbm = #{record.gzbm,jdbcType=VARCHAR},
+      </if>
+      <if test="record.zw != null">
+        zw = #{record.zw,jdbcType=VARCHAR},
+      </if>
+      <if test="record.pxxmmc != null">
+        pxxmmc = #{record.pxxmmc,jdbcType=VARCHAR},
+      </if>
+      <if test="record.pxxs != null">
+        pxxs = #{record.pxxs,jdbcType=INTEGER},
+      </if>
+      <if test="record.xxkssj != null">
+        xxkssj = #{record.xxkssj,jdbcType=DATE},
+      </if>
+      <if test="record.xxjssj != null">
+        xxjssj = #{record.xxjssj,jdbcType=DATE},
+      </if>
+      <if test="record.cxts != null">
+        cxts = #{record.cxts,jdbcType=INTEGER},
+      </if>
+      <if test="record.xss != null">
+        xss = #{record.xss,jdbcType=INTEGER},
+      </if>
+      <if test="record.khqk != null">
+        khqk = #{record.khqk,jdbcType=VARCHAR},
+      </if>
+      <if test="record.ssjgmc != null">
+        ssjgmc = #{record.ssjgmc,jdbcType=VARCHAR},
+      </if>
+      <if test="record.xxdd != null">
+        xxdd = #{record.xxdd,jdbcType=VARCHAR},
+      </if>
+      <if test="record.xxnr != null">
+        xxnr = #{record.xxnr,jdbcType=VARCHAR},
+      </if>
+      <if test="record.remark != null">
+        remark = #{record.remark,jdbcType=VARCHAR},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.createUserid != null">
+        create_userid = #{record.createUserid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.updateTime != null">
+        update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.updateUserid != null">
+        update_userid = #{record.updateUserid,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update px_training_record
+    set id = #{record.id,jdbcType=VARCHAR},
+      rybm = #{record.rybm,jdbcType=VARCHAR},
+      name = #{record.name,jdbcType=VARCHAR},
+      pxdxlx = #{record.pxdxlx,jdbcType=INTEGER},
+      gender = #{record.gender,jdbcType=INTEGER},
+      sfzh = #{record.sfzh,jdbcType=VARCHAR},
+      gzbm = #{record.gzbm,jdbcType=VARCHAR},
+      zw = #{record.zw,jdbcType=VARCHAR},
+      pxxmmc = #{record.pxxmmc,jdbcType=VARCHAR},
+      pxxs = #{record.pxxs,jdbcType=INTEGER},
+      xxkssj = #{record.xxkssj,jdbcType=DATE},
+      xxjssj = #{record.xxjssj,jdbcType=DATE},
+      cxts = #{record.cxts,jdbcType=INTEGER},
+      xss = #{record.xss,jdbcType=INTEGER},
+      khqk = #{record.khqk,jdbcType=VARCHAR},
+      ssjgmc = #{record.ssjgmc,jdbcType=VARCHAR},
+      xxdd = #{record.xxdd,jdbcType=VARCHAR},
+      xxnr = #{record.xxnr,jdbcType=VARCHAR},
+      remark = #{record.remark,jdbcType=VARCHAR},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      create_userid = #{record.createUserid,jdbcType=VARCHAR},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      update_userid = #{record.updateUserid,jdbcType=VARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.ghsc.partybuild.model.PxTrainingRecord">
+    update px_training_record
+    <set>
+      <if test="rybm != null">
+        rybm = #{rybm,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null">
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="pxdxlx != null">
+        pxdxlx = #{pxdxlx,jdbcType=INTEGER},
+      </if>
+      <if test="gender != null">
+        gender = #{gender,jdbcType=INTEGER},
+      </if>
+      <if test="sfzh != null">
+        sfzh = #{sfzh,jdbcType=VARCHAR},
+      </if>
+      <if test="gzbm != null">
+        gzbm = #{gzbm,jdbcType=VARCHAR},
+      </if>
+      <if test="zw != null">
+        zw = #{zw,jdbcType=VARCHAR},
+      </if>
+      <if test="pxxmmc != null">
+        pxxmmc = #{pxxmmc,jdbcType=VARCHAR},
+      </if>
+      <if test="pxxs != null">
+        pxxs = #{pxxs,jdbcType=INTEGER},
+      </if>
+      <if test="xxkssj != null">
+        xxkssj = #{xxkssj,jdbcType=DATE},
+      </if>
+      <if test="xxjssj != null">
+        xxjssj = #{xxjssj,jdbcType=DATE},
+      </if>
+      <if test="cxts != null">
+        cxts = #{cxts,jdbcType=INTEGER},
+      </if>
+      <if test="xss != null">
+        xss = #{xss,jdbcType=INTEGER},
+      </if>
+      <if test="khqk != null">
+        khqk = #{khqk,jdbcType=VARCHAR},
+      </if>
+      <if test="ssjgmc != null">
+        ssjgmc = #{ssjgmc,jdbcType=VARCHAR},
+      </if>
+      <if test="xxdd != null">
+        xxdd = #{xxdd,jdbcType=VARCHAR},
+      </if>
+      <if test="xxnr != null">
+        xxnr = #{xxnr,jdbcType=VARCHAR},
+      </if>
+      <if test="remark != null">
+        remark = #{remark,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createUserid != null">
+        create_userid = #{createUserid,jdbcType=VARCHAR},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateUserid != null">
+        update_userid = #{updateUserid,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.ghsc.partybuild.model.PxTrainingRecord">
+    update px_training_record
+    set rybm = #{rybm,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      pxdxlx = #{pxdxlx,jdbcType=INTEGER},
+      gender = #{gender,jdbcType=INTEGER},
+      sfzh = #{sfzh,jdbcType=VARCHAR},
+      gzbm = #{gzbm,jdbcType=VARCHAR},
+      zw = #{zw,jdbcType=VARCHAR},
+      pxxmmc = #{pxxmmc,jdbcType=VARCHAR},
+      pxxs = #{pxxs,jdbcType=INTEGER},
+      xxkssj = #{xxkssj,jdbcType=DATE},
+      xxjssj = #{xxjssj,jdbcType=DATE},
+      cxts = #{cxts,jdbcType=INTEGER},
+      xss = #{xss,jdbcType=INTEGER},
+      khqk = #{khqk,jdbcType=VARCHAR},
+      ssjgmc = #{ssjgmc,jdbcType=VARCHAR},
+      xxdd = #{xxdd,jdbcType=VARCHAR},
+      xxnr = #{xxnr,jdbcType=VARCHAR},
+      remark = #{remark,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      create_userid = #{createUserid,jdbcType=VARCHAR},
+      update_time = #{updateTime,jdbcType=TIMESTAMP},
+      update_userid = #{updateUserid,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 36 - 0
src/main/resources/static/app/main/app.js

@@ -3066,6 +3066,42 @@
                     return $ocLazyLoad.load('../main/leaderwork/leaderteam/detail.js?' + window.sysVersion);
                 }]
             }
+        }).state("home.PxTrainingRecordList", {
+            url: "PxTrainingRecordList",
+            templateUrl: "../main/train/trainingrecord/list.html?" + window.sysVersion,
+            controller: "PxTrainingRecordListCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/train/trainingrecord/list.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.PxTrainingRecordEdit", {
+            url: "PxTrainingRecordEdit",
+            templateUrl: "../main/train/trainingrecord/edit.html?" + window.sysVersion,
+            controller: "PxTrainingRecordEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/train/trainingrecord/edit.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.PxTrainingRecordAdd", {
+            url: "PxTrainingRecordAdd",
+            templateUrl: "../main/train/trainingrecord/edit.html?" + window.sysVersion,
+            controller: "PxTrainingRecordEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/train/trainingrecord/edit.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.PxTrainingRecordDetail", {
+            url: "PxTrainingRecordDetail",
+            templateUrl: "../main/train/trainingrecord/detail.html?" + window.sysVersion,
+            controller: "PxTrainingRecordDetailCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/train/trainingrecord/detail.js?' + window.sysVersion);
+                }]
+            }
         }).state("home.pf_meetingList1", {
             url: "pf_meetingList1",
             params: { "partyLifeMeetingType": 1 },

+ 1 - 1
src/main/resources/static/app/main/leaderwork/leaderteam/edit.html

@@ -54,7 +54,7 @@
                                           class="error">必填.</span>
                                 </td>
                                 <th>籍贯<span style="color: red">*</span></th>
-                                <td ng-class="{ 'has-error' : this.nativeplace.position.$invalid &&  this.editForm.$submitted}">
+                                <td ng-class="{ 'has-error' : this.editForm.nativeplace.$invalid &&  this.editForm.$submitted}">
                                     <input type="text" class="form-control" name="nativeplace"
                                            autocomplete="off" autoclose="true"
                                            ng-model="dataModel.nativeplace" ng-required="true"/>

+ 70 - 0
src/main/resources/static/app/main/train/trainingRecord/detail.html

@@ -0,0 +1,70 @@
+<titlemenu></titlemenu>
+<div class="dj-card">
+    <div class="dj-body" activate-input activate-select>
+        <div class="card">
+                <div class="dj-formtable">
+                    <table class="dj-table dj-table3">
+                        <tr>
+                            <th>培训对象类型</th>
+                            <td>{{dataModel.pxdxlxtypename}}</td>
+                            <th>姓名</th>
+                            <td>{{dataModel.name}}</td>
+                            <th>性别</th>
+                            <td>{{dataModel.gendername}}</td>
+                        </tr>
+                        <tr>
+                            <th>身份证号</th>
+                            <td>{{dataModel.sfzh}}</td>
+                            <th>工作部门</th>
+                            <td>{{dataModel.gzbm}}</td>
+                            <th>职务</th>
+                            <td>{{dataModel.zw}}</td>
+                        </tr>
+                        <tr>
+                            <th>培训项目名称</th>
+                            <td>{{dataModel.pxxmmc}}</td>
+                            <th>培训形式</th>
+                            <td>{{dataModel.pxxstypename}}</td>
+                            <th>参训天数</th>
+                            <td>{{dataModel.cxts}}</td>
+                        </tr>
+                        <tr>
+                            <th>学习开始时间</th>
+                            <td>{{dataModel.xxkssj|date:'yyyy-MM-dd'}}</td>
+                            <th>学习结束时间</th>
+                            <td>{{dataModel.xxjssj|date:'yyyy-MM-dd'}}</td>
+                            <th>学时数</th>
+                            <td>{{dataModel.xss}}</td>
+                        </tr>
+                        <tr>
+                            <th>考核情况</th>
+                            <td colspan="2">{{dataModel.khqk}}</td>
+                            <th>实施机构名称</th>
+                            <td colspan="2">{{dataModel.ssjgmc}}</td>
+                        </tr>
+                        <tr>
+                            <th>学习地点</th>
+                            <td colspan="5">
+                                {{dataModel.xxdd}}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th>学习内容</th>
+                            <td colspan="5">
+                                {{dataModel.xxnr}}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th>备注</th>
+                            <td colspan="5">
+                                {{dataModel.remark}}
+                            </td>
+                        </tr>
+                    </table>
+                </div>
+                <div class="form_foot">
+                    <button type="button" class="btn btn-default" ng-click="pagechange()">关闭</button>
+                </div>
+        </div>
+    </div>
+</div>

+ 26 - 0
src/main/resources/static/app/main/train/trainingRecord/detail.js

@@ -0,0 +1,26 @@
+(function ($app) {
+    $app.module('gtPartyApp').controller('PxTrainingRecordDetailCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
+        $scope.editParams = $bsRouterState.$params($scope);
+        $scope.dataModel = {};
+
+        $scope.getData = function () {
+            $http
+            ({
+                method: 'get', url: "../../api/train/trainingrecord/getById",
+                params: {
+                    'id': $scope.editParams.id
+                }
+            }).then(function (result) {
+                $scope.dataModel = result.data.item;
+            }, function (resp) {
+                $scope.showMsg('错误', '服务器错误:' + resp.data);
+            });
+        };
+
+        $scope.getData();
+
+        $scope.pagechange = function () {
+            $bsRouterState.$closeTab($scope);
+        };
+    });
+})(angular);

+ 176 - 0
src/main/resources/static/app/main/train/trainingRecord/edit.html

@@ -0,0 +1,176 @@
+<titlemenu></titlemenu>
+<div class="dj-card">
+    <div class="dj-body" activate-input activate-select>
+        <div class="card">
+            <form class="form-horizontal" role="form" id="trainingRecordEditForm"
+                      name="trainingRecordEditForm" ng-submit="save(trainingRecordEditForm.$valid)" novalidate>
+                    <div class="dj-formtable">
+                        <table class="dj-table dj-table3">
+                            <tr>
+<!--                                <th>培训对象类型<span style="color: red">*</span></th>-->
+<!--                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.pxdxlx.$invalid &&  this.trainingRecordEditForm.$submitted}">-->
+<!--                                    <select class="form-control show-tick" ng-model="dataModel.pxdxlx"-->
+<!--                                            ng-options="type.dickey as type.dicvalue for type in pxdxlxTypeList"-->
+<!--                                            class="form-control" ng-required="true" name="pxdxlx">-->
+<!--                                        <option value="" selected>&#45;&#45;请选择&#45;&#45;</option>-->
+<!--                                    </select>-->
+<!--                                    <span ng-show="this.trainingRecordEditForm.pxdxlx.$invalid &&  this.trainingRecordEditForm.$submitted"-->
+<!--                                          class="error">必填.</span>-->
+<!--                                </td>-->
+                                <th>姓名<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.name.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <div class="input-group input-group-search">
+                                        <input name="name" type="text" ng-model="dataModel.name"
+                                               class="form-control" ng-required="true" ng-disabled="nameDisabled"/>
+                                        <span class="input-group-addon" data-dataoptions="selectUserlist" title="选择成员" bsselectdata-pro ng-click="nameDisabled=true">
+                                            <i class="material-icons small">search</i>
+                                        </span>
+                                        <span class="input-group-addon" ng-click="nameDisabled=false;dataModel.name='';dataModel.rybm='';$event.stopPropagation();">
+                                            <i class="material-icons small">clear</i>
+                                        </span>
+                                    </div>
+                                    <span ng-show="this.trainingRecordEditForm.name.$invalid &&  this.trainingRecordEditForm.$submitted" class="error">必填.</span>
+                                </td>
+                                <th>性别<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.gender.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <select class="form-control show-tick" ng-model="dataModel.gender"
+                                            ng-options="type.dickey as type.dicvalue for type in sexList"
+                                            class="form-control" ng-required="true" name="gender">
+                                        <option value="" selected>--请选择--</option>
+                                    </select>
+                                    <span ng-show="this.trainingRecordEditForm.gender.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>身份证号<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.sfzh.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input type="text" class="form-control" name="sfzh"
+                                           autocomplete="off" autoclose="true" maxlength="18"
+                                           ng-model="dataModel.sfzh" ng-required="true"/>
+                                    <span ng-show="this.trainingRecordEditForm.sfzh.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>工作部门<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.gzbm.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input type="text" class="form-control" name="gzbm"
+                                           autocomplete="off" autoclose="true"
+                                           ng-model="dataModel.gzbm" ng-required="true"/>
+                                    <span ng-show="this.trainingRecordEditForm.gzbm.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>职务<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.zw.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input type="text" class="form-control" name="zw"
+                                           autocomplete="off" autoclose="true"
+                                           ng-model="dataModel.zw" ng-required="true"/>
+                                    <span ng-show="this.trainingRecordEditForm.zw.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>培训项目名称<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.pxxmmc.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input type="text" class="form-control" name="pxxmmc"
+                                           autocomplete="off" autoclose="true"
+                                           ng-model="dataModel.pxxmmc" ng-required="true"/>
+                                    <span ng-show="this.trainingRecordEditForm.pxxmmc.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+<!--                                <th>培训形式<span style="color: red">*</span></th>-->
+<!--                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.pxxs.$invalid &&  this.trainingRecordEditForm.$submitted}">-->
+<!--                                    <select class="form-control show-tick" ng-model="dataModel.pxxs"-->
+<!--                                            ng-options="type.dickey as type.dicvalue for type in pxxsTypeList"-->
+<!--                                            class="form-control" ng-required="true" name="pxxs">-->
+<!--                                        <option value="" selected>&#45;&#45;请选择&#45;&#45;</option>-->
+<!--                                    </select>-->
+<!--                                    <span ng-show="this.trainingRecordEditForm.pxxs.$invalid &&  this.trainingRecordEditForm.$submitted"-->
+<!--                                          class="error">必填.</span>-->
+<!--                                </td>-->
+                                <th>参训天数<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.cxts.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input type="number" class="form-control" name="cxts"
+                                           autocomplete="off" autoclose="true" min="0" step="1"
+                                           ng-model="dataModel.cxts" ng-required="true"/>
+                                    <span ng-show="this.trainingRecordEditForm.cxts.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>学习开始时间<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.xxkssj.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input name="xxkssj" class="form-control"
+                                           autocomplete="off"
+                                           autoclose="true" ng-required="true"
+                                           data-date-format="yyyy-MM-dd" data-date-type="date"
+                                           ng-model="dataModel.xxkssj"
+                                           placeholder="" bs-datepicker/>
+                                    <span ng-show="this.trainingRecordEditForm.xxkssj.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>学习结束时间<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.xxjssj.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input name="xxjssj" class="form-control"
+                                           autocomplete="off"
+                                           autoclose="true" ng-required="true"
+                                           data-date-format="yyyy-MM-dd" data-date-type="date"
+                                           ng-model="dataModel.xxjssj"
+                                           placeholder="" bs-datepicker/>
+                                    <span ng-show="this.trainingRecordEditForm.xxjssj.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>学时数<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.trainingRecordEditForm.xss.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input type="number" class="form-control" name="xss"
+                                           autocomplete="off" autoclose="true" min="0" step="1"
+                                           ng-model="dataModel.xss" ng-required="true"/>
+                                    <span ng-show="this.trainingRecordEditForm.xss.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>考核情况<span style="color: red">*</span></th>
+                                <td colspan="2" ng-class="{ 'has-error' : this.trainingRecordEditForm.khqk.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input type="text" class="form-control" name="khqk"
+                                           autocomplete="off" autoclose="true"
+                                           ng-model="dataModel.khqk" ng-required="true"/>
+                                    <span ng-show="this.trainingRecordEditForm.khqk.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>实施机构名称<span style="color: red">*</span></th>
+                                <td colspan="2" ng-class="{ 'has-error' : this.trainingRecordEditForm.ssjgmc.$invalid &&  this.trainingRecordEditForm.$submitted}">
+                                    <input type="text" class="form-control" name="ssjgmc"
+                                           autocomplete="off" autoclose="true"
+                                           ng-model="dataModel.ssjgmc" ng-required="true"/>
+                                    <span ng-show="this.trainingRecordEditForm.ssjgmc.$invalid &&  this.trainingRecordEditForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>学习地点</th>
+                                <td colspan="5">
+                                    <textarea class="form-control"  ng-model="dataModel.xxdd" rows="2"></textarea>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>学习内容</th>
+                                <td colspan="5">
+                                    <textarea class="form-control"  ng-model="dataModel.xxnr" rows="3"></textarea>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>备注</th>
+                                <td colspan="5">
+                                    <textarea class="form-control"  ng-model="dataModel.remark" rows="3"></textarea>
+                                </td>
+                            </tr>
+                        </table>
+                    </div>
+                    <div class="form_foot">
+                        <button type="button" class="btn btn-default" ng-click="pagechange()">取消</button>
+                        <button type="submit" class="btn btn-primary" form="trainingRecordEditForm">保存</button>
+                    </div>
+                </form>
+        </div>
+    </div>
+</div>

+ 149 - 0
src/main/resources/static/app/main/train/trainingRecord/edit.js

@@ -0,0 +1,149 @@
+(function ($app) {
+    $app.module('gtPartyApp').controller('PxTrainingRecordEditCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
+        $scope.editParams = $bsRouterState.$params($scope);
+        $scope.dataModel = {};
+        $scope.sexList = [];
+        $scope.pxxsTypeList = [];
+        $scope.pxdxlxTypeList = [];
+        $scope.nameDisabled = false;//
+
+        $scope.selectUserlist = {
+            url: '../../api/partyUser/getPartyUserList',
+            title: '人员选择',
+            isMulti: false,
+            selectData: {xm: '姓名', szdzb: '所在组织架构'},
+            columns: {XM: '姓名', XBMC: '性别', JG: '籍贯', DZZMC: '所在组织架构'},
+            selectLabelKey: 'XM',
+            selectValuekey: 'RYJBXXBS',
+            selectedValueData: '',
+            selectedLabeData: '',
+            selectedJData: [],
+            selectParams: {
+                dzzdm: "",
+                removeUserRybm: ''
+            },
+            onSelect: function (value, item) {
+                // $scope.dataModel.sfzh = item.SFZH ? item.SFZH : '';
+                // $scope.dataModel.gender = item.XB ? parseInt(item.XB) : '';
+                // $scope.dataModel.name = item.XM;
+                // $scope.dataModel.rybm = item.RYBM;
+                // $scope.dataModel.zw = item.ZWMC ? item.ZWMC : '';
+                $scope.dataModel.name = item.XM;
+                $scope.dataModel.gender = 1;
+                            console.log(item);
+                            console.log($scope.dataModel);
+            }
+        };
+        // $scope.$watch('selectUserlist.selectedValueData', function (newVal) {
+        //     if (newVal != '' && newVal != undefined) {
+        //         $http({
+        //             method: 'get',
+        //             url: '../../api/partyUser/getPartyUserList',
+        //             params: {
+        //                 userIds: newVal,
+        //                 pageindex: 1,
+        //                 pagesize: 10000
+        //             }
+        //         }).then(function (result) {
+        //             let item = result.data.item.list[0];
+        //             $scope.dataModel.sfzh = item.SFZH;
+        //             // $scope.dataModel.gender = item.XB ? parseInt(item.XB) : '';
+        //             $scope.dataModel.name = item.XM;
+        //             $scope.dataModel.rybm = item.RYBM;
+        //             $scope.dataModel.zw = item.ZWMC;
+        //             $scope.dataModel.pxdxlx = 3;
+        //             $scope.dataModel.gender = 1;
+        //             console.log(item)
+        //             console.log($scope.dataModel)
+        //         }, function (resp) {
+        //             $loading.hide();
+        //             $scope.showMsg('错误', '服务器错误');
+        //         });
+        //     }
+        // });
+
+        $scope.getData = function () {
+            $http
+            ({
+                method: 'get', url: "../../api/train/trainingrecord/getById",
+                params: {
+                    'id': $scope.editParams.id
+                }
+            }).then(function (result) {
+                $scope.dataModel = result.data.item;
+                $scope.getSexList();
+                $scope.getPxxsTypeList();
+                $scope.getPxdxlxTypeList();
+            }, function (resp) {
+                $scope.showMsg('错误', '服务器错误:' + resp.data);
+            });
+        };
+
+        $scope.save = function (isflag) {
+            if (isflag) {
+                $loading.show();
+                $http({
+                    method: "post",
+                    url: "../../api/train/trainingrecord/save",
+                    data: $scope.dataModel
+                }).then(function (result) {
+                    $loading.hide();
+                    if (result.data.success) {
+                        $scope.showMsg('成功', "操作成功");
+                        //重新刷新列表
+                        $scope.pagechange();
+                        $scope.$emit("tabReloadData", {name: 'PxTrainingRecordListCtrl', data: 1});
+                    } else {
+                        $scope.showMsg('失败', result.data.msg);
+                    }
+                }, function (resp) {
+                    $loading.hide();
+                    $scope.showMsg('错误', '服务器错误:' + resp.data);
+                });
+            }
+        };
+
+        $scope.getSexList = function () {
+            $http({
+                method: 'get',
+                url: '../../api/dictionary/getDictionaryListByDicTypeKey',
+                params: {
+                    dicTypeKey: 'dic_sex'
+                }
+            }).then(function (result) {
+                $scope.sexList = result.data;
+            });
+        };
+
+        $scope.getPxdxlxTypeList = function () {
+            $http({
+                method: 'get',
+                url: '../../api/dictionary/getDictionaryListByDicTypeKey',
+                params: {
+                    dicTypeKey: 'pxdxlxType'
+                }
+            }).then(function (result) {
+                $scope.pxdxlxTypeList = result.data;
+            });
+        };
+
+        $scope.getPxxsTypeList = function () {
+            $http({
+                method: 'get',
+                url: '../../api/dictionary/getDictionaryListByDicTypeKey',
+                params: {
+                    dicTypeKey: 'pxxsType'
+                }
+            }).then(function (result) {
+                $scope.pxxsTypeList = result.data;
+            });
+        };
+
+        $scope.pagechange = function () {
+            $bsRouterState.$closeTab($scope);
+        };
+
+        $scope.getData();
+
+    });
+})(angular);

+ 247 - 0
src/main/resources/static/app/main/train/trainingRecord/list.html

@@ -0,0 +1,247 @@
+<titlemenu></titlemenu>
+<div class="dj-list">
+    <div class="dj-list-body">
+<!--        <div party-tree data-selectdzzdm="treeparams.selectdzzdm" data-selectdzzmc="treeparams.selectdzzmc"-->
+<!--             data-defaultselected="treeparams.defaultselected" data-isunfold="treeparams.isunfold"></div>-->
+        <div class="dj-list-content">
+            <div class="card">
+                <div activate-input activate-select class="header search-header">
+<!--                    <div fold-partytree data-isunfold="treeparams.isunfold"></div>-->
+                    <div class="search-param-panel">
+                        <div class="search-input">
+                            <form class="form-horizontal">
+                                <div class="row clearfix form-inline">
+<!--                                    <div class="col-lg-2 col-md-2 dj-label">-->
+<!--                                        <label>当前选中组织</label>-->
+<!--                                    </div>-->
+<!--                                    <div class="col-lg-2 col-md-2">-->
+<!--                                        <div class="form-group">-->
+<!--                                            <div class="form-line">-->
+<!--                                                <div class="input-group input-group-search">-->
+<!--                                                    <input name="selectdzzmc" type="text" style="min-width: 90px"-->
+<!--                                                           ng-model="treeparams.selectdzzmc" class="form-control"-->
+<!--                                                           ng-disabled="true"/>-->
+<!--                                                    <span class="input-group-addon"-->
+<!--                                                          ng-click="setisunfold()">选择</span>-->
+<!--                                                </div>-->
+<!--                                            </div>-->
+<!--                                        </div>-->
+<!--                                    </div>-->
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>姓名</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="name" class="form-control" type="text"
+                                                       ng-keypress="($event.which === 13)?search():0"
+                                                       ng-model="selectparams.name"
+                                                       placeholder=""/>
+
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>身份证号</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="sfzh" class="form-control" type="text"
+                                                       ng-keypress="($event.which === 13)?search():0"
+                                                       ng-model="selectparams.sfzh"
+                                                       placeholder=""/>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>培训项目名称</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="pxxmmc" class="form-control" type="text"
+                                                       ng-keypress="($event.which === 13)?search():0"
+                                                       ng-model="selectparams.pxxmmc"
+                                                       placeholder=""/>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="row clearfix form-inline" ng-if="isShow">
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>培训形式</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <select class="form-control show-tick" ng-model="selectparams.pxxs"
+                                                        ng-options="type.dickey as type.dicvalue for type in pxxsTypeList"
+                                                        class="form-control"
+                                                        name="pxxs" ng-change="search()">
+                                                    <option value="" selected>--全部--</option>
+                                                </select>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>培训对象类型</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <select class="form-control show-tick" ng-model="selectparams.pxdxlx"
+                                                        ng-options="type.dickey as type.dicvalue for type in pxdxlxTypeList"
+                                                        class="form-control"
+                                                        name="pxdxlx" ng-change="search()">
+                                                    <option value="" selected>--全部--</option>
+                                                </select>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>学习时间</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="xxsjBegin" class="form-control fm-ct-first"
+                                                       autocomplete="off"
+                                                       autoclose="true"
+                                                       data-date-format="yyyy-MM-dd" data-date-type="date"
+                                                       ng-model="selectparams.xxsjBegin"
+                                                       ng-change="search()"
+                                                       placeholder="" bs-datepicker/>
+                                                <input name="xxsjEnd" class="form-control fm-ct-last"
+                                                       autocomplete="off"
+                                                       autoclose="true"
+                                                       data-date-format="yyyy-MM-dd" data-date-type="date"
+                                                       ng-model="selectparams.xxsjEnd"
+                                                       ng-change="search()"
+                                                       placeholder="" bs-datepicker/>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </form>
+                        </div>
+                        <div class="search-btn" style="margin-right: 20px;">
+                            <div style="min-width: 13em">
+                                <span class="moreSpan" ng-click="isShowClick()" style='padding-right:1em;cursor:pointer;'>
+                                    {{moreTxt}}<i class="material-icons" style="position: relative;top:7px;">{{isShow ? 'expand_less' : 'expand_more'}}</i></span>
+                                <button class="btn btn-default1"
+                                        ng-click="search()">查询
+                                </button>
+                                <button class="btn btn-default1"
+                                        ng-click="reset()">重置
+                                </button>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="search-btn" style="margin-right: 20px;">
+                        <div style="float: right">
+                            <button class="btn btn-default1"
+                                    ng-click="add()">新增
+                            </button>
+                            <button class="btn btn-default1"
+                                    ng-click="delete()">删除
+                            </button>
+                            <button class="btn btn-default1"
+                                    ng-click="import()">导入
+                            </button>
+                            <button class="btn btn-default1"
+                                    ng-click="export()">导出
+                            </button>
+                        </div>
+                    </div>
+                </div>
+                <div class="body">
+                    <div class="zero-list-table-panel">
+                        <div class="zero-source-table-div">
+                            <table class="table table-bordered table-striped table-hover js-basic-example dataTable text-nowrap">
+                                <thead>
+                                <tr>
+                                    <th class="th-select" th-select-all datalist="dataList"></th>
+                                    <th class="th-rownum"><div>序号</div></th>
+                                    <th>培训对象类型</th>
+                                    <th>姓名</th>
+                                    <th>性别</th>
+                                    <th>身份证号</th>
+                                    <th>工作部门</th>
+                                    <th>职务</th>
+                                    <th>培训项目名称</th>
+                                    <th>培训形式</th>
+                                    <th>学习开始时间</th>
+                                    <th>学习结束时间</th>
+                                    <th>参训天数</th>
+                                    <th>学时数</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                <tr ng-repeat="it in dataList">
+                                    <td class="text-center">
+                                        <input type="checkbox" id="{{pageId}}_md_checkbox_{{$index+1}}" class="filled-in chk-col-red" ng-model="it.rowChecked" />
+                                        <label class="checkbox_lable" style="top:6px;"
+                                               for="{{pageId}}_md_checkbox_{{$index+1}}"></label>
+                                    </td>
+                                    <td class="text-center" td-rownum index="$index" pageindex="selectparams.pageindex" pagesize="selectparams.pagesize"></td>
+                                    <td class="text-center">{{it.pxdxlxtypename}}</td>
+                                    <td class="text-center">{{it.name}}</td>
+                                    <td class="text-center">{{it.gendername}}</td>
+                                    <td class="text-center">{{it.sfzh}}</td>
+                                    <td class="text-center">{{it.gzbm}}</td>
+                                    <td class="text-center">{{it.zw}}</td>
+                                    <td class="text-center">{{it.pxxmmc}}</td>
+                                    <td class="text-center">{{it.pxxstypename}}</td>
+                                    <td class="text-center">{{it.xxkssj|date:'yyyy-MM-dd'}}</td>
+                                    <td class="text-center">{{it.xxjssj|date:'yyyy-MM-dd'}}</td>
+                                    <td class="text-center">{{it.cxts}}</td>
+                                    <td class="text-center">{{it.xss}}</td>
+                                </tr>
+                                <tr ng-if="dataList.length<=0">
+                                    <td colspan="20" style="text-align:center">暂无数据</td>
+                                </tr>
+                                </tbody>
+                            </table>
+                        </div>
+                        <div class="zero-target-table-div">
+                            <table class="table table-bordered table-striped table-hover js-basic-example dataTable text-nowrap">
+                                <thead>
+                                <tr>
+                                    <th>操作</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                <tr ng-repeat="it in dataList" zero-table-height>
+                                    <td>
+                                        <button class="btn td-btn bg-light-green waves-effect"
+                                                ng-click="detail(it.id)"
+                                                title="查看">
+                                            查看
+                                        </button>
+                                        <button class="btn td-btn bg-light-green waves-effect"
+                                                ng-click="edit(it.id)"
+                                                title="修改">
+                                            修改
+                                        </button>
+                                        <button class="btn td-btn bg-light-green waves-effect"
+                                                ng-click="delete(it.id)"
+                                                title="删除">
+                                            删除
+                                        </button>
+                                    </td>
+                                </tr>
+                                <tr ng-if="pageInfo.ptotal==0">
+                                    <td colspan="1" style="text-align:center">无</td>
+                                </tr>
+                                </tbody>
+                            </table>
+                        </div>
+                    </div>
+                    <pagination data-pageindex="selectparams.pageindex" data-pagesize="selectparams.pagesize"
+                                data-ptotal="pageInfo.ptotal"></pagination>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 268 - 0
src/main/resources/static/app/main/train/trainingRecord/list.js

@@ -0,0 +1,268 @@
+(function ($app) {
+    $app.module('gtPartyApp').controller('PxTrainingRecordListCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
+        $scope.isShow = false;
+        $scope.moreTxt = "更多";
+        $scope.isAll = false;
+        $scope.pageId = "PxTrainingRecordList";
+        $scope.tabNameAdd = "home.PxTrainingRecordAdd";
+        $scope.tabNameEdit = "home.PxTrainingRecordEdit";
+        $scope.tabNameDetail = "home.PxTrainingRecordDetail";
+
+        //组织树参数
+        $scope.treeparams = {
+            isunfold: false,//组织结构树展开收缩
+            selectdzzdm: "",
+            selectdzzmc: "",
+            defaultselected: ''
+        };
+        $scope.resetTreeparams = angular.copy($scope.treeparams);
+
+        //查询条件
+        $scope.selectparams = {
+            pageindex: 1,
+            pagesize: 10,
+            dzzdm: '',
+            name: '',
+            sfzh: '',
+            pxxmmc: '',
+            pxxs: '',
+            pxdxlx: '',
+            xxsjBegin: null,
+            xxsjEnd: null
+        };
+        $scope.resetSelectparams = angular.copy($scope.selectparams);
+        $scope.pageInfo = {ptotal: 0};
+
+
+        $scope.dataList = [];
+        $scope.pxxsTypeList = [];
+        $scope.pxdxlxTypeList = [];
+
+        $scope.$on('tabChildReloadData', function (event, data) {
+            if (data.name == 'PxTrainingRecordListCtrl') {
+                $scope.loadData();
+            }
+        });
+
+        //加载列表数据
+        $scope.loadData = function () {
+            $http
+            ({
+                method: 'get', url: '../../api/train/trainingrecord/getList', params: $scope.selectparams
+            }).then(function (result) {
+                $scope.dataList = result.data.item.list;
+                $scope.pageInfo.ptotal = result.data.item.total;
+            }, function (res) {
+                $scope.showMsg('错误', '服务器错误');
+            });
+        };
+
+        $scope.search = function () {
+            $scope.loadData();
+        };
+
+        $scope.selectAll = function () {
+            $scope.isAll = !$scope.isAll;
+            angular.forEach($scope.dataList, function (item) {
+                item.checked = $scope.isAll ? 1 : 0;
+            });
+        };
+
+        $scope.export = function () {
+            var params = "?1=1";
+            for (var p in $scope.selectparams) {
+                if ($scope.selectparams[p] !== '' && $scope.selectparams[p] !== null)
+                    params += ("&" + p + "=" + encodeURI($scope.selectparams[p]));
+            }
+            window.open('../../api/train/trainingrecord/export' + params);
+        };
+
+        $scope.excelConfig = {
+            filetype: 1,
+            columns: {
+                '姓名': 'name',
+                '机构': 'departmentname',
+                '部门职务': 'position',
+                '性别': 'sexname',
+                '民族': 'birthplacename',
+                '籍贯': 'nativeplace',
+                '出生年月': 'birthdatestr',
+                '参加工作时间': 'workdatestr',
+                '学历': 'educationname',
+                '党派': 'party',
+                '加入时间': 'joindatestr',
+                '学位': 'qualificationname',
+                '专业': 'graduationschoolmajor',
+                '专业技术职务': 'professionalname',
+                '专业技术职务聘任时间': 'engagedatestr',
+                '任行政现职时间': 'nowpositiondatestr',
+                '任行政同职级时间': 'samepositiondatestr',
+                '相关管理工作经历': 'workexperience'
+            },
+            errorcolumns: {
+                'departmentname': '机构',
+                'position': '职务',
+                'name': '姓名',
+                'party': '党派',
+                'errorInfo': '错误信息'
+            },
+            readonly: false,
+            templateUrl: '/doc/template/干部培训记录导入模板.xlsx'
+        };
+
+        $scope.import = function () {
+            $excel.addFile($scope.excelConfig).then(function (items) {
+                $loading.show();
+                $http({
+                    method: "post",
+                    url: "../../api/train/trainingrecord/import",
+                    data: {
+                        dataList: JSON.stringify(items),
+                        leaderTeamType: $scope.leaderTeamType
+                    }
+                }).then(function (result) {
+                    $loading.hide();
+                    if (result.data.success) {
+                        $scope.loadData();
+                        $scope.showMsg('成功', result.data.msg, 3);
+                    } else {
+                        if (result.data.item.length > 0) {
+                            $scope.showMsg('错误', '导入失败,存在错误数据,请修改后重新导入!', 20);
+                            $excel.showErrorInfo(result.data.item);
+                        } else {
+                            $scope.showMsg(result.data.msg);
+                        }
+                    }
+                }, function (resp) {
+                    $loading.hide();
+                    $scope.showMsg('错误', '服务器错误');
+                });
+            });
+        };
+
+        $scope.delete = function (id) {
+            var ids = [];
+            if (id)
+                ids.push(id);
+            else
+                ids = $scope.dataList.filter(it => it.rowChecked == true).map(it => it.leaderteamid);
+
+            if (ids.length == 0) {
+                $scope.showMsg('消息', "请选择需要删除的数据");
+                return false;
+            }
+
+            if (confirm("确定删除?")) {
+                $loading.show();
+                $http({
+                    method: "post",
+                    url: "../../api/train/trainingrecord/delete",
+                    data: {
+                        ids: JSON.stringify(ids)
+                    }
+                }).then(function (result) {
+                    $loading.hide();
+                    if (result.data.success) {
+                        $scope.showMsg('成功', result.data.msg);
+                        //重新刷新列表
+                        $scope.loadData();
+                    } else {
+                        $scope.showMsg('失败', result.data.msg);
+                    }
+                }, function (resp) {
+                    $scope.showMsg('错误', '服务器错误');
+                });
+            }
+        };
+
+        $scope.add = function(){
+            $bsRouterState.$closeTabName($scope.tabNameAdd);
+            $timeout(function () {
+                $bsRouterState.go($scope.tabNameAdd, {
+                    id: ''
+                });
+            }, 100);
+        };
+
+        $scope.edit = function(id){
+            $bsRouterState.$closeTabName($scope.tabNameEdit);
+            $timeout(function () {
+                $bsRouterState.go($scope.tabNameEdit, {
+                    id: id
+                });
+            }, 100);
+        };
+
+        $scope.detail = function(id){
+            $bsRouterState.$closeTabName($scope.tabNameDetail);
+            $timeout(function () {
+                $bsRouterState.go($scope.tabNameDetail, {
+                    id: id
+                });
+            }, 100);
+        };
+
+        $scope.getPxdxlxTypeList = function () {
+            $http({
+                method: 'get',
+                url: '../../api/dictionary/getDictionaryListByDicTypeKey',
+                params: {
+                    dicTypeKey: 'pxdxlxType'
+                }
+            }).then(function (result) {
+                $scope.pxdxlxTypeList = result.data;
+            });
+        };
+
+        $scope.getPxxsTypeList = function () {
+            $http({
+                method: 'get',
+                url: '../../api/dictionary/getDictionaryListByDicTypeKey',
+                params: {
+                    dicTypeKey: 'pxxsType'
+                }
+            }).then(function (result) {
+                $scope.pxxsTypeList = result.data;
+            });
+        };
+        
+        $scope.isShowClick = function () {
+            $scope.isShow = !$scope.isShow;
+            if ($scope.moreTxt == "更多") {
+                $scope.moreTxt = "收起";
+            } else if ($scope.moreTxt == "收起") {
+                $scope.moreTxt = "更多";
+            }
+        };
+
+        $scope.$watch("selectparams.pageindex", function (newVal, oldVal) {
+            if ($scope.pageInfo.ptotal > 0) {
+                $scope.loadData();
+            }
+        });
+        $scope.$watch("treeparams.selectdzzdm", function (newVal, oldVal) {
+            if (newVal != "") {
+                if ($scope.treeparams.defaultselected != "" && $scope.treeparams.defaultselected != null &&
+                    $scope.treeparams.defaultselected != $scope.treeparams.selectdzzdm)
+                    return;
+
+                $scope.selectparams.dzzdm = $scope.treeparams.selectdzzdm;
+
+                $scope.loadData();
+            }
+        });
+        $scope.setisunfold = function () {
+            $scope.treeparams.isunfold = !$scope.treeparams.isunfold;
+            $scope.$emit('menudatas.toggle', !$scope.treeparams.isunfold);
+        };
+        $scope.reset = function () {
+            $scope.selectparams = angular.copy($scope.resetSelectparams);
+            $scope.treeparams = angular.copy($scope.resetTreeparams);
+            $scope.loadData();
+        };
+
+        $scope.loadData();
+        $scope.getPxxsTypeList();
+        $scope.getPxxsTypeList();
+    });
+})(angular);