he2802 2 年之前
父节点
当前提交
72408ec57e
共有 36 个文件被更改,包括 1460 次插入213 次删除
  1. 0 40
      run-pre.sh
  2. 33 6
      run-prod.sh
  3. 5 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  4. 5 0
      zhongzheng-admin-saas/src/main/resources/application-pre.yml
  5. 7 2
      zhongzheng-admin-saas/src/main/resources/application-prod.yml
  6. 17 7
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  7. 5 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  8. 4 0
      zhongzheng-admin/src/main/resources/application-pre.yml
  9. 6 1
      zhongzheng-admin/src/main/resources/application-prod.yml
  10. 6 1
      zhongzheng-api/src/main/resources/application-dev.yml
  11. 5 0
      zhongzheng-api/src/main/resources/application-pre.yml
  12. 7 2
      zhongzheng-api/src/main/resources/application-prod.yml
  13. 138 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/bank/DCCryptor.java
  14. 169 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/bank/DCHelper.java
  15. 61 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/bank/GENKey.java
  16. 二进制
      zhongzheng-common/src/main/resources/static/005.jpg
  17. 二进制
      zhongzheng-common/src/main/resources/static/0051.jpg
  18. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseChapterVo.java
  19. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  20. 135 133
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  21. 20 20
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
  22. 73 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillAddBo.java
  23. 88 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillEditBo.java
  24. 85 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillQueryBo.java
  25. 73 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/domain/TopBankBill.java
  26. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/mapper/TopBankBillMapper.java
  27. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/ITopBankBillService.java
  28. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/IZsBankService.java
  29. 112 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/TopBankBillServiceImpl.java
  30. 184 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/ZsBankServiceImpl.java
  31. 87 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/vo/TopBankBillVo.java
  32. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserCertificateMapper.java
  33. 45 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserCertificateServiceImpl.java
  34. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  35. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserCertificateVo.java
  36. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserCertificateMapper.xml

+ 0 - 40
run-pre.sh

@@ -77,46 +77,6 @@ docker run \
 echo '----start container admin----'
 echo '----start container admin----'
 
 
 
 
-echo "开始等待20秒..."
-# 1-10秒内随机
-sleep 5
-echo "等待后继续"
 
 
-#!/usr/bin/env bash
-# 定义应用组名
-group_admin_name='zhongzheng-pre'
-# 定义应用名称
-app_admin_name='zhongzheng-saas-admin-top-pre'
-# 定义应用版本
-app_admin_version='1.0-SNAPSHOT'
-# 定义应用环境
-profile_active='pre'
-echo '----copy jar admin----'
-docker stop ${app_admin_name}
-echo '----stop container admin----'
-docker rm ${app_admin_name}
-echo '----rm container admin----'
-docker rmi ${group_admin_name}/${app_admin_name}:${app_admin_version}
-echo '----rm image admin----'
-# 打包编译docker镜像
-docker build -f /mydata/maven/build/Dockerfile-saas -t ${group_admin_name}/${app_admin_name}:${app_admin_version} .
-echo '----build image admin----'
-docker run \
--p 8077:7077 \
---name ${app_admin_name} \
---restart=always \
---link mysql:db \
---log-opt max-size=50m \
---log-opt max-file=3 \
--e 'spring.profiles.active'=${profile_active} \
--e TZ="Asia/Shanghai" \
---add-host=gdxypx.xy.com:192.168.1.210 \
--v /etc/localtime:/etc/localtime \
--v /usr/share/fonts:/usr/share/fonts \
--v /data/logs/pre_admin_top:/logs \
--v /mydata/app/${app_admin_name}/logs:/var/logs \
--v /data/nginx/conf.d:/data/nginx/conf.d \
--d ${group_admin_name}/${app_admin_name}:${app_admin_version}
-echo '----start container admin top----'
 
 
 
 

+ 33 - 6
run-prod.sh

@@ -1,4 +1,36 @@
-
+#!/usr/bin/env bash
+# 定义应用组名
+group_name='zhongzheng'
+# 定义应用名称
+app_name='zhongzheng-saas-api'
+# 定义应用版本
+app_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='prod'
+echo '----copy jar----'
+docker stop ${app_name}
+echo '----stop container----'
+docker rm ${app_name}
+echo '----rm container----'
+docker rmi ${group_name}/${app_name}:${app_version}
+echo '----rm image----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile -t ${group_name}/${app_name}:${app_version} .
+echo '----build image----'
+docker run -p 5055:5055 --name ${app_name} \
+--restart=always \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-m 10240m \
+--cpus=3 \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/prod_api:/logs \
+-v /mydata/app/${app_name}/logs:/var/logs \
+-d ${group_name}/${app_name}:${app_version}
+echo '----start container----'
 
 
 echo "开始等待20秒..."
 echo "开始等待20秒..."
 # 1-10秒内随机
 # 1-10秒内随机
@@ -39,8 +71,3 @@ docker run \
 -v /data/nginx/conf.d:/data/nginx/conf.d \
 -v /data/nginx/conf.d:/data/nginx/conf.d \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
 echo '----start container admin----'
-
-echo "开始等待20秒..."
-# 1-10秒内随机
-sleep 5
-echo "等待后继续"

+ 5 - 0
zhongzheng-admin-saas/src/main/resources/application-dev.yml

@@ -197,3 +197,8 @@ shared:
     rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData
     rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData
     customerOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerOrderData
     customerOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerOrderData
 
 
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K
+

+ 5 - 0
zhongzheng-admin-saas/src/main/resources/application-pre.yml

@@ -186,3 +186,8 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 7 - 2
zhongzheng-admin-saas/src/main/resources/application-prod.yml

@@ -134,7 +134,7 @@ oldStudySys:
     classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
     classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
     salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
     salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://www.xyyxt.net/system/BussinessApi/UpdateInvoiceData
     updateInvoicePath: http://www.xyyxt.net/system/BussinessApi/UpdateInvoiceData
-    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
+    createExamPath: http://www.xyyxt.net/system/BussinessApi/CreateSameClass
 
 
 officialPush:
 officialPush:
     infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan
     infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan
@@ -170,7 +170,7 @@ oldOrder:
 
 
 oldSys:
 oldSys:
     host: https://www.xyyxt.net
     host: https://www.xyyxt.net
-    goods: http://www.xyyxt.net/WitSystem/BussinessApi/NewYxtLogin
+    goods: http://www.xyyxt.net/system/BussinessApi/NewYxtLogin
 
 
 invoice:
 invoice:
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log
@@ -196,3 +196,8 @@ shared:
     rateData: http://www.xyyxt.net//WitSystem/BussinessApi/CustomerConversionRateData
     rateData: http://www.xyyxt.net//WitSystem/BussinessApi/CustomerConversionRateData
     rateTrend: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerConversionRateTrendData
     rateTrend: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerConversionRateTrendData
     customerOrder: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerOrderData
     customerOrder: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerOrderData
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 17 - 7
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -16,6 +16,7 @@ import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.type.EncryptHandler;
+import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.file.FileUploadUtils;
 import com.zhongzheng.common.utils.file.FileUploadUtils;
@@ -66,6 +67,7 @@ import com.zhongzheng.modules.order.service.IOrderGoodsRefundService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
+import com.zhongzheng.modules.sdk.service.IZsBankService;
 import com.zhongzheng.modules.system.bo.SysTenantAdminBo;
 import com.zhongzheng.modules.system.bo.SysTenantAdminBo;
 import com.zhongzheng.modules.system.bo.SysTenantAdminOldBo;
 import com.zhongzheng.modules.system.bo.SysTenantAdminOldBo;
 import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
 import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
