Procházet zdrojové kódy

Merge branch 'dev' into pre

yangdamao před 2 roky
rodič
revize
cc7bd52f5e
100 změnil soubory, kde provedl 2194 přidání a 101 odebrání
  1. 0 17
      run-prod.sh
  2. 22 5
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopCostInstTpController.java
  3. 51 8
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopDivideLogController.java
  4. 7 1
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopOrderRecNoteController.java
  5. 13 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderCheckLogController.java
  6. 6 3
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java
  7. 7 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java
  8. 129 5
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/settle/TopInstSettleController.java
  9. 99 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopCostCategoryController.java
  10. 8 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopInstCategoryController.java
  11. 28 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopInstitutionController.java
  12. 2 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  13. 2 0
      zhongzheng-admin-saas/src/main/resources/application-pre.yml
  14. 2 0
      zhongzheng-admin-saas/src/main/resources/application-prod.yml
  15. 2 2
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionController.java
  16. 68 4
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  17. 8 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java
  18. 14 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/exam/ExamApplyController.java
  19. 20 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  20. 29 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java
  21. 2 1
      zhongzheng-admin/src/main/resources/application-dev.yml
  22. 2 0
      zhongzheng-admin/src/main/resources/application-pre.yml
  23. 2 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  24. 1 1
      zhongzheng-admin/src/main/resources/templates/wordPhone.ftl
  25. 12 2
      zhongzheng-api/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java
  26. 40 5
      zhongzheng-api/src/main/java/com/zhongzheng/controller/course/CourseController.java
  27. 2 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  28. 64 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsQuestionRelExamController.java
  29. 1 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  30. 14 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/inform/InformUserController.java
  31. 16 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderController.java
  32. 13 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java
  33. 13 2
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserStudyRecordController.java
  34. 24 5
      zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxLoginController.java
  35. 3 0
      zhongzheng-api/src/main/resources/application-dev.yml
  36. 2 0
      zhongzheng-api/src/main/resources/application-pre.yml
  37. 2 0
      zhongzheng-api/src/main/resources/application-prod.yml
  38. 1 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/SysDictData.java
  39. 22 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java
  40. 30 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  41. 122 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/file/FileUtils.java
  42. 60 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/poi/ExcelUtil.java
  43. 4 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  44. 1 1
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysTenantServiceImpl.java
  45. 5 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  46. 126 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  47. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/bo/OssRequest.java
  48. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/OssService.java
  49. 49 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java
  50. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java
  51. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamAddBo.java
  52. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamEditBo.java
  53. 6 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionAddBo.java
  54. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionEditBo.java
  55. 45 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionOtherAddBo.java
  56. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionOtherEditBo.java
  57. 54 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionOtherQueryBo.java
  58. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/Exam.java
  59. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/Question.java
  60. 41 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionOld.java
  61. 36 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionOldChild.java
  62. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionOldOptions.java
  63. 47 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionOther.java
  64. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/QuestionMapper.java
  65. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/QuestionOtherMapper.java
  66. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IExamService.java
  67. 55 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionOtherService.java
  68. 6 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionService.java
  69. 43 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamServiceImpl.java
  70. 297 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionOtherServiceImpl.java
  71. 48 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  72. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/ExamVo.java
  73. 51 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionOtherVo.java
  74. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionVo.java
  75. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/UserProfileQueryBo.java
  76. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/IProfileTpService.java
  77. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  78. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ProfileTpServiceImpl.java
  79. 0 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  80. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ShoppingCartVo.java
  81. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/UserProfileVo.java
  82. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/mapper/CollectQuestionMapper.java
  83. 7 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/service/impl/CollectQuestionServiceImpl.java
  84. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseChapterAddBo.java
  85. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseChapterEditBo.java
  86. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CoursePhotoLogAddBo.java
  87. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CoursePhotoLogQueryBo.java
  88. 24 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseQueryBo.java
  89. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseChapter.java
  90. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CoursePhotoLog.java
  91. 6 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseChapterSectionMapper.java
  92. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseFileMapper.java
  93. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseHandoutsBusinessMapper.java
  94. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseHandoutsMapper.java
  95. 12 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java
  96. 7 7
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMenuMapper.java
  97. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseModuleChapterMapper.java
  98. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseHandoutsService.java
  99. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseService.java
  100. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseBusinessServiceImpl.java

+ 0 - 17
run-prod.sh

@@ -1,12 +1,4 @@
 #!/usr/bin/env bash
-
-
-echo "开始等待20秒..."
-# 1-10秒内随机
-sleep 5
-echo "等待后继续"
-
-#!/usr/bin/env bash
 # 定义应用组名
 group_admin_name='zhongzheng'
 # 定义应用名称
@@ -40,12 +32,3 @@ 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 "等待后继续"
-
-
-
-

+ 22 - 5
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopCostInstTpController.java

@@ -3,12 +3,11 @@ package com.zhongzheng.controller.financial;
 import java.util.List;
 import java.util.Arrays;
 
-import com.zhongzheng.modules.top.financial.bo.TopCostInstTpAddBo;
-import com.zhongzheng.modules.top.financial.bo.TopCostInstTpEditBo;
-import com.zhongzheng.modules.top.financial.bo.TopCostInstTpQueryBo;
-import com.zhongzheng.modules.top.financial.bo.TopCostTpQueryBo;
+import com.zhongzheng.modules.top.financial.bo.*;
+import com.zhongzheng.modules.top.financial.service.ITopCostInstTpItemService;
 import com.zhongzheng.modules.top.financial.service.ITopCostInstTpService;
 import com.zhongzheng.modules.top.financial.vo.TopCostInstTpVo;
