yangdamao 1 년 전
부모
커밋
4b7b305727
100개의 변경된 파일1100개의 추가작업 그리고 181개의 파일을 삭제
  1. 1 1
      Dockerfile
  2. 1 1
      Dockerfile-admi
  3. 1 2
      Dockerfile-saas
  4. 5 0
      run-prod.sh
  5. 3 4
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/AdminSaasApplication.java
  6. 3 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  7. 11 8
      zhongzheng-admin-saas/src/main/resources/application-pre.yml
  8. 1 0
      zhongzheng-admin-saas/src/main/resources/application-prod.yml
  9. 4 0
      zhongzheng-admin-saas/src/main/resources/application.yml
  10. 26 10
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  11. 4 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java
  12. 6 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/exam/ExamApplyController.java
  13. 23 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  14. 7 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassStudentController.java
  15. 9 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBusinessConfigController.java
  16. 9 4
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java
  17. 28 4
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java
  18. 15 4
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/UserController.java
  19. 3 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  20. 10 7
      zhongzheng-admin/src/main/resources/application-pre.yml
  21. 1 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  22. 4 0
      zhongzheng-admin/src/main/resources/application.yml
  23. 0 2
      zhongzheng-api/src/main/java/com/zhongzheng/controller/alioss/OssController.java
  24. 6 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java
  25. 3 0
      zhongzheng-api/src/main/resources/application-dev.yml
  26. 11 8
      zhongzheng-api/src/main/resources/application-pre.yml
  27. 1 0
      zhongzheng-api/src/main/resources/application-prod.yml
  28. 4 0
      zhongzheng-api/src/main/resources/application.yml
  29. 4 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/SysRole.java
  30. 5 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/LoginUser.java
  31. 34 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/type/EncryptHandler.java
  32. 2 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java
  33. 12 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  34. 1 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/wxpay/WXPayRequest.java
  35. BIN
      zhongzheng-common/src/main/resources/static/694515817698614/004.jpg
  36. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/001.png
  37. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/002.jpg
  38. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/0020.jpg
  39. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/0024.jpg
  40. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/003.jpg
  41. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/0030.jpg
  42. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/00312.jpg
  43. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/0033.jpg
  44. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/004.jpg
  45. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/005.jpg
  46. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/0051.jpg
  47. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/006.jpg
  48. BIN
      zhongzheng-common/src/main/resources/static/867735392558919680/2323.jpg
  49. 8 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/handle/AuthenticationEntryPointImpl.java
  50. 31 14
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysLoginService.java
  51. 94 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  52. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  53. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java
  54. 3 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java
  55. 18 15
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  56. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/UserProfileQueryBo.java
  57. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingServiceImpl.java
  58. 74 15
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  59. 26 17
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  60. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessAddBo.java
  61. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessEditBo.java
  62. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseBusiness.java
  63. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java
  64. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseChapterSectionServiceImpl.java
  65. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseMenuServiceImpl.java
  66. 10 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseModuleChapterServiceImpl.java
  67. 14 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSectionWatchPerServiceImpl.java
  68. 26 9
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java
  69. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseBusinessVo.java
  70. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseMenuVo.java
  71. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseModuleChapterVo.java
  72. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/GoodsBatchListVo.java
  73. 30 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplyCertificateBo.java
  74. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplyResultExportBo.java
  75. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/UpdateApplyNumBo.java
  76. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/domain/ExamActivity.java
  77. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/IExamApplyService.java
  78. 38 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamActivityServiceImpl.java
  79. 55 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java
  80. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplySiteServiceImpl.java
  81. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsBankAddBo.java
  82. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsBankEditBo.java
  83. 11 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java
  84. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  85. 49 16
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  86. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsUserVo.java
  87. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java
  88. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  89. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeUserMapper.java
  90. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  91. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeUserService.java
  92. 98 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  93. 99 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  94. 12 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  95. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentVo.java
  96. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeVo.java
  97. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyOrderInvoiceBo.java
  98. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderBusinessConfigAddBo.java
  99. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderBusinessConfigEditBo.java
  100. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderBusinessConfigQueryBo.java

+ 1 - 1
Dockerfile

@@ -1,5 +1,5 @@
 # 该镜像需要依赖的基础镜像
-FROM java:8
+FROM openjdk:8
 # 将当前目录下的jar包复制到docker容器的/目录下
 ADD zhongzheng-api.jar /app.jar
 # 声明服务运行在8080端口

+ 1 - 1
Dockerfile-admi

@@ -1,5 +1,5 @@
 # 该镜像需要依赖的基础镜像
-FROM java:8
+FROM openjdk:8
 # 将当前目录下的jar包复制到docker容器的/目录下
 ADD zhongzheng-admin.jar /app-admin.jar
 # 声明服务运行在9099端口

+ 1 - 2
Dockerfile-saas

@@ -1,6 +1,5 @@
-
 # 该镜像需要依赖的基础镜像
-FROM java:8
+FROM openjdk:8
 # 将当前目录下的jar包复制到docker容器的/目录下
 ADD zhongzheng-admin-saas.jar /app-saas-admin.jar
 # 声明服务运行在9099端口

+ 5 - 0
run-prod.sh

@@ -34,3 +34,8 @@ docker run \
 -v /data/nginx/conf.d:/data/nginx/conf.d \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"

+ 3 - 4
zhongzheng-admin-saas/src/main/java/com/zhongzheng/AdminSaasApplication.java