@@ -157,15 +159,13 @@ public class CommonController extends BaseController {
     @Autowired
     @Autowired
     private IClassGradeUserService iClassGradeUserService;
     private IClassGradeUserService iClassGradeUserService;
 
 
-    @Autowired
-    private IExamService iExamService;
 
 
-    @Autowired
-    private IQuestionOtherService iQuestionOtherService;
-    @Autowired
-    private OssService ossService;
     @Autowired
     @Autowired
     private ICertificateTpService iCertificateTpService;
     private ICertificateTpService iCertificateTpService;
+
+
+    @Autowired
+    private IZsBankService iZsBankService;
     /**
     /**
      * 通用下载请求
      * 通用下载请求
      *
      *
@@ -780,7 +780,7 @@ public class CommonController extends BaseController {
         return AjaxResult.success(iClassGradeUserService.pushOfficialPeriodMore(list));
         return AjaxResult.success(iClassGradeUserService.pushOfficialPeriodMore(list));
     }
     }
 
 
-   
+
 
 
     @ApiOperation("测试获取山东题库")
     @ApiOperation("测试获取山东题库")
     @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
     @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
@@ -791,6 +791,16 @@ public class CommonController extends BaseController {
         return AjaxResult.success();
         return AjaxResult.success();
     }
     }
 
 
+    @ApiOperation("测试网银")
+    @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
+    @Log(title = "测试网银", businessType = BusinessType.INSERT)
+    @GetMapping("/common/free/zsBank")
+    public AjaxResult zsBank() {
+        String date = DateUtils.dateTimeNow("yyyyMMdd");
+        System.out.println(iZsBankService.searchBreakPoint(null,"755915680210507",date,date));
+        return AjaxResult.success();
+    }
+
 
 
 
 
     @ApiOperation("旧系统post请求")
     @ApiOperation("旧系统post请求")

+ 5 - 0
zhongzheng-admin/src/main/resources/application-dev.yml

@@ -197,3 +197,8 @@ shared:
     rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
     rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
     rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData
     rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData
     customerOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerOrderData
     customerOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerOrderData
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 4 - 0
zhongzheng-admin/src/main/resources/application-pre.yml

@@ -187,3 +187,7 @@ exam:
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
 
 
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 6 - 1
zhongzheng-admin/src/main/resources/application-prod.yml

@@ -170,7 +170,7 @@ oldOrder:
 
 
 oldSys:
 oldSys:
     host: http://test.jqbao.net
     host: http://test.jqbao.net
-    goods: http://www.xyyxt.net/WitSystem/BussinessApi/NewYxtLogin
+    goods: http://www.xyyxt.net/system/BussinessApi/NewYxtLogin
 
 
 invoice:
 invoice:
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log
@@ -196,3 +196,8 @@ shared:
     rateData: http://www.xyyxt.net//WitSystem/BussinessApi/CustomerConversionRateData
     rateData: http://www.xyyxt.net//WitSystem/BussinessApi/CustomerConversionRateData
     rateTrend: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerConversionRateTrendData
     rateTrend: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerConversionRateTrendData
     customerOrder: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerOrderData
     customerOrder: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerOrderData
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 6 - 1
zhongzheng-api/src/main/resources/application-dev.yml

@@ -198,4 +198,9 @@ shared:
     orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
     orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
     rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
     rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
     rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData
     rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData
-    customerOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerOrderData
+    customerOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerOrderData
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 5 - 0
zhongzheng-api/src/main/resources/application-pre.yml

@@ -186,3 +186,8 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 7 - 2
zhongzheng-api/src/main/resources/application-prod.yml

@@ -146,7 +146,7 @@ oldStudySys:
     classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
     classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
     salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
     salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://www.xyyxt.net/system/BussinessApi/UpdateInvoiceData
     updateInvoicePath: http://www.xyyxt.net/system/BussinessApi/UpdateInvoiceData
-    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
+    createExamPath: http://www.xyyxt.net/system/BussinessApi/CreateSameClass
 
 
 officialPush:
 officialPush:
     infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan
     infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan
@@ -182,7 +182,7 @@ oldOrder:
 
 
 oldSys:
 oldSys:
     host: http://test.jqbao.net
     host: http://test.jqbao.net
-    goods: http://www.xyyxt.net/WitSystem/BussinessApi/NewYxtLogin
+    goods: http://www.xyyxt.net/system/BussinessApi/NewYxtLogin
 
 
 invoice:
 invoice:
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log
@@ -209,3 +209,8 @@ shared:
     rateData: http://www.xyyxt.net//WitSystem/BussinessApi/CustomerConversionRateData
     rateData: http://www.xyyxt.net//WitSystem/BussinessApi/CustomerConversionRateData
     rateTrend: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerConversionRateTrendData
     rateTrend: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerConversionRateTrendData
     customerOrder: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerOrderData
     customerOrder: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerOrderData
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 138 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/bank/DCCryptor.java

@@ -0,0 +1,138 @@
+package com.zhongzheng.common.utils.bank;
+
+import org.bouncycastle.asn1.*;
+import org.bouncycastle.crypto.params.ECDomainParameters;
+import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
+import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+import org.bouncycastle.crypto.params.ParametersWithID;
+import org.bouncycastle.crypto.signers.SM2Signer;
+import org.bouncycastle.jce.ECNamedCurveTable;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.jce.spec.ECParameterSpec;
+import org.bouncycastle.math.ec.ECPoint;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.ByteArrayInputStream;
+import java.math.BigInteger;
+import java.security.Security;
+import java.util.Enumeration;
+
+/**
+ * 示例代码,仅供参考
+ */
+public class DCCryptor {
+
+    static {
+        Security.addProvider(new BouncyCastleProvider());
+    }
+
+    public static byte[] CMBSM4EncryptWithCBC(byte key[], byte iv[], byte input[]) throws Exception {
+        if (key == null || iv == null || input == null) {
+            throw new Exception("CMBSM4EncryptWithCBC 非法输入");
+        }
+        return CMBSM4Crypt(key, iv, input, 1);
+    }
+
+    public static byte[] CMBSM4DecryptWithCBC(byte key[], byte iv[], byte input[]) throws Exception {
+        if (key == null || iv == null || input == null) {
+            throw new Exception("CMBSM4DecryptWithCBC 非法输入");
+        }
+        return CMBSM4Crypt(key, iv, input, 2);
+    }
+
+    public static byte[] CMBSM2SignWithSM3(byte[] id, byte privkey[], byte msg[]) throws Exception {
+        if (privkey == null || msg == null) {
+            throw new Exception("CMBSM2SignWithSM3 input error");
+        }
+        ECPrivateKeyParameters privateKey = encodePrivateKey(privkey);
+        SM2Signer signer = new SM2Signer();
+        ParametersWithID parameters = new ParametersWithID(privateKey, id);
+        signer.init(true, parameters);
+        signer.update(msg, 0, msg.length);
+        return decodeDERSignature(signer.generateSignature());
+    }
+
+    public static boolean CMBSM2VerifyWithSM3(byte[] id, byte pubkey[], byte msg[], byte signature[]) throws Exception {
+
+        if (pubkey == null || msg == null || signature == null) {
+            throw new Exception("CMBSM2VerifyWithSM3 input error");
+        }
+        ECPublicKeyParameters publicKey = encodePublicKey(pubkey);
+        SM2Signer signer = new SM2Signer();
+        ParametersWithID parameters = new ParametersWithID(publicKey, id);
+        signer.init(false, parameters);
+        signer.update(msg, 0, msg.length);
+        return signer.verifySignature(encodeDERSignature(signature));
+    }
+
+    private static byte[] CMBSM4Crypt(byte key[], byte iv[], byte input[], int mode) throws Exception {
+        SecretKeySpec spec = new SecretKeySpec(key, "SM4");
+        IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
+        Cipher cipher = Cipher.getInstance("SM4/CBC/PKCS7Padding", BouncyCastleProvider.PROVIDER_NAME);
+        cipher.init(mode, spec, ivParameterSpec);
+        return cipher.doFinal(input);
+    }
+
+    private static ECPrivateKeyParameters encodePrivateKey(byte[] value) {
+        BigInteger d = new BigInteger(1, value);
+        ECParameterSpec spec = ECNamedCurveTable.getParameterSpec("sm2p256v1");
+        ECDomainParameters ecParameters = new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN(), spec.getH(), spec.getSeed());
+        return new ECPrivateKeyParameters(d, ecParameters);
+    }
+
+    public static ECPublicKeyParameters encodePublicKey(byte[] value) {
+        byte[] x = new byte[32];
+        byte[] y = new byte[32];
+        System.arraycopy(value, 1, x, 0, 32);
+        System.arraycopy(value, 33, y, 0, 32);
+        BigInteger X = new BigInteger(1, x);
+        BigInteger Y = new BigInteger(1, y);
+        ECParameterSpec spec = ECNamedCurveTable.getParameterSpec("sm2p256v1");
+        ECPoint Q = spec.getCurve().createPoint(X, Y);
+        ECDomainParameters ecParameters = new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN(), spec.getH(), spec.getSeed());
+        return new ECPublicKeyParameters(Q, ecParameters);
+    }
+
+    @SuppressWarnings("unchecked")
+    private static byte[] decodeDERSignature(byte[] signature) throws Exception {
+        ASN1InputStream stream = new ASN1InputStream(new ByteArrayInputStream(signature));
+        ASN1Sequence primitive = (ASN1Sequence) stream.readObject();
+        Enumeration<ASN1Integer> enumeration = primitive.getObjects();
+        BigInteger R = enumeration.nextElement().getValue();
+        BigInteger S = enumeration.nextElement().getValue();
+        byte[] bytes = new byte[64];
+        byte[] r = format(R.toByteArray());
+        byte[] s = format(S.toByteArray());
+        System.arraycopy(r, 0, bytes, 0, 32);
+        System.arraycopy(s, 0, bytes, 32, 32);
+        return bytes;
+    }
+
+    private static byte[] encodeDERSignature(byte[] signature) throws Exception {
+        byte[] r = new byte[32];
+        byte[] s = new byte[32];
+        System.arraycopy(signature, 0, r, 0, 32);
+        System.arraycopy(signature, 32, s, 0, 32);
+        ASN1EncodableVector vector = new ASN1EncodableVector();
+        vector.add(new ASN1Integer(new BigInteger(1, r)));
+        vector.add(new ASN1Integer(new BigInteger(1, s)));
+        return (new DERSequence(vector)).getEncoded();
+    }
+
+    private static byte[] format(byte[] value) {
+        if (value.length == 32) {
+            return value;
+        } else {
+            byte[] bytes = new byte[32];
+            if (value.length > 32) {
+                System.arraycopy(value, value.length - 32, bytes, 0, 32);
+            } else {
+                System.arraycopy(value, 0, bytes, 32 - value.length, value.length);
+            }
+            return bytes;
+        }
+    }
+
+}