+import com.zhongzheng.modules.top.goods.vo.TopCourseEducationTypeVo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,6 +42,8 @@ public class TopCostInstTpController extends BaseController {
 
     private final ITopCostInstTpService iTopCostInstTpService;
 
+    private final ITopCostInstTpItemService iTopCostInstTpItemService;
+
     /**
      * 查询供应商成本模板列表
      */
@@ -51,10 +52,18 @@ public class TopCostInstTpController extends BaseController {
     @GetMapping("/list")
     public TableDataInfo<TopCostInstTpVo> list(TopCostInstTpQueryBo bo) {
         startPage();
-        List<TopCostInstTpVo> list = iTopCostInstTpService.queryList(bo);
+        List<TopCostInstTpVo> list = iTopCostInstTpService.selectList(bo);
         return getDataTable(list);
     }
 
+    @ApiOperation("查询供应商成本模板所有业务层次列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/businessList")
+    public AjaxResult<List<TopCourseEducationTypeVo>> businessList(TopCostInstTpItemQueryBo bo) {
+        List<TopCourseEducationTypeVo> list = iTopCostInstTpItemService.queryEduList(bo);
+        return AjaxResult.success(list);
+    }
+
 
     /**
      * 获取供应商成本模板详细信息
@@ -95,4 +104,12 @@ public class TopCostInstTpController extends BaseController {
     public AjaxResult<Void> deleteBatch(@RequestBody TopCostInstTpQueryBo bo) {
         return toAjax(iTopCostInstTpService.deleteBatch(bo) ? 1 : 0);
     }
+
+    @ApiOperation("修改供应商成本模板默认状态")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "修改供应商成本模板默认状态", businessType = BusinessType.UPDATE)
+    @PostMapping("/editDefaultStatus")
+    public AjaxResult<Void> editDefaultStatus(@RequestBody TopCostInstTpEditBo bo) {
+        return toAjax(iTopCostInstTpService.updateDefaultStatus(bo) ? 1 : 0);
+    }
 }

+ 51 - 8
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopDivideLogController.java

@@ -2,6 +2,7 @@ package com.zhongzheng.controller.financial;
 
 import java.util.List;
 import java.util.Arrays;
+import java.util.Map;
 
 import com.zhongzheng.common.constant.UserConstants;
 import com.zhongzheng.common.utils.SecurityUtils;
@@ -57,8 +58,8 @@ public class TopDivideLogController extends BaseController {
      */
     @ApiOperation("查询机构分成记录列表")
     @PreAuthorize("@ss.hasPermi('system:log:list')")
-    @GetMapping("/companyList")
-    public TableDataInfo<TopDivideLogVo> getCompanyList(TopDivideLogQueryBo bo) {
+    @PostMapping("/companyList")
+    public TableDataInfo<TopDivideLogVo> getCompanyList(@RequestBody TopDivideLogQueryBo bo) {
         startPage();
         List<TopDivideLogVo> list = iTopDivideLogService.getCompanyList(bo);
         return getDataTable(list);
@@ -77,8 +78,8 @@ public class TopDivideLogController extends BaseController {
 
     @ApiOperation("查询业务员提成列表")
     @PreAuthorize("@ss.hasPermi('system:log:list')")
-    @GetMapping("/sellerList")
-    public TableDataInfo<TopDivideLogVo> getSellerList(TopDivideLogQueryBo bo) {
+    @PostMapping("/sellerList")
+    public TableDataInfo<TopDivideLogVo> getSellerList(@RequestBody TopDivideLogQueryBo bo) {
         startPage();
         List<TopDivideLogVo> list = iTopDivideLogService.getSellerList(bo);
         return getDataTable(list);
@@ -86,13 +87,29 @@ public class TopDivideLogController extends BaseController {
 
     @ApiOperation("查询佣金列表")
     @PreAuthorize("@ss.hasPermi('system:log:list')")
-    @GetMapping("/commissionList")
-    public TableDataInfo<TopDivideLogVo> getCommissionList(TopDivideLogQueryBo bo) {
+    @PostMapping("/commissionList")
+    public TableDataInfo<TopDivideOrderVo> getCommissionList(@RequestBody TopDivideOrderQueryBo bo) {
         startPage();
-        List<TopDivideLogVo> list = iTopDivideLogService.getCommissionList(bo);
+        List<TopDivideOrderVo> list = iTopDivideLogService.getCommissionList(bo);
         return getDataTable(list);
     }
 
+    @ApiOperation("查询佣金打印")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @PostMapping("/commissionPrint")
+    public AjaxResult<TopDivideOrderVo> getCommissionPrint(@RequestBody TopDivideOrderQueryBo bo) {
+        TopDivideOrderVo vo = iTopDivideLogService.getCommissionDetail(bo);
+        return AjaxResult.success(vo);
+    }
+
+    @ApiOperation("查询佣金结算列表统计")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/commissionOrderCount")
+    public AjaxResult<Map<String,Object>> commissionOrderCount(TopDivideOrderQueryBo bo) {
+        Map<String,Object> map = iTopDivideLogService.getCommissionOrderCount(bo);
+        return AjaxResult.success(map);
+    }
+
     @ApiOperation("通过坏账配置详情")
     @GetMapping(value = "/configKey/badBill")
     public AjaxResult getBadBill()
@@ -110,11 +127,30 @@ public class TopDivideLogController extends BaseController {
     @ApiOperation("查询月份订单列表")
     @PreAuthorize("@ss.hasPermi('system:log:list')")
     @GetMapping("/monthOrderList")
-    public AjaxResult<List<TopDivideOrderVo>> getMonthOrderList(TopDivideOrderQueryBo bo) {
+    public TableDataInfo<TopDivideOrderVo> getMonthOrderList(TopDivideOrderQueryBo bo) {
+        startPage();
         List<TopDivideOrderVo> list = iTopDivideOrderService.getMonthOrderList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("查询月份订单统计")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/monthOrderCount")
+    public AjaxResult<Map<String,Object>> getMonthOrderCount(TopDivideOrderQueryBo bo) {
+        Map<String,Object> map = iTopDivideOrderService.getMonthOrderCount(bo);
+        return AjaxResult.success(map);
+    }
+
+    @ApiOperation("查询打印月份订单列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/monthOrderListWithPrint")
+    public AjaxResult<List<TopDivideOrderVo>> getMonthOrderListWithPrint(TopDivideOrderQueryBo bo) {
+        List<TopDivideOrderVo> list = iTopDivideOrderService.getMonthOrderListWithPrint(bo);
         return AjaxResult.success(list);
     }
 
+
+
     /**
      * 获取分成记录详细信息
      */
@@ -124,4 +160,11 @@ public class TopDivideLogController extends BaseController {
     public AjaxResult<TopDivideLogVo> getInfo(@PathVariable("id" ) Long id) {
         return AjaxResult.success(iTopDivideLogService.queryById(id));
     }
+
+    @ApiOperation("获取分成记录单据打印详细信息")
+    @PreAuthorize("@ss.hasPermi('system:log:query')")
+    @GetMapping("/withPrint/{id}")
+    public AjaxResult<TopDivideLogVo> getInfoWithPrint(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iTopDivideLogService.queryByIdWithPrint(id));
+    }
 }

+ 7 - 1
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopOrderRecNoteController.java

@@ -76,5 +76,11 @@ public class TopOrderRecNoteController extends BaseController {
         return toAjax(iTopOrderRecNoteService.updateByEditBo(bo) ? 1 : 0);
     }
 
-
+    @ApiOperation("批量修改订单收款提醒")
+    @PreAuthorize("@ss.hasPermi('system:note:edit')")
+    @Log(title = "批量修改订单收款提醒", businessType = BusinessType.UPDATE)
+    @PostMapping("/editBatch")
+    public AjaxResult<Void> editBatch(@RequestBody List<TopOrderRecNoteEditBo> bo) {
+        return toAjax(iTopOrderRecNoteService.updateByBatchEditBo(bo) ? 1 : 0);
+    }
 }

+ 13 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderCheckLogController.java

@@ -109,4 +109,17 @@ public class TopOldOrderCheckLogController extends BaseController {
         }
         return toAjax(iTopOldOrderCheckLogService.updateBatchDivideByEditBo(bo) ? 1 : 0);
     }
+
+    @ApiOperation("批量修改月份分成审核记录")
+    @PreAuthorize("@ss.hasPermi('system:log:edit')")
+    @Log(title = "批量修改月份分成审核记录", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateBatchDivideByMonthEditBo")
+    public AjaxResult<Void> updateBatchDivideByMonthEditBo(@RequestBody List<TopOldOrderCheckLogEditBo> bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        for(TopOldOrderCheckLogEditBo editBo : bo){
+            editBo.setLoginId(loginUser.getUser().getUserId());
+            editBo.setLoginName(loginUser.getUser().getUserName());
+        }
+        return toAjax(iTopOldOrderCheckLogService.updateBatchDivideByMonthEditBo(bo) ? 1 : 0);
+    }
 }

+ 6 - 3
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java

@@ -9,6 +9,7 @@ import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.web.service.TopTokenService;
 import com.zhongzheng.modules.top.financial.bo.OrderRefundPayBo;
 import com.zhongzheng.modules.top.financial.bo.TopDivideLogQueryBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo;
 import com.zhongzheng.modules.top.financial.vo.OrderRefundPayDetailVo;
 import com.zhongzheng.modules.top.financial.vo.TopCostTpVo;
 import com.zhongzheng.modules.top.financial.vo.TopOrderLogVo;
@@ -166,12 +167,14 @@ public class TopOldOrderController extends BaseController {
     @ApiOperation("佣金结算列表导出")
     @PreAuthorize("@ss.hasPermi('system:tp:list')")
     @GetMapping("/commissionListExport")
-    public AjaxResult<List<TopOldOrderSellerExportVo>> commissionListExport(TopDivideLogQueryBo bo) {
+    public AjaxResult<List<TopOldOrderSellerExportVo>> commissionListExport(TopDivideOrderQueryBo bo) {
         List<TopOldOrderCommissionExportVo> list = iTopOldOrderService.commissionListExport(bo);
         ExcelUtil<TopOldOrderCommissionExportVo> util = new ExcelUtil<TopOldOrderCommissionExportVo>(TopOldOrderCommissionExportVo.class);
         return util.exportExcel(list, "佣金结算列表");
     }
 
+
+
     @ApiOperation("机构分成列表")
     @PreAuthorize("@ss.hasPermi('system:tp:list')")
     @GetMapping("/queryTenantList")
@@ -252,8 +255,8 @@ public class TopOldOrderController extends BaseController {
     }
 
     @ApiOperation("订单应收应付统计")
-    @GetMapping("/countOrderNum")
-    public AjaxResult<Map<String, Object>> countOrderNum(TopOldOrderQueryBo bo) {
+    @PostMapping("/countOrderNum")
+    public AjaxResult<Map<String, Object>> countOrderNum(@RequestBody TopOldOrderQueryBo bo) {
         return AjaxResult.success(iTopOldOrderService.countOrderNum(bo));
     }
 

+ 7 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java

@@ -84,4 +84,11 @@ public class ScheduleController extends BaseController {
         iScheduleService.makeDivideSellerMonthBill();
         return AjaxResult.success();
     }
+
+    @ApiOperation("更新机构分成,业务提成应付时间")
+    @GetMapping("/updateCompanyPredictPayTime")
+    public AjaxResult updateCompanyPredictPayTime(){
+        iScheduleService.updatePredictPayTime();
+        return AjaxResult.success();
+    }
 }

+ 129 - 5
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/settle/TopInstSettleController.java

@@ -11,13 +11,9 @@ import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.web.service.TopTokenService;
-import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
 import com.zhongzheng.modules.top.settle.bo.*;
 import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
-import com.zhongzheng.modules.top.settle.vo.SettleOrderImportVo;
-import com.zhongzheng.modules.top.settle.vo.SettleVo;
-import com.zhongzheng.modules.top.settle.vo.TopOrderInfoVo;
-import com.zhongzheng.modules.user.bo.UserImportAddBo;
+import com.zhongzheng.modules.top.settle.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -115,8 +111,136 @@ public class TopInstSettleController extends BaseController {
     @ApiOperation("结算订单列表")
     @GetMapping("/list")
     public TableDataInfo<SettleVo> list(SettleQueryBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
         startPage();
         List<SettleVo> list = ITopInstSettleService.getSettleList(bo);
         return getDataTable(list);
     }
+
+    /**
+     * 获取时间结算单详情信息
+     */
+    @ApiOperation("获取时间结算单详情信息")
+    @GetMapping("/time/detail/{settleId}")
+    public AjaxResult<TimeSettleDetailVo> getTimeSettleDetail(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getTimeSettleDetail(settleId));
+    }
+
+    /**
+     * 获取数量结算单详情信息
+     */
+    @ApiOperation("获取数量结算单详情信息")
+    @GetMapping("/num/detail/{settleId}")
+    public AjaxResult<NumSettleDetailVo> getNumSettleDetail(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getNumSettleDetail(settleId));
+    }
+
+    /**
+     * 时间结算单修改
+     */
+    @ApiOperation("时间结算单修改")
+    @PostMapping("/time/update")
+    public AjaxResult<Void> updateTimeSettle(@RequestBody TimeSettleBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.updateTimeSettle(bo) ? 1 : 0);
+    }
+
+    /**
+     * 数量结算单修改
+     */
+    @ApiOperation("数量结算单修改")
+    @PostMapping("/num/update")
+    public AjaxResult<Void> updateNumSettle(@RequestBody NumSettleBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.updateNumSettle(bo) ? 1 : 0);
+    }
+
+    /**
+     * 结算单批量提交审核
+     */
+    @ApiOperation("结算单批量提交审核")
+    @PostMapping("/batch/submit/check")
+    public AjaxResult<Void> batchSubmitCheck(@RequestBody List<Long> settleIds) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        return toAjax(ITopInstSettleService.batchSubmitCheck(settleIds,loginUser.getUser().getUserId(),loginUser.getUser().getUserName()) ? 1 : 0);
+    }
+
+    /**
+     * 结算单批量删除
+     */
+    @ApiOperation("结算单批量删除")
+    @PostMapping("/batch/delete")
+    public AjaxResult<Void> batchDeleteSettle(@RequestBody List<Long> settleIds) {
+        return toAjax(ITopInstSettleService.batchDeleteSettle(settleIds) ? 1 : 0);
+    }
+
+    /**
+     * 结算单审核
+     */
+    @ApiOperation("结算单审核")
+    @PostMapping("/check")
+    public AjaxResult<Void> checkSettle(@RequestBody CheckSettleBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.checkSettle(bo) ? 1 : 0);
+    }
+
+    /**
+     * 结算单总金额
+     */
+    @ApiOperation("结算单总金额")
+    @PostMapping("/total/money")
+    public AjaxResult<BigDecimal> getSettleTotalMoney(SettleQueryBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return AjaxResult.success(ITopInstSettleService.getSettleTotalMoney(bo));
+    }
+
+    /**
+     * 结算单支付信息
+     */
+    @ApiOperation("结算单支付信息")
+    @GetMapping("/pay/info/{settleId}")
+    public AjaxResult<SettleVo> getSettlePayInfo(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettlePayInfo(settleId));
+    }
+
+    /**
+     * 结算单支付
+     */
+    @ApiOperation("结算单支付")
+    @PostMapping("/pay")
+    public AjaxResult<Void> settlePay(@RequestBody SettlePayBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.settlePay(bo) ? 1 : 0);
+    }
+
+    /**
+     * 结算单据打印信息
+     */
+    @ApiOperation("结算单据打印信息")
+    @GetMapping("/receipts/{settleId}")
+    public AjaxResult<SettleReceiptsVo> getSettleReceipts(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettleReceipts(settleId));
+    }
+
+    /**
+     * 结算单据打印明细信息
+     */
+    @ApiOperation("结算单据打印明细信息")
+    @GetMapping("/receipts/detail/{settleId}")
+    public AjaxResult<List<NumSettleOrderVo>> getSettleReceiptsDetail(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettleReceiptsDetail(settleId));
+    }
+
 }

+ 99 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopCostCategoryController.java

@@ -0,0 +1,99 @@
+package com.zhongzheng.controller.top;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.top.system.bo.TopCostCategoryAddBo;
+import com.zhongzheng.modules.top.system.bo.TopCostCategoryEditBo;
+import com.zhongzheng.modules.top.system.bo.TopCostCategoryQueryBo;
+import com.zhongzheng.modules.top.system.service.ITopCostCategoryService;
+import com.zhongzheng.modules.top.system.vo.TopCostCategoryVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+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.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 机构成本类别Controller
+ *
+ * @author ruoyi
+ * @date 2023-07-27
+ */
+@Api(value = "机构成本类别控制器", tags = {"机构成本类别管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/top/category")
+public class TopCostCategoryController extends BaseController {
+
+    private final ITopCostCategoryService iTopCostCategoryService;
+
+    /**
+     * 查询机构成本类别列表
+     */
+    @ApiOperation("查询机构成本类别列表")
+    @PreAuthorize("@ss.hasPermi('system:category:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopCostCategoryVo> list(TopCostCategoryQueryBo bo) {
+        startPage();
+        List<TopCostCategoryVo> list = iTopCostCategoryService.queryList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取机构成本类别详细信息
+     */
+    @ApiOperation("获取机构成本类别详细信息")
+    @PreAuthorize("@ss.hasPermi('system:category:query')")
+    @GetMapping("/{categoryId}")
+    public AjaxResult<TopCostCategoryVo> getInfo(@PathVariable("categoryId" ) Long categoryId) {
+        return AjaxResult.success(iTopCostCategoryService.queryById(categoryId));
+    }
+
+    /**
+     * 新增机构成本类别
+     */
+    @ApiOperation("新增机构成本类别")
+    @PreAuthorize("@ss.hasPermi('system:category:add')")
+    @Log(title = "机构成本类别", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopCostCategoryAddBo bo) {
+        return toAjax(iTopCostCategoryService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改机构成本类别
+     */
+    @ApiOperation("修改机构成本类别")
+    @PreAuthorize("@ss.hasPermi('system:category:edit')")
+    @Log(title = "机构成本类别", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopCostCategoryEditBo bo) {
+        return toAjax(iTopCostCategoryService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("机构成本类别批量删除")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "机构成本类别批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/deleteBatch")
+    public AjaxResult<Void> deleteBatch(@RequestBody TopCostCategoryEditBo bo) {
+        return toAjax(iTopCostCategoryService.deleteBatch(bo) ? 1 : 0);
+    }
+
+}

+ 8 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopInstCategoryController.java

@@ -3,6 +3,7 @@ package com.zhongzheng.controller.top;
 import java.util.List;
 import java.util.Arrays;
 
+import com.zhongzheng.modules.top.financial.bo.TopCostInstTpQueryBo;
 import com.zhongzheng.modules.top.system.bo.TopInstCategoryAddBo;
 import com.zhongzheng.modules.top.system.bo.TopInstCategoryEditBo;
 import com.zhongzheng.modules.top.system.bo.TopInstCategoryQueryBo;
@@ -89,4 +90,11 @@ public class TopInstCategoryController extends BaseController {
         return toAjax(iTopInstCategoryService.updateByEditBo(bo) ? 1 : 0);
     }
 
+    @ApiOperation("供应商成本分类批量删除")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "供应商成本分类批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/deleteBatch")
+    public AjaxResult<Void> deleteBatch(@RequestBody TopInstCategoryEditBo bo) {
+        return toAjax(iTopInstCategoryService.deleteBatch(bo) ? 1 : 0);
+    }
 }

+ 28 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopInstitutionController.java

@@ -3,11 +3,14 @@ package com.zhongzheng.controller.top;
 import java.util.List;
 import java.util.Arrays;
 
+import com.zhongzheng.modules.top.financial.bo.TopCostInstTpQueryBo;
 import com.zhongzheng.modules.top.system.bo.TopInstitutionAddBo;
 import com.zhongzheng.modules.top.system.bo.TopInstitutionEditBo;
 import com.zhongzheng.modules.top.system.bo.TopInstitutionQueryBo;
 import com.zhongzheng.modules.top.system.service.ITopInstitutionService;
 import com.zhongzheng.modules.top.system.vo.TopInstitutionVo;
+import com.zhongzheng.modules.user.bo.UserQueryBo;
+import com.zhongzheng.modules.user.vo.UserExportVo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,6 +57,24 @@ public class TopInstitutionController extends BaseController {
         return getDataTable(list);
     }
 
+    @ApiOperation("导出职能机构列表")
+    @PreAuthorize("@ss.hasPermi('app:user:list')")
+    @GetMapping("/listExport")
+    public AjaxResult<TopInstitutionVo> listExport(TopInstitutionQueryBo bo) {
+        List<TopInstitutionVo> list = iTopInstitutionService.queryList(bo);
+        ExcelUtil<TopInstitutionVo> util = new ExcelUtil<>(TopInstitutionVo.class);
+        return util.exportExcel(list,"导出职能机构列表");
+    }
+
+    @ApiOperation("成本分类查询职能机构列表")
+    @PreAuthorize("@ss.hasPermi('system:institution:list')")
+    @GetMapping("/listByCat")
+    public TableDataInfo<TopInstitutionVo> listByCat(TopInstitutionQueryBo bo) {
+        startPage();
+        List<TopInstitutionVo> list = iTopInstitutionService.listByCat(bo);
+        return getDataTable(list);
+    }
+
 
 
     /**
@@ -88,5 +109,12 @@ public class TopInstitutionController extends BaseController {
         return toAjax(iTopInstitutionService.updateByEditBo(bo) ? 1 : 0);
     }
 
+    @ApiOperation("职能机构批量删除")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "职能机构批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/deleteBatch")
+    public AjaxResult<Void> deleteBatch(@RequestBody TopInstitutionQueryBo bo) {
+        return toAjax(iTopInstitutionService.deleteBatch(bo) ? 1 : 0);
+    }
 
 }

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

@@ -140,6 +140,8 @@ officialPush:
     periodPath: http://jypt-dev.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: peixunjigou
     token: 0ca175b9c0f726a831d895e26933246
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
 
 distributionOldPay:
     host: http://gdxypx.xy.com/System/BussinessApi/AddRedPackData

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

@@ -140,6 +140,8 @@ officialPush:
     periodPath: https://jypt.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: GDSXY
     token: 01b5d9833987efdff54483cdc9720da6
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
 
 distributionOldPay:
     host: https://www.xyyxt.net/System/BussinessApi/AddRedPackData

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

@@ -140,6 +140,8 @@ officialPush:
     periodPath: https://jypt.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: GDSXY
     token: 01b5d9833987efdff54483cdc9720da6
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
 
 distributionOldPay:
     host: https://www.xyyxt.net/System/BussinessApi/AddRedPackData

+ 2 - 2
zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionController.java

@@ -76,8 +76,8 @@ public class QuestionController extends BaseController {
     @GetMapping("/list")
     public TableDataInfo<QuestionVo> list(QuestionQueryBo bo) {
         startPage();
-        List<QuestionVo> list = iQuestionService.selectListByBo(bo);
-        return getDataTable(list);
+    //    List<QuestionVo> list = ;
+        return iQuestionService.selectListByBo(bo);
     }
 
     /**

+ 68 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -24,6 +24,10 @@ import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.config.ServerConfig;
 import com.zhongzheng.framework.web.service.WxLoginService;
 import com.zhongzheng.modules.activity.vo.ActivityGoodsPriceVo;
+import com.zhongzheng.modules.alioss.bo.OssRequest;
+import com.zhongzheng.modules.alioss.service.OssService;
+import com.zhongzheng.modules.bank.service.IExamService;
+import com.zhongzheng.modules.bank.service.IQuestionOtherService;
 import com.zhongzheng.modules.base.bo.ConfigQueryBo;
 import com.zhongzheng.modules.distribution.bo.DistributionActivityGoodsQueryBo;
 import com.zhongzheng.modules.distribution.bo.DistributionCashWithdrawalPayBo;
@@ -45,6 +49,7 @@ import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsJzsVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.goods.vo.UserGoodsListVo;
+import com.zhongzheng.modules.goods.vo.UserOrderGoodsListVo;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
@@ -146,6 +151,14 @@ public class CommonController extends BaseController {
     @Autowired
     private IClassGradeUserService iClassGradeUserService;
 
+    @Autowired
+    private IExamService iExamService;
+
+    @Autowired
+    private IQuestionOtherService iQuestionOtherService;
+    @Autowired
+    private OssService ossService;
+
     /**
      * 通用下载请求
      *
@@ -264,6 +277,34 @@ public class CommonController extends BaseController {
         return AjaxResult.success(voList);
     }
 
+    @ApiOperation("旧系统获取用户订单商品信息")
+    @PostMapping("common/get/orderGoods")
+    public AjaxResult getUserOrderGoods(@RequestBody UserGoodsListBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            return AjaxResult.error("签名错误");
+        }
+        List<UserOrderGoodsListVo> voList = iGoodsService.getUserOrderGoods(bo);
+
+        return AjaxResult.success(voList);
+    }
+
+    @ApiOperation("校验用户是否有账号")
+    @PostMapping("common/check/account")
+    public AjaxResult checkUserAccount(@RequestBody UserGoodsListBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            return AjaxResult.error("签名错误");
+        }
+        Map<String,String> url = iGoodsService.checkUserAccount(bo);
+        return AjaxResult.success(url);
+    }
+
+    @ApiOperation("七大员学员资料批量变更")
+    @PostMapping("common/apply/user/profile")
+    public AjaxResult updateExamUserProfile(MultipartFile file) {
+        iExamApplyService.updateExamUserProfile(file);
+        return AjaxResult.success();
+    }
+
     @ApiOperation("七大员新考结果")
     @PostMapping("common/apply/result")
     public AjaxResult examApplyResult(@RequestBody ExamApplyResultBo bo) {
@@ -311,7 +352,7 @@ public class CommonController extends BaseController {
     @ApiOperation("获取某场考试信息")
     @PostMapping("common/apply/detail")
     public AjaxResult examApplyDetail(@RequestBody ExamApplyDetailBo bo) {
-        List<ExamApplyDetailVo> voList = iExamApplyService.examApplyDetail(bo);
+        ExamApplyDetailVo voList = iExamApplyService.examApplyDetail(bo);
         return AjaxResult.success(voList);
     }
 
@@ -615,18 +656,26 @@ public class CommonController extends BaseController {
         return AjaxResult.success(iClassGradeUserService.DecryptOfficialInfo(bo));
     }
 
+
+    @ApiOperation("七大员学时抽查")
+    @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
+    @Log(title = "学时抽查", businessType = BusinessType.INSERT)
+    @PostMapping("/common/free/decryptSevenOfficialInfo")
+    public AjaxResult<ClassPeriodStudentVo> decryptSevenOfficialInfo(@RequestBody ClassGradeDecryptQueryBo bo) {
+        return AjaxResult.success(iClassGradeUserService.DecryptSevenOfficialInfo(bo));
+    }
+
     @ApiOperation("学时抽查加密")
     @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
     @PostMapping("/common/free/encryptDes")
     public AjaxResult encryptDes(@RequestBody ClassGradeDecryptQueryBo bo) {
         try{
             byte[] Keys = new byte[]{0x22, 0x34, 0x76, 0x58, (byte) 0x90, (byte) 0xAB, (byte) 0xAD, (byte) 0xBF};
-            byte[] rgbKey = "0ca175b9c0f726a831d895e26933246".substring(0, 8).getBytes("UTF-8");
-            String source = "bh="+bo.getBh()+"&idnum="+bo.getIdnum()+"&datetime=20230627";
+            byte[] rgbKey = "83A3C737FC54B575CC2ABDEFDCE090".substring(0, 8).getBytes("UTF-8");
+            String source = "bh="+bo.getBh()+"&idnum="+bo.getIdnum()+"&datetime=20230821";
             System.out.println(source);
             return AjaxResult.success(ToolsUtils.encryptDesNew(source,bo.getToken().substring(0, 8)));
         }catch (Exception e){
-            System.out.println(e.getMessage());
             return null;
         }
     }
@@ -660,4 +709,19 @@ public class CommonController extends BaseController {
         return getDataTable(list);
     }
 
+    @ApiOperation("批量学时信息推送")
+    @PreAuthorize("@ss.hasPermi('app:user:edit')")
+    @PostMapping("/common/free/pushPeriod")
+    public AjaxResult pushPeriod(@RequestBody List<ClassGradeUserQueryBo>  list) {
+        return AjaxResult.success(iClassGradeUserService.pushOfficialPeriodMore(list));
+    }
+    @ApiOperation("测试获取山东题库")
+    @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
+    @Log(title = "测试获取山东题库", businessType = BusinessType.INSERT)
+    @GetMapping("/common/free/getShanDongExam")
+    public AjaxResult getShanDongExam(GoodsQueryBo bo) {
+        iQuestionOtherService.queryById(3L);
+        return AjaxResult.success();
+    }
+
 }

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

@@ -216,6 +216,14 @@ public class CourseController extends BaseController {
         return getDataTable(list);
     }
 
+    @ApiOperation("旧系统查询用户学习进度列表")
+    @GetMapping("/goodsStudyProgress")
+    public TableDataInfo<GoodsUserVo> goodsStudyProgressList(CourseQueryBo bo) {
+        startPage();
+        List<GoodsUserVo> list = iCourseService.goodsStudyProgressList(bo);
+        return getDataTable(list);
+    }
+
     @ApiOperation("批量查询用户拥有的商品进度")
     @PostMapping("/goodsBatchList")
     public AjaxResult<List<GoodsBatchListVo>> goodsBatchList(@RequestBody CourseQueryBo bo) {

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

@@ -10,6 +10,7 @@ import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.poi.EasyPoiUtil;
+import com.zhongzheng.modules.base.bo.UserProfileQueryBo;
 import com.zhongzheng.modules.exam.bo.*;
 import com.zhongzheng.modules.exam.service.IExamApplyGoodsService;
 import com.zhongzheng.modules.exam.service.IExamApplyService;
@@ -266,4 +267,17 @@ public class ExamApplyController extends BaseController {
         return AjaxResult.success(vo);
     }
 
+    @ApiOperation("七大员学员资料批量变更")
+    @PostMapping("/user/profile")
+    public AjaxResult updateExamUserProfile(MultipartFile file) {
+        iExamApplyService.updateExamUserProfile(file);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("七大员学员资料导出")
+    @PostMapping("/user/profile/export")
+    public AjaxResult examUserProfileExport(@RequestBody UserProfileQueryBo bo) {
+        return AjaxResult.success(iExamApplyService.examUserProfileExport(bo));
+    }
+
 }

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

@@ -12,6 +12,8 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.github.pagehelper.PageInfo;
 import com.zhongzheng.common.core.domain.entity.SysRole;
 import com.zhongzheng.common.core.redis.RedisCache;
@@ -23,6 +25,7 @@ import com.zhongzheng.modules.base.vo.UserProfileExportGaiVo;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.*;
+import com.zhongzheng.modules.grade.domain.ClassGrade;
 import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.vo.*;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
@@ -120,6 +123,17 @@ public class ClassGradeController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 查询班级列表(新)
+     */
+    @ApiOperation("查询班级列表(新)")
+    @GetMapping("/search/list")
+    public TableDataInfo<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo) {
+        startPage();
+        List<ClassGradeVo> list = iClassGradeService.searchGradeList(bo);
+        return getDataTable(list);
+    }
+
     /**
      * 查询其他平台班级详情
      */
@@ -182,6 +196,12 @@ public class ClassGradeController extends BaseController {
     @PreAuthorize("@ss.hasPermi('grade:grade:list')")
     @GetMapping("/listGrade")
     public TableDataInfo<ClassGradeStudentVo> listGrade(ClassGradeUserQueryBo bo) {
+        if (ObjectUtils.isNotNull(bo.getGradeId())){
+            ClassGrade gradeGrade = iClassGradeService.getById(bo.getGradeId());
+            if (StringUtils.isNotBlank(gradeGrade.getSevenCode())){
+                bo.setSevenCode(gradeGrade.getSevenCode());
+            }
+        }
         startPage();
         List<ClassGradeStudentVo> list = iClassGradeService.listGrade(bo);
         return getDataTable(list);

+ 29 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -10,6 +10,8 @@ import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.modules.goods.bo.QuestionOpenImportBo;
+import com.zhongzheng.modules.goods.vo.QuestionOpenImportVo;
 import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportAllVo;
 import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
@@ -18,6 +20,7 @@ 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.user.bo.UserSubscribeExportBo;
+import com.zhongzheng.modules.user.vo.UserSubscribeImport;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,6 +40,7 @@ import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.common.core.page.TableDataInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 订单Controller
@@ -170,4 +174,29 @@ public class OrderController extends BaseController {
         return AjaxResult.success(map);
     }
 
+    /**
+     * 七大员题库商品开通
+     */
+    @ApiOperation("七大员题库商品开通")
+    @PostMapping("/question/open")
+    public AjaxResult<Void> questionGoodsOpen(@RequestBody questionOpenBo bo) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateSysUserId(loginUser.getUser().getUserId());
+        bo.setCreateBy(SecurityUtils.getUsername());
+        return toAjax(iOrderService.questionGoodsOpen(bo) ? 1 : 0);
+    }
+
+    /**
+     * 七大员题库商品导入开通
+     */
+    @ApiOperation("七大员题库商品导入开通")
+    @PostMapping("/question/open/import")
+    public AjaxResult<QuestionOpenImportVo> questionGoodsOpenImport(MultipartFile file)throws Exception {
+        ExcelUtil<QuestionOpenImportBo> util = new ExcelUtil<>(QuestionOpenImportBo.class);
+        List<QuestionOpenImportBo> importBoList = util.importExcel(file.getInputStream());
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        return AjaxResult.success(iOrderService.questionGoodsOpenImport(importBoList,loginUser.getUser().getUserId(),SecurityUtils.getUsername()));
+    }
+
+
 }

+ 2 - 1
zhongzheng-admin/src/main/resources/application-dev.yml

@@ -140,7 +140,8 @@ officialPush:
     periodPath: https://jypt-dev.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: peixunjigou
     token: 0ca175b9c0f726a831d895e26933246
-
+    sevenInfoPath: http://sgry-dev.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry-dev.gdcic.net/organjxjy/XueshiShenqing
 
 
 distributionOldPay:

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

@@ -140,6 +140,8 @@ officialPush:
     periodPath: https://jypt-dev.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: peixunjigou
     token: 0ca175b9c0f726a831d895e26933246
+    sevenInfoPath: http://sgry-dev.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry-dev.gdcic.net/organjxjy/XueshiShenqing
 
 distributionOldPay:
     host: http://test.jqbao.net/System/BussinessApi/AddRedPackData

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

@@ -140,6 +140,8 @@ officialPush:
     periodPath: https://jypt.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: GDSXY
     token: 01b5d9833987efdff54483cdc9720da6
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
 
 distributionOldPay:
     host: https://www.xyyxt.net/System/BussinessApi/AddRedPackData

+ 1 - 1
zhongzheng-admin/src/main/resources/templates/wordPhone.ftl

@@ -49,7 +49,7 @@
 		<table border="1" class="tabsty">
 			<tr>
 				<td class="strong">姓 名</td>
-				<td>${name}</td>
+				<td>${username}</td>
 				<td class="strong">性别</td>
 				<td>${s}</td>
 				<td class="strong">培训岗位</td>

+ 12 - 2
zhongzheng-api/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java

@@ -12,6 +12,7 @@ import com.zhongzheng.modules.base.service.IProfileTpService;
 import com.zhongzheng.modules.base.service.IUserProfileService;
 import com.zhongzheng.modules.base.vo.ProfileTpVo;
 import com.zhongzheng.modules.base.vo.UserProfileVo;
+import com.zhongzheng.modules.user.bo.CommitmentSealBo;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -20,6 +21,7 @@ import net.polyv.common.v1.util.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Arrays;
 import java.util.List;
@@ -63,8 +65,16 @@ public class ProfileTpController extends BaseController {
         return getDataTable(list);
     }
 
-
-
+    /**
+     * 学员上传承诺书
+     */
+    @ApiOperation("学员上传承诺书")
+    @PostMapping("/commitment/upload")
+    public AjaxResult<Void> commitmentSealUpload(@RequestBody CommitmentSealBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return toAjax(iProfileTpService.commitmentSealUpload(bo) ? 1:0 );
+    }
 
 
     /**

+ 40 - 5
zhongzheng-api/src/main/java/com/zhongzheng/controller/course/CourseController.java

@@ -9,15 +9,14 @@ import com.zhongzheng.modules.course.bo.*;
 import com.zhongzheng.modules.course.service.*;
 import com.zhongzheng.modules.course.vo.*;
 import com.zhongzheng.modules.goods.vo.GoodsUserVo;
+import com.zhongzheng.modules.order.bo.SpecialQuestionBo;
+import com.zhongzheng.modules.order.vo.SpecialQuestionVo;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -70,11 +69,47 @@ public class CourseController extends BaseController {
     public TableDataInfo<GoodsUserVo> goodsList(CourseQueryBo bo) {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
+//        startPage();
+//        List<GoodsUserVo> list = iCourseService.goodsList(bo);
+//        return getDataTable(list);
+        return iCourseService.goodsListPage(bo);
+    }
+
+    /**
+     * 查询课程列表
+     */
+    @ApiOperation("查询用户拥有的题库列表(山东题库)")
+    @GetMapping("/special/question/list")
+    public TableDataInfo<SpecialQuestionVo> getSpecialQuestionList(SpecialQuestionBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
         startPage();
-        List<GoodsUserVo> list = iCourseService.goodsList(bo);
+        List<SpecialQuestionVo> list = iCourseService.getSpecialQuestionList(bo);
         return getDataTable(list);
     }
 
+    /**
+     * 获取题库H5跳转码
+     */
+    @ApiOperation("获取题库H5跳转码")
+    @GetMapping("/special/question/skip/code")
+    public AjaxResult getSpecialQuestionSkipCode() {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        return AjaxResult.success(iCourseService.getSpecialQuestionSkipCode(loginUser.getUser().getUserId()));
+    }
+
+    /**
+     * 查询用户是否拥有(山东题库)
+     */
+    @ApiOperation("查询用户是否拥有(山东题库)")
+    @GetMapping("/special/question/count")
+    public AjaxResult<Long> getSpecialQuestionCount(SpecialQuestionBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        Long num = iCourseService.getSpecialQuestionCount(bo);
+        return AjaxResult.success(num);
+    }
+
     @ApiOperation("查询用户拥有的讲义商品")
     @GetMapping("/goodsHandoutsList")
     public TableDataInfo<GoodsUserVo> goodsHandoutsList(CourseQueryBo bo) {

+ 2 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java

@@ -2,6 +2,7 @@ package com.zhongzheng.controller.goods;
 
 import cn.hutool.core.lang.Validator;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.page.PageDomain;
@@ -32,6 +33,7 @@ import com.zhongzheng.modules.goods.service.IGoodsSpecTemplateService;
 import com.zhongzheng.modules.goods.vo.*;
 import com.zhongzheng.modules.grade.bo.UserPeriodQueryBo;
 import com.zhongzheng.modules.grade.service.IUserPeriodService;
+import com.zhongzheng.modules.order.bo.OrderGoodsSevenBo;
 import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.domain.OrderGoodsFree;
 import com.zhongzheng.modules.order.service.IOrderGoodsFreeService;

+ 64 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsQuestionRelExamController.java

@@ -0,0 +1,64 @@
+package com.zhongzheng.controller.goods;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.WxTokenService;
+import com.zhongzheng.modules.goods.bo.GoodsQuestionRelExamAddBo;
+import com.zhongzheng.modules.goods.bo.GoodsQuestionRelExamEditBo;
+import com.zhongzheng.modules.goods.bo.GoodsQuestionRelExamQueryBo;
+import com.zhongzheng.modules.goods.service.IGoodsQuestionRelExamService;
+import com.zhongzheng.modules.goods.vo.GoodsQuestionRelExamVo;
+import com.zhongzheng.modules.user.entity.ClientLoginUser;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 三方题库试卷记录Controller
+ *
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+@Api(value = "三方题库试卷记录控制器", tags = {"三方题库试卷记录管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/goods/rel/exam")
+public class GoodsQuestionRelExamController extends BaseController {
+
+    private final IGoodsQuestionRelExamService iGoodsQuestionRelExamService;
+
+    private final WxTokenService wxTokenService;
+
+
+    /**
+     * 新增三方题库试卷记录
+     */
+    @ApiOperation("获取三方题库试卷ID")
+    @PreAuthorize("@ss.hasPermi('system:exam:add')")
+    @Log(title = "获取三方题库试卷ID", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<GoodsQuestionRelExamVo> add(@RequestBody GoodsQuestionRelExamAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iGoodsQuestionRelExamService.makeExam(bo));
+    }
+
+
+}

+ 1 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -59,6 +59,7 @@ public class ClassGradeController extends BaseController {
         startPage();
         bo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
         bo.setPastDue(1L);
+
         List<ClassGradeVo> list = iClassGradeService.queryList(bo);
         return getDataTable(list);
     }

+ 14 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/inform/InformUserController.java

@@ -61,6 +61,20 @@ public class InformUserController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 查询通知绑定学员列表
+     */
+    @ApiOperation("学员通知消息数量")
+    @GetMapping("/count")
+    public AjaxResult<Integer> getInformUserCount(InformUserQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        bo.setStatus(1);
+        Integer count = iInformUserService.getInformUserCount(bo);
+        return AjaxResult.success(count);
+    }
+
 
     /**
      * 获取通知绑定学员详细信息

+ 16 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -211,4 +211,20 @@ public class OrderController extends BaseController {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         return AjaxResult.success(iOrderService.getHaveBuyGoodsNotExpired(bo.getGoodsId(),loginUser.getUser().getUserId()));
     }
+
+    @ApiOperation("七大员课程学习校验")
+    @GetMapping("/study/check/{orderGoodsId}")
+    public AjaxResult<Void> studyCheck(@PathVariable("orderGoodsId") Long orderGoodsId) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        return toAjax(iOrderService.studyCheck(orderGoodsId,loginUser.getUser().getUserId()) ? 1 : 0);
+    }
+
+    /**
+     * 获取订单商品
+     */
+    @ApiOperation("获取订单商品")
+    @GetMapping("/seven/year/{orderGoodsId}")
+    public AjaxResult<String> getOrderSevenYear(@PathVariable("orderGoodsId")Long orderGoodsId) {
+        return AjaxResult.success("成功",iOrderGoodsService.getOrderSevenYear(orderGoodsId));
+    }
 }

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

@@ -20,6 +20,7 @@ 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.UserVo;
+import com.zhongzheng.modules.wx.bo.WxIdBody;
 import com.zhongzheng.modules.wx.bo.WxLoginBody;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -185,6 +186,8 @@ public class UserController extends BaseController {
         return AjaxResult.success();
     }
 
+
+
     @ApiOperation("检查是否绑定公众号")
     @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/checkBindGzh")
@@ -195,6 +198,16 @@ public class UserController extends BaseController {
         return AjaxResult.success("成功",userVo.getGzhOpenId());
     }
 
+    @ApiOperation("检查账号是否绑定该openid")
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @PostMapping("/checkBindOpenId")
+    public AjaxResult<Boolean> checkBindOpenId(@RequestBody WxIdBody loginBody)
+    {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        loginBody.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success("成功",wxLoginService.checkBindOpenId(loginBody));
+    }
+
     @ApiOperation("把其他用户踢下线")
     @Log(title = "把其他用户踢下线", businessType = BusinessType.UPDATE)
     @PostMapping("/offline")

+ 13 - 2
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserStudyRecordController.java

@@ -3,6 +3,7 @@ package com.zhongzheng.controller.user;
 import java.util.List;
 import java.util.Arrays;
 
+import cn.hutool.core.lang.Validator;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.framework.web.service.WxTokenService;
 import com.zhongzheng.modules.course.bo.CourseMenuQueryBo;
@@ -97,8 +98,10 @@ public class UserStudyRecordController extends BaseController {
     @Log(title = "用户学习记录", businessType = BusinessType.INSERT)
     @PostMapping()
     public AjaxResult<Integer> add(@RequestBody UserStudyRecordAddBo bo) {
-        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
-        bo.setUserId(loginUser.getUser().getUserId());
+        if(Validator.isEmpty(bo.getUserId())){
+            ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+            bo.setUserId(loginUser.getUser().getUserId());
+        }
         return AjaxResult.success(iUserStudyRecordService.insertByAddBo(bo));
     }
 
@@ -197,4 +200,12 @@ public class UserStudyRecordController extends BaseController {
         bo.setUserId(loginUser.getUser().getUserId());
         return AjaxResult.success(iUserStudyRecordService.queryLiveLast(bo));
     }
+
+    @ApiOperation("继教七大员公共课程同步")
+    @GetMapping("/syncSevenPublicClass")
+    public AjaxResult<Integer> syncSevenPublicClass(UserStudyRecordQueryBo bo){
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iUserStudyRecordService.syncSevenPublicClass(bo.getOrderGoodsId(),bo.getUserId()));
+    }
 }

+ 24 - 5
zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxLoginController.java

@@ -86,7 +86,7 @@ public class WxLoginController
      * @param loginBody 登录信息
      * @return 结果
      */
-    @ApiOperation("小程序微信登录")
+    @ApiOperation("小程序通过手机授权微信登录")
     @PostMapping("/app/common/bindLogin")
     public AjaxResult bindLogin(@RequestBody WxLoginBody loginBody)
     {
@@ -94,6 +94,14 @@ public class WxLoginController
         return AjaxResult.success(map);
     }
 
+    @ApiOperation("小程序通过openid微信登录")
+    @PostMapping("/app/common/openIdLogin")
+    public AjaxResult openIdLogin(@RequestBody WxLoginBody loginBody)
+    {
+        Map<String,Object> map = wxLoginService.openIdLogin(loginBody);
+        return AjaxResult.success(map);
+    }
+
     @ApiOperation("获取用户小程序openid")
     @PostMapping("/wx/getOpenid")
     public AjaxResult<Void> getOpenid(@RequestBody WxLoginBody loginBody)
@@ -103,18 +111,29 @@ public class WxLoginController
         return AjaxResult.success(openId);
     }
 
+    @ApiOperation("考前获取用户小程序openid")
+    @PostMapping("/app/common/wx/exam/getOpenid")
+    public AjaxResult<Map<String,String>> getExamOpenid(@RequestBody WxLoginBody loginBody)
+    {
+        Map<String,String> map = wxLoginService.getExamWxOpenId(loginBody);
+        return AjaxResult.success(map);
+    }
+
+    @ApiOperation("考前获取公众号openid")
+    @PostMapping("/app/common/wx/gzh_bind")
+    public AjaxResult wx_gzh_bind(@RequestBody WxLoginBody loginBody)
+    {
+        return AjaxResult.success(wxLoginService.bindGzhUnionIdUser(loginBody));
+    }
+
     @ApiOperation("小程序校验PC登录二维码")
     @PostMapping("/scan_login_check")
     public AjaxResult scanLoginCheck(@RequestBody WxLoginBody loginBody)
     {
-        log.info("loginBody:"+ JSON.toJSONString(loginBody));
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
-        log.info("loginUser:"+ JSON.toJSONString(loginUser));
         String scanCode = loginBody.getScanCode();
         String key = "SCAN_LOGIN_"+scanCode;
-        log.info("key:"+ key);
         String keyStatus = "SCAN_LOGIN_STATUS_"+scanCode; //0未扫码 1已扫码 2已登录
-        log.info("keyStatus:"+ keyStatus);
         Long status = redisCache.getCacheObject(keyStatus);
         if(Validator.isNotEmpty(status)&&status.equals(1L)){
             redisCache.setCacheObject(key, loginUser.getUser().getUserId(),60, TimeUnit.SECONDS);//60秒锁定

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

@@ -143,6 +143,8 @@ officialPush:
     periodPath: https://jypt-dev.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: peixunjigou
     token: 0ca175b9c0f726a831d895e26933246
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
 
 distributionOldPay:
     host: http://gdxypx.xy.com/System/BussinessApi/AddRedPackData
@@ -181,3 +183,4 @@ exam:
     applyUpdate: http://192.168.1.7:9099/cd/exam/update
     applyDelete: http://192.168.1.7:9099/cd/exam/delete
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
+

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

@@ -140,6 +140,8 @@ officialPush:
     periodPath: https://jypt-dev.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: peixunjigou
     token: 0ca175b9c0f726a831d895e26933246
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
 
 distributionOldPay:
     host: http://test.jqbao.net/System/BussinessApi/AddRedPackData

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

@@ -152,6 +152,8 @@ officialPush:
     periodPath: https://jypt.gdcic.net/organjxjy/XueshiShenqing
     infoAccount: GDSXY
     token: 01b5d9833987efdff54483cdc9720da6
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
 
 distributionOldPay:
     host: https://www.xyyxt.net/System/BussinessApi/AddRedPackData

+ 1 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/SysDictData.java

@@ -71,7 +71,7 @@ public class SysDictData implements Serializable
     private String listClass;
 
     @TableField(value = "tenant_id")
-    private Long tenantId;
+    private String tenantId;
 
     /** 是否默认(Y是 N否) */
     @Excel(name = "是否默认", readConverterExp = "Y=是,N=否")

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

@@ -542,6 +542,28 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     }
 
 
+    public static Long getAppointTime(Long millisecond, Integer day) {
+        for (Integer i = 0; i < day; i++) {
+            Long dayAfter = getDayBefore(millisecond, 1);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(timeToDate(dayAfter));
+            int index = calendar.get(Calendar.DAY_OF_WEEK) - 1;
+            String[] weeks = new String[]{"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+
+            if (weeks[index].equals("星期六") || weeks[index].equals("星期天")) {
+                day += 1;
+
+            }
+            //判断当前是否为工作日
+            if (!isWorkingDay(dayAfter)) {
+                day += 1;
+            }
+            millisecond = dayAfter;
+        }
+
+        return millisecond;
+    }
+
     /**
      * 指定时间往前或往后推n天
      *

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

@@ -338,6 +338,36 @@ public class ToolsUtils {
         return true;
     }
 
+    public static String EncoderByMd5WithUtf(String str) {
+        String result = "";
+        MessageDigest md5 = null;
+        try {
+            md5 = MessageDigest.getInstance("MD5");
+            // 这句是关键
+            md5.update(str.getBytes("UTF-8"));
+        } catch (NoSuchAlgorithmException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        byte b[] = md5.digest();
+        int i;
+        StringBuffer buf = new StringBuffer("");
+        for (int offset = 0; offset < b.length; offset++) {
+            i = b[offset];
+            if (i < 0)
+                i += 256;
+            if (i < 16)
+                buf.append("0");
+            buf.append(Integer.toHexString(i));
+        }
+        result = buf.toString();
+
+        return result;
+    }
+
     public static String EncoderByMd5(String str) {
         String result = "";
         MessageDigest md5 = null;

+ 122 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/file/FileUtils.java

@@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.math.BigInteger;
 import java.net.URLEncoder;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -27,6 +28,7 @@ import java.util.List;
 import java.util.UUID;
 import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
 /**
@@ -444,4 +446,124 @@ public class FileUtils extends org.apache.commons.io.FileUtils
         }
     }
 
+
+    /**
+     * 解压
+     *
+     * @param inputStream zip压缩文件
+     * @param descDir 指定的解压目录
+     */
+    public static void unzipWithStream(InputStream inputStream, String descDir) {
+        if (!descDir.endsWith(File.separator)) {
+            descDir = descDir + File.separator;
+        }
+        try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("GBK"))) {
+            ZipEntry zipEntry;
+            while ((zipEntry = zipInputStream.getNextEntry()) != null) {
+                String zipEntryNameStr = zipEntry.getName();
+                String zipEntryName = zipEntryNameStr;
+                if (zipEntryNameStr.contains("/")) {
+                    String str1 = zipEntryNameStr.substring(0, zipEntryNameStr.indexOf("/"));
+                    zipEntryName = zipEntryNameStr.substring(str1.length() + 1);
+                }
+                String outPath = (descDir + zipEntryName).replace("\\\\", "/");
+                File outFile = new File(outPath.substring(0, outPath.lastIndexOf('/')));
+                if (!outFile.exists()) {
+                    outFile.mkdirs();
+                }
+                if (new File(outPath).isDirectory()) {
+                    continue;
+                }
+                writeFile(outPath, zipInputStream);
+                zipInputStream.closeEntry();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new CustomException("压缩包处理异常,异常信息{}"+ e);
+        }
+    }
+
+    //将流写到文件中
+    public static void writeFile(String filePath, ZipInputStream zipInputStream) {
+        File file = new File(filePath);
+        File directory = file.getParentFile();
+        if (!directory.exists()){
+            directory.mkdirs();
+        }
+        try (OutputStream outputStream = new FileOutputStream(filePath)) {
+            byte[] bytes = new byte[4096];
+            int len;
+            while ((len = zipInputStream.read(bytes)) != -1) {
+                outputStream.write(bytes, 0, len);
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            throw new CustomException("解压文件时,写出到文件出错!");
+        }
+    }
+
+
+    /**
+     * 打包压缩文件夹
+     *
+     * @param folderPath 文件夹路径
+     * @param zipFilePath 压缩后的文件路径
+     * @throws IOException IO异常
+     */
+    public static void zipFolder(String folderPath, String zipFilePath) throws IOException {
+        FileOutputStream fos = null;
+        ZipOutputStream zos = null;
+        try {
+            fos = new FileOutputStream(zipFilePath);
+            zos = new ZipOutputStream(fos);
+
+            // 递归遍历整个文件夹并添加到压缩包
+            addFolderToZip("", new File(folderPath), zos);
+        } finally {
+            if (zos != null) {
+                zos.close();
+            }
+            if (fos != null) {
+                fos.close();
+            }
+        }
+    }
+
+    /**
+     * 将文件夹及其中的文件递归添加到压缩流中
+     *
+     * @param parentPath 父级路径
+     * @param folder 文件夹
+     * @param zos Zip输出流
+     * @throws FileNotFoundException 文件未找到异常
+     * @throws IOException IO异常
+     */
+    private static void addFolderToZip(String parentPath, File folder, ZipOutputStream zos) throws FileNotFoundException, IOException {
+        for (File file : folder.listFiles()) {
+            if (file.isDirectory()) {
+                // 递归添加子文件夹中的文件
+                addFolderToZip(parentPath + folder.getName() + "/", file, zos);
+            } else {
+                FileInputStream fis = null;
+                try {
+                    fis = new FileInputStream(file);
+
+                    // 新建Zip条目并将输入流加入到Zip包中
+                    ZipEntry zipEntry = new ZipEntry( folder.getName() + "/" + file.getName());
+                    zos.putNextEntry(zipEntry);
+
+                    byte[] bytes = new byte[1024];
+                    int length;
+                    while ((length = fis.read(bytes)) >= 0) {
+                        zos.write(bytes, 0, length);
+                    }
+                } finally {
+                    if (fis != null) {
+                        fis.close();
+                    }
+                }
+            }
+        }
+    }
+
 }

+ 60 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/poi/ExcelUtil.java

@@ -342,6 +342,55 @@ public class ExcelUtil<T>
         return sheetsList;
     }
 
+    public String userProfileExport(String filePath, String sheetName)
+    {
+        OutputStream out = null;
+        try
+        {
+            FileInputStream inputStream = new FileInputStream(filePath);
+            String filename = encodingName(sheetName);
+            out = new FileOutputStream(getAbsoluteFile(filename));
+            byte[] buffer = new byte[1024];
+            int len = 0;
+            while ((len = inputStream.read(buffer)) != -1) {
+                out.write(buffer, 0, len);
+            }
+            return filename;
+        }
+        catch (Exception e)
+        {
+            log.error("导出学员资料异常{}", e.getMessage());
+            throw new CustomException("导出学员资料异常,请联系网站管理员!");
+        }
+        finally
+        {
+
+            if (wb != null)
+            {
+                try
+                {
+                    wb.close();
+                }
+                catch (IOException e1)
+                {
+                    e1.printStackTrace();
+                }
+            }
+            if (out != null)
+            {
+                try
+                {
+                    out.close();
+                }
+                catch (IOException e1)
+                {
+                    e1.printStackTrace();
+                }
+            }
+        }
+    }
+
+
     public AjaxResult exportEasyExcel(List<Map<String, Object>> sheetsList, String sheetName)
     {
         OutputStream out = null;
@@ -387,6 +436,8 @@ public class ExcelUtil<T>
         }
     }
 
+
+
     public void exportEasyExcelStudy(List<Map<String, Object>> sheetsList,String path)
     {
         OutputStream out = null;
@@ -984,6 +1035,15 @@ public class ExcelUtil<T>
         return filename;
     }
 
+    /**
+     * 编码文件名
+     */
+    public String encodingName(String filename)
+    {
+        filename = UUID.randomUUID().toString() + "_" + filename;
+        return filename;
+    }
+
     public String encodingFilename(String filename)
     {
         filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx";

+ 4 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -135,9 +135,13 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/profile/**").anonymous()
                 .antMatchers("/common/jzs/**").anonymous()
                 .antMatchers("/common/rollback/period").anonymous()
+                .antMatchers("/common/apply/user/profile").anonymous()
                 .antMatchers("/common/decompression").anonymous()
                 .antMatchers("/common/merge/file").anonymous()
                 .antMatchers("/common/get/goods").anonymous()
+                .antMatchers("/common/get/orderGoods").anonymous()
+                .antMatchers("/common/check/account").anonymous()
+                .antMatchers("/common/apply/user/profile").anonymous()
                 .antMatchers("/common/get/goods/studyUrl").anonymous()
                 .antMatchers("/common/apply/detail").anonymous()
                 .antMatchers("/common/student/image/update").anonymous()

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

@@ -402,7 +402,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
             }
             dictData.setDictCode(null);
             dictData.setDictTypeId(dictType1.getDictId());
-            dictData.setTenantId(newTenantId);
+            dictData.setTenantId(newTenantId.toString());
         }
         iSysDictDataService.saveBatch(dictDatas);
     }

+ 5 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -1573,6 +1573,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return baseMapper.listByIdsNotTenant(userIds);
     }
 
+    @Override
+    public String createToken(LoginUser loginUser) {
+        return tokenService.createToken(loginUser);
+    }
+
 
     @Override
     public Map<String, Object> accountLogin(UserAppAccountLoginBo bo) {

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

@@ -6,6 +6,7 @@ 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;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -29,6 +30,7 @@ import com.zhongzheng.modules.distribution.vo.SellerWxVo;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
+import com.zhongzheng.modules.grade.domain.ClassGradeUser;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.user.bo.UserWxFollowAddBo;
 import com.zhongzheng.modules.user.domain.User;
@@ -270,6 +272,41 @@ public class WxLoginService implements IWxLoginService {
         return map;
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> openIdLogin(WxLoginBody loginBody) {
+        if(Validator.isEmpty(loginBody.getOpenId())){
+            throw new CustomException("openid缺失");
+        }
+        User user = iUserService.getOne(new LambdaQueryWrapper<User>().eq(User::getOpenId, loginBody.getOpenId()).last("limit 1"));
+        if (ObjectUtils.isNull(user)&&Validator.isEmpty(loginBody.getUserId())) {
+            throw new CustomException("该openid暂无绑定!",666);
+        }
+        if (Validator.isNotEmpty(loginBody.getUserId())) {
+            user = iUserService.getOne(new LambdaQueryWrapper<User>().eq(User::getUserId, loginBody.getUserId()).last("limit 1"));
+            if(Validator.isNotEmpty(user.getOpenId())){
+                throw new CustomException("该用户已绑定过openid!",667);
+            }
+            user.setOpenId(loginBody.getOpenId());
+            if(Validator.isNotEmpty(loginBody.getUnionId())){
+                user.setUnionId(loginBody.getUnionId());
+            }
+            iUserService.updateById(user);
+        }
+
+        //如果活动分销码变动
+        if (StringUtils.isNotBlank(loginBody.getShareActivityCode())){
+            user.setShareActivityCode(loginBody.getShareActivityCode());
+            iUserService.updateById(user);
+        }
+        ClientLoginUser loginUser = new ClientLoginUser();
+        loginUser.setUser(user);
+        Map<String, Object> map = new HashMap<>();
+        map.put(Constants.TOKEN, wxTokenService.createToken(loginUser));
+        map.put("user_account", loginUser.getUser().getUserAccount());
+        map.put("full_info", Validator.isEmpty(user.getIdCard()) ? false : true); //是否完善身份信息
+        return map;
+    }
+
 
     public Map<String, String> smallTel(WxLoginBody loginBody) {
         initData();
@@ -384,6 +421,30 @@ public class WxLoginService implements IWxLoginService {
         return openId;
     }
 
+    public Map<String,String> getExamWxOpenId(WxLoginBody loginBody) {
+        if(Validator.isEmpty(loginBody.getCode())){
+            throw new CustomException("code缺失");
+        }
+        initData();
+        String openId;
+
+        //每次更新最新openid
+        String param = String.format(wxAuthParam, appid, appsrcret, loginBody.getCode());
+        String resultString = HttpUtils.sendGet(wxAuthUrl, param);
+        //解析json
+        JSONObject jsonObject = (JSONObject) JSONObject.parse(resultString);
+        String session_key = String.valueOf(jsonObject.get("session_key"));
+        openId = String.valueOf(jsonObject.get("openid"));
+        String unionId = null;
+        if (jsonObject.containsKey("unionid")) { //当没绑定开放平台
+            unionId = String.valueOf(jsonObject.get("unionid"));
+        }
+        Map<String,String> map = new HashMap();
+        map.put("openId",openId);
+        map.put("unionId",unionId);
+        return map;
+    }
+
 
     //小程序获取用户信息
     public User getWxUnionIdUser(WxLoginBody loginBody) {
@@ -1271,6 +1332,71 @@ public class WxLoginService implements IWxLoginService {
         }
         return user;
     }
+
+    //获取公众号openid
+    public String bindGzhUnionIdUser(WxLoginBody loginBody) {
+        if(Validator.isEmpty(loginBody.getCode())){
+            throw new CustomException("code不能为空");
+        }
+        initData();
+        String param = String.format(gzh_wxAuthParam, gzh_appid, gzh_appsrcret, loginBody.getCode());
+        String resultString = HttpUtils.sendGet(gzh_wxAuthUrl, param);
+        //解析json
+        JSONObject jsonObject = (JSONObject) JSONObject.parse(resultString);
+        String access_token = String.valueOf(jsonObject.get("access_token"));
+        if(access_token.equals("null")){
+            throw new CustomException( String.valueOf(jsonObject.get("errmsg")));
+        }
+        String openId = String.valueOf(jsonObject.get("openid"));
+
+        String userInfoParam = String.format(gzh_wxUserInfoParam, access_token, openId);
+        String userInfoResultString = HttpUtils.sendGet(gzh_wxUserInfoUrl, userInfoParam);
+
+        //解析json
+        JSONObject jsonObject1 = (JSONObject) JSONObject.parse(userInfoResultString);
+        return openId;
+    }
+
+    public Boolean checkBindOpenId(WxIdBody loginBody) {
+        if(Validator.isEmpty(loginBody.getOpenid())||Validator.isEmpty(loginBody.getFromPlat())){
+            throw new CustomException("参数缺失");
+        }
+        User user = iUserService.getOne(new LambdaQueryWrapper<User>().eq(User::getUserId,loginBody.getUserId()));
+        if(loginBody.getFromPlat()==1){
+            if(Validator.isEmpty(user.getGzhOpenId())){
+                LambdaUpdateWrapper<User> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                objectLambdaUpdateWrapper.eq(User::getUserId, loginBody.getUserId());
+                objectLambdaUpdateWrapper.set(User::getGzhOpenId, loginBody.getOpenid());
+                objectLambdaUpdateWrapper.set(User::getUpdateTime, DateUtils.getNowTime());
+                iUserService.update(null, objectLambdaUpdateWrapper);
+                return true;
+            }else{
+                if(user.getGzhOpenId().equals(loginBody.getOpenid())){
+                    return true;
+                }else{
+                    return false;
+                }
+            }
+        }
+        else if(loginBody.getFromPlat()==2){
+            if(Validator.isEmpty(user.getOpenId())){
+                LambdaUpdateWrapper<User> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                objectLambdaUpdateWrapper.eq(User::getUserId, loginBody.getUserId());
+                objectLambdaUpdateWrapper.set(User::getOpenId, loginBody.getOpenid());
+                objectLambdaUpdateWrapper.set(User::getUpdateTime, DateUtils.getNowTime());
+                iUserService.update(null, objectLambdaUpdateWrapper);
+                return true;
+            }else{
+                if(user.getOpenId().equals(loginBody.getOpenid())){
+                    return true;
+                }else{
+                    return false;
+                }
+            }
+        }
+        return false;
+    }
+
     public DistributionSeller bindWxGzhOpenIdSeller(WxLoginBody loginBody) {
         DistributionSeller seller = iDistributionSellerService.getOne(new LambdaQueryWrapper<DistributionSeller>().eq(DistributionSeller::getSellerId,loginBody.getSellerId()));
         if (seller == null) {

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/bo/OssRequest.java

@@ -20,7 +20,7 @@ import javax.validation.constraints.NotNull;
 public class OssRequest{
 
     /** 上传图片标识 */
-    @ApiModelProperty(value = "上传图片标识 0头像 1身份证 2题库 3指南指引图片 4广告图片 5身份证或学信网图片 6文件excel,word,zip等",required = true)
+    @ApiModelProperty(value = "上传图片标识 0头像 1身份证 2题库 3指南指引图片 4广告图片 5身份证或学信网图片 6文件excel,word,zip等 10文件zip",required = true)
     @NotNull(message = "上传图片标识不能为空")
     private Integer ImageStatus;
 

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/OssService.java

@@ -25,6 +25,8 @@ public interface OssService {
 
     String uploadWithPath(OssRequest base,String path) throws Exception;
 
+    String uploadWithUrl(OssRequest base,String urlString);
+
     String uploadInputStream(InputStream inputStream,Integer imageStatus) throws Exception;
 
     String uploadBase64(String fileStr,OssRequest ossRequest);
@@ -42,4 +44,5 @@ public interface OssService {
     InputStream getStreamByObject(String filePath) throws Exception;
 
     void processObject(String targetImage ,String sourceImage,String styleType) ;
+
 }

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

@@ -15,6 +15,7 @@ import com.aliyuncs.exceptions.ClientException;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.modules.alioss.bo.OssCallbackParam;
 import com.zhongzheng.modules.alioss.bo.OssRequest;
 import com.zhongzheng.modules.alioss.service.OssService;
@@ -39,6 +40,8 @@ import javax.sql.rowset.serial.SerialBlob;
 import javax.sql.rowset.serial.SerialException;
 import java.awt.*;
 import java.io.*;
+import java.net.URL;
+import java.net.URLConnection;
 import java.sql.SQLException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -220,6 +223,12 @@ public class OssServiceImpl implements OssService {
             case 9:
                 RandomFilename = "wisdom" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now+ String.valueOf(random > 0 ? random : (-1) * random);
                 break;
+            case 10:
+                RandomFilename = "file" + "/" +(sdf.format(new Date())) + "/" + now + ".zip";
+                break;
+            case 11:
+                RandomFilename = "file/nuonuo" + "/" +(sdf.format(new Date())) + "/" + now + ".pdf";
+                break;
         }
 
         return RandomFilename;
@@ -244,8 +253,10 @@ public class OssServiceImpl implements OssService {
             //获取上传文件输入流
             InputStream inputStream = file.getFile().getInputStream();
             String originalFilename = file.getFile().getOriginalFilename();
+            String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
 
-            String fileName = ALIYUN_OSS_DIR_PREFIX + generateRandomFilename(file) ;
+            String fileName = ALIYUN_OSS_DIR_PREFIX + generateRandomFilename(file) + "." + suffix;
+//            String fileName = ALIYUN_OSS_DIR_PREFIX + generateRandomFilename(file) ;
 
             //调用oss方法实现上传
             //第一个参数  Bucket名称
@@ -297,7 +308,12 @@ public class OssServiceImpl implements OssService {
         try {
             OssRequest ossRequest = new OssRequest();
             ossRequest.setImageStatus(imageStatus);
-            String fileName = generateRandomFilename(ossRequest) + ".jpg";
+            String fileName = null;
+            if(imageStatus<10){
+                fileName = generateRandomFilename(ossRequest) + ".jpg";
+            }else{
+                fileName = generateRandomFilename(ossRequest);
+            }
 
             //调用oss方法实现上传
             //第一个参数  Bucket名称
@@ -388,6 +404,35 @@ public class OssServiceImpl implements OssService {
         }
     }
 
+    @Override
+    public String uploadWithUrl(OssRequest base, String urlString){
+        String path = null;
+        InputStream inputStream = null;
+        try {
+            URL url = new URL(urlString);
+            URLConnection con = url.openConnection();
+            //获取上传文件输入流
+            inputStream =con.getInputStream();
+            path = uploadInputStream(inputStream,base.getImageStatus());
+
+            // 关闭OSSClient。
+            //ossClient.shutdown();
+            return path;
+        } catch (Exception e) {
+
+        }finally {
+            try {
+                if (null != inputStream) {
+                    inputStream.close();
+                }
+            }catch (IOException e){
+
+            }
+            return path;
+        }
+    }
+
+
     public void zipFile(List<String> fileList, ZipOutputStream zipOut,String dir) {
         if (CollectionUtils.isEmpty(fileList)) {
             return;
@@ -448,7 +493,7 @@ public class OssServiceImpl implements OssService {
     @Override
     public void zipPeopleDownload(ClassPeriodStudentExportVo vo, ZipOutputStream outStream) {
         //学时照片
-        List<String> list = iUserStudyRecordPhotoService.selectGradePhoto(vo.getUserId(),vo.getGradeId());
+        List<String> list = iUserStudyRecordPhotoService.selectGradePhoto(vo.getUserId(),vo.getGradeId(),vo.getOrderGoodsId());
         zipFile(list, outStream,vo.getRealName()+"-"+vo.getIdCard()+"-"+vo.getGradeId()+"/"+"学习照片");  //
         //个人资料
         List<String> listInfo = new ArrayList<>();
@@ -467,7 +512,7 @@ public class OssServiceImpl implements OssService {
     @Override
     public void zipPeopleWeekDownload(ClassPeriodStudentExportVo vo, ZipOutputStream outStream, WeekDataVo weekDataVo) {
         //学时照片
-        List<String> list = iUserStudyRecordPhotoService.selectGradePhotoWeek(vo.getUserId(),vo.getGradeId(),weekDataVo.getSearchWeekStartTime(),weekDataVo.getSearchWeekEndTime());
+        List<String> list = iUserStudyRecordPhotoService.selectGradePhotoWeek(vo.getUserId(),vo.getGradeId(),weekDataVo.getSearchWeekStartTime(),weekDataVo.getSearchWeekEndTime(),vo.getOrderGoodsId());
         zipFile(list, outStream,weekDataVo.getWeekCxt()+"/"+vo.getRealName()+"-"+vo.getIdCard()+"-"+vo.getGradeId()+"/"+"学习照片");  //
         //个人资料
         List<String> listInfo = new ArrayList<>();

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

@@ -92,6 +92,12 @@ public class AliSmsServiceImpl implements IAliSmsService {
         try{
             SendSmsResponse response = SmsUtils.sendSms(tel,SIGNNAME,code,param,ACCESSKEYID,ACCESSKEYSECRET);
             if(response.getBody().getMessage().equals("OK")){
+                SmsAddBo smsAddBo = new SmsAddBo();
+                smsAddBo.setCode(param);
+                smsAddBo.setTel(tel);
+                smsAddBo.setType(9L);
+                smsAddBo.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+                iSmsService.insertByAddBo(smsAddBo);
                 return new ResultBean(response);
             }
             return null;

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamAddBo.java

@@ -79,4 +79,7 @@ public class ExamAddBo {
     private ExamSimulateConfigBo simulateConfigJson;
     /** 开启模拟考 1启动(考试类型才能启动) 0关闭 */
     private Integer simulateStatus;
+
+    @ApiModelProperty("商品试卷限制终端学习,多个,拼接  1公众号 2小程序")
+    private String examLimitClient;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamEditBo.java

@@ -99,4 +99,7 @@ public class ExamEditBo {
     private ExamSimulateConfigBo simulateConfigJson;
     /** 开启模拟考 1启动(考试类型才能启动) 0关闭 */
     private Integer simulateStatus;
+
+    @ApiModelProperty("商品试卷限制终端学习,多个,拼接  1公众号 2小程序")
+    private String examLimitClient;
 }

+ 6 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionAddBo.java

@@ -73,6 +73,10 @@ public class QuestionAddBo {
     /** 导入顺序 */
     @ApiModelProperty("导入顺序")
     private Long importSort;
-
-
+    /** 山东题库ID */
+    @ApiModelProperty("山东题库ID")
+    private Long sdQid;
+    /** 来源平台 1自有 2山东 */
+    @ApiModelProperty("来源平台 1自有 2山东")
+    private Integer fromPlat;
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionEditBo.java

@@ -83,4 +83,11 @@ public class QuestionEditBo {
 
     @ApiModelProperty("题目ID")
     private List<Long> questionIds;
+
+    /** 山东题库ID */
+    @ApiModelProperty("山东题库ID")
+    private Long sdQid;
+    /** 来源平台 1自有 2山东 */
+    @ApiModelProperty("来源平台 1自有 2山东")
+    private Integer fromPlat;
 }

+ 45 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionOtherAddBo.java

@@ -0,0 +1,45 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 第三方题库添加对象 question_other
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+@Data
+@ApiModel("第三方题库添加对象")
+public class QuestionOtherAddBo {
+
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+    /** 专业 */
+    @ApiModelProperty("专业")
+    private String majorname;
+    /**  状态 1正常 0关闭 */
+    @ApiModelProperty(" 状态 1正常 0关闭")
+    private Integer status;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private String jsonStr;
+    /** 1 山东题库 */
+    @ApiModelProperty("1 山东题库")
+    private Integer fromPlat;
+    /** 试卷ID */
+    @ApiModelProperty("试卷ID")
+    private Long examId;
+}

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionOtherEditBo.java

@@ -0,0 +1,52 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 第三方题库编辑对象 question_other
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+@Data
+@ApiModel("第三方题库编辑对象")
+public class QuestionOtherEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+    /** 专业 */
+    @ApiModelProperty("专业")
+    private String majorname;
+
+    /**  状态 1正常 0关闭 */
+    @ApiModelProperty(" 状态 1正常 0关闭")
+    private Integer status;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private String jsonStr;
+
+    /** 1 山东题库 */
+    @ApiModelProperty("1 山东题库")
+    private Integer fromPlat;
+
+    /** 试卷ID */
+    @ApiModelProperty("试卷ID")
+    private Long examId;
+}

+ 54 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionOtherQueryBo.java

@@ -0,0 +1,54 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 第三方题库分页查询对象 question_other
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("第三方题库分页查询对象")
+public class QuestionOtherQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 用户ID */
+	@ApiModelProperty("用户ID")
+	private Long userId;
+	/** 专业 */
+	@ApiModelProperty("专业")
+	private String majorname;
+	/**  状态 1正常 0关闭 */
+	@ApiModelProperty(" 状态 1正常 0关闭")
+	private Integer status;
+	/** $column.columnComment */
+	@ApiModelProperty("$column.columnComment")
+	private String jsonStr;
+	/** 1 山东题库 */
+	@ApiModelProperty("1 山东题库")
+	private Integer fromPlat;
+}

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/Exam.java

@@ -76,4 +76,7 @@ private static final long serialVersionUID=1L;
     private ExamSimulateConfigBo simulateConfig;
     @TableField(exist = false)
     private Long oId;
+    /** 商品试卷限制终端学习,多个,拼接  1公众号 2小程序 */
+    @TableField(updateStrategy=FieldStrategy.IGNORED)
+    private String examLimitClient;
 }

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/Question.java

@@ -64,5 +64,8 @@ private static final long serialVersionUID=1L;
     private Long tenantId;
     @TableField(exist = false)
     private Long oId;
-
+    /** 山东题库ID */
+    private Long sdQid;
+    /** 来源平台 1自有 2山东 */
+    private Integer fromPlat;
 }

+ 41 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionOld.java

@@ -0,0 +1,41 @@
+package com.zhongzheng.modules.bank.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 题库题目对象 question
+ *
+ * @author hjl
+ * @date 2021-10-22
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class QuestionOld implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    private String title;
+
+    private Integer scenetype;
+
+    private Integer quiztype;
+
+    private Long SdQid;
+
+    private String analysis;
+
+    private List<QuestionOldOptions> options;
+
+    private List<QuestionOldChild> childlist;
+
+}

+ 36 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionOldChild.java

@@ -0,0 +1,36 @@
+package com.zhongzheng.modules.bank.domain;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 题库题目对象 question
+ *
+ * @author hjl
+ * @date 2021-10-22
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class QuestionOldChild implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    private String title;
+
+    private Integer scenetype;
+
+    private Integer quiztype;
+
+    private Long SdQid;
+
+    private String analysis;
+
+    private List<QuestionOldOptions> options;
+
+
+}

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionOldOptions.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.bank.domain;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 题库题目对象 question
+ *
+ * @author hjl
+ * @date 2021-10-22
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class QuestionOldOptions implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    private String serialnum;
+
+    private Boolean isanswer;
+
+    private String optiontitle;
+
+}

+ 47 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionOther.java

@@ -0,0 +1,47 @@
+package com.zhongzheng.modules.bank.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 第三方题库对象 question_other
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("question_other")
+public class QuestionOther implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 用户ID */
+    private Long userId;
+    /** 专业 */
+    private String majorname;
+    /**  状态 1正常 0关闭 */
+    private Integer status;
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 更新时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** $column.columnComment */
+    private String jsonStr;
+    /** 1 山东题库 */
+    private Integer fromPlat;
+    /** 试卷ID */
+    private Long examId;
+}

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/QuestionMapper.java

@@ -20,6 +20,10 @@ import java.util.List;
  * @date 2021-10-21
  */
 public interface QuestionMapper extends BaseMapper<Question> {
+    List<Long> selectListByBoBackId(QuestionQueryBo bo);
+
+    List<QuestionVo> selectListByBoWithId(QuestionQueryBo bo);
+
     List<QuestionVo> selectListByBo(QuestionQueryBo bo);
 
     List<GoodsUserQuestionVo> listGoodsUserQuestionVo(GoodsQueryBo bo);

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/QuestionOtherMapper.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.bank.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.bank.domain.QuestionOther;
+
+/**
+ * 第三方题库Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+public interface QuestionOtherMapper extends BaseMapper<QuestionOther> {
+
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IExamService.java

@@ -59,4 +59,6 @@ public interface IExamService extends IService<Exam> {
     boolean batchDelExam(QuestionBatchDelBo bo);
 
     Exam getExamByTenant(String code, Long newTenantId);
+
+	boolean getShanDongExam();
 }

+ 55 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionOtherService.java

@@ -0,0 +1,55 @@
+package com.zhongzheng.modules.bank.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.bank.bo.QuestionOtherAddBo;
+import com.zhongzheng.modules.bank.bo.QuestionOtherEditBo;
+import com.zhongzheng.modules.bank.bo.QuestionOtherQueryBo;
+import com.zhongzheng.modules.bank.domain.QuestionOther;
+import com.zhongzheng.modules.bank.vo.QuestionOtherVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 第三方题库Service接口
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+public interface IQuestionOtherService extends IService<QuestionOther> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	QuestionOtherVo queryById(Long id);
+
+	Long queryByUserMajor(Long userId,String majorname);
+
+	/**
+	 * 查询列表
+	 */
+	List<QuestionOtherVo> queryList(QuestionOtherQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入第三方题库
+	 * @param bo 第三方题库新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(QuestionOtherAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改第三方题库
+	 * @param bo 第三方题库编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(QuestionOtherEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 6 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionService.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.bank.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.modules.bank.bo.QuestionAddBo;
 import com.zhongzheng.modules.bank.bo.QuestionBatchDelBo;
 import com.zhongzheng.modules.bank.bo.QuestionEditBo;
@@ -32,7 +33,7 @@ public interface IQuestionService extends IService<Question> {
 	 */
 	QuestionVo queryById(Long questionId);
 
-	List<QuestionVo> selectListByBo(QuestionQueryBo bo);
+	TableDataInfo<QuestionVo> selectListByBo(QuestionQueryBo bo);
 
 
 	List<GoodsUserQuestionVo> listUserFreeGoodsList(GoodsQueryBo bo);
@@ -103,4 +104,8 @@ public interface IQuestionService extends IService<Question> {
 
 
     Question getQuestionByTenant(String code, Long newTenantId);
+
+	String insertByAddBoImport(QuestionAddBo bo, Integer no);
+
+	Long insertByAddBoImportBackId(QuestionAddBo bo, Integer no);
 }

+ 43 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -16,18 +17,18 @@ import com.github.pagehelper.Page;
 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.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.bank.bo.*;
 import com.zhongzheng.modules.bank.domain.Exam;
 import com.zhongzheng.modules.bank.domain.ExamQuestion;
 import com.zhongzheng.modules.bank.domain.QuestionBusiness;
 import com.zhongzheng.modules.bank.domain.QuestionChapterExam;
 import com.zhongzheng.modules.bank.mapper.ExamMapper;
-import com.zhongzheng.modules.bank.service.IExamQuestionService;
-import com.zhongzheng.modules.bank.service.IExamService;
-import com.zhongzheng.modules.bank.service.IQuestionBusinessService;
-import com.zhongzheng.modules.bank.service.IQuestionChapterExamService;
+import com.zhongzheng.modules.bank.service.*;
 import com.zhongzheng.modules.bank.vo.ExamVo;
 import com.zhongzheng.modules.bank.vo.QuestionChapterExamVo;
+import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CourseMenuExam;
 import com.zhongzheng.modules.course.service.ICourseMenuExamService;
 import com.zhongzheng.modules.exam.bo.ExamPaperQueryBo;
@@ -38,6 +39,7 @@ import com.zhongzheng.modules.goods.vo.GoodsAttachedVo;
 import com.zhongzheng.modules.user.bo.CheckUserExamRecordBo;
 import com.zhongzheng.modules.user.service.IUserExamRecordService;
 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;
 
@@ -72,6 +74,11 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     private ExamMapper examMapper;
     @Autowired
     private IUserExamRecordService iUserExamRecordService;
+    @Autowired
+    private IQuestionOtherService iQuestionOtherService;
+
+    @Value("${oldSys.host}")
+    private String OLD_SYS_HOST;
 
     @Override
     public ExamVo queryById(Long examId){
@@ -339,4 +346,36 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     public Exam getExamByTenant(String code, Long newTenantId) {
         return baseMapper.getExamByTenant(code, newTenantId);
     }
+
+    @Override
+    public boolean getShanDongExam() {
+        Long nowTime = DateUtils.getNowTime();
+        String sign = ToolsUtils.EncoderByMd5WithUtf("152301198304206010"+"土建质量员"+nowTime.toString() + "pubilc2022");
+        Map<String,String> map = new HashMap<>();
+        map.put("idnum","152301198304206010");
+        map.put("tenantId","867735392558919680");
+        map.put("username","袁红军");
+        map.put("majorname","土建质量员");
+        map.put("stamp",nowTime.toString());
+        map.put("sign",sign);
+    //    JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(map));
+        String respone = "";
+        String url = OLD_SYS_HOST+"/system/BussinessApi/InitQdyQuiz";
+        try {
+            respone = HttpUtils.postFormBody(url, map);
+            QuestionOtherAddBo addBo = new QuestionOtherAddBo();
+            addBo.setJsonStr(respone);
+            addBo.setFromPlat(1);
+            addBo.setUserId(1L);
+            addBo.setMajorname("土建质量员");
+            iQuestionOtherService.insertByAddBo(addBo);
+            System.out.println(respone);
+            if (!respone.contains("\"msg\":\"获取成功\"")) {
+                throw new CustomException("同步请求错误" + respone);
+            }
+        } catch (Exception e) {
+            throw new CustomException("同步请求错误" + e.getMessage());
+        }
+        return false;
+    }
 }

+ 297 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionOtherServiceImpl.java

@@ -0,0 +1,297 @@
+package com.zhongzheng.modules.bank.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.modules.bank.bo.*;
+import com.zhongzheng.modules.bank.domain.QuestionOld;
+import com.zhongzheng.modules.bank.domain.QuestionOldChild;
+import com.zhongzheng.modules.bank.domain.QuestionOldOptions;
+import com.zhongzheng.modules.bank.domain.QuestionOther;
+import com.zhongzheng.modules.bank.mapper.QuestionOtherMapper;
+import com.zhongzheng.modules.bank.service.IExamService;
+import com.zhongzheng.modules.bank.service.IQuestionOtherService;
+import com.zhongzheng.modules.bank.service.IQuestionService;
+import com.zhongzheng.modules.bank.vo.ExamVo;
+import com.zhongzheng.modules.bank.vo.QuestionOtherVo;
+import com.zhongzheng.modules.course.service.ICourseMenuExamService;
+import com.zhongzheng.modules.order.domain.OrderGoods;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 第三方题库Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+@Service
+public class QuestionOtherServiceImpl extends ServiceImpl<QuestionOtherMapper, QuestionOther> implements IQuestionOtherService {
+
+    @Autowired
+    private IQuestionService iQuestionService;
+
+    @Autowired
+    private IExamService iExamService;
+
+    @Override
+    public QuestionOtherVo queryById(Long id){
+        QuestionOther db = this.baseMapper.selectById(id);
+        JSONObject jsonObject = (JSONObject) JSONObject.parse(db.getJsonStr());
+        List<QuestionOld> qList = JSONArray.parseArray(String.valueOf(jsonObject.get("data")),QuestionOld.class);
+        if (!db.getJsonStr().contains("\"msg\":\"获取成功\"")) {
+            throw new CustomException("同步请求错误");
+        }
+        int i = 1;
+        List<ExamQuestionAddBo> qIdList = new ArrayList<>();
+        for(QuestionOld old : qList){
+            QuestionAddBo childAddBo = new QuestionAddBo();
+            String importNo = ServletUtils.getEncoded("IMPORT");
+            childAddBo.setStatus(1);
+            childAddBo.setContent(old.getTitle());
+            childAddBo.setSdQid(old.getSdQid());
+            childAddBo.setImportNo(importNo);
+            childAddBo.setCreateTime(DateUtils.getNowTime());
+            childAddBo.setCreateBy("admin");
+            childAddBo.setPublishStatus(1);
+            if(old.getQuiztype()==1){
+                childAddBo.setType(1);
+            }
+            else if(old.getQuiztype()==2){
+                childAddBo.setType(2);
+            }
+            else if(old.getQuiztype()==4){
+                childAddBo.setType(3);
+            }
+            else if(old.getQuiztype()==5){
+                childAddBo.setType(4);
+            }
+
+            if(old.getQuiztype()<3){
+                childAddBo.setAnalysisContent(old.getAnalysis());
+                String answerQuestion="";
+                List<QuestionChildAddBo> optionsList = new ArrayList<>();
+                for(QuestionOldOptions options : old.getOptions()){
+                    QuestionChildAddBo addBo = new QuestionChildAddBo();
+                    addBo.setContent(options.getOptiontitle());
+                    addBo.setOptionsId(dealOptions(options.getSerialnum()));
+                    if(options.getIsanswer()){
+                        answerQuestion+=options.getSerialnum();
+                    }
+                    optionsList.add(addBo);
+                }
+                childAddBo.setOptionsList(optionsList);
+                childAddBo.setAnswerQuestion(dealImportAnswer(answerQuestion));
+            }
+            else if(old.getQuiztype()==4){
+                childAddBo.setAnalysisContent(old.getAnalysis());
+                String answerQuestion="";
+                for(QuestionOldOptions options : old.getOptions()){
+                    if(options.getIsanswer()){
+                        if(options.getSerialnum().equals("A")){
+                            answerQuestion = "1";
+                        }else{
+                            answerQuestion = "0";
+                        }
+                    }
+                }
+                childAddBo.setAnswerQuestion(answerQuestion);
+            }
+            else if(old.getQuiztype()==5){
+                List<QuestionChildAddBo> optionsList = new ArrayList<>();
+                for(QuestionOldChild oldChild :old.getChildlist()){
+                    QuestionChildAddBo addBo = new QuestionChildAddBo();
+                    addBo.setContent(oldChild.getTitle());
+                    if(oldChild.getQuiztype()==1){
+                        addBo.setType(1);
+                    }
+                    else if(oldChild.getQuiztype()==2){
+                        addBo.setType(2);
+                    }
+                    else if(oldChild.getQuiztype()==4){
+                        addBo.setType(3);
+                    }
+                    addBo.setAnalysisContent(oldChild.getAnalysis());
+                    if(oldChild.getQuiztype()<3){
+                        String answerQuestion="";
+                        List<QuestionOptionsAddBo> optionsItemList = new ArrayList<>();
+                        for(QuestionOldOptions options : oldChild.getOptions()){
+                            QuestionOptionsAddBo addChildBo = new QuestionOptionsAddBo();
+                            addChildBo.setContent(options.getOptiontitle());
+                            addChildBo.setOptionsId(dealOptions(options.getSerialnum()));
+                            if(options.getIsanswer()){
+                                answerQuestion+=options.getSerialnum();
+                            }
+                            optionsItemList.add(addChildBo);
+                        }
+                        addBo.setOptionsList(optionsItemList);
+                        addBo.setAnswerQuestion(dealImportAnswer(answerQuestion));
+                    }
+                    else if(oldChild.getQuiztype()==4){
+                        String answerQuestion="";
+                        for(QuestionOldOptions options : oldChild.getOptions()){
+                            if(options.getIsanswer()){
+                                if(options.getSerialnum().equals("A")){
+                                    answerQuestion = "1";
+                                }else{
+                                    answerQuestion = "0";
+                                }
+                            }
+                        }
+                        addBo.setAnswerQuestion(answerQuestion);
+                    }
+                    optionsList.add(addBo);
+                }
+                childAddBo.setOptionsList(optionsList);
+            }
+            childAddBo.setFromPlat(2);
+            Long qId = iQuestionService.insertByAddBoImportBackId(childAddBo,i);
+            ExamQuestionAddBo questionAddBo = new ExamQuestionAddBo();
+            questionAddBo.setQuestionId(qId);
+            questionAddBo.setSort(i);
+            qIdList.add(questionAddBo);
+            i++;
+        }
+        ExamAddBo examAddBo = new ExamAddBo();
+        examAddBo.setExamName("七大员新考试卷");
+        examAddBo.setDoType(1);
+        examAddBo.setStatus(1);
+        examAddBo.setPublishStatus(1L);
+        examAddBo.setQuestionList(qIdList);
+        ExamVo examVo = iExamService.insertByAddBo(examAddBo);
+        QuestionOtherEditBo editBo = new QuestionOtherEditBo();
+        editBo.setId(id);
+        editBo.setExamId(examVo.getExamId());
+        updateByEditBo(editBo);
+        return BeanUtil.toBean(db, QuestionOtherVo.class);
+    }
+
+    @Override
+    public Long queryByUserMajor(Long userId, String majorname) {
+        QuestionOther questionOther = getOne(new LambdaQueryWrapper<QuestionOther>()
+                .eq(QuestionOther::getUserId, userId).eq(QuestionOther::getMajorname, majorname)
+                .eq(QuestionOther::getStatus, 1));
+        if(Validator.isNotEmpty(questionOther)){
+            return questionOther.getExamId();
+        }
+        return null;
+    }
+
+    private Long dealOptions(String v) {
+        if ("A".equals(v)) {
+           return 1L;
+        } else if ("B".equals(v)) {
+            return 2L;
+        } else if ("C".equals(v)) {
+            return 3L;
+        } else if ("D".equals(v)) {
+            return 4L;
+        } else if ("E".equals(v)) {
+            return 5L;
+        } else if ("F".equals(v)) {
+            return 6L;
+        }
+        return 99L;
+    }
+
+    private String dealImportAnswer(String Answer) {
+        String[] itemArray = Answer.split("");
+        List<String> list = new ArrayList<>();
+        for (String v : itemArray) {
+            if ("A".equals(v)) {
+                list.add("1");
+            } else if ("B".equals(v)) {
+                list.add("2");
+            } else if ("C".equals(v)) {
+                list.add("3");
+            } else if ("D".equals(v)) {
+                list.add("4");
+            } else if ("E".equals(v)) {
+                list.add("5");
+            } else if ("F".equals(v)) {
+                list.add("6");
+            }
+        }
+        return String.join(",", list);
+    }
+
+    @Override
+    public List<QuestionOtherVo> queryList(QuestionOtherQueryBo bo) {
+        LambdaQueryWrapper<QuestionOther> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getUserId() != null, QuestionOther::getUserId, bo.getUserId());
+        lqw.like(StrUtil.isNotBlank(bo.getMajorname()), QuestionOther::getMajorname, bo.getMajorname());
+        lqw.eq(bo.getStatus() != null, QuestionOther::getStatus, bo.getStatus());
+        lqw.eq(StrUtil.isNotBlank(bo.getJsonStr()), QuestionOther::getJsonStr, bo.getJsonStr());
+        lqw.eq(bo.getFromPlat() != null, QuestionOther::getFromPlat, bo.getFromPlat());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<QuestionOtherVo> entity2Vo(Collection<QuestionOther> collection) {
+        List<QuestionOtherVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, QuestionOtherVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<QuestionOther> page = (Page<QuestionOther>)collection;
+            Page<QuestionOtherVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(QuestionOtherAddBo bo) {
+        QuestionOther add = BeanUtil.toBean(bo, QuestionOther.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(QuestionOtherEditBo bo) {
+        QuestionOther update = BeanUtil.toBean(bo, QuestionOther.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(QuestionOther entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 48 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.bank.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpStatus;
 import com.alibaba.fastjson.JSON;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -12,6 +13,8 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
+import com.github.pagehelper.PageInfo;
+import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
@@ -150,8 +153,22 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
     }
 
     @Override
-    public List<QuestionVo> selectListByBo(QuestionQueryBo bo) {
-        return questionMapper.selectListByBo(bo);
+    public TableDataInfo<QuestionVo> selectListByBo(QuestionQueryBo bo) {
+        TableDataInfo tableDataInfo = new TableDataInfo();
+        List<Long> ids = questionMapper.selectListByBoBackId(bo);
+        if(ids.size()>0){
+            bo.setIds(ids);
+            List<QuestionVo> list = questionMapper.selectListByBoWithId(bo);
+            tableDataInfo.setTotal(new PageInfo(ids).getTotal());
+            tableDataInfo.setRows(list);
+            tableDataInfo.setCode(HttpStatus.HTTP_OK);
+            return tableDataInfo;
+        }else{
+            tableDataInfo.setTotal(new PageInfo(ids).getTotal());
+            tableDataInfo.setRows(ids);
+            tableDataInfo.setCode(HttpStatus.HTTP_OK);
+            return tableDataInfo;
+        }
     }
 
     @Override
@@ -3015,8 +3032,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         return false;
     }
 
-
-    @Transactional(rollbackFor = Exception.class)
+    @Override
     public String insertByAddBoImport(QuestionAddBo bo, Integer no) {
         String errorLog = null;
         Question add = BeanUtil.toBean(bo, Question.class);
@@ -3045,6 +3061,34 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         return errorLog;
     }
 
+    @Override
+    public Long insertByAddBoImportBackId(QuestionAddBo bo, Integer no) {
+        Question add = BeanUtil.toBean(bo, Question.class);
+        add.setCode(ServletUtils.getImportEncoded("TM") + no);
+        if (bo.getOptionsList() != null && bo.getOptionsList().size() > 0) {
+            add.setJsonStr(JSON.toJSONString(bo.getOptionsList()));
+        }
+        /*if(checkNameUnique(add)){
+            errorLog+=bo.getContent()+"-名称重复\n";
+           return errorLog;
+        }*/
+        //    add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        boolean result = this.save(add);
+        if (bo.getBusinessList() != null) {
+            Collection<QuestionBusiness> coll = new HashSet<>();
+            for (int i = 0; i < bo.getBusinessList().size(); i++) {
+                QuestionBusinessAddBo item = bo.getBusinessList().get(i);
+                QuestionBusiness addItem = BeanUtil.toBean(item, QuestionBusiness.class);
+                addItem.setMajorId(add.getQuestionId());
+                addItem.setType(QuestionBusiness.TYPE_QUESTION);
+                coll.add(addItem);
+            }
+            boolean result1 = iQuestionBusinessService.saveBatch(coll);
+        }
+        return add.getQuestionId();
+    }
+
     private boolean checkNameUnique(Question entity) {
         Question info = getOne(new LambdaQueryWrapper<Question>()
                 .eq(Question::getPrefixName, entity.getPrefixName()).eq(Question::getContent, entity.getContent()).ne(Question::getStatus, -1).last("limit 1"));

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/ExamVo.java

@@ -154,5 +154,8 @@ public class ExamVo {
 	@Excel(name = "开启模拟考 1启动(考试类型才能启动) 0关闭")
 	@ApiModelProperty("开启模拟考 1启动(考试类型才能启动) 0关闭")
 	private Integer simulateStatus;
-
+	/** 商品试卷限制终端学习,多个,拼接  1公众号 2小程序 */
+	@Excel(name = "商品试卷限制终端学习,多个,拼接  1公众号 2小程序")
+	@ApiModelProperty("商品试卷限制终端学习,多个,拼接  1公众号 2小程序")
+	private String examLimitClient;
 }

+ 51 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionOtherVo.java

@@ -0,0 +1,51 @@
+package com.zhongzheng.modules.bank.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 第三方题库视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+@Data
+@ApiModel("第三方题库视图对象")
+public class QuestionOtherVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 用户ID */
+	@Excel(name = "用户ID")
+	@ApiModelProperty("用户ID")
+	private Long userId;
+	/** 专业 */
+	@Excel(name = "专业")
+	@ApiModelProperty("专业")
+	private String majorname;
+	/**  状态 1正常 0关闭 */
+	@Excel(name = " 状态 1正常 0关闭")
+	@ApiModelProperty(" 状态 1正常 0关闭")
+	private Integer status;
+	/** $column.columnComment */
+	@Excel(name = " 状态 1正常 0关闭")
+	@ApiModelProperty("$column.columnComment")
+	private String jsonStr;
+	/** 1 山东题库 */
+	@Excel(name = "1 山东题库")
+	@ApiModelProperty("1 山东题库")
+	private Integer fromPlat;
+	/** 试卷ID */
+	@Excel(name = "试卷ID")
+	@ApiModelProperty("试卷ID")
+	private Long examId;
+}

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionVo.java

@@ -130,4 +130,9 @@ public class QuestionVo {
 	@Excel(name = "多选 每项部分分,默认0分则不开启")
 	@ApiModelProperty("多选 每项部分分,默认0分则不开启")
 	private BigDecimal partScore;
+	private Long sdQid;
+	/** 来源平台 1自有 2山东 */
+	@Excel(name = "来源平台 1自有 2山东")
+	@ApiModelProperty("来源平台 1自有 2山东")
+	private Integer fromPlat;
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/UserProfileQueryBo.java

@@ -118,4 +118,13 @@ public class UserProfileQueryBo extends BaseEntity implements Serializable {
 	/** 订单商品ID */
 	@ApiModelProperty("订单商品ID")
 	private Long orderGoodsId;
+
+	@ApiModelProperty("报名开始时间")
+	private Long applyStartTime;
+
+	@ApiModelProperty("报名结束时间")
+	private Long applyEndTime;
+
+	@ApiModelProperty("公司名称")
+	private String companyName;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/IProfileTpService.java

@@ -6,6 +6,8 @@ import com.zhongzheng.modules.base.bo.ProfileTpEditBo;
 import com.zhongzheng.modules.base.bo.ProfileTpQueryBo;
 import com.zhongzheng.modules.base.domain.ProfileTp;
 import com.zhongzheng.modules.base.vo.ProfileTpVo;
+import com.zhongzheng.modules.user.bo.CommitmentSealBo;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Collection;
 import java.util.List;
@@ -56,4 +58,6 @@ public interface IProfileTpService extends IService<ProfileTp> {
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
 	ProfileTpVo queryByGoodsId(Long goodsId);
+
+    boolean commitmentSealUpload(CommitmentSealBo bo);
 }

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
@@ -162,7 +163,10 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         studyRecordQueryBo.setGradeId(bo.getGradeId());
         UserStudyRecordVo studyRecordVo = iUserStudyRecordService.queryLast(studyRecordQueryBo);
         //获取培训结束时间
-        ClassGradeUser classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId, bo.getUserId()).eq(ClassGradeUser::getGradeId,bo.getGradeId()).last("limit 1"));
+        ClassGradeUser classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
+                .eq(ClassGradeUser::getUserId, bo.getUserId())
+                .eq(ObjectUtils.isNotNull(bo.getOrderGoodsId()),ClassGradeUser::getOrderGoodsId, bo.getOrderGoodsId())
+                .eq(ClassGradeUser::getGradeId,bo.getGradeId()).last("limit 1"));
         //获取章列表
         List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(bo);
         UserVo userVo = iUserService.queryById(bo.getUserId());

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ProfileTpServiceImpl.java

@@ -4,10 +4,13 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
+import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.base.bo.ProfileTpAddBo;
@@ -15,14 +18,18 @@ import com.zhongzheng.modules.base.bo.ProfileTpEditBo;
 import com.zhongzheng.modules.base.bo.ProfileTpQueryBo;
 import com.zhongzheng.modules.base.domain.ProfileTp;
 import com.zhongzheng.modules.base.domain.ProfileTpBusiness;
+import com.zhongzheng.modules.base.domain.UserProfile;
 import com.zhongzheng.modules.base.mapper.ProfileTpMapper;
 import com.zhongzheng.modules.base.service.IProfileTpBusinessService;
 import com.zhongzheng.modules.base.service.IProfileTpService;
+import com.zhongzheng.modules.base.service.IUserProfileService;
 import com.zhongzheng.modules.base.vo.ProfileTpVo;
+import com.zhongzheng.modules.user.bo.CommitmentSealBo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -39,6 +46,9 @@ public class ProfileTpServiceImpl extends ServiceImpl<ProfileTpMapper, ProfileTp
     @Autowired
     private IProfileTpBusinessService iProfileTpBusinessService;
 
+    @Autowired
+    private IUserProfileService iUserProfileService;
+
 
     @Override
     public ProfileTpVo queryById(Long profileTpId){
@@ -166,5 +176,47 @@ public class ProfileTpServiceImpl extends ServiceImpl<ProfileTpMapper, ProfileTp
         }
     }
 
+    @Override
+    public boolean commitmentSealUpload(CommitmentSealBo bo) {
+        // 承诺书校验
+        checkCommitentSeal(bo);
+        UserProfile userProfile = iUserProfileService.getById(bo.getId());
+        if (ObjectUtils.isNull(userProfile)){
+            throw new CustomException("学员资料不存在");
+        }
+        if (!userProfile.getUserId().equals(bo.getUserId())){
+            throw new CustomException("当前学员和资料不匹配");
+        }
+        //替换学员承诺书
+        String keyValue = userProfile.getKeyValue();
+        JSONObject jsonObject = JSONObject.parseObject(keyValue);
+        Map<String, Object> userMap = new HashMap<>();
+        for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
+            userMap.put(entry.getKey(), entry.getValue());
+        }
+        String key = "commitment_seal";
+        JSONObject recentJson = JSONObject.parseObject(userMap.get(key).toString());
+        Map<String, Object> recentMap = new HashMap<>();
+        for (Map.Entry<String, Object> entry : recentJson.entrySet()) {
+            recentMap.put(entry.getKey(), entry.getValue());
+        }
+        if (ObjectUtils.isNotNull(recentMap)){
+            recentMap.put("value",bo.getImageUrl());
+        }else {
+            recentMap.put("fieldKey",key);
+            recentMap.put("value",bo.getImageUrl());
+            recentMap.put("fieldName","承诺书盖章");
+            recentMap.put("status",0);
+        }
+        userMap.put(key,recentMap);
+        String content = JSONObject.toJSONString(userMap);
+        userProfile.setKeyValue(content);
+        return iUserProfileService.updateById(userProfile);
+    }
+
+    private void checkCommitentSeal(CommitmentSealBo bo) {
+
+    }
+
 
 }

+ 0 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java

@@ -479,7 +479,6 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         sendAuidit(update);
         if (update.getStatus().equals(1)) {
             //审核通过同步身份证到用户信息
-   //         getUserPicInfo(update);
         }
         //审核承诺书发送消息
     //    sendAuiditSMS(update);

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ShoppingCartVo.java

@@ -70,4 +70,6 @@ public class ShoppingCartVo {
 	private Integer choiceStatus;
 	@ApiModelProperty("班级列表")
 	private List<ClassGradeVo> gradeList;
+	@ApiModelProperty("七大员继教可选年份")
+	private String sevenYear;
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/UserProfileVo.java

@@ -112,4 +112,10 @@ public class UserProfileVo {
 	private Integer typeStatus;
 	/** 订单商品ID */
 	private Long orderGoodsId;
+
+	@ApiModelProperty("报名时间")
+	private Long applyTime;
+
+	@ApiModelProperty("公司名称")
+	private String companyName;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/mapper/CollectQuestionMapper.java

@@ -23,4 +23,6 @@ public interface CollectQuestionMapper extends BaseMapper<CollectQuestion> {
     List<QuestionVo> selectExamQuestionList(CollectQuestionQueryBo bo);
 
     List<CollectQuestionVo> selectTypeNum(CollectQuestionQueryBo bo);
+
+    List<CollectQuestionVo> selectSpecialExam(CollectQuestionQueryBo bo);
 }

+ 7 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/service/impl/CollectQuestionServiceImpl.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.collect.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.bank.vo.QuestionVo;
@@ -67,13 +68,18 @@ public class CollectQuestionServiceImpl extends ServiceImpl<CollectQuestionMappe
                 .eq(CollectQuestion::getGoodsId,goodsId)
                 .last("limit 1"));
         if(Validator.isEmpty(info)){
-            throw new CustomException("没收藏数据");
+            return null;
+//            throw new CustomException("没收藏数据");
         }
         return info;
     }
 
     @Override
     public List<CollectQuestionVo> selectExamList(CollectQuestionQueryBo bo) {
+        if (ObjectUtils.isNotNull(bo.getDoMode()) && bo.getDoMode() == 4){
+            //山东题库
+            return collectQuestionMapper.selectSpecialExam(bo);
+        }
         return collectQuestionMapper.selectExamList(bo);
     }
 

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

@@ -53,4 +53,6 @@ public class CourseChapterAddBo {
     /** 导入编号 */
     @ApiModelProperty("导入编号")
     private String importNo;
+    @ApiModelProperty("公共标识:1公共章 0非公共章")
+    private Integer commonSign;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseChapterEditBo.java

@@ -64,4 +64,7 @@ public class CourseChapterEditBo {
     /** 导入编号 */
     @ApiModelProperty("导入编号")
     private String importNo;
+
+    @ApiModelProperty("公共标识:1公共章 0非公共章")
+    private Integer commonSign;
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CoursePhotoLogAddBo.java

@@ -66,4 +66,5 @@ public class CoursePhotoLogAddBo {
     /** 课程ID */
     @ApiModelProperty("课程ID")
     private Long courseId;
+    private Long orderGoodsId;
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CoursePhotoLogQueryBo.java

@@ -62,4 +62,5 @@ public class CoursePhotoLogQueryBo extends BaseEntity {
 	/** 课程ID */
 	@ApiModelProperty("课程ID")
 	private Long courseId;
+	private Long orderGoodsId;
 }

+ 24 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseQueryBo.java

@@ -117,4 +117,28 @@ public class CourseQueryBo extends BaseEntity {
 
 	@ApiModelProperty("1未开始 2未完成 3已完成")
 	private Integer studyStatus;
+
+	/** 旧企业ID */
+	@ApiModelProperty("旧企业ID")
+	private String oldCompanyId;
+
+	/** 旧机构ID */
+	@ApiModelProperty("旧机构ID")
+	private String oldInstitutionId;
+
+	@ApiModelProperty("旧客户ID")
+	private String oldCustomerId;
+
+	/** 身份证号 */
+	@ApiModelProperty("身份证号")
+	private String idCard;
+
+	/** 真实姓名 */
+	@ApiModelProperty("真实姓名")
+	private String realname;
+
+	@ApiModelProperty("查询标识:1 PC学习列表")
+	private Integer querySign;
+
+	private List<Long> orderGoodsIds;
 }

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

@@ -52,5 +52,7 @@ private static final long serialVersionUID=1L;
 
     @TableField(exist = false)
     private Long oId;
+    /** 公共标识:1公共章 0非公共章 */
+    private String commonSign;
 
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CoursePhotoLog.java

@@ -60,4 +60,5 @@ private static final long serialVersionUID=1L;
     private String timeInterval;
     /** 课程ID */
     private Long courseId;
+    private Long orderGoodsId;
 }

+ 6 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseChapterSectionMapper.java

@@ -30,22 +30,22 @@ public interface CourseChapterSectionMapper extends BaseMapper<CourseChapterSect
     List<CourseUserChapterSectionVo> sectionExamList(CourseMenuQueryBo bo);
 
     Integer rebuildCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
-                         @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
+                         @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
     Integer learningCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
-                          @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
+                          @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
     Integer auditCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
-                       @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
+                       @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
     Integer learningExamCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
-                          @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
+                          @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
     Integer learningSectionExamCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
-                              @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("sectionId") Long sectionId);
+                              @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("sectionId") Long sectionId,@Param("orderGoodsId") Long orderGoodsId);
 
     Long getStudyDuration(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
-                          @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
+                          @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
     @InterceptorIgnore(tenantLine = "true")
     void deleteByIdAndTenant(@Param("chapterId") Long chapterId,@Param("newTenantId") Long newTenantId);

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseFileMapper.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.course.domain.CourseFile;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * 文件Mapper接口
  *

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseHandoutsBusinessMapper.java

@@ -1,7 +1,11 @@
 package com.zhongzheng.modules.course.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.zhongzheng.modules.course.domain.CourseHandoutsBusiness;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 讲义关联业务Mapper接口
@@ -10,5 +14,4 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @date 2021-11-02
  */
 public interface CourseHandoutsBusinessMapper extends BaseMapper<CourseHandoutsBusiness> {
-
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseHandoutsMapper.java

@@ -40,4 +40,9 @@ public interface CourseHandoutsMapper extends BaseMapper<CourseHandouts> {
     @InterceptorIgnore(tenantLine = "true")
     void removeHandoutsFile(@Param("handoutsId") Long handoutsId,@Param("tenantId") Long tenantId);
 
+    @InterceptorIgnore(tenantLine = "true")
+    List<CourseHandouts> getHandoutsListByTenant(@Param("encoder") String encoder,@Param("handoutsName") String handoutsName,@Param("tenantId") Long tenantId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    void removeHandoutsRecord(@Param("handoutsId")Long handoutsId,@Param("tenantId") Long tenantId);
 }

+ 12 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.course.mapper;
 
 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.pagehelper.Page;
 import com.zhongzheng.modules.course.bo.CourseQueryBo;
 import com.zhongzheng.modules.course.domain.Course;
 import com.zhongzheng.modules.course.vo.CourseUserVo;
@@ -12,6 +13,8 @@ import com.zhongzheng.modules.goods.vo.GoodsPeriodVo;
 import com.zhongzheng.modules.goods.vo.GoodsUserVo;
 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.UserPlanQueryBo;
 import org.apache.ibatis.annotations.Param;
 
@@ -36,6 +39,8 @@ public interface CourseMapper extends BaseMapper<Course> {
 
     List<GoodsUserVo> goodsList(CourseQueryBo bo);
 
+    List<GoodsUserVo> goodsStudyProgressList(CourseQueryBo bo);
+
     List<GoodsUserVo> goodsHandoutsList(CourseQueryBo bo);
 
     List<CourseUserVo> courseList(CourseQueryBo bo);
@@ -45,7 +50,7 @@ public interface CourseMapper extends BaseMapper<Course> {
     Long rebuildNext(ClassGradeUserQueryBo bo);
 
     //不传班级可能出现用户重复购买情况
-    ClassGradeVo gradeIdSelect(@Param("userId") Long userId, @Param("goodsId") Long goodsId, @Param("gradeId") Long gradeId);
+    ClassGradeVo gradeIdSelect(@Param("userId") Long userId, @Param("goodsId") Long goodsId, @Param("gradeId") Long gradeId, @Param("orderGoodsId") Long orderGoodsId);
 
     @InterceptorIgnore(tenantLine = "true")
     ClassGradeVo gradeIdSelectTenant(@Param("userId") Long userId, @Param("goodsId") Long goodsId, @Param("gradeId") Long gradeId,@Param("tenantId") Long tenantId);
@@ -64,4 +69,10 @@ public interface CourseMapper extends BaseMapper<Course> {
 
     @InterceptorIgnore(tenantLine = "true")
     Long getCourseByTenantTwo(@Param("courseName") String courseName,@Param("code") String code,@Param("tenantId") Long tenantId);
+
+    List<SpecialQuestionVo> getSpecialQuestionList(SpecialQuestionBo bo);
+
+    Long getSpecialQuestionCount(SpecialQuestionBo bo);
+
+    List<Long> getOrderGoodsIds(CourseQueryBo bo);
 }

+ 7 - 7
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMenuMapper.java

@@ -21,19 +21,19 @@ public interface CourseMenuMapper extends BaseMapper<CourseMenu> {
 
     List<CourseUserMenuVo> menuList(CourseMenuQueryBo bo);
 
-    Integer rebuildCheck(@Param("sectionId") Long id,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId);
+    Integer rebuildCheck(@Param("sectionId") Long id,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
-    Integer rebuildSectionCheck(@Param("sectionId") Long id,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId);
+    Integer rebuildSectionCheck(@Param("sectionId") Long id,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
-    Integer rebuildChapterCheck(@Param("chapterId")Long id,@Param("gradeId") Long gradeId,@Param("userId") Long userId,@Param("courseId")Long courseId);
+    Integer rebuildChapterCheck(@Param("chapterId")Long id,@Param("gradeId") Long gradeId,@Param("userId") Long userId,@Param("courseId")Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
-    Integer rebuildModuleCheck(@Param("moduleId")Long id,@Param("gradeId") Long gradeId,@Param("userId") Long userId,@Param("courseId")Long courseId);
+    Integer rebuildModuleCheck(@Param("moduleId")Long id,@Param("gradeId") Long gradeId,@Param("userId") Long userId,@Param("courseId")Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
-    Integer learningCheck(@Param("sectionId") Long id,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId);
+    Integer learningCheck(@Param("sectionId") Long id,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
-    Long getStudyDuration(@Param("sectionId") Long id,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId);
+    Long getStudyDuration(@Param("sectionId") Long id,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
-    Integer auditCheck(@Param("sectionId") Long id,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId);
+    Integer auditCheck(@Param("sectionId") Long id,@Param("gradeId") Long gradeId,@Param("userId")Long userId,@Param("courseId")Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
     List<CourseUserMenuVo> getGoodsMenuList(CourseMenuQueryBo bo);
 

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseModuleChapterMapper.java

@@ -21,12 +21,12 @@ public interface CourseModuleChapterMapper extends BaseMapper<CourseModuleChapte
 
     List<CourseUserModuleChapterVo> chapterList(CourseMenuQueryBo bo);
 
-    Integer rebuildChapterCheck(@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("gradeId") Long gradeId,@Param("userId") Long userId,@Param("examId") Long examId);
+    Integer rebuildChapterCheck(@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("gradeId") Long gradeId,@Param("userId") Long userId,@Param("examId") Long examId,@Param("orderGoodsId") Long orderGoodsId);
 
     List<CourseUserModuleChapterVo> examList(CourseMenuQueryBo bo);
 
     Integer learningExamCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
-                              @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
+                              @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("orderGoodsId") Long orderGoodsId);
 
     @InterceptorIgnore(tenantLine = "true")
     void deleteByIdAndTenant(@Param("newModuleId") Long newModuleId,@Param("newTenantId") Long newTenantId);

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseHandoutsService.java

@@ -60,4 +60,6 @@ public interface ICourseHandoutsService extends IService<CourseHandouts> {
     List<Long> getGoodsIds(Long handoutsId, Long tenantId);
 
 	void removeHandouts(Long handoutsId, Long tenantId);
+
+    List<CourseHandouts> getHandoutsListByTenant(String encoder, String handoutsName, Long tenantId);
 }

+ 12 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseService.java

@@ -14,11 +14,14 @@ import com.zhongzheng.modules.goods.vo.GoodsUserVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 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.UserPlanQueryBo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 课程Service接口
@@ -74,6 +77,10 @@ public interface ICourseService extends IService<Course> {
 
     List<GoodsUserVo> goodsList(CourseQueryBo bo);
 
+	TableDataInfo<GoodsUserVo> goodsListPage(CourseQueryBo bo);
+
+	List<GoodsUserVo> goodsStudyProgressList(CourseQueryBo bo);
+
 	List<GoodsUserVo> goodsHandoutsList(CourseQueryBo bo);
 
 	List<CourseUserVo> courseList(CourseQueryBo bo);
@@ -98,4 +105,9 @@ public interface ICourseService extends IService<Course> {
 
 	Long getLiveTime();
 
+    List<SpecialQuestionVo> getSpecialQuestionList(SpecialQuestionBo bo);
+
+    Long getSpecialQuestionCount(SpecialQuestionBo bo);
+
+	Map<String,String> getSpecialQuestionSkipCode(Long userId);
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseBusinessServiceImpl.java

@@ -62,6 +62,9 @@ public class CourseBusinessServiceImpl extends ServiceImpl<CourseBusinessMapper,
             if(fullName.equals("继续教育二级建造师")||fullName.equals("继续教育二级造价师")||fullName.equals("考前培训七大员施工现场专业人员")){
                 vo.setGoodsLearningOrder(2);
             }
+            if(fullName.contains("继续教育")&&fullName.contains("施工现场专业人员")){
+                vo.setGoodsLearningOrder(2);
+            }
         }
         return BeanUtil.toBean(vo, CourseBusinessVo.class);
     }

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů