ソースを参照

Merge branch 'master' of http://39.98.153.250:9080/bowintek/GHSCPartyBuild

82064491C07A712AE32B5B57EC6EF136 4 ヶ月 前
コミット
1905cb620e
50 ファイル変更4454 行追加297 行削除
  1. 59 0
      lib/数据更新脚本.txt
  2. 4 4
      parth5/parth5/src/app/api/wechat/index.ts
  3. 37 27
      parth5/parth5/src/app/service/account.service.ts
  4. 1 1
      parth5/parth5/src/app/service/user.service.ts
  5. 53 42
      parth5/parth5/src/app/service/wxcp.service.ts
  6. 32 0
      parth5/parth5/src/app/utils/urlUtils.ts
  7. 15 14
      parth5/parth5/src/app/views/index/index.page.ts
  8. 1 1
      parth5/parth5/src/app/views/login/login.page.html
  9. 14 8
      parth5/parth5/src/app/views/login/login.page.ts
  10. 4 3
      parth5/parth5/src/app/views/tapp/tabs/tabs.module.ts
  11. 1 1
      parth5/parth5/src/assets/appconfig.json
  12. 17 129
      src/main/java/com/ghsc/partybuild/controller/AppController.java
  13. 1 1
      src/main/java/com/ghsc/partybuild/controller/app/AppDzzfcController.java
  14. 1 1
      src/main/java/com/ghsc/partybuild/controller/publicity/PubDzzfcController.java
  15. 197 0
      src/main/java/com/ghsc/partybuild/controller/train/PxTrainingRecordController.java
  16. 1 0
      src/main/java/com/ghsc/partybuild/controller/wechat/WxCpController.java
  17. 17 0
      src/main/java/com/ghsc/partybuild/mapper/PxTrainingRecordCQuery.java
  18. 30 0
      src/main/java/com/ghsc/partybuild/mapper/PxTrainingRecordMapper.java
  19. 235 0
      src/main/java/com/ghsc/partybuild/model/PxTrainingRecord.java
  20. 1748 0
      src/main/java/com/ghsc/partybuild/model/PxTrainingRecordExample.java
  21. 1 1
      src/main/java/com/ghsc/partybuild/service/impl/PubDzzfcService.java
  22. 21 0
      src/main/java/com/ghsc/partybuild/service/PxTrainingRecordService.java
  23. 1 1
      src/main/java/com/ghsc/partybuild/service/impl/publicity/PubDzzfcServiceImpl.java
  24. 251 0
      src/main/java/com/ghsc/partybuild/service/impl/train/PxTrainingRecordServiceImpl.java
  25. 6 3
      src/main/java/com/ghsc/partybuild/service/wechat/WechatCpServiceImpl.java
  26. 13 0
      src/main/java/com/ghsc/partybuild/vo/trian/PxTrainingRecordVo.java
  27. 1 1
      src/main/resources/application.yml
  28. 1 0
      src/main/resources/generatorConfig.xml
  29. 74 0
      src/main/resources/mapping/PxTrainingRecordCQuery.xml
  30. 494 0
      src/main/resources/mapping/PxTrainingRecordMapper.xml
  31. 96 0
      src/main/resources/static/app/main/app.js
  32. 18 0
      src/main/resources/static/app/main/bigdata/showDjdsj/home.js
  33. 1 1
      src/main/resources/static/app/main/leaderwork/leaderteam/edit.html
  34. 1 0
      src/main/resources/static/app/main/partylife/djscgz/list.js
  35. 1 0
      src/main/resources/static/app/main/partylife/dnjzjy/list.js
  36. 24 46
      src/main/resources/static/app/main/partylife/jljyxxyhd/detail.html
  37. 10 10
      src/main/resources/static/app/main/partylife/jljyxxyhd/detail.js
  38. 5 0
      src/main/resources/static/app/main/partylife/jljyxxyhd/list.html
  39. 7 0
      src/main/resources/static/app/main/partylife/jljyxxyhd/list.js
  40. 1 1
      src/main/resources/static/app/main/partylife/meeting/list.js
  41. 3 0
      src/main/resources/static/app/main/partylife/scyd/list.html
  42. 9 1
      src/main/resources/static/app/main/partylife/scyd/list.js
  43. 3 0
      src/main/resources/static/app/main/partylife/tqdflzhy/list.html
  44. 8 0
      src/main/resources/static/app/main/partylife/tqdflzhy/list.js
  45. 70 0
      src/main/resources/static/app/main/train/trainingRecord/detail.html
  46. 26 0
      src/main/resources/static/app/main/train/trainingRecord/detail.js
  47. 176 0
      src/main/resources/static/app/main/train/trainingRecord/edit.html
  48. 149 0
      src/main/resources/static/app/main/train/trainingRecord/edit.js
  49. 247 0
      src/main/resources/static/app/main/train/trainingRecord/list.html
  50. 268 0
      src/main/resources/static/app/main/train/trainingRecord/list.js

+ 59 - 0
lib/数据更新脚本.txt

@@ -227,3 +227,62 @@ update zz_zzqkxxfb fb
 inner join zz_zzqkxx p on  p.dzzdm = fb.dzzdm
 set fb.JCZZFL='200' where fb.JCZZFL is null;
 
+-- 2024.7.22
+-- 民主生活会
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('4189070a-b18e-0001-829d-7085c2a9999e', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '4189070a-b18e-11ec-829d-7085c2a9999e', NULL, 1, 'home.pf_meetingEdit2', '编辑民主生活会', NULL, NULL, NULL, 0, 0, NULL);
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('4189070a-b18e-0002-829d-7085c2a9999e', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '4189070a-b18e-11ec-829d-7085c2a9999e', NULL, 2, 'home.pf_meetingAdd2', '新增民主生活会', NULL, NULL, NULL, 0, 0, NULL);
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('4189070a-b18e-0003-829d-7085c2a9999e', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '4189070a-b18e-11ec-829d-7085c2a9999e', NULL, 3, 'home.pf_meetingDetail2', '查看民主生活会详情', 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-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);
+
+
+-- 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');

+ 4 - 4
parth5/parth5/src/app/api/wechat/index.ts