+ 169 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/bank/DCHelper.java

@@ -0,0 +1,169 @@
+package com.zhongzheng.common.utils.bank;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+
+import javax.net.ssl.*;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.KeyStore;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 示例代码,仅供参考
+ * 本示例中用到的(HttpUrlConnection)存在不遵循RFC协议的重试机制,请在启动参数中将sun.net.http.retryPost参数设置为false,禁用重发。
+ */
+public class DCHelper {
+
+    public static String serialJsonOrdered(JsonObject json) throws Exception {
+        StringBuilder appender = new StringBuilder();
+        appender.append("{");
+        Iterator<String> keys = new TreeSet<>(json.keySet()).iterator();
+        boolean isFirstEle = true;
+        while (keys.hasNext()) {
+            if (!isFirstEle) {
+                appender.append(",");
+            }
+            String key = keys.next();
+            Object val = json.get(key);
+            if (val instanceof JsonObject) {
+                appender.append("\"").append(key).append("\":");
+                appender.append(serialJsonOrdered((JsonObject) val));
+            } else if (val instanceof JsonArray) {
+                JsonArray jarray = (JsonArray) val;
+                appender.append("\"").append(key).append("\":[");
+                boolean isFirstArrEle = true;
+                for (int i = 0; i < jarray.size(); i++) {
+                    if (!isFirstArrEle) {
+                        appender.append(",");
+                    }
+                    Object obj = jarray.get(i);
+                    if (obj instanceof JsonObject) {
+                        appender.append(serialJsonOrdered((JsonObject) obj));
+                    } else {
+                        appender.append(obj.toString());
+                    }
+                    isFirstArrEle = false;
+                }
+                appender.append("]");
+            } else {
+                String value = val.toString();
+                appender.append("\"").append(key).append("\":").append(value);
+            }
+            isFirstEle = false;
+        }
+        appender.append("}");
+        return appender.toString();
+    }
+
+    public static String getTime() {
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+        return dateFormat.format(new Date());
+    }
+
+    public static String doPostForm(String httpUrl, Map<String, String> param) throws Exception {
+        HttpURLConnection connection = null;
+        InputStream is = null;
+        OutputStream os = null;
+        BufferedReader br = null;
+        String result = null;
+        try {
+            URL url = new URL(httpUrl);
+            SSLContext sslcontext;
+            sslcontext = SSLContext.getInstance("SSL");
+            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+            tmf.init((KeyStore) null);
+            X509TrustManager defaultTm = null;
+            for (TrustManager tm : tmf.getTrustManagers()) {
+                if (tm instanceof X509TrustManager) {
+                    defaultTm = (X509TrustManager) tm;
+                    break;
+                }
+            }
+            sslcontext.init(null, new TrustManager[] { defaultTm }, new java.security.SecureRandom());
+            HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
+
+            connection = (HttpURLConnection) url.openConnection();
+            connection.setRequestMethod("POST");
+            connection.setConnectTimeout(15000);
+            connection.setReadTimeout(60000);
+            connection.setInstanceFollowRedirects(true);
+
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+
+            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+            os = connection.getOutputStream();
+            os.write(createLinkString(param).getBytes());
+            if (connection.getResponseCode() != 200) {
+                is = connection.getErrorStream();
+                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+                StringBuilder sbf = new StringBuilder();
+                String temp = null;
+                while ((temp = br.readLine()) != null) {
+                    sbf.append(temp);
+                    sbf.append("\r\n");
+                }
+                result = sbf.toString();
+            } else {
+                is = connection.getInputStream();
+                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+                StringBuilder sbf = new StringBuilder();
+                String temp = null;
+                boolean firstLine = true;
+                while ((temp = br.readLine()) != null) {
+                    if (!firstLine) {
+                        firstLine = false;
+                        sbf.append("\r\n");
+                    }
+                    sbf.append(temp);
+                }
+                result = sbf.toString();
+            }
+        } finally {
+            if (null != br) {
+                try {
+                    br.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != os) {
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != is) {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            connection.disconnect();
+        }
+        return result;
+    }
+
+    private static String createLinkString(Map<String, String> params) throws Exception {
+        ArrayList<String> keys = new ArrayList<>(params.keySet());
+        Collections.sort(keys);
+
+        StringBuilder prestr = new StringBuilder();
+        for (int i = 0; i < keys.size(); i++) {
+            String key = keys.get(i);
+            String value = params.get(key);
+            if (i == keys.size() - 1) {
+                prestr.append(key).append("=").append(value);
+            } else {
+                prestr.append(key).append("=").append(value).append("&");
+            }
+        }
+        return prestr.toString();
+    }
+
+}

+ 61 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/bank/GENKey.java

@@ -0,0 +1,61 @@
+package com.zhongzheng.common.utils.bank;
+
+import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
+import org.bouncycastle.crypto.params.ECDomainParameters;
+import org.bouncycastle.crypto.params.ECKeyGenerationParameters;
+import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
+import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+import org.bouncycastle.jce.ECNamedCurveTable;
+import org.bouncycastle.jce.spec.ECParameterSpec;
+import org.bouncycastle.crypto.generators.ECKeyPairGenerator;
+
+import java.math.BigInteger;
+import java.security.SecureRandom;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+
+
+
+public class GENKey {
+
+    private static ECDomainParameters getECDomainParameters() {
+        ECParameterSpec spec = ECNamedCurveTable.getParameterSpec("sm2p256v1");
+        return new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN(), spec.getH(), spec.getSeed());
+    }
+
+
+    /**
+     * 生成国密密钥对
+     *
+     * @return
+     */
+    public static Map<String, byte[]> CMBSM2KeyGen() {
+        ECDomainParameters domainParameters = getECDomainParameters();
+        ECKeyPairGenerator generator = new ECKeyPairGenerator();
+        ECKeyGenerationParameters parameters = new ECKeyGenerationParameters(domainParameters, new SecureRandom());
+        generator.init(parameters);
+        AsymmetricCipherKeyPair keyPair = generator.generateKeyPair();
+        ECPublicKeyParameters publicKeyParameters = (ECPublicKeyParameters) keyPair.getPublic();
+        ECPrivateKeyParameters privateKeyParameters = (ECPrivateKeyParameters) keyPair.getPrivate();
+        Map<String, byte[]> map = new HashMap<>();
+        map.put("publickey", publicKeyParameters.getQ().getEncoded(false));
+        map.put("privatekey", format(privateKeyParameters.getD().toByteArray()));
+        return map;
+    }
+
+    private static byte[] format(byte[] value) {
+        if (value.length == 32) {
+            return value;
+        }
+        byte bytes[] = new byte[32];
+        if (value.length > 32) {
+            System.arraycopy(value, value.length - 32, bytes, 0, 32);
+        } else {
+            System.arraycopy(value, 0, bytes, 32 - value.length, value.length);
+        }
+        return bytes;
+    }
+
+}

二进制
zhongzheng-common/src/main/resources/static/005.jpg


二进制
zhongzheng-common/src/main/resources/static/0051.jpg


+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseChapterVo.java

@@ -7,6 +7,8 @@ import com.zhongzheng.modules.course.domain.CourseStreamingBusiness;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
+
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
@@ -85,4 +87,5 @@ public class CourseChapterVo {
 	private Integer commonSign;
 	private Integer commonSign;
 	@ApiModelProperty("节总时间")
 	@ApiModelProperty("节总时间")
 	private Long totalTime;
 	private Long totalTime;
+
 }
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -1858,6 +1858,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
             //释放
             //释放
+            e.printStackTrace();
             redisCache.deleteObject(key);
             redisCache.deleteObject(key);
             log.error("商品增量报错:" + e.getMessage());
             log.error("商品增量报错:" + e.getMessage());
         }
         }

+ 135 - 133
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -571,43 +571,43 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         ClassGrade update = BeanUtil.toBean(bo, ClassGrade.class);
         ClassGrade update = BeanUtil.toBean(bo, ClassGrade.class);
         validEntityBeforeSave(update);
         validEntityBeforeSave(update);
         update.setUpdateTime(DateUtils.getNowTime());
         update.setUpdateTime(DateUtils.getNowTime());
