Bladeren bron

Merge branch 'dev'

# Conflicts:
#	zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
#	zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
#	zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UpdateGoodsRepairBo.java
#	zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
#	zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
#	zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
#	zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
#	zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java
#	zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
#	zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
yangdamao 2 jaren geleden
bovenliggende
commit
1199645602
100 gewijzigde bestanden met toevoegingen van 2689 en 503 verwijderingen
  1. 1 0
      run-dev.sh
  2. 1 0
      run-pre.sh
  3. 1 0
      run-prod.sh
  4. 1 0
      run-trial.sh
  5. 35 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  6. 4 2
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  7. 2 3
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  8. 11 1
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsRefundController.java
  9. 7 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/system/SysUserController.java
  10. 0 0
      zhongzheng-admin/src/main/resources/config/1342013901/apiclient_cert.p12
  11. BIN
      zhongzheng-admin/src/main/resources/config/1637492608/apiclient_cert.p12
  12. 39 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonController.java
  13. 10 5
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  14. 4 6
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserExamWrongRecordController.java
  15. 8 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxLoginController.java
  16. 0 0
      zhongzheng-api/src/main/resources/config/1342013901/apiclient_cert.p12
  17. BIN
      zhongzheng-api/src/main/resources/config/1637492608/apiclient_cert.p12
  18. 1 2
      zhongzheng-common/src/main/java/com/zhongzheng/common/config/WxSmallConfig.java
  19. 1 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/SysUser.java
  20. 3 2
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/redis/RedisCache.java
  21. 1 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/type/EncryptHandler.java
  22. 17 5
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  23. 6 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/http/HttpUtils.java
  24. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CustomTenantLineHandler.java
  25. 21 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysTenantServiceImpl.java
  26. 32 29
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  27. 17 11
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  28. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamSimulateAddBo.java
  29. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamSimulateConfigBo.java
  30. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamSimulateEditBo.java
  31. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamSimulateQueryBo.java
  32. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/ExamSimulate.java
  33. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/ExamSimulateMapper.java
  34. 88 11
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamSimulateServiceImpl.java
  35. 10 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionVo.java
  36. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ConfigQueryBo.java
  37. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/bo/CollectQuestionQueryBo.java
  38. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/service/impl/CollectQuestionServiceImpl.java
  39. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UpdateGoodsRepairBo.java
  40. 10 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserGoodsListAllBo.java
  41. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java
  42. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  43. 165 145
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  44. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsPeriodVo.java
  45. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeOpenBo.java
  46. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeOpenUpBo.java
  47. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserAddBo.java
  48. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserEditBo.java
  49. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java
  50. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/ClassGradeInterface.java
  51. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/ClassGradeUser.java
  52. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeInterfaceMapper.java
  53. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  54. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeInterfaceService.java
  55. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeInterfaceServiceImpl.java
  56. 142 98
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  57. 6 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  58. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  59. 13 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeUserVo.java
  60. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/inform/domain/InformRemind.java
  61. 42 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/inform/service/impl/InformSysUserServiceImpl.java
  62. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/inform/vo/InformSysUserVo.java
  63. 21 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/service/impl/MockApplyServiceImpl.java
  64. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/vo/MockApplyVo.java
  65. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderGoodsMapper.java
  66. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderGoodsRefundMapper.java
  67. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsRefundService.java
  68. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsService.java
  69. 138 28
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java
  70. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java
  71. 141 138
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  72. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsRefundVo.java
  73. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsVo.java
  74. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
  75. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysNginxConfigAddBo.java
  76. 71 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantAddBo.java
  77. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantAdminBo.java
  78. 72 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantEditBo.java
  79. 72 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantQueryBo.java
  80. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/domain/SysTenant.java
  81. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/mapper/SysTenantMapper.java
  82. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/ISysTenantService.java
  83. 20 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/ISysWebService.java
  84. 24 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/impl/SysConfigServiceImpl.java
  85. 456 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/impl/SysWebServiceImpl.java
  86. 102 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysTenantRegisterAddBo.java
  87. 104 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysTenantRegisterEditBo.java
  88. 100 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysTenantRegisterQueryBo.java
  89. 75 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/domain/TopSysTenantRegister.java
  90. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/mapper/TopSysTenantRegisterMapper.java
  91. 54 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/service/ITopSysTenantRegisterService.java
  92. 182 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/service/impl/TopSysTenantRegisterServiceImpl.java
  93. 107 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/vo/TopSysTenantRegisterVo.java
  94. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserAppRegisterBo.java
  95. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserExamRecordQueryBo.java
  96. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserExamWrongRecordQueryBo.java
  97. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserMockRecordAddBo.java
  98. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserMockRecordEditBo.java
  99. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserMockSubscribeAddBo.java
  100. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserMockSubscribeEditBo.java

+ 1 - 0
run-dev.sh

@@ -66,6 +66,7 @@ docker run \
 -v /usr/share/fonts:/usr/share/fonts \
 -v /data/logs/dev_admin:/logs \
 -v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
 

+ 1 - 0
run-pre.sh

@@ -68,6 +68,7 @@ docker run \
 -v /usr/share/fonts:/usr/share/fonts \
 -v /data/logs/pre_admin:/logs \
 -v /mydata-pre/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
 

+ 1 - 0
run-prod.sh

@@ -64,6 +64,7 @@ docker run \
 -v /usr/share/fonts:/usr/share/fonts \
 -v /data/logs/prod_admin:/logs \
 -v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
 

+ 1 - 0
run-trial.sh

@@ -62,6 +62,7 @@ docker run \
 -v /usr/share/fonts:/usr/share/fonts \
 -v /data/logs/trial_admin:/logs \
 -v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
 

+ 35 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -16,6 +16,7 @@ import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.config.ServerConfig;
 import com.zhongzheng.framework.web.service.WxLoginService;
+import com.zhongzheng.modules.base.bo.ConfigQueryBo;
 import com.zhongzheng.modules.course.vo.CourseMenuVo;
 import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
 import com.zhongzheng.modules.goods.bo.GoodsStudyUrlBo;
@@ -35,11 +36,15 @@ import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.service.impl.OrderServiceImpl;
+import com.zhongzheng.modules.system.bo.SysNginxConfigAddBo;
 import com.zhongzheng.modules.system.bo.SysTenantAdminBo;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.system.service.ISysWebService;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterAddBo;
+import com.zhongzheng.modules.top.service.ITopSysTenantRegisterService;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.vo.UserExportVo;
 import com.zhongzheng.modules.wx.bo.WxShareGoodsBo;
@@ -97,6 +102,10 @@ public class CommonController
     private ISysTenantService iSysTenantService;
     @Autowired
     private IUserService iUserService;
+    @Autowired
+    private  ITopSysTenantRegisterService iTopSysTenantRegisterService;
+    @Autowired
+    private  ISysWebService webService;
     /**
      * 通用下载请求
      *
@@ -344,4 +353,30 @@ public class CommonController
                 .map(item -> BeanUtil.toBean(item, SysTenantVo.class)).collect(Collectors.toList());
         return AjaxResult.success(collect);
     }
+
+    @ApiOperation("机构注册开通")
+    @PostMapping("common/free/tenant/register")
+    public AjaxResult tenantRegister(@RequestBody TopSysTenantRegisterAddBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            return AjaxResult.error("签名错误");
+        }
+        return AjaxResult.success("成功",iTopSysTenantRegisterService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("重启服务restart")
+    @PostMapping("common/free/webRestart")
+    public AjaxResult<Void> webRestart(@RequestBody ConfigQueryBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            return AjaxResult.error("签名错误");
+        }
+        webService.restartWebService();
+        return AjaxResult.success();
+    }
+
+   /* @ApiOperation("nginx配置")
+    @PostMapping("common/free/configNginxFile")
+    public AjaxResult<Void> configNginxFile(@RequestBody SysNginxConfigAddBo bo) {
+        iTopSysTenantRegisterService.test(new TopSysTenantRegisterAddBo());
+        return AjaxResult.success();
+    }*/
 }

+ 4 - 2
zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsController.java

@@ -357,12 +357,14 @@ public class GoodsController extends BaseController {
         return toAjax(iGoodsService.goodsBatchCopyDisposeTenant() ? 1 : 0);
     }
 
+
     /**
-     * 修改商品课程关联
+     * 修复二建/二造商品(注意不接页面,自己使用)
      */
-    @ApiOperation("修改商品课程关联")
+    @ApiOperation("修复二建/二造商品")
     @PostMapping("/update/goods/repair")
     public AjaxResult<Void> updateGoodsRepair(@RequestBody UpdateGoodsRepairBo bo) {
         return toAjax(iGoodsService.updateGoodsRepair(bo) ? 1 : 0);
     }
+
 }

+ 2 - 3
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -371,10 +371,9 @@ public class ClassGradeController extends BaseController {
     @GetMapping("/select")
     public AjaxResult<Integer> select(ClassGradeAddBo bo) {
         //自己公司的TenantId出现选择官方接口
-        List<String> tenantIds = Arrays.asList("867735392558919680", "567735392758918520");
 //        boolean tenantId = ServletUtils.getRequest().getHeader("TenantId").equals("867735392558919680");
-        boolean tenantId = tenantIds.contains(ServletUtils.getRequest().getHeader("TenantId"));
-        return AjaxResult.success(tenantId ? 1 : 0);
+//        return AjaxResult.success(tenantId ? 1 : 0);
+        return AjaxResult.success(1);
     }
 
     /**

+ 11 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsRefundController.java

@@ -51,10 +51,20 @@ public class OrderGoodsRefundController extends BaseController {
     @GetMapping("/list")
     public TableDataInfo<OrderGoodsRefundVo> list(OrderGoodsRefundQueryBo bo) {
         startPage();
-        List<OrderGoodsRefundVo> list = iOrderGoodsRefundService.selectList(bo);
+        List<OrderGoodsRefundVo> list = iOrderGoodsRefundService.selectListByQuery(bo);
         return getDataTable(list);
     }
 
+    /**
+     * 查询订单商品退款列表
+     */
+    @ApiOperation("查询退款订单所有商品信息")
+    @GetMapping("/listAll/goods")
+    public AjaxResult<List<OrderGoodsRefundVo>> listByOrderSn(OrderGoodsRefundQueryBo bo) {
+        List<OrderGoodsRefundVo> list = iOrderGoodsRefundService.listByOrderSn(bo);
+        return AjaxResult.success(list);
+    }
+
 
 
     /**

+ 7 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/system/SysUserController.java

@@ -21,6 +21,7 @@ import com.zhongzheng.common.exception.user.UserPasswordNotMatchException;
 import com.zhongzheng.common.utils.MessageUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.manager.AsyncManager;
 import com.zhongzheng.framework.manager.factory.AsyncFactory;
@@ -163,6 +164,9 @@ public class SysUserController extends BaseController
             return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
         user.setCreateBy(SecurityUtils.getUsername());
+        if(!ToolsUtils.verifPwd(user.getPassword())){
+            throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
+        }
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         return toAjax(userService.insertUser(user));
     }
@@ -216,6 +220,9 @@ public class SysUserController extends BaseController
                 }
 
             }
+            if(!ToolsUtils.verifPwd(user.getPassword())){
+                throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
+            }
             user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         }
         user.setUpdateBy(SecurityUtils.getUsername());

+ 0 - 0
zhongzheng-admin/src/main/resources/config/apiclient_cert.p12 → zhongzheng-admin/src/main/resources/config/1342013901/apiclient_cert.p12


BIN
zhongzheng-admin/src/main/resources/config/1637492608/apiclient_cert.p12


+ 39 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonController.java

@@ -26,7 +26,10 @@ import com.zhongzheng.modules.goods.vo.GoodsSpecTemplateVo;
 import com.zhongzheng.modules.goods.vo.GoodsUserVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.order.domain.Printer;
+import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
 import com.zhongzheng.modules.system.service.ISysConfigService;
+import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.system.service.ISysWebService;
 import com.zhongzheng.modules.wx.bo.WxInfoBo;
 import com.zhongzheng.modules.wx.bo.WxInfoQuery;
 import com.zhongzheng.modules.wx.bo.WxServerBody;
@@ -61,6 +64,7 @@ public class CommonController extends BaseController {
     private final ISysConfigService configService;
 
 
+
     @Autowired
     private RedisCache redisCache;
 
@@ -68,6 +72,8 @@ public class CommonController extends BaseController {
 
     private final IGoodsSpecTemplateService iGoodsSpecTemplateService;
 
+    private final ISysTenantService iSysTenantService;
+
     /**
      * 获取微信小程序信息(网页跳转小程序)
      */
@@ -230,4 +236,37 @@ public class CommonController extends BaseController {
         return MessageUtil.autoReply(allMessage, ContentEnum.CONTENT_NONSUPPORT.getContent());
     }
 
+    /**
+     * 获取企业ID
+     */
+    @ApiOperation("获取企业ID")
+    @GetMapping("/findTenantId")
+    public AjaxResult<String> findTenantId(SysTenantQueryBo bo) {
+        Long tenantId = iSysTenantService.findTenantId(bo);
+        if(Validator.isNotEmpty(tenantId)){
+            return AjaxResult.success("成功",tenantId.toString());
+        }else{
+            if(Validator.isNotEmpty(bo.getHostH5())&&bo.getHostH5().equals("120.79.166.78:19012")){
+                return AjaxResult.success("成功","867735392558919680");
+            }
+            if(Validator.isNotEmpty(bo.getHostLive())&&bo.getHostLive().equals("120.79.166.78:19012")){
+                return AjaxResult.success("成功","867735392558919680");
+            }
+            if(Validator.isNotEmpty(bo.getHostPc())&&bo.getHostPc().equals("120.79.166.78:19012")){
+                return AjaxResult.success("成功","867735392558919680");
+            }
+            return AjaxResult.error("失败",null);
+        }
+    }
+
+    @ApiOperation("移动端配置参数")
+    @GetMapping("/mobileConfig")
+    public AjaxResult<Map<String,Object>> mobileConfig(ConfigQueryBo bo) {
+        Map<String,Object> map = new HashMap<>();
+        String json = configService.selectConfigByKey("home.mobile");
+        map.put("mobileConfig",json);
+        return AjaxResult.success(map);
+    }
+
+
 }

+ 10 - 5
zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java