@@ -7,15 +7,14 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 
-@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
 @EnableScheduling
 public class AdminSaasApplication {
 
-    public static void main(String[] args)
-    {
+    public static void main(String[] args) {
         System.setProperty("spring.devtools.restart.enabled", "false");
         SpringApplication.run(AdminSaasApplication.class, args);
-        System.out.println("(♥◠‿◠)ノ゙  超级Admin启动成功   ლ(´ڡ`ლ)゙"+"超级Admin");
+        System.out.println("(♥◠‿◠)ノ゙  超级Admin启动成功   ლ(´ڡ`ლ)゙" + "超级Admin");
     }
 
 }

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

@@ -173,6 +173,7 @@ oldSys:
     goods: http://gdxypx.xy.com/WitSystem/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://gdxypx.xy.com/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log
@@ -189,6 +190,8 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://192.168.1.7:9099/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

+ 11 - 8
zhongzheng-admin-saas/src/main/resources/application-pre.yml

@@ -70,16 +70,16 @@ spring:
                 max-wait: -1ms
 aliyun:
     oss:
-        endpoint: https://file.xyyxt.net # oss对外服务的访问域名
+        endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名
         accessKeyId: LTAI5tDbpYmpifZYNX8S3kt1  # 访问身份验证中用到用户标识
         accessKeySecret: jCdSPAj58ZXOLsWpV8bCgNOYrEK0de # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
-        bucketName: zhongzheng-prod # oss的存储空间
+        bucketName: zhongzheng-test # oss的存储空间
         policy:
             expire: 30 # 签名有效期(S)
         maxSize: 100 # 上传文件大小(M)
-        callback: https://cloud.xyyxt.net/aliyun/oss/callback # 文件上传成功后的回调地址
+        callback: http://120.79.166.78:19013/aliyun/oss/callback # 文件上传成功后的回调地址
         dir:
-            prefix: oss/images/ # 上传文件夹路径前缀
+            prefix: oss/images/ # 上传文件夹路径前缀 `
 
 poliv:
     token:
@@ -125,11 +125,11 @@ enCodeVersion: trial
 
 oldStudySys:
     syncPath: http://test.jqbao.net/System/BussinessApi/PostUserStudyRecords
-    sharePath: http://test.jqbao.net/witsystem/dataapi/SaleOrder
-    shareCanclePath: http://test.jqbao.net/witsystem/dataapi/ordercance
+    sharePath: http://192.168.1.210:8086/witsystem/dataapi/SaleOrder
+    shareCanclePath: http://192.168.1.210:8086/witsystem/dataapi/ordercance
     searchGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCount
     pushGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCountAuto
-    educationalInspector: http://test.jqbao.net/EduSystem/BusinessApi/NewYxtUserPrompt
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
     classUserListPath: http://test.jqbao.net/System/BussinessApi/UserCourseCategoryListcno
     classOpenPath: http://test.jqbao.net/System/BussinessApi/OpenClass
     salePassword: http://test.jqbao.net/WitSystem/BussinessApi/GetSaleInfo
@@ -174,13 +174,14 @@ oldSys:
     goods: http://test.jqbao.net/WitSystem/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://test.jqbao.net/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log
 
 liveHost: http://192.168.1.222:6009
 
-fileHost: http://192.168.1.24:9099
+fileHost: http://39.108.7.155:9088
 
 exam:
     applySave: http://39.108.7.155:9088/cd/exam/save
@@ -190,6 +191,8 @@ exam:
     subscribeSaveExam: http://39.108.7.155:9088/cd/subscribe/save/exam
     subscribeUpdateExam: http://39.108.7.155:9088/cd/subscribe/update/exam
     subscribeAddExamNum: http://39.108.7.155:9088/cd/subscribe/add/num
+    subscribeAddExamResult: http://39.108.7.155:9088/cd/exam/add/exam/result
+    subscribeAddCertificate: http://39.108.7.155:9088/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

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

@@ -173,6 +173,7 @@ oldSys:
     goods: http://www.xyyxt.net/system/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://www.xyyxt.net/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log

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

@@ -248,6 +248,9 @@ feign:
   hystrix:
     enabled: true
 
+phone:
+  conceal: false
+
 poliv:
   sdk:
     userid: egsxlptzdq
@@ -303,6 +306,7 @@ aliyun:
     todayExamNotRecordWarn: SMS_257713140  #学员打卡提醒(每日一练)
     todayExamNotRecordTeachWarn: SMS_257702971  #学员打卡教务提醒(每日一练)
     noFinishExamNoteCode: SMS_262460267  #未做完试卷通知
+    orderServiceEndRemind : SMS_465555251  #学生购买未学习
 
 distributionOldPay:
       host: http://test.jqbao.net/System/BussinessApi/AddRedPackData

+ 26 - 10
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -80,11 +80,16 @@ import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysWebService;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
+import com.zhongzheng.modules.tencentcloud.bo.FaceQueryBo;
+import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
 import com.zhongzheng.modules.tencentcloud.service.IVodService;
 import com.zhongzheng.modules.top.user.bo.TopSysTenantRegisterAddBo;
 import com.zhongzheng.modules.top.user.service.ITopSysTenantRegisterService;
+import com.zhongzheng.modules.user.bo.UserBusinessGoodsBo;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
+import com.zhongzheng.modules.user.vo.UserBusinessGoodsVo;
+import com.zhongzheng.modules.user.vo.UserStudyTimeVo;
 import com.zhongzheng.modules.wx.bo.WxShareGoodsBo;
 import com.zhongzheng.modules.wx.service.IWxPayService;
 import io.swagger.annotations.ApiOperation;
@@ -93,10 +98,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
@@ -179,7 +181,8 @@ public class CommonController extends BaseController {
 
     @Autowired
     private IMajorService iMajorService;
-    private IZsBankService iZsBankService;
+    @Autowired
+    private  IFaceOcrService iFaceService;
     /**
      * 通用下载请求
      *
@@ -640,6 +643,12 @@ public class CommonController extends BaseController {
         return AjaxResult.success("成功", iDistributionCashWithdrawalService.payCashCallBack(bo) ? 1 : 0);
     }
 
+    @ApiOperation("根据身份证查询当前学员是否有学习")
+    @GetMapping("common/free/getStudyTimeByCard")
+    public AjaxResult<UserStudyTimeVo> getStudyTimeByCard(@RequestParam("idCard")String idCard,@RequestParam("type")Integer type) {
+        return AjaxResult.success(iUserService.getStudyTimeByCard(idCard,type));
+    }
+
     /**
      * 获取企业ID
      */
@@ -812,7 +821,7 @@ public class CommonController extends BaseController {
     @GetMapping("/common/free/zsBank")
     public AjaxResult zsBank() {
         String date = DateUtils.dateTimeNow("yyyyMMdd");
-        System.out.println(iZsBankService.searchBreakPoint(null,"755915680210507",date,date));
+   //     System.out.println(iZsBankService.searchBreakPoint(null,"755915680210507",date,date));
         return AjaxResult.success();
     }
 
@@ -880,10 +889,17 @@ public class CommonController extends BaseController {
 
     @ApiOperation("导入二建精选题目Word模板列表")
     @PreAuthorize("@ss.hasPermi('system:question:import')")
-    @PostMapping("/common/free/importErJianWordQuestionList")
-    public AjaxResult<Map<String,Object>> importErJianWordQuestionList(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception
-    {
-        Map<String,Object> result = iQuestionService.importErJianWordQuestionList(file,  eduId,  projectId,  businessId, subjectId);
+    @PostMapping("/importErJianWordQuestionList")
+    public AjaxResult<Map<String,Object>> importErJianWordQuestionList(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception {
+        Map<String, Object> result = iQuestionService.importErJianWordQuestionList(file, eduId, projectId, businessId, subjectId);
         return AjaxResult.success(result);
     }
+
+    @ApiOperation("人脸属性")
+    @PostMapping("/common/free/detectFaceAttributes")
+    public AjaxResult<Void> DetectFaceAttributes(@RequestBody FaceQueryBo bo) {
+        iFaceService.DetectFace(bo);
+        return AjaxResult.success();
+    }
+
 }

+ 4 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java

@@ -8,6 +8,7 @@ import cn.hutool.core.lang.Validator;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.ServletUtils;
@@ -247,6 +248,9 @@ public class CourseController extends BaseController {
                 vo.setUserId(user.getUserId());
                 vo.setGoodsId(queryBo.getGoodsId());
                 vo.setTelphone(queryBo.getTelphone());
+                if (StringUtils.isNotBlank(user.getPasswordAes())){
+                    vo.setPasswordAes(EncryptHandler.decrypt(user.getPasswordAes()));
+                }
                 vo.setList(list);
                 listVos.add(vo);
             }

+ 6 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/exam/ExamApplyController.java

@@ -280,4 +280,10 @@ public class ExamApplyController extends BaseController {
         return AjaxResult.success(iExamApplyService.examUserProfileExport(bo));
     }
 
+    @ApiOperation("修改考场人数")
+    @PostMapping ("/update/applyNum")
+    public AjaxResult updateApplyNum(@RequestBody UpdateApplyNumBo bo) {
+        return toAjax(iExamApplyService.updateApplyNum(bo) ? 1 : 0);
+    }
+
 }

+ 23 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -205,6 +205,18 @@ public class ClassGradeController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 查询所有班级用户列表
+     */
+    @ApiOperation("查询所有班级用户列表")
+    @PreAuthorize("@ss.hasPermi('grade:grade:list')")
+    @GetMapping("/listGradeAll")
+    public TableDataInfo<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo) {
+        startPage();
+        List<ClassGradeStudentVo> list = iClassGradeService.listGradeAll(bo);
+        return getDataTable(list);
+    }
+
     /**
      * 导出班级学员列表
      */
@@ -255,6 +267,17 @@ public class ClassGradeController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 班级管理列表
+     */
+    @ApiOperation("班级管理列表")
+    @GetMapping("/listUserPeriodRecord/new")
+    public TableDataInfo<ClassPeriodStudentVo> listUserPeriodRecordNew(ClassGradeUserQueryBo bo) {
+        startPage();
+        List<ClassPeriodStudentVo> list = iClassGradeUserService.listUserPeriodRecordNew(bo);
+        return getDataTable(list);
+    }
+
     @ApiOperation("按周查询学员学时学习记录列表")
     @PreAuthorize("@ss.hasPermi('grade:user:list')")
     @GetMapping("/listUserPeriodWeekRecord")

+ 7 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassStudentController.java

@@ -210,6 +210,13 @@ public class ClassStudentController extends BaseController {
         return AjaxResult.success(iClassGradeUserService.pushOfficialInfoMore(list));
     }
 
+    @ApiOperation("批量强制信息推送")
+    @PreAuthorize("@ss.hasPermi('app:user:edit')")
+    @PostMapping("/pushForceInfo")
+    public AjaxResult pushForceInfo(@RequestBody List<ClassGradeUserQueryBo>  list) {
+        return AjaxResult.success(iClassGradeUserService.pushForceOfficialInfoMore(list));
+    }
+
     /**
      * 查看用户学时状态
      */

+ 9 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBusinessConfigController.java

@@ -6,6 +6,7 @@ import java.util.Arrays;
 import com.zhongzheng.modules.order.bo.OrderBusinessConfigAddBo;
 import com.zhongzheng.modules.order.bo.OrderBusinessConfigEditBo;
 import com.zhongzheng.modules.order.bo.OrderBusinessConfigQueryBo;
+import com.zhongzheng.modules.order.domain.OrderBusinessConfig;
 import com.zhongzheng.modules.order.service.IOrderBusinessConfigService;
 import com.zhongzheng.modules.order.vo.OrderBusinessConfigVo;
 import lombok.RequiredArgsConstructor;
@@ -90,6 +91,14 @@ public class OrderBusinessConfigController extends BaseController {
         return toAjax(iOrderBusinessConfigService.insertByAddBo(bo) ? 1 : 0);
     }
 
+    @ApiOperation("新增录单配置")
+    @PreAuthorize("@ss.hasPermi('system:config:add')")
+    @Log(title = "录单配置", businessType = BusinessType.INSERT)
+    @PostMapping("/withEntity")
+    public AjaxResult<OrderBusinessConfig> addWithEntity(@RequestBody OrderBusinessConfigAddBo bo) {
+        return AjaxResult.success(iOrderBusinessConfigService.insertByAddBoWithEntity(bo));
+    }
+
     /**
      * 修改录单配置
      */

+ 9 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -18,10 +18,7 @@ import com.zhongzheng.modules.goods.vo.QuestionOpenImportVo;
 import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
-import com.zhongzheng.modules.order.vo.MailOrderVo;
-import com.zhongzheng.modules.order.vo.OrderGoodsVo;
-import com.zhongzheng.modules.order.vo.OrderListVo;
-import com.zhongzheng.modules.order.vo.OrderVo;
+import com.zhongzheng.modules.order.vo.*;
 import com.zhongzheng.modules.system.bo.SysTenantEditBo;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysTenantService;
@@ -80,6 +77,14 @@ public class OrderController extends BaseController {
         return getDataTable(list);
     }
 
+    @ApiOperation("导出订单列表")
+    @GetMapping("/exportList")
+    public AjaxResult<OrderListExportVo> exportList(OrderQueryBo bo) {
+        List<OrderListExportVo> list = iOrderService.selectExportList(bo);
+        ExcelUtil<OrderListExportVo> util = new ExcelUtil<>(OrderListExportVo.class);
+        return util.exportExcel(list,"线上订单记录");
+    }
+
     /**
      * 查询订单列表
      */

+ 28 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java

@@ -5,6 +5,7 @@ import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.framework.web.service.AsyncService;
 import com.zhongzheng.framework.web.service.WxLoginService;
 import com.zhongzheng.modules.exam.bo.ExamApplyQueryBo;
+import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.order.service.IOrderHandleService;
 import com.zhongzheng.modules.polyv.service.IPolyvLiveService;
 import com.zhongzheng.modules.schedule.service.IScheduleService;
@@ -46,6 +47,8 @@ public class ScheduleController extends BaseController {
 
     private final IOrderHandleService iOrderHandleService;
 
+    private final IClassGradeUserService iClassGradeUserService;
+
     /**
      * 商品购买发送消息
      * @return
@@ -93,6 +96,13 @@ public class ScheduleController extends BaseController {
         return AjaxResult.success();
     }
 
+    @ApiOperation("二建服务到期提醒")
+    @GetMapping("/sendServiceEnd")
+    public AjaxResult sendServiceEnd() {
+        iScheduleService.sendServiceEnd();
+        return AjaxResult.success();
+    }
+
     /**
      * 考试提醒
      * @return
@@ -406,10 +416,10 @@ public class ScheduleController extends BaseController {
         //茂名市建设培训学校 680980002459417532
         //肇庆市建筑业协会 480813706424615769
 //        List<String> tenantIds = Arrays.asList("972001468256950403", "680980002459417532", "480813706424615769");
-        List<String> tenantIds = Arrays.asList("87440920140968","694515817698614");
-        tenantIds.forEach(tenantId -> {
-            iScheduleService.synchronizationGoodsByTenantId(tenantId);
-        });
+//        List<String> tenantIds = Arrays.asList("87440920140968","694515817698614");
+//        tenantIds.forEach(tenantId -> {
+//            iScheduleService.synchronizationGoodsByTenantId(tenantId);
+//        });
         return AjaxResult.success();
     }
 
@@ -468,4 +478,18 @@ public class ScheduleController extends BaseController {
         iOrderHandleService.overTimeCloseOrder();
         return AjaxResult.success();
     }
+
+    @ApiOperation("七大员重推")
+    @GetMapping("/seven/resetQdyCheckInfo")
+    public AjaxResult resetQdyCheckInfo(){
+        iClassGradeUserService.resetQdyCheckInfo();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("计算课程总数")
+    @GetMapping("/order/courseNum")
+    public AjaxResult orderCourseNum(){
+        iScheduleService.orderCourseNum();
+        return AjaxResult.success();
+    }
 }

+ 15 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/UserController.java

@@ -13,10 +13,7 @@ import com.zhongzheng.modules.alisms.service.IAliSmsService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.service.IUserService;
-import com.zhongzheng.modules.user.vo.UserIdCardBatchVo;
-import com.zhongzheng.modules.user.vo.UserStatstVo;
-import com.zhongzheng.modules.user.vo.UserStudyRecordVo;
-import com.zhongzheng.modules.user.vo.UserVo;
+import com.zhongzheng.modules.user.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -113,6 +110,14 @@ public class UserController extends BaseController {
         return AjaxResult.success(iUserService.queryById(userId));
     }
 
+
+    @ApiOperation("获取客户端用户密码")
+    @PreAuthorize("@ss.hasPermi('app:user:query')")
+    @GetMapping("/viewPwd/{userId}")
+    public AjaxResult<Void> viewPwd(@PathVariable("userId" ) Long userId) {
+        return AjaxResult.success(iUserService.viewPwd(userId));
+    }
+
     /**
      * 新增客户端用户
      */
@@ -231,4 +236,10 @@ public class UserController extends BaseController {
         List<UserVo> list = iUserService.dangAnList(bo);
         return getDataTable(list);
     }
+
+    @ApiOperation("获取用户同专业下课程")
+    @PostMapping("/getUserBusinessGoods")
+    public AjaxResult<List<UserBusinessGoodsVo>> getUserBusinessGoods(@RequestBody List<UserBusinessGoodsBo> bos) {
+        return AjaxResult.success(iUserService.getUserBusinessGoods(bos));
+    }
 }

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

@@ -174,6 +174,7 @@ oldSys:
     goods: http://gdxypx.xy.com/WitSystem/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://gdxypx.xy.com/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log
@@ -190,6 +191,8 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://192.168.1.7:9099/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

+ 10 - 7
zhongzheng-admin/src/main/resources/application-pre.yml

@@ -70,16 +70,16 @@ spring:
                 max-wait: -1ms
 aliyun:
     oss:
-        endpoint: https://file.xyyxt.net # oss对外服务的访问域名
+        endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名
         accessKeyId: LTAI5tDbpYmpifZYNX8S3kt1  # 访问身份验证中用到用户标识
         accessKeySecret: jCdSPAj58ZXOLsWpV8bCgNOYrEK0de # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
-        bucketName: zhongzheng-prod # oss的存储空间
+        bucketName: zhongzheng-test # oss的存储空间
         policy:
             expire: 30 # 签名有效期(S)
         maxSize: 100 # 上传文件大小(M)
-        callback: https://cloud.xyyxt.net/aliyun/oss/callback # 文件上传成功后的回调地址
+        callback: http://120.79.166.78:19013/aliyun/oss/callback # 文件上传成功后的回调地址
         dir:
-            prefix: oss/images/ # 上传文件夹路径前缀
+            prefix: oss/images/ # 上传文件夹路径前缀 `
 
 poliv:
     token:
@@ -125,11 +125,11 @@ enCodeVersion: trial
 
 oldStudySys:
     syncPath: http://test.jqbao.net/System/BussinessApi/PostUserStudyRecords
-    sharePath: http://test.jqbao.net/witsystem/dataapi/SaleOrder
-    shareCanclePath: http://test.jqbao.net/witsystem/dataapi/ordercance
+    sharePath: http://192.168.1.210:8086/witsystem/dataapi/SaleOrder
+    shareCanclePath: http://192.168.1.210:8086/witsystem/dataapi/ordercance
     searchGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCount
     pushGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCountAuto
-    educationalInspector: http://test.jqbao.net/EduSystem/BusinessApi/NewYxtUserPrompt
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
     classUserListPath: http://test.jqbao.net/System/BussinessApi/UserCourseCategoryListcno
     classOpenPath: http://test.jqbao.net/System/BussinessApi/OpenClass
     salePassword: http://test.jqbao.net/WitSystem/BussinessApi/GetSaleInfo
@@ -174,6 +174,7 @@ oldSys:
     goods: http://test.jqbao.net/WitSystem/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://test.jqbao.net/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log
@@ -190,6 +191,8 @@ exam:
     subscribeSaveExam: http://39.108.7.155:9088/cd/subscribe/save/exam
     subscribeUpdateExam: http://39.108.7.155:9088/cd/subscribe/update/exam
     subscribeAddExamNum: http://39.108.7.155:9088/cd/subscribe/add/num
+    subscribeAddExamResult: http://39.108.7.155:9088/cd/exam/add/exam/result
+    subscribeAddCertificate: http://39.108.7.155:9088/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

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

@@ -173,6 +173,7 @@ oldSys:
     goods: http://www.xyyxt.net/system/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://www.xyyxt.net/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log

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

@@ -248,6 +248,9 @@ feign:
   hystrix:
     enabled: true
 
+phone:
+  conceal: true
+
 poliv:
   sdk:
     userid: egsxlptzdq
@@ -303,3 +306,4 @@ aliyun:
     todayExamNotRecordWarn: SMS_257713140  #学员打卡提醒(每日一练)
     todayExamNotRecordTeachWarn: SMS_257702971  #学员打卡教务提醒(每日一练)
     noFinishExamNoteCode: SMS_262460267  #未做完试卷通知
+    orderServiceEndRemind : SMS_465555251  #学生购买未学习

+ 0 - 2
zhongzheng-api/src/main/java/com/zhongzheng/controller/alioss/OssController.java

@@ -62,7 +62,6 @@ public class OssController {
     @GetMapping("/seller_policy")
     public AjaxResult<ResultBean> seller_policy(@Validated OssRequest ossRequest) {
         ResultBean result = ossService.getPolicy(ossRequest);
-        log.info("服务端生成签名:{}",result);
         return AjaxResult.success(result);
     }
 
@@ -84,7 +83,6 @@ public class OssController {
     @PostMapping("/upload")
     public AjaxResult<String> upload(OssRequest file) throws Exception {
         String result = ossService.upload(file);
-        log.info("服务端生成签名:{}",result);
         return AjaxResult.success("返回图片路径url",result);
     }
 

+ 6 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java

@@ -1,13 +1,16 @@
 package com.zhongzheng.controller.user;
 
 import cn.hutool.core.lang.Validator;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.zhongzheng.common.annotation.Log;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.framework.web.service.WxLoginService;
 import com.zhongzheng.framework.web.service.WxTokenService;
 import com.zhongzheng.modules.system.domain.SysTenant;
@@ -19,6 +22,7 @@ import com.zhongzheng.modules.user.service.IUserLoginKeyService;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserVisitLogService;
 import com.zhongzheng.modules.user.service.IUserWxFollowService;
+import com.zhongzheng.modules.user.vo.UserBusinessGoodsVo;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.wx.bo.WxIdBody;
 import com.zhongzheng.modules.wx.bo.WxLoginBody;
@@ -32,6 +36,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -218,4 +223,5 @@ public class UserController extends BaseController {
         editBo.setUserKey(loginUser.getToken());
         return toAjax(iUserLoginKeyService.offline(editBo) ? 1 : 0);
     }
+
 }

+ 3 - 0
zhongzheng-api/src/main/resources/application-dev.yml

@@ -176,6 +176,7 @@ oldSys:
     goods: http://gdxypx.xy.com/System/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://gdxypx.xy.com/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log
@@ -192,6 +193,8 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://192.168.1.7:9099/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

+ 11 - 8
zhongzheng-api/src/main/resources/application-pre.yml

@@ -70,16 +70,16 @@ spring:
                 max-wait: -1ms
 aliyun:
     oss:
-        endpoint: https://file.xyyxt.net # oss对外服务的访问域名
+        endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名
         accessKeyId: LTAI5tDbpYmpifZYNX8S3kt1  # 访问身份验证中用到用户标识
         accessKeySecret: jCdSPAj58ZXOLsWpV8bCgNOYrEK0de # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
-        bucketName: zhongzheng-prod # oss的存储空间
+        bucketName: zhongzheng-test # oss的存储空间
         policy:
             expire: 30 # 签名有效期(S)
         maxSize: 100 # 上传文件大小(M)
-        callback: https://cloud.xyyxt.net/aliyun/oss/callback # 文件上传成功后的回调地址
+        callback: http://120.79.166.78:19013/aliyun/oss/callback # 文件上传成功后的回调地址
         dir:
-            prefix: oss/images/ # 上传文件夹路径前缀
+            prefix: oss/images/ # 上传文件夹路径前缀 `
 
 poliv:
     token:
@@ -125,11 +125,11 @@ enCodeVersion: trial
 
 oldStudySys:
     syncPath: http://test.jqbao.net/System/BussinessApi/PostUserStudyRecords
-    sharePath: http://test.jqbao.net/witsystem/dataapi/SaleOrder
-    shareCanclePath: http://test.jqbao.net/witsystem/dataapi/ordercance
+    sharePath: http://192.168.1.210:8086/witsystem/dataapi/SaleOrder
+    shareCanclePath: http://192.168.1.210:8086/witsystem/dataapi/ordercance
     searchGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCount
     pushGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCountAuto
-    educationalInspector: http://test.jqbao.net/EduSystem/BusinessApi/NewYxtUserPrompt
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
     classUserListPath: http://test.jqbao.net/System/BussinessApi/UserCourseCategoryListcno
     classOpenPath: http://test.jqbao.net/System/BussinessApi/OpenClass
     salePassword: http://test.jqbao.net/WitSystem/BussinessApi/GetSaleInfo
@@ -174,13 +174,14 @@ oldSys:
     goods: http://test.jqbao.net/WitSystem/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://test.jqbao.net/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log
 
 liveHost: http://192.168.1.222:6009
 
-fileHost: http://192.168.1.24:9099
+fileHost: http://39.108.7.155:9088
 
 exam:
     applySave: http://39.108.7.155:9088/cd/exam/save
@@ -190,6 +191,8 @@ exam:
     subscribeSaveExam: http://39.108.7.155:9088/cd/subscribe/save/exam
     subscribeUpdateExam: http://39.108.7.155:9088/cd/subscribe/update/exam
     subscribeAddExamNum: http://39.108.7.155:9088/cd/subscribe/add/num
+    subscribeAddExamResult: http://39.108.7.155:9088/cd/exam/add/exam/result
+    subscribeAddCertificate: http://39.108.7.155:9088/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

+ 1 - 0
zhongzheng-api/src/main/resources/application-prod.yml

@@ -185,6 +185,7 @@ oldSys:
     goods: http://www.xyyxt.net/system/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://www.xyyxt.net/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log

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

@@ -245,6 +245,9 @@ feign:
   hystrix:
     enabled: true
 
+phone:
+  conceal: false
+
 poliv:
   sdk:
     userid: egsxlptzdq
@@ -301,3 +304,4 @@ aliyun:
     todayExamNotRecordWarn: SMS_257713140  #学员打卡提醒(每日一练)
     todayExamNotRecordTeachWarn: SMS_257702971  #学员打卡教务提醒(每日一练)
     noFinishExamNoteCode: SMS_262460267  #未做完试卷通知
+    orderServiceEndRemind : SMS_465555251  #学生购买未学习

+ 4 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/SysRole.java

@@ -103,6 +103,10 @@ public class SysRole implements Serializable
 
     private String tenantId;
 
+    /** 手机号查看标识:1可以查到 0隐藏 */
+    @ApiModelProperty(value ="手机号查看标识:1可以查到 0隐藏")
+    private Integer phoneConceal;
+
     /**
      * 请求参数
      */

+ 5 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/LoginUser.java

@@ -68,6 +68,11 @@ public class LoginUser implements UserDetails
      */
     private SysUser user;
 
+    /**
+     * 手机号隐藏标识 1,不隐藏
+     */
+    private Integer phoneConcealSign;
+
 
     public LoginUser(SysUser user, Set<String> permissions)
     {

+ 34 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/type/EncryptHandler.java

@@ -2,14 +2,26 @@ package com.zhongzheng.common.type;
 
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.crypto.symmetric.AES;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.TelPhoneUtils;
 import org.apache.ibatis.type.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.core.token.Token;
+import org.springframework.security.core.token.TokenService;
 import org.springframework.util.StringUtils;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.sql.CallableStatement;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Properties;
 
 
 @MappedJdbcTypes(JdbcType.VARCHAR)
@@ -20,7 +32,6 @@ public class EncryptHandler  implements TypeHandler<String> {
     public static final boolean ENCRYPT_STATUS = true; //是否开启字段加密
 
 
-
     public static String decrypt(String value) {
         if (null == value) {
             return null;
@@ -28,6 +39,27 @@ public class EncryptHandler  implements TypeHandler<String> {
         if (value.length()<=20 ) {
             return value;
         }
+        String s = SecureUtil.aes(KEYS).decryptStr(value);
+        String authorizationToken = ServletUtils.getRequest().getHeader("AuthorizationToken");
+        if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(authorizationToken)){
+            Boolean phoneConceal = false;
+            try (InputStream inputStream = EncryptHandler.class.getClassLoader().getResourceAsStream("application.yml")) {
+                Properties properties = new Properties();
+                properties.load(inputStream);
+                String property = properties.getProperty("conceal");
+                phoneConceal = Boolean.valueOf(property);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            if (phoneConceal){
+                //开启手机号码加密
+                LoginUser loginUser = SecurityUtils.getLoginUser();
+                if (s.length() <= 11 &&
+                        (ObjectUtils.isNull(loginUser.getPhoneConcealSign()) || loginUser.getPhoneConcealSign() != 1)){
+                    return TelPhoneUtils.hideTelPhone(s);
+                }
+            }
+        }
         return SecureUtil.aes(KEYS).decryptStr(value);
     }
 
@@ -38,6 +70,7 @@ public class EncryptHandler  implements TypeHandler<String> {
         if(ENCRYPT_STATUS){
             AES aes = SecureUtil.aes(KEYS);
             String encrypt = aes.encryptHex(value);
+
             return encrypt;
         }else{
             return value;

+ 2 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java

@@ -32,6 +32,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
 
     public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
 
+    public static String YYYY__MM__DD = "yyyy年MM月dd日";
+
     private static String[] parsePatterns = {
             "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",

+ 12 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java

@@ -233,6 +233,18 @@ public class ToolsUtils {
         return checktext != null ? checktext.equals(signature.toUpperCase()) : false;
     }
 
+
+    public static String removeAllTrim(String content) {
+        if(Validator.isNotEmpty(content)){
+            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+            Matcher m = p.matcher(content);
+            content = m.replaceAll("");
+            content = content.replaceAll(" ", "");
+            content = content.replaceAll("[\\u3000-\\u303F\\s\\u00A0]","");
+        }
+        return content;
+    }
+
     /**
      * 将字节数组转化我16进制字符串
      *

+ 1 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/wxpay/WXPayRequest.java

@@ -65,7 +65,7 @@ public class WXPayRequest {
 
             SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
                     sslContext,
-                    new String[]{"TLSv1"},
+                    null,
                     null,
                     new DefaultHostnameVerifier());
 

BIN
zhongzheng-common/src/main/resources/static/694515817698614/004.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/001.png


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/002.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/0020.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/0024.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/003.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/0030.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/00312.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/0033.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/004.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/005.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/0051.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/006.jpg


BIN
zhongzheng-common/src/main/resources/static/867735392558919680/2323.jpg


+ 8 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/handle/AuthenticationEntryPointImpl.java

@@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSON;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.ServletUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.AuthenticationEntryPoint;
@@ -28,11 +30,17 @@ public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, S
 {
     private static final long serialVersionUID = -8970718410437077606L;
 
+    private static Logger log = LoggerFactory.getLogger(AuthenticationEntryPointImpl.class);
+
     @Override
     public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e)
             throws IOException
     {
         int code = HttpStatus.HTTP_UNAUTHORIZED;
+        String tenantId = request.getHeader("TenantId");
+        String token = request.getHeader("AuthorizationToken");
+        log.error(String.format("token: %s",token));
+        log.error(String.format("tenantId: %s",tenantId));
         String msg = StrUtil.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI());
         ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg)));
     }

+ 31 - 14
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysLoginService.java

@@ -3,6 +3,7 @@ package com.zhongzheng.framework.web.service;
 import cn.hutool.core.lang.Validator;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.entity.SysRole;
@@ -40,6 +41,7 @@ import javax.annotation.Resource;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 登录校验方法
@@ -91,20 +93,20 @@ public class SysLoginService
      */
     public String login(String username, String password, String code, String uuid,String smsCode,String tel)
     {
-        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
-        String captcha = redisCache.getCacheObject(verifyKey);
-        redisCache.deleteObject(verifyKey);
-        if (captcha == null)
-        {
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
-            throw new CaptchaExpireException();
-        }
-        if (!code.equalsIgnoreCase(captcha))
-        {
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
-            throw new CaptchaException();
-        }
-        iUserLoginErrorService.checkLimit(username);
+//        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+//        String captcha = redisCache.getCacheObject(verifyKey);
+//        redisCache.deleteObject(verifyKey);
+//        if (captcha == null)
+//        {
+//            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
+//            throw new CaptchaExpireException();
+//        }
+//        if (!code.equalsIgnoreCase(captcha))
+//        {
+//            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
+//            throw new CaptchaException();
+//        }
+//        iUserLoginErrorService.checkLimit(username);
         // 用户验证
         Authentication authentication = null;
         try
@@ -143,7 +145,22 @@ public class SysLoginService
         }
         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
         LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        loginUser.setPhoneConcealSign(0);
         SysUser user = iSysUserService.updateLoginTimeIp(loginUser.getUser().getUserId());
+        //查看用户权限是否可以查看手机号码
+        if (user.getUserName().equals("admin")){
+            loginUser.setPhoneConcealSign(1);
+        }else {
+            List<SysUserRole> list = iSysUserRoleService.list(new LambdaQueryWrapper<SysUserRole>()
+                    .eq(SysUserRole::getUserId, user.getUserId()));
+            if (CollectionUtils.isNotEmpty(list)){
+                List<SysRole> sysRoles = iSysRoleService.listByIds(list.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()));
+                if (sysRoles.stream().anyMatch(x -> x.getPhoneConceal() == 1)){
+                    loginUser.setPhoneConcealSign(1);
+                }
+            }
+
+        }
         String dualAuth = configService.selectConfigByKey("login.dual.auth");
         if(Validator.isNotEmpty(dualAuth)&&dualAuth.equals("1")){
             if(Validator.isEmpty(tel)){

+ 94 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -86,6 +86,13 @@ import java.math.BigDecimal;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -181,6 +188,15 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return BeanUtil.toBean(db, UserVo.class);
     }
 
+    @Override
+    public String viewPwd(Long userId) {
+        User user = this.baseMapper.selectById(userId);
+        if(Validator.isNotEmpty(user.getPasswordAes())){
+            return EncryptHandler.decrypt(user.getPasswordAes());
+        }
+        return null;
+    }
+
     @Override
     public User queryByUnionId(String unionId) {
         User user = getOne(new LambdaQueryWrapper<User>()
@@ -262,6 +278,32 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 
     @Override
     public List<UserVo> dangAnList(UserQueryBo bo) {
+        if (ObjectUtils.isNotNull(bo.getApplyDateTime()) && bo.getApplyDateTime().length() == 6){
+            //根据月份筛选
+            String dateStr = String.format(bo.getApplyDateTime()); // 指定年月
+            LocalDate date = LocalDate.parse(dateStr + "01", DateTimeFormatter.BASIC_ISO_DATE);
+            LocalDate dateFirst = date.with(TemporalAdjusters.firstDayOfMonth()); // 指定年月的第一天
+            LocalDate dateEnd = date.with(TemporalAdjusters.lastDayOfMonth()); // 指定年月的最后一天
+            ZonedDateTime zonedDateTime1 = dateFirst.atStartOfDay(ZoneId.systemDefault());
+            Date date1 = Date.from(zonedDateTime1.toInstant());
+            ZonedDateTime zonedDateTime = dateEnd.atStartOfDay(ZoneId.systemDefault());
+            Date date2 = Date.from(zonedDateTime.toInstant());
+            Long startTime = date1.getTime()/1000;
+            Long endTime = (date2.getTime()/1000) + 86400;
+            bo.setMonthStartTime(startTime);
+            bo.setMonthEndTime(endTime);
+        }else if (ObjectUtils.isNotNull(bo.getApplyDateTime()) && bo.getApplyDateTime().length() > 6){
+            //根据某天筛选
+            String dateStr = String.format(bo.getApplyDateTime());
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            try {
+                Date parse = sdf.parse(dateStr);
+                bo.setMonthStartTime(parse.getTime()/1000);
+                bo.setMonthEndTime(parse.getTime()/1000);
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+        }
         List<User> list = baseMapper.dangAnList(bo);
         return entity2UserVo(list);
     }
@@ -756,6 +798,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }else {
             pwd =  bo.getTel().substring(bo.getTel().length() - 6);
         }
+        inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
         inertData.setPassword(SecurityUtils.encryptPassword(pwd));
         if(!save(inertData)){
             throw new CustomException("注册失败");
@@ -814,6 +857,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         inertData.setLastLoginTime(DateUtils.getNowTime());
         inertData.setCreateTime(DateUtils.getNowTime());
         inertData.setUpdateTime(DateUtils.getNowTime());
+        inertData.setPasswordAes(EncryptHandler.encrypt(bo.getPwd()));
         inertData.setPassword(SecurityUtils.encryptPassword(bo.getPwd()));
         if (Validator.isNotEmpty(bo.getShareCode())) {
             inertData.setShareCode(bo.getShareCode());
@@ -931,6 +975,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             //初始密码(身份证后6位)
             String idCard = itemImport.getIdCard();
             String pwd =  idCard.substring(idCard.length() - 6); // 随机密码
+            inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
             inertData.setPassword(SecurityUtils.encryptPassword(pwd));
             inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
             if(!save(inertData)){
@@ -1006,6 +1051,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         //初始密码(身份证后6位)
         String idCard = itemImport.getIdCard();
         String pwd =  idCard.substring(idCard.length() - 6); // 随机密码
+        inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
         inertData.setPassword(SecurityUtils.encryptPassword(pwd));
         inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
         if(!save(inertData)){
@@ -1032,6 +1078,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(!ToolsUtils.verifEasyPwd(bo.getNewPwd())){
             throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
         }
+        user.setPasswordAes(EncryptHandler.encrypt(bo.getNewPwd()));
         user.setPassword(SecurityUtils.encryptPassword(bo.getNewPwd()));
         user.setPwdTime(DateUtils.getNowTime());
         user.setUpdateTime(DateUtils.getNowTime());
@@ -1052,6 +1099,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(!ToolsUtils.verifEasyPwd(bo.getNewPwd())){
             throw new CustomException("密码应由6-18位组成");
         }
+        user.setPasswordAes(EncryptHandler.encrypt(bo.getNewPwd()));
         user.setPassword(SecurityUtils.encryptPassword(bo.getNewPwd()));
         user.setPwdTime(DateUtils.getNowTime());
         user.setUpdateTime(DateUtils.getNowTime());
@@ -1294,6 +1342,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(Validator.isEmpty(user)){
             throw new CustomException("该手机号未注册");
         }
+        user.setPasswordAes(EncryptHandler.encrypt(bo.getPwd()));
         user.setPassword(SecurityUtils.encryptPassword(bo.getPwd()));
         user.setPwdTime(DateUtils.getNowTime());
         user.setUpdateTime(DateUtils.getNowTime());
@@ -1444,7 +1493,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }
         if (!SecurityUtils.matchesPassword(password,user.getPassword()))
         {
-            iUserLoginErrorService.saveErrorLog(bo.getAccount());
+//            iUserLoginErrorService.saveErrorLog(bo.getAccount());
             throw new BaseException("登录信息错误");
         }
         String tenantId = user.getTenantId();
@@ -1660,7 +1709,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         switch (bo.getUrlType()){
             case 1://H5
                 post = tenant.getHostH5();
-                path = "pages/webview/index";
+                path = "pages5/webview/index";
                 break;
             case 2://PC
                 post = tenant.getHostPc();
@@ -1796,6 +1845,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             //初始密码(身份证后6位)
             String idCard = itemImport.getUserCard();
             String pwd =  idCard.substring(idCard.length() - 6); // 随机密码
+            inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
             inertData.setPassword(SecurityUtils.encryptPassword(pwd));
             inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
             if(!save(inertData)){
@@ -2020,6 +2070,48 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         iSysTaskService.updateById(task);
     }
 
+    @Override
+    public UserStudyTimeVo getStudyTimeByCard(String idCard,Integer type) {
+        UserStudyTimeVo vo = new UserStudyTimeVo();
+        vo.setIdCard(idCard);
+        User user = getByCardNoTenant(idCard);
+        if (ObjectUtils.isNull(user)){
+            vo.setStudyFlag(false);
+            return vo;
+        }
+        String business = type == 1? "继续教育二级建造师":"继续教育二级造价师";
+        //查询是否有二建课程在学习
+        Long studyTime = baseMapper.getFistStudyTime(user.getUserId(),user.getTenantId(),business);
+        if (ObjectUtils.isNull(studyTime)){
+            vo.setStudyFlag(false);
+            return vo;
+        }
+        vo.setStudyFlag(true);
+        vo.setStudyStartTime(studyTime);
+        return vo;
+    }
+
+    @Override
+    public List<UserBusinessGoodsVo> getUserBusinessGoods(List<UserBusinessGoodsBo> bos) {
+        List<UserBusinessGoodsVo> goodsBoList = new ArrayList<>();
+        for (UserBusinessGoodsBo item : bos) {
+            User user = getOne(new LambdaQueryWrapper<User>()
+            .eq(User::getIdCard,EncryptHandler.encrypt(item.getIdNum()))
+            .last("limit 1"));
+            if (ObjectUtils.isNull(user)) {
+                continue;
+            }
+            item.setUserId(user.getUserId());
+            //查询购买课程
+            List<UserBusinessGoodsVo> goodsVo = baseMapper.getCourseByUser(item);
+            if (!CollectionUtils.isEmpty(goodsVo)){
+                goodsVo.forEach(x -> x.setIdNum(item.getIdNum()));
+                goodsBoList.addAll(goodsVo);
+            }
+        }
+        return goodsBoList;
+    }
+
     @Override
     public Map<String, Object> accountLogin(UserAppAccountLoginBo bo) {
         if(Validator.isEmpty(bo.getAccount())){

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -390,6 +390,7 @@ public class WxLoginService implements IWxLoginService {
         bo.setUpdateTime(DateUtils.getNowTime());
 //        String pwd = ToolsUtils.getSmsCode(); // 随机密码
         String pwd = idCard.substring(idCard.length() - 6);
+        bo.setPasswordAes(EncryptHandler.encrypt(pwd));
         bo.setPassword(SecurityUtils.encryptPassword(pwd));
         if (inviteCode != null) {
             User inviteUser = iUserService.queryByAccount(inviteCode);

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java

@@ -219,7 +219,7 @@ public class OssServiceImpl implements OssService {
                 RandomFilename = "certificate" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
             case 8:
-                RandomFilename = "question" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                RandomFilename = "question" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now+"img";
                 break;
             case 9:
                 RandomFilename = "wisdom" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now+ String.valueOf(random > 0 ? random : (-1) * random);
@@ -244,6 +244,9 @@ public class OssServiceImpl implements OssService {
         JSONObject resultBean = new JSONObject();
         String filename = request.getParameter("filename");
         filename = ALIYUN_OSS_ENDPOINT.concat("/").concat(filename);
+        if(Validator.isEmpty(request.getParameter("size"))||request.getParameter("size").equals("0")){
+            return  null;
+        }
         resultBean.put("filename", filename);
         resultBean.put("size", request.getParameter("size"));
         resultBean.put("mimeType", request.getParameter("mimeType"));

+ 3 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java

@@ -41,8 +41,9 @@ import java.util.concurrent.TimeUnit;
 public class AliSmsServiceImpl implements IAliSmsService {
     private static final Logger LOGGER = LoggerFactory.getLogger(AliSmsServiceImpl.class);
 
-    @Value("${aliyun.sms.signName}")
     private String SIGNNAME;
+    @Value("${aliyun.sms.signName}")
+    private String DEFAULT_SIGNNAME;
     @Value("${aliyun.sms.registerTemplateCode}")
     private String REGISTERTEMPLATECODE;
     @Value("${aliyun.sms.accessKeyId}")
@@ -83,8 +84,7 @@ public class AliSmsServiceImpl implements IAliSmsService {
         if(Validator.isNotEmpty(configService.selectConfigByKeyNoCache("sms.signName"))){
             SIGNNAME = configService.selectConfigByKeyNoCache("sms.signName");
         }else{
-            SysConfig config = configService.getSysConfigByKeyTenant("sms.signName","867735392558919680");
-            SIGNNAME = config.getConfigValue();
+            SIGNNAME = DEFAULT_SIGNNAME;
         }
 
     }

+ 18 - 15
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java

@@ -1209,7 +1209,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
     }
 
     private boolean isNumStart(String content) {
-        for(int i=1;i<40;i++){
+        for(int i=1;i<99;i++){
             String num = i+".";
             if(content.startsWith(num)){
                 return true;
@@ -2590,15 +2590,11 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                                     e.printStackTrace();
                                 }
                                 imgUrl =  ossPath + "?x-oss-process=image/resize,w_" + wPx + ",h_" + HPx;
-                                if(type==5||nowPart==9){
+                                if(type==5||nowPart==9||nowPart==10||nowPart==8){
                                     //正文图片
-                                    if(!answerStatus){
-                                        qContent = qContent+"<br />" +"<p><img src=\"" + ossHost + "/" + imgUrl + "\"></p>";
-                                    }
-                                }
-                                if(answerStatus){
-                                    analysisContent=analysisContent+"<br />" +"<p><img src=\"" + ossHost + "/" + imgUrl + "\"></p>";
+                                    qContent = qContent+"<br />" +"<p><img src=\"" + ossHost + "/" + imgUrl + "\"></p>";
                                 }
+
                             }
                         }
                     }
@@ -2606,9 +2602,6 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                     if(content.equals("")){
                         continue;
                     }
-                    if(content.indexOf("关于《建设工程工程量清单计价规范》")>-1){
-                        System.out.println(content);
-                    }
                     System.out.println(content);
                     if (content.startsWith("###")||isXueJianQuestionStart(content,type,alKeyList)) {
 
@@ -2683,6 +2676,9 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
 
                     if(nowPart==8){
                         if(isNumStart((content))||content.indexOf("###")>-1||content.indexOf("章标题")>-1||content.indexOf("多项选择题")>-1){
+                            if(content.indexOf("未成年工是指年满16周岁未满18周")>-1){
+                                System.out.println(content);
+                            }
                             if(Validator.isNotEmpty(qContent)&&!qContent.equals("")){
                                 String[] sList = qContent.split("【解析】");
                                 if (sList.length>1) {
@@ -2771,7 +2767,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                                         throw new CustomException("答案错误");
                                     }
                                 }
-                                addBo.setCode(importCode);
+               //                 addBo.setCode(importCode);
 
                                 addBo.setBusinessList(businessItemList);
                                 Long qId =  insertByAddBoImportBackId(addBo,0);
@@ -2784,10 +2780,12 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                             }
                             ExamAddBo examAddBo = new ExamAddBo();
                             examAddBo.setExamName(preExamName);
-                            examAddBo.setCode(importExamCode);
+        //                    examAddBo.setCode(importExamCode);
                             examAddBo.setBusinessList(businessItemList);
+                            examAddBo.setExamPaperId(139L);
                             examAddBo.setQuestionList(questionList);
                             examAddBo.setStatus(1);
+                            examAddBo.setPublishStatus(1L);
                             iExamService.insertByAddBo(examAddBo);
                         }
                         list1.clear();
@@ -3110,6 +3108,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                 String indexKey = null;
                 for (XWPFParagraph paragraph : paragraphList) {
                     content = paragraph.getText();
+                    System.out.println(content);
                     List<XWPFRun> runs = paragraph.getRuns();
                     imgUrl = null;
                 //    System.out.println(content);
@@ -3349,11 +3348,14 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                     }
                     if(aType>0){
                         String[] strArr = content.split("\\.");
-                        if(aType==1&&strArr.length==2){
+                        if(aType==1&&strArr.length==2&&strArr[0].length()<3){
                             System.out.println(strArr);
                             indexKey = strArr[0]+".";
                             QuestionAddBo cAddBo = allQues.get(indexKey);
                             answerQuestion = dealImportAnswer(strArr[1]);
+                            if(Validator.isEmpty(cAddBo)){
+                                System.out.println(cAddBo);
+                            }
                             cAddBo.setAnswerQuestion(answerQuestion);
                             cAddBo.setAnalysisContent("");
                         }
@@ -3361,7 +3363,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                             QuestionAddBo cAddBo = allQues.get(indexKey);
                             cAddBo.setAnalysisContent(cAddBo.getAnalysisContent()+content+"<br />");
                         }
-                        if(aType==2&&strArr.length==2){
+                        if(aType==2&&strArr.length==2&&strArr[0].length()<3){
                             indexKey = strArr[0]+".";
                             QuestionAddBo cAddBo = allQues.get(indexKey);
                             answerQuestion = dealImportAnswer(strArr[1]);
@@ -4509,6 +4511,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
 
 
     private String dealImportAnswer(String Answer) {
+        Answer = Answer.trim();
         String[] itemArray = Answer.split("");
         List<String> list = new ArrayList<>();
         for (String v : itemArray) {

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/UserProfileQueryBo.java

@@ -1,6 +1,8 @@
 package com.zhongzheng.modules.base.bo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.zhongzheng.common.annotation.Excel;
+import com.zhongzheng.common.type.EncryptHandler;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -128,6 +130,7 @@ public class UserProfileQueryBo extends BaseEntity implements Serializable {
 	@ApiModelProperty("公司名称")
 	private String companyName;
 
-	@ApiModelProperty("身份证")
+	/** 身份证号 */
+	@ApiModelProperty("身份证号")
 	private String idCard;
 }

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingServiceImpl.java

@@ -104,9 +104,9 @@ public class ActivityAdvertisingServiceImpl extends ServiceImpl<ActivityAdvertis
      */
     private void validEntityBeforeSave(ActivityAdvertising entity){
         //TODO 做一些数据校验,如唯一约束
-        if(checkNameUnique(entity)&& Validator.isEmpty(entity.getId())){
+       /* if(checkNameUnique(entity)&& Validator.isEmpty(entity.getId())){
             throw new CustomException("名称重复");
-        }
+        }*/
     }
 
     @Override

+ 74 - 15
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java

@@ -18,6 +18,7 @@ import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.modules.alioss.service.OssService;
 import com.zhongzheng.modules.base.bo.CertificateTpAddBo;
 import com.zhongzheng.modules.base.bo.CertificateTpEditBo;
@@ -294,6 +295,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             queryBo.setGradeId(gradeUser.getGradeId());
             queryBo.setUserId(gradeUser.getUserId());
             queryBo.setOrderGoodsId(gradeUser.getOrderGoodsId());
+
             OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>()
                     .eq(OrderGoods::getOrderGoodsId, gradeUser.getOrderGoodsId()));
             queryBo.setGoodsId(orderGoods.getGoodsId());
@@ -365,7 +367,12 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                 sex = "女";
             }
             vo.setSex(sex);
-            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            Integer totalHour = 0;
+            for(CourseChapterVo chapterVo : chapterList){
+                totalHour+=chapterVo.getSectionNum();
+            }
+            goodsVo.setClassHours(new BigDecimal(totalHour));
+            vo.setClassHours(totalHour+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -395,7 +402,12 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                 sex = "女";
             }
             vo.setSex(sex);
-            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            Integer totalHour = 0;
+            for(CourseChapterVo chapterVo : chapterList){
+                totalHour+=chapterVo.getSectionNum();
+            }
+            goodsVo.setClassHours(new BigDecimal(totalHour));
+            vo.setClassHours(totalHour+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -425,7 +437,12 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                 sex = "女";
             }
             vo.setSex(sex);
-            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            Integer totalHour = 0;
+            for(CourseChapterVo chapterVo : chapterList){
+                totalHour+=chapterVo.getSectionNum();
+            }
+            goodsVo.setClassHours(new BigDecimal(totalHour));
+            vo.setClassHours(totalHour+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -455,7 +472,12 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                 sex = "女";
             }
             vo.setSex(sex);
-            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            Integer totalHour = 0;
+            for(CourseChapterVo chapterVo : chapterList){
+                totalHour+=chapterVo.getSectionNum();
+            }
+            goodsVo.setClassHours(new BigDecimal(totalHour));
+            vo.setClassHours(totalHour+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -485,7 +507,12 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                 sex = "女";
             }
             vo.setSex(sex);
-            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            Integer totalHour = 0;
+            for(CourseChapterVo chapterVo : chapterList){
+                totalHour+=chapterVo.getSectionNum();
+            }
+            goodsVo.setClassHours(new BigDecimal(totalHour));
+            vo.setClassHours(totalHour+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -515,7 +542,13 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                 sex = "女";
             }
             vo.setSex(sex);
-            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            Integer totalHour = 0;
+            for(CourseChapterVo chapterVo : chapterList){
+                totalHour+=chapterVo.getSectionNum();
+            }
+            goodsVo.setClassHours(new BigDecimal(totalHour));
+            vo.setClassHours(totalHour+"");
+    //        vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -661,7 +694,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         Long id = iUserCertificateService.selectMaxId();
         String nowId = Long.toString(id);
         String result = "";
-        result = String.format("%0" + 5 + "d", Integer.parseInt(nowId) + 1);
+        result = String.format("%05d", Integer.parseInt(nowId) + 1);
         return result;
     }
 
@@ -749,13 +782,32 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         return chapterListTxt;
     }
 
+
+    private String getImgDir(){
+        String tenantId = ToolsUtils.getTenantId();
+        if(tenantId.equals("694515817698614")){
+            return tenantId;
+        }else {
+            return "867735392558919680";
+        }
+    }
+
+    private Boolean haveStamp(){
+        String tenantId = ToolsUtils.getTenantId();
+        if(tenantId.equals("694515817698614")){
+            return false;
+        }else {
+            return true;
+        }
+    }
+
     private String drawPic(CertificatePhotoVo entity){
         Font font = new Font("微软雅黑", Font.PLAIN, 45);// 添加字体的属性设置
         String projectUrl = "D:\\test\\";
         String imgName = projectUrl + "out01.jpg";
         try {
             // 加载本地图片
-            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/002.jpg");
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/"+getImgDir()+"/002.jpg");
     //        String imageLocalUrl = projectUrl + "002.jpg";
    //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
             BufferedImage imageLocal = ImageIO.read(imgStream);
@@ -825,7 +877,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         String imgName = null;
         try {
             // 加载本地图片
-            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/003.jpg");
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/"+getImgDir()+"/003.jpg");
             //        String imageLocalUrl = projectUrl + "003.jpg";
             //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
             BufferedImage imageLocal = ImageIO.read(imgStream);
@@ -886,7 +938,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         String imgName = null;
         try {
             // 加载图片
-            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/004.jpg");
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/"+getImgDir()+"/004.jpg");
             //        String imageLocalUrl = projectUrl + "003.jpg";
             //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
             BufferedImage imageLocal = ImageIO.read(imgStream);
@@ -932,7 +984,9 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
 
             InputStream logoStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/001.png");
             BufferedImage logoBuffered = ImageIO.read(logoStream);
-            g.drawImage(logoBuffered, 1438, 2555, 529, 528, null);
+            if(haveStamp()){
+                g.drawImage(logoBuffered, 1438, 2555, 529, 528, null);
+            }
 
             //二维码
             String qrTxt = CERTIFICATE_HOST+"pages/certificate/index?code="+entity.getCode();
@@ -969,7 +1023,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         String imgName = null;
         try {
             // 加载本地图片
-            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/005.jpg");
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/"+getImgDir()+"/005.jpg");
             //        String imageLocalUrl = projectUrl + "003.jpg";
             //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
             BufferedImage imageLocal = ImageIO.read(imgStream);
@@ -1028,7 +1082,9 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
 
             InputStream logoStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/001.png");
             BufferedImage logoBuffered = ImageIO.read(logoStream);
-            g.drawImage(logoBuffered, 1012, 1666, 330, 330, null);
+            if(haveStamp()){
+                g.drawImage(logoBuffered, 1012, 1666, 330, 330, null);
+            }
 
             //二维码
             String qrTxt = CERTIFICATE_HOST+"pages/certificate/index?code="+entity.getCode();
@@ -1064,7 +1120,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         String imgName = null;
         try {
             // 加载本地图片
-            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/006.jpg");
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/"+getImgDir()+"/006.jpg");
             //        String imageLocalUrl = projectUrl + "003.jpg";
             //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
             BufferedImage imageLocal = ImageIO.read(imgStream);
@@ -1123,7 +1179,10 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
 
             InputStream logoStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/001.png");
             BufferedImage logoBuffered = ImageIO.read(logoStream);
-            g.drawImage(logoBuffered, 1012, 1666, 330, 330, null);
+            if(haveStamp()){
+                g.drawImage(logoBuffered, 1012, 1666, 330, 330, null);
+            }
+
 
             //二维码
             String qrTxt = CERTIFICATE_HOST+"pages/certificate/index?code="+entity.getCode();

+ 26 - 17
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java

@@ -167,12 +167,13 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         if(Validator.isNotEmpty(profile)){
             Map<String, String> maps = JSONObject.parseObject(profile.getKeyValue(), Map.class);
             if(maps.containsKey("commitment_electr_signature")){
-                String img = ALIYUN_OSS_ENDPOINT + "/" + JSONObject.parseObject(String.valueOf(maps.get("commitment_electr_signature")), UserProfileFit.class).getValue();
+                String img = ALIYUN_OSS_ENDPOINT + "/" + jsonHandle(maps,"commitment_electr_signature");
                 return img;
             }
         }
         return null;
     }
+
     /**
      * 实体类转化成视图对象
      *
@@ -205,6 +206,8 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         }
         UserProfile old = getOne(new LambdaQueryWrapper<UserProfile>().eq(UserProfile::getOrderGoodsId, bo.getOrderGoodsId())
                 .eq(UserProfile::getCurrentStatus, 1L)
+                .eq(UserProfile::getChangeStatus, 1L)
+                .eq(UserProfile::getTypeStatus, bo.getTypeStatus())
                 .last("limit 1"));
         if(Validator.isNotEmpty(old)){
             throw new CustomException("存在未处理的数据,无法操作");
@@ -284,22 +287,23 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         //给模板绑定数据
         Calendar rightNow = Calendar.getInstance();
         Map<String, Object> bindingMap = new HashMap<>();
-        bindingMap.put("username", JSONObject.parseObject(String.valueOf(maps.get("name")), UserProfileFit.class).getValue());
-        bindingMap.put("s", JSONObject.parseObject(String.valueOf(maps.get("sex")), UserProfileFit.class).getValue());
-        bindingMap.put("post", JSONObject.parseObject(String.valueOf(maps.get("apply_post")), UserProfileFit.class).getValue());
-        bindingMap.put("idcard", JSONObject.parseObject(String.valueOf(maps.get("idcard")), UserProfileFit.class).getValue());
-        bindingMap.put("phone", JSONObject.parseObject(String.valueOf(maps.get("telphone")), UserProfileFit.class).getValue());
-        bindingMap.put("school", JSONObject.parseObject(String.valueOf(maps.get("school")), UserProfileFit.class).getValue());
-        bindingMap.put("edu", JSONObject.parseObject(String.valueOf(maps.get("education")), UserProfileFit.class).getValue());
-        bindingMap.put("major", JSONObject.parseObject(String.valueOf(maps.get("major")), UserProfileFit.class).getValue());
-        bindingMap.put("cname", JSONObject.parseObject(String.valueOf(maps.get("unit_contact")), UserProfileFit.class).getValue());
-        bindingMap.put("cphone", JSONObject.parseObject(String.valueOf(maps.get("unit_tel")), UserProfileFit.class).getValue());
-        bindingMap.put("image", ALIYUN_OSS_ENDPOINT + "/" + JSONObject.parseObject(String.valueOf(maps.get("commitment_electr_signature")), UserProfileFit.class).getValue());
+
+        bindingMap.put("username", jsonHandle(maps,"name"));
+        bindingMap.put("s", jsonHandle(maps,"sex"));
+        bindingMap.put("post", jsonHandle(maps,"apply_post"));
+        bindingMap.put("idcard", jsonHandle(maps,"idcard"));
+        bindingMap.put("phone", jsonHandle(maps,"telphone"));
+        bindingMap.put("school", jsonHandle(maps,"school"));
+        bindingMap.put("edu", jsonHandle(maps,"education"));
+        bindingMap.put("major", jsonHandle(maps,"major"));
+        bindingMap.put("cname", jsonHandle(maps,"unit_contact"));
+        bindingMap.put("cphone", jsonHandle(maps,"unit_tel"));
+        bindingMap.put("image", ALIYUN_OSS_ENDPOINT + "/" + jsonHandle(maps,"commitment_electr_signature"));
         bindingMap.put("y", Convert.toStr(rightNow.get(Calendar.YEAR)));
         bindingMap.put("m", rightNow.get(Calendar.MONTH) + 1);
         bindingMap.put("d", rightNow.get(Calendar.DAY_OF_MONTH));
-        bindingMap.put("time", JSONObject.parseObject(String.valueOf(maps.get("graduation_time")), UserProfileFit.class).getValue());
-        bindingMap.put("year", JSONObject.parseObject(String.valueOf(maps.get("working_years")), UserProfileFit.class).getValue());
+        bindingMap.put("time", jsonHandle(maps,"graduation_time"));
+        bindingMap.put("year", jsonHandle(maps,"working_years"));
         File touch = FileUtil.touch(ZHONGZHENG_PROFILE + imgIndex+"word.html");
         //默认freemake配置
         Configuration configuration = new Configuration();
@@ -334,6 +338,14 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         return upload;
     }
 
+    private String jsonHandle(Map<String,String> maps,String key){
+        UserProfileFit userProfileFit = JSONObject.parseObject(String.valueOf(maps.get(key)), UserProfileFit.class);
+        if (ObjectUtils.isNull(userProfileFit) || ObjectUtils.isNull(userProfileFit.getValue())){
+            return "";
+        }
+        return userProfileFit.getValue();
+    }
+
     @Override
     public String addWord(UserProfileAddBo bo) throws IOException {
         UserProfileQueryBo userProfileQueryBo = new UserProfileQueryBo();
@@ -539,7 +551,6 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                         if(Validator.isNotEmpty(user2)){
                             throw new CustomException("身份证号码已存在,创建失败");
                         }
-                        idcard = idcard.trim();
                         objectLambdaUpdateWrapper.set(User::getIdCard, idcard);
                     }
                 }
@@ -553,7 +564,6 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                         if(Validator.isNotEmpty(user2)){
                             throw new CustomException("手机号码已存在,创建失败");
                         }
-                        telphone = telphone.trim();
                         objectLambdaUpdateWrapper.set(User::getTelphone, telphone);
                     }
                 }
@@ -562,7 +572,6 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 name = JSONObject.parseObject(String.valueOf(maps.get("name")), UserProfileFit.class).getValue();
                 if(Validator.isNotEmpty(name)){
                     if(Validator.isNotEmpty(user)&&Validator.isEmpty(user.getRealname())) { //姓名为空是覆盖
-                        name = name.trim();
                         objectLambdaUpdateWrapper.set(User::getRealname, name);
                     }
 

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessAddBo.java

@@ -83,4 +83,6 @@ public class CourseBusinessAddBo {
     private Integer periodType;
     @ApiModelProperty("学时审核层级:1初审,2初审和复审")
     private Integer periodNumber;
+    @ApiModelProperty("学时审核标签:1开启 2关闭")
+    private Integer periodCheckSign;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessEditBo.java

@@ -94,4 +94,6 @@ public class CourseBusinessEditBo {
     private Integer periodType;
     @ApiModelProperty("学时审核层级:1初审,2初审和复审")
     private Integer periodNumber;
+    @ApiModelProperty("学时审核标签:1开启 2关闭")
+    private Integer periodCheckSign;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseBusiness.java

@@ -72,6 +72,8 @@ private static final long serialVersionUID=1L;
     private Integer periodType;
     /** 学时审核层级:1初审,2初审和复审 */
     private Integer periodNumber;
+    /** 学时审核标签:1开启 2关闭 */
+    private Integer periodCheckSign;
     private String tenantId;
 
     @TableField(exist = false)

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java

@@ -15,6 +15,7 @@ import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.vo.ClassGradeVo;
 import com.zhongzheng.modules.order.bo.SpecialQuestionBo;
 import com.zhongzheng.modules.order.vo.SpecialQuestionVo;
+import com.zhongzheng.modules.user.bo.SubjectStudyRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserPlanQueryBo;
 import org.apache.ibatis.annotations.Param;
 
@@ -79,4 +80,7 @@ public interface CourseMapper extends BaseMapper<Course> {
     Long getSpecialQuestionCount(SpecialQuestionBo bo);
 
     List<Long> getOrderGoodsIds(CourseQueryBo bo);
+
+    Long getStudyCourseNum(SubjectStudyRecordQueryBo subjectStudyRecordQueryBo);
+
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseChapterSectionServiceImpl.java

@@ -51,7 +51,7 @@ public class CourseChapterSectionServiceImpl extends ServiceImpl<CourseChapterSe
         list.forEach(courseChapterSectionVo -> {
             if (Validator.isNotNull(courseChapterSectionVo.getDurationTime())) {
                 //设置节时长(分钟)
-                courseChapterSectionVo.setDurationMinTime(Math.ceil(courseChapterSectionVo.getDurationTime()/60.0));
+                courseChapterSectionVo.setDurationMinTime(Double.valueOf(String.format("%.2f",courseChapterSectionVo.getDurationTime().doubleValue()/60.0)));
                 //设置学时
                 courseChapterSectionVo.setClassHours(Double.valueOf(String.format("%.2f", courseChapterSectionVo.getDurationMinTime()/45.0)));
             }

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseMenuServiceImpl.java

@@ -73,13 +73,13 @@ public class CourseMenuServiceImpl extends ServiceImpl<CourseMenuMapper, CourseM
             if (Validator.isNotNull(courseMenuVo.getDurationTime())) {
                 //设置节时长(分钟)
         //        courseMenuVo.setDurationMinTime(Math.ceil(courseMenuVo.getDurationTime()/60.0));
-                courseMenuVo.setDurationMinTime((int)Math.ceil(courseMenuVo.getDurationTime().intValue()/60));
+                courseMenuVo.setDurationMinTime(Double.valueOf(String.format("%.2f",courseMenuVo.getDurationTime().doubleValue()/60)));
                 DecimalFormat df=new DecimalFormat("0.0");//设置保留位数
                 //设置学时
         //        courseMenuVo.setClassHours(Double.valueOf(String.format("%.2f", courseMenuVo.getDurationMinTime()/45.0)));
 //                courseMenuVo.setClassHours(Double.valueOf(df.format(courseMenuVo.getDurationMinTime()/45)));
 
-                courseMenuVo.setClassHours(Double.valueOf(String.format("%.1f", courseMenuVo.getDurationMinTime()/45.0)));
+                courseMenuVo.setClassHours(Double.valueOf(String.format("%.2f", courseMenuVo.getDurationMinTime()/45.0)));
             }
         });
         return list;

+ 10 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseModuleChapterServiceImpl.java

@@ -15,6 +15,7 @@ import com.zhongzheng.modules.course.bo.CourseModuleChapterAddBo;
 import com.zhongzheng.modules.course.bo.CourseModuleChapterEditBo;
 import com.zhongzheng.modules.course.bo.CourseModuleChapterQueryBo;
 import com.zhongzheng.modules.course.domain.CourseModuleChapter;
+import com.zhongzheng.modules.course.mapper.CourseMenuMapper;
 import com.zhongzheng.modules.course.mapper.CourseModuleChapterMapper;
 import com.zhongzheng.modules.course.service.ICourseModuleChapterService;
 import com.zhongzheng.modules.course.vo.CourseModuleChapterVo;
@@ -39,6 +40,9 @@ public class CourseModuleChapterServiceImpl extends ServiceImpl<CourseModuleChap
     @Autowired
     private CourseModuleChapterMapper courseModuleChapterMapper;
 
+    @Autowired
+    private CourseMenuMapper courseMenuMapper;
+
     @Override
     public CourseModuleChapterVo queryById(Long id){
         CourseModuleChapter db = this.baseMapper.selectById(id);
@@ -48,7 +52,11 @@ public class CourseModuleChapterServiceImpl extends ServiceImpl<CourseModuleChap
     @Override
     public List<CourseModuleChapterVo> getListById(Long id) {
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
-        return courseModuleChapterMapper.getListById(id, tenantId);
+        List<CourseModuleChapterVo> list = courseModuleChapterMapper.getListById(id,tenantId);
+        for(CourseModuleChapterVo vo : list){
+            vo.setChapterTotalTime(courseMenuMapper.countChapterTotalTime(vo.getChapterId()));
+        }
+        return list;
     }
 
 
@@ -161,6 +169,7 @@ public class CourseModuleChapterServiceImpl extends ServiceImpl<CourseModuleChap
         return courseUserModuleChapterVos;
     }
 
+
     @Override
     public void deleteByIdAndTenant(Long newModuleId, String newTenantId) {
         baseMapper.deleteByIdAndTenant(newModuleId, newTenantId);

+ 14 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSectionWatchPerServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.course.bo.CheckSectionWatchVo;
 import com.zhongzheng.modules.course.bo.SectionWatchPerAddBo;
 import com.zhongzheng.modules.course.bo.SectionWatchPerBo;
@@ -80,7 +81,8 @@ public class CourseSectionWatchPerServiceImpl extends ServiceImpl<CourseSectionW
             format = format + "&watchPer="+watchPer.getWatchPer();
         }
         String s = Base64.encode(format);
-        String url = String.format("%s?param=%s",liveHost,s);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        String url = String.format("%s?param=%s&tenantId=%s",liveHost,s,tenantId);
         vo.setEnCodePC(url);
         vo.setEnCode(url);
         if (ObjectUtils.isNull(watchPer)){
@@ -116,6 +118,17 @@ public class CourseSectionWatchPerServiceImpl extends ServiceImpl<CourseSectionW
         watchVo.setSectionId(bo.getSectionId());
         watchVo.setGoodsStatus(goods.getGoodsStatus());
         watchVo.setGoodsName(goods.getGoodsName());
+        //获取课程节信息
+        CourseSection section = courseSectionService.getById(bo.getSectionId());
+        //判断直播是否开始
+        if (ObjectUtils.isNotNull(section) && section.getSectionType() == 2){
+            if (section.getLiveStartTime() > DateUtils.getNowTime()){
+                //直播时间还没到
+                watchVo.setCheckStatus(0);
+                watchVo.setCheckMsg("直播时间未到,无法观看!");
+                return watchVo;
+            }
+        }
         //获取观看权限
         CourseSectionWatchPer watchPer = getOne(new LambdaQueryWrapper<CourseSectionWatchPer>()
                 .eq(CourseSectionWatchPer::getCourseId, bo.getCourseId())

+ 26 - 9
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -736,7 +736,9 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
             goodsUserVo.setErJianErZao(false);
             goodsUserVo.setUserProfile(0);
             if(Validator.isNotEmpty(fullName)){
+                Boolean flag = false;
                 if(fullName.equals("继续教育二级建造师")||fullName.equals("继续教育二级造价师")){
+                    flag = true;
                     goodsUserVo.setErJianErZao(true);
                 }else if (goodsUserVo.getEducationName().equals("考前培训") && goodsUserVo.getProjectName().equals("施工现场专业人员")){
                     int count = iUserProfileService.count(new LambdaQueryWrapper<UserProfile>()
@@ -749,6 +751,15 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                         goodsUserVo.setUserProfile(1);
                     }
                 }
+
+                if(goodsUserVo.getEducationName().equals("继续教育") && goodsUserVo.getProjectName().equals("施工现场专业人员")){
+                    flag = true;
+                }
+
+                //继续课程显示班级名称
+                if (flag){
+                    goodsUserVo.setGoodsName(classGradeVo.getClassName());
+                }
             }
 
             goodsUserVo.setGradeId(classGradeVo.getGradeId());
@@ -933,7 +944,6 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
         return tableDataInfo;
     }
 
-
     @Override
     public List<GoodsUserVo> goodsStudyProgressList(CourseQueryBo bo) {
         List<GoodsUserVo> goodsUserVos = baseMapper.goodsStudyProgressList(bo);
@@ -978,23 +988,30 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                 continue;
             }
 
-            Long secLong = 0L;
-            Long studyLong = 0L;
+//            Long secLong = 0L;
+//            Long studyLong = 0L;
             SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
             subjectStudyRecordQueryBo.setGoodsId(goodsUserVo.getGoodsId());
             subjectStudyRecordQueryBo.setUserId(bo.getUserId());
             subjectStudyRecordQueryBo.setGradeId(goodsUserVo.getGradeId());
             subjectStudyRecordQueryBo.setOrderGoodsId(goodsUserVo.getOrderGoodsId());
-            List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listDangAnSubject(subjectStudyRecordQueryBo);
-            for (SubjectStudyRecordVo subjectStudyRecordVo : subjectStudyRecordVos) {
-                secLong = new BigDecimal(secLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getSectionNum().toString())).longValue();
-                studyLong = new BigDecimal(studyLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getRecordNum().toString())).longValue();
-            }
-            goodsUserVo.setSecAllNum(secLong);
+//            List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listDangAnSubject(subjectStudyRecordQueryBo);
+//            for (SubjectStudyRecordVo subjectStudyRecordVo : subjectStudyRecordVos) {
+//                secLong = new BigDecimal(secLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getSectionNum().toString())).longValue();
+//                studyLong = new BigDecimal(studyLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getRecordNum().toString())).longValue();
+//            }
+            goodsUserVo.setSecAllNum(goodsUserVo.getCourseNum());
+            //已学节
+            Long studyLong =  baseMapper.getStudyCourseNum(subjectStudyRecordQueryBo);
             goodsUserVo.setStuAllNum(studyLong);
             goodsUserVo.setExamNum(classGradeVo.getExamNum());
             goodsUserVo.setRecordNum(classGradeVo.getRecordNum());
             goodsUserVo.setPeriodStatus(classGradeVo.getPeriodStatus());
+            goodsUserVo.setSignId(classGradeVo.getId());
+            goodsUserVo.setOfficialStatus(classGradeVo.getOfficialStatus());
+            goodsUserVo.setClassStatus(classGradeVo.getClassStatus());
+            goodsUserVo.setClassStartTime(classGradeVo.getClassStartTime());
+            goodsUserVo.setClassEndTime(classGradeVo.getClassEndTime());
         }
         return goodsUserVos;
     }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseBusinessVo.java

@@ -130,4 +130,6 @@ public class CourseBusinessVo {
 	private Integer periodNumber;
 	@ApiModelProperty("专题页ID")
 	private Long topicId;
+	@ApiModelProperty("学时审核标签:1开启 2关闭")
+	private Integer periodCheckSign;
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseMenuVo.java

@@ -55,7 +55,7 @@ public class CourseMenuVo {
 	/** 节时长(分钟) */
 	@Excel(name = "节时长(分钟)")
 	@ApiModelProperty("节时长(分钟)")
-	private Integer durationMinTime;
+	private Double durationMinTime;
 	/** 学时 */
 	@Excel(name = "学时")
 	@ApiModelProperty("学时")

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

@@ -68,4 +68,7 @@ public class CourseModuleChapterVo {
 	private Integer sectionNum;
 	@ApiModelProperty("视频标签:1保利威 2腾讯")
 	private Long viewSign;
+
+	@ApiModelProperty("章总时长秒数")
+	private Long chapterTotalTime;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/GoodsBatchListVo.java

@@ -19,5 +19,7 @@ public class GoodsBatchListVo implements Serializable {
 
     private Long userId;
 
+    private String passwordAes;
+
     private List<GoodsUserVo> list;
 }

+ 30 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplyCertificateBo.java

@@ -0,0 +1,30 @@
+package com.zhongzheng.modules.exam.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年06月20日 11:22
+ */
+@Data
+public class ExamApplyCertificateBo implements Serializable {
+
+    private String userName;
+
+    private String idCard;
+
+    /** 证书编号 */
+    private String certificateCode;
+    /** 发证时间 */
+    private Long certificateStartTime;
+    /** 到期时间 */
+    private Long certificateEndTime;
+    /** 证书下载地址 */
+    private String certificateUrl;
+
+    private String major;
+
+    private String tenantId;
+}

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplyResultExportBo.java

@@ -47,5 +47,13 @@ public class ExamApplyResultExportBo implements Serializable {
     @Excel(name = "证书编码")
     private String certificateCode;
 
+    private Long applyTime;
 
+    private String applyStartTime;
+
+    private String applyEndTime;
+
+    private String major;
+
+    private String tenantId;
 }

+ 18 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/UpdateApplyNumBo.java

@@ -0,0 +1,18 @@
+package com.zhongzheng.modules.exam.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年04月11日 15:03
+ */
+@Data
+public class UpdateApplyNumBo implements Serializable {
+
+    private List<Long> applyIds;
+
+    private Integer num;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/domain/ExamActivity.java

@@ -48,4 +48,6 @@ private static final long serialVersionUID=1L;
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private Long updateTime;
 
+    private Long tenantId;
+
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/IExamApplyService.java

@@ -113,4 +113,6 @@ public interface IExamApplyService extends IService<ExamApply> {
     String examApplyResultCertificate(List<MultipartFile> files);
 
 	List<UserProfile> getUserProfiles(String idCard, String businessName, String major);
+
+    boolean updateApplyNum(UpdateApplyNumBo bo);
 }

+ 38 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamActivityServiceImpl.java

@@ -4,6 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
 import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
@@ -31,6 +35,8 @@ import com.zhongzheng.modules.mock.domain.MockMajor;
 import com.zhongzheng.modules.mock.domain.MockMajorSubject;
 import com.zhongzheng.modules.mock.service.IMockMajorService;
 import com.zhongzheng.modules.mock.service.IMockMajorSubjectService;
+import com.zhongzheng.modules.system.domain.SysTenant;
+import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.service.IUserMockSubscribeService;
 import com.zhongzheng.modules.user.service.IUserService;
@@ -38,11 +44,14 @@ import com.zhongzheng.modules.wx.service.IWxLoginService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Base64;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -75,6 +84,10 @@ public class ExamActivityServiceImpl extends ServiceImpl<ExamActivityMapper, Exa
     private IUserService userService;
     @Autowired
     private IUserMockSubscribeService userMockSubscribeService;
+    @Autowired
+    private ISysTenantService sysTenantService;
+    @Value("${liveGotoURL}")
+    private String liveGotoURL;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -204,7 +217,31 @@ public class ExamActivityServiceImpl extends ServiceImpl<ExamActivityMapper, Exa
 
     @Override
     public String getActivityApplyCode(Long activityId) {
-        return wxLoginService.getActivityApplyCode(activityId);
+        ExamActivity activity = getById(activityId);
+        if (ObjectUtils.isNull(activity)){
+            throw new CustomException("活动不存在");
+        }
+        //H5域名
+        SysTenant tenant = sysTenantService.getById(activity.getTenantId());
+        String hostH5 = tenant.getHostH5();
+        String urlBase64 = "";
+        try {
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(String.format("%s%s/pages5/mockExam/examApply?tid=%s",liveGotoURL,hostH5,activityId),
+                    BarcodeFormat.QR_CODE, 300, 300);
+            // 写到输出流
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            MatrixToImageWriter.writeToStream(bitMatrix, "jpg", outputStream);
+            //转换为base64
+            Base64.Encoder encoder1 = Base64.getEncoder();
+            urlBase64 = "data:image/jpeg;base64,"
+                    + encoder1.encodeToString(outputStream.toByteArray());
+        }catch (Exception e) {
+            e.printStackTrace();
+            throw new CustomException("二维码生成失败");
+        }
+//        wxLoginService.getActivityApplyCode(activityId);
+        return urlBase64;
     }
 
     @Override

+ 55 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java

@@ -55,6 +55,7 @@ import com.zhongzheng.modules.system.domain.SysConfig;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.user.bo.CdExamSubscribeBo;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.service.IUserService;
@@ -136,6 +137,10 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
 
     @Value("${zhongzheng.profile}")
     private String ZHONGZHENG_PROFILE;
+    @Value("${exam.subscribeAddExamResult}")
+    private String EXAM_SUBSCRIBE_SAVE_RESULT;
+    @Value("${exam.subscribeAddCertificate}")
+    private String EXAM_SUBSCRIBE_SAVE_RESULT_CERTIFICATE;
 
     @Override
     public ExamApplyVo queryById(Long applyId) {
@@ -1150,6 +1155,30 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
        return baseMapper.getUserProfileList(idCard,businessName,major);
     }
 
+    @Override
+    public boolean updateApplyNum(UpdateApplyNumBo bo) {
+        for (Long applyId : bo.getApplyIds()) {
+            ExamApply apply = getById(applyId);
+            if (ObjectUtils.isNull(apply)){
+                throw new CustomException("考试信息获取有误!");
+            }
+            List<ExamApplySiteTime> siteTimeList = iExamApplySiteTimeService
+                    .list(new LambdaQueryWrapper<ExamApplySiteTime>().eq(ExamApplySiteTime::getApplyId, applyId));
+            if (CollectionUtils.isNotEmpty(siteTimeList)){
+                siteTimeList.forEach(item -> {
+                    List<ExamApplySiteTimeTwoAddBo> siteTimeTwoAddBos = JSONArray.parseArray(item.getSiteTime(), ExamApplySiteTimeTwoAddBo.class);
+                    if (CollectionUtils.isNotEmpty(siteTimeTwoAddBos)){
+                        siteTimeTwoAddBos.forEach(x -> x.setNum(bo.getNum().longValue()));
+                        String s = JSONArray.toJSONString(siteTimeTwoAddBos);
+                        item.setSiteTime(s);
+                    }
+                });
+            }
+            iExamApplySiteTimeService.updateBatchById(siteTimeList);
+        }
+        return true;
+    }
+
     @Override
     public String examUserProfileExport(UserProfileQueryBo bo) {
         List<UserProfileVo> userProfileVos = iUserProfileService.queryList(bo);
@@ -1304,9 +1333,18 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
                     default :
                         break;
             }
-
+            bo.setApplyTime(DateUtils.dateTimeSec("yyyy-MM-dd",collect.get(0)));
+            bo.setApplyStartTime(getTimeStr(collect.get(1)));
+            bo.setApplyEndTime(getTimeStr(collect.get(3)));
+            bo.setTenantId(user.getTenantId());
+            bo.setMajor(majorName);
             iUserSubscribeService.updateByIdNoTenant(subscribe);
         });
+
+        //通知B端系统
+        String param = JSONArray.toJSONString(exportBo);
+        Map<String, String> headersMap = new HashMap<>();
+        HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_SAVE_RESULT, param, headersMap);
     }
 
     @Override
@@ -1315,6 +1353,7 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
             return "请勿上传空文件!";
         }
         List<String> msgList = new ArrayList<>();
+        List<ExamApplyCertificateBo> certificateBos = new ArrayList<>();
         files.forEach(multipartFile -> {
             //文件名= 身份证号码_岗位名称_证书编号_发证日期
             String fileName = multipartFile.getOriginalFilename();
@@ -1354,6 +1393,15 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
             try {
                 String upload = ossService.upload(ossRequest);
                 subscribe.setCertificateUrl(upload);
+                ExamApplyCertificateBo examAp = new ExamApplyCertificateBo();
+                examAp.setCertificateUrl(upload);
+                examAp.setCertificateEndTime(timeTwo);
+                examAp.setCertificateStartTime(time);
+                examAp.setCertificateCode(collect.get(2));
+                examAp.setMajor(collect.get(1));
+                examAp.setIdCard(EncryptHandler.decrypt(user.getIdCard()));
+                examAp.setTenantId(user.getTenantId());
+                certificateBos.add(examAp);
             } catch (Exception e) {
 //                log.error("证书上传有误:"+collect.get(0));
                 msgList.add(multipartFile.getOriginalFilename());
@@ -1361,6 +1409,12 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
             }
             iUserSubscribeService.updateByIdNoTenant(subscribe);
         });
+        //通知B端系统
+        if (CollectionUtils.isNotEmpty(certificateBos)){
+            String param = JSONArray.toJSONString(certificateBos);
+            Map<String, String> headersMap = new HashMap<>();
+            HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_SAVE_RESULT_CERTIFICATE, param, headersMap);
+        }
         return msgList.stream().collect(Collectors.joining(","));
     }
 

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplySiteServiceImpl.java

@@ -158,7 +158,7 @@ public class ExamApplySiteServiceImpl extends ServiceImpl<ExamApplySiteMapper, E
                 CdExamRoomUpdateBo roomBo = new CdExamRoomUpdateBo();
                 roomBo.setSignId(apply.getApplyId());
                 roomBo.setDataFrom(1);
-//                roomBo.setTenantId(apply.getTenantId());
+                roomBo.setTenantId(apply.getTenantId());
                 roomBo.setExamType(apply.getApplyNature());
                 roomBo.setExamTime(timeAddBo.getExamTime());
                 ExamApplySiteTimeTwoAddBo twoAddBo = timeAddBo.getExamApplySiteTimeTwo().stream().findFirst().orElse(null);
@@ -178,7 +178,7 @@ public class ExamApplySiteServiceImpl extends ServiceImpl<ExamApplySiteMapper, E
                 CdExamRoomBo roomBo = new CdExamRoomBo();
                 roomBo.setSignId(apply.getApplyId());
                 roomBo.setDataFrom(1);
-//                roomBo.setTenantId(apply.getTenantId());
+                roomBo.setTenantId(apply.getTenantId());
                 roomBo.setType(1);//七大员预约
                 roomBo.setExamType(apply.getApplyNature());
                 roomBo.setExamTime(timeAddBo.getExamTime());

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsBankAddBo.java

@@ -135,4 +135,6 @@ public class GoodsBankAddBo {
     private String externalLink;
     @ApiModelProperty("是否外链商品:0否 1是")
     private Integer externalLinkStatus;
+    @ApiModelProperty("寄件标签:1是 0否")
+    private Integer mailSign;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsBankEditBo.java

@@ -164,4 +164,6 @@ public class GoodsBankEditBo {
     private String externalLink;
     @ApiModelProperty("是否外链商品:0否 1是")
     private Integer externalLinkStatus;
+    @ApiModelProperty("寄件标签:1是 0否")
+    private Integer mailSign;
 }

+ 11 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java

@@ -14,6 +14,7 @@ import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
 import com.zhongzheng.modules.goods.bo.UserGoodsListAllBo;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.vo.*;
+import com.zhongzheng.modules.system.domain.SysGoodsCopyRecord;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.security.core.parameters.P;
@@ -62,7 +63,7 @@ public interface GoodsMapper extends BaseMapper<Goods> {
     void updateByTenant(Goods goods);
 
     @InterceptorIgnore(tenantLine = "true")
-    Goods queryGoodsByIdTenant(@Param("goodsId") Long goodsId,@Param("tenantId") String tenantId);
+    Goods queryGoodsByIdTenant(@Param("goodsId") Long goodsId,@Param("tenantId")String tenantId);
 
     List<GoodsListAllVo> getUserGoodsListAll(UserGoodsListAllBo bo);
 
@@ -77,10 +78,10 @@ public interface GoodsMapper extends BaseMapper<Goods> {
     Goods getGoodsByIdNotTenant(Long goodsId);
 
     @InterceptorIgnore(tenantLine = "true")
-    Goods getGoodsByTenantTwo(@Param("goodsName") String goodsName,@Param("code") String code,@Param("tenantId") String tenantId);
+    Goods getGoodsByTenantTwo(@Param("goodsName") String goodsName,@Param("code") String code,@Param("tenantId")String tenantId);
 
     @InterceptorIgnore(tenantLine = "true")
-    void updateHandoutsId(@Param("goodsId") Long goodsId,@Param("tenantId") String tenantId,@Param("handoutsId") Long handoutsId);
+    void updateHandoutsId(@Param("goodsId") Long goodsId,@Param("tenantId")String tenantId,@Param("handoutsId") Long handoutsId);
 
     String getGoodsBusinessName(Long goodsId);
 
@@ -102,5 +103,11 @@ public interface GoodsMapper extends BaseMapper<Goods> {
     List<Goods> getRelevanceGoodsNoTenant(@Param("businessName") String businessName,@Param("majName")String majName,@Param("goodsId")Long goodsId);
 
     @InterceptorIgnore(tenantLine = "true")
-    List<Goods> getRelGoodsNoTenant(@Param("businessName") String businessName,@Param("categoryName") String categoryName,@Param("tenantId") String tenantId);
+    List<Goods> getRelGoodsNoTenant(@Param("businessName") String businessName,@Param("categoryName") String categoryName,@Param("tenantId")String tenantId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Integer getCourseNum(Long goodsId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Integer getCourseExamNumNoTenant(Long goodsId);
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java

@@ -14,6 +14,7 @@ import com.zhongzheng.modules.goods.bo.*;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.vo.*;
 import com.zhongzheng.modules.grade.vo.SyncGoodsExport;
+import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.system.domain.SysTenant;
 
 import java.util.Collection;
@@ -163,5 +164,7 @@ public interface IGoodsService extends IService<Goods> {
 
 	List<Goods> getRelGoodsNoTenant(String businessName, String categoryName, String tenantId);
 
+    Integer getCourseNum(Long goodsId);
 
+    Integer getCourseExamNum(Long goodsId);
 }

+ 49 - 16
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -411,27 +411,41 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                         List<CourseMenuVo> courseMenuVoList = iCourseMenuService.selectList(bo1);
                         if (courseMenuVoList != null && courseMenuVoList.size() > 0) {
                             courseMenuVoList.forEach(courseMenuVo -> {
-                                classHours.updateAndGet(v -> v + Math.round(courseMenuVo.getClassHours()));
-                                //获取章信息
-                                List<CourseModuleChapterVo> courseModuleChapterVoList = iCourseModuleChapterService.getListById(courseMenuVo.getMenuId());
-                                AtomicReference<Double> chapterHours = new AtomicReference<>(0.0);
-                                if (courseModuleChapterVoList != null && courseModuleChapterVoList.size() > 0) {
-                                    courseModuleChapterVoList.forEach(courseModuleChapterVo -> {
-                                        //获取节信息
-                                        List<CourseChapterSectionVo> courseChapterSectionVoList = iCourseChapterSectionService.getListById(courseModuleChapterVo.getChapterId());
-                                        if (courseChapterSectionVoList != null && courseChapterSectionVoList.size() > 0) {
-                                            courseChapterSectionVoList.forEach(courseChapterSectionVo -> {
-                                                chapterHours.updateAndGet(v -> v + courseChapterSectionVo.getClassHours());
-                                            });
-                                        }
-                                    });
+                                classHours.updateAndGet(v -> v + courseMenuVo.getClassHours());
+                                if(courseMenuVo.getType()==1){
+                                    //获取章信息
+                                    List<CourseModuleChapterVo> courseModuleChapterVoList = iCourseModuleChapterService.getListById(courseMenuVo.getMenuId());
+                                    AtomicReference<Double> chapterHours = new AtomicReference<>(0.0);
+                                    if (courseModuleChapterVoList != null && courseModuleChapterVoList.size() > 0) {
+                                        courseModuleChapterVoList.forEach(courseModuleChapterVo -> {
+                                            //获取节信息
+                                            List<CourseChapterSectionVo> courseChapterSectionVoList = iCourseChapterSectionService.getListById(courseModuleChapterVo.getChapterId());
+                                            if (courseChapterSectionVoList != null && courseChapterSectionVoList.size() > 0) {
+                                                courseChapterSectionVoList.forEach(courseChapterSectionVo -> {
+                                                    chapterHours.updateAndGet(v -> v + courseChapterSectionVo.getClassHours());
+                                                });
+                                            }
+                                        });
+                                    }
+                                    classHours.updateAndGet(v -> v + chapterHours.get());
+                                }
+                                else if(courseMenuVo.getType()==2){
+                                    AtomicReference<Double> chapterHours = new AtomicReference<>(0.0);
+                                    //获取节信息
+                                    List<CourseChapterSectionVo> courseChapterSectionVoList = iCourseChapterSectionService.getListById(courseMenuVo.getMenuId());
+                                    if (courseChapterSectionVoList != null && courseChapterSectionVoList.size() > 0) {
+                                        courseChapterSectionVoList.forEach(courseChapterSectionVo -> {
+                                            chapterHours.updateAndGet(v -> v + courseChapterSectionVo.getClassHours());
+                                        });
+                                    }
+                                    classHours.updateAndGet(v -> v + chapterHours.get());
                                 }
-                                classHours.updateAndGet(v -> v + Math.round(chapterHours.get()));
+
                             });
                         }
                     });
                 }
-                goodsVo.setClassHours((new BigDecimal(String.valueOf(classHours))).setScale(0, HALF_UP));
+                goodsVo.setClassHours((new BigDecimal(String.valueOf(classHours))).setScale(1, BigDecimal.ROUND_HALF_UP));
             });
         }
         return list;
@@ -1738,6 +1752,16 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                     goods.setCertificateTpId(getNewCertificateTpId(goods.getCertificateTpId(), newTenantId, recordList));
                 }
 
+                //商品关联题库
+                if (StringUtils.isNotBlank(goods.getQuestionRelIds())){
+                    List<Long> relIds = Arrays.stream(goods.getQuestionRelIds().split(","))
+                            .map(x -> getNewIdByTenant(Long.valueOf(x), GoodsCopyEnum.GOODS.getType(), newTenantId)).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(relIds)){
+                        String collect = relIds.stream().map(x -> x.toString()).collect(Collectors.joining(","));
+                        goods.setQuestionRelIds(collect);
+                    }
+                }
+
                 //规格模板
                 if (ObjectUtils.isNotNull(goods.getSpecTemplateId())) {
                     Long oldSpecTemplateId = goods.getSpecTemplateId();
@@ -5264,6 +5288,15 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return baseMapper.getRelGoodsNoTenant(businessName, categoryName, tenantId);
     }
 
+    @Override
+    public Integer getCourseNum(Long goodsId) {
+        return baseMapper.getCourseNum(goodsId);
+    }
+
+    @Override
+    public Integer getCourseExamNum(Long goodsId) {
+        return baseMapper.getCourseExamNumNoTenant(goodsId);
+    }
 
 
     private void updateHandoutsId(Long goodsId, String tenantId, Long handoutsId) {

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsUserVo.java

@@ -448,4 +448,10 @@ public class GoodsUserVo {
 	@ApiModelProperty("学员资料 变更状态 2变更 1否")
 	private Integer profileChangeStatus;
 
+
+	@ApiModelProperty("失败原因")
+	private String pushFailReason;
+
+	@ApiModelProperty("标签Id")
+	private Long signId;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java

@@ -310,6 +310,9 @@ public class ClassGradeUserQueryBo extends BaseEntity {
 	@ApiModelProperty("1单证书 2多证书")
 	private Integer moreCertificateStatus;
 
+	private String sevenPushReason;
 
+	@ApiModelProperty("录单订单编号")
+	private String inputOrderSn;
 
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java

@@ -29,6 +29,8 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 //    @InterceptorIgnore(tenantLine = "true")
     List<ClassGradeStudentVo> listGrade(ClassGradeUserQueryBo bo);
 
+    List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo);
+
     List<ClassGradeUserListVo> listGradeInform(ClassGradeQueryBo bo);
 
     List<ClassGradeStudentVo> listGradeStudy(ClassGradeQueryBo bo);

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeUserMapper.java

@@ -116,4 +116,11 @@ public interface ClassGradeUserMapper extends BaseMapper<ClassGradeUser> {
 
     @InterceptorIgnore(tenantLine = "true")
     ClassGradeUser selectUserNoTenant(ClassGradeUserQueryBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    void updateListUserNoTenant(@Param("sevenPushReason") String sevenPushReason);
+
+    List<Long> getFinishRequiredCourse(ClassGradeUserQueryBo bo);
+
+
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java

@@ -56,6 +56,8 @@ public interface IClassGradeService extends IService<ClassGrade> {
 
     List<ClassGradeStudentVo> listGrade(ClassGradeUserQueryBo bo);
 
+	List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo);
+
     boolean editUserGrade(ClassGradeUserAddQueryBo bo);
 
 	List<ClassGradeUserListVo> listGradeInform(ClassGradeQueryBo bo);

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeUserService.java

@@ -58,6 +58,8 @@ public interface IClassGradeUserService extends IService<ClassGradeUser> {
 
 	String pushOfficialInfoMore(List<ClassGradeUserQueryBo> list);
 
+	String pushForceOfficialInfoMore(List<ClassGradeUserQueryBo> list);
+
 	String pushOfficialPeriod(ClassGradeUserQueryBo bo);
 
 
@@ -153,4 +155,8 @@ public interface IClassGradeUserService extends IService<ClassGradeUser> {
 	List<ClassPeriodStudentVo> listBKUserPeriod(ClassGradeUserQueryBo bo);
 
     List<UserUsbRecordVo> getListUserSubscribe(UserUsbRecordBo bo);
+
+	boolean resetQdyCheckInfo();
+
+	List<ClassPeriodStudentVo> listUserPeriodRecordNew(ClassGradeUserQueryBo bo);
 }

+ 98 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -36,6 +36,7 @@ import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.domain.*;
 import com.zhongzheng.modules.grade.mapper.ClassGradeMapper;
+import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
 import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.vo.*;
 import com.zhongzheng.modules.inform.bo.InformUserAddBo;
@@ -163,6 +164,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Autowired
     private IOrderGoodsService iOrderGoodsService;
 
+    @Autowired
+    private ClassGradeUserMapper classGradeUserMapper;
+
     @Autowired
     private com.zhongzheng.modules.alisms.service.IAliSmsService IAliSmsService;
 
@@ -243,8 +247,34 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                             return false;
                         }
                     }
+
+                    //二建/二造继教班级过滤
+                    String businessName = iGoodsService.getGoodsBusinessName(item.getGoodsId());
+                    if (businessName.contains("继续教育二级建造师") || businessName.contains("继续教育二级造价师")){
+                        if (Validator.isNotEmpty(gradeVo.getClassStatus())&&gradeVo.getClassStatus() == 1 &&
+                                (gradeVo.getClassStartTime() > DateUtils.getNowTime() || gradeVo.getClassEndTime() < DateUtils.getNowTime())){
+                            //过期班级
+                            return false;
+                        }
+                        //班级人数
+                        Goods goods = iGoodsService.getById(item.getGoodsId());
+                        SysTenant tenant = iSysTenantService.getById(goods.getTenantId());
+                        if (tenant.getSevenClass() == 1){
+                            Integer numAll = getClassUserNumAll(gradeVo.getGradeId());
+                            if (gradeVo.getStudentUpper() <= numAll){
+                                //班级人数已满
+                                return false;
+                            }
+                        }else {
+                            Long num = baseMapper.getClassUserNumByTenant(gradeVo.getGradeId());
+                            if (gradeVo.getStudentUpper() <= num){
+                                //班级人数已满
+                                return false;
+                            }
+                        }
+                    }
                     return true;
-                }).collect(Collectors.toList());
+                }).sorted(Comparator.comparing(ClassGradeVo::getCreateTime).reversed()).collect(Collectors.toList());
                 item.setGradeList(collect);
             }
         });
@@ -328,8 +358,12 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                             }
                         });
                     }
+                if (StringUtils.isNotBlank(bo.getOfficialName()) && ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 1){
+                    add.setSevenCode(ServletUtils.getEncoded("SEV"));
+                }else {
                     String sevenCode = getSevenCode(goodsId,add.getStudentUpper());
                     add.setSevenCode(sevenCode);
+                }
             }
             else if (("继续教育二级建造师".equals(businessName)|| ("继续教育二级造价师".equals(businessName))) && sysTenant.getShareClass() == 1){
                 erJfalg = true;
@@ -906,6 +940,69 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return classGradeStudentVos;
     }
 
+    @Override
+    public List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo) {
+        //身份证去重
+        if (Validator.isNotEmpty(bo.getIdCard()) && Validator.isNotEmpty(bo.getIdCards())) {
+            String idCard = bo.getIdCard();
+            List<String> idCards = bo.getIdCards();
+            Set<String> set = new HashSet<>();
+            for (String id : idCards) {
+                set.add(id);
+            }
+            set.add(idCard);
+            if (Validator.isNotEmpty(set)) {
+                bo.setIdCards(new ArrayList<>(set));
+            }
+            bo.setIdCard(null);
+        }
+        //查找班级学员
+        List<ClassGradeStudentVo> classGradeStudentVos = baseMapper.listGradeAll(bo);
+        //得到每个学员的课程学习记录
+        for (ClassGradeStudentVo classGradeStudentVo : classGradeStudentVos) {
+            Long secLong = 0L;
+            Long studyLong = 0L;
+
+            SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
+            subjectStudyRecordQueryBo.setGoodsId(classGradeStudentVo.getGoodsId());
+            subjectStudyRecordQueryBo.setUserId(classGradeStudentVo.getUserId());
+            subjectStudyRecordQueryBo.setGradeId(bo.getGradeId());
+            subjectStudyRecordQueryBo.setOrderGoodsId(classGradeStudentVo.getOrderGoodsId());
+            List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listSubject(subjectStudyRecordQueryBo);
+            for (SubjectStudyRecordVo subjectStudyRecordVo : subjectStudyRecordVos) {
+                secLong = new BigDecimal(secLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getSectionNum().toString())).longValue();
+                studyLong = new BigDecimal(studyLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getRecordNum().toString())).longValue();
+
+            }
+
+            List<Long> timeList = classGradeUserMapper.selectStart(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(),classGradeStudentVo.getOrderGoodsId());
+            if (!org.springframework.util.CollectionUtils.isEmpty(timeList)) {
+                //查找开始学习时间
+                classGradeStudentVo.setStartTime(timeList.get(0));
+            }else{
+                classGradeStudentVo.setStartTime(classGradeUserMapper.selectStartNoPhoto(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(),classGradeStudentVo.getOrderGoodsId())
+                );
+            }
+            //BigDecimal divide = new BigDecimal(studyLong.toString()).divide(new BigDecimal(secLong.toString()),2,BigDecimal.ROUND_HALF_UP);
+            //classGradeStudentVo.setStudyNum(divide.multiply(new BigDecimal("100")).longValue());
+            classGradeStudentVo.setSecAllNum(secLong);
+            classGradeStudentVo.setStuAllNum(studyLong);
+            /*UserUpdateQueryBo userUpdateQueryBo = new UserUpdateQueryBo();
+            userUpdateQueryBo.setUserId(classGradeStudentVo.getUserId());
+            classGradeStudentVo.setUserUpdates(iUserUpdateService.queryList(userUpdateQueryBo));*/
+            /*if (Validator.isNotEmpty(classGradeStudentVo.getRebuyOrderGoodsId()) && classGradeStudentVo.getRebuyOrderGoodsId().longValue() > 0) {
+                classGradeStudentVo.setRebuy(orderMapper.getGradePeriod(classGradeStudentVo.getRebuyOrderGoodsId(), classGradeStudentVo.getUserId()));
+            }*/
+            if (ObjectUtils.isNotNull(classGradeStudentVo.getOrgId())){
+                SysTenant tenant = iSysTenantService.getById(classGradeStudentVo.getOrgId());
+                if (ObjectUtils.isNotNull(tenant)){
+                    classGradeStudentVo.setTenantName(tenant.getTenantName());
+                }
+            }
+        }
+        return classGradeStudentVos;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean editUserGrade(ClassGradeUserAddQueryBo bo) {

+ 99 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -32,6 +33,7 @@ import com.zhongzheng.modules.bank.bo.QuestionModuleChapterQueryBo;
 import com.zhongzheng.modules.bank.service.IQuestionChapterExamService;
 import com.zhongzheng.modules.bank.service.IQuestionModuleChapterService;
 import com.zhongzheng.modules.bank.vo.ExamVo;
+import com.zhongzheng.modules.bank.vo.ExternalQuestionVo;
 import com.zhongzheng.modules.bank.vo.QuestionChapterVo;
 import com.zhongzheng.modules.base.service.IUserProfileService;
 import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
@@ -203,6 +205,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Value("${oldSys.host}")
     private String OLD_SYS_HOST;
 
+    @Value("${oldSys.studyCheck}")
+    private String OLD_STUDY_CHECK;
+
     @Autowired
     private IUserPeriodService iUserPeriodService;
 
@@ -654,7 +659,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         if (Validator.isEmpty(userVo.getRealName()) || Validator.isEmpty(userVo.getIdCard()) || Validator.isEmpty(userVo.getTelPhone())) {
             return "用户信息缺失";
         }
-        userVo.setRealName(userVo.getRealName().replaceAll(" ", ""));
+        userVo.setRealName(ToolsUtils.removeAllTrim(userVo.getRealName()));
         if(fullName.contains("继续教育")&&fullName.contains("施工现场专业人员")){
             return pushSevenOfficialInfo(bo,userVo,orderGoods,goods);
         }
@@ -932,6 +937,41 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         }
     }
 
+    @Override
+    public boolean resetQdyCheckInfo(){
+        this.baseMapper.updateListUserNoTenant("培训周期时间未到");
+        return true;
+    }
+
+    @Override
+    public List<ClassPeriodStudentVo> listUserPeriodRecordNew(ClassGradeUserQueryBo bo) {
+        //查询班级学员信息
+        List<ClassPeriodStudentVo> classPeriodStudentVos = baseMapper.listUserPeriod(bo);
+        //查找学员学习记录
+        for (ClassPeriodStudentVo classPeriodStudentVo : classPeriodStudentVos) {
+            //总的审核状态按照策划规则
+            ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
+            classGradeUserQueryBo.setGradeId(classPeriodStudentVo.getGradeId());
+            classGradeUserQueryBo.setUserId(classPeriodStudentVo.getUserId());
+            classGradeUserQueryBo.setGoodsId(classPeriodStudentVo.getGoodsId());
+            classGradeUserQueryBo.setOrderGoodsId(classPeriodStudentVo.getOrderGoodsId());
+            //當前班級學員審核狀態 -1不可审核 0待審  1未通过 2通过
+            Integer gradePeriodStatus = 0; //班级里的审核状态字段,保持一致 0 未通过 1通过 2待审核 -1 不可审核
+            classPeriodStudentVo.setAllStatus(changePeriodStatus(classPeriodStudentVo.getPeriodStatus()));
+            List<Long> timeList = baseMapper.selectStart(classPeriodStudentVo.getUserId(), classPeriodStudentVo.getGoodsId(), classPeriodStudentVo.getGradeId(),classPeriodStudentVo.getOrderGoodsId());
+            if (!CollectionUtils.isEmpty(timeList)) {
+                //查找开始学习时间
+                classPeriodStudentVo.setStartTime(timeList.get(0));
+            }
+            //取学时所有拍照最新的一张
+            String recentPhoto = userStudyRecordPhotoMapper.selectGradeRecentOnePhoto(classPeriodStudentVo.getUserId(), classPeriodStudentVo.getGradeId(),classPeriodStudentVo.getOrderGoodsId());
+            if (Validator.isNotEmpty(recentPhoto)) {
+                classPeriodStudentVo.setIdCardImg1(recentPhoto);
+            }
+        }
+        return classPeriodStudentVos;
+    }
+
     @Override
     public ClassPeriodStudentVo DecryptOfficialInfo(ClassGradeDecryptQueryBo bo) {
         String pars;
@@ -1025,6 +1065,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         }
         SysUser sysUser = iSysUserService.getOne(new LambdaQueryWrapper<SysUser>()
                 .eq(SysUser::getUserName, userName).last("limit 1"));
+        if(Validator.isEmpty(sysUser)){
+            throw new CustomException("未创建监管账号");
+        }
         LoginUser loginUser = new LoginUser();
         loginUser.setUser(sysUser);
 
@@ -1131,9 +1174,11 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         String userName = "施工继教";
         SysUser sysUser = iSysUserService.getOne(new LambdaQueryWrapper<SysUser>()
                 .eq(SysUser::getUserName, userName).last("limit 1"));
+        if(Validator.isEmpty(sysUser)){
+            throw new CustomException("未创建监管账号");
+        }
         LoginUser loginUser = new LoginUser();
         loginUser.setUser(sysUser);
-
         studentVo.setToken(iUserService.createToken(loginUser));
         return studentVo;
     }
@@ -1170,6 +1215,27 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         return errorMsg;
     }
 
+    @Override
+    public String pushForceOfficialInfoMore(List<ClassGradeUserQueryBo> list) {
+        int index = 1;
+        String errorMsg = "";
+        for (ClassGradeUserQueryBo bo : list) {
+            if(Validator.isEmpty(bo.getUserId())||Validator.isEmpty(bo.getOrderGoodsId())){
+                throw new CustomException("参数缺失");
+            }
+            LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+            objectLambdaUpdateWrapper.eq(ClassGradeUser::getUserId, bo.getUserId());
+            objectLambdaUpdateWrapper.eq(ClassGradeUser::getOrderGoodsId, bo.getOrderGoodsId());
+            objectLambdaUpdateWrapper.eq(ClassGradeUser::getGradeId, bo.getGradeId());
+            objectLambdaUpdateWrapper.ge(ClassGradeUser::getSevenPushCheck, 1);
+
+            objectLambdaUpdateWrapper.set(ClassGradeUser::getSevenPushCheck, 2);
+            objectLambdaUpdateWrapper.set(ClassGradeUser::getUpdateTime, DateUtils.getNowTime());
+            this.update(null, objectLambdaUpdateWrapper);
+        }
+        return errorMsg;
+    }
+
     /**
      * 学时推送
      *
@@ -1195,7 +1261,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
             return "用户不存在";
         }
         if(Validator.isNotEmpty(userVo.getRealName())){
-            userVo.setRealName(userVo.getRealName().replaceAll(" ", ""));
+            userVo.setRealName(ToolsUtils.removeAllTrim(userVo.getRealName()));
         }
         if (Validator.isEmpty(userVo.getInterfacePushId())) {
             return "没开通信息推送";
@@ -1696,7 +1762,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                     item.setScore(cVo.getScore());
                     newList.add(item);
                 }
-                ossService.zipPeopleDownload(vo, outStream);
+        //        ossService.zipPeopleDownload(vo, outStream);
             }
             outStream.close();
         } catch (IOException e) {
@@ -3110,7 +3176,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                                     classPeriodSectionVo.setStudyEndTime(userPeriodStatusVo.getRecordEndTime());
                                     classPeriodSectionVo.setStudyStartTime(userPeriodStatusVo.getRecordStartTime());
                                     if (Validator.isNotEmpty(photoList) && photoList.size() > 0) {
-                                        if(fullName.contains("继续教育")&&fullName.contains("施工现场专业人员")){
+                                        if((fullName.contains("继续教育")&&fullName.contains("施工现场专业人员"))||fullName.equals("继续教育一级建造师")){
                                             classPeriodSectionVo.setStudyStartTime(userPeriodStatusVo.getRecordStartTime());
                                         }else{
                                             classPeriodSectionVo.setStudyStartTime(photoList.get(0).getCreateTime());
@@ -3273,7 +3339,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                         classPeriodSectionVo.setStudyEndTime(userPeriodStatusVo.getRecordEndTime());
                         classPeriodSectionVo.setStudyStartTime(userPeriodStatusVo.getRecordStartTime());
                         if (Validator.isNotEmpty(photoList) && photoList.size() > 0) {
-                            if(fullName.contains("继续教育")&&fullName.contains("施工现场专业人员")){
+                            if((fullName.contains("继续教育")&&fullName.contains("施工现场专业人员"))||fullName.equals("继续教育一级建造师")){
                                 classPeriodSectionVo.setStudyStartTime(userPeriodStatusVo.getRecordStartTime());
                             }else{
                                 classPeriodSectionVo.setStudyStartTime(photoList.get(0).getCreateTime());
@@ -3395,7 +3461,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                     classPeriodVo.setStudyEndTime(userPeriodStatusVo.getRecordEndTime());
                     classPeriodVo.setStudyStartTime(userPeriodStatusVo.getRecordStartTime());
                     if (photoList.size() > 0) {
-                        if(fullName.contains("继续教育")&&fullName.contains("施工现场专业人员")){
+                        if((fullName.contains("继续教育")&&fullName.contains("施工现场专业人员"))||fullName.equals("继续教育一级建造师")){
                             classPeriodVo.setStudyStartTime(userPeriodStatusVo.getRecordStartTime());
                         }else{
                             classPeriodVo.setStudyStartTime(photoList.get(0).getCreateTime());
@@ -3685,7 +3751,32 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
 
     @Override
     public Long checkFinishRequiredCourse(ClassGradeUserQueryBo bo) {
-        return baseMapper.checkFinishRequiredCourse(bo);
+        //查询旧系统是否有学习
+        String businessName = iGoodsService.getGoodsBusinessName(bo.getGoodsId());
+        if (businessName.contains("继续教育二级建造师") || businessName.contains("继续教育二级造价师")){
+            User user = iUserService.getById(bo.getUserId());
+            Integer type = "继续教育二级建造师".equals(businessName)?1:2;
+            String param = String.format("idnum=%s&type=%s",EncryptHandler.decrypt(user.getIdCard()),type);
+            String respone = "";
+            try {
+                respone = HttpUtils.sendGet(OLD_STUDY_CHECK, param);
+                JSONObject jsonObject1 = JSONObject.parseObject(respone);
+                UserStudyTimeVo timeVo = JSONArray.parseObject(jsonObject1.get("data").toString(), UserStudyTimeVo.class);
+                if (ObjectUtils.isNotNull(timeVo) && ObjectUtils.isNotNull(timeVo.getStudyStartTime()) && timeVo.getStudyFlag()){
+                    //旧系统正在学习中
+                    throw new CustomException("请把旧云学堂课程学习完成,再学习另一个课程");
+                }
+            } catch (Exception e) {
+                throw new CustomException(e.getMessage());
+            }
+        }
+        Long aLong = baseMapper.checkFinishRequiredCourse(bo);
+        if (aLong > 0){
+            List<Long> goodsIds = baseMapper.getFinishRequiredCourse(bo);
+            Goods goods = iGoodsService.getById(goodsIds.get(0));
+            throw new CustomException("请按顺序学习,把【"+goods.getGoodsName()+"】学习完成,再学习另一个课程");
+        }
+        return 0L;
     }
 
     @Override

+ 12 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -880,7 +880,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                 CourseMenuQueryBo menuQueryBo = new CourseMenuQueryBo();
                 menuQueryBo.setCourseId(courseVo.getCourseId());
                 List<CourseMenuVo> courseMenuVoList = iCourseMenuService.selectList(menuQueryBo);
-                courseMenuVoList.forEach(courseMenuVo -> {
+                for(CourseMenuVo courseMenuVo:courseMenuVoList){
                     if(courseMenuVo.getType()==1){
                         SyncUserChapterList syncUserChapterItem = new SyncUserChapterList();
                         syncUserChapterItem.setChapterId(courseMenuVo.getMenuId());
@@ -888,7 +888,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                         List<SyncUserChapterList> ChildChapList = new ArrayList<>();
                         //获取章信息
                         List<CourseModuleChapterVo> courseModuleChapterVoList = iCourseModuleChapterService.getListById(courseMenuVo.getMenuId());
-                        courseModuleChapterVoList.forEach(courseModuleChapterVo -> {
+                        for(CourseModuleChapterVo courseModuleChapterVo:courseModuleChapterVoList){
                             SyncUserChapterList syncUserChapterChildItem = new SyncUserChapterList();
                             syncUserChapterChildItem.setChapterId(courseModuleChapterVo.getChapterId());
                             syncUserChapterChildItem.setChapterName(courseModuleChapterVo.getName());
@@ -943,6 +943,12 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                                     List<UserStudyRecordPhoto> videoPhoto2 = userStudyRecordPhotoService.list(lqw);
                                     syncUserStudyRec.setCreateTime(DateUtils.timestampToDateFormat(userPeriodStatusVo.getRecordStartTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
                                     syncUserStudyRec.setEndTime(DateUtils.timestampToDateFormat(userPeriodStatusVo.getRecordEndTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+                                    if(Validator.isEmpty(studyEndTime)||(studyEndTime.longValue()<userPeriodStatusVo.getRecordEndTime().longValue())){
+                                        studyEndTime = userPeriodStatusVo.getRecordEndTime();
+                                    }
+                                    if(Validator.isEmpty(studyStartTime)||(studyStartTime.longValue()>userPeriodStatusVo.getRecordStartTime().longValue())){
+                                        studyStartTime = userPeriodStatusVo.getRecordStartTime();
+                                    }
                                     syncUserStudyRec.setStudyIP(userPeriodStatusVo.getIp());
                                     List<SyncUserImageRc> ImgList = new ArrayList<>();
                                     for (UserStudyRecordPhoto videoPhoto : videoPhoto2) {
@@ -958,12 +964,14 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                             }
                             syncUserChapterChildItem.setRecList(RecList);
                             ChildChapList.add(syncUserChapterChildItem);
-                        });
+                        }
                         syncUserChapterItem.setChildChapList(ChildChapList);
                         ChapterList.add(syncUserChapterItem);
                     }
-                });
+                }
             }
+            studyRec.setBeginTime(DateUtils.timestampToDateFormat(studyStartTime));
+            studyRec.setEndTime(DateUtils.timestampToDateFormat(studyEndTime));
             studyRec.setChapterList(ChapterList);
         }
         //学习记录推送到旧系统

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentVo.java

@@ -242,6 +242,20 @@ public class ClassGradeStudentVo {
 	@ApiModelProperty("所属机构")
 	private String tenantName;
 
+	@Excel(name = "工作单位")
+	private String companyName;
 
+	@ApiModelProperty("班级名称")
+	private String gradeName;
+
+	/** 学习有效期开始 */
+	@ApiModelProperty("学习开始")
+	private Long startTime;
+	/** 学习有效期结束 */
+	@ApiModelProperty("学习结束")
+	private Long endTime;
+
+	@ApiModelProperty("审核状态  1通过 3不通过 2待审")
+	private Integer profileStatus;
 
 }

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeVo.java

@@ -24,6 +24,8 @@ import java.util.List;
 public class ClassGradeVo {
 	private static final long serialVersionUID = 1L;
 
+	private Long id;
+
 	/** $pkColumn.columnComment */
 	@ApiModelProperty("$pkColumn.columnComment")
 	private Long gradeId;
@@ -206,4 +208,16 @@ public class ClassGradeVo {
 
 	@ApiModelProperty("七大员继教班级年份")
 	private String sevenYears;
+
+	@ApiModelProperty("添加时间")
+	private Long createTime;
+
+	@ApiModelProperty("修改时间")
+	private Long updateTime;
+
+	@ApiModelProperty("官方信息推送结果")
+	private String officialStatusMsg;
+
+	@ApiModelProperty("七大员信息推送权限失败原因")
+	private String sevenPushReason;
 }

+ 12 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyOrderInvoiceBo.java

@@ -46,4 +46,16 @@ public class CompanyOrderInvoiceBo implements Serializable {
     @ApiModelProperty("关键字")
     private String keyword;
 
+    /** 系统订单操作人 */
+    @ApiModelProperty("系统订单操作人")
+    private String createUsername;
+
+    @ApiModelProperty("经办身份证")
+    private String idCard;
+    /** 经办手机号 */
+    @ApiModelProperty("经办手机号")
+    private String telphone;
+    /** 经办订单 */
+    @ApiModelProperty("经办订单")
+    private String handleOrderSn;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderBusinessConfigAddBo.java

@@ -36,4 +36,7 @@ public class OrderBusinessConfigAddBo {
     /** 班级类型 1基础班 2强化班 3私塾班 */
     @ApiModelProperty("班级类型 1基础班 2强化班 3私塾班")
     private Integer gradeType;
+    /** 上传主图 */
+    @ApiModelProperty("上传主图")
+    private String mainImg;
 }

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderBusinessConfigEditBo.java

@@ -39,6 +39,8 @@ public class OrderBusinessConfigEditBo {
     /** 班级类型 1基础班 2强化班 3私塾班 */
     @ApiModelProperty("班级类型 1基础班 2强化班 3私塾班")
     private Integer gradeType;
-
+    /** 上传主图 */
+    @ApiModelProperty("上传主图")
+    private String mainImg;
 
 }

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderBusinessConfigQueryBo.java

@@ -35,7 +35,9 @@ public class OrderBusinessConfigQueryBo extends BaseEntity {
 	/** 排序的方向desc或者asc */
 	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
 	private String isAsc;
-
+	/** 上传主图 */
+	@ApiModelProperty("上传主图")
+	private String mainImg;
 
 	/** 业务层次id */
 	@ApiModelProperty("业务层次ID")

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.