-
-        ClassGradeGoods gradeGoods = iClassGradeGoodsService.getOne(new LambdaQueryWrapper<ClassGradeGoods>().eq(ClassGradeGoods::getGradeId, update.getGradeId()));
-        if (ObjectUtils.isNull(gradeGoods)) {
-            throw new RuntimeException("班级商品信息查询失败");
-        }
-        ClassGrade classGrade = getById(update.getGradeId());
-        String officialName = classGrade.getOfficialName();//预开班班级编号
-        //企业ID
-        String tenant = ServletUtils.getRequest().getHeader("TenantId");
-        SysTenant sysTenant = sysTenantService.getById(Long.valueOf(tenant));
-
-        Goods goods = iGoodsService.getById(gradeGoods.getGoodsId());
-        CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
-        businessQueryBo.setId(goods.getBusinessId());
-        String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
-
-        if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName)))&& sysTenant.getShareClass() == 1) {
-            if (update.getClassStatus() != null && update.getClassStatus().equals(1)) {
-                //二造和二建班级开班校验班级人数(300人)
-                if (!checkClassUserNum(goods.getBusinessId(), update.getGradeId())) {
-                    throw new RuntimeException("班级人数超过上限,不能开班,请检查!");
-                }
-                ClassGrade gradeGrade = getById(update.getGradeId());
-                if (StringUtils.isNotBlank(gradeGrade.getOfficialName())) {
-                    update.setRegisterCode(gradeGrade.getOfficialName());
-                }
-                //二建/二造官方信息推送开关打开
-                List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
-                        .list(new LambdaQueryWrapper<ClassGradeInterface>()
-                                .eq(ClassGradeInterface::getType, 1).last("limit 1"));
-                if (CollectionUtils.isNotEmpty(interfaceList)) {
-                    update.setInterfacePushId(interfaceList.get(0).getId());
+        List<ClassGradeGoods> goodsList = iClassGradeGoodsService.list(new LambdaQueryWrapper<ClassGradeGoods>().eq(ClassGradeGoods::getGradeId, update.getGradeId()));
+        for(ClassGradeGoods gradeGoods:goodsList){
+            if (ObjectUtils.isNull(gradeGoods)) {
+                throw new RuntimeException("班级商品信息查询失败");
+            }
+            ClassGrade classGrade = getById(update.getGradeId());
+            String officialName = classGrade.getOfficialName();//预开班班级编号
+            //企业ID
+            String tenant = ServletUtils.getRequest().getHeader("TenantId");
+            SysTenant sysTenant = sysTenantService.getById(Long.valueOf(tenant));
+
+            Goods goods = iGoodsService.getById(gradeGoods.getGoodsId());
+            CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
+            businessQueryBo.setId(goods.getBusinessId());
+            String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
+
+            if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName)))&& sysTenant.getShareClass() == 1) {
+                if (update.getClassStatus() != null && update.getClassStatus().equals(1)) {
+                    //二造和二建班级开班校验班级人数(300人)
+                    if (!checkClassUserNum(goods.getBusinessId(), update.getGradeId())) {
+                        throw new RuntimeException("班级人数超过上限,不能开班,请检查!");
+                    }
+                    ClassGrade gradeGrade = getById(update.getGradeId());
+                    if (StringUtils.isNotBlank(gradeGrade.getOfficialName())) {
+                        update.setRegisterCode(gradeGrade.getOfficialName());
+                    }
+                    //二建/二造官方信息推送开关打开
+                    List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
+                            .list(new LambdaQueryWrapper<ClassGradeInterface>()
+                                    .eq(ClassGradeInterface::getType, 1).last("limit 1"));
+                    if (CollectionUtils.isNotEmpty(interfaceList)) {
+                        update.setInterfacePushId(interfaceList.get(0).getId());
+                    }
                 }
                 }
             }
             }
-        }
 
 
-        if (bo.getStatus() != -1) {
+            if (bo.getStatus() != -1) {
            /* LambdaQueryWrapper<ClassGrade> lqw = Wrappers.lambdaQuery();
            /* LambdaQueryWrapper<ClassGrade> lqw = Wrappers.lambdaQuery();
             lqw.eq(ClassGrade::getClassName, update.getClassName());
             lqw.eq(ClassGrade::getClassName, update.getClassName());
             lqw.eq(ClassGrade::getStatus, 1);
             lqw.eq(ClassGrade::getStatus, 1);
@@ -622,126 +622,128 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     throw new RuntimeException("班级名称不能重复");
                     throw new RuntimeException("班级名称不能重复");
                 }
                 }
             }*/
             }*/
-        }
-        if (bo.getStatus() == -1) { //删除判断班级是否人数空
-            ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
-            classGradeUserQueryBo.setGradeId(bo.getGradeId());
-            List<ClassGradeStudentVo> list = this.listGrade(classGradeUserQueryBo);
-            if (list.size() > 0) {
-                throw new RuntimeException("班级还有学员,无法删除");
             }
             }
-            ClassGrade grade = getById(bo.getGradeId());
-            if (StringUtils.isNotBlank(grade.getOfficialName())) {
-                throw new RuntimeException("二建/二造班级无法删除,请联系技术人员!");
-            }
-        }
-        if (bo.getStatus() == 0) {  //更新为无效
-            ClassGradeVo oldGrade = this.queryById(bo.getGradeId());
-            if (oldGrade.getStatus() == 1) {
+            if (bo.getStatus() == -1) { //删除判断班级是否人数空
                 ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
                 ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
                 classGradeUserQueryBo.setGradeId(bo.getGradeId());
                 classGradeUserQueryBo.setGradeId(bo.getGradeId());
                 List<ClassGradeStudentVo> list = this.listGrade(classGradeUserQueryBo);
                 List<ClassGradeStudentVo> list = this.listGrade(classGradeUserQueryBo);
                 if (list.size() > 0) {
                 if (list.size() > 0) {
-                    throw new RuntimeException("班级还有学员,无法设置为无效");
+                    throw new RuntimeException("班级还有学员,无法删除");
+                }
+                ClassGrade grade = getById(bo.getGradeId());
+                if (StringUtils.isNotBlank(grade.getOfficialName())) {
+                    throw new RuntimeException("二建/二造班级无法删除,请联系技术人员!");
                 }
                 }
             }
             }
-            if (StringUtils.isNotBlank(oldGrade.getOfficialName()) && sysTenant.getShareClass() == 1) {
-                throw new RuntimeException("二建/二造班级无法设置为无效,请联系技术人员!");
+            if (bo.getStatus() == 0) {  //更新为无效
+                ClassGradeVo oldGrade = this.queryById(bo.getGradeId());
+                if (oldGrade.getStatus() == 1) {
+                    ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
+                    classGradeUserQueryBo.setGradeId(bo.getGradeId());
+                    List<ClassGradeStudentVo> list = this.listGrade(classGradeUserQueryBo);
+                    if (list.size() > 0) {
+                        throw new RuntimeException("班级还有学员,无法设置为无效");
+                    }
+                }
+                if (StringUtils.isNotBlank(oldGrade.getOfficialName()) && sysTenant.getShareClass() == 1) {
+                    throw new RuntimeException("二建/二造班级无法设置为无效,请联系技术人员!");
+                }
             }
             }
-        }
-        //更改班主任
-        if (bo.getSysUserId() != null) {
-            LambdaQueryWrapper<ClassGradeSys> lqw = new LambdaQueryWrapper<>();
-            lqw.like(ClassGradeSys::getGradeId, bo.getGradeId());
-            lqw.like(ClassGradeSys::getSysUserId, bo.getSysUserId());
-            lqw.like(ClassGradeSys::getStatus, 1);
-            if (CollectionUtils.isEmpty(classGradeSysService.list(lqw))) {
-                lqw.clear();
+            //更改班主任
+            if (bo.getSysUserId() != null) {
+                LambdaQueryWrapper<ClassGradeSys> lqw = new LambdaQueryWrapper<>();
                 lqw.like(ClassGradeSys::getGradeId, bo.getGradeId());
                 lqw.like(ClassGradeSys::getGradeId, bo.getGradeId());
+                lqw.like(ClassGradeSys::getSysUserId, bo.getSysUserId());
                 lqw.like(ClassGradeSys::getStatus, 1);
                 lqw.like(ClassGradeSys::getStatus, 1);
-                ClassGradeSys classGradeSys1 = new ClassGradeSys();
-                classGradeSys1.setStatus(0);
-                classGradeSys1.setEndTime(DateUtils.getNowTime());
-                classGradeSys1.setUpdateTime(DateUtils.getNowTime());
-                classGradeSysService.update(classGradeSys1, lqw);
-
-                ClassGradeSys classGradeSys = new ClassGradeSys();
-                classGradeSys.setGradeId(bo.getGradeId());
-                classGradeSys.setCreateBy(SecurityUtils.getUsername());
-                classGradeSys.setStartTime(DateUtils.getNowTime());
-                classGradeSys.setSysUserId(bo.getSysUserId());
-                classGradeSys.setStatus(1);
-                classGradeSys.setCreateTime(DateUtils.getNowTime());
-                classGradeSys.setUpdateTime(DateUtils.getNowTime());
-                classGradeSysService.save(classGradeSys);
+                if (CollectionUtils.isEmpty(classGradeSysService.list(lqw))) {
+                    lqw.clear();
+                    lqw.like(ClassGradeSys::getGradeId, bo.getGradeId());
+                    lqw.like(ClassGradeSys::getStatus, 1);
+                    ClassGradeSys classGradeSys1 = new ClassGradeSys();
+                    classGradeSys1.setStatus(0);
+                    classGradeSys1.setEndTime(DateUtils.getNowTime());
+                    classGradeSys1.setUpdateTime(DateUtils.getNowTime());
+                    classGradeSysService.update(classGradeSys1, lqw);
+
+                    ClassGradeSys classGradeSys = new ClassGradeSys();
+                    classGradeSys.setGradeId(bo.getGradeId());
+                    classGradeSys.setCreateBy(SecurityUtils.getUsername());
+                    classGradeSys.setStartTime(DateUtils.getNowTime());
+                    classGradeSys.setSysUserId(bo.getSysUserId());
+                    classGradeSys.setStatus(1);
+                    classGradeSys.setCreateTime(DateUtils.getNowTime());
+                    classGradeSys.setUpdateTime(DateUtils.getNowTime());
+                    classGradeSysService.save(classGradeSys);
+                }
             }
             }
-        }
-        ClassGradeVo classGradeVo = this.queryById(bo.getGradeId());
+            ClassGradeVo classGradeVo = this.queryById(bo.getGradeId());
 
 
-        //开班发送短信
-        if (update.getClassStatus() != null && update.getClassStatus().equals(1) && (classGradeVo.getClassStatus() == null || classGradeVo.getClassStatus().equals(0))) {
-            classGradeVo.setClassStartTime(update.getClassStartTime());
-            classGradeVo.setClassEndTime(update.getClassEndTime());
-            sendClassSMS(classGradeVo);
-        }
-        if (fullName.contains("继续教育") && fullName.contains("施工现场专业人员") &&
-                StringUtils.isNotBlank(goods.getSevenYear()) && Arrays.asList("2021","2022").contains(goods.getSevenYear())){
-            //七大员继教2021  2022年班级不开班
-            update.setClassStatus(0);
-            update.setInterfacePushId(null);
-            update.setInterfacePeriodId(null);
-        }
-        this.updateById(update);
-        if (fullName.contains("继续教育") && fullName.contains("施工现场专业人员") && StringUtils.isNotBlank(classGradeVo.getSevenCode())){
-            List<ClassGrade> list = baseMapper.getListNoTenant(classGradeVo.getSevenCode(),update.getGradeId());
-            if (CollectionUtils.isNotEmpty(list)){
-                List<ClassGrade> collect = list.stream().filter(item -> {
-                    ClassGradeGoods classGradeGoods = iClassGradeGoodsService.getOneNoTenant(item.getGradeId());
-                    Goods goodsOne = iGoodsService.getGoodsByIdNotTenant(classGradeGoods.getGoodsId());
-                    return StringUtils.isNotBlank(goodsOne.getSevenYear()) && !Arrays.asList("2021", "2022").contains(goodsOne.getSevenYear());
-                }).collect(Collectors.toList());
-                if (CollectionUtils.isNotEmpty(collect)){
-                    list.forEach(item ->{
-                        update.setGradeId(item.getGradeId());
-                        updateByIdNoTenant(update);
-                    });
+            //开班发送短信
+            if (update.getClassStatus() != null && update.getClassStatus().equals(1) && (classGradeVo.getClassStatus() == null || classGradeVo.getClassStatus().equals(0))) {
+                classGradeVo.setClassStartTime(update.getClassStartTime());
+                classGradeVo.setClassEndTime(update.getClassEndTime());
+                sendClassSMS(classGradeVo);
+            }
+            if (fullName.contains("继续教育") && fullName.contains("施工现场专业人员") &&
+                    StringUtils.isNotBlank(goods.getSevenYear()) && Arrays.asList("2021","2022").contains(goods.getSevenYear())){
+                //七大员继教2021  2022年班级不开班
+                update.setClassStatus(0);
+                update.setInterfacePushId(null);
+                update.setInterfacePeriodId(null);
+            }
+            this.updateById(update);
+            if (fullName.contains("继续教育") && fullName.contains("施工现场专业人员") && StringUtils.isNotBlank(classGradeVo.getSevenCode())){
+                List<ClassGrade> list = baseMapper.getListNoTenant(classGradeVo.getSevenCode(),update.getGradeId());
+                if (CollectionUtils.isNotEmpty(list)){
+                    List<ClassGrade> collect = list.stream().filter(item -> {
+                        ClassGradeGoods classGradeGoods = iClassGradeGoodsService.getOneNoTenant(item.getGradeId());
+                        Goods goodsOne = iGoodsService.getGoodsByIdNotTenant(classGradeGoods.getGoodsId());
+                        return StringUtils.isNotBlank(goodsOne.getSevenYear()) && !Arrays.asList("2021", "2022").contains(goodsOne.getSevenYear());
+                    }).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(collect)){
+                        list.forEach(item ->{
+                            update.setGradeId(item.getGradeId());
+                            updateByIdNoTenant(update);
+                        });
+                    }
                 }
                 }
             }
             }