@@ -123,20 +123,23 @@ public class GoodsController extends BaseController {
         CollectQuestionQueryBo collectQuestionQueryBo = new CollectQuestionQueryBo();
         collectQuestionQueryBo.setOrderGoodsId(orderGoodsId);
         collectQuestionQueryBo.setUserId(loginUser.getUser().getUserId());
-        collectQuestionQueryBo.setDoMode(1L);
+        List<Long> listMode = new ArrayList<>();
+        listMode.add(1L);
+        listMode.add(3L);
+        collectQuestionQueryBo.setDoModes(listMode);
         Integer collectNum = iCollectQuestionService.collectNum(collectQuestionQueryBo);
         numMap.put("collectNum",collectNum);
 
         UserExamRecordQueryBo userExamRecordQueryBo = new UserExamRecordQueryBo();
         userExamRecordQueryBo.setOrderGoodsId(orderGoodsId);
         userExamRecordQueryBo.setUserId(loginUser.getUser().getUserId());
-        userExamRecordQueryBo.setDoMode(1L);
+        userExamRecordQueryBo.setDoModes(listMode);
         Long doNum = iUserExamRecordService.selectDoNum(userExamRecordQueryBo);
         numMap.put("doNum",doNum);
 
         userExamRecordQueryBo.setOrderGoodsId(orderGoodsId);
         userExamRecordQueryBo.setUserId(loginUser.getUser().getUserId());
-        userExamRecordQueryBo.setDoMode(1L);
+
         Long rightNum = iUserExamRecordService.selectRightNum(userExamRecordQueryBo);
         numMap.put("rightNum",rightNum);
         OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>()
@@ -325,10 +328,12 @@ public class GoodsController extends BaseController {
      */
     @ApiOperation("获取用户所有购买商品")
     @PostMapping("/user/all")
-    public AjaxResult<List<GoodsListAllVo>> getUserGoodsListAll(@RequestBody UserGoodsListAllBo bo) {
+    public TableDataInfo<GoodsListAllVo> getUserGoodsListAll(@RequestBody UserGoodsListAllBo bo) {
+        startPage();
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
-        return AjaxResult.success(iGoodsService.getUserGoodsListAll(bo));
+        List<GoodsListAllVo> result = iGoodsService.getUserGoodsListAll(bo);
+        return getDataTable(result);
     }
 
 

+ 4 - 6
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserExamWrongRecordController.java

@@ -118,13 +118,11 @@ public class UserExamWrongRecordController extends BaseController {
 
 
     @ApiOperation("获取用户报告错题数")
-    @GetMapping("/wrongNum/{recordId}")
-    public AjaxResult<Long> wrongNum(@PathVariable("recordId" ) Long recordId) {
+    @GetMapping("/wrongNum")
+    public AjaxResult<Long> wrongNum(UserExamWrongRecordQueryBo bo) {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
-        UserExamWrongRecordQueryBo wBo = new UserExamWrongRecordQueryBo();
-        wBo.setRecordId(recordId);
-        wBo.setUserId(loginUser.getUser().getUserId());
-        return AjaxResult.success(iUserExamWrongRecordService.recordNum(wBo));
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iUserExamWrongRecordService.recordNum(bo));
     }
 
     /**

+ 8 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxLoginController.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.controller.wx;
 
 import cn.hutool.core.lang.Validator;
+import com.alibaba.fastjson.JSON;
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.AjaxResult;
@@ -19,6 +20,8 @@ import com.zhongzheng.modules.wx.bo.WxLoginBody;
 import com.zhongzheng.modules.wx.bo.WxShareGoodsBo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -43,6 +46,7 @@ public class WxLoginController
     private  IUserService iUserService;
     @Autowired
     private  RedisCache redisCache;
+    private static final Logger log = LoggerFactory.getLogger(WxLoginController.class);
 
     /**
      * 登录方法
@@ -99,10 +103,14 @@ public class WxLoginController
     @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秒锁定

+ 0 - 0
zhongzheng-api/src/main/resources/config/apiclient_cert.p12 → zhongzheng-api/src/main/resources/config/1342013901/apiclient_cert.p12


BIN
zhongzheng-api/src/main/resources/config/1637492608/apiclient_cert.p12


+ 1 - 2
zhongzheng-common/src/main/java/com/zhongzheng/common/config/WxSmallConfig.java

@@ -60,11 +60,10 @@ public class WxSmallConfig extends WXPayConfig {
 
     }
 
-    //安全证书放在项目resources写法
     @Override
     public InputStream getCertStream() {
         try {
-            InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("config/apiclient_cert.p12");
+            InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("config/"+getMchID()+"/apiclient_cert.p12");
             this.certData = IOUtils.toByteArray(certStream);
             certStream.close();
         } catch (Exception e) {

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

@@ -83,6 +83,7 @@ public class SysUser implements Serializable
     }
 
     /** 盐加密 */
+    @TableField(exist = false)
     private String salt;
 
     /** 帐号状态(1正常 0停用) */

+ 3 - 2
zhongzheng-common/src/main/java/com/zhongzheng/common/core/redis/RedisCache.java

@@ -5,6 +5,7 @@ import java.util.concurrent.TimeUnit;
 
 import cn.hutool.core.lang.Validator;
 import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -60,7 +61,7 @@ public class RedisCache
     {
         String unionKey = key;
         if(Validator.isNotEmpty(ServletUtils.getRequest())){
-            String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+            String tenantId = ToolsUtils.getTenantId();
             if(Validator.isNotEmpty(tenantId)){
                 unionKey = tenantId + key;
             }
@@ -111,7 +112,7 @@ public class RedisCache
         ValueOperations<String, T> operation = redisTemplate.opsForValue();
         String unionKey = key;
         if(Validator.isNotEmpty(ServletUtils.getRequest())){
-            String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+            String tenantId = ToolsUtils.getTenantId();
             if(Validator.isNotEmpty(tenantId)){
                 unionKey = tenantId + key;
             }

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

@@ -17,7 +17,7 @@ public class EncryptHandler  implements TypeHandler<String> {
 
     private static final byte[] KEYS = "base20230213zzkj".getBytes(StandardCharsets.UTF_8);
 
-    public static final boolean ENCRYPT_STATUS = false; //是否开启字段加密
+    public static final boolean ENCRYPT_STATUS = true; //是否开启字段加密
 
 
 

+ 17 - 5
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java

@@ -1,11 +1,13 @@
 package com.zhongzheng.common.utils;
 
 import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
 import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
 import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
 import com.aliyun.teaopenapi.models.Config;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import io.micrometer.core.lang.NonNull;
+import net.sf.jsqlparser.expression.LongValue;
 
 import java.io.*;
 import java.nio.charset.StandardCharsets;
@@ -285,6 +287,9 @@ public class ToolsUtils {
         if(!sign.equals(ToolsUtils.EncoderByMd5(newSign))){
             return false;
         }
+        if((Long.parseLong(stamp)+10L>(DateUtils.getNowTime().longValue()))&&(Long.parseLong(stamp)<(DateUtils.getNowTime().longValue()-10L))){
+            return false;
+        }
         return true;
     }
 
@@ -322,18 +327,25 @@ public class ToolsUtils {
         if(Validator.isEmpty(passWord)){
             return false;
         }
-        if(passWord.length()<6||passWord.length()>18){
+        /*if(passWord.length()<8||passWord.length()>18){
             return false;
-        }
-       /* String regExp = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\\W_!@#$%^&*`~()-+=]+$)(?![0-9\\W_!@#$%^&*`~()-+=]+$)(?![a-zA-Z0-9]+$)(?![a-zA-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9\\W_!@#$%^&*`~()-+=]+$)(?![0-9A-Z\\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\\W_!@#$%^&*`~()-+=]{6,16}$";
+        }*/
+        String regExp = "^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\\d)(?=.*?[!#@*&.])[a-zA-Z\\d!#@*&.]{8,16}$";
         Pattern p = Pattern.compile(regExp);
         Matcher m = p.matcher(passWord);
         if (m.matches()){
             return true;
         } else {
             return false;
-        }*/
-        return true;
+        }
+    }
+
+    public static String getTenantId() {
+        String TenantId = ServletUtils.getRequest().getHeader("TenantId");
+        if(!StrUtil.isNotBlank(TenantId)||TenantId==null){
+            TenantId = ServletUtils.getResponse().getHeader("TenantId");
+        }
+        return TenantId;
     }
 
 }

+ 6 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/http/HttpUtils.java

@@ -486,7 +486,12 @@ public class HttpUtils
         return post(url, httpPost, encoding, new DataParse<String>() {
             @Override
             public String parseData(HttpEntity httpEntity, String encoding) throws IOException {
-                return EntityUtils.toString(httpEntity, encoding);
+                if(Validator.isNotEmpty(httpEntity)){
+                    return EntityUtils.toString(httpEntity, encoding);
+                }else{
+                    return null;
+                }
+
             }
         });
     }

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CustomTenantLineHandler.java

@@ -54,6 +54,7 @@ public class CustomTenantLineHandler implements TenantLineHandler {
         add("columns");
         add("sys_logininfor");
         add("sys_old_org");
+        add("top_sys_tenant_register");
     }};
 
     /**

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

@@ -25,6 +25,7 @@ import com.zhongzheng.modules.system.mapper.SysTenantMapper;
 import com.zhongzheng.modules.system.service.ISysMenuService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.system.service.ISysWebService;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -53,6 +54,9 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
     @Autowired
     private ISysMenuService menuService;
 
+    @Autowired
+    private ISysWebService iSysWebService;
+
     @Override
     public SysTenantVo queryById(Long tenantId){
         SysTenant db = this.baseMapper.selectById(tenantId);
@@ -123,12 +127,18 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void createTenantAdmin(SysTenantAdminBo bo) {
+    public Long createTenantAdmin(SysTenantAdminBo bo) {
+        if(Validator.isEmpty(bo.getTenantName())){
+            throw new CustomException("没有企业名称");
+        }
         //中正后台企业ID
         Long tenantId = 867735392558919680L;
         //设置新机构
         SysTenant sysTenant = getById(tenantId);
         sysTenant.setTenantName(bo.getTenantName());
+        sysTenant.setHostPc(bo.getHostPc());
+        sysTenant.setHostH5(bo.getHostH5());
+        sysTenant.setHostLive(bo.getHostLive());
         //生成tenantId
         Long newTenantId = createTenantId();
         sysTenant.setTenantId(newTenantId);
@@ -139,13 +149,16 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         SysUser admin = userService.selectUserByTenant("admin",tenantId);
         admin.setTenantId(newTenantId);
         admin.setUserId(null);
+        if(Validator.isNotEmpty(bo.getPassword())){
+            admin.setPassword(SecurityUtils.encryptPassword(bo.getPassword()));
+        }
         if (!userService.save(admin)){
             throw new CustomException("创建后台账号失败");
         }
         //创建菜单
         List<SysMenu> list = menuService.listSysMenuByTenant(tenantId);
         if (CollectionUtils.isEmpty(list)){
-            return;
+            return newTenantId;
         }
         List<SysMenu> oldMenus = list.stream().map(item -> BeanUtil.toBean(item, SysMenu.class)).collect(Collectors.toList());
         list.forEach(item -> {
@@ -181,6 +194,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         newMenus.forEach(item -> {
             menuService.updateParentById(item);
         });
+        return newTenantId;
 
     }
 
@@ -225,4 +239,9 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         return true;
     }
 
+    @Override
+    public Long findTenantId(SysTenantQueryBo bo) {
+        return baseMapper.findTenantId(bo);
+    }
+
 }

+ 32 - 29
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -6,7 +6,6 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -16,8 +15,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
 import com.zhongzheng.common.constant.Constants;
-import com.zhongzheng.common.core.domain.AjaxResult;
-import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.enums.UserStatus;
@@ -33,20 +30,11 @@ import com.zhongzheng.modules.collect.domain.CollectNote;
 import com.zhongzheng.modules.collect.mapper.CollectBankMapper;
 import com.zhongzheng.modules.collect.mapper.CollectCourseMapper;
 import com.zhongzheng.modules.collect.mapper.CollectNoteMapper;
-import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
-import com.zhongzheng.modules.course.bo.CourseQueryBo;
 import com.zhongzheng.modules.course.domain.CourseSubject;
-import com.zhongzheng.modules.course.domain.MajorCategory;
-import com.zhongzheng.modules.course.service.ICourseService;
 import com.zhongzheng.modules.course.service.ICourseSubjectService;
-import com.zhongzheng.modules.exam.domain.ExamKnowledge;
-import com.zhongzheng.modules.goods.vo.GoodsUserVo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserGoodsVo;
-import com.zhongzheng.modules.inform.domain.InformSysUser;
-import com.zhongzheng.modules.order.domain.OrderBillGoods;
-import com.zhongzheng.modules.order.domain.OrderGoodsRefund;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.*;
@@ -54,9 +42,7 @@ import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.mapper.UserMapper;
 import com.zhongzheng.modules.user.service.*;
 import com.zhongzheng.modules.user.vo.*;
-import io.swagger.models.auth.In;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -64,7 +50,6 @@ import org.springframework.util.CollectionUtils;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
-import java.sql.Timestamp;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -640,23 +625,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(bo.getTel().length()!=11){
             throw new CustomException("手机号格式错误");
         }
-        /*if(bo.getIdCard()==null){
+        if(bo.getIdcard()==null){
             throw new CustomException("身份证不能为空");
-        }*/
-        /*if(bo.getIdCard().length()!=18){
+        }
+        if(bo.getIdcard().length()!=18){
             throw new CustomException("身份证格式错误");
         }
-        if(bo.getRealname()==null){
-            throw new CustomException("真实姓名不能为空");
-        }*/
+//        if(bo.getRealname()==null){
+//            throw new CustomException("真实姓名不能为空");
+//        }
         User user = getOne(new LambdaQueryWrapper<User>()
                 .eq(User::getTelphone,EncryptHandler.encrypt(bo.getTel())).last("limit 1"));
         if(Validator.isNotNull(user)){
             throw new CustomException("该手机号已注册");
         }
-        if(Validator.isNotEmpty(bo.getIdCard())){
+        if(Validator.isNotEmpty(bo.getIdcard())){
             User user2 = getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getIdCard,EncryptHandler.encrypt(bo.getIdCard())).last("limit 1"));
+                    .eq(User::getIdCard,EncryptHandler.encrypt(bo.getIdcard())).last("limit 1"));
             if(Validator.isNotNull(user2)){
                 throw new CustomException("该身份证已被使用");
             }
@@ -669,7 +654,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         SnowflakeIdUtils idWorker = new SnowflakeIdUtils(3, 1);
         inertData.setUserAccount(String.valueOf(idWorker.nextId()));
         inertData.setSex(1);
-        inertData.setIdCard(bo.getIdCard());
+        inertData.setIdCard(bo.getIdcard());
         inertData.setRealname(bo.getRealname());
         inertData.setStatus(1);
         inertData.setRegisterPlat(bo.getRegisterPlat());
@@ -679,7 +664,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         inertData.setLastLoginTime(DateUtils.getNowTime());
         inertData.setCreateTime(DateUtils.getNowTime());
         inertData.setUpdateTime(DateUtils.getNowTime());
-        String pwd =  ToolsUtils.getSmsCode(); // 随机密码
+//        String pwd =  ToolsUtils.getSmsCode(); // 随机密码
+        String pwd =  bo.getIdcard().substring(bo.getIdcard().length() - 6);
         inertData.setPassword(SecurityUtils.encryptPassword(pwd));
         if(!save(inertData)){
             throw new CustomException("注册失败");
@@ -690,6 +676,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 
     @Override
     public Boolean registerUser(UserAppRegisterBo bo) {
+        if(StringUtils.isBlank(bo.getIdcard())){
+            throw new CustomException("身份证不能为空");
+        }
         if(bo.getTel()==null){
             throw new CustomException("手机号不能为空");
         }
@@ -697,7 +686,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             throw new CustomException("密码不能为空");
         }
         if(!ToolsUtils.verifPwd(bo.getPwd())){
-            throw new CustomException("密码长度为6-18个字符");
+            throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
         }
         String key = Constants.REGISTER_SMS + bo.getTel();
         String code =  redisCache.getCacheObject(key);
@@ -712,8 +701,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(Validator.isNotNull(user)){
             throw new CustomException("该手机号已注册");
         }
+        User userIdCard = getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getIdCard,EncryptHandler.encrypt(bo.getIdcard())).last("limit 1"));
+        if(Validator.isNotNull(userIdCard)){
+            throw new CustomException("该身份证已注册");
+        }
         User inertData = new User();
         inertData.setTelphone(bo.getTel());
+        inertData.setIdCard(bo.getIdcard());
         //隐藏手机号作为初始昵称
         inertData.setNickname(TelPhoneUtils.hideTelPhone(bo.getTel()));
         //雪花算法产生账号ID
@@ -756,11 +751,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 errorList.add(itemImport);
                 continue;
             }
-           /* if(Validator.isEmpty(itemImport.getIdCard())){
+            if(Validator.isEmpty(itemImport.getIdCard())){
                 itemImport.setCause("身份证不能为空");
                 errorList.add(itemImport);
                 continue;
-            }*/
+            }
             if(Validator.isEmpty(itemImport.getRealname())){
                 itemImport.setCause("真实姓名不能为空");
                 errorList.add(itemImport);
@@ -833,7 +828,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             inertData.setLastLoginTime(DateUtils.getNowTime());
             inertData.setCreateTime(DateUtils.getNowTime());
             inertData.setUpdateTime(DateUtils.getNowTime());
-            String pwd =  ToolsUtils.getSmsCode(); // 随机密码
+//            String pwd =  ToolsUtils.getSmsCode(); // 随机密码
+//            inertData.setPassword(SecurityUtils.encryptPassword(pwd));
+            //初始密码(身份证后6位)
+            String idCard = itemImport.getIdCard();
+            String pwd =  idCard.substring(idCard.length() - 6); // 随机密码
             inertData.setPassword(SecurityUtils.encryptPassword(pwd));
             inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
             if(!save(inertData)){
@@ -882,6 +881,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             if(Validator.isEmpty(bo.getTelphone())){
                 throw new CustomException("用户手机号码缺失");
             }
+            if(Validator.isEmpty(bo.getIdCard())){
+                throw new CustomException("用户身份证号码缺失");
+            }
             User user1 = getOne(new LambdaQueryWrapper<User>()
                     .eq(User::getTelphone,EncryptHandler.encrypt(bo.getTelphone())).last("limit 1"));
             //手机号码存在
@@ -909,6 +911,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 }*/
                 UserSystemRegisterBo registerBo = BeanUtil.toBean(bo, UserSystemRegisterBo.class);
                 registerBo.setTel(bo.getTelphone());
+                registerBo.setIdcard(bo.getIdCard());
                 registerBo.setRegisterPlat("4");
                 Long userId = systemRegisterUser(registerBo);
                 if(userId.longValue()>0){

+ 17 - 11
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -245,8 +245,11 @@ public class WxLoginService implements IWxLoginService {
     public Map<String, Object> login(WxLoginBody loginBody) {
         initData();
         User user = getWxUnionIdUser(loginBody);
-        if (user == null) {
-            throw new CustomException("登录错误");
+//        if (user == null) {
+//            throw new CustomException("登录错误");
+//        }
+        if (ObjectUtils.isNull(user)) {
+            throw new CustomException("新用户请先注册!",666);
         }
         //如果活动分销码变动
         if (StringUtils.isNotBlank(loginBody.getShareActivityCode())){
@@ -318,12 +321,13 @@ public class WxLoginService implements IWxLoginService {
      * @param tel
      * @return
      */
-    public Boolean register_small(String openId, String unionId, String tel, String inviteCode, String shareCode) {
+    public Boolean register_small(String openId, String unionId, String tel, String inviteCode, String shareCode,String idCard) {
         initData();
         User bo = new User();
         bo.setOpenId(openId);
         bo.setUnionId(unionId);
         bo.setTelphone(tel);
+        bo.setIdCard(idCard);
         //隐藏手机号作为初始昵称
         bo.setNickname(TelPhoneUtils.hideTelPhone(tel));
         //雪花算法产生账号ID
@@ -337,7 +341,8 @@ public class WxLoginService implements IWxLoginService {
         bo.setLastLoginTime(DateUtils.getNowTime());
         bo.setCreateTime(DateUtils.getNowTime());
         bo.setUpdateTime(DateUtils.getNowTime());
-        String pwd = ToolsUtils.getSmsCode(); // 随机密码
+//        String pwd = ToolsUtils.getSmsCode(); // 随机密码
+        String pwd = idCard.substring(idCard.length() - 6);
         bo.setPassword(SecurityUtils.encryptPassword(pwd));
         if (inviteCode != null) {
             User inviteUser = iUserService.queryByAccount(inviteCode);
@@ -412,13 +417,14 @@ public class WxLoginService implements IWxLoginService {
                 iUserService.updateById(user);
             }
         }
-        if (user == null) {
-            if (!register_small(openId, unionId, phoneNumber, loginBody.getInviteCode(),loginBody.getShareCode())) {
-                throw new CustomException("注册失败");
-            }
-            user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getTelphone, EncryptHandler.encrypt(phoneNumber)).last("limit 1"));
-        }
+        //微信授权登入关闭注册入口
+//        if (user == null) {
+//            if (!register_small(openId, unionId, phoneNumber, loginBody.getInviteCode(),loginBody.getShareCode(),loginBody.getIdCard())) {
+//                throw new CustomException("注册失败");
+//            }
+//            user = iUserService.getOne(new LambdaQueryWrapper<User>()
+//                    .eq(User::getTelphone, EncryptHandler.encrypt(phoneNumber)).last("limit 1"));
+//        }
         return user;
     }
 

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamSimulateAddBo.java

@@ -45,4 +45,8 @@ public class ExamSimulateAddBo {
     /** 试卷类型id */
     @ApiModelProperty("试卷类型id")
     private Long examPaperId;
+
+    /** 1题库商品 2视频商品 3模考商品 */
+    @ApiModelProperty("1题库商品 2视频商品 3模考商品")
+    private Integer from;
 }

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

@@ -26,4 +26,7 @@ public class ExamSimulateConfigBo {
     @ApiModelProperty("案列题")
     private ExamSimulateTypeBo caseQuestion;
 
+    /**  判断题 */
+    @ApiModelProperty("判断题")
+    private ExamSimulateTypeBo trueFalseQuestion;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamSimulateEditBo.java

@@ -54,4 +54,8 @@ public class ExamSimulateEditBo {
     @ApiModelProperty("试卷类型id")
     private Long examPaperId;
 
+    /** 1题库商品 2视频商品 3模考商品 */
+    @ApiModelProperty("1题库商品 2视频商品 3模考商品")
+    private Integer from;
+
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/ExamSimulateQueryBo.java

@@ -69,9 +69,15 @@ public class ExamSimulateQueryBo extends BaseEntity {
 	private Integer qnum;
 	@ApiModelProperty("知识点题目ID数组")
 	private List<Long> knowledQuestionIds;
+	@ApiModelProperty("过滤错题ID数组")
+	private List<Long> wrongQuestionIds;
 
 	@ApiModelProperty("抽题顺序 1顺序 0随机")
 	private Integer randomNum;
 	@ApiModelProperty("模拟做题试卷ID")
 	private Long simulateExamId;
+
+	/** 1题库商品 2视频商品 3模考商品 */
+	@ApiModelProperty("1题库商品 2视频商品 3模考商品")
+	private Integer fromType;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/ExamSimulate.java

@@ -46,4 +46,6 @@ private static final long serialVersionUID=1L;
     private Long orderGoodsId;
     /** 试卷类型id */
     private Long examPaperId;
+    /** 1题库商品 2视频商品 3模考商品 */
+    private Integer fromType;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/ExamSimulateMapper.java

@@ -21,4 +21,6 @@ public interface ExamSimulateMapper extends BaseMapper<ExamSimulate> {
     List<Long> getQuestionList(ExamSimulateQueryBo bo);
 
     List<QuestionVo> queryBatchList(ExamSimulateQueryBo bo);
+
+    List<Long> getWrongQuestionList(ExamSimulateQueryBo bo);
 }

+ 88 - 11
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamSimulateServiceImpl.java

@@ -92,6 +92,7 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
     @Transactional(rollbackFor = Exception.class)
     public ExamSimulateVo insertByAddBo(ExamSimulateAddBo bo) {
         ExamSimulate add = BeanUtil.toBean(bo, ExamSimulate.class);
+        add.setFromType(bo.getFrom());
         Exam exam = iExamService.getOne(new LambdaQueryWrapper<Exam>().eq(Exam::getExamId, bo.getExamId()));
         if(exam.getDoType()!=2||exam.getSimulateStatus()==0){
             throw new CustomException("该试卷没开启模拟随机考");
@@ -108,6 +109,8 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
         qk1Bo.setKnum(simulateConfig.getSingleChoice().getKnum());
         qk1Bo.setRandomNum(simulateConfig.getType());
         qk1Bo.setType(1);
+        qk1Bo.setOrderGoodsId(bo.getOrderGoodsId());
+        qk1Bo.setFromType(bo.getFrom());
         List<Long> qk1 = baseMapper.getKnowledQuestionList(qk1Bo);
 
         ExamSimulateQueryBo qk2Bo = new ExamSimulateQueryBo(); //多选知识点
@@ -116,47 +119,89 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
         qk2Bo.setKnum(simulateConfig.getMultipleChoice().getKnum());
         qk2Bo.setRandomNum(simulateConfig.getType());
         qk2Bo.setType(2);
+        qk2Bo.setOrderGoodsId(bo.getOrderGoodsId());
+        qk2Bo.setFromType(bo.getFrom());
         List<Long> qk2 = baseMapper.getKnowledQuestionList(qk2Bo);
 
         ExamSimulateQueryBo qk3Bo = new ExamSimulateQueryBo(); //案例选知识点
         qk3Bo.setExamId(exam.getExamId());
         qk3Bo.setKnowledIds(simulateConfig.getCaseQuestion().getKnowledIds());
         qk3Bo.setKnum(simulateConfig.getCaseQuestion().getKnum());
-        qk3Bo.setRandomNum(simulateConfig.getType());
         qk3Bo.setType(4);
+        qk3Bo.setOrderGoodsId(bo.getOrderGoodsId());
+        qk3Bo.setFromType(bo.getFrom());
         List<Long> qk3 = baseMapper.getKnowledQuestionList(qk3Bo);
 
+        ExamSimulateQueryBo qk4Bo = new ExamSimulateQueryBo(); //判断题选知识点
+        qk4Bo.setExamId(exam.getExamId());
+        qk4Bo.setKnowledIds(simulateConfig.getTrueFalseQuestion().getKnowledIds());
+        qk4Bo.setKnum(simulateConfig.getTrueFalseQuestion().getKnum());
+        qk4Bo.setType(3);
+        qk4Bo.setOrderGoodsId(bo.getOrderGoodsId());
+        qk4Bo.setFromType(bo.getFrom());
+        List<Long> qk4 = baseMapper.getKnowledQuestionList(qk4Bo);
+
+        List<Long> w1 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getSingleChoice().getQnum()-qk1.size()),qk1,1);//单选错题
+        List<Long> w2 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getMultipleChoice().getQnum()-qk2.size()),qk2,2);//多选错题
+        List<Long> w3 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getCaseQuestion().getQnum()-qk3.size()),qk3,4);//案例错题
+        List<Long> w4 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getTrueFalseQuestion().getQnum()-qk4.size()),qk4,3);//判断错题
+
         ExamSimulateQueryBo q1Bo = new ExamSimulateQueryBo();  //单选
         q1Bo.setExamId(exam.getExamId());
         q1Bo.setKnowledQuestionIds(qk1);
-        q1Bo.setQnum(simulateConfig.getSingleChoice().getQnum()-qk1.size());
+        q1Bo.setWrongQuestionIds(w1);
+        q1Bo.setQnum(simulateConfig.getSingleChoice().getQnum()-qk1.size()-w1.size());
         q1Bo.setRandomNum(simulateConfig.getType());
         q1Bo.setType(1);
+        q1Bo.setOrderGoodsId(bo.getOrderGoodsId());
+        q1Bo.setFromType(bo.getFrom());
         List<Long> q1 = baseMapper.getQuestionList(q1Bo);
 
         ExamSimulateQueryBo q2Bo = new ExamSimulateQueryBo();  //多选
         q2Bo.setExamId(exam.getExamId());
         q2Bo.setKnowledQuestionIds(qk2);
-        q2Bo.setQnum(simulateConfig.getMultipleChoice().getQnum()-qk2.size());
+        q2Bo.setWrongQuestionIds(w2);
+        q2Bo.setQnum(simulateConfig.getMultipleChoice().getQnum()-qk2.size()- w2.size());
         q2Bo.setRandomNum(simulateConfig.getType());
         q2Bo.setType(2);
+        q2Bo.setOrderGoodsId(bo.getOrderGoodsId());
+        q2Bo.setFromType(bo.getFrom());
         List<Long> q2 = baseMapper.getQuestionList(q2Bo);
 
         ExamSimulateQueryBo q3Bo = new ExamSimulateQueryBo();  //案例选
         q3Bo.setExamId(exam.getExamId());
         q3Bo.setKnowledQuestionIds(qk3);
-        q3Bo.setQnum(simulateConfig.getCaseQuestion().getQnum()-qk3.size());
-        q3Bo.setRandomNum(simulateConfig.getType());
+        q3Bo.setWrongQuestionIds(w3);
+        q3Bo.setQnum(simulateConfig.getCaseQuestion().getQnum()-qk3.size()- w3.size());
         q3Bo.setType(4);
+        q3Bo.setOrderGoodsId(bo.getOrderGoodsId());
+        q3Bo.setFromType(bo.getFrom());
         List<Long> q3 = baseMapper.getQuestionList(q3Bo);
 
+        ExamSimulateQueryBo q4Bo = new ExamSimulateQueryBo();  //判断题
+        q4Bo.setExamId(exam.getExamId());
+        q4Bo.setKnowledQuestionIds(qk4);
+        q4Bo.setWrongQuestionIds(w4);
+        q4Bo.setQnum(simulateConfig.getTrueFalseQuestion().getQnum()-qk4.size()- w4.size());
+        q4Bo.setType(3);
+        q4Bo.setOrderGoodsId(bo.getOrderGoodsId());
+        q4Bo.setFromType(bo.getFrom());
+        List<Long> q4 = baseMapper.getQuestionList(q4Bo);
+
+        qk1.addAll(w1);
         qk1.addAll(q1);
+
+        qk2.addAll(w2);
         qk2.addAll(q2);
+
+        qk3.addAll(w3);
         qk3.addAll(q3);
 
+        qk4.addAll(w4);
+        qk4.addAll(q4);
         List<Long> allQ = new ArrayList<>();
         if(simulateConfig.getSingleChoice().getRandomNum()==1){ //题型顺序
-            for(int i=1;i<4;i++){
+            for(int i=1;i<5;i++){
                 if(simulateConfig.getSingleChoice().getOrderNum()==i){
                     allQ.addAll(qk1);
                 }
@@ -166,30 +211,40 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
                 if(simulateConfig.getCaseQuestion().getOrderNum()==i){
                     allQ.addAll(qk3);
                 }
+                if(simulateConfig.getTrueFalseQuestion().getOrderNum()==i){
+                    allQ.addAll(qk4);
+                }
             }
+        //    Collections.reverse(allQ);
         }else{//题型随机
             Map<Integer,Integer> map = new HashMap<>();
             for(int i=1;i<50;i++){
                 int num = (int)(10.0*Math.random()) + 1;
-                if(num%3==0){
+                if(num%4==0){
                     if(!map.containsKey(0)){
                         map.put(0,0);
                         allQ.addAll(qk1);
                     }
                 }
-                if(num%3==1){
+                if(num%4==1){
                     if(!map.containsKey(1)){
                         map.put(1,1);
                         allQ.addAll(qk2);
                     }
                 }
-                if(num%3==2){
+                if(num%4==2){
                     if(!map.containsKey(2)){
                         map.put(2,2);
                         allQ.addAll(qk3);
                     }
                 }
-                if(allQ.size()>=3){
+                if(num%4==3){
+                    if(!map.containsKey(3)){
+                        map.put(3,3);
+                        allQ.addAll(qk4);
+                    }
+                }
+                if(map.size()>=4){
                     break;
                 }
             }
@@ -199,6 +254,9 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
         add.setUpdateTime(DateUtils.getNowTime());
         add.setExamPaperId(exam.getExamPaperId());
         add.setExamName(exam.getExamName()+"-"+ServletUtils.getEncoded(""));
+        if(allQ.size()==0){
+            throw new CustomException("试卷题目已做完");
+        }
         boolean result = this.save(add);
         Collection<ExamSimulateQuestion> coll = new HashSet<>();
         for(int i=0;i<allQ.size();i++){
@@ -209,7 +267,7 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
             coll.add(addItem);
         }
         if(!iExamSimulateQuestionService.saveBatch(coll)){
-            throw new CustomException("试卷绑定错误");
+            throw new CustomException("试卷题目已做完");
         }
         ExamSimulateVo examSimulateVo = BeanUtil.toBean(add, ExamSimulateVo.class);
         ExamSimulateQueryBo questionQueryBo = new ExamSimulateQueryBo();
@@ -254,4 +312,23 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
     public List<QuestionVo> queryBatchList(ExamSimulateQueryBo bo) {
         return this.baseMapper.queryBatchList(bo);
     }
+
+
+    private List<Long> getWrongQuestion(Long orderGoodsId,Long examId,Integer fromType,Integer orderType,Integer maxQnum,List<Long> knowledQuestionIds,Integer qType){
+        if(orderType==2){
+            int num = ((int)(maxQnum*Math.random()) + 1)/2;
+            ExamSimulateQueryBo queryBo = new ExamSimulateQueryBo();
+            queryBo.setOrderGoodsId(orderGoodsId);
+            queryBo.setExamId(examId);
+            queryBo.setFromType(fromType);
+            queryBo.setKnowledQuestionIds(knowledQuestionIds);
+            queryBo.setType(qType);
+            queryBo.setQnum(num);
+            queryBo.setRandomNum(orderType);
+            List<Long> questionlist = baseMapper.getWrongQuestionList(queryBo);
+            return questionlist;
+        }else {
+            return new ArrayList<>();
+        }
+    }
 }

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

@@ -8,6 +8,8 @@ import com.zhongzheng.modules.exam.domain.ExamKnowledge;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -120,4 +122,12 @@ public class QuestionVo {
 	private Long orderGoodsId;
 	@ApiModelProperty("收藏题目ID")
 	private Long collectQuestionId;
+	/** 分值 */
+	@Excel(name = "分值")
+	@ApiModelProperty("分值")
+	private BigDecimal score;
+	/** 多选 每项部分分,默认0分则不开启 */
+	@Excel(name = "多选 每项部分分,默认0分则不开启")
+	@ApiModelProperty("多选 每项部分分,默认0分则不开启")
+	private BigDecimal partScore;
 }

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

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import javax.validation.constraints.NotBlank;
 import java.util.List;
 
 /**
@@ -23,4 +24,12 @@ public class ConfigQueryBo extends BaseEntity {
 	@ApiModelProperty("版本号")
 	private String version;
 
+	@ApiModelProperty("当前时间戳")
+	@NotBlank(message = "当前时间戳不能为空")
+	private Long stamp;
+
+	@ApiModelProperty("签名")
+	@NotBlank(message = "签名不能为空")
+	private String sign;
+
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/bo/CollectQuestionQueryBo.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 
@@ -64,4 +65,7 @@ public class CollectQuestionQueryBo extends BaseEntity {
 	/** 做题模式 1章卷 2随机练习 */
 	@ApiModelProperty("做题模式 1章卷 2随机练习")
 	private Long doMode;
+
+	@ApiModelProperty("做题模式 1章卷 2随机练习")
+	private List<Long> doModes;
 }

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

@@ -53,6 +53,7 @@ public class CollectQuestionServiceImpl extends ServiceImpl<CollectQuestionMappe
         lqw.eq(bo.getGoodsId() != null, CollectQuestion::getGoodsId, bo.getGoodsId());
         lqw.eq(bo.getOrderGoodsId() != null, CollectQuestion::getOrderGoodsId, bo.getOrderGoodsId());
         lqw.eq(bo.getDoMode() != null, CollectQuestion::getDoMode, bo.getDoMode());
+        lqw.in(bo.getDoModes() != null, CollectQuestion::getDoMode, bo.getDoModes());
         return this.count(lqw);
     }
 

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UpdateGoodsRepairBo.java

@@ -7,10 +7,11 @@ import java.util.List;
 
 /**
  * @author yangdamao
- * @date 2023年02月23日 16:11
+ * @date 2023年02月23日 14:38
  */
 @Data
 public class UpdateGoodsRepairBo implements Serializable {
 
     private List<Long> goodsIds;
+
 }

+ 10 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserGoodsListAllBo.java

@@ -23,4 +23,14 @@ public class UserGoodsListAllBo implements Serializable {
 
     @ApiModelProperty("用户ID")
     private Long userId;
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+
+    @ApiModelProperty("商品类型 1视频2题库 6直播")
+    private Integer goodsType;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java

@@ -64,4 +64,6 @@ public interface GoodsMapper extends BaseMapper<Goods> {
     List<GoodsListAllVo> getUserGoodsListAll(UserGoodsListAllBo bo);
 
     Long getCourseExamNum(@Param("goodsId") Long goodsId);
+
+    Long getUserStudyNum(@Param("userId")Long userId,@Param("orderGoodsId") Long orderGoodsId);
 }

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

@@ -119,4 +119,5 @@ public interface IGoodsService extends IService<Goods> {
     Goods getGoodsByIdTenant(Long goodsId, Long tenantId);
 
     boolean updateGoodsRepair(UpdateGoodsRepairBo bo);
+
 }

+ 165 - 145
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -40,6 +40,8 @@ import com.zhongzheng.modules.goods.domain.*;
 import com.zhongzheng.modules.goods.mapper.GoodsMapper;
 import com.zhongzheng.modules.goods.service.*;
 import com.zhongzheng.modules.goods.vo.*;
+import com.zhongzheng.modules.grade.domain.ClassGradeInterface;
+import com.zhongzheng.modules.grade.service.IClassGradeInterfaceService;
 import com.zhongzheng.modules.grade.vo.ClassGradeVo;
 import com.zhongzheng.modules.grade.vo.SyncGoodsExport;
 import com.zhongzheng.modules.inform.domain.InformRemind;
@@ -123,6 +125,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
 
     @Autowired
     private IOrderInputTemplateService iOrderInputTemplateService;
+    @Autowired
+    private IClassGradeInterfaceService iClassGradeInterfaceService;
 
     @Autowired
     private ICourseMenuService iCourseMenuService;
@@ -1598,10 +1602,10 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                 }
             }
 
-//            if (CollectionUtils.isNotEmpty(recordList)){
-//                //保存记录
+            if (CollectionUtils.isNotEmpty(recordList)){
+                //保存记录
 //                iSysGoodsCopyRecordService.saveBatch(recordList);
-//            }
+            }
 
             //规格模板商品重新绑定
             if (CollectionUtils.isNotEmpty(newRelationList)){
@@ -1704,8 +1708,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         record.setCreateTime(DateUtils.getNowTime());
         record.setUpdateTime(DateUtils.getNowTime());
         record.setTenantId(newTenantId);
-//        array.add(record);
         iSysGoodsCopyRecordService.save(record);
+//        array.add(record);
     }
 
     private void disposeGoodsAttached(Long oldGoodsId,Long newGoodsId,Long newTenantId,List<SysGoodsCopyRecord> array){
@@ -1761,7 +1765,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                     course.setCourseId(null);
                     course.setTenantId(newTenantId);
                     course.setEducationTypeId(getNewEducationTypeId(course.getEducationTypeId(),newTenantId,array));
-                    course.setProjectId(getNewProjectTypeId(course.getProjectId(),newTenantId,array));
+                    course.setBusinessId(getNewBusinessId(course.getBusinessId(),newTenantId,array));
                     course.setSubjectId(getNewSubjectId(course.getSubjectId(), newTenantId,array));
                     course.setProjectId(getNewProjectTypeId(course.getProjectId(), newTenantId,array));
                     course.setMajorId(getNewMajorId(course.getMajorId(),newTenantId,array));
@@ -3392,150 +3396,24 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
             iOrderInputTemplateService.saveBatch(newTemplateList);
         }
 
+        //班级官方通知模板
+        List<ClassGradeInterface> gradeInterfaceList = iClassGradeInterfaceService.list();
+        if (CollectionUtils.isNotEmpty(gradeInterfaceList)){
+            List<ClassGradeInterface> newGradeInterfaceList = gradeInterfaceList.stream().map(x -> {
+                ClassGradeInterface gradeInterface = BeanUtil.toBean(x, ClassGradeInterface.class);
+                gradeInterface.setId(null);
+                gradeInterface.setTenantId(newTenantId);
+                return gradeInterface;
+            }).collect(Collectors.toList());
+            iClassGradeInterfaceService.saveBatch(newGradeInterfaceList);
+        }
+
         //保存记录
         iSysGoodsCopyRecordService.saveBatch(copyRecordList);
         return true;
     }
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean updateGoodsRepair(UpdateGoodsRepairBo bo) {
-//        List<Goods> goodsList = list(new LambdaQueryWrapper<Goods>()
-//                .eq(Goods::getEducationTypeId, bo.getEducationTypeId())
-//                .eq(Goods::getBusinessId, bo.getBusinessId()));
-//        if (CollectionUtils.isEmpty(goodsList)){
-//            return true;
-//        }
-        Map<Integer,List<Long>> mapIds = new HashMap<>();
-        List<Long> goodsIds = new ArrayList<>();
-        List<Long> courseIds = new ArrayList<>();
-        List<Long> moduleIds = new ArrayList<>();
-        List<Long> chapterIds = new ArrayList<>();
-        List<Long> sectionIds = new ArrayList<>();
-        for (Long goodsId : bo.getGoodsIds()) {
-            Goods goods = getById(goodsId);
-            if (ObjectUtils.isNull(goods)){
-                continue;
-            }
-            goodsIds.add(goodsId);
-            //商品课程
-            List<GoodsCourse> courseList = iGoodsCourseService
-                    .list(new LambdaQueryWrapper<GoodsCourse>()
-                            .eq(GoodsCourse::getGoodsId, goodsId));
-            if (CollectionUtils.isEmpty(courseList)){
-                continue;
-            }
-            List<Long> idsCourse = courseList.stream().map(GoodsCourse::getCourseId).collect(Collectors.toList());
-            courseIds.addAll(idsCourse);
-            //课程目录
-            List<CourseMenu> courseMenuList = iCourseMenuService.list(new LambdaQueryWrapper<CourseMenu>()
-                    .in(CourseMenu::getCourseId, courseIds));
-            if (CollectionUtils.isEmpty(courseMenuList)){
-                continue;
-            }
-            Map<Integer, List<CourseMenu>> collect = courseMenuList.stream().collect(Collectors.groupingBy(CourseMenu::getType));
-            collect.forEach((k,v) -> {
-                List<Long> menuIds = v.stream().map(CourseMenu::getMenuId).collect(Collectors.toList());
-                switch (k){
-                    case 1://模块
-                        List<CourseModule> moduleList = iCourseModuleService.listByIds(menuIds);
-                        List<CourseModule> list = iCourseModuleService.list(new LambdaQueryWrapper<CourseModule>()
-                                .in(CourseModule::getModuleName, moduleList.stream().map(CourseModule::getModuleName).collect(Collectors.toList())));
-                        List<Long> idsModule = list.stream().map(CourseModule::getModuleId).collect(Collectors.toList());
-                        List<CourseModuleChapter> list1 = iCourseModuleChapterService
-                                .list(new LambdaQueryWrapper<CourseModuleChapter>()
-                                        .in(CourseModuleChapter::getModuleId, idsModule));
-                        if (CollectionUtils.isNotEmpty(list1)){
-                            List<Long> collect1 = list1.stream().map(CourseModuleChapter::getChapterId).collect(Collectors.toList());
-                            List<CourseChapter> courseChapterList = iCourseChapterService.listByIds(collect1);
-                            List<CourseChapter> list2 = iCourseChapterService.list(new LambdaQueryWrapper<CourseChapter>()
-                                    .in(CourseChapter::getName, courseChapterList.stream().map(CourseChapter::getName).collect(Collectors.toList())));
-                            List<Long> idsChapter = list2.stream().map(CourseChapter::getChapterId).collect(Collectors.toList());
-                            chapterIds.addAll(idsChapter);
-                            List<CourseChapterSection> list3 = iCourseChapterSectionService
-                                    .list(new LambdaQueryWrapper<CourseChapterSection>()
-                                            .in(CourseChapterSection::getChapterId, idsChapter));
-                            if (CollectionUtils.isNotEmpty(list3)){
-                                List<CourseSection> sectionList = iCourseSectionService.listByIds(list3.stream().map(CourseChapterSection::getSectionId).collect(Collectors.toList()));
-                                List<CourseSection> list4 = iCourseSectionService.list(new LambdaQueryWrapper<CourseSection>()
-                                        .in(CourseSection::getName, sectionList.stream().map(CourseSection::getName).collect(Collectors.toList())));
-                                List<Long> idsSection = list4.stream().map(CourseSection::getSectionId).collect(Collectors.toList());
-                                sectionIds.addAll(idsSection);
-                            }
-                        }
-                        moduleIds.addAll(idsModule);
-                        break;
-                    case 2://章
-                        List<CourseChapter> courseChapterList = iCourseChapterService.listByIds(menuIds);
-                        List<CourseChapter> list2 = iCourseChapterService.list(new LambdaQueryWrapper<CourseChapter>()
-                                .in(CourseChapter::getName, courseChapterList.stream().map(CourseChapter::getName).collect(Collectors.toList())));
-                        List<Long> idsChapter = list2.stream().map(CourseChapter::getChapterId).collect(Collectors.toList());
-                        chapterIds.addAll(idsChapter);
-                        List<CourseChapterSection> list3 = iCourseChapterSectionService
-                                .list(new LambdaQueryWrapper<CourseChapterSection>()
-                                        .in(CourseChapterSection::getChapterId, idsChapter));
-                        if (CollectionUtils.isNotEmpty(list3)){
-                            List<CourseSection> sectionList = iCourseSectionService.listByIds(list3.stream().map(CourseChapterSection::getSectionId).collect(Collectors.toList()));
-                            List<CourseSection> list4 = iCourseSectionService.list(new LambdaQueryWrapper<CourseSection>()
-                                    .in(CourseSection::getName, sectionList.stream().map(CourseSection::getName).collect(Collectors.toList())));
-                            List<Long> idsSection = list4.stream().map(CourseSection::getSectionId).collect(Collectors.toList());
-                            sectionIds.addAll(idsSection);
-                        }
-                        break;
-                    case 3://节
-                        List<CourseSection> sectionList = iCourseSectionService.listByIds(menuIds);
-                        List<CourseSection> list4 = iCourseSectionService.list(new LambdaQueryWrapper<CourseSection>()
-                                .in(CourseSection::getName, sectionList.stream().map(CourseSection::getName).collect(Collectors.toList())));
-                        List<Long> idsSection = list4.stream().map(CourseSection::getSectionId).collect(Collectors.toList());
-                        sectionIds.addAll(idsSection);
-                        break;
-                }
-            });
-//            List<Long> goodsIds = new ArrayList<>();
-//            List<Long> courseIds = new ArrayList<>();
-//            List<Long> moduleIds = new ArrayList<>();
-//            List<Long> chapterIds = new ArrayList<>();
-//            List<Long> sectionIds = new ArrayList<>();
-            //执行删除
-            iCourseSectionBusinessService.remove(new LambdaQueryWrapper<CourseSectionBusiness>()
-                    .in(CourseSectionBusiness::getSectionId,sectionIds));
-            iCourseSectionService.removeByIds(sectionIds);
-
-            iCourseChapterSectionService.remove(new LambdaQueryWrapper<CourseChapterSection>()
-                    .in(CourseChapterSection::getChapterId,chapterIds));
-            iCourseChapterBusinessService.remove(new LambdaQueryWrapper<CourseChapterBusiness>()
-                    .in(CourseChapterBusiness::getChapterId,chapterIds));
-            iCourseChapterService.removeByIds(chapterIds);
-
-            iCourseModuleChapterService.remove(new LambdaQueryWrapper<CourseModuleChapter>()
-                    .in(CourseModuleChapter::getModuleId,moduleIds));
-            iCourseModuleBusinessService.remove(new LambdaQueryWrapper<CourseModuleBusiness>()
-                    .in(CourseModuleBusiness::getModuleId,moduleIds));
-            iCourseModuleService.removeByIds(moduleIds);
-
-            iCourseMenuService.remove(new LambdaQueryWrapper<CourseMenu>()
-                    .in(CourseMenu::getCourseId,courseIds));
-            iCourseService.removeByIds(courseIds);
-
-            iGoodsCourseService.remove(new LambdaQueryWrapper<GoodsCourse>()
-                    .in(GoodsCourse::getGoodsId,goodsIds));
-            removeByIds(goodsIds);
-
-            mapIds.put(GoodsCopyEnum.GOODS.getType(),goodsIds);
-            mapIds.put(GoodsCopyEnum.COURSE.getType(),courseIds);
-            mapIds.put(GoodsCopyEnum.COURSE_MODULE.getType(),moduleIds);
-            mapIds.put(GoodsCopyEnum.COURSE_CHAPTER.getType(),chapterIds);
-            mapIds.put(GoodsCopyEnum.COURSE_SECTION.getType(),sectionIds);
-
-            mapIds.forEach((k,v) -> {
-                iSysGoodsCopyRecordService.remove(new LambdaQueryWrapper<SysGoodsCopyRecord>()
-                        .eq(SysGoodsCopyRecord::getType,k)
-                        .in(SysGoodsCopyRecord::getNewId,v));
-            });
 
-        }
-        return true;
-    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -4115,8 +3993,10 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                         sectionNum = baseMapper.getSectionNum(vo.getGoodsId());
                         vo.setGoodsCourseMsg(String.format("%s课程 %s节 %s学时",courseCount,sectionNum,vo.getClassHours()));
                     }
-                    //学习进度
-                   Long examNum = baseMapper.getCourseExamNum(vo.getGoodsId());
+                    //商品试卷总节数
+                    Long examNum = baseMapper.getCourseExamNum(vo.getGoodsId());
+                   //当前用户学习进度
+                    Long userStudyNum = baseMapper.getUserStudyNum(bo.getUserId(),vo.getOrderGoodsId());
 
             }
 
@@ -4130,6 +4010,146 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return baseMapper.queryGoodsByIdTenant(goodsId,tenantId);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateGoodsRepair(UpdateGoodsRepairBo bo) {
+//        List<Goods> goodsList = list(new LambdaQueryWrapper<Goods>()
+//                .eq(Goods::getEducationTypeId, bo.getEducationTypeId())
+//                .eq(Goods::getBusinessId, bo.getBusinessId()));
+//        if (CollectionUtils.isEmpty(goodsList)){
+//            return true;
+//        }
+        Map<Integer,List<Long>> mapIds = new HashMap<>();
+        List<Long> goodsIds = new ArrayList<>();
+        List<Long> courseIds = new ArrayList<>();
+        List<Long> moduleIds = new ArrayList<>();
+        List<Long> chapterIds = new ArrayList<>();
+        List<Long> sectionIds = new ArrayList<>();
+        for (Long goodsId : bo.getGoodsIds()) {
+            Goods goods = getById(goodsId);
+            if (ObjectUtils.isNull(goods)){
+                continue;
+            }
+            goodsIds.add(goodsId);
+            //商品课程
+            List<GoodsCourse> courseList = iGoodsCourseService
+                    .list(new LambdaQueryWrapper<GoodsCourse>()
+                    .eq(GoodsCourse::getGoodsId, goodsId));
+            if (CollectionUtils.isEmpty(courseList)){
+                continue;
+            }
+            List<Long> idsCourse = courseList.stream().map(GoodsCourse::getCourseId).collect(Collectors.toList());
+            courseIds.addAll(idsCourse);
+            //课程目录
+            List<CourseMenu> courseMenuList = iCourseMenuService.list(new LambdaQueryWrapper<CourseMenu>()
+                    .in(CourseMenu::getCourseId, courseIds));
+            if (CollectionUtils.isEmpty(courseMenuList)){
+                continue;
+            }
+            Map<Integer, List<CourseMenu>> collect = courseMenuList.stream().collect(Collectors.groupingBy(CourseMenu::getType));
+            collect.forEach((k,v) -> {
+                List<Long> menuIds = v.stream().map(CourseMenu::getMenuId).collect(Collectors.toList());
+                switch (k){
+                    case 1://模块
+                        List<CourseModule> moduleList = iCourseModuleService.listByIds(menuIds);
+                        List<CourseModule> list = iCourseModuleService.list(new LambdaQueryWrapper<CourseModule>()
+                                .in(CourseModule::getModuleName, moduleList.stream().map(CourseModule::getModuleName).collect(Collectors.toList())));
+                        List<Long> idsModule = list.stream().map(CourseModule::getModuleId).collect(Collectors.toList());
+                        List<CourseModuleChapter> list1 = iCourseModuleChapterService
+                                .list(new LambdaQueryWrapper<CourseModuleChapter>()
+                                .in(CourseModuleChapter::getModuleId, idsModule));
+                        if (CollectionUtils.isNotEmpty(list1)){
+                            List<Long> collect1 = list1.stream().map(CourseModuleChapter::getChapterId).collect(Collectors.toList());
+                            List<CourseChapter> courseChapterList = iCourseChapterService.listByIds(collect1);
+                            List<CourseChapter> list2 = iCourseChapterService.list(new LambdaQueryWrapper<CourseChapter>()
+                                    .in(CourseChapter::getName, courseChapterList.stream().map(CourseChapter::getName).collect(Collectors.toList())));
+                            List<Long> idsChapter = list2.stream().map(CourseChapter::getChapterId).collect(Collectors.toList());
+                            chapterIds.addAll(idsChapter);
+                            List<CourseChapterSection> list3 = iCourseChapterSectionService
+                                    .list(new LambdaQueryWrapper<CourseChapterSection>()
+                                    .in(CourseChapterSection::getChapterId, idsChapter));
+                            if (CollectionUtils.isNotEmpty(list3)){
+                                List<CourseSection> sectionList = iCourseSectionService.listByIds(list3.stream().map(CourseChapterSection::getSectionId).collect(Collectors.toList()));
+                                List<CourseSection> list4 = iCourseSectionService.list(new LambdaQueryWrapper<CourseSection>()
+                                        .in(CourseSection::getName, sectionList.stream().map(CourseSection::getName).collect(Collectors.toList())));
+                                List<Long> idsSection = list4.stream().map(CourseSection::getSectionId).collect(Collectors.toList());
+                                sectionIds.addAll(idsSection);
+                            }
+                        }
+                        moduleIds.addAll(idsModule);
+                        break;
+                    case 2://章
+                        List<CourseChapter> courseChapterList = iCourseChapterService.listByIds(menuIds);
+                        List<CourseChapter> list2 = iCourseChapterService.list(new LambdaQueryWrapper<CourseChapter>()
+                                .in(CourseChapter::getName, courseChapterList.stream().map(CourseChapter::getName).collect(Collectors.toList())));
+                        List<Long> idsChapter = list2.stream().map(CourseChapter::getChapterId).collect(Collectors.toList());
+                        chapterIds.addAll(idsChapter);
+                        List<CourseChapterSection> list3 = iCourseChapterSectionService
+                                .list(new LambdaQueryWrapper<CourseChapterSection>()
+                                        .in(CourseChapterSection::getChapterId, idsChapter));
+                        if (CollectionUtils.isNotEmpty(list3)){
+                            List<CourseSection> sectionList = iCourseSectionService.listByIds(list3.stream().map(CourseChapterSection::getSectionId).collect(Collectors.toList()));
+                            List<CourseSection> list4 = iCourseSectionService.list(new LambdaQueryWrapper<CourseSection>()
+                                    .in(CourseSection::getName, sectionList.stream().map(CourseSection::getName).collect(Collectors.toList())));
+                            List<Long> idsSection = list4.stream().map(CourseSection::getSectionId).collect(Collectors.toList());
+                            sectionIds.addAll(idsSection);
+                        }
+                        break;
+                    case 3://节
+                        List<CourseSection> sectionList = iCourseSectionService.listByIds(menuIds);
+                        List<CourseSection> list4 = iCourseSectionService.list(new LambdaQueryWrapper<CourseSection>()
+                                .in(CourseSection::getName, sectionList.stream().map(CourseSection::getName).collect(Collectors.toList())));
+                        List<Long> idsSection = list4.stream().map(CourseSection::getSectionId).collect(Collectors.toList());
+                        sectionIds.addAll(idsSection);
+                        break;
+                }
+            });
+//            List<Long> goodsIds = new ArrayList<>();
+//            List<Long> courseIds = new ArrayList<>();
+//            List<Long> moduleIds = new ArrayList<>();
+//            List<Long> chapterIds = new ArrayList<>();
+//            List<Long> sectionIds = new ArrayList<>();
+            //执行删除
+            iCourseSectionBusinessService.remove(new LambdaQueryWrapper<CourseSectionBusiness>()
+            .in(CourseSectionBusiness::getSectionId,sectionIds));
+            iCourseSectionService.removeByIds(sectionIds);
+
+            iCourseChapterSectionService.remove(new LambdaQueryWrapper<CourseChapterSection>()
+            .in(CourseChapterSection::getChapterId,chapterIds));
+            iCourseChapterBusinessService.remove(new LambdaQueryWrapper<CourseChapterBusiness>()
+            .in(CourseChapterBusiness::getChapterId,chapterIds));
+            iCourseChapterService.removeByIds(chapterIds);
+
+            iCourseModuleChapterService.remove(new LambdaQueryWrapper<CourseModuleChapter>()
+            .in(CourseModuleChapter::getModuleId,moduleIds));
+            iCourseModuleBusinessService.remove(new LambdaQueryWrapper<CourseModuleBusiness>()
+            .in(CourseModuleBusiness::getModuleId,moduleIds));
+            iCourseModuleService.removeByIds(moduleIds);
+
+            iCourseMenuService.remove(new LambdaQueryWrapper<CourseMenu>()
+            .in(CourseMenu::getCourseId,courseIds));
+            iCourseService.removeByIds(courseIds);
+
+            iGoodsCourseService.remove(new LambdaQueryWrapper<GoodsCourse>()
+            .in(GoodsCourse::getGoodsId,goodsIds));
+            removeByIds(goodsIds);
+
+            mapIds.put(GoodsCopyEnum.GOODS.getType(),goodsIds);
+            mapIds.put(GoodsCopyEnum.COURSE.getType(),courseIds);
+            mapIds.put(GoodsCopyEnum.COURSE_MODULE.getType(),moduleIds);
+            mapIds.put(GoodsCopyEnum.COURSE_CHAPTER.getType(),chapterIds);
+            mapIds.put(GoodsCopyEnum.COURSE_SECTION.getType(),sectionIds);
+
+            mapIds.forEach((k,v) -> {
+                iSysGoodsCopyRecordService.remove(new LambdaQueryWrapper<SysGoodsCopyRecord>()
+                .eq(SysGoodsCopyRecord::getType,k)
+                .in(SysGoodsCopyRecord::getNewId,v));
+            });
+
+        }
+        return true;
+    }
+
     private Long getNewId(Long oldId, Integer type){
         if (ObjectUtils.isNull(oldId) || oldId <= 0L){
             return null;

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsPeriodVo.java

@@ -160,4 +160,8 @@ public class GoodsPeriodVo {
 	@Excel(name = "考试列表")
 	@ApiModelProperty("考试列表")
 	private List<ExamApplyGoodsVo> examApplyGoodsList;
+	@ApiModelProperty("外链")
+	private String externalLink;
+	@ApiModelProperty("是否外链商品:0否 1是")
+	private Integer externalLinkStatus;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeOpenBo.java

@@ -38,4 +38,8 @@ public class ClassGradeOpenBo implements Serializable {
 
     @ApiModelProperty("班级名称")
     private String className;
+
+    private Integer learningStatus;
+
+    private Long learningTimeStart;
 }

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeOpenUpBo.java

@@ -29,4 +29,12 @@ public class ClassGradeOpenUpBo implements Serializable {
 
     @ApiModelProperty("班级名称")
     private String className;
+
+    private Long gradeId;
+
+    private Long interfacePushId;
+
+    private Integer learningStatus;
+
+    private Long learningTimeStart;
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserAddBo.java

@@ -67,4 +67,13 @@ public class ClassGradeUserAddBo {
     /** 学时变为审核中时间 */
     @ApiModelProperty("学时变为审核中时间")
     private Long periodIngTime;
+    /** 学习记录同步到老系统 1成功 -1失败 */
+    @ApiModelProperty("学习记录同步到老系统 1成功 -1失败")
+    private Integer toOldStatus;
+    /** 学习记录同步到老系统结果 */
+    @ApiModelProperty("学习记录同步到老系统结果")
+    private String toOldResult;
+    /** 学习记录同步到老系统时间 */
+    @ApiModelProperty("学习记录同步到老系统时间")
+    private Long toOldTime;
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserEditBo.java

@@ -77,4 +77,13 @@ public class ClassGradeUserEditBo {
     /** 失败原因 */
     @ApiModelProperty("失败原因")
     private String reason;
+    /** 学习记录同步到老系统 1成功 -1失败 */
+    @ApiModelProperty("学习记录同步到老系统 1成功 -1失败")
+    private Integer toOldStatus;
+    /** 学习记录同步到老系统结果 */
+    @ApiModelProperty("学习记录同步到老系统结果")
+    private String toOldResult;
+    /** 学习记录同步到老系统时间 */
+    @ApiModelProperty("学习记录同步到老系统时间")
+    private Long toOldTime;
 }

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

@@ -275,5 +275,14 @@ public class ClassGradeUserQueryBo extends BaseEntity {
 	@ApiModelProperty("查询审核通过结束时间")
 	private Long periodEndTime;
 
+	/** 学习记录同步到老系统 1成功 -1失败 */
+	@ApiModelProperty("学习记录同步到老系统 1成功 -1失败")
+	private Integer toOldStatus;
+	/** 学习记录同步到老系统结果 */
+	@ApiModelProperty("学习记录同步到老系统结果")
+	private String toOldResult;
+	/** 学习记录同步到老系统时间 */
+	@ApiModelProperty("学习记录同步到老系统时间")
+	private Long toOldTime;
 
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/ClassGradeInterface.java

@@ -40,4 +40,6 @@ private static final long serialVersionUID=1L;
     /** 修改时间 */
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private Long updateTime;
+
+    private Long tenantId;
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/ClassGradeUser.java

@@ -78,6 +78,12 @@ private static final long serialVersionUID=1L;
     private String auditUserName;
     /** 失败原因 */
     private String reason;
+    /** 学习记录同步到老系统 1成功 -1失败 */
+    private Integer toOldStatus;
+    /** 学习记录同步到老系统结果 */
+    private String toOldResult;
+    /** 学习记录同步到老系统时间 */
+    private Long toOldTime;
 
 }
 

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeInterfaceMapper.java

@@ -1,7 +1,9 @@
 package com.zhongzheng.modules.grade.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.zhongzheng.modules.grade.domain.ClassGradeInterface;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 官方接口Mapper接口
@@ -11,4 +13,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ClassGradeInterfaceMapper extends BaseMapper<ClassGradeInterface> {
 
+    @InterceptorIgnore(tenantLine = "true")
+    ClassGradeInterface getInfterFaceByTenant(@Param("type") Integer type,@Param("tenantId") Long tenantId);
 }

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

@@ -83,4 +83,6 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
     @InterceptorIgnore(tenantLine = "true")
     void UpGradeCodeByIdTenant(@Param("ids") List<Long> ids);
 
+    @InterceptorIgnore(tenantLine = "true")
+    void UpGradeInterfaceByTenant(ClassGradeOpenUpBo upBo);
 }

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

@@ -49,4 +49,6 @@ public interface IClassGradeInterfaceService extends IService<ClassGradeInterfac
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    ClassGradeInterface getInfterFaceByTenant(Integer type, Long tenantId);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeInterfaceServiceImpl.java

@@ -100,4 +100,9 @@ public class ClassGradeInterfaceServiceImpl extends ServiceImpl<ClassGradeInterf
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    public ClassGradeInterface getInfterFaceByTenant(Integer type, Long tenantId) {
+        return baseMapper.getInfterFaceByTenant(type, tenantId);
+    }
 }

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

@@ -27,12 +27,8 @@ 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.bo.*;
-import com.zhongzheng.modules.grade.domain.ClassGradeGoods;
-import com.zhongzheng.modules.grade.domain.ClassGradeSys;
-import com.zhongzheng.modules.grade.domain.ClassGradeUser;
-import com.zhongzheng.modules.grade.service.IClassGradeGoodsService;
-import com.zhongzheng.modules.grade.service.IClassGradeSysService;
-import com.zhongzheng.modules.grade.service.IClassGradeUserService;
+import com.zhongzheng.modules.grade.domain.*;
+import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.vo.*;
 import com.zhongzheng.modules.inform.bo.InformUserAddBo;
 import com.zhongzheng.modules.inform.service.IInformRemindService;
@@ -66,9 +62,7 @@ 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 com.zhongzheng.modules.grade.domain.ClassGrade;
 import com.zhongzheng.modules.grade.mapper.ClassGradeMapper;
-import com.zhongzheng.modules.grade.service.IClassGradeService;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
@@ -149,6 +143,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Autowired
     private IClassGradeGoodsService iClassGradeGoodsService;
 
+    @Autowired
+    private IClassGradeInterfaceService iClassGradeInterfaceService;
+
     @Autowired
     private ISysOldOrgService iSysOldOrgService;
 
@@ -236,52 +233,65 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         if (CollectionUtils.isNotEmpty(list)) {
             throw new RuntimeException("班级名称不能重复");
         }
+        //校验是否二建/二造商品创建班级
+        if (bo.getClassGradeGoodsAddBos() != null &&
+                (ObjectUtils.isNull(bo.getClassStatus()) || 1 == bo.getClassStatus())) {
+            Long goodsId = bo.getClassGradeGoodsAddBos()[0];
+            Goods goods = iGoodsService.getById(goodsId);
+            CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
+            businessQueryBo.setId(goods.getBusinessId());
+            String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
+            if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+                throw new CustomException("二建/二造不允许直接创建开班班级!");
+            }
+        }
+
         //是否创建官方班级编号
         if (bo.getClassGradeGoodsAddBos() != null &&
                 (ObjectUtils.isNull(bo.getClassStatus()) || 0 == bo.getClassStatus())) {
             Long goodsId = bo.getClassGradeGoodsAddBos()[0];
             Goods goods = iGoodsService.getById(goodsId);
-            CourseBusinessVo business = iCourseBusinessService.queryById(goods.getBusinessId());
-            if (Validator.isNotEmpty(business) && Validator.isNotEmpty(business.getTemplateName()) && business.getTemplateName().equals("班级")) {
-                if (net.polyv.common.v1.util.StringUtils.isNotBlank(business.getAliasName()) &&
-                        (business.getAliasName().equals("二级建造师") || business.getAliasName().equals("二级造价工程师"))){
-                    List<Goods> goodsList = iGoodsService.list(new LambdaQueryWrapper<Goods>()
-                            .eq(Goods::getEducationTypeId, goods.getEducationTypeId())
-                            .eq(Goods::getBusinessId, goods.getBusinessId())
-                            .eq(Goods::getStatus,1)
-                            .eq(Goods::getGoodsStatus,1)
-                            .eq(Goods::getProjectId, goods.getProjectId())
-                            .eq(Goods::getSubjectIds, goods.getSubjectIds()));
-                    if (goodsList.size() > 1){
-                        //该业务层次下有多个商品
-                        List<Long> goodsIds = goodsList.stream().filter(item -> !item.getGoodsId().equals(goodsId)).map(Goods::getGoodsId).collect(Collectors.toList());
-                        List<ClassGradeGoods> goodsGradeList = iClassGradeGoodsService
-                                .list(new LambdaQueryWrapper<ClassGradeGoods>()
-                                        .in(ClassGradeGoods::getGoodsId, goodsIds));
-                        if (CollectionUtils.isNotEmpty(goodsGradeList)){
-                            Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
-                            List<ClassGradeSortBo> sortList = new ArrayList<>();
-                            map.forEach((k, v) -> {
-                                ClassGradeSortBo sortBo = new ClassGradeSortBo();
-                                sortBo.setKey(k);
-                                sortBo.setSize(v.size());
-                                sortList.add(sortBo);
-                            });
-                            ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
-                            List<ClassGradeGoods> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGradeGoods::getCreateTime)).collect(Collectors.toList());
-                            //班级信息
-                            List<ClassGrade> listGrade = listByIds(classGradesMax.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
-                            //获取当前机构商品下的班级
-                            List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
-                            if (gradeGoods.size() < listGrade.size()) {
-                                ClassGrade grade = listGrade.get(gradeGoods.size());
-                                if (checkEjjjPeopleNumLimit(business.getId(),grade.getGradeId())){
-                                    add.setOfficialName(listGrade.get(gradeGoods.size()).getOfficialName());
-                                    add.setClassStatus(0);
-                                }else {
-                                    add.setOfficialName(ServletUtils.getEncoded("PIY"));
-                                    add.setClassStatus(0);
-                                }
+            CourseBusiness business = iCourseBusinessService.getById(goods.getBusinessId());
+            CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
+            businessQueryBo.setId(goods.getBusinessId());
+            String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
+            if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+                List<Goods> goodsList = iGoodsService.list(new LambdaQueryWrapper<Goods>()
+                        .eq(Goods::getEducationTypeId, goods.getEducationTypeId())
+                        .eq(Goods::getBusinessId, goods.getBusinessId())
+                        .eq(Goods::getStatus,1)
+                        .eq(Goods::getGoodsStatus,1)
+                        .eq(Goods::getProjectId, goods.getProjectId())
+                        .eq(Goods::getSubjectIds, goods.getSubjectIds()));
+                if (goodsList.size() > 1){
+                    //该业务层次下有多个商品
+                    List<Long> goodsIds = goodsList.stream().filter(item -> !item.getGoodsId().equals(goodsId)).map(Goods::getGoodsId).collect(Collectors.toList());
+                    List<ClassGradeGoods> goodsGradeList = iClassGradeGoodsService
+                            .list(new LambdaQueryWrapper<ClassGradeGoods>()
+                                    .in(ClassGradeGoods::getGoodsId, goodsIds));
+                    if (CollectionUtils.isNotEmpty(goodsGradeList)){
+                        Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
+                        List<ClassGradeSortBo> sortList = new ArrayList<>();
+                        map.forEach((k, v) -> {
+                            ClassGradeSortBo sortBo = new ClassGradeSortBo();
+                            sortBo.setKey(k);
+                            sortBo.setSize(v.size());
+                            sortList.add(sortBo);
+                        });
+                        ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
+                        List<ClassGradeGoods> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGradeGoods::getCreateTime)).collect(Collectors.toList());
+                        //班级信息
+                        List<ClassGrade> listGrade = listByIds(classGradesMax.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                        //获取当前机构商品下的班级
+                        List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
+                        if (gradeGoods.size() < listGrade.size()) {
+                            ClassGrade grade = list.get(gradeGoods.size());
+                            if (checkEjjjPeopleNumLimit(business.getId(),grade.getGradeId())){
+                                add.setOfficialName(list.get(gradeGoods.size()).getOfficialName());
+                                add.setClassStatus(0);
+                            }else {
+                                add.setOfficialName(ServletUtils.getEncoded("PIY"));
+                                add.setClassStatus(0);
                             }
                         }
                     }
@@ -367,28 +377,40 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean updateByEditBo(ClassGradeEditBo bo) {
-
         //判断班级是否重复
         ClassGrade update = BeanUtil.toBean(bo, ClassGrade.class);
         validEntityBeforeSave(update);
         update.setUpdateTime(DateUtils.getNowTime());
-        //二建和二造班级开班预留预报名编号
-        if (update.getClassStatus() != null && update.getClassStatus().equals(1)) {
-            //二造和二建班级开班校验班级人数(300人)
-            ClassGradeGoods gradeGoods = iClassGradeGoodsService.getOne(new LambdaQueryWrapper<ClassGradeGoods>().eq(ClassGradeGoods::getGradeId,update.getGradeId()));
-            if (ObjectUtils.isNull(gradeGoods)){
-                throw new RuntimeException("班级商品信息查询失败");
-            }
-            Goods goods = iGoodsService.getById(gradeGoods.getGoodsId());
-            if (!checkClassUserNum(goods.getBusinessId(),update.getGradeId())){
-                throw new RuntimeException("班级人数超过上限,不能开班,请检查!");
-            }
 
-            ClassGrade gradeGrade = getById(update.getGradeId());
-            if (StringUtils.isNotBlank(gradeGrade.getOfficialName())){
-                update.setRegisterCode(gradeGrade.getOfficialName());
+        ClassGradeGoods gradeGoods = iClassGradeGoodsService.getOne(new LambdaQueryWrapper<ClassGradeGoods>().eq(ClassGradeGoods::getGradeId,update.getGradeId()));
+        if (ObjectUtils.isNull(gradeGoods)){
+            throw new RuntimeException("班级商品信息查询失败");
+        }
+        Goods goods = iGoodsService.getById(gradeGoods.getGoodsId());
+        CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
+        businessQueryBo.setId(goods.getBusinessId());
+        String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
+
+        if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+            if (update.getClassStatus() != null && update.getClassStatus().equals(1)) {
+                //二造和二建班级开班校验班级人数(300人)
+                if (!checkClassUserNum(goods.getBusinessId(),update.getGradeId())){
+                    throw new RuntimeException("班级人数超过上限,不能开班,请检查!");
+                }
+                ClassGrade gradeGrade = getById(update.getGradeId());
+                if (StringUtils.isNotBlank(gradeGrade.getOfficialName())){
+                    update.setRegisterCode(gradeGrade.getOfficialName());
+                }
+                //二建/二造官方信息推送开关打开
+                List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
+                        .list(new LambdaQueryWrapper<ClassGradeInterface>()
+                        .eq(ClassGradeInterface::getType, 1).last("limit 1"));
+                if (CollectionUtils.isNotEmpty(interfaceList)){
+                    update.setInterfacePushId(interfaceList.get(0).getId());
+                }
             }
         }
+
         if (bo.getStatus() != -1) {
             LambdaQueryWrapper<ClassGrade> lqw = Wrappers.lambdaQuery();
             lqw.eq(ClassGrade::getClassName, update.getClassName());
@@ -469,41 +491,48 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         this.updateById(update);
 
         ClassGrade grade = getById(update.getGradeId());
-        if (ObjectUtils.isNotNull(grade) && ObjectUtils.isNotNull(grade.getClassStatus())
-                && StringUtils.isNotBlank(grade.getOfficialName()) && grade.getClassStatus() == 1){
-            //开班修改预报名班级下 所有班级
-            List<ClassGrade> list = list(new LambdaQueryWrapper<ClassGrade>().eq(ClassGrade::getOfficialName, update.getRegisterCode()));
-            if (CollectionUtils.isNotEmpty(list)){
-                update(new LambdaUpdateWrapper<ClassGrade>()
-                .set(ClassGrade::getOfficialName,update.getOfficialName())
-                .set(ClassGrade::getRegisterCode,update.getRegisterCode())
-                .set(ClassGrade::getClassStartTime,update.getClassStartTime())
-                .set(ClassGrade::getClassEndTime,update.getClassEndTime())
-                .set(ClassGrade::getClassStatus,update.getClassStatus())
-                .set(ClassGrade::getLearningStatus,update.getLearningStatus())
-                .in(ClassGrade::getGradeId,list.stream().map(ClassGrade::getGradeId).collect(Collectors.toList())));
-            }
-            //官方班级开班通知旧系统
-            ClassGradeOpenBo openBo = new ClassGradeOpenBo();
-            openBo.setOfficialName(grade.getOfficialName());
-            openBo.setRegisterCode(grade.getRegisterCode());
-            openBo.setClassName(grade.getClassName());
-            openBo.setClassStartTime(grade.getClassStartTime());
-            openBo.setClassEndTime(grade.getClassEndTime());
-            Long nowTime = DateUtils.getNowTime();
-            String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
-            openBo.setSign(sign);
-            openBo.setStamp(nowTime);
-            JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(openBo));
-            String respone = "";
-            try {
-                respone = HttpUtils.sendPost(CLASS_OPEN_PATH, param);
-                log.info("查询旧系统班级开班接口结果" + respone, "");
-                if (!respone.contains("\"Status\":true")) {
-                    throw new CustomException("同步请求错误" + respone);
+        if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+            if (ObjectUtils.isNotNull(grade) && ObjectUtils.isNotNull(grade.getClassStatus())
+                    && StringUtils.isNotBlank(grade.getOfficialName()) && grade.getClassStatus() == 1){
+//                List<ClassGrade> list = list(new LambdaQueryWrapper<ClassGrade>().eq(ClassGrade::getOfficialName, update.getRegisterCode()));
+//                if (CollectionUtils.isNotEmpty(list)){
+//                    update(new LambdaUpdateWrapper<ClassGrade>()
+//                            .set(ClassGrade::getOfficialName,update.getOfficialName())
+//                            .set(ClassGrade::getRegisterCode,update.getRegisterCode())
+//                            .set(ClassGrade::getClassStartTime,update.getClassStartTime())
+//                            .set(ClassGrade::getClassEndTime,update.getClassEndTime())
+//                            .set(ClassGrade::getClassStatus,update.getClassStatus())
+//                            .set(ClassGrade::getLearningStatus,update.getLearningStatus())
+//                            .set(ClassGrade::getInterfacePushId,update.getInterfacePushId())
+//                            .in(ClassGrade::getGradeId,list.stream().map(ClassGrade::getGradeId).collect(Collectors.toList())));
+//                }
+
+                ClassGradeOpenBo openBo = new ClassGradeOpenBo();
+                openBo.setOfficialName(grade.getOfficialName());
+                openBo.setRegisterCode(grade.getRegisterCode());
+                openBo.setClassName(grade.getClassName());
+                openBo.setClassStartTime(grade.getClassStartTime());
+                openBo.setClassEndTime(grade.getClassEndTime());
+                openBo.setLearningStatus(grade.getLearningStatus());
+                openBo.setLearningTimeStart(grade.getLearningTimeStart());
+                //开班修改预报名班级下 所有班级
+                this.openOfficialGrade(openBo);
+                //官方班级开班通知旧系统
+                Long nowTime = DateUtils.getNowTime();
+                String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
+                openBo.setSign(sign);
+                openBo.setStamp(nowTime);
+                JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(openBo));
+                String respone = "";
+                try {
+                    respone = HttpUtils.sendPost(CLASS_OPEN_PATH, param);
+                    log.info("查询旧系统班级开班接口结果" + respone, "");
+                    if (!respone.contains("\"Status\":true")) {
+                        throw new CustomException("同步请求错误" + respone);
+                    }
+                } catch (Exception e) {
+                    throw new CustomException("同步请求错误"+e.getMessage());
                 }
-            } catch (Exception e) {
-                throw new CustomException("同步请求错误"+e.getMessage());
             }
         }
         return true;
@@ -988,6 +1017,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     return false;
                 }
             }
+
         }
         return true;
     }
@@ -1251,7 +1281,21 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         openUpBo.setClassName(bo.getClassName());
         openUpBo.setClassStartTime(bo.getClassStartTime());
         openUpBo.setClassEndTime(bo.getClassEndTime());
+        openUpBo.setLearningStatus(bo.getLearningStatus());
+        openUpBo.setLearningTimeStart(bo.getLearningTimeStart());
         baseMapper.UpGradeStatusByTenant(openUpBo);
+
+        //开启官方信息推送
+        list.forEach(item -> {
+            ClassGradeInterface interfaceInterface = iClassGradeInterfaceService.getInfterFaceByTenant(1,item.getTenantId());
+            if (ObjectUtils.isNotNull(interfaceInterface)){
+                ClassGradeOpenUpBo upBo = new ClassGradeOpenUpBo();
+                upBo.setGradeId(item.getGradeId());
+                upBo.setInterfacePushId(interfaceInterface.getId());
+                baseMapper.UpGradeInterfaceByTenant(upBo);
+            }
+        });
+
     }
 
     @Override

+ 6 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -128,6 +128,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Autowired
     private IClassGradeService iClassGradeService;
 
+    @Autowired
+    private IClassGradeInterfaceService iClassGradeInterfaceService;
+
     @Autowired
     private IGoodsService iGoodsService;
 
@@ -154,8 +157,6 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
 
     @Autowired
     private ICourseEducationTypeService iCourseEducationTypeService;
-    @Autowired
-    private IClassGradeInterfaceService iClassGradeInterfaceService;
 
 
     @Value("${aliyun.oss.endpoint}")
@@ -535,7 +536,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
      */
     @Override
     public String pushOfficialInfo(ClassGradeUserQueryBo bo) {
-        //暂时关闭推送入口
+        //暂时关闭信息推送入口
 //        if (true){
 //            return "";
 //        }
@@ -652,10 +653,11 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
      */
     @Override
     public String pushOfficialPeriod(ClassGradeUserQueryBo bo) {
-        //暂时关闭推送入口
+        //暂时关闭学时推送入口
         if (true){
             return "";
         }
+
         ClassGradeUserVo userVo = this.baseMapper.selectUser(bo);
         if (Validator.isEmpty(userVo)) {
             return "用户不存在";

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -759,15 +759,29 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         params.put("jsonstr", JSONObject.toJSONString(studyRec));
         String respone = "";
         log.info("学时推送业务系统"+params,"");
+
+        LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+        objectLambdaUpdateWrapper.eq(ClassGradeUser::getId, gradeUser.getId());
+        objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldResult, "成功");
+        objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldTime, DateUtils.getNowTime());
+        objectLambdaUpdateWrapper.set(ClassGradeUser::getUpdateTime, DateUtils.getNowTime());
+        objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldStatus, 1);
         try {
             respone = HttpUtils.postFormBody(SYNC_PATH, params);
             log.info("学时推送业务系统结果"+respone,"");
             if (!respone.contains("\"Status\":true")) {
+                objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldResult, respone);
+                objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldStatus, -1);
+                iClassGradeUserService.update(null, objectLambdaUpdateWrapper);
                 throw new CustomException("同步请求错误"+respone);
             }
         } catch (IOException e) {
+            objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldResult, e.getMessage());
+            objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldStatus, -1);
+            iClassGradeUserService.update(null, objectLambdaUpdateWrapper);
             throw new CustomException("同步请求错误"+e.getMessage());
         }
+        iClassGradeUserService.update(null, objectLambdaUpdateWrapper);
         return studyRec;
     }
 

+ 13 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeUserVo.java

@@ -146,4 +146,17 @@ public class ClassGradeUserVo {
 	@Excel(name = "官方账号开通(无接口)")
 	@ApiModelProperty("官方账号开通(无接口)")
 	private Long noInterfaceAccountId;
+
+	/** 学习记录同步到老系统 1成功 -1失败 */
+	@Excel(name = "学习记录同步到老系统 1成功 -1失败")
+	@ApiModelProperty("学习记录同步到老系统 1成功 -1失败")
+	private Integer toOldStatus;
+	/** 学习记录同步到老系统结果 */
+	@Excel(name = "学习记录同步到老系统结果")
+	@ApiModelProperty("学习记录同步到老系统结果")
+	private String toOldResult;
+	/** 学习记录同步到老系统时间 */
+	@Excel(name = "学习记录同步到老系统时间")
+	@ApiModelProperty("学习记录同步到老系统时间")
+	private Long toOldTime;
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/inform/domain/InformRemind.java

@@ -50,6 +50,7 @@ private static final long serialVersionUID=1L;
     private Integer gzhTpStatus;
     /** 1学员 2教务 */
     private Integer userType;
-
+    /** 类型:1,普通 2,订单初审 3,订单复审 */
+    private Integer type;
     private Long tenantId;
 }

+ 42 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/inform/service/impl/InformSysUserServiceImpl.java

@@ -2,23 +2,31 @@ package com.zhongzheng.modules.inform.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.inform.bo.InformSysUserAddBo;
 import com.zhongzheng.modules.inform.bo.InformSysUserEditBo;
 import com.zhongzheng.modules.inform.bo.InformSysUserQueryBo;
 import com.zhongzheng.modules.inform.bo.InformUserEditBo;
+import com.zhongzheng.modules.inform.domain.InformRemind;
 import com.zhongzheng.modules.inform.domain.InformSysUser;
 import com.zhongzheng.modules.inform.mapper.InformSysUserMapper;
+import com.zhongzheng.modules.inform.service.IInformRemindService;
 import com.zhongzheng.modules.inform.service.IInformSysUserService;
 import com.zhongzheng.modules.inform.vo.InformSysUserVo;
+import com.zhongzheng.modules.order.domain.OrderGoods;
+import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.user.domain.User;
 import io.swagger.models.auth.In;
+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;
@@ -33,10 +41,26 @@ import java.util.stream.Collectors;
 @Service
 public class InformSysUserServiceImpl extends ServiceImpl<InformSysUserMapper, InformSysUser> implements IInformSysUserService {
 
+    @Autowired
+    private IOrderGoodsService iOrderGoodsService;
+    @Autowired
+    private IInformRemindService iInformRemindService;
+
     @Override
     public InformSysUserVo queryById(Long id){
         InformSysUser db = this.baseMapper.selectById(id);
-        return BeanUtil.toBean(db, InformSysUserVo.class);
+        InformSysUserVo vo = BeanUtil.toBean(db, InformSysUserVo.class);
+        if (ObjectUtils.isNotNull(vo.getOrderGoodsId())){
+            OrderGoods orderGoods = iOrderGoodsService.getById(vo.getOrderGoodsId());
+            vo.setOrderSn(orderGoods.getOrderSn());
+        }
+        if (ObjectUtils.isNotNull(vo.getRemindId())){
+            InformRemind informRemind = iInformRemindService.getById(vo.getRemindId());
+            vo.setType(informRemind.getType());
+        }else {
+            vo.setType(1);
+        }
+        return vo;
     }
 
     @Override
@@ -56,7 +80,23 @@ public class InformSysUserServiceImpl extends ServiceImpl<InformSysUserMapper, I
         lqw.eq(bo.getGradeId() != null, InformSysUser::getGradeId, bo.getGradeId());
         lqw.eq(bo.getOrderGoodsId() != null, InformSysUser::getOrderGoodsId, bo.getOrderGoodsId());
         lqw.eq(bo.getStatus() != null, InformSysUser::getStatus, bo.getStatus());
-        return entity2Vo(this.list(lqw));
+        List<InformSysUserVo> informSysUserVos = entity2Vo(this.list(lqw));
+        if (CollectionUtils.isEmpty(informSysUserVos)){
+            return new ArrayList<>();
+        }
+        informSysUserVos.forEach(item -> {
+            if (ObjectUtils.isNotNull(item.getOrderGoodsId())){
+                OrderGoods orderGoods = iOrderGoodsService.getById(item.getOrderGoodsId());
+                item.setOrderSn(orderGoods.getOrderSn());
+            }
+            if (ObjectUtils.isNotNull(item.getRemindId())){
+                InformRemind informRemind = iInformRemindService.getById(item.getRemindId());
+                item.setType(informRemind.getType());
+            }else {
+                item.setType(1);
+            }
+        });
+        return informSysUserVos;
     }
 
     /**

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/inform/vo/InformSysUserVo.java

@@ -76,6 +76,10 @@ public class InformSysUserVo {
 	@Excel(name = "订单商品ID")
 	@ApiModelProperty("订单商品ID")
 	private Long orderGoodsId;
+	@ApiModelProperty("订单号")
+	private String orderSn;
+	@ApiModelProperty("消息类型:1,普通 2,订单初审 3,订单复审")
+	private Integer type;
 	/** 状态 1有效 0无效 */
 	@Excel(name = "状态 1有效 0无效")
 	@ApiModelProperty("状态 1有效 0无效")

+ 21 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/service/impl/MockApplyServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.exception.CustomException;
@@ -24,7 +25,10 @@ import com.zhongzheng.modules.mock.bo.*;
 import com.zhongzheng.modules.mock.domain.*;
 import com.zhongzheng.modules.mock.service.*;
 import com.zhongzheng.modules.mock.vo.*;
+import com.zhongzheng.modules.order.domain.OrderGoods;
+import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.user.domain.UserMockSubscribe;
 import com.zhongzheng.modules.user.service.IUserMockSubscribeService;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
@@ -65,6 +69,9 @@ public class MockApplyServiceImpl extends ServiceImpl<MockApplyMapper, MockApply
     @Autowired
     private IOrderService iOrderService;
 
+    @Autowired
+    private IOrderGoodsService iOrderGoodsService;
+
     @Autowired
     private IMajorService iMajorService;
 
@@ -402,6 +409,20 @@ public class MockApplyServiceImpl extends ServiceImpl<MockApplyMapper, MockApply
                 }else {
                     mockApplyVo.setIsSubscribe(1);
                 }
+                //获取商品和订单商品ID
+                List<MockMajorSubjectGoods> list = iMockMajorSubjectGoodsService
+                        .list(new LambdaQueryWrapper<MockMajorSubjectGoods>()
+                        .eq(MockMajorSubjectGoods::getMockMajorSubjectId, mockApplyVo.getMockMajorSubjectId()));
+                if (CollectionUtils.isNotEmpty(list)){
+                    for (MockMajorSubjectGoods item : list) {
+                        OrderGoods orderGoods = iOrderGoodsService.getOrderByGoods(bo.getUserId(),item.getGoodsId());
+                        if (ObjectUtils.isNotNull(orderGoods)){
+                            mockApplyVo.setOrderGoodsId(orderGoods.getOrderGoodsId());
+                            mockApplyVo.setGoodsId(orderGoods.getGoodsId());
+                            break;
+                        }
+                    }
+                }
             });
         }
         return mockApplyVoList;

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/vo/MockApplyVo.java

@@ -209,4 +209,10 @@ public class MockApplyVo {
 	@ApiModelProperty("活动结束时间")
 	private Long activityEndTime;
 
+	@ApiModelProperty("商品ID")
+	private Long goodsId;
+
+	@ApiModelProperty("订单商品ID")
+	private Long orderGoodsId;
+
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderGoodsMapper.java

@@ -59,4 +59,6 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
     List<OrderGoodsVo> getLongNotStudyList(OrderQueryBo bo);
 
     List<GoodsSectionListVo> getGoodsSectionList(@Param("goodsId") Long goodsId);
+
+    OrderGoods getOrderByGoods(@Param("userId")Long userId,@Param("goodsId") Long goodsId);
 }

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderGoodsRefundMapper.java

@@ -15,10 +15,13 @@ import java.util.List;
  * @date 2022-01-04
  */
 public interface OrderGoodsRefundMapper extends BaseMapper<OrderGoodsRefund> {
-    List<OrderGoodsRefundVo> selectList(OrderGoodsRefundQueryBo bo);
+    List<OrderGoodsRefundVo> selectListByBo(OrderGoodsRefundQueryBo bo);
 
     Long selectCountConfirmPeriod(@Param("userId") Long userId, @Param("refundId") Long refundId);
 
     Long selectCountFirstPeriod(@Param("userId") Long userId, @Param("refundId") Long refundId);
 
+    List<OrderGoodsRefundVo> selectListByQuery(OrderGoodsRefundQueryBo bo);
+
+    List<OrderGoodsRefundVo> selectListByOrderSn(OrderGoodsRefundQueryBo bo);
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsRefundService.java

@@ -59,7 +59,11 @@ public interface IOrderGoodsRefundService extends IService<OrderGoodsRefund> {
 
 	List<OrderGoodsRefundVo> selectList(OrderGoodsRefundQueryBo bo);
 
+	List<OrderGoodsRefundVo> selectListByQuery(OrderGoodsRefundQueryBo bo);
+
 	Boolean confirmPeriod(List<OrderGoodsRefundEditBo> bos);
 
 	Boolean firstPeriod(List<OrderGoodsRefundEditBo> bos);
+
+	List<OrderGoodsRefundVo> listByOrderSn(OrderGoodsRefundQueryBo bo);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsService.java

@@ -111,4 +111,6 @@ public interface IOrderGoodsService extends IService<OrderGoods> {
     Boolean checkGoodsStatus(CheckGoodsStatusBo bo);
 
     List<GoodsSectionListVo> getGoodsSectionList(GoodsSectionListBo bo);
+
+    OrderGoods getOrderByGoods(Long userId, Long goodsId);
 }

+ 138 - 28
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java

@@ -5,8 +5,15 @@ 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;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.Page;
+import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
@@ -15,12 +22,18 @@ import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.activity.domain.ActivityOrder;
 import com.zhongzheng.modules.activity.service.IActivityOrderService;
+import com.zhongzheng.modules.course.domain.CourseBusiness;
+import com.zhongzheng.modules.course.service.ICourseBusinessService;
 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.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
+import com.zhongzheng.modules.inform.domain.InformRemind;
+import com.zhongzheng.modules.inform.domain.InformSysUser;
+import com.zhongzheng.modules.inform.service.IInformRemindService;
+import com.zhongzheng.modules.inform.service.IInformSysUserService;
 import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.domain.OrderGoods;
@@ -35,11 +48,10 @@ import com.zhongzheng.modules.order.vo.OrderGoodsRefundVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderShareGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderShareToOldVo;
+import com.zhongzheng.modules.system.service.ISysUserService;
 import com.zhongzheng.modules.user.bo.UserExamGoodsQueryBo;
 import com.zhongzheng.modules.user.bo.UserExamRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserStudyRecordQueryBo;
-import com.zhongzheng.modules.user.domain.User;
-import com.zhongzheng.modules.user.domain.UserStudyRecord;
 import com.zhongzheng.modules.user.service.IUserExamGoodsService;
 import com.zhongzheng.modules.user.service.IUserExamRecordService;
 import com.zhongzheng.modules.user.service.IUserService;
@@ -49,10 +61,6 @@ import com.zhongzheng.modules.wx.service.IWxPayService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 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 org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
@@ -92,6 +100,14 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
     @Autowired
     private IActivityOrderService iActivityOrderService;
     @Autowired
+    private IInformSysUserService iInformSysUserService;
+    @Autowired
+    private IInformRemindService informRemindService;
+    @Autowired
+    private ICourseBusinessService iCourseBusinessService;
+    @Autowired
+    private ISysUserService iSysUserService;
+    @Autowired
     private IClassGradeService iClassGradeService;
     @Value("${oldStudySys.shareCanclePath}")
     private String SHARE_CANCLE_PATH;
@@ -146,6 +162,7 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean placeRefundSmallOrder(OrderGoodsRefundAddBo bo) {
         if(Validator.isEmpty(bo.getGoodsId())||Validator.isEmpty(bo.getOrderSn())){
             throw new CustomException("参数缺失");
@@ -209,29 +226,66 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         if(goods.getGoodsType()==6){
             throw new CustomException("直播商品不能退款");
         }
-        OrderGoodsRefund add = getOne(new LambdaQueryWrapper<OrderGoodsRefund>().eq(OrderGoodsRefund::getGoodsId,bo.getGoodsId()).eq(OrderGoodsRefund::getOrderSn,bo.getOrderSn()));
-        String out_trade_no = null;
-        if(Validator.isNotEmpty(add)){
-            out_trade_no = add.getRefundSn();
-        }else{
-            add = BeanUtil.toBean(bo, OrderGoodsRefund.class);
-            validEntityBeforeSave(add);
-            add.setCreateTime(DateUtils.getNowTime());
-            add.setUpdateTime(DateUtils.getNowTime());
-            //退款单号
-             out_trade_no = DateUtils.getDateOrderSn();
-            add.setRefundSn(out_trade_no);
-            add.setRefundFee(orderGoods.getGoodsReceived());
-            add.setUserId(order.getUserId());
-            add.setType(OrderGoodsRefund.TYPE_SMALL);
-            add.setOrderGoodsId(orderGoods.getOrderGoodsId());
-            this.save(add);
+
+        OrderGoodsRefund add = BeanUtil.toBean(bo, OrderGoodsRefund.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        //退款单号
+        add.setRefundSn(DateUtils.getDateOrderSn());
+        add.setRefundFee(orderGoods.getGoodsReceived());
+        add.setUserId(order.getUserId());
+        add.setType(OrderGoodsRefund.TYPE_SMALL);
+        add.setOrderGoodsId(orderGoods.getOrderGoodsId());
+        this.save(add);
+        //修改订单状态
+        iOrderGoodsService.update(new LambdaUpdateWrapper<OrderGoods>()
+        .set(OrderGoods::getRefundStatus,1)
+        .eq(OrderGoods::getOrderGoodsId,orderGoods.getOrderGoodsId()));
+
+        //通知教务审核(后台站内信)
+        InformRemind informRemind = informRemindService.getOne(new LambdaQueryWrapper<InformRemind>()
+        .eq(InformRemind::getRemind,"订单退款申请通知提醒").last("limit 1"));
+        if (informRemind.getWayStatus() == 1 && informRemind.getUserType() == 2) {
+            //获取初审审核人账号
+            CourseBusiness business = iCourseBusinessService.getById(goods.getBusinessId());
+            if (ObjectUtils.isNotNull(business) && StringUtils.isNotBlank(business.getRefundUserIds())){
+                List<SysUser> sysUsers = iSysUserService.listByIds(Arrays.asList(business.getRefundUserIds().split(",")));
+                if (CollectionUtils.isNotEmpty(sysUsers)){
+                    sysUsers.forEach(user -> {
+                        InformSysUser addBo = new InformSysUser();
+                        addBo.setUserId(user.getUserId());
+                        addBo.setSendTime(DateUtils.getNowTime());
+                        addBo.setSendStatus(1);
+                        addBo.setCreateTime(DateUtils.getNowTime());
+                        addBo.setUpdateTime(DateUtils.getNowTime());
+                        addBo.setRemindId(informRemind.getId());
+                        addBo.setReceiptStatus(0);
+                        addBo.setSystemStatus(1);
+                        addBo.setRemind("订单退款申请通知提醒");
+                        addBo.setGoodsId(goods.getGoodsId());
+                        addBo.setOrderGoodsId(orderGoods.getOrderGoodsId());
+                        GoodsVo goodsVo1 = iGoodsService.queryById(goods.getGoodsId());
+                        addBo.setText(String.format("【%s】课程申请退款,请尽快处理!",goodsVo1.getGoodsName()));
+                        iInformSysUserService.save(addBo);
+                    });
+                }
+            }
+
         }
+
+//        OrderGoodsRefund add = getOne(new LambdaQueryWrapper<OrderGoodsRefund>().eq(OrderGoodsRefund::getGoodsId,bo.getGoodsId()).eq(OrderGoodsRefund::getOrderSn,bo.getOrderSn()));
+//        String out_trade_no = null;
+//        if(Validator.isNotEmpty(add)){
+//            out_trade_no = add.getRefundSn();
+//        }else{
+//
+//        }
 //        Map<String, String> payResult =  iWxPayService.refund(out_trade_no,order.getTransid(),add.getRefundFee(),order.getPayPrice());
 //        if("OK".equals(payResult.get("return_msg"))&&Validator.isNotEmpty(payResult.get("refund_id"))){
 //            refundCall(payResult.get("refund_id"),add.getRefundId(),orderGoods.getOrderGoodsId(),order,goods.getGoodsType(),orderGoods.getGradeId(),bo.getUserId(),goods.getGoodsId());
 //            //关闭C端用户的分销返利
-
+//
 //        shareClientCancelOldSys(order,orderGoods,add.getRefundFee());
 //            return true;
 //        }else{
@@ -486,7 +540,25 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
 
     @Override
     public List<OrderGoodsRefundVo> selectList(OrderGoodsRefundQueryBo bo) {
-        return baseMapper.selectList(bo);
+        return baseMapper.selectListByBo(bo);
+    }
+
+    @Override
+    public List<OrderGoodsRefundVo> selectListByQuery(OrderGoodsRefundQueryBo bo) {
+        List<OrderGoodsRefundVo> orderSns = baseMapper.selectListByQuery(bo);
+        if (CollectionUtils.isEmpty(orderSns)){
+            return new ArrayList<>();
+        }
+        orderSns.forEach(item -> {
+            OrderGoodsRefundQueryBo queryBo = new OrderGoodsRefundQueryBo();
+            queryBo.setOrderSn(item.getOrderSn());
+            queryBo.setPeriodStatus(bo.getPeriodStatus());
+            List<OrderGoodsRefundVo> orderGoodsRefundVos = baseMapper.selectListByOrderSn(queryBo);
+            OrderGoodsRefundVo vo = orderGoodsRefundVos.stream().findFirst().orElse(null);
+            vo.setGoodsNum(orderGoodsRefundVos.size());
+            BeanUtil.copyProperties(vo,item);
+        });
+        return orderSns;
     }
 
     @Override
@@ -555,7 +627,7 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
                 if (ObjectUtils.isNotNull(bo.getType()) && bo.getType() == 1){
                     //小程序/H5/PC 同意退款处理
                     Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, bo.getOrderSn()));
-                    Map<String, String> payResult =  iWxPayService.refund(bo.getOrderSn(),order.getTransid(),bo.getRealRefundFee(),order.getPayPrice());
+                    Map<String, String> payResult =  iWxPayService.refund(bo.getRefundSn(),order.getTransid(),bo.getRealRefundFee(),order.getPayPrice());
                     if("OK".equals(payResult.get("return_msg"))&&Validator.isNotEmpty(payResult.get("refund_id"))){
                         OrderGoods orderGoods = iOrderGoodsService.getById(bo.getOrderGoodsId());
                         Goods goods = iGoodsService.getById(bo.getGoodsId());
@@ -577,7 +649,7 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
                 //修改订单商品退款状态
                 OrderGoods orderGoodsUpdate = new OrderGoods();
                 orderGoodsUpdate.setOrderGoodsId(orderGoodsRefund.getOrderGoodsId());
-                orderGoodsUpdate.setRefundStatus(3); //拒绝退款
+                orderGoodsUpdate.setRefundStatus(ObjectUtils.isNotNull(bo.getType()) && bo.getType() == 2 ? 3:0); //拒绝退款
                 orderGoodsUpdate.setUpdateTime(DateUtils.getNowTime());
                 iOrderGoodsService.updateById(orderGoodsUpdate);
             }
@@ -624,12 +696,50 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
                 //修改订单商品退款状态
                 OrderGoods orderGoodsUpdate = new OrderGoods();
                 orderGoodsUpdate.setOrderGoodsId(orderGoodsRefund.getOrderGoodsId());
-                orderGoodsUpdate.setRefundStatus(3); //拒绝退款
+                orderGoodsUpdate.setRefundStatus(ObjectUtils.isNotNull(bo.getType()) && bo.getType() == 2 ? 3:0); //拒绝退款
                 orderGoodsUpdate.setUpdateTime(DateUtils.getNowTime());
                 iOrderGoodsService.updateById(orderGoodsUpdate);
             }
+
+            OrderGoodsRefund refundGoods = getById(bo.getRefundId());
+            if(refundGoods.getPeriodStatus() == 1){
+                //教务初审通过通知财务(后台站内信)
+                InformRemind informRemind = informRemindService.getOne(new LambdaQueryWrapper<InformRemind>()
+                        .eq(InformRemind::getRemind,"订单退款初审通过提醒").last("limit 1"));
+                if (informRemind.getWayStatus() == 1 && informRemind.getUserType() == 2) {
+                    Goods goods = iGoodsService.getById(refundGoods.getGoodsId());
+                    //获取初审审核人账号
+                    CourseBusiness business = iCourseBusinessService.getById(goods.getBusinessId());
+                    if (ObjectUtils.isNotNull(business) && StringUtils.isNotBlank(business.getRefundConfirmUserIds())){
+                        List<SysUser> sysUsers = iSysUserService.listByIds(Arrays.asList(business.getRefundConfirmUserIds().split(",")));
+                        if (CollectionUtils.isNotEmpty(sysUsers)){
+                            sysUsers.forEach(user -> {
+                                InformSysUser addBo = new InformSysUser();
+                                addBo.setUserId(user.getUserId());
+                                addBo.setSendTime(DateUtils.getNowTime());
+                                addBo.setSendStatus(1);
+                                addBo.setCreateTime(DateUtils.getNowTime());
+                                addBo.setUpdateTime(DateUtils.getNowTime());
+                                addBo.setRemindId(informRemind.getId());
+                                addBo.setReceiptStatus(0);
+                                addBo.setSystemStatus(1);
+                                addBo.setRemind("订单退款初审通过提醒");
+                                addBo.setGoodsId(goods.getGoodsId());
+                                addBo.setOrderGoodsId(refundGoods.getOrderGoodsId());
+                                addBo.setText(String.format("【%s】课程申请退款初审已通过,请尽快处理!",goods.getGoodsName()));
+                                iInformSysUserService.save(addBo);
+                            });
+                        }
+                    }
+                }
+            }
         }
 
         return true;
     }
+
+    @Override
+    public List<OrderGoodsRefundVo> listByOrderSn(OrderGoodsRefundQueryBo bo) {
+        return  baseMapper.selectListByOrderSn(bo);
+    }
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java

@@ -667,6 +667,11 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         return  resultVos.stream().filter(s -> s.getRebuild() != null && s.getRebuild().equals(1)).collect(Collectors.toList());
     }
 
+    @Override
+    public OrderGoods getOrderByGoods(Long userId, Long goodsId) {
+        return baseMapper.getOrderByGoods(userId,goodsId);
+    }
+
     private boolean checkUnique(Long GoodsId,Long UserId) {
         ShoppingCart info = iShoppingCartService.getOne(new LambdaQueryWrapper<ShoppingCart>()
                 .eq(ShoppingCart::getUserId,UserId).eq(ShoppingCart::getGoodsId,GoodsId).last("limit 1"));

+ 141 - 138
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -55,10 +55,7 @@ import com.zhongzheng.modules.grade.vo.ClassGradeVo;
 import com.zhongzheng.modules.inform.service.IInformRemindService;
 import com.zhongzheng.modules.inform.service.IInformUserService;
 import com.zhongzheng.modules.order.bo.*;
-import com.zhongzheng.modules.order.domain.Order;
-import com.zhongzheng.modules.order.domain.OrderGoods;
-import com.zhongzheng.modules.order.domain.OrderInput;
-import com.zhongzheng.modules.order.domain.OrderPay;
+import com.zhongzheng.modules.order.domain.*;
 import com.zhongzheng.modules.order.mapper.OrderMapper;
 import com.zhongzheng.modules.order.service.*;
 import com.zhongzheng.modules.order.vo.*;
@@ -97,6 +94,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Autowired
     private IOrderGoodsService iOrderGoodsService;
     @Autowired
+    private IOrderGoodsRefundService iOrderGoodsRefundService;
+    @Autowired
     private IGoodsService iGoodsService;
     @Autowired
     private IClassGradeService iClassGradeService;
@@ -184,18 +183,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     @Override
     public List<OrderListVo> selectList(OrderQueryBo bo) {
-        if(Validator.isNotEmpty(bo.getOrderGoodsStatus())){
-            if(bo.getOrderGoodsStatus()==-1){
-                Integer[] orderStatus = new Integer []{-2,-1};
+        if (Validator.isNotEmpty(bo.getOrderGoodsStatus())) {
+            if (bo.getOrderGoodsStatus() == -1) {
+                Integer[] orderStatus = new Integer[]{-2, -1};
                 bo.setOrderStatus(orderStatus);
-            }
-            else if(bo.getOrderGoodsStatus()==0){
+            } else if (bo.getOrderGoodsStatus() == 0) {
                 bo.setGoodsPayStatus(1);
-            }
-            else if(bo.getOrderGoodsStatus()==1){
+            } else if (bo.getOrderGoodsStatus() == 1) {
                 //已支付 sql实现
-            }
-            else if(bo.getOrderGoodsStatus()==2){
+            } else if (bo.getOrderGoodsStatus() == 2) {
                 bo.setRefundStatus(2);
             }
         }
@@ -245,9 +241,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     @Override
     public List<OrderUserCheckBuyBo> userCheckBuyList(List<OrderUserCheckBuyBo> list) {
-        for(OrderUserCheckBuyBo bo : list){
+        for (OrderUserCheckBuyBo bo : list) {
             bo.setBuy(false);
-            if(Validator.isEmpty(bo.getTel())||Validator.isEmpty(bo.getGradeId())||Validator.isEmpty(bo.getGoodsId())){
+            if (Validator.isEmpty(bo.getTel()) || Validator.isEmpty(bo.getGradeId()) || Validator.isEmpty(bo.getGoodsId())) {
                 bo.setMsg("参数缺失");
                 continue;
             }
@@ -255,7 +251,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, bo.getGoodsId()));
             User user = iUserService.getOne(new LambdaQueryWrapper<User>()
                     .eq(User::getTelphone, EncryptHandler.encrypt(bo.getTel())).last("limit 1"));
-            if(Validator.isNull(user)){
+            if (Validator.isNull(user)) {
                 bo.setMsg("该手机号码用户不存在");
                 continue;
             }
@@ -275,10 +271,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             payStatusList.add(4);
             orderGoodsQueryBo.setPayStatusList(payStatusList);
             List<OrderGoodsVo> list1 = iOrderGoodsService.selectList(orderGoodsQueryBo);
-            if(Validator.isNotEmpty(list1)&&list1.size()>0){
+            if (Validator.isNotEmpty(list1) && list1.size() > 0) {
                 bo.setBuy(true);
             }
-            for(OrderGoodsVo vo : list1){
+            for (OrderGoodsVo vo : list1) {
                 bo.setServiceEndTime(vo.getServiceEndTime());
                 bo.setServiceStartTime(vo.getServiceStartTime());
             }
@@ -440,7 +436,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //订单商品
             Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
             if (goods.getGoodsStatus() != 1) {
-                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单");
+                throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
             OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
             orderGoods.setOrderSn(out_trade_no);
@@ -468,7 +464,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             payPrice = payPrice.add(g.getGoodsPrice());
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
             boolean canRepeatBuy = false;
-            validUserBeforeBuy(goods,bo.getUserId());
+            validUserBeforeBuy(goods, bo.getUserId());
             //判断视频/题库商品是否有购买过,服务期是否过期
             Long oldOrderGoodsId = getHaveBuyGoods(g.getGoodsId(), bo.getUserId());
             //视频商品安排班级
@@ -498,7 +494,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     isArrange = arrangeGrade(goods.getGoodsName(), goods.getGoodsId(), orderGoods.getOrderGoodsId(), gradeId, add.getUserId(), out_trade_no, goods.getBusinessId());
                     redisCache.unlockLua(redisLockEntity);
                 }
-                if(!isArrange){
+                if (!isArrange) {
                     throw new CustomException("分班错误");
                 }
                 iOrderGoodsService.updateById(orderGoods);
@@ -510,7 +506,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             }
             if (goods.getGoodsType() == 6) {
                 //直播商品
-                if(Validator.isNotEmpty(oldOrderGoodsId)&&oldOrderGoodsId.longValue()>0){
+                if (Validator.isNotEmpty(oldOrderGoodsId) && oldOrderGoodsId.longValue() > 0) {
                     throw new CustomException("直播商品不允许复购");
                 }
             }
@@ -553,14 +549,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     public Map<String, Object> placePlatInputOrder(OrderAddBo bo) {
         List<OrderGoodsAddBo> goodsList = bo.getGoodsList();
         if (goodsList == null || goodsList.size() < 1) {
-            throw new CustomException("商品列表为空",510);
+            throw new CustomException("商品列表为空", 510);
         }
         if (Validator.isEmpty(bo.getInputOrderSn())) {
-            throw new CustomException("录单单号为空",510);
+            throw new CustomException("录单单号为空", 510);
         }
         OrderInput orderInput = iOrderInputService.queryBySn(bo.getInputOrderSn());
         if (Validator.isEmpty(orderInput)) {
-            throw new CustomException("录单单号不存在",510);
+            throw new CustomException("录单单号不存在", 510);
         }
         Order add = BeanUtil.toBean(bo, Order.class);
         validEntityBeforeSave(add);
@@ -609,7 +605,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             receivedPrice = receivedPrice.add(g.getGoodsReceived());
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
             boolean canRepeatBuy = false;
-            validUserBeforeBuy(goods,bo.getUserId());
+            validUserBeforeBuy(goods, bo.getUserId());
             //判断是否有购买过
             Long oldOrderGoodsId = getHaveBuyGoods(g.getGoodsId(), bo.getUserId());
             //视频商品安排班级
@@ -639,8 +635,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     isArrange = arrangeGrade(goods.getGoodsName(), goods.getGoodsId(), orderGoods.getOrderGoodsId(), gradeId, add.getUserId(), out_trade_no, goods.getBusinessId());
                     redisCache.unlockLua(redisLockEntity);
                 }
-                if(!isArrange){
-                    throw new CustomException("分班错误",510);
+                if (!isArrange) {
+                    throw new CustomException("分班错误", 510);
                 }
                 iOrderGoodsService.updateById(orderGoods);
                 newFreeBankGoods(goods.getGoodsId(), orderGoods.getOrderGoodsId());
@@ -651,7 +647,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             }
             if (goods.getGoodsType() == 6) {
                 //直播商品
-                if(Validator.isNotEmpty(oldOrderGoodsId)&&oldOrderGoodsId.longValue()>0){
+                if (Validator.isNotEmpty(oldOrderGoodsId) && oldOrderGoodsId.longValue() > 0) {
                     throw new CustomException("直播商品不允许复购");
                 }
             }
@@ -666,9 +662,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
 
         add.setOrderSn(out_trade_no);
-        if(Validator.isNotEmpty(bo.getOrderFrom())&&bo.getOrderFrom()==6){
+        if (Validator.isNotEmpty(bo.getOrderFrom()) && bo.getOrderFrom() == 6) {
             add.setOrderFrom(bo.getOrderFrom());
-        }else{
+        } else {
             add.setOrderFrom(Order.FROM_INPUT);
         }
         add.setPayPrice(payPrice);//需要支付价格
@@ -770,7 +766,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //订单商品
             Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
             if (goods.getGoodsStatus() != 1) {
-                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单");
+                throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
             body = "中正祥粤云-" + goods.getGoodsName();
             OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
@@ -800,7 +796,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
 
             boolean canRepeatBuy = false;
-            validUserBeforeBuy(goods,bo.getUserId());
+            validUserBeforeBuy(goods, bo.getUserId());
             //判断是否有购买过
             Long oldOrderGoodsId = getHaveBuyGoods(g.getGoodsId(), bo.getUserId());
             //视频商品安排班级
@@ -837,7 +833,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             }
             if (goods.getGoodsType() == 6) {
                 //直播商品
-                if(Validator.isNotEmpty(oldOrderGoodsId)&&oldOrderGoodsId.longValue()>0){
+                if (Validator.isNotEmpty(oldOrderGoodsId) && oldOrderGoodsId.longValue() > 0) {
                     throw new CustomException("直播商品不允许复购");
                 }
             }
@@ -872,7 +868,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         this.save(add);
 
         //判断是否红包活动订单
-        if (org.apache.commons.lang3.StringUtils.isNotBlank(add.getShareActivityCode())){
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(add.getShareActivityCode())) {
             ActivityOrder activityOrder = new ActivityOrder();
             activityOrder.setOrderSn(out_trade_no);
             activityOrder.setType(1);//分销红包活动
@@ -931,7 +927,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //订单商品
             Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
             if (goods.getGoodsStatus() != 1) {
-                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单");
+                throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
             body = "中正祥粤云-" + goods.getGoodsName();
             OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
@@ -961,7 +957,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
 
             boolean canRepeatBuy = false;
-            validUserBeforeBuy(goods,bo.getUserId());
+            validUserBeforeBuy(goods, bo.getUserId());
             //判断是否有购买过
             Long oldOrderGoodsId = getHaveBuyGoods(g.getGoodsId(), bo.getUserId());
             //视频商品安排班级
@@ -998,7 +994,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             }
             if (goods.getGoodsType() == 6) {
                 //直播商品
-                if(Validator.isNotEmpty(oldOrderGoodsId)&&oldOrderGoodsId.longValue()>0){
+                if (Validator.isNotEmpty(oldOrderGoodsId) && oldOrderGoodsId.longValue() > 0) {
                     throw new CustomException("直播商品不允许复购");
                 }
             }
@@ -1044,10 +1040,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         Map<String, String> payResult = new HashMap<>();
         //大于0元,获取微信支付信息
         if (payPrice.compareTo(BigDecimal.ZERO) != 0) {
-            if(Validator.isEmpty(userVo.getGzhOpenId())){
+            if (Validator.isEmpty(userVo.getGzhOpenId())) {
                 throw new CustomException("请先授权绑定公众号信息");
             }
-            payResult = iWxPayService.paymentGzh(pay_no, userVo.getGzhOpenId(), body, payPrice,bo.getUrl());
+            payResult = iWxPayService.paymentGzh(pay_no, userVo.getGzhOpenId(), body, payPrice, bo.getUrl());
         }
 
         payResult.put("orderSn", out_trade_no);
@@ -1084,7 +1080,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //订单商品
             Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
             if (goods.getGoodsStatus() != 1) {
-                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单");
+                throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
             body = "中正祥粤云-" + goods.getGoodsName();
             OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
@@ -1114,7 +1110,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
 
             boolean canRepeatBuy = false;
-            validUserBeforeBuy(goods,bo.getUserId());
+            validUserBeforeBuy(goods, bo.getUserId());
             //判断是否有购买过
             Long oldOrderGoodsId = getHaveBuyGoods(g.getGoodsId(), bo.getUserId());
             //视频商品安排班级
@@ -1151,7 +1147,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             }
             if (goods.getGoodsType() == 6) {
                 //直播商品
-                if(Validator.isNotEmpty(oldOrderGoodsId)&&oldOrderGoodsId.longValue()>0){
+                if (Validator.isNotEmpty(oldOrderGoodsId) && oldOrderGoodsId.longValue() > 0) {
                     throw new CustomException("直播商品不允许复购");
                 }
             }
@@ -1205,12 +1201,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return payResult;
     }
 
-    private Boolean validUserBeforeBuy(Goods goods ,Long userId){
-        if(goods.getGoodsType()==3||goods.getGoodsType()==4){
+    private Boolean validUserBeforeBuy(Goods goods, Long userId) {
+        if (goods.getGoodsType() == 3 || goods.getGoodsType() == 4) {
             Long makeGoodsId = goods.getMakeGoodsId();
-            UserExamGoods entity = userExamGoodsService.getOne(new LambdaQueryWrapper<UserExamGoods>().eq(UserExamGoods::getUserId,userId).eq(UserExamGoods::getGoodsId,makeGoodsId).last("limit 1"));
-            if(Validator.isEmpty(entity)){
-                throw new CustomException("请先购买此补考前培商品的绑定商品",510);
+            UserExamGoods entity = userExamGoodsService.getOne(new LambdaQueryWrapper<UserExamGoods>().eq(UserExamGoods::getUserId, userId).eq(UserExamGoods::getGoodsId, makeGoodsId).last("limit 1"));
+            if (Validator.isEmpty(entity)) {
+                throw new CustomException("请先购买此补考前培商品的绑定商品", 510);
             }
 
         }
@@ -1231,7 +1227,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             for (OrderGoods g : goodsList) {
                 Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
                 if (goods.getGoodsStatus() != 1) {
-                    throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单");
+                    throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
                 }
                 body = "中正祥粤云-" + goods.getGoodsName();
                 break;
@@ -1267,7 +1263,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             for (OrderGoods g : goodsList) {
                 Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
                 if (goods.getGoodsStatus() != 1) {
-                    throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单");
+                    throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
                 }
                 body = "中正祥粤云-" + goods.getGoodsName();
                 break;
@@ -1284,16 +1280,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         payAddBo.setStatus(0);
         payAddBo.setPayPrice(order.getPayPrice());
         iOrderPayService.insertByAddBo(payAddBo);
-        Map<String, String> payResult = iWxPayService.paymentGzh(pay_no, userVo.getGzhOpenId(), body, order.getPayPrice(),bo.getUrl());
+        Map<String, String> payResult = iWxPayService.paymentGzh(pay_no, userVo.getGzhOpenId(), body, order.getPayPrice(), bo.getUrl());
         payResult.put("orderSn", bo.getOrderSn());
         return payResult;
     }
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean updateByEditBo(OrderEditBo bo) {
         Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderId, bo.getOrderId()));
-        if (order.getOrderStatus() >0) {
+        if (order.getOrderStatus() > 0) {
             throw new CustomException("订单无法取消");
         }
 
@@ -1301,12 +1298,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         validEntityBeforeSave(update);
         update.setUpdateTime(DateUtils.getNowTime());
         //待支付手动关闭
-        if (Validator.isNotEmpty(update.getOrderStatus())&&update.getOrderStatus() == -1 &&order.getOrderStatus()==0) {
+        if (Validator.isNotEmpty(update.getOrderStatus()) && update.getOrderStatus() == -1 && order.getOrderStatus() == 0) {
             update.setCancelTime(DateUtils.getNowTime());
             //手动关闭订单
             OrderVo orderVo = this.queryById(bo.getOrderId());
             OrderGoodsQueryBo bo1 = new OrderGoodsQueryBo();
-            bo.setOrderSn(orderVo.getOrderSn());
+            bo1.setOrderSn(orderVo.getOrderSn());
             List<OrderGoodsVo> orderGoodsVoList = iOrderGoodsService.selectList(bo1);
             for (OrderGoodsVo g : orderGoodsVoList) {
                 //关闭锁定班级
@@ -1322,7 +1319,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     //班级人数变动通知旧系统
                     Goods goods = iGoodsService.getById(g.getGoodsId());
                     iClassGradeService.gradeChangeEjjjPeople(goods.getBusinessId(),classGradeUserTemp.getGradeId());
-
                 }
             }
 
@@ -1362,6 +1358,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 if (orderGoodsVo.getGoodsRealPrice() != null) {
                     totalPrice = totalPrice.add(orderGoodsVo.getGoodsRealPrice());
                 }
+                //审核状态
+                List<OrderGoodsRefund> refundList = iOrderGoodsRefundService
+                        .list(new LambdaQueryWrapper<OrderGoodsRefund>()
+                        .eq(OrderGoodsRefund::getOrderGoodsId, orderGoodsVo.getOrderGoodsId()));
+                if (CollectionUtils.isNotEmpty(refundList)){
+                    OrderGoodsRefund refund = refundList.stream().filter(item -> item.getPeriodStatus() != -1 && item.getPeriodStatus() != -2).findFirst().orElse(null);
+                    orderGoodsVo.setPeriodStatus(ObjectUtils.isNotNull(refund)?refund.getPeriodStatus():null);
+                }
             }
             orderListVo.setOrderGoodsList(list);
             orderListVo.setTotalPrice(totalPrice);
@@ -1393,7 +1397,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             for (OrderGoods g : goodsList) {
                 Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
                 if (goods.getGoodsStatus() != 1) {
-                    throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单");
+                    throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
                 }
                 body = "中正祥粤云-" + goods.getGoodsName();
                 break;
@@ -1450,6 +1454,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     /**
      * 课程商品ID产生免费的题库商品
+     *
      * @param goodsId
      * @return
      */
@@ -1460,15 +1465,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         Long value = redisCache.getCacheObject(key);
         if (Validator.isNotEmpty(value)) {
             freeBankGoodsId = value;
-            if(freeBankGoodsId.longValue()<0){
+            if (freeBankGoodsId.longValue() < 0) {
                 freeBankGoodsId = null;
             }
         }
-        if(Validator.isEmpty(freeBankGoodsId)){
+        if (Validator.isEmpty(freeBankGoodsId)) {
             List<CourseModuleFreeExamVo> moduleExamList = iGoodsService.moduleFreeExamList(goodsId);
             //课程模块有赠送的试卷
-            if(moduleExamList.size()>0){
-                for(CourseModuleFreeExamVo examVo : moduleExamList){
+            if (moduleExamList.size() > 0) {
+                for (CourseModuleFreeExamVo examVo : moduleExamList) {
                     examVo.setFreeExamName(null);//MD5去除名称影响
                 }
                 String jsonList = JSON.toJSONString(moduleExamList);
@@ -1476,15 +1481,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 //判断该课程商品是否已经存在相同结构的赠送卷商品
                 GoodsFreeBank freeBank = iGoodsFreeBankService.getOne(new LambdaQueryWrapper<GoodsFreeBank>().eq(GoodsFreeBank::getFromGoodsId, goodsId)
                         .eq(GoodsFreeBank::getMd5, examListMd5));
-                if(Validator.isNotEmpty(freeBank)){
+                if (Validator.isNotEmpty(freeBank)) {
                     freeBankGoodsId = freeBank.getGoodsId();//赠送的商品ID
-                }else{
+                } else {
                     Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, goodsId));//获取课程商品
                     String code = ServletUtils.getEncoded("ZS");
                     //创建赠送卷商品
                     GoodsBankAddBo addBo = new GoodsBankAddBo();
                     addBo.setGoodsType(5);
-                    String goodsName = goods.getGoodsName()+"-"+code;
+                    String goodsName = goods.getGoodsName() + "-" + code;
                     addBo.setGoodsName(goodsName);
                     addBo.setEducationTypeId(goods.getEducationTypeId());
                     addBo.setProjectId(goods.getProjectId());
@@ -1493,7 +1498,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     addBo.setCoverUrl("oss/images/avatar/20211013/1634097664410_1397766697");
                     List<GoodsAttachedAddBo> bankList = new ArrayList<>();
                     int sort = 1;
-                    for(CourseModuleFreeExamVo menuVo :moduleExamList){
+                    for (CourseModuleFreeExamVo menuVo : moduleExamList) {
                         GoodsAttachedAddBo attachedAddBo = new GoodsAttachedAddBo();
                         attachedAddBo.setType(menuVo.getExamType());
                         attachedAddBo.setMajorId(menuVo.getFreeExamId());
@@ -1515,12 +1520,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 }
             }
         }
-        if(Validator.isNotEmpty(freeBankGoodsId)){
+        if (Validator.isNotEmpty(freeBankGoodsId)) {
             OrderGoodsFreeAddBo goodsFreeAddBo = new OrderGoodsFreeAddBo();
             goodsFreeAddBo.setFreeGoodsId(freeBankGoodsId);
             goodsFreeAddBo.setOrderGoodsId(orderGoodsId);
             iOrderGoodsFreeService.insertByAddBo(goodsFreeAddBo);
-        }else{
+        } else {
             freeBankGoodsId = -1L; //课程商品不存在免费题库商品
         }
         redisCache.setCacheObject(key, freeBankGoodsId, 10, TimeUnit.SECONDS);
@@ -1550,25 +1555,26 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         payStatusList.add(4);
         orderGoodsQueryBo.setPayStatusList(payStatusList);
         List<OrderGoodsVo> list1 = iOrderGoodsService.selectList(orderGoodsQueryBo);
-        for(OrderGoodsVo goodsVo : list1){
-            if(Validator.isNotEmpty(goodsVo.getServiceEndTime())&&(goodsVo.getServiceEndTime().longValue()>(System.currentTimeMillis()/1000))){
-                if(goodsVo.getGoodsType()==1){
-                    if(Validator.isNotEmpty(goodsVo.getGradeId())){
+        for (OrderGoodsVo goodsVo : list1) {
+            if (Validator.isNotEmpty(goodsVo.getServiceEndTime()) && (goodsVo.getServiceEndTime().longValue() > (System.currentTimeMillis() / 1000))) {
+                if (goodsVo.getGoodsType() == 1) {
+                    if (Validator.isNotEmpty(goodsVo.getGradeId())) {
                         ClassGrade grade = iClassGradeService.getOne(new LambdaQueryWrapper<ClassGrade>()
                                 .eq(ClassGrade::getGradeId, goodsVo.getGradeId()));
                         //不存在班级有效期才校验服务期是否过期
-                        if(Validator.isEmpty(grade.getClassEndTime())){
+                        if (Validator.isEmpty(grade.getClassEndTime())) {
                             return goodsVo;
                         }
                     }
                 }
-                if(goodsVo.getGoodsType()==2){
+                if (goodsVo.getGoodsType() == 2) {
                     return goodsVo;
                 }
             }
         }
         return null;
     }
+
     //判断视频商品是否购买过且服务期是否过期
     public Long getHaveBuyGoods(Long goodsId, Long userId) {
         OrderGoodsQueryBo orderGoodsQueryBo = new OrderGoodsQueryBo();
@@ -1585,19 +1591,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         payStatusList.add(4);
         orderGoodsQueryBo.setPayStatusList(payStatusList);
         List<OrderGoodsVo> list1 = iOrderGoodsService.selectList(orderGoodsQueryBo);
-        for(OrderGoodsVo goodsVo : list1){
-            if(Validator.isNotEmpty(goodsVo.getServiceEndTime())&&(goodsVo.getServiceEndTime().longValue()>(System.currentTimeMillis()/1000))){
-                if(goodsVo.getGoodsType()==1){
-                    if(Validator.isNotEmpty(goodsVo.getGradeId())){
+        for (OrderGoodsVo goodsVo : list1) {
+            if (Validator.isNotEmpty(goodsVo.getServiceEndTime()) && (goodsVo.getServiceEndTime().longValue() > (System.currentTimeMillis() / 1000))) {
+                if (goodsVo.getGoodsType() == 1) {
+                    if (Validator.isNotEmpty(goodsVo.getGradeId())) {
                         ClassGrade grade = iClassGradeService.getOne(new LambdaQueryWrapper<ClassGrade>()
                                 .eq(ClassGrade::getGradeId, goodsVo.getGradeId()));
                         //不存在班级有效期才校验服务期是否过期
-                        if(Validator.isEmpty(grade.getClassEndTime())){
+                        if (Validator.isEmpty(grade.getClassEndTime())) {
                             throw new CustomException("存在已购买【学习服务期未过期】的视频商品,不可以重复购买商品", 511);
                         }
                     }
                 }
-                if(goodsVo.getGoodsType()==2){
+                if (goodsVo.getGoodsType() == 2) {
                     throw new CustomException("存在已购买【学习服务期未过期】的题库商品,不可以重复购买商品", 511);
                 }
             }
@@ -1617,8 +1623,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         bo.setPastDue(1L);
         List<ClassGradeVo> list = iClassGradeService.queryList(bo);
         if (list != null && list.size() > 0) {
-            for(ClassGradeVo gradeVo : list){
-                if(Validator.isNotEmpty(gradeVo.getClassEndTime())){
+            for (ClassGradeVo gradeVo : list) {
+                if (Validator.isNotEmpty(gradeVo.getClassEndTime())) {
                     throw new CustomException("存在已购买【班级有效期未过期】的商品,不可以重复购买商品", 511);
                 }
             }
@@ -1698,9 +1704,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getGradeId, gradeId)
                         .eq(ClassGradeUser::getUserId, userId));
                 //不在此班级内
-                if(Validator.isEmpty(gradeUser)){
+                if (Validator.isEmpty(gradeUser)) {
                     //班级还有剩位,直接锁定班级
-                    if(iClassGradeService.checkEjjjPeopleNumLimit(businessId,gradeId)){ //判断全系统平台二建班级人数是否超300
+                    if (iClassGradeService.checkEjjjPeopleNumLimit(businessId, gradeId)) { //判断全系统平台二建班级人数是否超300
                         return lockGrade(orderGoodsId, gradeId, userId, goodsId, orderSn);
                     }
 
@@ -1728,8 +1734,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getGradeId, gradeId)
                         .eq(ClassGradeUser::getUserId, userId));
                 //不在此班级内
-                if(Validator.isEmpty(gradeUser)){
-                    if(iClassGradeService.checkEjjjPeopleNumLimit(businessId,gradeId)){ //判断全系统平台二建班级人数是否超300
+                if (Validator.isEmpty(gradeUser)) {
+                    if (iClassGradeService.checkEjjjPeopleNumLimit(businessId, gradeId)) { //判断全系统平台二建班级人数是否超300
                         return lockGrade(orderGoodsId, gradeId, userId, goodsId, orderSn);
                     }
                 }
@@ -1739,9 +1745,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         //创建新班级
         CourseBusinessVo businessVo = iCourseBusinessService.queryById(businessId);
         boolean isConfigTp = false; //商品是否有配置选班模板
-//        if (Validator.isNotEmpty(businessVo) && Validator.isNotEmpty(businessVo.getTemplateStatus()) && businessVo.getTemplateStatus() == 1) {
-//            isConfigTp = true;
-//        }
         if (Validator.isNotEmpty(businessVo) && Validator.isNotEmpty(businessVo.getTemplateName()) && businessVo.getTemplateName().equals("班级")) {
             isConfigTp = true;
         }
@@ -1759,6 +1762,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 //生成预开班编号
                 classGrade.setOfficialName(createGradeCode(goodsId, businessVo));
             }
+
         } else {
             classGrade.setLearningStatus(1);//即刻
             classGrade.setStudentUpper(ClassGrade.INIT_UPPER2); //上限1000000
@@ -1774,28 +1778,28 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         CourseEducationType educationType = courseEducationTypeService.getById(goods.getEducationTypeId());
         String educationName = educationType.getEducationName();
         String className = businessName + educationName;
-        if (StringUtils.isNotBlank(goods.getSubjectIds())){
+        if (StringUtils.isNotBlank(goods.getSubjectIds())) {
             List<CourseSubject> subjects = courseSubjectService.listByIds(Arrays.stream(goods.getSubjectIds().split(",")).collect(Collectors.toList()));
             List<String> names = subjects.stream().map(CourseSubject::getSubjectName).collect(Collectors.toList());
-            className = String.format("%s(%s)",className,org.apache.commons.lang3.StringUtils.join(names,'+'));
+            className = String.format("%s(%s)", className, org.apache.commons.lang3.StringUtils.join(names, '+'));
         }
         Integer nameSort = 1;
         //获取排序值
         List<ClassGrade> list = iClassGradeService
                 .list(new LambdaQueryWrapper<ClassGrade>()
-                .like(ClassGrade::getClassName, className));
-        if (CollectionUtils.isNotEmpty(list)){
+                        .like(ClassGrade::getClassName, className));
+        if (CollectionUtils.isNotEmpty(list)) {
             List<Integer> collect = list.stream().filter(x -> x.getClassName().contains("第") && x.getClassName().contains("期")).map(item -> {
                 String name = item.getClassName();
                 String substring = name.substring(name.indexOf("第") + 1, name.indexOf("期"));
                 return Integer.parseInt(substring);
             }).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(collect)){
+            if (CollectionUtils.isNotEmpty(collect)) {
                 Integer integer = collect.stream().sorted(Comparator.reverseOrder()).findFirst().get();
                 nameSort = integer + 1;
             }
         }
-        classGrade.setClassName(String.format("%s年第%s期%s",goods.getYear(),nameSort,className));
+        classGrade.setClassName(String.format("%s年第%s期%s", goods.getYear(), nameSort, className));
 
         boolean save = iClassGradeService.save(classGrade);
         //绑定班级商品
@@ -1810,47 +1814,46 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return true;
     }
 
-    private String createGradeCode(Long goodsId,CourseBusinessVo business) {
+    private String createGradeCode(Long goodsId, CourseBusinessVo business) {
 
         Goods goods = iGoodsService.getById(goodsId);
-        if (StringUtils.isNotBlank(business.getAliasName()) && (business.getAliasName().equals("二级建造师") || business.getAliasName().equals("二级造价工程师"))){
-            List<Goods> goodsList = iGoodsService.list(new LambdaQueryWrapper<Goods>()
-                    .eq(Goods::getEducationTypeId, goods.getEducationTypeId())
-                    .eq(Goods::getBusinessId, goods.getBusinessId())
-                    .eq(Goods::getStatus,1)
-                    .eq(Goods::getGoodsStatus,1)
-                    .eq(Goods::getProjectId, goods.getProjectId())
-                    .eq(Goods::getSubjectIds, goods.getSubjectIds()));
-            if (goodsList.size() > 1){
-                //该业务层次下有多个商品
-                List<Long> goodsIds = goodsList.stream().filter(item -> !item.getGoodsId().equals(goodsId)).map(Goods::getGoodsId).collect(Collectors.toList());
-                //获取预报名班级
-                List<ClassGradeGoods> goodsGradeList = iClassGradeGoodsService.getClassGradeByIds(goodsIds);
-                if (CollectionUtils.isNotEmpty(goodsGradeList)){
-                    Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
-                    List<ClassGradeSortBo> sortList = new ArrayList<>();
-                    map.forEach((k, v) -> {
-                        ClassGradeSortBo sortBo = new ClassGradeSortBo();
-                        sortBo.setKey(k);
-                        sortBo.setSize(v.size());
-                        sortList.add(sortBo);
-                    });
-                    ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
-                    List<ClassGradeGoods> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGradeGoods::getCreateTime)).collect(Collectors.toList());
-                    //班级信息
-                    List<ClassGrade> list = iClassGradeService.listByIds(classGradesMax.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
-                    //获取当前机构商品下的班级
-                    List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
-                    if (gradeGoods.size() < list.size()) {
-                        ClassGrade grade = list.get(gradeGoods.size());
-                        if (iClassGradeService.checkEjjjPeopleNumLimit(business.getId(),grade.getGradeId())){
-                            return grade.getOfficialName();
-                        }
-                        return ServletUtils.getEncoded("PIY");
+        List<Goods> goodsList = iGoodsService.list(new LambdaQueryWrapper<Goods>()
+                .eq(Goods::getEducationTypeId, goods.getEducationTypeId())
+                .eq(Goods::getBusinessId, goods.getBusinessId())
+                .eq(Goods::getStatus, 1)
+                .eq(Goods::getGoodsStatus, 1)
+                .eq(Goods::getProjectId, goods.getProjectId())
+                .eq(Goods::getSubjectIds, goods.getSubjectIds()));
+        if (goodsList.size() > 1) {
+            //该业务层次下有多个商品
+            List<Long> goodsIds = goodsList.stream().filter(item -> !item.getGoodsId().equals(goodsId)).map(Goods::getGoodsId).collect(Collectors.toList());
+            //获取预报名班级
+            List<ClassGradeGoods> goodsGradeList = iClassGradeGoodsService.getClassGradeByIds(goodsIds);
+            if (CollectionUtils.isNotEmpty(goodsGradeList)) {
+                Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
+                List<ClassGradeSortBo> sortList = new ArrayList<>();
+                map.forEach((k, v) -> {
+                    ClassGradeSortBo sortBo = new ClassGradeSortBo();
+                    sortBo.setKey(k);
+                    sortBo.setSize(v.size());
+                    sortList.add(sortBo);
+                });
+                ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
+                List<ClassGradeGoods> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGradeGoods::getCreateTime)).collect(Collectors.toList());
+                //班级信息
+                List<ClassGrade> list = iClassGradeService.listByIds(classGradesMax.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                //获取当前机构商品下的班级
+                List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
+                if (gradeGoods.size() < list.size()) {
+                    ClassGrade grade = list.get(gradeGoods.size());
+                    if (iClassGradeService.checkEjjjPeopleNumLimit(business.getId(), grade.getGradeId())) {
+                        return grade.getOfficialName();
                     }
+                    return ServletUtils.getEncoded("PIY");
                 }
             }
         }
+
         List<CourseSubject> courseSubjectList = courseSubjectService.listByIds(Arrays.asList(goods.getSubjectIds().split(",")));
         List<String> subNames = courseSubjectList.stream().map(CourseSubject::getSubjectName).collect(Collectors.toList());
         List<Long> subIds = courseSubjectService.getIdsByTenant(subNames);
@@ -1877,7 +1880,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //去重
             List<String> codeStrs = new ArrayList<>();
             for (ClassGrade gradesMax : classGradesMax) {
-                if (codeStrs.contains(gradesMax.getOfficialName())){
+                if (codeStrs.contains(gradesMax.getOfficialName())) {
                     continue;
                 }
                 codeStrs.add(gradesMax.getOfficialName());
@@ -1917,8 +1920,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 throw new CustomException("该班级不支持该商品使用");
             }
             //判断用户是否在此班过
-            ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId,userId).eq(ClassGradeUser::getGradeId,gradeId).last("limit 1"));
-            if(Validator.isEmpty(gradeUser)){
+            ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId, userId).eq(ClassGradeUser::getGradeId, gradeId).last("limit 1"));
+            if (Validator.isEmpty(gradeUser)) {
                 LambdaQueryWrapper<ClassGradeUser> lqw = new LambdaQueryWrapper<>();
                 lqw.eq(ClassGradeUser::getGradeId, gradeId);
                 lqw.eq(ClassGradeUser::getStatus, 1);
@@ -1931,7 +1934,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 //预留0空位避免超人数
                 if ((classGradeVo.getStudentUpper() - studentNum - locakStudentNum) > 0) {
                     //班级还有剩位,直接加入班级
-                    if(iClassGradeService.checkEjjjPeopleNumLimit(businessId,gradeId)) { //判断全系统平台二建班级人数是否超300
+                    if (iClassGradeService.checkEjjjPeopleNumLimit(businessId, gradeId)) { //判断全系统平台二建班级人数是否超300
                         joinGrade(orderGoodsId, gradeId, userId);
                         return gradeId;
                     }
@@ -1957,10 +1960,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 //有空位则进入班级
                 gradeId = classGradeVo.getGradeId();
                 //判断用户是否在此班过
-                ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId,userId).eq(ClassGradeUser::getGradeId,gradeId).last("limit 1"));
-                if(Validator.isEmpty(gradeUser)){
+                ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId, userId).eq(ClassGradeUser::getGradeId, gradeId).last("limit 1"));
+                if (Validator.isEmpty(gradeUser)) {
                     //班级还有剩位,直接加入班级
-                    if(iClassGradeService.checkEjjjPeopleNumLimit(businessId,gradeId)) { //判断全系统平台二建班级人数是否超300
+                    if (iClassGradeService.checkEjjjPeopleNumLimit(businessId, gradeId)) { //判断全系统平台二建班级人数是否超300
                         joinGrade(orderGoodsId, gradeId, userId);
                         return gradeId;
                     }
@@ -2040,10 +2043,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if ((classGradeVo.getStudentUpper() - studentNum - locakStudentNum) > 0) {
                 //班级还有剩位,直接加入班级
                 Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, goodsId));
-                if(iClassGradeService.checkEjjjPeopleNumLimit(goods.getBusinessId(),gradeId)) { //判断全系统平台二建班级人数是否超300
+                if (iClassGradeService.checkEjjjPeopleNumLimit(goods.getBusinessId(), gradeId)) { //判断全系统平台二建班级人数是否超300
                     joinGrade(orderGoodsId, gradeId, userId);
                     return gradeId;
-                }else {
+                } else {
                     throw new CustomException("该二建班级学员已满,请重新选班");
                 }
 
@@ -2103,7 +2106,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         //通知外部系统
         OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
         Goods goods = iGoodsService.getById(orderGoods.getGoodsId());
-        iClassGradeService.gradeChangeEjjjPeople(goods.getBusinessId(),gradeId);
+        iClassGradeService.gradeChangeEjjjPeople(goods.getBusinessId(), gradeId);
         return true;
     }
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsRefundVo.java

@@ -136,4 +136,6 @@ public class OrderGoodsRefundVo {
 	@Excel(name = "退款时间")
 	@ApiModelProperty("退款时间")
 	private Long refundTime;
+	@ApiModelProperty("商品数量")
+	private Integer goodsNum;
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsVo.java

@@ -257,7 +257,8 @@ public class OrderGoodsVo {
 	/** 班主任ID */
 	@ApiModelProperty("班主任ID")
 	private Long sysUserId;
-	@ApiModelProperty("学时审批状态 0 未通过 1通过 2待审核 -1 不可审核")
+//	@ApiModelProperty("学时审批状态 0 未通过 1通过 2待审核 -1 不可审核")
+	@ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过待退款  -1初审不通过 -2复审不通过 3复审通过已退款")
 	private Integer periodStatus;
 	/** 学习进度 */
 	@ApiModelProperty("商品关联考试安排状态")

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

@@ -1614,7 +1614,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
     @Override
     public void liveToReplay(UserQueryBo bo) {
         Long nowTime = DateUtils.getNowTime();
-        Long startTime = nowTime - 3600 * 24 * 7;
+        Long startTime = nowTime - 3600 * 24 *7;
         //获取今天直播结束的所有直播节
         List<CourseSectionVo> list = iCourseSectionService.overSectionList(startTime, nowTime);
         for (CourseSectionVo sectionVo : list) {
@@ -1942,6 +1942,9 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 LambdaQueryWrapper<MockMajorSubjectTime> lqw2 = Wrappers.lambdaQuery();
                 lqw2.eq(MockMajorSubjectTime::getId, subscribeVo.getEachExamId());
                 MockMajorSubjectTime mockMajorSubjectTime = iMockMajorSubjectTimeService.getOne(lqw2);
+                if(Validator.isEmpty(mockMajorSubjectTime)){
+                    continue;
+                }
                 LambdaQueryWrapper<MockMajorSubject> lqw3 = Wrappers.lambdaQuery();
                 lqw3.eq(MockMajorSubject::getMockMajorSubjectId, mockMajorSubjectTime.getMockMajorSubjectId());
                 MockMajorSubject mockMajorSubject = iMockMajorSubjectService.getOne(lqw3);

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysNginxConfigAddBo.java

@@ -0,0 +1,22 @@
+package com.zhongzheng.modules.system.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+
+
+@Data
+@ApiModel("nginx配置文件")
+public class SysNginxConfigAddBo {
+
+
+    @ApiModelProperty("1PC 2h5 3直播")
+    private Integer plat;
+
+    /** 域名 */
+    @ApiModelProperty("域名")
+    private String host;
+}

+ 71 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantAddBo.java

@@ -38,4 +38,75 @@ public class SysTenantAddBo {
     @ApiModelProperty("admin密码")
     @NotNull(message = "admin密码不能为空")
     private String password;
+    /** 公司类型 */
+    @ApiModelProperty("公司类型")
+    private Long companyTypeId;
+
+    /** 公司规模 */
+    @ApiModelProperty("公司规模")
+    private Long companySizeId;
+
+    /** 行业类别id */
+    @ApiModelProperty("行业类别id")
+    private Long industryTypeId;
+
+    /** 行业类别名字 */
+    @ApiModelProperty("行业类别名字")
+    private String industryTypeName;
+
+    /** 公司介绍 */
+    @ApiModelProperty("公司介绍")
+    private String companyIntroduce;
+
+    /** 公司logo */
+    @ApiModelProperty("公司logo")
+    private String logoUrl;
+
+    /** 营业执照 */
+    @ApiModelProperty("营业执照")
+    private String licenseUrl;
+
+    /** 统一社会信用代码 */
+    @ApiModelProperty("统一社会信用代码")
+    private String societyCode;
+
+    /** 省份 */
+    @ApiModelProperty("省份")
+    private String province;
+
+    /** 城市 */
+    @ApiModelProperty("城市")
+    private String city;
+
+    /** 区 */
+    @ApiModelProperty("区")
+    private String district;
+
+    /** 详细地址 */
+    @ApiModelProperty("详细地址")
+    private String address;
+
+    /** 公司电话 */
+    @ApiModelProperty("公司电话")
+    private String companyPh;
+
+    /** 联系人 */
+    @ApiModelProperty("联系人")
+    private String linkMan;
+
+    /** 邮箱 */
+    @ApiModelProperty("邮箱")
+    private String postBox;
+
+    /** PC域名 */
+    @ApiModelProperty("PC域名")
+    private String hostPc;
+
+    /** h5域名 */
+    @ApiModelProperty("h5域名")
+    private String hostH5;
+
+    /** 直播域名 */
+    @ApiModelProperty("直播域名")
+    private String hostLive;
 }

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

@@ -14,4 +14,16 @@ public class SysTenantAdminBo implements Serializable {
 
     @ApiModelProperty("机构名称")
     private String tenantName;
+
+    /** PC域名 */
+    @ApiModelProperty("PC域名")
+    private String hostPc;
+    /** h5域名 */
+    @ApiModelProperty("h5域名")
+    private String hostH5;
+    /** 直播域名 */
+    @ApiModelProperty("直播域名")
+    private String hostLive;
+
+    private String password;
 }

+ 72 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantEditBo.java

@@ -33,4 +33,76 @@ public class SysTenantEditBo {
     /** 名称 */
     @ApiModelProperty("名称")
     private String tenantName;
+
+    /** 公司类型 */
+    @ApiModelProperty("公司类型")
+    private Long companyTypeId;
+
+    /** 公司规模 */
+    @ApiModelProperty("公司规模")
+    private Long companySizeId;
+
+    /** 行业类别id */
+    @ApiModelProperty("行业类别id")
+    private Long industryTypeId;
+
+    /** 行业类别名字 */
+    @ApiModelProperty("行业类别名字")
+    private String industryTypeName;
+
+    /** 公司介绍 */
+    @ApiModelProperty("公司介绍")
+    private String companyIntroduce;
+
+    /** 公司logo */
+    @ApiModelProperty("公司logo")
+    private String logoUrl;
+
+    /** 营业执照 */
+    @ApiModelProperty("营业执照")
+    private String licenseUrl;
+
+    /** 统一社会信用代码 */
+    @ApiModelProperty("统一社会信用代码")
+    private String societyCode;
+
+    /** 省份 */
+    @ApiModelProperty("省份")
+    private String province;
+
+    /** 城市 */
+    @ApiModelProperty("城市")
+    private String city;
+
+    /** 区 */
+    @ApiModelProperty("区")
+    private String district;
+
+    /** 详细地址 */
+    @ApiModelProperty("详细地址")
+    private String address;
+
+    /** 公司电话 */
+    @ApiModelProperty("公司电话")
+    private String companyPh;
+
+    /** 联系人 */
+    @ApiModelProperty("联系人")
+    private String linkMan;
+
+    /** 邮箱 */
+    @ApiModelProperty("邮箱")
+    private String postBox;
+
+    /** PC域名 */
+    @ApiModelProperty("PC域名")
+    private String hostPc;
+
+    /** h5域名 */
+    @ApiModelProperty("h5域名")
+    private String hostH5;
+
+    /** 直播域名 */
+    @ApiModelProperty("直播域名")
+    private String hostLive;
 }

+ 72 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantQueryBo.java

@@ -43,4 +43,76 @@ public class SysTenantQueryBo extends BaseEntity {
 	@ApiModelProperty("名称")
 	private String tenantName;
 
+	/** 公司类型 */
+	@ApiModelProperty("公司类型")
+	private Long companyTypeId;
+
+	/** 公司规模 */
+	@ApiModelProperty("公司规模")
+	private Long companySizeId;
+
+	/** 行业类别id */
+	@ApiModelProperty("行业类别id")
+	private Long industryTypeId;
+
+	/** 行业类别名字 */
+	@ApiModelProperty("行业类别名字")
+	private String industryTypeName;
+
+	/** 公司介绍 */
+	@ApiModelProperty("公司介绍")
+	private String companyIntroduce;
+
+	/** 公司logo */
+	@ApiModelProperty("公司logo")
+	private String logoUrl;
+
+	/** 营业执照 */
+	@ApiModelProperty("营业执照")
+	private String licenseUrl;
+
+	/** 统一社会信用代码 */
+	@ApiModelProperty("统一社会信用代码")
+	private String societyCode;
+
+	/** 省份 */
+	@ApiModelProperty("省份")
+	private String province;
+
+	/** 城市 */
+	@ApiModelProperty("城市")
+	private String city;
+
+	/** 区 */
+	@ApiModelProperty("区")
+	private String district;
+
+	/** 详细地址 */
+	@ApiModelProperty("详细地址")
+	private String address;
+
+	/** 公司电话 */
+	@ApiModelProperty("公司电话")
+	private String companyPh;
+
+	/** 联系人 */
+	@ApiModelProperty("联系人")
+	private String linkMan;
+
+	/** 邮箱 */
+	@ApiModelProperty("邮箱")
+	private String postBox;
+
+	/** PC域名 */
+	@ApiModelProperty("PC域名")
+	private String hostPc;
+
+	/** h5域名 */
+	@ApiModelProperty("h5域名")
+	private String hostH5;
+
+	/** 直播域名 */
+	@ApiModelProperty("直播域名")
+	private String hostLive;
+
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/domain/SysTenant.java

@@ -72,4 +72,11 @@ private static final long serialVersionUID=1L;
 
     private String postBox;
 
+    /** PC域名 */
+    private String hostPc;
+    /** h5域名 */
+    private String hostH5;
+    /** 直播域名 */
+    private String hostLive;
+
 }

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

@@ -1,7 +1,10 @@
 package com.zhongzheng.modules.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
+import com.zhongzheng.modules.system.domain.SysConfig;
 import com.zhongzheng.modules.system.domain.SysTenant;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 系统商户Mapper接口
@@ -10,5 +13,5 @@ import com.zhongzheng.modules.system.domain.SysTenant;
  * @date 2021-08-03
  */
 public interface SysTenantMapper extends BaseMapper<SysTenant> {
-
+    Long findTenantId(SysTenantQueryBo bo);
 }

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/ISysTenantService.java

@@ -52,5 +52,7 @@ public interface ISysTenantService extends IService<SysTenant> {
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
-    void createTenantAdmin(SysTenantAdminBo bo);
+    Long createTenantAdmin(SysTenantAdminBo bo);
+
+	Long findTenantId(SysTenantQueryBo bo);
 }

+ 20 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/ISysWebService.java

@@ -0,0 +1,20 @@
+package com.zhongzheng.modules.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
+import com.zhongzheng.modules.system.bo.SysNginxConfigAddBo;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterAddBo;
+
+import java.util.List;
+
+/**
+ * 用户 业务层
+ *
+ * @author zhongzheng
+ */
+public interface ISysWebService {
+    Boolean createTenantConfig(TopSysTenantRegisterAddBo bo);
+    Boolean restartWebService();
+    Boolean configNginxFile(SysNginxConfigAddBo bo);
+}

+ 24 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/impl/SysConfigServiceImpl.java

@@ -4,8 +4,11 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.convert.Convert;
 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.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhongzheng.common.annotation.DataSource;
 import com.zhongzheng.common.constant.Constants;
@@ -13,9 +16,14 @@ import com.zhongzheng.common.constant.UserConstants;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.enums.DataSourceType;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.modules.grade.domain.ClassGradeUser;
 import com.zhongzheng.modules.system.domain.SysConfig;
+import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.mapper.SysConfigMapper;
 import com.zhongzheng.modules.system.service.ISysConfigService;
+import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.vo.SysConfigVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -36,6 +44,9 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private ISysTenantService iSysTenantService;
+
     /**
      * 项目启动时,初始化参数到缓存
      */
@@ -147,6 +158,19 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
         int row = baseMapper.updateById(sysConfig);
         if (row > 0) {
             redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+            if(config.getConfigKey().equals("home.mobile")){
+                /*JSONObject jsonObject = (JSONObject) JSONObject.parse(config.getConfigValue());
+                String hostPc = jsonObject.getString("hostPc");
+                String hostH5 = jsonObject.getString("hostH5");
+                String hostLive = jsonObject.getString("hostLive");
+                LambdaUpdateWrapper<SysTenant> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                objectLambdaUpdateWrapper.eq(SysTenant::getTenantId, Long.valueOf(config.getTenantId()));
+                objectLambdaUpdateWrapper.set(SysTenant::getHostPc, hostPc);
+                objectLambdaUpdateWrapper.set(SysTenant::getHostH5, hostH5);
+                objectLambdaUpdateWrapper.set(SysTenant::getHostLive, hostLive);
+                objectLambdaUpdateWrapper.set(SysTenant::getUpdateTime, DateUtils.getNowTime());
+                iSysTenantService.update(null, objectLambdaUpdateWrapper);*/
+            }
         }
         return row;
     }

+ 456 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/impl/SysWebServiceImpl.java

@@ -0,0 +1,456 @@
+package com.zhongzheng.modules.system.service.impl;
+
+import cn.hutool.core.lang.Validator;
+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.extension.service.impl.ServiceImpl;
+import com.zhongzheng.common.annotation.DataScope;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.domain.entity.SysRole;
+import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.http.HttpUtils;
+import com.zhongzheng.common.utils.ip.IpUtils;
+import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
+import com.zhongzheng.modules.course.domain.CourseChapterSection;
+import com.zhongzheng.modules.order.bo.OrderShareMoneyAddBo;
+import com.zhongzheng.modules.system.bo.SysNginxConfigAddBo;
+import com.zhongzheng.modules.system.domain.SysConfig;
+import com.zhongzheng.modules.system.domain.SysPost;
+import com.zhongzheng.modules.system.domain.SysUserPost;
+import com.zhongzheng.modules.system.domain.SysUserRole;
+import com.zhongzheng.modules.system.mapper.*;
+import com.zhongzheng.modules.system.service.ISysConfigService;
+import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.system.service.ISysWebService;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterAddBo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * 用户 业务层处理
+ *
+ * @author zhongzheng
+ */
+@Slf4j
+@Service
+public class SysWebServiceImpl implements ISysWebService {
+
+    @Autowired
+    private ISysConfigService configService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean createTenantConfig(TopSysTenantRegisterAddBo bo) {
+        Collection<SysConfig> coll = new HashSet<>();
+        SysConfig config1 = new SysConfig();
+        config1.setTenantId(bo.getTenantId());
+        config1.setConfigName("主框架页-默认皮肤样式名称");
+        config1.setConfigKey("sys.index.skinName");
+        config1.setConfigValue("skin-blue");
+        config1.setConfigType("Y");
+        config1.setConfigModule("sys");
+        config1.setCreateBy("admin");
+        config1.setUpdateBy("admin");
+        coll.add(config1);
+
+        SysConfig config2 = new SysConfig();
+        config2.setTenantId(bo.getTenantId());
+        config2.setConfigName("主框架页-侧边栏主题");
+        config2.setConfigKey("sys.index.sideTheme");
+        config2.setConfigValue("theme-dark");
+        config2.setConfigType("Y");
+        config2.setConfigModule("sys");
+        config2.setCreateBy("admin");
+        config2.setUpdateBy("admin");
+        coll.add(config2);
+
+        SysConfig config3 = new SysConfig();
+        config3.setTenantId(bo.getTenantId());
+        config3.setConfigName("自动播放");
+        config3.setConfigKey("sys.play.autoPlay");
+        config3.setConfigValue("0");
+        config3.setConfigType("Y");
+        config3.setConfigModule("play");
+        config3.setCreateBy("admin");
+        config3.setUpdateBy("admin");
+        coll.add(config3);
+
+        SysConfig config4 = new SysConfig();
+        config4.setTenantId(bo.getTenantId());
+        config4.setConfigName("进度条拖拉");
+        config4.setConfigKey("sys.play.drag");
+        config4.setConfigValue("1");
+        config4.setConfigType("Y");
+        config4.setConfigModule("play");
+        config4.setCreateBy("admin");
+        config4.setUpdateBy("admin");
+        coll.add(config4);
+
+        SysConfig config5 = new SysConfig();
+        config5.setTenantId(bo.getTenantId());
+        config5.setConfigName("倍速播放");
+        config5.setConfigKey("sys.play.speed");
+        config5.setConfigValue("1");
+        config5.setConfigType("Y");
+        config5.setConfigModule("play");
+        config5.setCreateBy("admin");
+        config5.setUpdateBy("admin");
+        coll.add(config5);
+
+        SysConfig config6 = new SysConfig();
+        config6.setTenantId(bo.getTenantId());
+        config6.setConfigName("课程拍照");
+        config6.setConfigKey("sys.course.photograph");
+        config6.setConfigValue("1");
+        config6.setConfigType("Y");
+        config6.setConfigModule("course");
+        config6.setCreateBy("admin");
+        config6.setUpdateBy("admin");
+        coll.add(config6);
+
+        SysConfig config7 = new SysConfig();
+        config7.setTenantId(bo.getTenantId());
+        config7.setConfigName("间隔时间设置");
+        config7.setConfigKey("sys.course.intervalTime");
+        config7.setConfigValue("1.5,10.5");
+        config7.setConfigType("Y");
+        config7.setConfigModule("course");
+        config7.setCreateBy("admin");
+        config7.setUpdateBy("admin");
+        coll.add(config7);
+
+        SysConfig config8 = new SysConfig();
+        config8.setTenantId(bo.getTenantId());
+        config8.setConfigName("章节试卷拍照");
+        config8.setConfigKey("sys.paper.photograph");
+        config8.setConfigValue("1");
+        config8.setConfigType("Y");
+        config8.setConfigModule("exam");
+        config8.setCreateBy("admin");
+        config8.setUpdateBy("admin");
+        coll.add(config8);
+
+        SysConfig config9 = new SysConfig();
+        config9.setTenantId(bo.getTenantId());
+        config9.setConfigName("间隔数量设置");
+        config9.setConfigKey("sys.paper.intervalNumber");
+        config9.setConfigValue("");
+        config9.setConfigType("Y");
+        config9.setConfigModule("exam");
+        config9.setCreateBy("admin");
+        config9.setUpdateBy("admin");
+        coll.add(config9);
+
+        SysConfig config10 = new SysConfig();
+        config10.setTenantId(bo.getTenantId());
+        config10.setConfigName("页头");
+        String json10 = "{\"serviceTel\":{\"status\":1,\"tel\":\"###\",\"time\":\"周一至周日 9:00-18:00\"},\"Nav\":[{\"sort\":1,\"name\":\"首页\",\"status\":1},{\"sort\":2,\"name\":\"课程\",\"status\":1},{\"sort\":3,\"name\":\"直播\",\"status\":1},{\"sort\":4,\"name\":\"题库\",\"status\":1}]}";
+        JSONObject jsonObject10 = (JSONObject) JSONObject.parse(json10);
+        jsonObject10.put("companyLogo",bo.getLogoUrl());
+        jsonObject10.put("companyName",bo.getTenantName());
+        config10.setConfigKey("home.header");
+        config10.setConfigValue(jsonObject10.toJSONString());
+        config10.setConfigType("N");
+        config10.setConfigModule("home");
+        config10.setCreateBy("admin");
+        config10.setUpdateBy("admin");
+        coll.add(config10);
+
+        SysConfig config11 = new SysConfig();
+        config11.setTenantId(bo.getTenantId());
+        config11.setConfigName("页尾");
+        String json11 = "[{\"sort\":1,\"name\":\"电话:######\"},{\"sort\":2,\"name\":\"请联系我:543666 5    5555445855555555\"}]";
+        JSONArray jsonObject11 = (JSONArray) JSONArray.parse(json11);
+        config11.setConfigKey("home.footer");
+        config11.setConfigValue(jsonObject11.toJSONString());
+        config11.setConfigType("N");
+        config11.setConfigModule("home");
+        config11.setCreateBy("admin");
+        config11.setUpdateBy("admin");
+        coll.add(config11);
+
+        SysConfig config12 = new SysConfig();
+        config12.setTenantId(bo.getTenantId());
+        config12.setConfigName("友情链接");
+        String json12 = "[{\"sort\":1,\"name\":\"学时查询\",\"status\":1,\"url\":\"http://baidu.com\"},{\"sort\":2,\"name\":\"走进祥粤\",\"status\":1,\"url\":\"http://baidu.com\"},{\"sort\":3,\"name\":\"百度\",\"url\":\"www.baidu.com\",\"status\":1},{\"sort\":4,\"name\":\"不告诉不告诉你不告诉你\",\"url\":\"https://www.xyyxt.net/Course?pid=1\",\"status\":1}]";
+        JSONArray jsonObject12 = (JSONArray) JSONArray.parse(json12);
+        config12.setConfigKey("home.links");
+        config12.setConfigValue(jsonObject12.toJSONString());
+        config12.setConfigType("N");
+        config12.setConfigModule("home");
+        config12.setCreateBy("admin");
+        config12.setUpdateBy("admin");
+        coll.add(config12);
+
+        SysConfig config13 = new SysConfig();
+        config13.setTenantId(bo.getTenantId());
+        config13.setConfigName("版本隐藏");
+        config13.setConfigKey("version.hide");
+        config13.setConfigValue("1.1.1");
+        config13.setConfigType("N");
+        config13.setConfigModule("wx_config");
+        config13.setCreateBy("admin");
+        config13.setUpdateBy("admin");
+        coll.add(config13);
+
+        SysConfig config14 = new SysConfig();
+        config14.setTenantId(bo.getTenantId());
+        config14.setConfigName("wechat");
+        config14.setConfigKey("wx.small.appid");
+        config14.setConfigValue(bo.getWxSmallAppid());
+        config14.setConfigType("N");
+        config14.setConfigModule("wx_config");
+        config14.setCreateBy("admin");
+        config14.setUpdateBy("admin");
+        coll.add(config14);
+
+        SysConfig config15 = new SysConfig();
+        config15.setTenantId(bo.getTenantId());
+        config15.setConfigName("wechat");
+        config15.setConfigKey("wx.gzh.appid");
+        config15.setConfigValue(bo.getWxGzhAppid());
+        config15.setConfigType("N");
+        config15.setConfigModule("wx_config");
+        config15.setCreateBy("admin");
+        config15.setUpdateBy("admin");
+        coll.add(config15);
+
+        SysConfig config16 = new SysConfig();
+        config16.setTenantId(bo.getTenantId());
+        config16.setConfigName("wechat");
+        config16.setConfigKey("wx.gzh.appsecret");
+        config16.setConfigValue(bo.getWxGzhAppsecret());
+        config16.setConfigType("N");
+        config16.setConfigModule("wx_config");
+        config16.setCreateBy("admin");
+        config16.setUpdateBy("admin");
+        coll.add(config16);
+
+        SysConfig config17 = new SysConfig();
+        config17.setTenantId(bo.getTenantId());
+        config17.setConfigName("wechat");
+        config17.setConfigKey("wx.wepay.mchid");
+        config17.setConfigValue(bo.getWxWepayMchid());
+        config17.setConfigType("N");
+        config17.setConfigModule("wx_config");
+        config17.setCreateBy("admin");
+        config17.setUpdateBy("admin");
+        coll.add(config17);
+
+        SysConfig config18 = new SysConfig();
+        config18.setTenantId(bo.getTenantId());
+        config18.setConfigName("wechat");
+        config18.setConfigKey("wx.wepay.key");
+        config18.setConfigValue(bo.getWxWepayKey());
+        config18.setConfigType("N");
+        config18.setConfigModule("wx_config");
+        config18.setCreateBy("admin");
+        config18.setUpdateBy("admin");
+        coll.add(config18);
+
+        SysConfig config19 = new SysConfig();
+        config19.setTenantId(bo.getTenantId());
+        config19.setConfigName("wechat");
+        config19.setConfigKey("wx.wepay.appsecret");
+        config19.setConfigValue(bo.getWxWepayAppsecret());
+        config19.setConfigType("N");
+        config19.setConfigModule("wx_config");
+        config19.setCreateBy("admin");
+        config19.setUpdateBy("admin");
+        coll.add(config19);
+
+        SysConfig config20 = new SysConfig();
+        config20.setTenantId(bo.getTenantId());
+        config20.setConfigName("wechat");
+        config20.setConfigKey("wx.wepay.notifyUrl");
+        config20.setConfigValue(bo.getWxWepayNotifyurl());
+        config20.setConfigType("N");
+        config20.setConfigModule("wx_config");
+        config20.setCreateBy("admin");
+        config20.setUpdateBy("admin");
+        coll.add(config20);
+
+        SysConfig config21 = new SysConfig();
+        config21.setTenantId(bo.getTenantId());
+        config21.setConfigName("wechat");
+        config21.setConfigKey("wx.small.appsecret");
+        config21.setConfigValue(bo.getWxSmallAppsecret());
+        config21.setConfigType("N");
+        config21.setConfigModule("wx_config");
+        config21.setCreateBy("admin");
+        config21.setUpdateBy("admin");
+        coll.add(config21);
+
+        SysConfig config22 = new SysConfig();
+        config22.setTenantId(bo.getTenantId());
+        config22.setConfigName("wechat");
+        config22.setConfigKey("wx.scanLogin.host");
+        config22.setConfigValue(bo.getWxScanloginHost());
+        config22.setConfigType("N");
+        config22.setConfigModule("wx_config");
+        config22.setCreateBy("admin");
+        config22.setUpdateBy("admin");
+        coll.add(config22);
+
+        SysConfig config23 = new SysConfig();
+        config23.setTenantId(bo.getTenantId());
+        config23.setConfigName("登录双重验证");
+        config23.setConfigKey("login.dual.auth");
+        config23.setConfigValue("0");
+        config23.setConfigType("N");
+        config23.setConfigModule("sys");
+        config23.setCreateBy("admin");
+        config23.setUpdateBy("admin");
+        coll.add(config23);
+
+        SysConfig config24 = new SysConfig();
+        config24.setTenantId(bo.getTenantId());
+        config24.setConfigName("移动端配置");
+        JSONObject jsonObject24 = new JSONObject();
+        jsonObject24.put("h5Logo","https://"+bo.getLogoH5Url());
+        jsonObject24.put("smallLogo","https://"+bo.getLogoSmallUrl());
+        jsonObject24.put("hostLive","https://"+bo.getHostLive());
+        config24.setConfigKey("home.mobile");
+        config24.setConfigValue(jsonObject24.toJSONString());
+        config24.setConfigType("N");
+        config24.setConfigModule("home");
+        config24.setCreateBy("admin");
+        config24.setUpdateBy("admin");
+        coll.add(config24);
+
+        SysConfig config25 = new SysConfig();
+        config25.setTenantId(bo.getTenantId());
+        config25.setConfigName("页尾备案号");
+        JSONObject jsonObject25 = new JSONObject();
+        jsonObject25.put("footerTip",bo.getFooterTip());
+        jsonObject25.put("footerRecordNo",bo.getFooterRecordNo());
+        config25.setConfigKey("home.footer.record");
+        config25.setConfigValue(jsonObject25.toJSONString());
+        config25.setConfigType("N");
+        config25.setConfigModule("home");
+        config25.setCreateBy("admin");
+        config25.setUpdateBy("admin");
+        coll.add(config25);
+
+        configService.saveBatch(coll);
+
+
+        SysNginxConfigAddBo addBoPc = new SysNginxConfigAddBo();
+        addBoPc.setPlat(1);
+        addBoPc.setHost(bo.getHostPc());
+        configNginxFile(addBoPc);
+
+        SysNginxConfigAddBo addBoH5 = new SysNginxConfigAddBo();
+        addBoH5.setPlat(2);
+        addBoH5.setHost(bo.getHostH5());
+        configNginxFile(addBoH5);
+
+        SysNginxConfigAddBo addBoLive = new SysNginxConfigAddBo();
+        addBoLive.setPlat(3);
+        addBoLive.setHost(bo.getHostLive());
+        configNginxFile(addBoLive);
+        return true;
+    }
+
+    @Override
+    public Boolean restartWebService() {
+        String respone = "";
+        try {
+            String url = "http://172.17.0.1:2929/v1.39/containers/nginx/restart";
+            Map<String, String> paramMap = new HashMap<>();
+            respone = HttpUtils.postFormBody(url, paramMap);
+        } catch (IOException e) {
+            throw new CustomException("重启请求错误"+e.getMessage());
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean configNginxFile(SysNginxConfigAddBo bo) {
+        String filePath = "/data/nginx/conf.d/" + bo.getHost()+".conf";
+        FileWriter fw = null;
+        try
+        {
+            File file = new File(filePath);
+            if (!file.exists())
+            {
+                file.createNewFile();
+            }
+            fw = new FileWriter(filePath);
+            BufferedWriter bw=new BufferedWriter(fw);
+            bw.write(makeConfigTxt(bo.getPlat(),bo.getHost()));
+            bw.close();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        finally
+        {
+            try
+            {
+                fw.close();
+            }
+            catch (Exception e)
+            {
+                e.printStackTrace();
+            }
+
+        }
+        return true;
+    }
+
+    private String makeConfigTxt(Integer plat,String host){
+        String filePath = null;
+        if(plat==1){
+            filePath = "/www/public/pc";
+        }
+        else if(plat==2){
+            filePath = "/www/public/h5";
+        }
+        else if(plat==3){
+            filePath = "/www/public/live";
+        }
+        String configParam = " server {\n" +
+                "    listen       80; # 同时支持HTTP\n" +
+                "    listen       443 ssl; # 添加HTTPS支持\n" +
+                "    server_name   %s;\n" +
+                "    root %s;\n" +
+                "    if ($scheme = http ) {\n" +
+                "\treturn 301 https://$host$request_uri;\n" +
+                "    }\n" +
+                "\n" +
+                "    #SSL配置\n" +
+                "    ssl_certificate      /mydata/nginx/ssl/gdzzkj.net.pem; # 配置证书\n" +
+                "    ssl_certificate_key  /mydata/nginx/ssl/gdzzkj.net.key; # 配置证书私钥\n" +
+                "    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本 # 配置SSL加密算法\n" +
+                "    ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;\n" +
+                "    ssl_prefer_server_ciphers  on; # 优先采取服务器算法\n" +
+                "    ssl_session_cache    shared:SSL:10m; # 配置共享会话缓存大小\n" +
+                "    ssl_session_timeout  10m; # 配置会话超时时间\n" +
+                "\n" +
+                "\n" +
+                "    index index.html index.htm;\n" +
+                "\n" +
+                "     location / {\n" +
+                "                try_files $uri $uri/ /index.html?$args;\n" +
+                "        }\n" +
+                "}\n";
+        String param = String.format(configParam, host, filePath);
+        return param;
+    }
+}

+ 102 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysTenantRegisterAddBo.java

@@ -0,0 +1,102 @@
+package com.zhongzheng.modules.top.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+
+
+
+/**
+ * 机构注册添加对象 top_sys_tenant_register
+ *
+ * @author hjl
+ * @date 2023-02-21
+ */
+@Data
+@ApiModel("机构注册添加对象")
+public class TopSysTenantRegisterAddBo {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    /** 机构名称 */
+    @ApiModelProperty("机构名称")
+    @NotBlank(message = "机构名称不能为空")
+    private String tenantName;
+    /** PC域名 */
+    @ApiModelProperty("PC域名")
+    private String hostPc;
+    /** h5域名 */
+    @ApiModelProperty("h5域名")
+    private String hostH5;
+    /** 直播域名 */
+    @ApiModelProperty("直播域名")
+    private String hostLive;
+    /** 公司logo */
+    @ApiModelProperty("公司logo")
+    private String logoUrl;
+    /** 微信小程序appid */
+    @ApiModelProperty("微信小程序appid")
+    private String wxSmallAppid;
+    /** 公众号appid */
+    @ApiModelProperty("公众号appid")
+    private String wxGzhAppid;
+    /** 公众号密钥 */
+    @ApiModelProperty("公众号密钥")
+    private String wxGzhAppsecret;
+    /** 商户ID */
+    @ApiModelProperty("商户ID")
+    private String wxWepayMchid;
+    /** 商户key */
+    @ApiModelProperty("商户key")
+    private String wxWepayKey;
+    /** app密钥 */
+    @ApiModelProperty("app密钥")
+    private String wxWepayAppsecret;
+    /** 支付回调地址 */
+    @ApiModelProperty("支付回调地址")
+    private String wxWepayNotifyurl;
+    /** 小程序密钥 */
+    @ApiModelProperty("小程序密钥")
+    private String wxSmallAppsecret;
+    /** 微信扫码登录URL */
+    @ApiModelProperty("微信扫码登录URL")
+    private String wxScanloginHost;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long createTime;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long updateTime;
+    /** 0 失效 1启用 */
+    @ApiModelProperty("0 失效 1启用")
+    private Integer status;
+
+    /** h5公司logo */
+    @ApiModelProperty("h5公司logo")
+    private String logoH5Url;
+    /** 小程序公司logo */
+    @ApiModelProperty("小程序公司logo")
+    private String logoSmallUrl;
+    /** 密钥 */
+    @ApiModelProperty("密钥")
+    @NotBlank(message = "密码不能为空")
+    private String password;
+    /** 页脚备案号 */
+    @ApiModelProperty("页脚备案号")
+    private String footerRecordNo;
+    /** 页脚文案 */
+    @ApiModelProperty("页脚文案")
+    private String footerTip;
+
+    private Long tenantId;
+}

+ 104 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysTenantRegisterEditBo.java

@@ -0,0 +1,104 @@
+package com.zhongzheng.modules.top.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 机构注册编辑对象 top_sys_tenant_register
+ *
+ * @author hjl
+ * @date 2023-02-21
+ */
+@Data
+@ApiModel("机构注册编辑对象")
+public class TopSysTenantRegisterEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 机构名称 */
+    @ApiModelProperty("机构名称")
+    private String tenantName;
+
+    /** PC域名 */
+    @ApiModelProperty("PC域名")
+    private String hostPc;
+
+    /** h5域名 */
+    @ApiModelProperty("h5域名")
+    private String hostH5;
+
+    /** 直播域名 */
+    @ApiModelProperty("直播域名")
+    private String hostLive;
+
+    /** 公司logo */
+    @ApiModelProperty("公司logo")
+    private String logoUrl;
+
+    /** 微信小程序appid */
+    @ApiModelProperty("微信小程序appid")
+    private String wxSmallAppid;
+
+    /** 公众号appid */
+    @ApiModelProperty("公众号appid")
+    private String wxGzhAppid;
+
+    /** 公众号密钥 */
+    @ApiModelProperty("公众号密钥")
+    private String wxGzhAppsecret;
+
+    /** 商户ID */
+    @ApiModelProperty("商户ID")
+    private String wxWepayMchid;
+
+    /** 商户key */
+    @ApiModelProperty("商户key")
+    private String wxWepayKey;
+
+    /** app密钥 */
+    @ApiModelProperty("app密钥")
+    private String wxWepayAppsecret;
+
+    /** 支付回调地址 */
+    @ApiModelProperty("支付回调地址")
+    private String wxWepayNotifyurl;
+
+    /** 小程序密钥 */
+    @ApiModelProperty("小程序密钥")
+    private String wxSmallAppsecret;
+
+    /** 微信扫码登录URL */
+    @ApiModelProperty("微信扫码登录URL")
+    private String wxScanloginHost;
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long updateTime;
+
+    /** 0 失效 1启用 */
+    @ApiModelProperty("0 失效 1启用")
+    private Integer status;
+
+    /** h5公司logo */
+    @ApiModelProperty("h5公司logo")
+    private String logoH5Url;
+    /** 小程序公司logo */
+    @ApiModelProperty("小程序公司logo")
+    private String logoSmallUrl;
+    /** 密钥 */
+    @ApiModelProperty("密钥")
+    private String password;
+    /** 页脚备案号 */
+    @ApiModelProperty("页脚备案号")
+    private String footerRecordNo;
+    /** 页脚文案 */
+    @ApiModelProperty("页脚文案")
+    private String footerTip;
+
+}

+ 100 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysTenantRegisterQueryBo.java

@@ -0,0 +1,100 @@
+package com.zhongzheng.modules.top.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;
+
+/**
+ * 机构注册分页查询对象 top_sys_tenant_register
+ *
+ * @author hjl
+ * @date 2023-02-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("机构注册分页查询对象")
+public class TopSysTenantRegisterQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 机构名称 */
+	@ApiModelProperty("机构名称")
+	private String tenantName;
+	/** PC域名 */
+	@ApiModelProperty("PC域名")
+	private String hostPc;
+	/** h5域名 */
+	@ApiModelProperty("h5域名")
+	private String hostH5;
+	/** 直播域名 */
+	@ApiModelProperty("直播域名")
+	private String hostLive;
+	/** 公司logo */
+	@ApiModelProperty("公司logo")
+	private String logoUrl;
+	/** 微信小程序appid */
+	@ApiModelProperty("微信小程序appid")
+	private String wxSmallAppid;
+	/** 公众号appid */
+	@ApiModelProperty("公众号appid")
+	private String wxGzhAppid;
+	/** 公众号密钥 */
+	@ApiModelProperty("公众号密钥")
+	private String wxGzhAppsecret;
+	/** 商户ID */
+	@ApiModelProperty("商户ID")
+	private String wxWepayMchid;
+	/** 商户key */
+	@ApiModelProperty("商户key")
+	private String wxWepayKey;
+	/** app密钥 */
+	@ApiModelProperty("app密钥")
+	private String wxWepayAppsecret;
+	/** 支付回调地址 */
+	@ApiModelProperty("支付回调地址")
+	private String wxWepayNotifyurl;
+	/** 小程序密钥 */
+	@ApiModelProperty("小程序密钥")
+	private String wxSmallAppsecret;
+	/** 微信扫码登录URL */
+	@ApiModelProperty("微信扫码登录URL")
+	private String wxScanloginHost;
+	/** 0 失效 1启用 */
+	@ApiModelProperty("0 失效 1启用")
+	private Integer status;
+
+	/** h5公司logo */
+	@ApiModelProperty("h5公司logo")
+	private String logoH5Url;
+	/** 小程序公司logo */
+	@ApiModelProperty("小程序公司logo")
+	private String logoSmallUrl;
+	/** 密钥 */
+	@ApiModelProperty("密钥")
+	private String password;
+	/** 页脚备案号 */
+	@ApiModelProperty("页脚备案号")
+	private String footerRecordNo;
+	/** 页脚文案 */
+	@ApiModelProperty("页脚文案")
+	private String footerTip;
+}

+ 75 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/domain/TopSysTenantRegister.java

@@ -0,0 +1,75 @@
+package com.zhongzheng.modules.top.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 机构注册对象 top_sys_tenant_register
+ *
+ * @author hjl
+ * @date 2023-02-21
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("top_sys_tenant_register")
+public class TopSysTenantRegister implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 机构名称 */
+    private String tenantName;
+    /** PC域名 */
+    private String hostPc;
+    /** h5域名 */
+    private String hostH5;
+    /** 直播域名 */
+    private String hostLive;
+    /** 公司logo */
+    private String logoUrl;
+    /** 微信小程序appid */
+    private String wxSmallAppid;
+    /** 公众号appid */
+    private String wxGzhAppid;
+    /** 公众号密钥 */
+    private String wxGzhAppsecret;
+    /** 商户ID */
+    private String wxWepayMchid;
+    /** 商户key */
+    private String wxWepayKey;
+    /** app密钥 */
+    private String wxWepayAppsecret;
+    /** 支付回调地址 */
+    private String wxWepayNotifyurl;
+    /** 小程序密钥 */
+    private String wxSmallAppsecret;
+    /** 微信扫码登录URL */
+    private String wxScanloginHost;
+    /** $column.columnComment */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** $column.columnComment */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 0 失效 1启用 */
+    private Integer status;
+    /** h5公司logo */
+    private String logoH5Url;
+    /** 小程序公司logo */
+    private String logoSmallUrl;
+    /** 密钥 */
+    private String password;
+    /** 页脚备案号 */
+    private String footerRecordNo;
+    /** 页脚文案 */
+    private String footerTip;
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/mapper/TopSysTenantRegisterMapper.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.top.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.top.domain.TopSysTenantRegister;
+
+/**
+ * 机构注册Mapper接口
+ *
+ * @author hjl
+ * @date 2023-02-21
+ */
+public interface TopSysTenantRegisterMapper extends BaseMapper<TopSysTenantRegister> {
+
+}

+ 54 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/service/ITopSysTenantRegisterService.java

@@ -0,0 +1,54 @@
+package com.zhongzheng.modules.top.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterAddBo;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterEditBo;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterQueryBo;
+import com.zhongzheng.modules.top.domain.TopSysTenantRegister;
+import com.zhongzheng.modules.top.vo.TopSysTenantRegisterVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 机构注册Service接口
+ *
+ * @author hjl
+ * @date 2023-02-21
+ */
+public interface ITopSysTenantRegisterService extends IService<TopSysTenantRegister> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	TopSysTenantRegisterVo queryById(Long id);
+
+	/**
+	 * 查询列表
+	 */
+	List<TopSysTenantRegisterVo> queryList(TopSysTenantRegisterQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入机构注册
+	 * @param bo 机构注册新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(TopSysTenantRegisterAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改机构注册
+	 * @param bo 机构注册编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(TopSysTenantRegisterEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+}

+ 182 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/service/impl/TopSysTenantRegisterServiceImpl.java

@@ -0,0 +1,182 @@
+package com.zhongzheng.modules.top.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.activity.domain.ActivityOrder;
+import com.zhongzheng.modules.alioss.bo.OssRequest;
+import com.zhongzheng.modules.alioss.service.OssService;
+import com.zhongzheng.modules.system.bo.SysTenantAdminBo;
+import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.system.service.ISysWebService;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterAddBo;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterEditBo;
+import com.zhongzheng.modules.top.bo.TopSysTenantRegisterQueryBo;
+import com.zhongzheng.modules.top.domain.TopSysTenantRegister;
+import com.zhongzheng.modules.top.mapper.TopSysTenantRegisterMapper;
+import com.zhongzheng.modules.top.service.ITopSysTenantRegisterService;
+import com.zhongzheng.modules.top.vo.TopSysTenantRegisterVo;
+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 org.springframework.transaction.annotation.Transactional;
+
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 机构注册Service业务层处理
+ *
+ * @author hjl
+ * @date 2023-02-21
+ */
+@Service
+public class TopSysTenantRegisterServiceImpl extends ServiceImpl<TopSysTenantRegisterMapper, TopSysTenantRegister> implements ITopSysTenantRegisterService {
+
+    @Autowired
+    private OssService ossService;
+
+    @Autowired
+    private ISysWebService iSysWebService;
+
+    @Autowired
+    private ISysTenantService iSysTenantService;
+
+
+    @Override
+    public TopSysTenantRegisterVo queryById(Long id){
+        TopSysTenantRegister db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, TopSysTenantRegisterVo.class);
+    }
+
+    @Override
+    public List<TopSysTenantRegisterVo> queryList(TopSysTenantRegisterQueryBo bo) {
+        LambdaQueryWrapper<TopSysTenantRegister> lqw = Wrappers.lambdaQuery();
+        lqw.like(StrUtil.isNotBlank(bo.getTenantName()), TopSysTenantRegister::getTenantName, bo.getTenantName());
+        lqw.eq(StrUtil.isNotBlank(bo.getHostPc()), TopSysTenantRegister::getHostPc, bo.getHostPc());
+        lqw.eq(StrUtil.isNotBlank(bo.getHostH5()), TopSysTenantRegister::getHostH5, bo.getHostH5());
+        lqw.eq(StrUtil.isNotBlank(bo.getHostLive()), TopSysTenantRegister::getHostLive, bo.getHostLive());
+        lqw.eq(StrUtil.isNotBlank(bo.getLogoUrl()), TopSysTenantRegister::getLogoUrl, bo.getLogoUrl());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxSmallAppid()), TopSysTenantRegister::getWxSmallAppid, bo.getWxSmallAppid());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxGzhAppid()), TopSysTenantRegister::getWxGzhAppid, bo.getWxGzhAppid());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxGzhAppsecret()), TopSysTenantRegister::getWxGzhAppsecret, bo.getWxGzhAppsecret());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxWepayMchid()), TopSysTenantRegister::getWxWepayMchid, bo.getWxWepayMchid());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxWepayKey()), TopSysTenantRegister::getWxWepayKey, bo.getWxWepayKey());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxWepayAppsecret()), TopSysTenantRegister::getWxWepayAppsecret, bo.getWxWepayAppsecret());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxWepayNotifyurl()), TopSysTenantRegister::getWxWepayNotifyurl, bo.getWxWepayNotifyurl());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxSmallAppsecret()), TopSysTenantRegister::getWxSmallAppsecret, bo.getWxSmallAppsecret());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxScanloginHost()), TopSysTenantRegister::getWxScanloginHost, bo.getWxScanloginHost());
+        lqw.eq(bo.getStatus() != null, TopSysTenantRegister::getStatus, bo.getStatus());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<TopSysTenantRegisterVo> entity2Vo(Collection<TopSysTenantRegister> collection) {
+        List<TopSysTenantRegisterVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, TopSysTenantRegisterVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<TopSysTenantRegister> page = (Page<TopSysTenantRegister>)collection;
+            Page<TopSysTenantRegisterVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertByAddBo(TopSysTenantRegisterAddBo bo) {
+        if(Validator.isEmpty(bo.getPassword())){
+            throw new CustomException("密码不能为空");
+        }
+        int count = count(new LambdaQueryWrapper<TopSysTenantRegister>().eq(TopSysTenantRegister::getTenantName, bo.getTenantName()));
+        if (count > 0){
+            throw new CustomException("该机构名已开通");
+        }
+        if(Validator.isNotEmpty(bo.getLogoUrl())){
+            OssRequest ossRequest = new OssRequest();
+            ossRequest.setImageStatus(6);
+            String ossPath = ossService.uploadBase64(bo.getLogoUrl(),ossRequest);
+            if(Validator.isNotEmpty(ossPath)){
+                bo.setLogoUrl(ossPath);
+            }
+        }
+        if(Validator.isNotEmpty(bo.getLogoH5Url())){
+            OssRequest ossRequest = new OssRequest();
+            ossRequest.setImageStatus(6);
+            String ossPath = ossService.uploadBase64(bo.getLogoH5Url(),ossRequest);
+            if(Validator.isNotEmpty(ossPath)){
+                bo.setLogoH5Url(ossPath);
+            }
+        }
+        if(Validator.isNotEmpty(bo.getLogoSmallUrl())){
+            OssRequest ossRequest = new OssRequest();
+            ossRequest.setImageStatus(6);
+            String ossPath = ossService.uploadBase64(bo.getLogoSmallUrl(),ossRequest);
+            if(Validator.isNotEmpty(ossPath)){
+                bo.setLogoSmallUrl(ossPath);
+            }
+        }
+        TopSysTenantRegister add = BeanUtil.toBean(bo, TopSysTenantRegister.class);
+
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        this.save(add);
+        SysTenantAdminBo adminBo = new SysTenantAdminBo();
+        adminBo.setTenantName(add.getTenantName());
+        adminBo.setPassword(add.getPassword());
+        adminBo.setHostPc(add.getHostPc());
+        adminBo.setHostH5(add.getHostH5());
+        adminBo.setHostLive(add.getHostLive());
+        //创建账号菜单
+        Long newTenantId = iSysTenantService.createTenantAdmin(adminBo);
+        TopSysTenantRegisterAddBo bo1 = BeanUtil.toBean(add, TopSysTenantRegisterAddBo.class);
+        bo1.setTenantId(newTenantId);
+        //创建配置
+        iSysWebService.createTenantConfig(bo1);
+        return true;
+    }
+
+    @Override
+    public Boolean updateByEditBo(TopSysTenantRegisterEditBo bo) {
+        TopSysTenantRegister update = BeanUtil.toBean(bo, TopSysTenantRegister.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(TopSysTenantRegister entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+
+
+}

+ 107 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/vo/TopSysTenantRegisterVo.java

@@ -0,0 +1,107 @@
+package com.zhongzheng.modules.top.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 hjl
+ * @date 2023-02-21
+ */
+@Data
+@ApiModel("机构注册视图对象")
+public class TopSysTenantRegisterVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 机构名称 */
+	@Excel(name = "机构名称")
+	@ApiModelProperty("机构名称")
+	private String tenantName;
+	/** PC域名 */
+	@Excel(name = "PC域名")
+	@ApiModelProperty("PC域名")
+	private String hostPc;
+	/** h5域名 */
+	@Excel(name = "h5域名")
+	@ApiModelProperty("h5域名")
+	private String hostH5;
+	/** 直播域名 */
+	@Excel(name = "直播域名")
+	@ApiModelProperty("直播域名")
+	private String hostLive;
+	/** 公司logo */
+	@Excel(name = "公司logo")
+	@ApiModelProperty("公司logo")
+	private String logoUrl;
+	/** 微信小程序appid */
+	@Excel(name = "微信小程序appid")
+	@ApiModelProperty("微信小程序appid")
+	private String wxSmallAppid;
+	/** 公众号appid */
+	@Excel(name = "公众号appid")
+	@ApiModelProperty("公众号appid")
+	private String wxGzhAppid;
+	/** 公众号密钥 */
+	@Excel(name = "公众号密钥")
+	@ApiModelProperty("公众号密钥")
+	private String wxGzhAppsecret;
+	/** 商户ID */
+	@Excel(name = "商户ID")
+	@ApiModelProperty("商户ID")
+	private String wxWepayMchid;
+	/** 商户key */
+	@Excel(name = "商户key")
+	@ApiModelProperty("商户key")
+	private String wxWepayKey;
+	/** app密钥 */
+	@Excel(name = "app密钥")
+	@ApiModelProperty("app密钥")
+	private String wxWepayAppsecret;
+	/** 支付回调地址 */
+	@Excel(name = "支付回调地址")
+	@ApiModelProperty("支付回调地址")
+	private String wxWepayNotifyurl;
+	/** 小程序密钥 */
+	@Excel(name = "小程序密钥")
+	@ApiModelProperty("小程序密钥")
+	private String wxSmallAppsecret;
+	/** 微信扫码登录URL */
+	@Excel(name = "微信扫码登录URL")
+	@ApiModelProperty("微信扫码登录URL")
+	private String wxScanloginHost;
+	/** 0 失效 1启用 */
+	@Excel(name = "0 失效 1启用")
+	@ApiModelProperty("0 失效 1启用")
+	private Integer status;
+	/** h5公司logo */
+	@Excel(name = "h5公司logo")
+	@ApiModelProperty("h5公司logo")
+	private String logoH5Url;
+	/** 小程序公司logo */
+	@Excel(name = "小程序公司logo")
+	@ApiModelProperty("小程序公司logo")
+	private String logoSmallUrl;
+	/** 密钥 */
+	@Excel(name = "密钥")
+	@ApiModelProperty("密钥")
+	private String password;
+	/** 页脚备案号 */
+	@Excel(name = "页脚备案号")
+	@ApiModelProperty("页脚备案号")
+	private String footerRecordNo;
+	/** 页脚文案 */
+	@Excel(name = "页脚文案")
+	@ApiModelProperty("页脚文案")
+	private String footerTip;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserAppRegisterBo.java

@@ -25,5 +25,7 @@ public class UserAppRegisterBo {
     private String shareCode;
     @ApiModelProperty("活动分销码")
     private String shareActivityCode;
+    @ApiModelProperty("身份证")
+    private String idcard;
 
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserExamRecordQueryBo.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 
@@ -73,6 +74,8 @@ public class UserExamRecordQueryBo extends BaseEntity {
 	/** 做题模式 1章卷 2随机练习 */
 	@ApiModelProperty("做题模式 1章卷 2随机练习3模拟随机")
 	private Long doMode;
+	@ApiModelProperty("做题模式 1章卷 2随机练习 3模拟随机")
+	private List<Long> doModes;
 	/** 模拟做题试卷ID */
 	@ApiModelProperty("模拟做题试卷ID")
 	private Long simulateExamId;

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserExamWrongRecordQueryBo.java

@@ -70,4 +70,7 @@ public class UserExamWrongRecordQueryBo extends BaseEntity {
 	/** 做题模式 1章卷 2随机练习 */
 	@ApiModelProperty("做题模式 1章卷 2随机练习")
 	private Long doMode;
+	/** 类型1,题库 2,视频 */
+	@ApiModelProperty("类型1,题库 2,视频 ")
+	private Integer courseType;
 }

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserMockRecordAddBo.java

@@ -83,4 +83,12 @@ public class UserMockRecordAddBo {
     /** 提交时间 */
     @ApiModelProperty("提交时间")
     private Long commitTime;
+    /** 做题模式 1章卷 2随机练习 3模拟随机 */
+    @ApiModelProperty("做题模式 1章卷 2随机练习 3模拟随机")
+    private Integer doMode;
+    /** 模拟做题试卷ID */
+    @ApiModelProperty("模拟做题试卷ID")
+    private Long simulateExamId;
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserMockRecordEditBo.java

@@ -100,4 +100,11 @@ public class UserMockRecordEditBo {
     /** 提交时间 */
     @ApiModelProperty("提交时间")
     private Long commitTime;
+    @ApiModelProperty("做题模式 1章卷 2随机练习 3模拟随机")
+    private Integer doMode;
+    /** 模拟做题试卷ID */
+    @ApiModelProperty("模拟做题试卷ID")
+    private Long simulateExamId;
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserMockSubscribeAddBo.java

@@ -81,4 +81,8 @@ public class UserMockSubscribeAddBo implements Serializable {
     /** 是否已发送开播通知 0不预约 1预约 */
     @ApiModelProperty("是否已发送开播通知 0不预约 1预约")
     private Integer hasLiveSubscribe;
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+    @ApiModelProperty("商品id")
+    private Long goodsId;
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserMockSubscribeEditBo.java

@@ -97,4 +97,9 @@ public class UserMockSubscribeEditBo {
     /** 是否已发送开播通知 0不预约 1预约 */
     @ApiModelProperty("是否已发送开播通知 0不预约 1预约")
     private Integer hasLiveSubscribe;
+
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+    @ApiModelProperty("商品id")
+    private Long goodsId;
 }

Some files were not shown because too many files changed in this diff