@@ -7,15 +7,15 @@ export class WechatApi {
   constructor(private configService: ConfigService) {
   }
 
-  getOAuthUrl(redirectUrl:string):Observable<RequsetData> {
+  getOAuthUrl(redirectUrl: string): Observable<RequsetData> {
     return this.configService.HttpGetRomote('/wxapi/cp/getOAuthUrl', {
-      redirectUrl
+      redirectUrl: redirectUrl
     });
   }
 
-  getWxCpUserId(code:string):Observable<RequsetData> {
+  getWxCpUserId(code: string): Observable<RequsetData> {
     return this.configService.HttpGetRomote('/wxapi/cp/getWxCpUserId', {
-      code
+      code: code
     });
   }
 

+ 37 - 27
parth5/parth5/src/app/service/account.service.ts

@@ -1,14 +1,11 @@
 import {Injectable, Inject} from '@angular/core';
-import {DOCUMENT} from '@angular/common';
 import {ConfigService, RequsetData} from "./config.service";
-import {from, Observable} from "rxjs";
-import * as moment from "./work.service";
 import {Router} from "@angular/router";
-import {AlertController} from "@ionic/angular";
 import {AccountApi} from "../api/account";
 import {UsemodularService} from "./usemodular.service";
 import {AlertModal} from "../comm/modal/alert";
 import {UserService} from "./user.service";
+import {splitRouterUrl} from "../utils/urlUtils";
 
 
 @Injectable({providedIn: 'root'})
@@ -25,33 +22,46 @@ export class AccountService {
    * @param wxUserId 企业微信用户id
    * @param currentUrl 登录成功后跳转路由,可未空,默认首页路由
    */
-  async loginByWxUserId(wxUserId: string, currentUrl: string) {
-    if (!wxUserId)
-      return false;
-
-    const loading = await this.alertModal.loading('验证微信用户中,请稍等...');
-    await loading.present();
-
-    this.accountApi.loginByWxUserId(wxUserId).subscribe(req => {
-      loading.dismiss();
-      if (req.success) {
-        req.item.curRoleId = req.extdata.userRoles[0].roleid;
-        this.userService.SetUser(req.item);
-        this.userService.SetExt(req.extdata);
-        this.userService.setToken(req.item.logintoken);
-        this.userService.ReadUserDataScope(req.item.curRoleId, this.configService);
-        this.usemodularService.getButtonList();
-        this.router.navigate([currentUrl || '/tapp/tabs/tabMain']);
-      } else {
+  loginByWxUserId(wxUserId: string, currentUrl: string) {
+    if (!wxUserId) {
+      this.alertModal.alert('微信用户ID为空,不能使用微信用户登录,请输入账号密码登录');
+      this.router.navigate(['/login']);
+    }
+
+    this.alertModal.loading('验证微信用户中,请稍等...').then(loading => {
+      this.accountApi.loginByWxUserId(wxUserId).subscribe(res => {
+        if (res.success) {
+          try {
+            this.loginSuccessBack(res);
+          } catch (ex) {
+          } finally {
+            loading.dismiss();
+          }
+
+          const routerUrl = splitRouterUrl(currentUrl);
+          this.router.navigate([routerUrl.routerUrl || '/tapp/tabs/tabMain'], {
+            queryParams: {random: Math.random(), ...routerUrl.params}
+          });
+        } else {
+          loading.dismiss();
+          this.alertModal.alert('微信用户未绑定或验证失败,请输入账号密码登录');
+          this.router.navigate(['/login']);
+        }
+      }, () => {
+        loading.dismiss();
         this.alertModal.alert('微信用户未绑定或验证失败,请输入账号密码登录');
         this.router.navigate(['/login']);
-      }
-    }, () => {
-      loading.dismiss();
-      this.alertModal.alert('微信用户未绑定或验证失败,请输入账号密码登录');
-      this.router.navigate(['/login']);
+      });
     });
   };
 
+  loginSuccessBack(data: any) {
+    data.item.curRoleId = data.extdata.userRoles[0].roleid;
+    this.userService.SetUser(data.item);
+    this.userService.SetExt(data.extdata);
+    this.userService.setToken(data.item.logintoken);
+    this.userService.ReadUserDataScope(data.item.curRoleId, this.configService);
+    this.usemodularService.getButtonList();
+  }
 
 }

+ 1 - 1
parth5/parth5/src/app/service/user.service.ts

@@ -99,7 +99,7 @@ export class UserService {
     let url = location.href.split("#");
     if (!token && url.length == 2) {
       let pageUrl = url[1].split("?");
-      if (pageUrl[0] != '/' && pageUrl[0] != '/login') {
+      if (pageUrl[0] != '/' && pageUrl[0] != '/login' && pageUrl[0] != '/index') {
         this.presentAlert("登录过期,请重新登录!");
         this.router.navigate(['/login']);
       }

+ 53 - 42
parth5/parth5/src/app/service/wxcp.service.ts

@@ -1,14 +1,12 @@
 import {Inject, Injectable} from '@angular/core';
-import {ConfigService, RequsetData} from "./config.service";
+import {ConfigService} from "./config.service";
 import {UserService} from "./user.service";
-import {from, interval, Observable, of, Subject} from "rxjs";
-import * as moment from 'moment';
 import {DOCUMENT} from "@angular/common";
-import {AlertController, LoadingController} from "@ionic/angular";
 import {ActivatedRoute, Router} from "@angular/router";
 import {AlertModal} from "../comm/modal/alert";
 import {WechatApi} from "../api/wechat";
 import {getUrlParams} from "../utils/urlUtils";
+import {AccountService} from "./account.service";
 
 @Injectable({
   providedIn: 'root'
@@ -18,7 +16,7 @@ export class WxcpService {
   private siteUrl: string = '';
 
   constructor(@Inject(DOCUMENT) private document: any, private router: Router, private configService: ConfigService, private userService: UserService
-    , private alertModal: AlertModal, private wechatApi: WechatApi, private routeInfo: ActivatedRoute) {
+    , private alertModal: AlertModal, private wechatApi: WechatApi, private routeInfo: ActivatedRoute, private accountService: AccountService) {
     this.configService.GetConfig().subscribe((config) => {
       this.siteUrl = config.siteUrl;
     });
@@ -28,48 +26,61 @@ export class WxcpService {
     return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
   }
 
-  wxAuth = async <Object>(routePath: string): Promise<string> => {
-    try {
-      const urlParams = getUrlParams() as any;
-      const openId = urlParams["wxUserId"] || this.userService.getWxUserID();
-      const code = urlParams["code"];
+  wxAuth = async <Object>(routePath: string): Promise<boolean> => {
+    return new Promise(async (resolve, reject) => {
+      try {
+        const urlParams = getUrlParams() as any;
+        let wxUserId = urlParams["wxUserId"] || this.userService.getWxUserID();
+        const code = urlParams["code"];
 
-      if (this.isWechat()) {
-        if (openId) {
-          this.userService.setWxUserID(openId);
-        } else {
-          if (!code) {
-            const loading = await this.alertModal.loading('微信授权中,请稍等...');
-            await loading.present();
-
-            let oAuthUrl_redirectUrl = this.siteUrl + "?routePath=" + encodeURIComponent(routePath); //www.aa.com/mobile?routePath=xxxxx
-            this.wechatApi.getOAuthUrl(encodeURIComponent(oAuthUrl_redirectUrl)).subscribe((res: any) => {
-              if (res) {
-                window.location.replace(res);
-              } else {
-                this.alertModal.alert("微信授权失败!");
-              }
-            });
+        if (this.isWechat()) {
+          if (wxUserId) {
+            this.userService.setWxUserID(wxUserId);
+            this.accountService.loginByWxUserId(wxUserId, routePath);
           } else {
-            const loading = await this.alertModal.loading('微信授权成功,请稍等...');
-            await loading.present();
-            await this.wechatApi.getWxCpUserId(code).subscribe((res: any) => {
-              this.userService.setWxUserID(res);
-
-              const currentUrl = routePath + (routePath.indexOf("?") >= 0 ? "&" : "?") + "wxUserId=" + res;
-
-              this.router.navigate([currentUrl], {
-                relativeTo: this.routeInfo,
-                queryParams: {random: Math.random(), op: 0}
+            if (!code) {
+              await this.alertModal.loading('正在获取企业微信授权链接,请稍等...').then(async loading => {
+                let oAuthUrl_redirectUrl = this.siteUrl + "?routePath=" + encodeURIComponent(routePath); //www.aa.com/mobile?routePath=xxxxx
+                await this.wechatApi.getOAuthUrl(encodeURIComponent(oAuthUrl_redirectUrl)).toPromise().then((res: any) => {
+                  loading.dismiss();
+                  if (res != null && res.success) {
+                    window.location.replace(res.item);
+                  } else {
+                    this.alertModal.alert("企业微信授权链接获取失败!");
+                    resolve(false);
+                  }
+                }, () => {
+                  loading.dismiss();
+                  this.alertModal.alert("企业微信授权链接获取失败!");
+                  resolve(false);
+                });
               });
-            });
+            } else {
+              await this.alertModal.loading('企业微信授权成功,正在获取企业微信用户信息,请稍等...').then(async loading => {
+                await this.wechatApi.getWxCpUserId(code).toPromise().then((res: any) => {
+                  loading.dismiss();
+                  if (res != null && res.success && res.item) {
+                    wxUserId = res.item;
+                    this.userService.setWxUserID(wxUserId);
+                    const currentUrl = routePath + (routePath.indexOf("?") >= 0 ? "&" : "?") + "wxUserId=" + wxUserId;
+                    this.accountService.loginByWxUserId(wxUserId, currentUrl);
+                  } else {
+                    this.alertModal.alert("获取企业微信用户信息失败!");
+                    resolve(false);
+                  }
+                }, () => {
+                  loading.dismiss();
+                  this.alertModal.alert("获取企业微信用户信息失败!");
+                  resolve(false);
+                });
+              });
+            }
           }
         }
+      } catch (e) {
+        this.alertModal.alert("调用微信接口异常!" + e);
+        resolve(false);
       }
-
-      return "";
-    } catch (e) {
-      return Promise.reject(null);
-    }
+    });
   }
 }

+ 32 - 0
parth5/parth5/src/app/utils/urlUtils.ts

@@ -71,3 +71,35 @@ export function getUrlParams() {
 
   return theRequest;
 }
+
+export function splitRouterUrl(url: string) {
+  if (!url)
+    return {
+      routerUrl: '',
+      params: {}
+    };
+
+  const routerUrlSplit = url.split('?');
+  if (routerUrlSplit.length === 1)
+    return {
+      routerUrl: url,
+      params: {}
+    };
+
+  const params = {};
+  const strs = routerUrlSplit[1].split("&");
+  for (let i = 0; i < strs.length; i++) {
+    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+    // @ts-ignore
+    const paramsIndex = strs[i].indexOf("=");
+    const paramsSplits = [strs[i].slice(0, paramsIndex), strs[i].slice(paramsIndex + 1)];
+
+    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+    // @ts-ignore
+    params[paramsSplits[0]] = paramsSplits[1];
+  }
+  return {
+    routerUrl: routerUrlSplit[0],
+    params: params
+  }
+}

+ 15 - 14
parth5/parth5/src/app/views/index/index.page.ts

@@ -3,10 +3,6 @@ import {getUrlParams} from "../../utils/urlUtils";
 import {WxcpService} from "../../service/wxcp.service";
 import {ActivatedRoute, Router} from "@angular/router";
 import {UserService} from "../../service/user.service";
-import {ConfigService} from "../../service/config.service";
-import {AccountApi} from "../../api/account";
-import {UsemodularService} from "../../service/usemodular.service";
-import {AlertModal} from "../../comm/modal/alert";
 import {AccountService} from "../../service/account.service";
 
 @Component({
@@ -15,11 +11,9 @@ import {AccountService} from "../../service/account.service";
   styleUrls: ['./index.page.scss'],
 })
 export class IndexPage implements OnInit {
-  private routePath = '';
-
 
   constructor(private router: Router, private route: ActivatedRoute, private wxcpService: WxcpService, private userService: UserService,
-              private accountService: AccountService) {
+              private accountService: AccountService, private routeInfo: ActivatedRoute) {
   }
 
   ngOnInit() {
@@ -27,21 +21,28 @@ export class IndexPage implements OnInit {
 
   ionViewWillEnter() {
     const urlParams = getUrlParams() as any;
-    this.routePath = urlParams["routePath"] || '/login';
-    this.routePath = decodeURIComponent(this.routePath);
+    if (this.wxcpService.isWechat()) {
+      let routePath = urlParams["routePath"] || '/tapp/tabs/tabMain'; //登录成功后跳转地址
+      routePath = decodeURIComponent(routePath);
 
-    if (this.wxcpService.isWechat() && this.routePath.indexOf("wxMessage") < 0) {
       const wxUserId = urlParams["wxUserId"] || this.userService.getWxUserID();
       if (wxUserId) {
         //根据微信用户id登录系统
-        this.accountService.loginByWxUserId(wxUserId, null).then(e => {
-        });
+        this.accountService.loginByWxUserId(wxUserId, routePath);
       } else {
-        this.wxcpService.wxAuth(this.routePath);
+        this.wxcpService.wxAuth(routePath).then(res => {
+          if (res === false) {
+            this.router.navigate(['/login'], {
+              relativeTo: this.routeInfo,
+              queryParams: {random: Math.random()}
+            });
+          }
+        });
       }
     } else {
-      this.router.navigate([this.routePath], {queryParams: {random: Math.random()}});
+      this.router.navigate(['/login'], {queryParams: {random: Math.random()}});
     }
   }
 
+
 }

+ 1 - 1
parth5/parth5/src/app/views/login/login.page.html

@@ -14,7 +14,7 @@
     <ion-icon name="lock-closed-outline"></ion-icon>
     <ion-input [(ngModel)]="userPwd" type="password" placeholder="请输入密码"></ion-input>
   </ion-item>
-  <ion-item style="padding-left: 20px;">
+  <ion-item style="padding-left: 20px;" *ngIf="wxUserId">
     <ion-checkbox [(ngModel)]="isBindWxUser"></ion-checkbox>
     <ion-label style="padding-left: 10px;">绑定微信账号
       <span>{{wxUserId}}</span>

+ 14 - 8
parth5/parth5/src/app/views/login/login.page.ts

@@ -10,6 +10,7 @@ import {UsemodularService} from "../../service/usemodular.service";
 import {WxpayService} from "../../service/wxpay.service";
 import {getUrlParams} from "../../utils/urlUtils";
 import {AccountApi} from "../../api/account";
+import {AccountService} from "../../service/account.service";
 
 @Component({
   selector: 'app-login',
@@ -30,7 +31,7 @@ export class LoginPage implements OnInit {
   constructor(private router: Router, private route: ActivatedRoute,
               private configService: ConfigService, private userService: UserService, private jsBridgeService: JsBridgeService,
               private desService: DesService, private loadingController: LoadingController, private usemodularService: UsemodularService,
-              private wxpayService: WxpayService, private accountApi: AccountApi) {
+              private wxpayService: WxpayService, private accountApi: AccountApi, private accountService: AccountService) {
     this.route.queryParams.subscribe(params => {
 
     });
@@ -63,23 +64,28 @@ export class LoginPage implements OnInit {
     });
 
     //return;//注释掉服务器方法
-    this.configService.HttpPostRomote(this.userInfoUrl, model).subscribe(req => {
+    this.configService.HttpPostRomote(this.userInfoUrl, model).subscribe(res => {
       loading.then(l => l.dismiss());
-      if (req.success) {
-        req.item.curRoleId = req.extdata.userRoles[0].roleid;
+      if (res.success) {
+        /*req.item.curRoleId = req.extdata.userRoles[0].roleid;
         this.userService.SetUser(req.item);
         this.userService.SetExt(req.extdata);
         this.userService.setToken(req.item.logintoken);
         this.userService.ReadUserDataScope(req.item.curRoleId, this.configService);
-        this.usemodularService.getButtonList();
-        //this.configService.HttpPostRomote()
+        this.usemodularService.getButtonList();*/
+
+        this.accountService.loginSuccessBack(res);
+
         if (this.isBindWxUser) {
-          this.accountApi.bindWxUserId(this.userService.GetUser().userid, this.wxUserId).subscribe(e=>{});
+          this.accountApi.bindWxUserId(this.userService.GetUser().userid, this.wxUserId).subscribe(e => {
+          });
+        } else {
+          this.userService.setWxUserID('');
         }
         this.router.navigate(['/tapp/tabs/tabMain']);
       } else {
         this.errorShow = true;
-        this.msg += req.msg;
+        this.msg += res.msg;
       }
     });
   }

+ 4 - 3
parth5/parth5/src/app/views/tapp/tabs/tabs.module.ts

@@ -58,7 +58,8 @@ import {routes as MainRoutes} from "../tab-main/tab-main.route";
 import {routes as StudyRoutes} from "../tab-study/tab-study.route";
 import {routes as UserRoutes} from "../tab-user/tab-user.route";
 import {CardComponent} from "../../pages/examtest/show/card/card.component";
-import {ResultComponent} from "../../pages/examtest/show/result/result.component";
+import {ResultComponent as ExamtestResultComponent} from "../../pages/examtest/show/result/result.component";
+import {ResultComponent as ExamonlineResultComponent} from "../../pages/examonline/showpaper/result/result.component";
 
 import { ExamtestComponent} from "../../pages/examtest/examtest.component";
 import {DzzfcListComponent} from "../../pages/propagandawork/dzzfc/list.component";
@@ -97,11 +98,11 @@ const pageComponents = [
   ExamtestComponent,
   ExamtestShowComponent,
   CardComponent,
-  ResultComponent,
+  ExamtestResultComponent,
   ExamonlineComponent,
   ShowpaperComponent,
   ShowpaperCardComponent,
-  ResultComponent,
+  ExamonlineResultComponent,
   DzzfcListComponent,
   DzzfcEditComponent,
   DzzfcDetailComponent

+ 1 - 1
parth5/parth5/src/assets/appconfig.json

@@ -1,7 +1,7 @@
 {
   "webSite": "partyH5App",
   "webServerHost": "http://localhost:8062",
-  "siteUrl": "http://localhost:8062/mobile/#",
+  "siteUrl": "http://localhost:8062/mobile",
   "isWxPay": true,
   "isDev": true
 }

+ 17 - 129
src/main/java/com/ghsc/partybuild/controller/AppController.java

@@ -7,7 +7,8 @@ import com.ghsc.partybuild.service.RoleService;
 import com.ghsc.partybuild.service.UserService;
 import com.ghsc.partybuild.shiro.JwtUtils;
 import com.ghsc.partybuild.util.RemoteHelper;
-import org.apache.commons.lang3.StringUtils;
+import com.ghsc.partybuild.util.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,11 +21,13 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.FileInputStream;
+import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+@Slf4j
 @Controller
 @RequestMapping(value = "/")
 public class AppController {
@@ -47,14 +50,13 @@ public class AppController {
     @Autowired
     RemoteHelper remoteHelper;
 
+    @Autowired
+    private StringUtils stringUtils;
+
     public AppController() {
         logger = LoggerFactory.getLogger(this.getClass());
     }
 
-    @GetMapping("mobile")
-    public String Wechat(){
-        return "redirect:/mobile/index.html";
-    }
 
     @GetMapping("")
     public String Web(HttpServletRequest request, HttpServletResponse response) {
@@ -62,132 +64,18 @@ public class AppController {
         return "redirect:/app/main/index.html";
     }
 
-    @GetMapping("jxCasLogin")
-    public String JXCasLogin(HttpServletRequest request, HttpServletResponse response,@RequestParam(required=false)String ticket) {
-
-        try {
-
-            String casUrlParam=URLEncoder.encode(appConfig.jxLocationUrl,"UTF-8");
-
-            if (StringUtils.isBlank(ticket)) {
-                //lyuapSever
-                String casLoginUrl = "redirect:" + appConfig.jxCasUrl + "/lyuapServer/login?service=" + casUrlParam;
-                logger.info("JXCasLogin,casLoginUrl:" + casLoginUrl);
-                return casLoginUrl;
-            } else {
-
-                String validateUrl=appConfig.jxCasUrl+"/lyuapServer/serviceValidate";
-                logger.info("JXCasLogin,ticket:" + ticket);
-                Map<String,String> mapParams=new HashMap<>();
-                mapParams.put("ticket",ticket);
-                mapParams.put("service",appConfig.jxLocationUrl);
-                FileInputStream streamCer=new FileInputStream(appConfig.certPath+"/lyuap.cer");
-                String reqData=remoteHelper.SSLGet(mapParams,validateUrl,"UTF-8",streamCer);
-                //String reqData="<cas:authenticationSuccess><cas:user>2001001www</cas:user><cas:attributes>...</cas:attributes></cas:authenticationSuccess>";
-                int i=reqData.indexOf("<cas:user>");
-                int j=reqData.indexOf("</cas:user>");
-
-                String userId=reqData.substring(i+"<cas:user>".length(),j);
-
-                logger.info("JXCasLogin,userId:" + userId);
-
-                CfUsers User=userService.getUserByKey(userId);
-                if(StringUtils.isBlank(User.getUserid())) {
-                    User = userService.getUserByOAName(userId);
-                }
-                if (User != null && StringUtils.isNotBlank(User.getUsername())) {
-
-                    Cookie cookie = new Cookie(jwtUtils.getTokenName(), jwtUtils.generateToken(User.getUserid()));
-                    cookie.setHttpOnly(true);
-                    cookie.setPath("/");
-                    response.addCookie(cookie);
-
-                    List<HashMap<String, Object>> roleList = this.roleService.getRoleByUserName(User.getUsername());
-                    if (roleList == null || roleList.isEmpty()) {
-                        this.roleService.insertUserRole(User.getUsername(), "0b45886a-a8db-4f85-af76-61a8ea7c1dab");
-
-                    }
-                    userService.loginForceStatu(User.getUserid(), 0);
-                    logService.log("用户登录", User.getUserid(), "login");
-                    return "redirect:/app/main/index.html";
-
-                } else {
-                    logger.info("JXCasLogin,单点登陆失败!");
-                    return "redirect:/app/main/index.html";
-                }
-
-            }
-
-        }catch (Exception ex){
-
-            return "单点验证错误:"+ex.getMessage();
-        }
-
-        //return "redirect:/app/main/index.html";
+    @GetMapping("web")
+    public String Web() {
+        return "redirect:/mobile/index.html";
     }
-    /*
-    @GetMapping("KongLogin")
-    public String KongLogin(HttpServletRequest request, HttpServletResponse response){
-        String jstoken = request.getHeader("Kong-Access-Token");
-        String errToken = request.getHeader("Kong-Access-Token-Error");
-
-        response.addHeader("Pragma", "no-cache");
-        response.addHeader("Cache-Control", "no-cache");
-
-        if(StringUtils.isNotBlank(jstoken)) {
-            try {
-                int firstPeriod = jstoken.indexOf('.');
-                int lastPeriod = jstoken.lastIndexOf('.');
-                jstoken = jstoken.substring(firstPeriod + 1, lastPeriod);
-                if (firstPeriod > 0 && lastPeriod > firstPeriod) {
-                    String tokenDecode = Charset.forName("UTF-8").decode(ByteBuffer.wrap
-                            (Base64.getUrlDecoder().decode(jstoken))).toString();
-                    logger.info("KongLogin,tekenDecode:" + tokenDecode);
-                    JsonNode result = JsonMapper.GetJsonNode(tokenDecode);
-
-                    CfUsers User = userService.getUserByOAName(result.get("user_name").asText());
-
-                    if (StringUtils.isBlank(User.getUsername())) {
-                        User = userService.getUserByMobile(result.get("mobile").asText());
-                    }
-
-                    if (User != null && StringUtils.isNotBlank(User.getUsername())) {
-
-                        Cookie cookie = new Cookie(jwtUtils.getTokenName(), jwtUtils.generateToken(User.getUserid()));
-                        cookie.setHttpOnly(true);
-                        cookie.setPath("/");
-                        response.addCookie(cookie);
-
-                        List<HashMap<String, Object>> roleList = this.roleService.getRoleByUserName(User.getUsername());
-                        if (roleList == null || roleList.isEmpty()) {
-                            this.roleService.insertUserRole(User.getUsername(), "0b45886a-a8db-4f85-af76-61a8ea7c1dab");
-
-                        }
 
-                        userService.loginForceStatu(User.getUserid(), 0);
-
-                        logService.log("用户登录", User.getUserid(), "login");
-                        return "redirect:/app/main/index.html";
-
-                    } else {
-                        return "无该用户";
-                    }
-                }
-
-            } catch (Exception ex) {
-
-                logger.error("KongLogin", ex);
-            }
-        }
-
-        if(StringUtils.isNotBlank(errToken)){
-            String tokenDecode = Charset.forName("UTF-8").decode(ByteBuffer.wrap
-                    (Base64.getUrlDecoder().decode(errToken))).toString();
-
-            return tokenDecode;
-        }
+    @GetMapping("mobile")
+    public String mobile(String routePath, String code) throws UnsupportedEncodingException {
+        log.info("mobile:routePath=" + routePath + ",code=" + code);
+        if (!stringUtils.IsNullOrEmpty(routePath))
+            return "redirect:/mobile/index.html/#/index?routePath=" + URLEncoder.encode(routePath, "UTF-8") + "&code=" + code;
 
-        return "redirect:/app/main/index.html";
+        return "redirect:/mobile/index.html/#/index?code=" + (!stringUtils.IsNullOrEmpty(code) ? code : "");
     }
-    */
+
 }

+ 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;
+    }
+
+}

+ 1 - 0
src/main/java/com/ghsc/partybuild/controller/wechat/WxCpController.java

@@ -36,6 +36,7 @@ public class WxCpController {
 
     @GetMapping("getWxCpUserId")
     public BaseResponse<String> getWxCpUserId(String code) throws WxErrorException {
+        log.info("getWxCpUserId-request:code=" + code);
         return RespGenerstor.success(wechatCpService.getWxCpUserId(code));
     }
 

+ 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();
+    }
+}

ファイルの差分が大きいため隠しています
+ 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;
+//    }
+
+}

+ 6 - 3
src/main/java/com/ghsc/partybuild/service/wechat/WechatCpServiceImpl.java

@@ -1,11 +1,13 @@
 package com.ghsc.partybuild.service.wechat;
 
 import com.ghsc.partybuild.util.DateUtils;
+import com.ghsc.partybuild.util.JsonMapper;
 import com.ghsc.partybuild.util.StringUtils;
 import com.ghsc.partybuild.util.UrlUtils;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.cp.api.WxCpChatService;
 import me.chanjar.weixin.cp.api.WxCpService;
+import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,9 +42,10 @@ public class WechatCpServiceImpl implements WechatCpService {
 
     @Override
     public String getWxCpUserId(String code) throws WxErrorException {
-        String userId = wxCpService.getOauth2Service().getAuthUserInfo(code).getUserId();
-        logger.info("getWxCpUserId:code=" + code + ",userId=" + userId);
-        return userId;
+        //WxCpOauth2UserInfo userInfo = wxCpService.getOauth2Service().getAuthUserInfo(code);新接口返回null,使用旧接口
+        WxCpOauth2UserInfo userInfo = wxCpService.getOauth2Service().getUserInfo(code);
+        logger.info("getWxCpUserId-return:code=" + code + ",userId=" + userInfo.getUserId());
+        return userInfo.getUserId();
     }
 
 }

+ 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 - 1
src/main/resources/application.yml

@@ -163,7 +163,7 @@ wx:
   cp:
     configs:
       corpId: wwb4941d05cf8473e4
-      corpsecret: corpsecretid
+      corpsecret: ohU54VhB-POaD5g4h-ZT3M72BgdAp279VuW_l-v6FWI
       agentId: 1000004
       redirectUrl: www.bowintek.com/ghsc/mobile
 

+ 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>

+ 96 - 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 },
@@ -3077,6 +3113,37 @@
                     return $ocLazyLoad.load('../main/partylife/meeting/list.js?' + window.sysVersion);
                 }]
             }
+
+        }).state("home.pf_meetingEdit1", {
+            url: "pf_meetingEdit1",
+            params: { "partyLifeMeetingType": 1 },
+            templateUrl: "../main/partylife/meeting/edit.html?" + window.sysVersion,
+            controller: "pf_meetingEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/meeting/edit.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.pf_meetingAdd1", {
+            url: "pf_meetingAdd1",
+            params: { "partyLifeMeetingType": 1 },
+            templateUrl: "../main/partylife/meeting/edit.html?" + window.sysVersion,
+            controller: "pf_meetingEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/meeting/edit.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.pf_meetingDetail1", {
+            url: "pf_meetingDetail1",
+            templateUrl: "../main/partylife/meeting/detail.html?" + window.sysVersion,
+            controller: "pf_meetingDetailCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/meeting/detail.js?' + window.sysVersion);
+                }]
+            }
+
         }).state("home.pf_meetingList2", {
             url: "pf_meetingList2",
             params: { "partyLifeMeetingType": 2 },
@@ -3088,6 +3155,35 @@
                     return $ocLazyLoad.load('../main/partylife/meeting/list.js?' + window.sysVersion);
                 }]
             }
+        }).state("home.pf_meetingEdit2", {
+            url: "pf_meetingEdit2",
+            params: { "partyLifeMeetingType": 2 },
+            templateUrl: "../main/partylife/meeting/edit.html?" + window.sysVersion,
+            controller: "pf_meetingEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/meeting/edit.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.pf_meetingAdd2", {
+            url: "pf_meetingAdd2",
+            params: { "partyLifeMeetingType": 2 },
+            templateUrl: "../main/partylife/meeting/edit.html?" + window.sysVersion,
+            controller: "pf_meetingEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/meeting/edit.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.pf_meetingDetail2", {
+            url: "pf_meetingDetail2",
+            templateUrl: "../main/partylife/meeting/detail.html?" + window.sysVersion,
+            controller: "pf_meetingDetailCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/meeting/detail.js?' + window.sysVersion);
+                }]
+            }
         }).state("home.pf_meetingTxthList", {
             url: "pf_meetingTxthList",
             params: { "partyLifeMeetingType": 3 },

+ 18 - 0
src/main/resources/static/app/main/bigdata/showDjdsj/home.js

@@ -41,6 +41,24 @@
         };
         $scope.load_dwxx();
 
+        //党组织信息
+        $scope.dzz_total = {};
+        $scope.load_dzzcount = function () {
+            $http
+            ({
+                method: 'get',
+                url: '../../api/bigdata/getDzzxxCount',
+                params: {
+
+                }
+            }).then(function (result) {
+                if (result.data != null) {
+                    $scope.dzz_total = result.data;
+                }
+            });
+        };
+        $scope.load_dzzcount();
+
 
         //党员信息
         $scope.dyxx = {};

+ 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"/>

+ 1 - 0
src/main/resources/static/app/main/partylife/djscgz/list.js

@@ -3,6 +3,7 @@
         $scope.loginUserId = AuthUser.getUser().Id;
         $scope.isShow = true;
         $scope.isAll = false;
+        $scope.pageId = "pf_djscgzList";
         $scope.tabNameAdd = "home.pf_djscgzAdd";
         $scope.tabNameEdit = "home.pf_djscgzEdit";
         $scope.tabNameDetail = "home.pf_djscgzDetail";

+ 1 - 0
src/main/resources/static/app/main/partylife/dnjzjy/list.js

@@ -4,6 +4,7 @@
         $scope.isShow = false;
         $scope.moreTxt = "更多";
         $scope.isAll = false;
+        $scope.pageId = "pf_dnjzjyList";
         $scope.tabNameAdd = "home.pf_dnjzjyAdd";
         $scope.tabNameEdit = "home.pf_dnjzjyEdit";
         $scope.tabNameDetail = "home.pf_dnjzjyDetail";

+ 24 - 46
src/main/resources/static/app/main/partylife/jljyxxyhd/detail.html

@@ -5,29 +5,12 @@
                 <div class="dj-formtable">
                     <table class="dj-table dj-table3">
                         <tr>
-                            <th>所属党组织</th>
-                            <td>{{dataModel.partyname}}</td>
-                            <th>会议名称</th>
-                            <td>{{dataModel.title}}</td>
-                            <th>会议时间</th>
-                            <td>{{dataModel.meetingdate | date:'yyyy-MM-dd'}}</td>
-                        </tr>
-                        <tr>
-                            <th>主持人</th>
-                            <td>{{dataModel.compere}}</td>
-                            <th>会议地址</th>
-                            <td colspan="3">{{dataModel.address}}</td>
-                        </tr>
-                        <tr>
-                            <th>“三重一大”类别</th>
-                            <td colspan="5">
-                                <div style="float: left;position: relative;display: inline-block;margin: 0px 0px 0px 5px;"
-                                     ng-repeat="it in scydTypeList">
-                                    <input type="checkbox" ng-model="it.checked" disabled
-                                           id="{{pageId}}_scydcheckbox_{{it.dickey}}"/>
-                                    <label for="{{pageId}}_scydcheckbox_{{it.dickey}}">{{it.dicvalue}}</label>
-                                </div>
-                            </td>
+                            <th>所属党组织<span style="color:red;">*</span></th>
+                            <td>{{dataModel.dzzmc}}</td>
+                            <th>活动名称<span style="color:red;">*</span></th>
+                            <td>{{dataModel.hdmc}}</td>
+                            <th>日期<span style="color:red;">*</span></th>
+                            <td>{{dataModel.rq}}</td>
                         </tr>
                     </table>
                 </div>
@@ -35,46 +18,41 @@
                     <div class="table-responsive list-table-panel">
                         <div class="list-table-title">
                             <div class="table-title">
-                                出席人员列表({{dataModel.personnellist.length}}人)
+                                统计明细表({{dataModel.fblist.length}}人)
                             </div>
                         </div>
                         <div class="outoflow" style="max-height: 300px;">
-                            <table class="table table-bordered table-striped table-hover js-basic-example dataTable text-nowrap">
+                            <table class="table table-bordered">
                                 <thead>
                                 <tr>
                                     <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 dataModel.personnellist">
+                                <tr ng-repeat="it in dataModel.fblist">
                                     <td scope="row">{{$index+1}}</td>
-                                    <td>{{it.xm}}</td>
-                                    <td>{{it.isabsenteeismname}}</td>
-                                    <td style="min-width: 150px !important;word-wrap: break-word;word-break: break-all;white-space: normal;">{{it.absenteeismcause}}</td>
+                                    <td>{{it.zdgz}}</td>
+                                    <td>{{it.mc}}</td>
+                                    <td>{{it.sj}}</td>
+                                    <td>{{it.jydx}}</td>
+                                    <td>{{it.cjrs}}</td>
+                                    <td>{{it.remark}}</td>
                                 </tr>
-                                <tr ng-if="userList.length<=0">
-                                    <td colspan="7" style="text-align:center">暂无数据</td>
+                                <tr ng-if="dataModel.fblist.length<=0">
+                                    <td colspan="8" style="text-align:center">暂无数据</td>
                                 </tr>
                                 </tbody>
                             </table>
                         </div>
                     </div>
                 </div>
-                <div class="dj-formtable">
-                    <table class="dj-table">
-                        <tr>
-                            <th style="width: 5%;">列席人员</th>
-                            <td colspan="5">{{dataModel.personnel}}</td>
-                        </tr>
-                        <tr>
-                            <th style="width: 5%;">会议主要议程及结果</th>
-                            <td colspan="5">{{dataModel.result}}</td>
-                        </tr>
-                    </table>
-                </div>
             <bsfiles ng-model="reqFileModel"/>
         </div>
     </div>

+ 10 - 10
src/main/resources/static/app/main/partylife/jljyxxyhd/detail.js

@@ -2,7 +2,16 @@
     $app.module('gtPartyApp').controller('pf_jljyxxyhdDetailCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
         $scope.editParams = $bsRouterState.$params($scope);
         $scope.pageId = $bsRouterState.tabs.activeTab;
-        $scope.dataModel = {}; 
+        $scope.dataModel = {};
+
+        $scope.reqFileModel = {
+            selectdata: {FileRefID: '', pageindex: 1, pagesize: 10, ptotal: 0},//查询参数:FileRefID为文件关联ID
+            filetype: 71,//文件类型
+            items: [],//列表数据地址
+            readonly: true,//是否只能查看
+            title: '附件',
+            addFileButton: '上传'
+        };
 
         $scope.getData = function () {
             $http
@@ -21,15 +30,6 @@
 
         $scope.getData();
 
-        $scope.reqFileModel = {
-            selectdata: {FileRefID: '', pageindex: 1, pagesize: 10, ptotal: 0},//查询参数:FileRefID为文件关联ID
-            filetype: 71,//文件类型
-            items: [],//列表数据地址
-            readonly: true,//是否只能查看
-            title: '附件',
-            addFileButton: '上传'
-        };
-
         $scope.pagechange = function () {
             $bsRouterState.$closeTab($scope);
         };

+ 5 - 0
src/main/resources/static/app/main/partylife/jljyxxyhd/list.html

@@ -51,6 +51,7 @@
                                                        autocomplete="off"
                                                        autoclose="true"
                                                        data-date-format="yyyyMM" data-date-type="string"
+                                                       data-min-view="1" data-start-view="1"
                                                        ng-model="selectparams.startDate"
                                                        ng-change="search()"
                                                        placeholder="" bs-datepicker/>
@@ -58,6 +59,7 @@
                                                        autocomplete="off"
                                                        autoclose="true"
                                                        data-date-format="yyyyMM" data-date-type="string"
+                                                       data-min-view="1" data-start-view="1"
                                                        ng-model="selectparams.endDate"
                                                        ng-change="search()"
                                                        placeholder="" bs-datepicker/>
@@ -72,6 +74,9 @@
                                 <button class="btn btn-default1"
                                         ng-click="search()">查询
                                 </button>
+                                <button class="btn btn-default1"
+                                        ng-click="reset()">重置
+                                </button>
                             </div>
                         </div>
                     </div>

+ 7 - 0
src/main/resources/static/app/main/partylife/jljyxxyhd/list.js

@@ -15,6 +15,7 @@
             selectdzzmc: "",
             defaultselected: $state.params.dzzdm
         };
+        $scope.resetTreeparams = angular.copy($scope.treeparams);
         //查询条件
         $scope.selectparams = {
             pageindex: 1,
@@ -25,6 +26,7 @@
             endDate: null
         };
         $scope.pageInfo = {ptotal: 0};
+        $scope.resetSelectparams = angular.copy($scope.selectparams);
 
         $scope.$on('tabChildReloadData', function (event, data) {
             if (data.name == 'pf_jljyxxyhdListCtrl') {
@@ -150,6 +152,11 @@
             $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();
     });

+ 1 - 1
src/main/resources/static/app/main/partylife/meeting/list.js

@@ -6,7 +6,7 @@
         $scope.moreTxt = "更多";
         $scope.partyLifeMeetingType = $state.params.partyLifeMeetingType;
         $scope.isAll = false;
-        $scope.pageId = "meetingList";
+        $scope.pageId = "meetingList" + $scope.partyLifeMeetingType;
         $scope.tabNameAdd = "home.pf_meetingAdd" + $scope.partyLifeMeetingType;
         $scope.tabNameEdit = "home.pf_meetingEdit" + $scope.partyLifeMeetingType;
         $scope.tabNameDetail = "home.pf_meetingDetail" + $scope.partyLifeMeetingType;

+ 3 - 0
src/main/resources/static/app/main/partylife/scyd/list.html

@@ -72,6 +72,9 @@
                                 <button class="btn btn-default1"
                                         ng-click="search()">查询
                                 </button>
+                                <button class="btn btn-default1"
+                                        ng-click="reset()">重置
+                                </button>
                             </div>
                         </div>
                     </div>

+ 9 - 1
src/main/resources/static/app/main/partylife/scyd/list.js

@@ -20,6 +20,7 @@
             selectdzzmc: "",
             defaultselected: $state.params.dzzdm
         };
+        $scope.resettreeparams = angular.copy($scope.treeparams);
         //查询条件
         $scope.selectparams = {
             pageindex: 1,
@@ -31,6 +32,7 @@
             endDate: null
         };
         $scope.pageInfo = {ptotal: 0};
+        $scope.resetselectparams = angular.copy($scope.selectparams);
 
         $scope.$on('tabChildReloadData', function (event, data) {
             if (data.name == 'pf_scydMeetingListCtrl') {
@@ -166,6 +168,12 @@
         };
 
         $scope.loadData();
-        // $scope.getPartyLifeMeetingTypeList();
+
+        $scope.reset = function () {
+            $scope.treeparams = angular.copy($scope.resettreeparams);
+            $scope.selectparams = angular.copy($scope.resetselectparams);
+            $scope.selectparams.partyLifeMeetingType = $scope.partyLifeMeetingType;
+            $scope.loadData();
+        }
     });
 })(angular);

+ 3 - 0
src/main/resources/static/app/main/partylife/tqdflzhy/list.html

@@ -72,6 +72,9 @@
                                 <button class="btn btn-default1"
                                         ng-click="search()">查询
                                 </button>
+                                <button class="btn btn-default1"
+                                        ng-click="reset()">重置
+                                </button>
                             </div>
                         </div>
                     </div>

+ 8 - 0
src/main/resources/static/app/main/partylife/tqdflzhy/list.js

@@ -20,6 +20,7 @@
             selectdzzmc: "",
             defaultselected: $state.params.dzzdm
         };
+        $scope.resetTreeparams = angular.copy($scope.treeparams);
         //查询条件
         $scope.selectparams = {
             pageindex: 1,
@@ -31,6 +32,7 @@
             endDate: null
         };
         $scope.pageInfo = {ptotal: 0};
+        $scope.resetselectparams = angular.copy($scope.selectparams);
 
         $scope.$on('tabChildReloadData', function (event, data) {
             if (data.name == 'pf_tqdflzhyMeetingListCtrl') {
@@ -164,6 +166,12 @@
                 $scope.moreTxt = "更多";
             }
         };
+        $scope.reset = function () {
+            $scope.selectparams = angular.copy($scope.resetSelectparams);
+            $scope.treeparams = angular.copy($scope.resetTreeparams);
+            $scope.loadData();
+        };
+
 
         $scope.loadData();
     });

+ 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);