-        }
 
 
-        ClassGrade grade = getById(update.getGradeId());
-        if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && sysTenant.getShareClass() == 1) {
-            if (StringUtils.isNotBlank(grade.getOfficialName()) && grade.getClassStatus() == 1) {
+            ClassGrade grade = getById(update.getGradeId());
+            if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && sysTenant.getShareClass() == 1) {
+                if (StringUtils.isNotBlank(grade.getOfficialName()) && grade.getClassStatus() == 1) {
 
 
-                ClassGradeOpenBo openBo = new ClassGradeOpenBo();
-                openBo.setOfficialName(grade.getOfficialName());
+                    ClassGradeOpenBo openBo = new ClassGradeOpenBo();
+                    openBo.setOfficialName(grade.getOfficialName());
 //                openBo.setRegisterCode(grade.getRegisterCode());
 //                openBo.setRegisterCode(grade.getRegisterCode());
-                openBo.setRegisterCode(officialName);
-                openBo.setClassName(grade.getClassName());
-                openBo.setClassStartTime(grade.getClassStartTime());
-                openBo.setClassEndTime(grade.getClassEndTime());
-                openBo.setLearningStatus(grade.getLearningStatus());
-                openBo.setLearningTimeStart(grade.getLearningTimeStart());
-                //开班修改预报名班级下 所有班级
-                this.openOfficialGrade(openBo);
-                //官方班级开班通知旧系统
-                Long nowTime = DateUtils.getNowTime();
-                String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
-                openBo.setSign(sign);
-                openBo.setStamp(nowTime);
-                JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(openBo));
-                String respone = "";
-                try {
-                    respone = HttpUtils.sendPost(CLASS_OPEN_PATH, param);
-                    log.info("查询旧系统班级开班接口结果" + respone, "");
-                    if (!respone.contains("\"Status\":true")) {
-                        throw new CustomException("同步请求错误" + respone);
+                    openBo.setRegisterCode(officialName);
+                    openBo.setClassName(grade.getClassName());
+                    openBo.setClassStartTime(grade.getClassStartTime());
+                    openBo.setClassEndTime(grade.getClassEndTime());
+                    openBo.setLearningStatus(grade.getLearningStatus());
+                    openBo.setLearningTimeStart(grade.getLearningTimeStart());
+                    //开班修改预报名班级下 所有班级
+                    this.openOfficialGrade(openBo);
+                    //官方班级开班通知旧系统
+                    Long nowTime = DateUtils.getNowTime();
+                    String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
+                    openBo.setSign(sign);
+                    openBo.setStamp(nowTime);
+                    JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(openBo));
+                    String respone = "";
+                    try {
+                        respone = HttpUtils.sendPost(CLASS_OPEN_PATH, param);
+                        log.info("查询旧系统班级开班接口结果" + respone, "");
+                        if (!respone.contains("\"Status\":true")) {
+                            throw new CustomException("同步请求错误" + respone);
+                        }
+                    } catch (Exception e) {
+                        throw new CustomException("同步请求错误" + e.getMessage());
                     }
                     }
-                } catch (Exception e) {
-                    throw new CustomException("同步请求错误" + e.getMessage());
                 }
                 }
             }
             }
         }
         }
+
         return true;
         return true;
     }
     }
 
 

+ 20 - 20
zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java

@@ -1182,26 +1182,6 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
         iGoodsService.goodsCopyOne(bo);
         iGoodsService.goodsCopyOne(bo);
     }
     }
 
 
-    @Override
-    public void goodsCopyTwo() {
-        //商品一二建复制
-        List<Goods> list = iGoodsService.list(new LambdaQueryWrapper<Goods>()
-                .eq(Goods::getEducationTypeId, 3)
-                .in(Goods::getBusinessId, Arrays.asList(6,7))
-                .eq(Goods::getProjectId, 5)
-                .like(Goods::getGoodsName,"2023")
-                .eq(Goods::getStatus, 1));
-        if (CollectionUtils.isEmpty(list)) {
-            return;
-        }
-        List<Long> goodsIds = list.stream().filter(item -> !item.getGoodsName().contains("测试")).map(Goods::getGoodsId).collect(Collectors.toList());
-        GoodsBatchCopyTenantBo bo = new GoodsBatchCopyTenantBo();
-        bo.setTenantId(713019440277910L);
-        bo.setGoodsIds(goodsIds);
-        //执行复制
-        iGoodsService.goodsCopyOne(bo);
-    }
-
     @Override
     @Override
     public void distributionRebate() {
     public void distributionRebate() {
         DistributionRebateQueryBo queryBo = new DistributionRebateQueryBo();
         DistributionRebateQueryBo queryBo = new DistributionRebateQueryBo();
@@ -2064,6 +2044,26 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
         }
         }
     }
     }
 
 
+    @Override
+    public void goodsCopyTwo() {
+        //商品一二建复制
+        List<Goods> list = iGoodsService.list(new LambdaQueryWrapper<Goods>()
+                .eq(Goods::getEducationTypeId, 3)
+                .in(Goods::getBusinessId, Arrays.asList(6,7))
+                .eq(Goods::getProjectId, 5)
+                .like(Goods::getGoodsName,"2023")
+                .eq(Goods::getStatus, 1));
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        List<Long> goodsIds = list.stream().filter(item -> !item.getGoodsName().contains("测试")).map(Goods::getGoodsId).collect(Collectors.toList());
+        GoodsBatchCopyTenantBo bo = new GoodsBatchCopyTenantBo();
+        bo.setTenantId(713019440277910L);
+        bo.setGoodsIds(goodsIds);
+        //执行复制
+        iGoodsService.goodsCopyOne(bo);
+    }
+
 
 
     private String getWeeks(Long time){
     private String getWeeks(Long time){
         Calendar calendar = Calendar.getInstance();
         Calendar calendar = Calendar.getInstance();

+ 73 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillAddBo.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+import java.math.BigDecimal;
+
+/**
+ * 银行账单添加对象 top_bank_bill
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@ApiModel("银行账单添加对象")
+public class TopBankBillAddBo {
+
+    /** 余额 */
+    @ApiModelProperty("余额")
+    private BigDecimal acctOnlineBal;
+    /** 添加时间 */
+    @ApiModelProperty("添加时间")
+    private Long createTime;
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+    /** 收付方名称 */
+    @ApiModelProperty("收付方名称")
+    private String ctpAcctName;
+    /** 收付方帐号 */
+    @ApiModelProperty("收付方帐号")
+    private String ctpAcctNbr;
+    /** 收付方开户行地址 */
+    @ApiModelProperty("收付方开户行地址")
+    private String ctpBankAddress;
+    /** 收付方开户行行名 */
+    @ApiModelProperty("收付方开户行行名")
+    private String ctpBankName;
+    /** 扩展摘要 */
+    @ApiModelProperty("扩展摘要")
+    private String extendedRemark;
+
+    @ApiModelProperty("")
+    private String infoFlag;
+    /** 你方摘要 */
+    @ApiModelProperty("你方摘要")
+    private String remarkTextClt;
+    /** 交易金额 */
+    @ApiModelProperty("交易金额")
+    private BigDecimal transAmount;
+    /** 交易日 */
+    @ApiModelProperty("交易日")
+    private String transDate;
+    /** 流水号 */
+    @ApiModelProperty("流水号")
+    private String transSequenceIdn;
+    /** 交易时间 */
+    @ApiModelProperty("交易时间")
+    private String transTime;
+    /** 起息日 */
+    @ApiModelProperty("起息日")
+    private String valueDate;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private String result;
+}

+ 88 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillEditBo.java

@@ -0,0 +1,88 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+import java.math.BigDecimal;
+
+/**
+ * 银行账单编辑对象 top_bank_bill
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@ApiModel("银行账单编辑对象")
+public class TopBankBillEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 余额 */
+    @ApiModelProperty("余额")
+    private BigDecimal acctOnlineBal;
+
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+
+    /** 收付方名称 */
+    @ApiModelProperty("收付方名称")
+    private String ctpAcctName;
+
+    /** 收付方帐号 */
+    @ApiModelProperty("收付方帐号")
+    private String ctpAcctNbr;
+
+    /** 收付方开户行地址 */
+    @ApiModelProperty("收付方开户行地址")
+    private String ctpBankAddress;
+
+    /** 收付方开户行行名 */
+    @ApiModelProperty("收付方开户行行名")
+    private String ctpBankName;
+
+    /** 扩展摘要 */
+    @ApiModelProperty("扩展摘要")
+    private String extendedRemark;
+
+    @ApiModelProperty("")
+    private String infoFlag;
+
+    /** 你方摘要 */
+    @ApiModelProperty("你方摘要")
+    private String remarkTextClt;
+
+    /** 交易金额 */
+    @ApiModelProperty("交易金额")
+    private BigDecimal transAmount;
+
+    /** 交易日 */
+    @ApiModelProperty("交易日")
+    private String transDate;
+
+    /** 流水号 */
+    @ApiModelProperty("流水号")
+    private String transSequenceIdn;
+
+    /** 交易时间 */
+    @ApiModelProperty("交易时间")
+    private String transTime;
+
+    /** 起息日 */
+    @ApiModelProperty("起息日")
+    private String valueDate;
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private String result;
+
+}

+ 85 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillQueryBo.java

@@ -0,0 +1,85 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import java.math.BigDecimal;
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 银行账单分页查询对象 top_bank_bill
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("银行账单分页查询对象")
+public class TopBankBillQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 余额 */
+	@ApiModelProperty("余额")
+	private BigDecimal acctOnlineBal;
+	/** 状态 1正常 0关闭 */
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+	/** 收付方名称 */
+	@ApiModelProperty("收付方名称")
+	private String ctpAcctName;
+	/** 收付方帐号 */
+	@ApiModelProperty("收付方帐号")
+	private String ctpAcctNbr;
+	/** 收付方开户行地址 */
+	@ApiModelProperty("收付方开户行地址")
+	private String ctpBankAddress;
+	/** 收付方开户行行名 */
+	@ApiModelProperty("收付方开户行行名")
+	private String ctpBankName;
+	/** 扩展摘要 */
+	@ApiModelProperty("扩展摘要")
+	private String extendedRemark;
+
+	@ApiModelProperty("")
+	private String infoFlag;
+	/** 你方摘要 */
+	@ApiModelProperty("你方摘要")
+	private String remarkTextClt;
+	/** 交易金额 */
+	@ApiModelProperty("交易金额")
+	private BigDecimal transAmount;
+	/** 交易日 */
+	@ApiModelProperty("交易日")
+	private String transDate;
+	/** 流水号 */
+	@ApiModelProperty("流水号")
+	private String transSequenceIdn;
+	/** 交易时间 */
+	@ApiModelProperty("交易时间")
+	private String transTime;
+	/** 起息日 */
+	@ApiModelProperty("起息日")
+	private String valueDate;
+	/** $column.columnComment */
+	@ApiModelProperty("$column.columnComment")
+	private String result;
+}

+ 73 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/domain/TopBankBill.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.modules.sdk.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 银行账单对象 top_bank_bill
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("top_bank_bill")
+public class TopBankBill implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 余额 */
+    private BigDecimal acctOnlineBal;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    private Integer status;
+    /** 收付方名称 */
+    private String ctpAcctName;
+    /** 收付方帐号 */
+    private String ctpAcctNbr;
+    /** 收付方开户行地址 */
+    private String ctpBankAddress;
+    /** 收付方开户行行名 */
+    private String ctpBankName;
+    /** 扩展摘要 */
+    private String extendedRemark;
+    /** 用于标识收/付方帐号和母/子公司的信息。
+
+为空表示付方帐号和子公司;
+
+为“1”表示收方帐号和子公司;
+
+为“2”表示收方帐号和母公司;
+
+为“3”表示原收方帐号和子公司; */
+    private String infoFlag;
+    /** 你方摘要 */
+    private String remarkTextClt;
+    /** 交易金额 */
+    private BigDecimal transAmount;
+    /** 交易日 */
+    private String transDate;
+    /** 流水号 */
+    private String transSequenceIdn;
+    /** 交易时间 */
+    private String transTime;
+    /** 起息日 */
+    private String valueDate;
+    /** $column.columnComment */
+    private String result;
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/mapper/TopBankBillMapper.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.sdk.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.sdk.domain.TopBankBill;
+
+/**
+ * 银行账单Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+public interface TopBankBillMapper extends BaseMapper<TopBankBill> {
+
+}

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/ITopBankBillService.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.sdk.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.sdk.bo.TopBankBillAddBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillEditBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillQueryBo;
+import com.zhongzheng.modules.sdk.domain.TopBankBill;
+import com.zhongzheng.modules.sdk.vo.TopBankBillVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 银行账单Service接口
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+public interface ITopBankBillService extends IService<TopBankBill> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	TopBankBillVo queryById(Long id);
+
+	/**
+	 * 查询列表
+	 */
+	List<TopBankBillVo> queryList(TopBankBillQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入银行账单
+	 * @param bo 银行账单新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(TopBankBillAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改银行账单
+	 * @param bo 银行账单编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(TopBankBillEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/IZsBankService.java

@@ -0,0 +1,9 @@
+package com.zhongzheng.modules.sdk.service;
+
+
+
+public interface IZsBankService {
+
+    Boolean searchBreakPoint(String queryAcctNbr,String cardNbr,String beginDate,String endDate);
+
+}

+ 112 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/TopBankBillServiceImpl.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.modules.sdk.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.sdk.bo.TopBankBillAddBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillEditBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillQueryBo;
+import com.zhongzheng.modules.sdk.domain.TopBankBill;
+import com.zhongzheng.modules.sdk.mapper.TopBankBillMapper;
+import com.zhongzheng.modules.sdk.service.ITopBankBillService;
+import com.zhongzheng.modules.sdk.vo.TopBankBillVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 银行账单Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Service
+public class TopBankBillServiceImpl extends ServiceImpl<TopBankBillMapper, TopBankBill> implements ITopBankBillService {
+
+    @Override
+    public TopBankBillVo queryById(Long id){
+        TopBankBill db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, TopBankBillVo.class);
+    }
+
+    @Override
+    public List<TopBankBillVo> queryList(TopBankBillQueryBo bo) {
+        LambdaQueryWrapper<TopBankBill> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getAcctOnlineBal() != null, TopBankBill::getAcctOnlineBal, bo.getAcctOnlineBal());
+        lqw.eq(bo.getStatus() != null, TopBankBill::getStatus, bo.getStatus());
+        lqw.like(StrUtil.isNotBlank(bo.getCtpAcctName()), TopBankBill::getCtpAcctName, bo.getCtpAcctName());
+        lqw.eq(StrUtil.isNotBlank(bo.getCtpAcctNbr()), TopBankBill::getCtpAcctNbr, bo.getCtpAcctNbr());
+        lqw.eq(StrUtil.isNotBlank(bo.getCtpBankAddress()), TopBankBill::getCtpBankAddress, bo.getCtpBankAddress());
+        lqw.like(StrUtil.isNotBlank(bo.getCtpBankName()), TopBankBill::getCtpBankName, bo.getCtpBankName());
+        lqw.eq(StrUtil.isNotBlank(bo.getExtendedRemark()), TopBankBill::getExtendedRemark, bo.getExtendedRemark());
+        lqw.eq(StrUtil.isNotBlank(bo.getInfoFlag()), TopBankBill::getInfoFlag, bo.getInfoFlag());
+        lqw.eq(StrUtil.isNotBlank(bo.getRemarkTextClt()), TopBankBill::getRemarkTextClt, bo.getRemarkTextClt());
+        lqw.eq(bo.getTransAmount() != null, TopBankBill::getTransAmount, bo.getTransAmount());
+        lqw.eq(StrUtil.isNotBlank(bo.getTransDate()), TopBankBill::getTransDate, bo.getTransDate());
+        lqw.eq(StrUtil.isNotBlank(bo.getTransSequenceIdn()), TopBankBill::getTransSequenceIdn, bo.getTransSequenceIdn());
+        lqw.eq(StrUtil.isNotBlank(bo.getTransTime()), TopBankBill::getTransTime, bo.getTransTime());
+        lqw.eq(StrUtil.isNotBlank(bo.getValueDate()), TopBankBill::getValueDate, bo.getValueDate());
+        lqw.eq(StrUtil.isNotBlank(bo.getResult()), TopBankBill::getResult, bo.getResult());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<TopBankBillVo> entity2Vo(Collection<TopBankBill> collection) {
+        List<TopBankBillVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, TopBankBillVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<TopBankBill> page = (Page<TopBankBill>)collection;
+            Page<TopBankBillVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(TopBankBillAddBo bo) {
+        TopBankBill add = BeanUtil.toBean(bo, TopBankBill.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(TopBankBillEditBo bo) {
+        TopBankBill update = BeanUtil.toBean(bo, TopBankBill.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(TopBankBill entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 184 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/ZsBankServiceImpl.java

@@ -0,0 +1,184 @@
+package com.zhongzheng.modules.sdk.service.impl;
+
+import cn.hutool.core.lang.Validator;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.bank.DCCryptor;
+import com.zhongzheng.common.utils.bank.DCHelper;
+import com.zhongzheng.modules.exam.bo.ExamApplySiteTimeTwoAddBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillAddBo;
+import com.zhongzheng.modules.sdk.service.ITopBankBillService;
+import com.zhongzheng.modules.sdk.service.IZsBankService;
+import com.zhongzheng.modules.sdk.service.NuonuoService;
+import nuonuo.open.sdk.NNOpenSDK;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.net.URLEncoder;
+
+@Service
+public class ZsBankServiceImpl implements IZsBankService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ZsBankServiceImpl.class);
+    @Value("${ZsBank.publickey}")
+    private String bankpubkey;
+    @Value("${ZsBank.privatekey}")
+    private String privkey;
+    @Value("${ZsBank.sm4key}")
+    private String sm4key;
+
+    private static Base64.Encoder encoder = Base64.getEncoder();
+    private static Base64.Decoder decoder = Base64.getDecoder();
+
+    private static final String ALG_SM = "SM"; // 采用国密算法
+
+    private static String UID = "N002463271"; // 测试的用户编号
+
+    private static String URL = "http://cdctest.cmburl.cn:80/cdcserver/api/v2"; // 银行服务地址(测试)
+  //  private static String bankpubkey = "BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0="; // 银行公钥
+
+ //   private static String privkey = "NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=";
+  //  private static String sm4key = "VuAzSWQhsoNqzn0K";//"1234567890123456"; // 用户的对称密钥
+
+    private static String FunCode = "trsQryByBreakPoint"; // 测试的用户编号
+
+    @Autowired
+    private ITopBankBillService iTopBankBillService;
+
+
+    @Override
+    public Boolean searchBreakPoint(String queryAcctNbr,String cardNbr,String beginDate,String endDate) {
+        // 组织发送报文
+        JsonObject obj = new JsonObject();
+        JsonObject req = new JsonObject();
+        JsonObject body = new JsonObject();
+        JsonObject head = new JsonObject();
+        head.addProperty("funcode", FunCode); //DCLISMOD
+        head.addProperty("userid", UID);
+        head.addProperty("reqid", DCHelper.getTime() + "0000001");
+        Integer transactionSequence = 1;
+
+        JsonArray array = new JsonArray();
+        JsonObject item = new JsonObject();
+        item.addProperty("cardNbr", cardNbr);
+        item.addProperty("beginDate", beginDate);
+        item.addProperty("endDate", endDate);
+   //     item.addProperty("transactionSequence", transactionSequence);
+        if(Validator.isNotEmpty(queryAcctNbr)){
+            item.addProperty("queryAcctNbr", queryAcctNbr);
+        }
+
+
+        array.add(item);
+        body.add("TRANSQUERYBYBREAKPOINT_X1", array);
+
+        req.add("head", head);
+        req.add("body", body);
+        obj.add("request", req);
+
+        // 请求发送接收
+        String result = doProcess(obj,FunCode);
+        JSONObject jsonObject = (JSONObject) JSONObject.parse(result);
+        JSONObject resultObject = jsonObject.getJSONObject("response").getJSONObject("body");
+        JSONArray z1 = resultObject.getJSONArray("TRANSQUERYBYBREAKPOINT_Z1");
+        if(resultObject.containsKey("TRANSQUERYBYBREAKPOINT_Z2")){
+            JSONArray z2 = resultObject.getJSONArray("TRANSQUERYBYBREAKPOINT_Z2");
+            List<TopBankBillAddBo> list = JSONArray.parseArray(z2.toJSONString(), TopBankBillAddBo.class);
+            int i = 0;
+            for(TopBankBillAddBo addBo : list){
+                addBo.setResult(z2.getJSONObject(i).toJSONString());
+                iTopBankBillService.insertByAddBo(addBo);
+            }
+            System.out.println(list);
+        }
+        if(z1.size()>0){
+            JSONObject fObject = z1.getJSONObject(0);
+            String ctnFlag =(String) fObject.get("ctnFlag");
+            if("Y".equals(ctnFlag)){
+                String queryAcctNbrNext =(String) fObject.get("queryAcctNbr");
+                searchBreakPoint(queryAcctNbrNext,cardNbr,beginDate,endDate);
+            }
+
+        }
+        return null;
+    }
+
+    private  String doProcess(JsonObject jObject,String funCode)  {
+        try {
+            JsonObject object = new JsonObject();
+            // 签名
+            object.addProperty("sigdat", "__signature_sigdat__");
+            object.addProperty("sigtim", DCHelper.getTime());
+            jObject.add("signature", object);
+            String source = DCHelper.serialJsonOrdered(jObject);
+    //        System.out.println("签名原文: " + source);
+    //        System.out.println("签名原文A: " + decoder.decode(privkey));
+            byte[] signature1 = DCCryptor.CMBSM2SignWithSM3(getID_IV(), decoder.decode(privkey), source.getBytes(StandardCharsets.UTF_8));
+            String sigdat1 = new String(encoder.encode(signature1));
+    //        System.out.println("签名结果: " + sigdat1);
+            object.addProperty("sigdat", sigdat1);
+
+            // SM4-CBC加密
+            String plaintxt = jObject.toString();
+   //         System.out.println("加密前req:  " + plaintxt);
+            byte[] enInput = DCCryptor.CMBSM4EncryptWithCBC(sm4key.getBytes(), getID_IV(), plaintxt.getBytes(StandardCharsets.UTF_8));
+
+            String req = new String(encoder.encode(enInput));
+    //        System.out.println("加密后req:  " + req);
+
+            // 发送请求
+            HashMap<String, String> map = new HashMap<>();
+            map.put("UID", UID);
+            map.put("ALG", ALG_SM);
+            map.put("DATA", URLEncoder.encode(req, "utf-8"));
+            map.put("FUNCODE", funCode);
+            String res = DCHelper.doPostForm(URL, map);
+    //        System.out.println("res:  " + res);
+            try {
+                decoder.decode(res);
+            } catch (Exception e) {
+                System.err.println("访问返回错误.");
+                throw new CustomException("网银解码错误");
+            }
+
+            // 解密请求
+            String resplain = new String(DCCryptor.CMBSM4DecryptWithCBC(sm4key.getBytes(), getID_IV(), decoder.decode(res)), StandardCharsets.UTF_8);
+    //        System.out.println("res decrypt: " + resplain);
+
+            // 验签
+            JsonObject object2 = new GsonBuilder().create().fromJson(resplain, JsonObject.class);
+            JsonObject object3 = object2.getAsJsonObject("signature");
+            String resSign = object3.get("sigdat").getAsString();
+            object3.addProperty("sigdat", "__signature_sigdat__");
+            object2.add("signature", object3);
+            String resSignSource = DCHelper.serialJsonOrdered(object2);
+            System.out.println("验签原文: " + resSignSource);
+            boolean verify = DCCryptor.CMBSM2VerifyWithSM3(getID_IV(), decoder.decode(bankpubkey), resSignSource.getBytes(StandardCharsets.UTF_8), decoder.decode(resSign));
+    //        System.out.println("验签结果: " + verify);
+            if(verify){
+                return resSignSource;
+            }else{
+                throw new CustomException("网银验签错误");
+            }
+        }catch (Exception e){
+            throw new CustomException("网银错误"+e.getMessage());
+        }
+
+    }
+
+    private static byte[] getID_IV() {
+        String uid = UID; // 请替换为实际的用户UID
+        String userid = uid + "0000000000000000";
+        return userid.substring(0, 16).getBytes();
+    }
+}

+ 87 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/vo/TopBankBillVo.java

@@ -0,0 +1,87 @@
+package com.zhongzheng.modules.sdk.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.math.BigDecimal;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 银行账单视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@ApiModel("银行账单视图对象")
+public class TopBankBillVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 余额 */
+	@Excel(name = "余额")
+	@ApiModelProperty("余额")
+	private BigDecimal acctOnlineBal;
+	/** 状态 1正常 0关闭 */
+	@Excel(name = "状态 1正常 0关闭")
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+	/** 收付方名称 */
+	@Excel(name = "收付方名称")
+	@ApiModelProperty("收付方名称")
+	private String ctpAcctName;
+	/** 收付方帐号 */
+	@Excel(name = "收付方帐号")
+	@ApiModelProperty("收付方帐号")
+	private String ctpAcctNbr;
+	/** 收付方开户行地址 */
+	@Excel(name = "收付方开户行地址")
+	@ApiModelProperty("收付方开户行地址")
+	private String ctpBankAddress;
+	/** 收付方开户行行名 */
+	@Excel(name = "收付方开户行行名")
+	@ApiModelProperty("收付方开户行行名")
+	private String ctpBankName;
+	/** 扩展摘要 */
+	@Excel(name = "扩展摘要")
+	@ApiModelProperty("扩展摘要")
+	private String extendedRemark;
+	/** */
+	@Excel(name = "")
+	private String infoFlag;
+	/** 你方摘要 */
+	@Excel(name = "你方摘要")
+	@ApiModelProperty("你方摘要")
+	private String remarkTextClt;
+	/** 交易金额 */
+	@Excel(name = "交易金额")
+	@ApiModelProperty("交易金额")
+	private BigDecimal transAmount;
+	/** 交易日 */
+	@Excel(name = "交易日")
+	@ApiModelProperty("交易日")
+	private String transDate;
+	/** 流水号 */
+	@Excel(name = "流水号")
+	@ApiModelProperty("流水号")
+	private String transSequenceIdn;
+	/** 交易时间 */
+	@Excel(name = "交易时间")
+	@ApiModelProperty("交易时间")
+	private String transTime;
+	/** 起息日 */
+	@Excel(name = "起息日")
+	@ApiModelProperty("起息日")
+	private String valueDate;
+	/** $column.columnComment */
+	@Excel(name = "起息日")
+	@ApiModelProperty("$column.columnComment")
+	private String result;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserCertificateMapper.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.user.mapper;
 package com.zhongzheng.modules.user.mapper;
 
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.user.bo.UserCertificateQueryBo;
 import com.zhongzheng.modules.user.bo.UserCertificateQueryBo;
 import com.zhongzheng.modules.user.domain.UserCertificate;
 import com.zhongzheng.modules.user.domain.UserCertificate;
@@ -16,5 +17,6 @@ import java.util.List;
 public interface UserCertificateMapper extends BaseMapper<UserCertificate> {
 public interface UserCertificateMapper extends BaseMapper<UserCertificate> {
     Long selectMaxId();
     Long selectMaxId();
     List<UserCertificateVo> selectList(UserCertificateQueryBo bo);
     List<UserCertificateVo> selectList(UserCertificateQueryBo bo);
+    @InterceptorIgnore(tenantLine = "true")
     UserCertificateVo selectDetail(UserCertificateQueryBo code);
     UserCertificateVo selectDetail(UserCertificateQueryBo code);
 }
 }

+ 45 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserCertificateServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.course.mapper.CourseMenuMapper;
 import com.zhongzheng.modules.course.mapper.CourseMenuMapper;
 import com.zhongzheng.modules.course.service.IMajorService;
 import com.zhongzheng.modules.course.service.IMajorService;
 import com.zhongzheng.modules.course.vo.CourseChapterVo;
 import com.zhongzheng.modules.course.vo.CourseChapterVo;
@@ -85,6 +86,9 @@ public class UserCertificateServiceImpl extends ServiceImpl<UserCertificateMappe
         if(Validator.isEmpty(userCertificateVo)){
         if(Validator.isEmpty(userCertificateVo)){
             throw new CustomException("证书不存在");
             throw new CustomException("证书不存在");
         }
         }
+        if(Validator.isNotEmpty(userCertificateVo.getTenantId())){
+            ServletUtils.getResponse().setHeader("TenantId",userCertificateVo.getTenantId());
+        }
         MajorVo majorVo = iMajorService.queryById(userCertificateVo.getMajorId());
         MajorVo majorVo = iMajorService.queryById(userCertificateVo.getMajorId());
         if(Validator.isEmpty(majorVo)){
         if(Validator.isEmpty(majorVo)){
             throw new CustomException("专业不存在");
             throw new CustomException("专业不存在");
@@ -102,6 +106,47 @@ public class UserCertificateServiceImpl extends ServiceImpl<UserCertificateMappe
             chapterVo.setTotalTime(secTotalTime);
             chapterVo.setTotalTime(secTotalTime);
         }
         }
         userCertificateVo.setChapterList(chapterList);
         userCertificateVo.setChapterList(chapterList);
+        if(userCertificateVo.getKeyValue().equals("certificate01")){
+            userCertificateVo.setMajorType("继续教育(专业)");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate02")){
+            userCertificateVo.setMajorType("继续教育(选修)");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate03")){
+            userCertificateVo.setMajorType("一级注册建造师(必修)");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate04")){
+            userCertificateVo.setMajorType("一级注册建造师(选修)");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate05")){
+            userCertificateVo.setMajorType("一级注册建造师(选修)");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate06")){
+            userCertificateVo.setMajorType("一级注册建造师(选修)");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate07")){
+            userCertificateVo.setMajorType("一级注册建造师(选修)");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate08")){
+            userCertificateVo.setMajorType("一级注册建造师(选修)");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate09")){
+            userCertificateVo.setMajorType("施工现场专业人员继续教育");
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate10")){
+            if(Validator.isNotEmpty(userCertificateVo.getMajor())&&userCertificateVo.getMajor().equals("必修")){
+                userCertificateVo.setMajorType("二级注册造价师(必修)");
+            }else{
+                userCertificateVo.setMajorType("二级注册造价师(选修)");
+            }
+        }
+        else if(userCertificateVo.getKeyValue().equals("certificate11")){
+            if(Validator.isNotEmpty(userCertificateVo.getMajor())&&userCertificateVo.getMajor().equals("必修")){
+                userCertificateVo.setMajorType("二级注册建造师(必修)");
+            }else{
+                userCertificateVo.setMajorType("二级注册建造师(选修)");
+            }
+        }
         return userCertificateVo;
         return userCertificateVo;
     }
     }
 
 

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -420,6 +420,9 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
                                 throw new CustomException("拍照次数不达标",559);
                                 throw new CustomException("拍照次数不达标",559);
                             }
                             }
 
 
+                        }else{
+                            log.info("视频时长数据错误"+JSON.toJSONString(bo));
+                            throw new CustomException("视频时长数据错误");
                         }
                         }
                     }
                     }
                 }
                 }

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserCertificateVo.java

@@ -114,7 +114,6 @@ public class UserCertificateVo {
 	@Excel(name = "章名,拼接")
 	@Excel(name = "章名,拼接")
 	@ApiModelProperty("章名,拼接")
 	@ApiModelProperty("章名,拼接")
 	private String chapterStr;
 	private String chapterStr;
-
 	/** 模块id */
 	/** 模块id */
 	@Excel(name = "模块id")
 	@Excel(name = "模块id")
 	@ApiModelProperty("模块id")
 	@ApiModelProperty("模块id")
@@ -129,4 +128,8 @@ public class UserCertificateVo {
 	@ApiModelProperty("专业")
 	@ApiModelProperty("专业")
 	private String major;
 	private String major;
 
 
+	private String tenantId;
+
+	@ApiModelProperty("专业类型")
+	private String majorType;
 }
 }

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserCertificateMapper.xml

@@ -59,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="chapterStr" column="chapter_str"/>
         <result property="chapterStr" column="chapter_str"/>
         <result property="moduleId" column="module_id"/>
         <result property="moduleId" column="module_id"/>
         <result property="moreCertificateStatus" column="more_certificate_status"/>
         <result property="moreCertificateStatus" column="more_certificate_status"/>
+        <result property="tenantId" column="tenant_id"/>
     </resultMap>
     </resultMap>
 
 
     <select id="selectMaxId"   resultType="Long">
     <select id="selectMaxId"   resultType="Long">