he2802 2 năm trước cách đây
mục cha
commit
b5ea870d4a
93 tập tin đã thay đổi với 1591 bổ sung186 xóa
  1. 7 1
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java
  2. 20 6
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java
  3. 9 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  4. 1 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  5. 1 0
      zhongzheng-admin/src/main/resources/application-pre.yml
  6. 1 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  7. 7 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java
  8. 11 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonGoodsController.java
  9. 14 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  10. 11 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserBankRecordController.java
  11. 1 0
      zhongzheng-api/src/main/resources/application-dev.yml
  12. 1 0
      zhongzheng-api/src/main/resources/application-pre.yml
  13. 1 0
      zhongzheng-api/src/main/resources/application-prod.yml
  14. 5 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  15. 45 21
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  16. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ProfileTpQueryBo.java
  17. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/CertificateCommonMapper.java
  18. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/CertificateMapper.java
  19. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/CertificateTpMapper.java
  20. 0 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/ProfileTpMapper.java
  21. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/ICertificateCommonService.java
  22. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/ICertificateService.java
  23. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/ICertificateTpService.java
  24. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/IProfileTpService.java
  25. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateCommonServiceImpl.java
  26. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateServiceImpl.java
  27. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  28. 13 19
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ProfileTpServiceImpl.java
  29. 37 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  30. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseHandoutsMapper.java
  31. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java
  32. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseModuleMapper.java
  33. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseSubjectMapper.java
  34. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseHandoutsService.java
  35. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseModuleService.java
  36. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseService.java
  37. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseSubjectService.java
  38. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseHandoutsServiceImpl.java
  39. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseModuleServiceImpl.java
  40. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java
  41. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSubjectServiceImpl.java
  42. 23 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/GoodsBatchListVo.java
  43. 37 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsEGZInformBo.java
  44. 26 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserGoodsListAllBo.java
  45. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsSpecAttributeMapper.java
  46. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsSpecAttributeRelationMapper.java
  47. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsSpecMapper.java
  48. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsSpecTemplateMapper.java
  49. 8 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  50. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsSpecAttributeRelationService.java
  51. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsSpecAttributeService.java
  52. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsSpecService.java
  53. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsSpecTemplateService.java
  54. 670 122
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  55. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsSpecAttributeRelationServiceImpl.java
  56. 10 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsSpecAttributeServiceImpl.java
  57. 10 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsSpecServiceImpl.java
  58. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsSpecTemplateServiceImpl.java
  59. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserGoodsListAllVo.java
  60. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserGoodsVo.java
  61. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  62. 35 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  63. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderBusinessConfigQueryBo.java
  64. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsVo.java
  65. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/mapper/PayServeMapper.java
  66. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/service/IPayServeService.java
  67. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/service/impl/PayServeServiceImpl.java
  68. 192 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
  69. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/User.java
  70. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserBankRecordMapper.java
  71. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserMapper.java
  72. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserBankRecordService.java
  73. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java
  74. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserBankRecordServiceImpl.java
  75. 44 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java
  76. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/bo/WxShareGoodsBo.java
  77. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/base/CertificateCommonMapper.xml
  78. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/base/CertificateMapper.xml
  79. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/base/CertificateTpMapper.xml
  80. 2 2
      zhongzheng-system/src/main/resources/mapper/modules/base/ProfileTpMapper.xml
  81. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseHandoutsMapper.xml
  82. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseMapper.xml
  83. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseModuleMapper.xml
  84. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseSubjectMapper.xml
  85. 20 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsSpecAttributeMapper.xml
  86. 11 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsSpecAttributeRelationMapper.xml
  87. 15 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsSpecMapper.xml
  88. 11 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsSpecTemplateMapper.xml
  89. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  90. 6 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderBusinessConfigMapper.xml
  91. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/pay/PayServeMapper.xml
  92. 27 1
      zhongzheng-system/src/main/resources/mapper/modules/user/UserBankRecordMapper.xml
  93. 9 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml

+ 7 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java

@@ -2,6 +2,7 @@ package com.zhongzheng.controller.base;
 
 import java.util.List;
 import java.util.Arrays;
+import java.util.stream.Collectors;
 
 import com.zhongzheng.modules.base.bo.ProfileTpAddBo;
 import com.zhongzheng.modules.base.bo.ProfileTpEditBo;
@@ -9,6 +10,7 @@ import com.zhongzheng.modules.base.bo.ProfileTpQueryBo;
 import com.zhongzheng.modules.base.service.IProfileTpService;
 import com.zhongzheng.modules.base.vo.ProfileTpVo;
 import lombok.RequiredArgsConstructor;
+import net.polyv.common.v1.util.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -50,7 +52,11 @@ public class ProfileTpController extends BaseController {
     @GetMapping("/list")
     public TableDataInfo<ProfileTpVo> list(ProfileTpQueryBo bo) {
         startPage();
-        List<ProfileTpVo> list = iProfileTpService.selectListByBo(bo);
+        if (StringUtils.isNotBlank(bo.getStatus())){
+            List<Integer> collect = Arrays.asList(bo.getStatus().split(",")).stream().map(x -> Integer.valueOf(x)).collect(Collectors.toList());
+            bo.setStatusList(collect);
+        }
+        List<ProfileTpVo> list = iProfileTpService.selectList(bo);
         return getDataTable(list);
     }
 

+ 20 - 6
zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java

@@ -13,6 +13,7 @@ import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.course.bo.*;
 import com.zhongzheng.modules.course.service.ICourseService;
 import com.zhongzheng.modules.course.vo.CourseVo;
+import com.zhongzheng.modules.course.vo.GoodsBatchListVo;
 import com.zhongzheng.modules.goods.bo.GoodsBatchDelBo;
 import com.zhongzheng.modules.goods.vo.ExportLiveGoodsVo;
 import com.zhongzheng.modules.goods.vo.GoodsUserVo;
@@ -215,21 +216,34 @@ public class CourseController extends BaseController {
     }
 
     @ApiOperation("批量查询用户拥有的商品进度")
-    @GetMapping("/goodsBatchList")
-    public AjaxResult<Map<String,Object>> goodsBatchList(CourseQueryBo bo) {
-        Map<String,Object> map = new HashMap<>();
+    @PostMapping("/goodsBatchList")
+    public AjaxResult<List<GoodsBatchListVo>> goodsBatchList(@RequestBody CourseQueryBo bo) {
+        List<GoodsBatchListVo> listVos = new ArrayList<>();
+        if (CollectionUtils.isEmpty(bo.getTelphoneList())){
+            return  AjaxResult.success(listVos);
+        }
         for(CourseProgressQueryBo queryBo : bo.getTelphoneList()){
             User user = iUserService.getOne(new LambdaQueryWrapper<User>()
                     .eq(User::getTelphone, queryBo.getTelphone()).last("limit 1"));
             if(Validator.isEmpty(user)){
-                throw new CustomException("该用户不存在");
+                continue;
             }
             bo.setUserId(user.getUserId());
             bo.setGoodsId(queryBo.getGoodsId());
             List<GoodsUserVo> list = iCourseService.goodsProgressList(bo);
-            map.put(bo.getTelphone()+"-"+bo.getGoodsId(),list);
+            if (CollectionUtils.isNotEmpty(list)){
+                GoodsBatchListVo vo = new GoodsBatchListVo();
+                vo.setUserId(user.getUserId());
+                vo.setGoodsId(queryBo.getGoodsId());
+                vo.setTelphone(queryBo.getTelphone());
+                vo.setList(list);
+                listVos.add(vo);
+            }
+        }
+        if (CollectionUtils.isEmpty(listVos)){
+            return AjaxResult.success(listVos);
         }
-        return AjaxResult.success(map);
+        return AjaxResult.success(listVos);
     }
 
 }

+ 9 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsController.java

@@ -338,4 +338,13 @@ public class GoodsController extends BaseController {
     public AjaxResult<Void> goodsBatchCopyDisposeTenant() {
         return toAjax(iGoodsService.goodsBatchCopyDisposeTenant() ? 1 : 0);
     }
+
+    /**
+     * 修改商品课程关联
+     */
+    @ApiOperation("修改商品课程关联")
+    @PostMapping("/update/course")
+    public AjaxResult<Void> updateCourse() {
+        return toAjax(iGoodsService.goodsBatchCopyDisposeTenant() ? 1 : 0);
+    }
 }

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

@@ -138,6 +138,7 @@ oldStudySys:
     shareCanclePath: http://192.168.1.210:8086/witsystem/dataapi/ordercance
     searchGradeCount: http://gdxypx.xy.com/System/BussinessApi/OfficialGradeCount
     pushGradeCount: http://gdxypx.xy.com/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
 
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -138,6 +138,7 @@ oldStudySys:
     shareCanclePath: http://test.jqbao.net/witsystem/dataapi/ordercance
     searchGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCount
     pushGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
 
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -138,6 +138,7 @@ oldStudySys:
     shareCanclePath: https://www.xyyxt.net/witsystem/dataapi/ordercance
     searchGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCount
     pushGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: https://zs.gdzzkj.net/EduSystem/BusinessApi/NewYxtUserPrompt
 
 officialPush:
     infoPath: http://jypt.gdcic.net/organjxjy/ShangBaoMingdan

+ 7 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java

@@ -16,12 +16,15 @@ import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import net.polyv.common.v1.util.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * 资料模板Controller
@@ -52,6 +55,10 @@ public class ProfileTpController extends BaseController {
     @GetMapping("/list")
     public TableDataInfo<ProfileTpVo> list(ProfileTpQueryBo bo) {
         startPage();
+        if (StringUtils.isNotBlank(bo.getStatus())){
+            List<Integer> collect = Arrays.asList(bo.getStatus().split(",")).stream().map(x -> Integer.valueOf(x)).collect(Collectors.toList());
+            bo.setStatusList(collect);
+        }
         List<ProfileTpVo> list = iProfileTpService.selectList(bo);
         return getDataTable(list);
     }

+ 11 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonGoodsController.java

@@ -14,6 +14,7 @@ import com.zhongzheng.modules.goods.vo.GoodsVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -53,6 +54,16 @@ public class CommonGoodsController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 查询分销商品列表
+     */
+    @ApiOperation("查询分销商品列表")
+    @GetMapping("/share/list/{time}")
+    public AjaxResult<List<GoodsVo>> getShareList(@PathVariable("time") Long time) {
+        List<GoodsVo> list = iGoodsService.getShareList(time);
+        return AjaxResult.success(list);
+    }
+
     /**
      * 导出商品列表
      */

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

@@ -319,4 +319,18 @@ public class GoodsController extends BaseController {
         return AjaxResult.success(iOrderGoodsService.getGoodsSectionList(bo));
     }
 
+
+    /**
+     * 获取用户所有购买商品
+     */
+    @ApiOperation("获取用户所有购买商品")
+    @PostMapping("/user/all")
+    public AjaxResult<List<GoodsSectionListVo>> getUserGoodsListAll(@RequestBody UserGoodsListAllBo bo) {
+//        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+//        bo.setUserId(loginUser.getUser().getUserId());
+//        return AjaxResult.success(iGoodsService.getUserGoodsListAll(bo));
+        return null;
+    }
+
+
 }

+ 11 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserBankRecordController.java

@@ -133,4 +133,15 @@ public class UserBankRecordController extends BaseController {
         return AjaxResult.success(iUserBankRecordService.getUserExamDoNum(bo));
     }
 
+
+    /**
+     * 做题记录校验是否及格
+     */
+    @ApiOperation("做题校验是否及格")
+    @GetMapping("/check/bank/record")
+    public AjaxResult<Boolean> checkBankRecord(UserBankRecordQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iUserBankRecordService.checkBankRecord(bo));
+    }
 }

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

@@ -139,6 +139,7 @@ oldStudySys:
     shareCanclePath: http://192.168.1.210:8086/witsystem/dataapi/ordercance
     searchGradeCount: http://gdxypx.xy.com/System/BussinessApi/OfficialGradeCount
     pushGradeCount: http://gdxypx.xy.com/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
 
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -138,6 +138,7 @@ oldStudySys:
     shareCanclePath: http://test.jqbao.net/witsystem/dataapi/ordercance
     searchGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCount
     pushGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
 
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -150,6 +150,7 @@ oldStudySys:
     shareCanclePath: https://www.xyyxt.net/witsystem/dataapi/ordercance
     searchGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCount
     pushGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: https://zs.gdzzkj.net/EduSystem/BusinessApi/NewYxtUserPrompt
 
 officialPush:
     infoPath: http://jypt.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -949,6 +949,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return map;
     }
 
+    @Override
+    public List<User> getUserByTelNotTenant(String telphone) {
+        return baseMapper.getUserByTelNotTenant(telphone);
+    }
+
     private Long findSubjectId(String subject){
         if(subject!=null){
             String key = "SUB_"+subject;

+ 45 - 21
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -22,6 +23,7 @@ import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.ip.IpUtils;
 import com.zhongzheng.modules.alisms.service.IAliSmsService;
 import com.zhongzheng.modules.course.bo.SectionWatchPerBo;
+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.system.service.ISysConfigService;
@@ -44,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.io.ByteArrayOutputStream;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * 登录校验方法
@@ -153,6 +156,8 @@ public class WxLoginService implements IWxLoginService {
     @Autowired
     private ISysConfigService configService;
 
+    private final String KEY_PREFIX = "GOODS_SHARE";
+
     public void initData(){
         appid = configService.selectConfigByKey("wx.small.appid");
         appsrcret = configService.selectConfigByKey("wx.small.appsecret");
@@ -997,39 +1002,58 @@ public class WxLoginService implements IWxLoginService {
     @Override
     public String shareGoodsCode(WxShareGoodsBo bo) {
         initData();
-        GoodsVo goodsVo = iGoodsService.queryById(bo.getGoodsId());
-        if(Validator.isEmpty(goodsVo)){
-            throw new CustomException("商品ID错误");
-        }
         StringBuilder sceneParam = new StringBuilder();
         String pageUrl = "";
-
         String wxGzhAccessToken = getWxSmallAccessToken();
         String param = String.format(small_wxEnCodeParam, wxGzhAccessToken);
         String url = small_wxEnCodeUrl + "?" + param;
         JSONObject obj = new JSONObject();
 
-        if(goodsVo.getGoodsType()==2){
-            pageUrl = "pages2/bank/detail";
-            sceneParam.append("id=").append(goodsVo.getGoodsId());
-            if (ObjectUtils.isNotNull(bo.getShareCode())){
-                sceneParam.append("&").append("sc=").append(bo.getShareCode());
+        if (ObjectUtils.isNotNull(bo.getGoodsId()) && bo.getGoodsId() > 0){
+            //单个商品
+            GoodsVo goodsVo = iGoodsService.queryById(bo.getGoodsId());
+            if(Validator.isEmpty(goodsVo)){
+                throw new CustomException("商品ID错误");
             }
-            if (StringUtils.isNotBlank(bo.getShareActivityCode())){
-                sceneParam.append("&").append("sac=").append(bo.getShareActivityCode());
+            if(goodsVo.getGoodsType()==2){
+                pageUrl = "pages2/bank/detail";
+                sceneParam.append("id=").append(goodsVo.getGoodsId());
+                if (ObjectUtils.isNotNull(bo.getShareCode())){
+                    sceneParam.append("&").append("sc=").append(bo.getShareCode());
+                }
+                if (StringUtils.isNotBlank(bo.getShareActivityCode())){
+                    sceneParam.append("&").append("sac=").append(bo.getShareActivityCode());
+                }
             }
-        }
-        if(goodsVo.getGoodsType()==1||goodsVo.getGoodsType()==6){
-            pageUrl = "pages3/course/detail";
-            sceneParam.append("id=").append(goodsVo.getGoodsId()).append("&");
-            sceneParam.append("gt=").append(goodsVo.getGoodsType());
-            if (ObjectUtils.isNotNull(bo.getShareCode())){
-                sceneParam.append("&").append("sc=").append(bo.getShareCode());
+            if(goodsVo.getGoodsType()==1||goodsVo.getGoodsType()==6){
+                pageUrl = "pages3/course/detail";
+                sceneParam.append("id=").append(goodsVo.getGoodsId()).append("&");
+                sceneParam.append("gt=").append(goodsVo.getGoodsType());
+                if (ObjectUtils.isNotNull(bo.getShareCode())){
+                    sceneParam.append("&").append("sc=").append(bo.getShareCode());
+                }
+                if (StringUtils.isNotBlank(bo.getShareActivityCode())){
+                    sceneParam.append("&").append("sac=").append(bo.getShareActivityCode());
+                }
             }
-            if (StringUtils.isNotBlank(bo.getShareActivityCode())){
-                sceneParam.append("&").append("sac=").append(bo.getShareActivityCode());
+        } else if (StringUtils.isNotBlank(bo.getGoodsIds())){
+            //多商品
+            List<Long> goodsIds = Arrays.asList(bo.getGoodsIds().split(",")).stream().map(x -> Long.valueOf(x)).collect(Collectors.toList());
+            //校验商品
+            List<Goods> goodsList = iGoodsService.listByIds(goodsIds);
+            if (CollectionUtils.isEmpty(goodsList)){
+                throw new CustomException("商品信息获取异常【ids:"+bo.getGoodsIds()+"】");
             }
+            //缓存ids
+            Long nowTime = DateUtils.getNowTime();
+            String key = KEY_PREFIX+nowTime;
+            Long time = bo.getEndTime() - nowTime;
+            redisCache.setCacheObjectTenant(key,bo.getGoodsIds(),time.intValue(),TimeUnit.SECONDS);
+            //页面路径和参数
+            pageUrl = "pages5/scan/recommen";
+            sceneParam.append("sharekey=").append(nowTime);
         }
+
         obj.put("page", pageUrl);
         obj.put("scene",sceneParam.toString());
         obj.put("env_version","trial");

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

@@ -48,5 +48,8 @@ public class ProfileTpQueryBo extends BaseEntity {
 	private Long goodsId;
 	/** 0 禁用 1启用 */
 	@ApiModelProperty("0 禁用 1启用")
-	private List<Integer> status;
+	private List<Integer> statusList;
+
+	@ApiModelProperty("0 禁用 1启用")
+	private String status;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/CertificateCommonMapper.java

@@ -6,6 +6,7 @@ import com.zhongzheng.modules.base.bo.CertificateTpQueryBo;
 import com.zhongzheng.modules.base.domain.CertificateCommon;
 import com.zhongzheng.modules.base.vo.CertificateCommonVo;
 import com.zhongzheng.modules.base.vo.CertificateTpVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -17,4 +18,6 @@ import java.util.List;
  */
 public interface CertificateCommonMapper extends BaseMapper<CertificateCommon> {
     List<CertificateCommonVo> getList(CertificateCommonQueryBo bo);
+
+    CertificateCommon getCertificateByTenant(@Param("code") String code,@Param("newTenantId") Long newTenantId);
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/CertificateMapper.java

@@ -1,7 +1,9 @@
 package com.zhongzheng.modules.base.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.base.domain.Certificate;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 证书Mapper接口
@@ -11,4 +13,6 @@ import com.zhongzheng.modules.base.domain.Certificate;
  */
 public interface CertificateMapper extends BaseMapper<Certificate> {
 
+    @InterceptorIgnore(tenantLine = "true")
+    Certificate getCertificateByTenant(@Param("code") String code,@Param("newTenantId") Long newTenantId);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/CertificateTpMapper.java

@@ -1,11 +1,13 @@
 package com.zhongzheng.modules.base.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.base.bo.CertificateTpQueryBo;
 import com.zhongzheng.modules.base.bo.UserProfileQueryBo;
 import com.zhongzheng.modules.base.domain.CertificateTp;
 import com.zhongzheng.modules.base.vo.CertificateTpVo;
 import com.zhongzheng.modules.base.vo.UserProfileVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -17,4 +19,7 @@ import java.util.List;
  */
 public interface CertificateTpMapper extends BaseMapper<CertificateTp> {
     List<CertificateTpVo> selectListByBo(CertificateTpQueryBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    CertificateTp getCertificateTpByTenant(@Param("code") String code,@Param("newTenantId") Long newTenantId);
 }

+ 0 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/ProfileTpMapper.java

@@ -4,8 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.base.bo.ProfileTpQueryBo;
 import com.zhongzheng.modules.base.domain.ProfileTp;
 import com.zhongzheng.modules.base.vo.ProfileTpVo;
-import com.zhongzheng.modules.course.bo.CourseQueryBo;
-import com.zhongzheng.modules.course.vo.CourseVo;
 
 import java.util.List;
 

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/ICertificateCommonService.java

@@ -53,4 +53,7 @@ public interface ICertificateCommonService extends IService<CertificateCommon> {
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    CertificateCommon getCertificateByTenant(String code, Long newTenantId);
+
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/ICertificateService.java

@@ -52,4 +52,6 @@ public interface ICertificateService extends IService<Certificate> {
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    Certificate getCertificateByTenant(String code, Long newTenantId);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/ICertificateTpService.java

@@ -54,4 +54,6 @@ public interface ICertificateTpService extends IService<CertificateTp> {
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    CertificateTp getCertificateTpByTenant(String code, Long newTenantId);
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/IProfileTpService.java

@@ -28,7 +28,8 @@ public interface IProfileTpService extends IService<ProfileTp> {
 	 */
 	List<ProfileTpVo> queryList(ProfileTpQueryBo bo);
 
-	List<ProfileTpVo> selectListByBo(ProfileTpQueryBo bo);
+	List<ProfileTpVo> selectList(ProfileTpQueryBo bo);
+
 
 	List<String> selectAllUseGoods(ProfileTpQueryBo bo);
 

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateCommonServiceImpl.java

@@ -106,4 +106,9 @@ public class CertificateCommonServiceImpl extends ServiceImpl<CertificateCommonM
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    public CertificateCommon getCertificateByTenant(String code, Long newTenantId) {
+        return baseMapper.getCertificateByTenant(code,newTenantId);
+    }
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateServiceImpl.java

@@ -110,6 +110,11 @@ public class CertificateServiceImpl extends ServiceImpl<CertificateMapper, Certi
         return this.removeByIds(ids);
     }
 
+    @Override
+    public Certificate getCertificateByTenant(String code, Long newTenantId) {
+        return baseMapper.getCertificateByTenant(code,newTenantId);
+    }
+
     private boolean checkNameUnique(Certificate entity) {
         Certificate info = getOne(new LambdaQueryWrapper<Certificate>()
                 .eq(Certificate::getCertificateName,entity.getCertificateName()).ne(Certificate::getStatus,-1)

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

@@ -690,4 +690,9 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    public CertificateTp getCertificateTpByTenant(String code, Long newTenantId) {
+        return baseMapper.getCertificateTpByTenant(code, newTenantId);
+    }
 }

+ 13 - 19
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ProfileTpServiceImpl.java

@@ -3,26 +3,23 @@ package com.zhongzheng.modules.base.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.Page;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
-import com.zhongzheng.modules.base.bo.*;
+import com.zhongzheng.modules.base.bo.ProfileTpAddBo;
+import com.zhongzheng.modules.base.bo.ProfileTpEditBo;
+import com.zhongzheng.modules.base.bo.ProfileTpQueryBo;
 import com.zhongzheng.modules.base.domain.ProfileTp;
 import com.zhongzheng.modules.base.domain.ProfileTpBusiness;
 import com.zhongzheng.modules.base.mapper.ProfileTpMapper;
 import com.zhongzheng.modules.base.service.IProfileTpBusinessService;
 import com.zhongzheng.modules.base.service.IProfileTpService;
 import com.zhongzheng.modules.base.vo.ProfileTpVo;
-import com.zhongzheng.modules.course.bo.CourseChapterBusinessAddBo;
-import com.zhongzheng.modules.course.domain.CourseChapter;
-import com.zhongzheng.modules.course.domain.CourseChapterBusiness;
-import com.zhongzheng.modules.course.domain.CourseChapterSection;
-import com.zhongzheng.modules.course.service.ICourseChapterSectionService;
 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 org.springframework.util.CollectionUtils;
 
@@ -41,9 +38,6 @@ public class ProfileTpServiceImpl extends ServiceImpl<ProfileTpMapper, ProfileTp
     @Autowired
     private IProfileTpBusinessService iProfileTpBusinessService;
 
-    @Autowired
-    private ProfileTpMapper profileTpMapper;
-
 
     @Override
     public ProfileTpVo queryById(Long profileTpId){
@@ -56,18 +50,18 @@ public class ProfileTpServiceImpl extends ServiceImpl<ProfileTpMapper, ProfileTp
         LambdaQueryWrapper<ProfileTp> lqw = Wrappers.lambdaQuery();
         lqw.like(StrUtil.isNotBlank(bo.getName()), ProfileTp::getName, bo.getName());
         lqw.eq(StrUtil.isNotBlank(bo.getCode()), ProfileTp::getCode, bo.getCode());
-        lqw.in(bo.getStatus() != null, ProfileTp::getStatus, bo.getStatus());
+        lqw.in(bo.getStatusList() != null, ProfileTp::getStatus, bo.getStatusList());
         return entity2Vo(this.list(lqw));
     }
 
     @Override
-    public List<ProfileTpVo> selectListByBo(ProfileTpQueryBo bo) {
-        return profileTpMapper.selectListByBo(bo);
+    public List<ProfileTpVo> selectList(ProfileTpQueryBo bo) {
+        return baseMapper.selectListByBo(bo);
     }
 
     @Override
     public List<String> selectAllUseGoods(ProfileTpQueryBo bo) {
-        List<ProfileTpVo> list = profileTpMapper.selectListByBo(bo);
+        List<ProfileTpVo> list = baseMapper.selectListByBo(bo);
         List<String> strList = new ArrayList<>();
         for(int i=0;i<list.size();i++){
             if(Validator.isNotEmpty(list.get(i).getGoodsIds())){
@@ -162,8 +156,8 @@ public class ProfileTpServiceImpl extends ServiceImpl<ProfileTpMapper, ProfileTp
         //查询该商品的资料模板字段
         ProfileTpQueryBo profileTpQueryBo = new ProfileTpQueryBo();
         profileTpQueryBo.setGoodsId(goodsId);
-        profileTpQueryBo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
-        List<ProfileTpVo> profileTpVos = profileTpMapper.selectListByBo(profileTpQueryBo);
+        profileTpQueryBo.setStatusList(new ArrayList<Integer>(Arrays.asList(1)));
+        List<ProfileTpVo> profileTpVos = baseMapper.selectListByBo(profileTpQueryBo);
         if (!CollectionUtils.isEmpty(profileTpVos)){
             return profileTpVos.get(0);
         }else {

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

@@ -43,6 +43,7 @@ import com.zhongzheng.modules.user.vo.UserVo;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
 import org.apache.http.entity.ContentType;
 import org.apache.poi.xwpf.usermodel.BreakType;
 import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
@@ -560,6 +561,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         Long gradeId = baseMapper.selectGrade(userProfileVo.getUserId(), userProfileVo.getGoodsId());
         if (bo.getStatus().equals(1)) {
             InformRemindVo informRemindVo = informRemindService.queryByName("七大员新考承诺书审核通过通知");
+            String content = "";
             //站内信有无启用,启用发送
             if (informRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -576,6 +578,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGradeId(gradeId);
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核成功");
+                content = "尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核成功";
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             //短信有无启用,启用发送
@@ -593,15 +596,23 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setOrderGoodsId(bo.getOrderGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核成功");
+                content = "尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核成功";
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
                 IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), commitmentCode);
             }
+            //E管证督学通知
+            if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                iGoodsService.informOldSys(userProfileVo.getUserId(),userProfileVo.getGoodsId(),null,
+                        null,7,content, Arrays.asList("七大员新考承诺书审核", DateUtils.getDate() ,"通过",content));
+            }
+
         } else {
             InformRemindVo informRemindTwoVo = informRemindService.queryByName("七大员新考承诺书审核不通过通知");
             //站内信有无启用,启用发送
+            String content = "";
             if (informRemindTwoVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(userProfileVo.getUserId());
@@ -617,6 +628,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGradeId(gradeId);
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核不通过,请重新完善吧");
+                content = "尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核不通过,请重新完善吧";
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             //短信有无启用,启用发送
@@ -634,12 +646,19 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setOrderGoodsId(bo.getOrderGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核不通过,请重新完善吧");
+                content = "尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核不通过,请重新完善吧";
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
                 IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), commitmentFailsCode);
             }
+
+            //E管证督学通知
+            if (informRemindTwoVo.getNoteStatus().equals(1) || informRemindTwoVo.getWayStatus().equals(1) || informRemindTwoVo.getGzhTpStatus().equals(1)){
+                iGoodsService.informOldSys(userProfileVo.getUserId(),userProfileVo.getGoodsId(),null,
+                        null,7,content, Arrays.asList("七大员新考承诺书审核", DateUtils.getDate() ,"不通过",content));
+            }
         }
     }
 
@@ -649,6 +668,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         Long gradeId = baseMapper.selectGrade(userProfileVo.getUserId(), userProfileVo.getGoodsId());
         if (bo.getStatus().equals(1)) {
             InformRemindVo informRemindVo = informRemindService.queryByName("资料审核通过通知");
+            String content = "";
             //站内信有无启用,启用发送
             if (informRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -664,6 +684,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGradeId(gradeId);
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核成功,请尽快去学习吧");
+                content = "尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核成功,请尽快去学习吧";
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             //短信有无启用,启用发送
@@ -680,14 +701,22 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "已经开通,请尽快去学习吧。");
+                content = "尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核成功,请尽快去学习吧";
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
                 IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), materialReviewCode);
             }
+            //E管证督学通知
+            if (informRemindVo.getWayStatus().equals(1) || informRemindVo.getNoteStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                iGoodsService.informOldSys(userProfileVo.getUserId(),userProfileVo.getGoodsId(),userProfileVo.getOrderGoodsId(),
+                        gradeId,7,content,
+                        Arrays.asList("报名资料审核", DateFormatUtils.format(new Date(), "yyyy/MM/dd"),"通过",content));
+            }
         } else {
             InformRemindVo informRemindTwoVo = informRemindService.queryByName("资料审核不通过通知");
+            String content = "";
             //站内信有无启用,启用发送
             if (informRemindTwoVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -703,6 +732,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGradeId(gradeId);
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核不通过,请重新完善吧");
+                content = "尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核不通过,请重新完善吧";
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             //短信有无启用,启用发送
@@ -719,12 +749,19 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核不通过,请重新完善吧");
+                content = "尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核不通过,请重新完善吧";
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
                 IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), NotificationOfFailureCode);
             }
+            //E管证督学通知
+            if (informRemindTwoVo.getWayStatus().equals(1) || informRemindTwoVo.getNoteStatus().equals(1) || informRemindTwoVo.getGzhTpStatus().equals(1)){
+                iGoodsService.informOldSys(userProfileVo.getUserId(),userProfileVo.getGoodsId(),userProfileVo.getOrderGoodsId(),
+                        gradeId,7,content,
+                        Arrays.asList("报名资料审核", DateFormatUtils.format(new Date(), "yyyy/MM/dd"),"不通过",content));
+            }
         }
     }
 

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

@@ -1,9 +1,11 @@
 package com.zhongzheng.modules.course.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.zhongzheng.modules.course.bo.CourseHandoutsQueryBo;
 import com.zhongzheng.modules.course.domain.CourseHandouts;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.course.vo.CourseHandoutsBusinessVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
 import java.util.List;
@@ -19,4 +21,7 @@ public interface CourseHandoutsMapper extends BaseMapper<CourseHandouts> {
     List<CourseHandoutsBusinessVo> selectEntity(Long handoutsId);
 
     Collection<CourseHandouts> queryList(CourseHandoutsQueryBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    CourseHandouts getHandoutsByTenant(@Param("encoder") String encoder,@Param("newTenantId") Long newTenantId);
 }

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

@@ -56,4 +56,7 @@ public interface CourseMapper extends BaseMapper<Course> {
     Long checkCourseHaveStudy(@Param("courseId") Long courseId);
 
     List<ClassGradeVo> gradeIdUserSelect(@Param("goodsId") Long goodsId, @Param("gradeId") Long gradeId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Course getCourseByTenant(@Param("code") String code,@Param("newTenantId") Long newTenantId);
 }

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

@@ -1,12 +1,14 @@
 package com.zhongzheng.modules.course.mapper;
 
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.course.bo.CourseChapterQueryBo;
 import com.zhongzheng.modules.course.bo.CourseModuleQueryBo;
 import com.zhongzheng.modules.course.domain.CourseModule;
 import com.zhongzheng.modules.course.vo.CourseChapterVo;
 import com.zhongzheng.modules.course.vo.CourseModuleVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -18,4 +20,7 @@ import java.util.List;
  */
 public interface CourseModuleMapper extends BaseMapper<CourseModule> {
     List<CourseModuleVo> selectListByBo(CourseModuleQueryBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    CourseModule getModuleByTenant(@Param("code") String code,@Param("newTenantId") Long newTenantId);
 }

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

@@ -2,10 +2,12 @@ package com.zhongzheng.modules.course.mapper;
 
 import com.zhongzheng.modules.course.bo.CourseProjectTypeQueryBo;
 import com.zhongzheng.modules.course.bo.CourseSubjectQueryBo;
+import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CourseSubject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.course.vo.CourseProjectTypeVo;
 import com.zhongzheng.modules.course.vo.CourseSubjectVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
 import java.util.List;
@@ -25,4 +27,6 @@ public interface CourseSubjectMapper extends BaseMapper<CourseSubject> {
     List<CourseProjectTypeVo> queryProject(Long id);
 
     Integer countNum(CourseSubjectQueryBo bo);
+
+    CourseSubject getSubjectByTenant(@Param("encoder") String encoder,@Param("newTenantId") Long newTenantId);
 }

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

@@ -49,4 +49,6 @@ public interface ICourseHandoutsService extends IService<CourseHandouts> {
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    CourseHandouts getHandoutsByTenant(String encoder, Long newTenantId);
 }

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

@@ -54,4 +54,6 @@ public interface ICourseModuleService extends IService<CourseModule> {
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     boolean batchDelModule(GoodsBatchDelBo bo);
+
+    CourseModule getModuleByTenant(String code, Long newTenantId);
 }

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

@@ -85,4 +85,6 @@ public interface ICourseService extends IService<Course> {
 	List<ClassGradeVo> gradeIdUserSelect(Long goodsId, Long gradeId);
 
 	List<GoodsUserVo> goodsProgressList(CourseQueryBo bo);
+
+    Course getCourseByTenant(String code, Long newTenantId);
 }

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

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.course.service;
 
+import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CourseSubject;
 import com.zhongzheng.modules.course.vo.CourseSubjectVo;
 import com.zhongzheng.modules.course.bo.CourseSubjectQueryBo;
@@ -51,4 +52,6 @@ public interface ICourseSubjectService extends IService<CourseSubject> {
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     List<CourseSubjectVo> queryListAll(CourseSubjectQueryBo bo);
+
+	CourseSubject getSubjectByTenant(String encoder, Long newTenantId);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseHandoutsServiceImpl.java

@@ -166,4 +166,9 @@ public class CourseHandoutsServiceImpl extends ServiceImpl<CourseHandoutsMapper,
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    public CourseHandouts getHandoutsByTenant(String encoder, Long newTenantId) {
+        return baseMapper.getHandoutsByTenant(encoder,newTenantId);
+    }
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseModuleServiceImpl.java

@@ -209,6 +209,11 @@ public class CourseModuleServiceImpl extends ServiceImpl<CourseModuleMapper, Cou
                 .in(CourseModule::getModuleId,bo.getIds()));
     }
 
+    @Override
+    public CourseModule getModuleByTenant(String code, Long newTenantId) {
+        return baseMapper.getModuleByTenant(code,newTenantId);
+    }
+
     private boolean checkNameUnique(CourseModule entity) {
         CourseModule info = getOne(new LambdaQueryWrapper<CourseModule>()
                 .eq(CourseModule::getPrefixName,entity.getPrefixName()).eq(CourseModule::getModuleName,entity.getModuleName()).last("limit 1"));

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -550,6 +550,11 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
         return goodsUserVos;
     }
 
+    @Override
+    public Course getCourseByTenant(String code, Long newTenantId) {
+        return baseMapper.getCourseByTenant(code,newTenantId);
+    }
+
     @Override
     public List<CourseUserVo> courseList(CourseQueryBo bo) {
         List<CourseUserVo> courseUserVos = baseMapper.courseList(bo);

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSubjectServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.course.bo.*;
+import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CourseEducationType;
 import com.zhongzheng.modules.course.domain.CourseSubjectProject;
 import com.zhongzheng.modules.course.service.ICourseSubjectProjectService;
@@ -178,4 +179,9 @@ public class CourseSubjectServiceImpl extends ServiceImpl<CourseSubjectMapper, C
         }
         return entity2Vo(courseSubjectVos);
     }
+
+    @Override
+    public CourseSubject getSubjectByTenant(String encoder, Long newTenantId) {
+        return baseMapper.getSubjectByTenant(encoder,newTenantId);
+    }
 }

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

@@ -0,0 +1,23 @@
+package com.zhongzheng.modules.course.vo;
+
+import com.zhongzheng.modules.goods.vo.GoodsUserVo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年01月05日 11:47
+ */
+@Data
+public class GoodsBatchListVo implements Serializable {
+
+    private String telphone;
+
+    private Long goodsId;
+
+    private Long userId;
+
+    private List<GoodsUserVo> list;
+}

+ 37 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsEGZInformBo.java

@@ -0,0 +1,37 @@
+package com.zhongzheng.modules.goods.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年01月04日 10:37
+ */
+@Data
+public class GoodsEGZInformBo implements Serializable {
+
+    @ApiModelProperty("身份证")
+    private String idNum;
+
+    @ApiModelProperty("通知类型")
+    private Integer tipsType;
+
+    @ApiModelProperty("站内信内容")
+    private String tipsContent;
+
+    @ApiModelProperty("服务号内容")
+    private String dataJson;
+
+    @ApiModelProperty("手机号码")
+    private String mobile;
+
+    @ApiModelProperty("小程序appId")
+    private String weAppId;
+
+    @ApiModelProperty("跳转路径")
+    private String toWeAppPagePath;
+
+}

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

@@ -0,0 +1,26 @@
+package com.zhongzheng.modules.goods.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年01月05日 9:41
+ */
+@Data
+public class UserGoodsListAllBo implements Serializable {
+
+    @ApiModelProperty("教育类型ID")
+    private Long educationTypeId;
+
+    @ApiModelProperty("业务层次ID")
+    private Long businessId;
+
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+
+    @ApiModelProperty("用户ID")
+    private Long userId;
+}

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsSpecAttributeMapper.java

@@ -1,9 +1,11 @@
 package com.zhongzheng.modules.goods.mapper;
 
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.goods.bo.GoodsSpecAttributeAddBo;
 import com.zhongzheng.modules.goods.domain.GoodsSpecAttribute;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -16,4 +18,10 @@ import java.util.List;
 public interface GoodsSpecAttributeMapper extends BaseMapper<GoodsSpecAttribute> {
 
     Integer saveBatchEntity(List<GoodsSpecAttributeAddBo> specAttrList);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<Long> getIdsByTenant(@Param("specIds") List<Long> specIds);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Integer deleteByIdsTenant(@Param("specAttrIds") List<Long> specAttrIds);
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsSpecAttributeRelationMapper.java

@@ -1,8 +1,10 @@
 package com.zhongzheng.modules.goods.mapper;
 
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.goods.domain.GoodsSpecAttributeRelation;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 【请填写功能名称】Mapper接口
@@ -12,4 +14,6 @@ import com.zhongzheng.modules.goods.domain.GoodsSpecAttributeRelation;
  */
 public interface GoodsSpecAttributeRelationMapper extends BaseMapper<GoodsSpecAttributeRelation> {
 
+    @InterceptorIgnore(tenantLine = "true")
+    Integer deleteByTemplateIdTenant(@Param("specTemplateId") Long specTemplateId,@Param("newTenantId") Long newTenantId);
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsSpecMapper.java

@@ -1,8 +1,10 @@
 package com.zhongzheng.modules.goods.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.goods.bo.GoodsSpecAddBo;
 import com.zhongzheng.modules.goods.domain.GoodsSpec;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -16,4 +18,9 @@ public interface GoodsSpecMapper extends BaseMapper<GoodsSpec> {
 
     Integer saveBatchEntity(List<GoodsSpecAddBo> boList);
 
+    @InterceptorIgnore(tenantLine = "true")
+    List<Long> getIdsByTenant(@Param("specTemplateId") Long specTemplateId,@Param("newTenantId") Long newTenantId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    void deleteByIdsByTenant(@Param("specIds") List<Long> specIds);
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsSpecTemplateMapper.java

@@ -1,7 +1,9 @@
 package com.zhongzheng.modules.goods.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.goods.domain.GoodsSpecTemplate;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 【请填写功能名称】Mapper接口
@@ -11,4 +13,6 @@ import com.zhongzheng.modules.goods.domain.GoodsSpecTemplate;
  */
 public interface GoodsSpecTemplateMapper extends BaseMapper<GoodsSpecTemplate> {
 
+    @InterceptorIgnore(tenantLine = "true")
+    GoodsSpecTemplate getSpecTpByTenant(@Param("name")String name,@Param("createTime")Long createTime,@Param("newTenantId") Long newTenantId);
 }

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

@@ -103,7 +103,14 @@ public interface IGoodsService extends IService<Goods> {
 
     String getGoodsStudyUrl(GoodsStudyUrlBo bo);
 
-    boolean goodsBatchCopyTenant(GoodsBatchCopyTenantBo bo);
+	boolean goodsBatchCopyTenant(GoodsBatchCopyTenantBo bo);
+
+	//督学通知e管证
+    boolean informOldSys(Long userId,Long goodsId,Long orderGoodsId, Long gradeId,Integer type,String content,List<String> dataJson);
+
+	boolean goodsBatchCopyIncrementTenant(GoodsBatchCopyTenantBo bo);
 
 	boolean goodsBatchCopyDisposeTenant();
+
+    List<GoodsVo> getShareList(Long time);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsSpecAttributeRelationService.java

@@ -49,4 +49,6 @@ public interface IGoodsSpecAttributeRelationService extends IService<GoodsSpecAt
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    void deleteByTemplateIdTenant(Long specTemplateId, Long newTenantId);
 }

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

@@ -52,4 +52,7 @@ public interface IGoodsSpecAttributeService extends IService<GoodsSpecAttribute>
 
     Integer saveBatchEntity(List<GoodsSpecAttributeAddBo> specAttrList);
 
+    List<Long> getIdsByTenant(List<Long> specIds);
+
+	void deleteByIdsTenant(List<Long> specAttrIds);
 }

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

@@ -53,4 +53,7 @@ public interface IGoodsSpecService extends IService<GoodsSpec> {
 
     Integer saveBatchEntity(List<GoodsSpecAddBo> bos);
 
+    List<Long> getIdsByTenant(Long specTemplateId, Long newTenantId);
+
+    void deleteByIdsTenant(List<Long> specIds);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsSpecTemplateService.java

@@ -54,4 +54,6 @@ public interface IGoodsSpecTemplateService extends IService<GoodsSpecTemplate> {
 	List<GoodsSpecAttributeRelationVo> addSpec(GoodsSpecTemplateAddBo bo);
 
 	GoodsVo getSpecTemplate(Long specTemplateId, String specAttrIds);
+
+    GoodsSpecTemplate getSpecTpByTenant(String name,Long createTime,Long newTenantId);
 }

+ 670 - 122
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -16,6 +17,8 @@ import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.bank.domain.*;
 import com.zhongzheng.modules.bank.mapper.QuestionMapper;
 import com.zhongzheng.modules.bank.service.*;
@@ -67,6 +70,7 @@ import com.zhongzheng.modules.user.vo.SubjectStudyRecordVo;
 import com.zhongzheng.modules.user.vo.UserVo;
 import net.polyv.common.v1.util.StringUtils;
 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;
@@ -74,6 +78,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.Page;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -238,6 +243,9 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
     @Autowired
     private ISysGoodsCopyRecordService iGoodsCopyRecordService;
 
+    @Value("${oldStudySys.educationalInspector}")
+    private String INFORM_PATH;
+
     @Override
     public GoodsVo queryById(Long goodsId) {
         Goods db = this.baseMapper.selectById(goodsId);
@@ -976,17 +984,23 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         if (Validator.isEmpty(bo.getTelphone())) {
             throw new CustomException("参数错误");
         }
-        User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone, bo.getTelphone()));
-        if (ObjectUtils.isNull(user)) {
+
+        List<User> users = iUserService.getUserByTelNotTenant(bo.getTelphone());
+        if (CollectionUtils.isNotEmpty(users)) {
             throw new CustomException("通过手机号获取用户信息失败");
         }
         //获取用户订单商品信息
-        List<UserGoodsListVo> voList = baseMapper.getOrderGoodsListByUser(user.getUserId());
+        List<UserGoodsListVo> voList = new ArrayList<>();
+        users.forEach(item -> {
+            List<UserGoodsListVo> orderGoodsListByUser = baseMapper.getOrderGoodsListByUser(item.getUserId());
+            voList.addAll(orderGoodsListByUser);
+        });
+
         if (CollectionUtils.isEmpty(voList)) {
             return new ArrayList<>();
         }
         voList.forEach(goodsVo -> {
+            User user = users.stream().filter(x -> x.getTenantId().equals(goodsVo.getTenantId())).findFirst().orElse(null);
             //已学和未学
             Long secLong = 0L;
             Long studyLong = 0L;
@@ -1056,11 +1070,94 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return voList;
     }
 
+    /**
+     * 督学通知e管证
+     * @author change
+     * @date 2023/1/4 10:24
+     * @param userId
+     * @param goodsId
+     * @param type
+     * @param content
+     * @param dataJson
+     * @return boolean
+     */
+    @Override
+    public boolean informOldSys(Long userId, Long goodsId,Long orderGoodsId,Long gradeId, Integer type, String content, List<String> dataJson) {
+        User user = iUserService.getById(userId);
+        if (ObjectUtils.isNull(user)){
+            log.error("informOldSys:督学通知E管证失败(用户信息获取失败)userId:"+userId);
+            return false;
+        }
+        Goods goods = null;
+        if (ObjectUtils.isNotNull(goodsId)){
+            goods = getById(goodsId);
+        }
+        GoodsEGZInformBo bo = new GoodsEGZInformBo();
+        bo.setIdNum(user.getIdCard());
+        bo.setMobile(user.getTelphone());
+        bo.setTipsType(type);
+        bo.setTipsContent(content);
+        bo.setDataJson(JSONArray.toJSONString(dataJson));
+        if (ObjectUtils.isNotNull(orderGoodsId) && ObjectUtils.isNotNull(gradeId)){
+            //获取小程序appID
+            String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+            SysConfig sysConfig = iSysConfigService.getOne(new LambdaQueryWrapper<SysConfig>()
+                    .eq(SysConfig::getConfigKey, "wx.small.appid")
+                    .eq(SysConfig::getTenantId,Long.valueOf(tenantId)));
+            if (ObjectUtils.isNull(sysConfig)) {
+                log.error("informOldSys:督学通知E管证失败(小程序appID获取失败)tenantId:"+tenantId);
+                return false;
+            }
+            bo.setWeAppId(sysConfig.getConfigValue());
+            //跳转路径
+            //课程
+            List<Long> courseIds = iGoodsCourseService.getCourseIdsByGoodsAndTenant(goodsId,Long.valueOf(tenantId));
+            Long courseId = 0L;
+            if (CollectionUtils.isNotEmpty(courseIds) && courseIds.size() == 1) {
+                courseId = courseIds.get(0);
+            }
+            if (goods.getGoodsType() == 2) {
+                //题库
+                bo.setToWeAppPagePath("/pages/questionBank/index");
+            } else if (goods.getGoodsType() == 6) {
+                //直播
+                bo.setToWeAppPagePath(String.format("/pages3/live/detail?orderGoodsId=%s&goodsId=%s&gradeId=0&courseId=%s",
+                        orderGoodsId, goodsId, courseId));
+            } else {
+                //视频
+                bo.setToWeAppPagePath(String.format("/pages3/polyv/detail?id=%s&goodsId=%s&orderGoodsId=%s&gradeId=%s",
+                        courseId, goodsId, orderGoodsId, gradeId));
+            }
+        }
+        Map<String, String> params = new HashMap<>();
+        Long nowTime = DateUtils.getNowTime();
+        String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
+        params.put("stamp", nowTime.toString());
+        params.put("sign", sign);
+        params.put("jsonstr", JSONArray.toJSONString(Arrays.asList(bo)));
+        String respone = "";
+        try {
+            respone = HttpUtils.postFormBody(INFORM_PATH, params);
+            if (!respone.contains("\"Status\":true")) {
+                log.error("E管证督学通知接口请求错误"+respone);
+                return false;
+            }
+        } catch (IOException e) {
+            log.error("E管证督学通知接口请求错误"+respone);
+            return false;
+        }
+
+        return true;
+    }
+
     @Override
     public String getGoodsStudyUrl(GoodsStudyUrlBo bo) {
         String url = "";
-        String domain = "http://192.168.1.222:6002/";
-        String domainH5 = "https://h.xyyxt.net";
+        //中正学堂PC域名和H5域名 https://zzyxt.gdzzkj.net/  h.gdzzkj.net
+//        String domain = "http://192.168.1.222:6002/";
+//        String domainH5 = "https://h.xyyxt.net";
+        String domain = "https://zzyxt.gdzzkj.net/";
+        String domainH5 = "https://h.gdzzkj.net";
         GoodsVo goods = baseMapper.queryGoodsByIdTenant(bo.getGoodsId(), bo.getTenantId());
         if (ObjectUtils.isNull(goods)) {
             throw new CustomException("商品不存在!");
@@ -1098,7 +1195,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
             //H5
             if (goods.getGoodsType() == 2) {
                 //题库
-                url = String.format("%s/pages/questionBank/index&skipPort=%s", domainH5, nowTime);
+                url = String.format("%s/pages/questionBank/index?skipPort=%s", domainH5, nowTime);
             } else if (goods.getGoodsType() == 6) {
                 //直播
                 url = String.format("%s/pages3/live/detail?orderGoodsId=%s&goodsId=%s&gradeId=0&courseId=%s&skipPort=%s",
@@ -1117,121 +1214,553 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return url;
     }
 
-//    @Override
-//    public boolean goodsBatchCopyTenant(GoodsBatchCopyTenantBo bo) {
-//        //获取商品信息
-//        List<Goods> goodsList = list(new LambdaQueryWrapper<Goods>()
-//                .in(CollectionUtils.isNotEmpty(bo.getGoodsIds()), Goods::getGoodsId, bo.getGoodsIds()));
-//        if (CollectionUtils.isEmpty(goodsList)){
-//            return true;
-//        }
-//        Long tenantId = 867735392558919680L;
-//        Long newTenantId = bo.getTenantId();
-//        List<Goods> oldGoodsList = goodsList.stream().map(x -> BeanUtil.toBean(x, Goods.class)).collect(Collectors.toList());
-//        for (Goods goods : goodsList) {
-//            goods.setGoodsId(null);
-//            goods.setTeacherId(newTenantId);
-//            //供应方ID
-//            if (ObjectUtil.isNotNull(goods.getSupplyId())){
-//                PaySupply supply = iPaySupplyService.getById(goods.getSupplyId());
-//                if (ObjectUtils.isNotNull(supply)){
-//                    //新机构是否存在
-//                    PaySupply newSupply = iPaySupplyService.getSupplyByTenant(supply.getSupplyName(),newTenantId);
-//                    if (ObjectUtil.isNotNull(newSupply)){
-//                        goods.setSupplyId(newSupply.getSupplyId());
-//                    }else {
-//                        supply.setSupplyId(null);
-//                        supply.setTenantId(newTenantId);
-//                        iPaySupplyService.save(supply);
-//                        goods.setSupplyId(supply.getSupplyId());
-//                    }
-//                }
-//            }
-//
-//            //教育类型
-//            if (ObjectUtil.isNotNull(goods.getEducationTypeId())){
-//                CourseEducationType type = iCourseEducationTypeService.getById(goods.getEducationTypeId());
-//                if (ObjectUtil.isNotNull(type)){
-//                    CourseEducationType newType = iCourseEducationTypeService.getEducationTypeBytenant(type.getEncoder(),newTenantId);
-//                    if (ObjectUtil.isNotNull(newType)){
-//                        goods.setEducationTypeId(newType.getId());
-//                    }else {
-//                        type.setId(null);
-//                        type.setTenantId(newTenantId);
-//                        iCourseEducationTypeService.save(type);
-//                        goods.setEducationTypeId(type.getId());
-//                    }
-//                }
-//            }
-//
-//            //业务层次
-//            if (ObjectUtil.isNotNull(goods.getBusinessId())){
-//                CourseBusiness business = iCourseBusinessService.getById(goods.getBusinessId());
-//                if (ObjectUtil.isNotNull(business)){
-//                    CourseBusiness newBusiness = iCourseBusinessService.getBusinessByTenant(business.getEncoder(),newTenantId);
-//                    if (ObjectUtil.isNotNull(newBusiness)){
-//                        goods.setBusinessId(newBusiness.getId());
-//                    }else {
-//                        business.setId(null);
-//                        business.setTenantId(newTenantId);
-//                        iCourseBusinessService.save(business);
-//                        goods.setBusinessId(business.getId());
-//                    }
-//
-//                }
-//            }
-//
-//            //所属院校
-//            if (ObjectUtil.isNotNull(goods.getSchoolId())){
-//                School school = iSchoolService.getById(goods.getSchoolId());
-//                if (ObjectUtil.isNotNull(school)){
-//                    School newSchool = iSchoolService.getSchoolByTenant(school.getEncoder(),newTenantId);
-//                    if (ObjectUtil.isNotNull(newSchool)){
-//                        goods.setBusinessId(newSchool.getId());
-//                    }else {
-//                        school.setId(null);
-//                        school.setTenantId(newTenantId);
-//                        iSchoolService.save(school);
-//                        goods.setBusinessId(school.getId());
-//                    }
-//                }
-//            }
-//
-//            //所属专业
-//            if (ObjectUtil.isNotNull(goods.getMajorId())){
-//                Major major = iMajorService.getById(goods.getMajorId());
-//                if (ObjectUtil.isNotNull(major)){
-//                    Major newMajor = iMajorService.getMajorByTenant(major.getEncoder(),newTenantId);
-//                    if (ObjectUtil.isNotNull(newMajor)){
-//                        goods.setMajorId(newMajor.getId());
-//                    }else {
-//                        major.setId(null);
-//                        major.setTenantId(newTenantId);
-//                        iMajorService.save(major);
-//                        goods.setBusinessId(major.getId());
-//                    }
-//                }
-//            }
-//
-//            //项目
-//            if (ObjectUtil.isNotNull(goods.getProjectId())){
-//                CourseProjectType project = iCourseProjectTypeService.getById(goods.getProjectId());
-//                if (ObjectUtil.isNotNull(project)){
-//                    CourseProjectType newProject = iCourseProjectTypeService.getProjectByTenant(project.getEncoder(),newTenantId);
-//                    if (ObjectUtil.isNotNull(newProject)){
-//                        goods.setMajorId(newProject.getId());
-//                    }else {
-//                        project.setId(null);
-//                        project.setTenantId(newTenantId);
-//                        iCourseProjectTypeService.save(project);
-//                        goods.setBusinessId(project.getId());
-//                    }
-//                }
-//            }
-//
-//        }
-//        return false;
-//    }
+    @Override
+    public boolean goodsBatchCopyIncrementTenant(GoodsBatchCopyTenantBo bo) {
+        //获取商品信息
+        List<Goods> goodsList = list(new LambdaQueryWrapper<Goods>()
+                .in(CollectionUtils.isNotEmpty(bo.getGoodsIds()), Goods::getGoodsId, bo.getGoodsIds()));
+        if (CollectionUtils.isEmpty(goodsList)){
+            return true;
+        }
+        Long tenantId = 867735392558919680L;
+        Long newTenantId = bo.getTenantId();
+        List<GoodsSpecAttributeRelation> newRelationList = new ArrayList<>();
+        for (Goods goods : goodsList) {
+            //判断商品是否存在
+            GoodsVo newGoods = this.baseMapper.queryGoodsByIdTenant(goods.getGoodsId(),newTenantId);
+            if (ObjectUtils.isNull(newGoods)){
+                //不存在(新增)
+                goods.setGoodsId(null);
+                goods.setTeacherId(newTenantId);
+            }
+
+            //供应方ID
+            if (ObjectUtil.isNotNull(goods.getSupplyId())){
+                PaySupply supply = iPaySupplyService.getById(goods.getSupplyId());
+                if (ObjectUtils.isNotNull(supply)){
+                    //新机构是否存在
+                    PaySupply newSupply = iPaySupplyService.getSupplyByTenant(supply.getSupplyName(),newTenantId);
+                    if (ObjectUtil.isNotNull(newSupply)){
+                        goods.setSupplyId(newSupply.getSupplyId());
+                    }else {
+                        supply.setSupplyId(null);
+                        supply.setTenantId(newTenantId);
+                        //服务类型ID
+                        if (ObjectUtil.isNotNull(supply.getServerId())){
+                            PayServe payServe = iPayServeService.getById(supply.getServerId());
+                            if (ObjectUtils.isNotNull(payServe)){
+                                PayServe newPayServer = iPayServeService.getPayServeByTenant(payServe.getServeName(),newTenantId);
+                                if (ObjectUtils.isNotNull(newPayServer)){
+                                    supply.setServerId(newPayServer.getServeId());
+                                }else {
+                                    //新增服务
+                                    payServe.setServeId(null);
+                                    payServe.setTenantId(newTenantId);
+                                    iPayServeService.save(payServe);
+                                    supply.setServerId(newPayServer.getServeId());
+                                }
+                            }
+                        }
+                        iPaySupplyService.save(supply);
+                        goods.setSupplyId(supply.getSupplyId());
+                    }
+
+
+                }
+            }
+
+            //教育类型
+            if (ObjectUtil.isNotNull(goods.getEducationTypeId())){
+                CourseEducationType type = iCourseEducationTypeService.getById(goods.getEducationTypeId());
+                if (ObjectUtil.isNotNull(type)){
+                    CourseEducationType newType = iCourseEducationTypeService.getEducationTypeBytenant(type.getEncoder(),newTenantId);
+                    if (ObjectUtil.isNotNull(newType)){
+                        goods.setEducationTypeId(newType.getId());
+                    }else {
+                        type.setId(null);
+                        type.setTenantId(newTenantId);
+                        iCourseEducationTypeService.save(type);
+                        goods.setEducationTypeId(type.getId());
+                    }
+                }
+            }
+
+            //业务层次
+            if (ObjectUtil.isNotNull(goods.getBusinessId())){
+                CourseBusiness business = iCourseBusinessService.getById(goods.getBusinessId());
+                if (ObjectUtil.isNotNull(business)){
+                    CourseBusiness newBusiness = iCourseBusinessService.getBusinessByTenant(business.getEncoder(),newTenantId);
+                    if (ObjectUtil.isNotNull(newBusiness)){
+                        goods.setBusinessId(newBusiness.getId());
+                    }else {
+                        business.setId(null);
+                        business.setTenantId(newTenantId);
+                        //项目ID
+                        if (ObjectUtils.isNotNull(business.getProjectId())){
+                            CourseProjectType projectType = iCourseProjectTypeService.getById(business.getProjectId());
+                            if (ObjectUtil.isNotNull(projectType)){
+                                CourseProjectType newProject = iCourseProjectTypeService.getProjectByTenant(projectType.getEncoder(), newTenantId);
+                                if (ObjectUtil.isNotNull(newProject)){
+                                    business.setProjectId(newProject.getId().intValue());
+                                }else {
+                                    //新增项目
+                                    //判断项目的教育类型是否存在
+                                    CourseEducationType educationType = iCourseEducationTypeService.getById(projectType.getEducationId());
+                                    CourseEducationType newEducationType = iCourseEducationTypeService.getEducationTypeBytenant(educationType.getEncoder(), newTenantId);
+                                    if (ObjectUtil.isNotNull(newEducationType)){
+                                        projectType.setEducationId(newEducationType.getId().intValue());
+                                    }else {
+                                        educationType.setId(null);
+                                        educationType.setTenantId(newTenantId);
+                                        iCourseEducationTypeService.save(educationType);
+                                        projectType.setEducationId(educationType.getId().intValue());
+                                    }
+                                    projectType.setId(null);
+                                    projectType.setTenantId(newTenantId);
+                                    iCourseProjectTypeService.save(projectType);
+                                    business.setProjectId(projectType.getId().intValue());
+                                }
+                            }
+                        }
+                        iCourseBusinessService.save(business);
+                        goods.setBusinessId(business.getId());
+                    }
+
+                }
+            }
+
+            //所属院校
+            if (ObjectUtil.isNotNull(goods.getSchoolId())){
+                School school = iSchoolService.getById(goods.getSchoolId());
+                if (ObjectUtil.isNotNull(school)){
+                    School newSchool = iSchoolService.getSchoolByTenant(school.getEncoder(),newTenantId);
+                    if (ObjectUtil.isNotNull(newSchool)){
+                        goods.setSchoolId(newSchool.getId());
+                    }else {
+                        school.setId(null);
+                        school.setTenantId(newTenantId);
+                        iSchoolService.save(school);
+                        goods.setSchoolId(school.getId());
+                    }
+                }
+            }
+
+            //所属专业
+            if (ObjectUtil.isNotNull(goods.getMajorId())){
+                Major major = iMajorService.getById(goods.getMajorId());
+                if (ObjectUtil.isNotNull(major)){
+                    Major newMajor = iMajorService.getMajorByTenant(major.getEncoder(),newTenantId);
+                    if (ObjectUtil.isNotNull(newMajor)){
+                        goods.setMajorId(newMajor.getId());
+                    }else {
+                        major.setId(null);
+                        major.setTenantId(newTenantId);
+                        iMajorService.save(major);
+                        goods.setMajorId(major.getId());
+                    }
+                }
+            }
+
+            //项目
+            if (ObjectUtil.isNotNull(goods.getProjectId())){
+                CourseProjectType project = iCourseProjectTypeService.getById(goods.getProjectId());
+                if (ObjectUtil.isNotNull(project)){
+                    CourseProjectType newProject = iCourseProjectTypeService.getProjectByTenant(project.getEncoder(),newTenantId);
+                    if (ObjectUtil.isNotNull(newProject)){
+                        goods.setProjectId(newProject.getId().intValue());
+                    }else {
+                        project.setId(null);
+                        project.setTenantId(newTenantId);
+                        //判断项目的教育类型是否存在
+                        CourseEducationType educationType = iCourseEducationTypeService.getById(project.getEducationId());
+                        CourseEducationType newEducationType = iCourseEducationTypeService.getEducationTypeBytenant(educationType.getEncoder(), newTenantId);
+                        if (ObjectUtil.isNotNull(newEducationType)){
+                            project.setEducationId(newEducationType.getId().intValue());
+                        }else {
+                            educationType.setId(null);
+                            educationType.setTenantId(newTenantId);
+                            iCourseEducationTypeService.save(educationType);
+                            project.setEducationId(educationType.getId().intValue());
+                        }
+                        iCourseProjectTypeService.save(project);
+                        goods.setProjectId(project.getId().intValue());
+                    }
+                }
+            }
+
+            //讲义
+            if (ObjectUtil.isNotNull(goods.getHandoutsId())){
+                CourseHandouts courseHandouts = iCourseHandoutsService.getById(goods.getHandoutsId());
+                if (ObjectUtil.isNotNull(courseHandouts)){
+                    CourseHandouts newCourseHandouts = iCourseHandoutsService.getHandoutsByTenant(courseHandouts.getEncoder(),newTenantId);
+                    if (ObjectUtil.isNotNull(newCourseHandouts)){
+                        goods.setHandoutsId(newCourseHandouts.getHandoutsId());
+                    }else {
+                        //讲义业务层次
+                        List<CourseHandoutsBusiness> handoutsBusinessList = iCourseHandoutsBusinessService
+                                .list(new LambdaQueryWrapper<CourseHandoutsBusiness>()
+                                .eq(CourseHandoutsBusiness::getHandoutsId, courseHandouts.getHandoutsId()));
+                        newCourseHandouts.setHandoutsId(null);
+                        newCourseHandouts.setTenantId(newTenantId);
+                        iCourseHandoutsService.save(newCourseHandouts);
+                        goods.setHandoutsId(courseHandouts.getHandoutsId());
+                        if (CollectionUtils.isNotEmpty(handoutsBusinessList)){
+                            List<CourseHandoutsBusiness> collect = handoutsBusinessList.stream().map(business -> {
+                                business.setId(null);
+                                business.setTenantId(newTenantId);
+                                //项目
+                                business.setEducationId(getNewEducationTypeId(business.getEducationId(), newTenantId));
+                                //业务
+                                business.setBusinessId(getNewBusinessId(business.getBusinessId(), newTenantId));
+                                //科目
+                                business.setSubjectId(getNewSubjectId(business.getSubjectId(), newTenantId));
+                                //讲义
+                                business.setHandoutsId(courseHandouts.getHandoutsId());
+                                return business;
+                            }).collect(Collectors.toList());
+                            iCourseHandoutsBusinessService.saveBatch(collect);
+                        }
+                    }
+                }
+            }
+
+            //科目ID,拼接
+            if (StringUtils.isNotBlank(goods.getSubjectIds())){
+                List<Long> subIds = new ArrayList<>();
+                List<Long> ids = Arrays.asList(goods.getSubjectIds().split(",")).stream().map(x -> Long.valueOf(x)).collect(Collectors.toList());
+                ids.forEach(item -> {
+                    Long newSubjectId = getNewSubjectId(item, newTenantId);
+                    if (ObjectUtils.isNotNull(newSubjectId)){
+                        subIds.add(newSubjectId);
+                    }
+                });
+                if (CollectionUtils.isNotEmpty(subIds)){
+                    goods.setSubjectIds(subIds.stream().map(x -> x.toString()).collect(Collectors.joining(",")));
+                }
+            }
+
+            //证书类型
+            if (ObjectUtils.isNotNull(goods.getCertificateTypeId())){
+                goods.setCertificateTypeId(getNewCertificateTypeId(goods.getCertificateTypeId(),newTenantId));
+            }
+
+            //证书
+            if (ObjectUtils.isNotNull(goods.getCertificateId())){
+                goods.setCertificateId(getNewCertificateId(goods.getCertificateId(),newTenantId));
+            }
+
+            //证书模板
+            if (ObjectUtils.isNotNull(goods.getCertificateTpId())){
+                CertificateTp certificateTp = iCertificateTpService.getById(goods.getCertificateTpId());
+                if (ObjectUtils.isNotNull(certificateTp)){
+                    CertificateTp newCertificateTp =iCertificateTpService.getCertificateTpByTenant(certificateTp.getCode(),newTenantId);
+                    if (ObjectUtils.isNotNull(newCertificateTp)){
+                        goods.setCertificateTpId(newCertificateTp.getTpId());
+                    }else {
+                        certificateTp.setTpId(null);
+                        certificateTp.setTenantId(newTenantId);
+                        certificateTp.setCertificateId(getNewCertificateId(certificateTp.getCertificateId(),newTenantId));
+                        certificateTp.setTpId(getNewCertificateTypeId(certificateTp.getTpId(),newTenantId));
+                        iCertificateTpService.save(certificateTp);
+                        goods.setCertificateTpId(certificateTp.getTpId());
+                    }
+                }
+            }
+
+            //规格模板
+            if (ObjectUtils.isNotNull(goods.getSpecTemplateId())){
+                List<GoodsSpecAttributeRelation> attributeRelationList = goodsSpecAttributeRelationService
+                        .list(new LambdaQueryWrapper<GoodsSpecAttributeRelation>()
+                        .eq(GoodsSpecAttributeRelation::getGoodsId, goods.getGoodsId()));
+                if (CollectionUtils.isNotEmpty(attributeRelationList)){
+                    for (GoodsSpecAttributeRelation relation : attributeRelationList) {
+                        GoodsSpecTemplate specTemplate = goodsSpecTemplateService.getById(relation.getSpecTemplateId());
+                        GoodsSpecTemplate newSpecTemplate = goodsSpecTemplateService.getSpecTpByTenant(specTemplate.getName(),specTemplate.getCreateTime(),newTenantId);
+                       if (ObjectUtils.isNotNull(newSpecTemplate)){
+                           //更新
+                           List<Long> specIds = goodsSpecService.getIdsByTenant(newSpecTemplate.getSpecTemplateId(),newTenantId);
+                           if (CollectionUtils.isNotEmpty(specIds)){
+                               //删除关联信息
+                               List<Long> specAttrIds = goodsSpecAttributeService.getIdsByTenant(specIds);
+                                if (CollectionUtils.isNotEmpty(specAttrIds)){
+                                    goodsSpecAttributeService.deleteByIdsTenant(specAttrIds);
+                                    goodsSpecAttributeRelationService.deleteByTemplateIdTenant(newSpecTemplate.getSpecTemplateId(),newTenantId);
+                                }
+                               goodsSpecService.deleteByIdsTenant(specIds);
+                           }
+                           //新增关联
+                           List<GoodsSpec> specList = goodsSpecService.list(new LambdaQueryWrapper<GoodsSpec>()
+                                   .eq(GoodsSpec::getSpecTemplateId, specTemplate.getSpecTemplateId()));
+                           if (CollectionUtils.isNotEmpty(specList)){
+                               specList.forEach(item -> {
+                                   Long oldSpecId = item.getSpecId();
+                                   item.setSpecId(null);
+                                   item.setSpecTemplateId(newSpecTemplate.getSpecTemplateId());
+                                   item.setTenantId(newTenantId);
+                                   goodsSpecService.save(item);
+                                   List<GoodsSpecAttribute> specAttributeList = goodsSpecAttributeService
+                                           .list(new LambdaQueryWrapper<GoodsSpecAttribute>()
+                                           .eq(GoodsSpecAttribute::getSpecId, oldSpecId));
+                                    if (CollectionUtils.isNotEmpty(specAttributeList)){
+                                        List<GoodsSpecAttributeRelation> relationList = goodsSpecAttributeRelationService
+                                                .list(new LambdaQueryWrapper<GoodsSpecAttributeRelation>()
+                                                .eq(GoodsSpecAttributeRelation::getSpecTemplateId, specTemplate.getSpecTemplateId()));
+                                        if (CollectionUtils.isNotEmpty(relationList)){
+                                            newRelationList.addAll(relationList);
+                                        }
+                                        List<GoodsSpecAttribute> collect = specAttributeList.stream().map(attrItem -> {
+                                            attrItem.setSpecAttributeId(null);
+                                            attrItem.setSpecId(item.getSpecId());
+                                            attrItem.setTenantId(newTenantId);
+                                            return attrItem;
+                                        }).collect(Collectors.toList());
+                                        goodsSpecAttributeService.saveBatch(collect);
+                                    }
+                               });
+                           }
+
+                       }else {
+                           Long oldSpecTemplateId = specTemplate.getSpecTemplateId();
+                           //新增
+                           specTemplate.setSpecTemplateId(null);
+                           specTemplate.setTenantId(newTenantId);
+                           goodsSpecTemplateService.save(specTemplate);
+                           //新增关联
+                           List<GoodsSpec> specList = goodsSpecService.list(new LambdaQueryWrapper<GoodsSpec>()
+                                   .eq(GoodsSpec::getSpecTemplateId, oldSpecTemplateId));
+                           if (CollectionUtils.isNotEmpty(specList)){
+                               specList.forEach(item -> {
+                                   Long oldSpecId = item.getSpecId();
+                                   item.setSpecId(null);
+                                   item.setSpecTemplateId(specTemplate.getSpecTemplateId());
+                                   item.setTenantId(newTenantId);
+                                   goodsSpecService.save(item);
+                                   List<GoodsSpecAttribute> specAttributeList = goodsSpecAttributeService
+                                           .list(new LambdaQueryWrapper<GoodsSpecAttribute>()
+                                                   .eq(GoodsSpecAttribute::getSpecId, oldSpecId));
+                                   if (CollectionUtils.isNotEmpty(specAttributeList)){
+                                       List<GoodsSpecAttributeRelation> relationList = goodsSpecAttributeRelationService
+                                               .list(new LambdaQueryWrapper<GoodsSpecAttributeRelation>()
+                                                       .eq(GoodsSpecAttributeRelation::getSpecTemplateId,oldSpecTemplateId));
+                                       if (CollectionUtils.isNotEmpty(relationList)){
+                                           newRelationList.addAll(relationList);
+                                       }
+                                       List<GoodsSpecAttribute> collect = specAttributeList.stream().map(attrItem -> {
+                                           attrItem.setSpecAttributeId(null);
+                                           attrItem.setSpecId(item.getSpecId());
+                                           attrItem.setTenantId(newTenantId);
+                                           return attrItem;
+                                       }).collect(Collectors.toList());
+                                       goodsSpecAttributeService.saveBatch(collect);
+                                   }
+                               });
+                           }
+                       }
+
+                    }
+                }
+
+            }
+
+            //商品课程
+
+        }
+        return false;
+    }
+
+    private void disposeGoodsCourse(Goods goods,Long newTenantId){
+        List<GoodsCourse> goodsCourseList = iGoodsCourseService
+                .list(new LambdaQueryWrapper<GoodsCourse>()
+                .eq(GoodsCourse::getGoodsId, goods.getGoodsId()));
+        for (GoodsCourse goodsCourse : goodsCourseList) {
+            Course course = iCourseService.getById(goodsCourse.getCourseId());
+            if(ObjectUtils.isNotNull(course)){
+                Long oldCourseId = course.getCourseId();
+                Long newCourseId = 0L;
+                Course newCourse = iCourseService.getCourseByTenant(course.getCode(),newTenantId);
+                if (ObjectUtils.isNotNull(newCourse)){
+                    newCourseId = newCourse.getCourseId();
+                }else {
+                    course.setCourseId(null);
+                    course.setTenantId(newTenantId);
+                    course.setEducationTypeId(getNewEducationTypeId(course.getEducationTypeId(),newTenantId));
+                    course.setProjectId(getNewProjectTypeId(course.getProjectId(),newTenantId));
+                    course.setSubjectId(getNewSubjectId(course.getSubjectId(), newTenantId));
+                    course.setProjectId(getNewProjectTypeId(course.getProjectId(), newTenantId));
+                    course.setMajorId(getNewMajorId(course.getMajorId(),newTenantId));
+                    iCourseService.save(course);
+                    newCourseId = course.getCourseId();
+                }
+                List<CourseMenu> courseMenuList = iCourseMenuService.list(new LambdaQueryWrapper<CourseMenu>()
+                        .eq(CourseMenu::getCourseId, oldCourseId));
+                if (CollectionUtils.isNotEmpty(courseMenuList)){
+                    for (CourseMenu courseMenu : courseMenuList) {
+                        courseMenu.setCourseId(newCourseId);
+                        Long menuId = courseMenu.getMenuId();
+                        switch (courseMenu.getType()){
+                            case 1:
+                                //模块
+                                CourseModule module = iCourseModuleService.getById(menuId);
+                                if (ObjectUtils.isNotNull(module)){
+                                    CourseModule newModule = iCourseModuleService.getModuleByTenant(module.getCode(),newTenantId);
+                                    if (ObjectUtils.isNotNull(newModule)){
+                                        courseMenu.setMenuId(newModule.getTenantId());
+                                    }
+                                }
+
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+    private Long getNewCertificateId(Long certificateId,Long newTenantId){
+        CertificateCommon certificateCommon = iCertificateCommonService.getById(certificateId);
+        if (ObjectUtils.isNotNull(certificateCommon)){
+            CertificateCommon newCertificateCommon = iCertificateCommonService.getCertificateByTenant(certificateCommon.getCode(),newTenantId);
+            if (ObjectUtils.isNotNull(newCertificateCommon)){
+                return newCertificateCommon.getId();
+            }else {
+                certificateCommon.setId(null);
+                certificateCommon.setTenantId(newTenantId);
+                //证书类型
+                //证书类型
+                if (ObjectUtils.isNotNull(certificateCommon.getCertificateTypeId())){
+                    certificateCommon.setCertificateTypeId(getNewCertificateTypeId(certificateCommon.getCertificateTypeId(),newTenantId));
+                }
+                iCertificateCommonService.save(certificateCommon);
+                return certificateCommon.getId();
+            }
+        }
+        return null;
+    }
+
+    private Long getNewCertificateTypeId(Long certificateTypeId,Long newTenantId){
+        Certificate certificate = iCertificateService.getById(certificateTypeId);
+        if (ObjectUtils.isNotNull(certificate)){
+            Certificate newCertificate = iCertificateService.getCertificateByTenant(certificate.getCode(),newTenantId);
+            if (ObjectUtils.isNotNull(newCertificate)){
+                return newCertificate.getId();
+            }else {
+                certificate.setId(null);
+                certificate.setTenantId(newTenantId);
+                iCertificateService.save(certificate);
+                return certificate.getId();
+            }
+        }
+        return null;
+    }
+
+    private Long getNewEducationTypeId(Long oldEducationTypeId,Long newTenantId){
+        //教育类型
+        CourseEducationType educationType = iCourseEducationTypeService.getById(oldEducationTypeId);
+        if (ObjectUtils.isNull(educationType)){
+            return null;
+        }
+        CourseEducationType newEducationType = iCourseEducationTypeService.getEducationTypeBytenant(educationType.getEncoder(), newTenantId);
+        if (ObjectUtil.isNull(newEducationType)){
+            //新增教育类型
+            educationType.setId(null);
+            educationType.setTenantId(newTenantId);
+            iCourseEducationTypeService.save(educationType);
+            return educationType.getId();
+        }
+        return newEducationType.getId();
+    }
+
+    private Long getNewProjectTypeId(Long projectTypeId,Long newTenantId){
+        //项目类型
+        CourseProjectType project = iCourseProjectTypeService.getById(projectTypeId);
+        if (ObjectUtils.isNull(project)){
+            return null;
+        }
+        CourseProjectType newProject = iCourseProjectTypeService.getProjectByTenant(project.getEncoder(),newTenantId);
+        if (ObjectUtil.isNull(newProject)){
+            //新增项目类型
+            project.setId(null);
+            project.setTenantId(newTenantId);
+            //教育类型
+            Long newEducationTypeId = getNewEducationTypeId(project.getEducationId().longValue(), newTenantId);
+            project.setEducationId(newEducationTypeId.intValue());
+            iCourseProjectTypeService.save(project);
+
+            return project.getId();
+        }
+        return newProject.getId();
+    }
+
+    private Long getNewMajorId(Long majorId,Long newTenantId){
+        //专业
+        Major major = iMajorService.getById(majorId);
+        if (ObjectUtils.isNull(major)){
+            return null;
+        }
+        Major newMajor = iMajorService.getMajorByTenant(major.getEncoder(), newTenantId);
+        if (ObjectUtil.isNull(newMajor)){
+            //新增专业
+            major.setId(null);
+            major.setTenantId(newTenantId);
+            iMajorService.save(major);
+
+            return major.getId();
+        }
+        return newMajor.getId();
+    }
+
+    private Long getNewBusinessId(Long businessId,Long newTenantId){
+        //业务层次
+        CourseBusiness business = iCourseBusinessService.getById(businessId);
+        if (ObjectUtils.isNull(business)){
+            return null;
+        }
+        CourseBusiness newBusiness = iCourseBusinessService.getBusinessByTenant(business.getEncoder(),newTenantId);
+        if (ObjectUtil.isNull(newBusiness)){
+            //新增业务层次
+            business.setId(null);
+            business.setTenantId(newTenantId);
+            iCourseBusinessService.save(business);
+            return business.getId();
+        }
+        return newBusiness.getId();
+    }
+
+
+    private Long getNewSubjectId(Long subjectId,Long newTenantId){
+        //业务层次
+        CourseSubject courseSubject = iCourseSubjectService.getById(subjectId);
+        if (ObjectUtils.isNull(courseSubject)){
+            return null;
+        }
+        CourseSubject newCourseSubject = iCourseSubjectService.getSubjectByTenant(courseSubject.getEncoder(),newTenantId);
+        if (ObjectUtil.isNull(newCourseSubject)){
+            //业务项目关联
+            List<CourseSubjectProject> projectList = iCourseSubjectProjectService
+                            .list(new LambdaQueryWrapper<CourseSubjectProject>()
+                            .eq(CourseSubjectProject::getSubjectId, courseSubject.getId()));
+            //新增业务层次
+            courseSubject.setId(null);
+            courseSubject.setTenantId(newTenantId);
+            iCourseSubjectService.save(courseSubject);
+
+            if (CollectionUtils.isNotEmpty(projectList)){
+                List<CourseSubjectProject> collect = projectList.stream().map(item -> {
+                    item.setId(null);
+                    item.setSubjectId(courseSubject.getId());
+                    //项目ID
+                    Long newProjectTypeId = getNewProjectTypeId(item.getProjectId(), newTenantId);
+                    item.setProjectId(newProjectTypeId);
+                    item.setTenantId(newTenantId);
+                    return item;
+                }).collect(Collectors.toList());
+                iCourseSubjectProjectService.saveBatch(collect);
+            }
+            return courseSubject.getId();
+        }
+        return newCourseSubject.getId();
+    }
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -2278,6 +2807,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return true;
     }
 
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean goodsBatchCopyDisposeTenant() {
@@ -2797,6 +3328,23 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return true;
     }
 
+    private final String KEY_PREFIX = "GOODS_SHARE";
+    @Override
+    public List<GoodsVo> getShareList(Long time) {
+        String key = KEY_PREFIX+time;
+        Object obj = redisCache.getCacheObjectNoTenant(key);
+        if (ObjectUtils.isNull(obj)){
+            throw new CustomException("商品信息异常,请重新生成二维码!");
+        }
+        List<Long> goodsIds = Arrays.asList(obj.toString().split(",")).stream().map(x -> Long.valueOf(x)).collect(Collectors.toList());
+        //获取商品列表
+        List<Goods> goodsList = listByIds(goodsIds);
+        if (CollectionUtils.isEmpty(goodsList)){
+            throw new CustomException("商品信息获取异常");
+        }
+        return goodsList.stream().map(item -> BeanUtil.toBean(item,GoodsVo.class)).collect(Collectors.toList());
+    }
+
     private Long getNewId(Long oldId, Integer type){
         if (ObjectUtils.isNull(oldId) || oldId <= 0L){
             return null;

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsSpecAttributeRelationServiceImpl.java

@@ -106,4 +106,9 @@ public class GoodsSpecAttributeRelationServiceImpl extends ServiceImpl<GoodsSpec
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    public void deleteByTemplateIdTenant(Long specTemplateId, Long newTenantId) {
+      baseMapper.deleteByTemplateIdTenant(specTemplateId, newTenantId);
+    }
 }

+ 10 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsSpecAttributeServiceImpl.java

@@ -105,4 +105,14 @@ public class GoodsSpecAttributeServiceImpl extends ServiceImpl<GoodsSpecAttribut
     public Integer saveBatchEntity(List<GoodsSpecAttributeAddBo> specAttrList) {
         return baseMapper.saveBatchEntity(specAttrList);
     }
+
+    @Override
+    public List<Long> getIdsByTenant(List<Long> specIds) {
+        return baseMapper.getIdsByTenant(specIds);
+    }
+
+    @Override
+    public void deleteByIdsTenant(List<Long> specAttrIds) {
+        baseMapper.deleteByIdsTenant(specAttrIds);
+    }
 }

+ 10 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsSpecServiceImpl.java

@@ -115,5 +115,15 @@ public class GoodsSpecServiceImpl extends ServiceImpl<GoodsSpecMapper, GoodsSpec
         return baseMapper.saveBatchEntity(bos);
     }
 
+    @Override
+    public List<Long> getIdsByTenant(Long specTemplateId, Long newTenantId) {
+        return baseMapper.getIdsByTenant(specTemplateId, newTenantId);
+    }
+
+    @Override
+    public void deleteByIdsTenant(List<Long> specIds) {
+        baseMapper.deleteByIdsByTenant(specIds);
+    }
+
 
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsSpecTemplateServiceImpl.java

@@ -485,4 +485,9 @@ public class GoodsSpecTemplateServiceImpl extends ServiceImpl<GoodsSpecTemplateM
         return BeanUtil.toBean(goods,GoodsVo.class);
     }
 
+    @Override
+    public GoodsSpecTemplate getSpecTpByTenant(String name,Long createTime, Long newTenantId) {
+        return baseMapper.getSpecTpByTenant(name,createTime, newTenantId);
+    }
+
 }

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserGoodsListAllVo.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.goods.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年01月05日 10:02
+ */
+@Data
+public class UserGoodsListAllVo implements Serializable {
+
+
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserGoodsVo.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.goods.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年01月05日 10:20
+ */
+@Data
+public class UserGoodsVo implements Serializable {
+
+
+}

+ 12 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -335,6 +335,8 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             List<Long> userIds = baseMapper.queryUser(classGradeVo.getGradeId());
             if (businessId > 0) {
                 for (Long userId : userIds) {
+                    String content = "";
+                    String goodsName = "";
                     if (informRemindVo.getWayStatus().equals(1)) {
                         InformUserAddBo informUserAddBo = new InformUserAddBo();
                         informUserAddBo.setUserId(userId);
@@ -348,6 +350,8 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                         informUserAddBo.setGoodsId(classGradeVo.getGoodsList().get(0).getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(classGradeVo.getGoodsList().get(0).getGoodsId());
                         informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程已开班,班级有效期为" + startTime + "至" + endTime + ",请及时完成学习,如过期未完成学习,则需要重新购买学习,马上点击“立即学习”进行学习。");
+                        content = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程已开班,班级有效期为" + startTime + "至" + endTime + ",请及时完成学习,如过期未完成学习。";
+                        goodsName = goodsVo1.getGoodsName();
                         iInformUserService.insertByAddBo(informUserAddBo);
                     }
                     if (informRemindVo.getNoteStatus().equals(1)) {
@@ -363,6 +367,8 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                         informUserAddBo.setGoodsId(classGradeVo.getGoodsList().get(0).getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(classGradeVo.getGoodsList().get(0).getGoodsId());
                         informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程已开班,班级有效期为" + startTime + "至" + endTime + ",请及时完成学习,如过期未完成学习,则需要重新购买学习,马上点击“立即学习”进行学习。");
+                        content = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程已开班,班级有效期为" + startTime + "至" + endTime + ",请及时完成学习,如过期未完成学习。";
+                        goodsName = goodsVo1.getGoodsName();
                         iInformUserService.insertByAddBo(informUserAddBo);
                         UserVo userVo = iUserService.queryById(userId);
                         Map<String, Object> param = new HashMap<>();
@@ -370,6 +376,12 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                         param.put("time", startTime + "至" + endTime);
                         IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), classRemind);
                     }
+
+                    //E管证督学通知
+                    if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                        iGoodsService.informOldSys(userId,classGradeVo.getGoodsList().get(0).getGoodsId(),classGradeVo.getOrderGoodsId(),
+                                classGradeVo.getGradeId(),18,content, Arrays.asList(goodsName, startTime ,endTime,content));
+                    }
                 }
             }
         }

+ 35 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -55,6 +55,7 @@ import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserStudyRecordPhotoService;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.wx.service.IWxLoginService;
+import org.apache.commons.lang3.time.DateFormatUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -852,6 +853,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         GoodsVo goodsVo1 = iGoodsService.queryById(bo.getGoodsId());
         if (bo.getStatus().equals(1)) {
             InformRemindVo informRemindVo = informRemindService.queryByName("二建继教学时初审通过");
+            String content = "";
             if (!CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
                 if (informRemindVo.getWayStatus().equals(1)) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -866,6 +868,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                     informUserAddBo.setRemind("学时机构审核通过提醒");
                     informUserAddBo.setGoodsId(bo.getGoodsId());
                     informUserAddBo.setText("尊敬的用户:你已完成本课程的所有学时学习,经机构审核通过,需注册中心复审后即可获得继续教育学时,审核时间约15个工作日。");
+                    content = "尊敬的用户:你已完成本课程的所有学时学习,经机构审核通过,需注册中心复审后即可获得继续教育学时,审核时间约15个工作日。";
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
                 if (informRemindVo.getNoteStatus().equals(1)) {
@@ -881,16 +884,23 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                     informUserAddBo.setRemind("学时机构审核通过提醒");
                     informUserAddBo.setGoodsId(bo.getGoodsId());
                     informUserAddBo.setText("尊敬的用户:你已完成本课程的所有学时学习,经机构审核通过,需注册中心复审后即可获得继续教育学时,审核时间约15个工作日。");
+                    content = "尊敬的用户:你已完成本课程的所有学时学习,经机构审核通过,需注册中心复审后即可获得继续教育学时,审核时间约15个工作日。";
                     iInformUserService.insertByAddBo(informUserAddBo);
                     UserVo userVo = iUserService.queryById(bo.getUserId());
                     Map<String, Object> param = new HashMap<>();
                     IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), schoolHoursCode);
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    iGoodsService.informOldSys(bo.getUserId(),bo.getGoodsId(),bo.getOrderGoodsId(),
+                            bo.getGradeId(),7,content, Arrays.asList("二建继教学时初审", DateFormatUtils.format(new Date(), "yyyy/MM/dd"),"初审通过" ,content));
+                }
             }
         } else {
             InformRemindVo informRemindTwoVo = informRemindService.queryByName("二建继教学时初审不通过");
             if (!CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
-
+                String content = "";
                 if (informRemindTwoVo.getWayStatus().equals(1)) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();
                     informUserAddBo.setUserId(bo.getUserId());
@@ -904,6 +914,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                     informUserAddBo.setOrderGoodsId(bo.getOrderGoodsId());
                     informUserAddBo.setGoodsId(bo.getGoodsId());
                     informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时机构审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。");
+                    content = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时机构审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。";
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
                 if (informRemindTwoVo.getNoteStatus().equals(1)) {
@@ -919,12 +930,19 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                     informUserAddBo.setOrderGoodsId(bo.getOrderGoodsId());
                     informUserAddBo.setGoodsId(bo.getGoodsId());
                     informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时机构审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。");
+                    content = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时机构审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。";
                     iInformUserService.insertByAddBo(informUserAddBo);
                     UserVo userVo = iUserService.queryById(bo.getUserId());
                     Map<String, Object> param = new HashMap<>();
                     param.put("goods", goodsVo1.getGoodsName());
                     IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), auditFailedCode);
                 }
+
+                //E管证督学通知
+                if (informRemindTwoVo.getNoteStatus().equals(1) || informRemindTwoVo.getWayStatus().equals(1) || informRemindTwoVo.getGzhTpStatus().equals(1)){
+                    iGoodsService.informOldSys(bo.getUserId(),bo.getGoodsId(),bo.getOrderGoodsId(),
+                            bo.getGradeId(),7,content, Arrays.asList("二建继教学时初审", DateFormatUtils.format(new Date(), "yyyy/MM/dd"),"初审不通过" ,content));
+                }
             }
         }
     }
@@ -1007,11 +1025,18 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                         iWxLoginService.sendQdyTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    String content ="尊敬的用户:你已完成本课程的所有学时机构审核通过。";
+                    iGoodsService.informOldSys(bo.getUserId(),bo.getGoodsId(),bo.getOrderGoodsId(),
+                            bo.getGradeId(),7,content, Arrays.asList("七大员新考学时初审", DateFormatUtils.format(new Date(), "yyyy/MM/dd"),"初审通过" ,content));
+                }
             }
         } else {
             InformRemindVo informRemindTwoVo = informRemindService.queryByName("七大员新考学时初审不通过");
             if (!CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
-
+                String content = "";
                 if (informRemindTwoVo.getWayStatus().equals(1)) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();
                     informUserAddBo.setUserId(bo.getUserId());
@@ -1025,6 +1050,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                     informUserAddBo.setGoodsId(bo.getGoodsId());
                     informUserAddBo.setOrderGoodsId(gradeUser.getOrderGoodsId());
                     informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。");
+                    content = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。";
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
                 if (informRemindTwoVo.getNoteStatus().equals(1)) {
@@ -1040,6 +1066,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                     informUserAddBo.setGoodsId(bo.getGoodsId());
                     informUserAddBo.setOrderGoodsId(gradeUser.getOrderGoodsId());
                     informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。");
+                    content = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。";
                     iInformUserService.insertByAddBo(informUserAddBo);
                     UserVo userVo = iUserService.queryById(bo.getUserId());
                     Map<String, Object> param = new HashMap<>();
@@ -1060,6 +1087,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                     informUserAddBo.setRemind("学时机构审核通过提醒");
                     informUserAddBo.setGoodsId(bo.getGoodsId());
                     informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。");
+                    content = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程学时审核不通过,为了不影响您的学习进度,请点击立即重学进行重学。";
                     Long informId = iInformUserService.insertByAddBo(informUserAddBo);
                     UserVo userVo = iUserService.queryById(bo.getUserId());
                     if(Validator.isNotEmpty(userVo.getOpenId())){
@@ -1073,6 +1101,11 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                         iWxLoginService.sendQdyTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+                //E管证督学通知
+                if (informRemindTwoVo.getNoteStatus().equals(1) || informRemindTwoVo.getWayStatus().equals(1) || informRemindTwoVo.getGzhTpStatus().equals(1)){
+                    iGoodsService.informOldSys(bo.getUserId(),bo.getGoodsId(),bo.getOrderGoodsId(),
+                            bo.getGradeId(),7,content, Arrays.asList("七大员新考学时初审", DateFormatUtils.format(new Date(), "yyyy/MM/dd"),"初审不通过" ,content));
+                }
             }
         }
     }

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

@@ -38,8 +38,12 @@ public class OrderBusinessConfigQueryBo extends BaseEntity {
 
 
 	/** 业务层次id */
-	@ApiModelProperty("业务层次id")
+	@ApiModelProperty("业务层次ID")
 	private Long businessId;
+	@ApiModelProperty("项目类型ID")
+	private Long projectId;
+	@ApiModelProperty("教育类型ID")
+	private Long educationId;
 	/** 配置名称 */
 	@ApiModelProperty("配置名称")
 	private String configName;

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsVo.java

@@ -323,4 +323,7 @@ public class OrderGoodsVo {
 	private BigDecimal classHours;
 	@ApiModelProperty("课程数量")
 	private Long courseNum;
+
+	@ApiModelProperty("内容")
+	private String context;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/mapper/PayServeMapper.java

@@ -1,7 +1,9 @@
 package com.zhongzheng.modules.pay.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.zhongzheng.modules.pay.domain.PayServe;
 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 PayServeMapper extends BaseMapper<PayServe> {
 
+    @InterceptorIgnore(tenantLine = "true")
+    PayServe getPayServeByTenant(@Param("serveName") String serveName,@Param("newTenantId") Long newTenantId);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/service/IPayServeService.java

@@ -49,4 +49,6 @@ public interface IPayServeService extends IService<PayServe> {
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    PayServe getPayServeByTenant(String serveName, Long newTenantId);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/service/impl/PayServeServiceImpl.java

@@ -129,4 +129,9 @@ public class PayServeServiceImpl extends ServiceImpl<PayServeMapper, PayServe> i
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    public PayServe getPayServeByTenant(String serveName, Long newTenantId) {
+        return baseMapper.getPayServeByTenant(serveName,newTenantId);
+    }
 }

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

@@ -56,7 +56,9 @@ import com.zhongzheng.modules.exam.vo.ExamUserApplyVo;
 import com.zhongzheng.modules.goods.bo.GoodsCourseQueryBo;
 import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
 import com.zhongzheng.modules.goods.domain.Goods;
+import com.zhongzheng.modules.goods.domain.GoodsExamTime;
 import com.zhongzheng.modules.goods.service.IGoodsCourseService;
+import com.zhongzheng.modules.goods.service.IGoodsExamTimeService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.BankGoodsExamVo;
 import com.zhongzheng.modules.goods.vo.GoodsCourseVo;
@@ -89,6 +91,7 @@ import com.zhongzheng.modules.mock.service.IMockMajorSubjectTimeService;
 import com.zhongzheng.modules.mock.vo.MockApplyVo;
 import com.zhongzheng.modules.order.bo.OrderQueryBo;
 import com.zhongzheng.modules.order.domain.Order;
+import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.mapper.OrderGoodsMapper;
 import com.zhongzheng.modules.order.mapper.OrderMapper;
 import com.zhongzheng.modules.order.service.IOrderBusinessService;
@@ -124,6 +127,7 @@ import net.polyv.common.v1.util.StringUtils;
 import net.polyv.live.v1.entity.channel.playback.LiveChannelVideoListResponse;
 import net.polyv.live.v1.entity.channel.playback.LiveListChannelSessionInfoResponse;
 import net.polyv.live.v1.entity.channel.playback.LiveListChannelVideoLibraryResponse;
+import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -286,6 +290,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
     @Autowired
     private IWxLoginService iWxLoginService;
 
+    @Autowired
+    private IGoodsExamTimeService iGoodsExamTimeService;
 
     @Autowired
     private ICourseService iCourseService;
@@ -351,6 +357,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
         //查找购买后没发送消息的商品,发送购买消息
         List<OrderGoodsVo> orderGoodsVo = iOrderGoodsService.selectOrderGoods();
         InformRemindVo informRemindTwoVo = informRemindService.queryByName("商品购买成功需填写资料");
+        //需求通知E管证的订单集合
+        List<OrderGoodsVo> voList = new ArrayList<>();
         if (!CollectionUtils.isEmpty(orderGoodsVo)) {
             for (OrderGoodsVo goodsVo : orderGoodsVo) {
                 ProfileTpVo profileTpVo = iProfileTpService.queryByGoodsId(goodsVo.getGoodsId());
@@ -369,6 +377,9 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     informUserAddBo.setOrderGoodsId(goodsVo.getOrderGoodsId());
                     GoodsVo goodsVo1 = iGoodsService.queryById(goodsVo.getGoodsId());
                     informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "已经开通,请尽快去学习吧。");
+                    goodsVo.setContext("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "已经开通,请尽快去学习吧。");
+                    goodsVo.setGoodsName(goodsVo1.getGoodsName());
+                    voList.add(goodsVo);
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
                 if (informRemindTwoVo.getWayStatus() == 1 && profileTpVo != null) {
@@ -386,6 +397,9 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     informUserAddBo.setOrderGoodsId(goodsVo.getOrderGoodsId());
                     GoodsVo goodsVo1 = iGoodsService.queryById(goodsVo.getGoodsId());
                     informUserAddBo.setText("尊敬的用户:已为您开通了" + goodsVo1.getGoodsName() + "课程,本课程需完善信息方可学习,请尽快去完善资料吧。");
+                    goodsVo.setContext("尊敬的用户:已为您开通了" + goodsVo1.getGoodsName() + "课程,本课程需完善信息方可学习,请尽快去完善资料吧。");
+                    goodsVo.setGoodsName(goodsVo1.getGoodsName());
+                    voList.add(goodsVo);
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
             }
@@ -417,7 +431,11 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     if (Validator.isNotEmpty(rb)) {
                         iInformUserService.insertByAddBo(informUserAddBo);
                     }
-
+                    if (voList.stream().allMatch(x -> !x.getGoodsId().equals(goodsVo.getGoodsId()))){
+                        goodsVo.setContext("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "已经开通,请尽快去学习吧。");
+                        goodsVo.setGoodsName(goodsVo1.getGoodsName());
+                        voList.add(goodsVo);
+                    }
                 }
                 if (informRemindTwoVo.getNoteStatus() == 1 && profileTpVo != null) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -442,9 +460,24 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     if (Validator.isNotEmpty(rb)) {
                         iInformUserService.insertByAddBo(informUserAddBo);
                     }
+                    if (voList.stream().allMatch(x -> !x.getGoodsId().equals(goodsVo.getGoodsId()))){
+                        goodsVo.setContext("尊敬的用户:已为您开通了" + goodsVo1.getGoodsName() + "课程,本课程需完善信息方可学习,请尽快去完善资料吧。");
+                        goodsVo.setGoodsName(goodsVo1.getGoodsName());
+                        voList.add(goodsVo);
+                    }
                 }
             }
         }
+        if (!CollectionUtils.isEmpty(voList)){
+            //通知E管证
+            voList.forEach(item -> {
+                iGoodsService.informOldSys(item.getUserId(),item.getGoodsId(),item.getOrderGoodsId(),
+                        item.getGradeId(),2,item.getContext(),
+                        Arrays.asList(item.getGoodsName(),"已开通", DateFormatUtils.format(new Date(), "yyyy/MM/dd"),item.getContext()));
+            });
+
+        }
+
         //同步用户购买商品的考试次数和前培次数
         //    sendGoods();
         return "请求成功";
@@ -500,7 +533,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
             Date dateEnd = new Date(timeEndId);
             res = simpleDateFormat.format(date);
             resEnd = simpleDateFormat.format(dateEnd);
-
+            String context = "";
+            String goodsName = "";
             if (informTwentyRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(classTwentyGradeUserVo.getUserId());
@@ -516,6 +550,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 GoodsVo goodsVo1 = iGoodsService.queryById(classTwentyGradeUserVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您购买的课程班级有效期还剩20天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习");
                 iInformUserService.insertByAddBo(informUserAddBo);
+                context ="尊敬的用户:您购买的课程班级有效期还剩20天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习";
+                goodsName = goodsVo1.getGoodsName();
             }
             if (informTwentyRemindVo.getNoteStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -531,6 +567,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 informUserAddBo.setGradeId(classTwentyGradeUserVo.getGradeId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(classTwentyGradeUserVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程班级有效期还剩20天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习");
+                context = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程班级有效期还剩20天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习";
+                goodsName = goodsVo1.getGoodsName();
                 UserVo userVo = iUserService.queryById(classTwentyGradeUserVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
@@ -540,6 +578,11 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
             }
+            //E管证督学通知
+            if (informTwentyRemindVo.getNoteStatus().equals(1) || informTwentyRemindVo.getGzhTpStatus().equals(1) || informTwentyRemindVo.getWayStatus().equals(1)){
+                iGoodsService.informOldSys(classTwentyGradeUserVo.getUserId(),classTwentyGradeUserVo.getGoodsId(),classTwentyGradeUserVo.getOrderGoodsId(),
+                        classTwentyGradeUserVo.getGradeId(),9,context, Arrays.asList(goodsName, resEnd,context));
+            }
         }
 
         for (ClassGradeUserGoodsVo classTenGradeUserVo : classTenGradeUserVos) {
@@ -552,7 +595,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
             Date dateEnd = new Date(timeEndId);
             res = simpleDateFormat.format(date);
             resEnd = simpleDateFormat.format(dateEnd);
-
+            String context = "";
+            String goodsName = "";
             if (informTenRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(classTenGradeUserVo.getUserId());
@@ -568,6 +612,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 GoodsVo goodsVo1 = iGoodsService.queryById(classTenGradeUserVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您购买的课程班级有效期还剩10天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习");
                 iInformUserService.insertByAddBo(informUserAddBo);
+                context = "尊敬的用户:您购买的课程班级有效期还剩10天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习";
+                goodsName = goodsVo1.getGoodsName();
             }
             if (informTenRemindVo.getNoteStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -583,7 +629,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 informUserAddBo.setGradeId(classTenGradeUserVo.getGradeId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(classTenGradeUserVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程班级有效期还剩10天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习");
-
+                context = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程班级有效期还剩10天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习";
+                goodsName = goodsVo1.getGoodsName();
                 UserVo userVo = iUserService.queryById(classTenGradeUserVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
@@ -592,6 +639,12 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 if (Validator.isNotEmpty(IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), remainingDaysValidityCode))) {
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
+
+            }
+            //E管证督学通知
+            if (informTwentyRemindVo.getNoteStatus().equals(1) || informTwentyRemindVo.getGzhTpStatus().equals(1) || informTwentyRemindVo.getWayStatus().equals(1)){
+                iGoodsService.informOldSys(classTenGradeUserVo.getUserId(),classTenGradeUserVo.getGoodsId(),classTenGradeUserVo.getOrderGoodsId(),
+                        classTenGradeUserVo.getGradeId(),9,context, Arrays.asList(goodsName, resEnd,context));
             }
         }
 
@@ -605,7 +658,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
             Date dateEnd = new Date(timeEndId);
             res = simpleDateFormat.format(date);
             resEnd = simpleDateFormat.format(dateEnd);
-
+            String context = "";
+            String goodsName = "";
             if (informTenRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(classFiveGradeUserVo.getUserId());
@@ -621,6 +675,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 GoodsVo goodsVo1 = iGoodsService.queryById(classFiveGradeUserVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您购买的课程班级有效期还剩5天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习");
                 iInformUserService.insertByAddBo(informUserAddBo);
+                context = "尊敬的用户:您购买的课程班级有效期还剩5天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习";
+                goodsName = goodsVo1.getGoodsName();
             }
             if (informTenRemindVo.getNoteStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -636,6 +692,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 informUserAddBo.setGradeId(classFiveGradeUserVo.getGradeId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(classFiveGradeUserVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程班级有效期还剩5天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习");
+                context = "尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "课程班级有效期还剩5天,未在" + resEnd + "前完成全部学时,可能会影响审核进度,最终导致学时无效,请尽快完成学习";
+                goodsName = goodsVo1.getGoodsName();
                 UserVo userVo = iUserService.queryById(classFiveGradeUserVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
@@ -645,6 +703,12 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
             }
+
+            //E管证督学通知
+            if (informTwentyRemindVo.getNoteStatus().equals(1) || informTwentyRemindVo.getGzhTpStatus().equals(1) || informTwentyRemindVo.getWayStatus().equals(1)){
+                iGoodsService.informOldSys(classFiveGradeUserVo.getUserId(),classFiveGradeUserVo.getGoodsId(),classFiveGradeUserVo.getOrderGoodsId(),
+                        classFiveGradeUserVo.getGradeId(),9,context, Arrays.asList(goodsName, resEnd,context));
+            }
         }
 
     }
@@ -663,6 +727,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
             res = simpleDateFormat.format(date);
             String startTime = subscribeVo.getApplySiteStartTime();
             String endTime = subscribeVo.getApplySiteEndTime();
+            String content = "";
             if (informRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(subscribeVo.getUserId());
@@ -678,6 +743,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 GoodsVo goodsVo1 = iGoodsService.queryById(subscribeVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您预约的施工现场专业人员" + goodsVo1.getGoodsName() + "考试将在" + res + "(" + startTime + "-" + endTime + ")进行," +
                         "考试地点:" + subscribeVo.getApplySiteAddress() + seatTxt);
+                content = "尊敬的用户:您预约的施工现场专业人员" + goodsVo1.getGoodsName() + "考试将在" + res + "(" + startTime + "-" + endTime + ")进行," +
+                        "考试地点:" + subscribeVo.getApplySiteAddress() + seatTxt;
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             if (informRemindVo.getNoteStatus().equals(1)) {
@@ -695,6 +762,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 GoodsVo goodsVo1 = iGoodsService.queryById(subscribeVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您预约的施工现场专业人员" + goodsVo1.getGoodsName() + "考试将在" + res + "(" + startTime + "-" + endTime + ")进行," +
                         "考试地点:" + subscribeVo.getApplySiteAddress() + seatTxt);
+                content = "尊敬的用户:您预约的施工现场专业人员" + goodsVo1.getGoodsName() + "考试将在" + res + "(" + startTime + "-" + endTime + ")进行," +
+                        "考试地点:" + subscribeVo.getApplySiteAddress() + seatTxt;
                 UserVo userVo = iUserService.queryById(subscribeVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
@@ -719,6 +788,8 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 GoodsVo goodsVo1 = iGoodsService.queryById(subscribeVo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:您预约的施工现场专业人员" + goodsVo1.getGoodsName() + "考试将在" + res + "(" + startTime + "-" + endTime + ")进行," +
                         "考试地点:" + subscribeVo.getApplySiteAddress() + seatTxt);
+                content = "尊敬的用户:您预约的施工现场专业人员" + goodsVo1.getGoodsName() + "考试将在" + res + "(" + startTime + "-" + endTime + ")进行," +
+                        "考试地点:" + subscribeVo.getApplySiteAddress() + seatTxt;
                 UserVo userVo = iUserService.queryById(subscribeVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
@@ -736,6 +807,13 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     iWxLoginService.sendQdyExamTpMsg(userVo.getOpenId(),paramMap);
                 }
             }
+
+            //E管证督学通知
+            if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                OrderGoods orderGoods = iOrderGoodsService.getById(subscribeVo.getOrderGoodsId());
+                iGoodsService.informOldSys(subscribeVo.getUserId(),subscribeVo.getGoodsId(),null,
+                        null,6,content, Arrays.asList(subscribeVo.getApplyName(), startTime ,subscribeVo.getApplySiteAddress()));
+            }
         }
     }
 
@@ -813,6 +891,16 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                        iWxLoginService.sendSignatureTpMsg(userVo.getOpenId(),paramMap);
                    }
                }
+               //E管证督学通知
+               if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                   String content = "尊敬的用户:您参加的"+subscribeVo.getApplyName()+"考试即将开始,您还没有在线上签署疫情防控承诺书。立即打开小程序签署承诺书!";
+                   OrderGoods orderGoods = iOrderGoodsService.getById(subscribeVo.getOrderGoodsId());
+                   User user = iUserService.getById(subscribeVo.getUserId());
+                   Goods goods = iGoodsService.getById(subscribeVo.getGoodsId());
+                   iGoodsService.informOldSys(subscribeVo.getUserId(),subscribeVo.getGoodsId(),subscribeVo.getOrderGoodsId(),
+                           orderGoods.getGradeId(),3,content, Arrays.asList(user.getRealname(), goods.getGoodsName() ,"未签署疫情防控承诺书",content));
+               }
+
                LambdaUpdateWrapper<UserSubscribe> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
                objectLambdaUpdateWrapper.eq(UserSubscribe::getSubscribeId, subscribeVo.getSubscribeId());
                objectLambdaUpdateWrapper.set(UserSubscribe::getSignaturePushTime,DateUtils.getNowTime());
@@ -837,6 +925,14 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
         //需求提醒的商品集合
         List<ExamTodayRecordBo> recordBos = new ArrayList<>();
         for (UserExamSubscription subscription : list) {
+            //当前商品今天是否有设置试卷
+            List<GoodsExamTime> examTimes = iGoodsExamTimeService.list(new LambdaQueryWrapper<GoodsExamTime>()
+                    .eq(GoodsExamTime::getGoodsId, subscription.getGoodsId())
+                    .eq(GoodsExamTime::getExamTime, DateUtils.getTodayZeroTime()));
+            if (CollectionUtils.isEmpty(examTimes)){
+                //该商品当天没有设置每日一练试卷
+                continue;
+            }
             //该商品下是否有每日一练试卷
             List<BankGoodsExamVo> examVos = QuestionMapper.getBankGoodsExamList(subscription.getGoodsId());
             if (examVos.stream().filter(x -> StringUtils.isNotBlank(x.getPaperName())).anyMatch(item -> item.getPaperName().equals("每日一练"))){
@@ -1651,6 +1747,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
             Long timeId = examUserApplyVo.getApplyEndTime() * 1000;
             Date date = new Date(timeId);
             res = simpleDateFormat.format(date);
+            String content = "";
             if (informRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(examUserApplyVo.getUserId());
@@ -1665,6 +1762,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 informUserAddBo.setGradeId(examUserApplyVo.getGradeId());
                 informUserAddBo.setOrderGoodsId(examUserApplyVo.getOrderGoodsId());
                 informUserAddBo.setText("尊敬的用户:七大员新考考试预约已经开始,预约截至时间" + res + ",请马上点击进行预约考试。");
+                content = "尊敬的用户:七大员新考考试预约已经开始,预约截至时间" + res + ",请马上点击进行预约考试。";
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             if (informRemindVo.getNoteStatus().equals(1)) {
@@ -1688,6 +1786,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 if (Validator.isNotEmpty(IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), bookingReminder))) {
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
+                content = "尊敬的用户:七大员新考考试预约已经开始,预约截至时间" + res + ",请马上点击进行预约考试。";
             }
             if (informRemindVo.getGzhTpStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -1705,7 +1804,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 informUserAddBo.setText("尊敬的用户:七大员新考考试预约已经开始,预约截至时间" + res + ",请马上点击进行预约考试。");
                 UserVo userVo = iUserService.queryById(examUserApplyVo.getUserId());
                 iInformUserService.insertByAddBo(informUserAddBo);
-
+                content = "尊敬的用户:七大员新考考试预约已经开始,预约截至时间" + res + ",请马上点击进行预约考试。";
                 if(Validator.isNotEmpty(userVo.getOpenId())){
                     String startTime = DateUtils.timestampToDate(examUserApplyVo.getApplyStartTime() );
                     String endTime = DateUtils.timestampToDate(examUserApplyVo.getApplyEndTime() );
@@ -1720,6 +1819,11 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     iWxLoginService.sendQdySubTpMsg(userVo.getOpenId(),paramMap);
                 }
             }
+            //E管证督学通知
+            if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                iGoodsService.informOldSys(examUserApplyVo.getUserId(),examUserApplyVo.getGoodsId(),examUserApplyVo.getOrderGoodsId(),
+                        examUserApplyVo.getGradeId(),5,content, Arrays.asList("七大员新考", "七大员新考考试预约已经开始",res   ,content));
+            }
         }
     }
 
@@ -1765,6 +1869,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
             List<OrderGoodsVo> orderGoodsVoList = iOrderGoodsService.selectBuyUserList(mockApplyVo.getMockMajorSubjectId());
             orderGoodsVoList.forEach(orderGoodsVo -> {
             InformRemindVo informRemindVo = informRemindService.queryByName("一二建考前模考报名提醒");
+            String content = "";
             if (informRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(orderGoodsVo.getUserId());
@@ -1776,6 +1881,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 informUserAddBo.setSystemStatus(1);
                 informUserAddBo.setRemind("模考预约提醒");
                 informUserAddBo.setText("尊敬的用户:【" + mockApplyVo.getBusinessName() + mockApplyVo.getProjectName() + "】考前模拟考试将开始报名参加模拟考试。请登录【祥粤云小程序】或【web.xyyxt.net】进行报名。");
+                content = "尊敬的用户:【" + mockApplyVo.getBusinessName() + mockApplyVo.getProjectName() + "】考前模拟考试将开始报名参加模拟考试。";
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             if (informRemindVo.getNoteStatus().equals(1)) {
@@ -1789,6 +1895,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 informUserAddBo.setSystemStatus(3);
                 informUserAddBo.setRemind("模考预约提醒");
                 informUserAddBo.setText("尊敬的用户:【" + mockApplyVo.getBusinessName() + mockApplyVo.getProjectName() + "】考前模拟考试将开始报名参加模拟考试。请登录【祥粤云小程序】或【web.xyyxt.net】进行报名。");
+                content = "尊敬的用户:【" + mockApplyVo.getBusinessName() + mockApplyVo.getProjectName() + "】考前模拟考试将开始报名参加模拟考试。";
                 UserVo userVo = iUserService.queryById(orderGoodsVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("businessName", mockApplyVo.getBusinessName() + mockApplyVo.getProjectName());
@@ -1796,6 +1903,11 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
             }
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    iGoodsService.informOldSys(orderGoodsVo.getUserId(),orderGoodsVo.getGoodsId(),null,
+                            null,5,content, Arrays.asList("一二建考前模考", content ,"","一二建考前模考报名提醒"));
+                }
             });
         });
         mockApplyVos.forEach(mockApplyVo -> {
@@ -1843,6 +1955,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 bo1.setSubscribeId(subscribeVo.getSubscribeId());
                 bo1.setHasMockRemind(1);
                 iUserMockSubscribeService.updateByEditBo(bo1);
+                String content = "";
                 if (subscribeVo.getMockRemind() == 1) {
                     if (informRemindVo.getWayStatus().equals(1)) {
                         InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -1855,6 +1968,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         informUserAddBo.setSystemStatus(1);
                         informUserAddBo.setRemind("模考提醒");
                         informUserAddBo.setText("祥粤云学堂提醒:您学习【" + courseSubject.getSubjectName() + "】科目中的【" + mockApply.getApplyName() + "模考】已将于60分钟后开始考试,请及时在【祥粤云小程序】或【web.xyyxt.net】进行考试。");
+                        content = "祥粤云学堂提醒:您学习【" + courseSubject.getSubjectName() + "】科目中的【" + mockApply.getApplyName() + "模考】已将于60分钟后开始考试。";
                         iInformUserService.insertByAddBo(informUserAddBo);
                     }
                 }
@@ -1869,6 +1983,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     informUserAddBo.setSystemStatus(3);
                     informUserAddBo.setRemind("模考提醒");
                     informUserAddBo.setText("祥粤云学堂提醒:您学习【" + courseSubject.getSubjectName() + "】科目中的【" + mockApply.getApplyName() + "模考】已将于60分钟后开始考试,请及时在【祥粤云小程序】或【web.xyyxt.net】进行考试。");
+                    content = "祥粤云学堂提醒:您学习【" + courseSubject.getSubjectName() + "】科目中的【" + mockApply.getApplyName() + "模考】已将于60分钟后开始考试。";
                     UserVo userVo = iUserService.queryById(subscribeVo.getUserId());
                     Map<String, Object> param = new HashMap<>();
                     param.put("subjectName", courseSubject.getSubjectName());
@@ -1877,6 +1992,12 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         iInformUserService.insertByAddBo(informUserAddBo);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    iGoodsService.informOldSys(subscribeVo.getUserId(),null,null,
+                            null,6,content, Arrays.asList(mockApply.getApplyName(), DateUtils.timestampToDate(mockApply.getApplyStartTime()) ,""));
+                }
             }
         }
     }
@@ -1887,6 +2008,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
         userMockSubscribeVoList.removeIf(userMockSubscribeVo -> System.currentTimeMillis()/1000 + 3600 <= userMockSubscribeVo.getLiveStartTime());
         for (UserMockSubscribeVo userMockSubscribeVo : userMockSubscribeVoList) {
             InformRemindVo informRemindVo = informRemindService.queryByName("一二建考前直播前一小时提醒");
+            String content = "";
             if (userMockSubscribeVo.getLiveSubscribe() == 1) {
                 if (informRemindVo.getWayStatus().equals(1)) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -1899,6 +2021,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     informUserAddBo.setSystemStatus(1);
                     informUserAddBo.setRemind("直播开课提醒");
                     informUserAddBo.setText("祥粤云学堂提醒:您学习【" + userMockSubscribeVo.getSubjectName() + "】科目中的【" + userMockSubscribeVo.getName() + "直播】已将于60分钟后开始直播,请及时在【祥粤云小程序】或【web.xyyxt.net】进行观看。");
+                    content = "祥粤云学堂提醒:您学习【" + userMockSubscribeVo.getSubjectName() + "】科目中的【" + userMockSubscribeVo.getName() + "直播】已将于60分钟后开始直播。";
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
             }
@@ -1913,6 +2036,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                 informUserAddBo.setSystemStatus(3);
                 informUserAddBo.setRemind("直播开课提醒");
                 informUserAddBo.setText("祥粤云学堂提醒:您学习【" + userMockSubscribeVo.getSubjectName() + "】科目中的【" + userMockSubscribeVo.getName() + "直播】已将于60分钟后开始直播,请及时在【祥粤云小程序】或【web.xyyxt.net】进行观看。");
+                content = "祥粤云学堂提醒:您学习【" + userMockSubscribeVo.getSubjectName() + "】科目中的【" + userMockSubscribeVo.getName() + "直播】已将于60分钟后开始直播。";
                 UserVo userVo = iUserService.queryById(userMockSubscribeVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("subjectName", userMockSubscribeVo.getSubjectName());
@@ -1922,6 +2046,12 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     iInformUserService.insertByAddBo(informUserAddBo);
                 }
             }
+
+            //E管证督学通知
+            if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                iGoodsService.informOldSys(userMockSubscribeVo.getUserId(),null,null,
+                        null,5,content, Arrays.asList(userMockSubscribeVo.getName() + "直播", DateUtils.timestampToDate(userMockSubscribeVo.getLiveStartTime()) ,"","一二建考前直播前一小时提醒"));
+            }
             UserMockSubscribeEditBo bo1 = new UserMockSubscribeEditBo();
             bo1.setSubscribeId(userMockSubscribeVo.getSubscribeId());
             bo1.setHasLiveSubscribe(1);
@@ -2010,6 +2140,14 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         iWxLoginService.sendSmallTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    User user = iUserService.getById(goodsVo.getUserId());
+                    String content = "您开通《"+goods.getGoodsName()+"》课程已有2天,但未开始学习,请尽快去学习吧。";
+                    iGoodsService.informOldSys(goodsVo.getUserId(),goodsVo.getGoodsId(),goodsVo.getOrderGoodsId(),
+                            goodsVo.getGradeId(),3,content, Arrays.asList(user.getRealname(), goodsVo.getGoodsName() ,"未开始学习",content));
+                }
             }
         }
     }
@@ -2094,6 +2232,14 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         iWxLoginService.sendSmallTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    User user = iUserService.getById(goodsVo.getUserId());
+                    String content = "您开通《"+goods.getGoodsName()+"》课程已有5天,但未开始学习,请尽快去学习吧。";
+                    iGoodsService.informOldSys(goodsVo.getUserId(),goodsVo.getGoodsId(),goodsVo.getOrderGoodsId(),
+                            goodsVo.getGradeId(),3,content, Arrays.asList(user.getRealname(), goodsVo.getGoodsName() ,"未开始学习",content));
+                }
             }
         }
     }
@@ -2178,6 +2324,14 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         iWxLoginService.sendSmallTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    User user = iUserService.getById(goodsVo.getUserId());
+                    String content = "您开通《"+goods.getGoodsName()+"》课程已有15天,但未开始学习,请尽快去学习吧。";
+                    iGoodsService.informOldSys(goodsVo.getUserId(),goodsVo.getGoodsId(),goodsVo.getOrderGoodsId(),
+                            goodsVo.getGradeId(),3,content, Arrays.asList(user.getRealname(), goodsVo.getGoodsName() ,"未开始学习",content));
+                }
             }
         }
     }
@@ -2262,6 +2416,14 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         iWxLoginService.sendSmallTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    User user = iUserService.getById(goodsVo.getUserId());
+                    String content = "您开通《"+goods.getGoodsName()+"》课程已有30天,但未开始学习,请尽快去学习吧。";
+                    iGoodsService.informOldSys(goodsVo.getUserId(),goodsVo.getGoodsId(),goodsVo.getOrderGoodsId(),
+                            goodsVo.getGradeId(),3,content, Arrays.asList(user.getRealname(), goodsVo.getGoodsName() ,"未开始学习",content));
+                }
             }
         }
     }
@@ -2346,6 +2508,14 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         iWxLoginService.sendSmallTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    User user = iUserService.getById(goodsVo.getUserId());
+                    String content = "您开通《"+goods.getGoodsName()+"》课程已有55天,但未开始学习,请尽快去学习吧。";
+                    iGoodsService.informOldSys(goodsVo.getUserId(),goodsVo.getGoodsId(),goodsVo.getOrderGoodsId(),
+                            goodsVo.getGradeId(),3,content, Arrays.asList(user.getRealname(), goodsVo.getGoodsName() ,"未开始学习",content));
+                }
             }
         }
     }
@@ -2706,6 +2876,14 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         iWxLoginService.sendSmallTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    User user = iUserService.getById(goodsVo.getUserId());
+                    String content = "您已超过3天没有学习《"+goods.getGoodsName()+"》课程,为了您的学习效果,请尽快去学习吧。";
+                    iGoodsService.informOldSys(goodsVo.getUserId(),goodsVo.getGoodsId(),goodsVo.getOrderGoodsId(),
+                            goodsVo.getGradeId(),3,content, Arrays.asList(user.getRealname(), goodsVo.getGoodsName() ,"3天没有学习",content));
+                }
             }
         }
     }
@@ -2788,6 +2966,14 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                         iWxLoginService.sendSmallTpMsg(userVo.getOpenId(),paramMap);
                     }
                 }
+
+                //E管证督学通知
+                if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                    User user = iUserService.getById(goodsVo.getUserId());
+                    String content = "您已超过5天没有学习《"+goods.getGoodsName()+"》课程,为了您的学习效果,请尽快去学习吧。";
+                    iGoodsService.informOldSys(goodsVo.getUserId(),goodsVo.getGoodsId(),goodsVo.getOrderGoodsId(),
+                            goodsVo.getGradeId(),3,content, Arrays.asList(user.getRealname(), goodsVo.getGoodsName() ,"5天没有学习",content));
+                }
             }
         }
     }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/User.java

@@ -182,6 +182,8 @@ private static final long serialVersionUID=1L;
     /** 密码 */
     private String password;
 
+    private Long tenantId;
+
     /** 商品视频数 */
     @TableField(exist = false)
     private Long goodsCourseNum;

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

@@ -21,4 +21,6 @@ public interface UserBankRecordMapper extends BaseMapper<UserBankRecord> {
     List<UserBankRecordVo> getUserBankList(UserBankRecordQueryBo bo);
 
     UserBankRecord getUserLastExam(UserBankRecordQueryBo bo);
+
+    List<Integer> checkBankRecord(UserBankRecordQueryBo bo);
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserMapper.java

@@ -49,4 +49,7 @@ public interface UserMapper extends BaseMapper<User> {
 
     @InterceptorIgnore(tenantLine = "true")
     User queryUserByTelphoneTenant(@Param("telphone") String telphone,@Param("tenantId")Long tenantId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<User> getUserByTelNotTenant(@Param("telphone")String telphone);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserBankRecordService.java

@@ -62,4 +62,6 @@ public interface IUserBankRecordService extends IService<UserBankRecord> {
 	 * @return java.util.List<com.zhongzheng.modules.user.vo.UserBankRecordVo>
 	 */
     List<UserBankRecordVo> getUserBankList(UserBankRecordQueryBo bo);
+
+    Boolean checkBankRecord(UserBankRecordQueryBo bo);
 }

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

@@ -118,4 +118,7 @@ public interface IUserService extends IService<User> {
 	User queryUserByTelphoneTenant(String telphone,Long tenantId);
 
 	Map<String, Object> telphone_login(UserAppTelphoneLoginBo bo);
+
+    List<User> getUserByTelNotTenant(String telphone);
+
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserBankRecordServiceImpl.java

@@ -305,6 +305,13 @@ public class UserBankRecordServiceImpl extends ServiceImpl<UserBankRecordMapper,
         return userBankList;
     }
 
+    @Override
+    public Boolean checkBankRecord(UserBankRecordQueryBo bo) {
+        List<Integer> counts = baseMapper.checkBankRecord(bo);
+        long count = counts.stream().filter(x -> ObjectUtils.isNotNull(x) && x > 0).count();
+        return ObjectUtils.isNotNull(count) && count > 0;
+    }
+
 
     //获得今天时间的0点
     public static int getTimesmorning(){

+ 44 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java

@@ -345,6 +345,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
         //查找商品是否在此短信业务层次
         Long count = baseMapper.sendExamSucceed(bo.getGoodsId());
         if (count > 0) {
+            String content = "";
             if (informRemindVo.getWayStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(bo.getUserId());
@@ -358,6 +359,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                 informUserAddBo.setGoodsId(bo.getGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(bo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:已成功预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试");
+                content = "尊敬的用户:已成功预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试";
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             if (informRemindVo.getNoteStatus().equals(1)) {
@@ -373,6 +375,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                 informUserAddBo.setGoodsId(bo.getGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(bo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:已成功预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试");
+                content = "尊敬的用户:已成功预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试";
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(bo.getUserId());
                 Map<String, Object> param = new HashMap<>();
@@ -392,6 +395,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                 informUserAddBo.setGoodsId(bo.getGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(bo.getGoodsId());
                 informUserAddBo.setText("尊敬的用户:已成功预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试");
+                content = "尊敬的用户:已成功预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试";
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(bo.getUserId());
                 if(Validator.isNotEmpty(userVo.getOpenId())){
@@ -405,6 +409,13 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                     iWxLoginService.sendQdySubStatusTpMsg(userVo.getOpenId(),paramMap);
                 }
             }
+
+            //E管证督学通知
+            if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                ExamApplyVo examApplyVo = examApplyMapper.selectByApply(bo.getApplyId());
+                iGoodsService.informOldSys(bo.getUserId(),bo.getGoodsId(),null,
+                        null,17,content, Arrays.asList(DateUtils.getDate(), examApplyVo.getApplyName(),"已成功" ,content,"您已成功预约施工现场专业人员考试"));
+            }
         }
 
     }
@@ -603,6 +614,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                     businessId += baseMapper.queryBusinessId(subscribe, informRemindBusiness.getBusinessId());
                 }
                 if (businessId > 0) {
+                    String content = "";
                     if (informRemindVo.getWayStatus().equals(1)) {
                         InformUserAddBo informUserAddBo = new InformUserAddBo();
                         informUserAddBo.setUserId(userSubscribeVo.getUserId());
@@ -616,6 +628,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:已取消预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试。");
+                        content = "尊敬的用户:已取消预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试。";
                         iInformUserService.insertByAddBo(informUserAddBo);
                     }
                     if (informRemindVo.getNoteStatus().equals(1)) {
@@ -631,6 +644,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:已取消预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试。");
+                        content = "尊敬的用户:已取消预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试。";
                         iInformUserService.insertByAddBo(informUserAddBo);
                         UserVo userVo = iUserService.queryById(userSubscribeVo.getUserId());
                         Map<String, Object> param = new HashMap<>();
@@ -650,6 +664,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:已取消预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试。");
+                        content = "尊敬的用户:已取消预约施工现场专业人员" + goodsVo1.getGoodsName() + "考试。";
                         iInformUserService.insertByAddBo(informUserAddBo);
                         UserVo userVo = iUserService.queryById(userSubscribeVo.getUserId());
                         ExamApplyVo examApplyVo = examApplyMapper.selectByApply(userSubscribeVo.getApplyId());
@@ -664,6 +679,13 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                             iWxLoginService.sendQdySubStatusTpMsg(userVo.getOpenId(),paramMap);
                         }
                     }
+
+                    //E管证督学通知
+                    if (informRemindVo.getNoteStatus().equals(1) || informRemindVo.getWayStatus().equals(1) || informRemindVo.getGzhTpStatus().equals(1)){
+                        ExamApplyVo examApplyVo = examApplyMapper.selectByApply(userSubscribeVo.getApplyId());
+                        iGoodsService.informOldSys(userSubscribeVo.getUserId(),userSubscribeVo.getGoodsId(),null,
+                                null,17,content, Arrays.asList(DateUtils.timestampToDate(userSubscribeVo.getApplySiteExamTime()), examApplyVo.getApplyName(),"已取消" ,content,"您预约的施工现场专业人员考试已取消"));
+                    }
                 }
             }
         }
@@ -1600,6 +1622,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
             }
             if (businessId > 0 &&Validator.isNotEmpty(userSubscribeVo.getResult())) {
                 if (userSubscribeVo.getResult().equals(1)) {
+                    String content ="";
                     if (informRemindVoPass.getWayStatus().equals(1)) {
                         InformUserAddBo informUserAddBo = new InformUserAddBo();
                         informUserAddBo.setUserId(userSubscribeVo.getUserId());
@@ -1614,6 +1637,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:您已通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",证书编号:"+bo.getCertificateCode());
+                        content = "尊敬的用户:您已通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",证书编号:"+bo.getCertificateCode();
                         iInformUserService.insertByAddBo(informUserAddBo);
                     }
                     if (informRemindVoPass.getNoteStatus().equals(1)) {
@@ -1630,6 +1654,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:您已通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",证书编号:"+bo.getCertificateCode());
+                        content = "尊敬的用户:您已通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",证书编号:"+bo.getCertificateCode();
                         iInformUserService.insertByAddBo(informUserAddBo);
                         UserVo userVo = iUserService.queryById(userSubscribeVo.getUserId());
                         Map<String, Object> param = new HashMap<>();
@@ -1652,6 +1677,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:您已通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",证书编号:"+bo.getCertificateCode());
+                        content = "尊敬的用户:您已通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",证书编号:"+bo.getCertificateCode();
                         iInformUserService.insertByAddBo(informUserAddBo);
                         UserVo userVo = iUserService.queryById(userSubscribeVo.getUserId());
                         if(Validator.isNotEmpty(userVo.getOpenId())){
@@ -1664,8 +1690,16 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                             iWxLoginService.sendQdyExamStatusTpMsg(userVo.getOpenId(),paramMap);
                         }
                     }
+
+                    //E管证督学通知
+                    if (informRemindVoPass.getNoteStatus().equals(1) || informRemindVoPass.getWayStatus().equals(1) || informRemindVoPass.getGzhTpStatus().equals(1)){
+                        GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
+                        iGoodsService.informOldSys(userSubscribeVo.getUserId(),userSubscribeVo.getGoodsId(),null,
+                                null,4,content, Arrays.asList(goodsVo1.getGoodsName(), bo.getPerformance().toString()));
+                    }
                 }
                 if (userSubscribeVo.getResult().equals(0)) {
+                    String content = "";
                     if (informRemindVo.getWayStatus().equals(1)) {
                         InformUserAddBo informUserAddBo = new InformUserAddBo();
                         informUserAddBo.setUserId(userSubscribeVo.getUserId());
@@ -1680,6 +1714,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:您缺席或未通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",请马上重新预约考试.");
+                        content = "尊敬的用户:您缺席或未通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",请马上重新预约考试.";
                         iInformUserService.insertByAddBo(informUserAddBo);
                     }
                     if (informRemindVo.getNoteStatus().equals(1)) {
@@ -1696,6 +1731,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:您缺席或未通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",请马上重新预约考试.");
+                        content = "尊敬的用户:您缺席或未通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",请马上重新预约考试.";
                         iInformUserService.insertByAddBo(informUserAddBo);
                         UserVo userVo = iUserService.queryById(userSubscribeVo.getUserId());
                         Map<String, Object> param = new HashMap<>();
@@ -1717,6 +1753,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                         informUserAddBo.setGoodsId(userSubscribeVo.getGoodsId());
                         GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
                         informUserAddBo.setText("尊敬的用户:您缺席或未通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",请马上重新预约考试.");
+                        content = "尊敬的用户:您缺席或未通过施工现场专业人员"+goodsVo1.getGoodsName()+"岗位考核,分数:" + bo.getPerformance() + ",请马上重新预约考试.";
                         iInformUserService.insertByAddBo(informUserAddBo);
                         UserVo userVo = iUserService.queryById(userSubscribeVo.getUserId());
                         if(Validator.isNotEmpty(userVo.getOpenId())){
@@ -1729,6 +1766,13 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                             iWxLoginService.sendQdyExamStatusTpMsg(userVo.getOpenId(),paramMap);
                         }
                     }
+
+                    //E管证督学通知
+                    if (informRemindVoPass.getNoteStatus().equals(1) || informRemindVoPass.getWayStatus().equals(1) || informRemindVoPass.getGzhTpStatus().equals(1)){
+                        GoodsVo goodsVo1 = iGoodsService.queryById(userSubscribeVo.getGoodsId());
+                        iGoodsService.informOldSys(userSubscribeVo.getUserId(),userSubscribeVo.getGoodsId(),null,
+                                null,4,content, Arrays.asList(goodsVo1.getGoodsName(), bo.getPerformance().toString()));
+                    }
                 }
             }
         }

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/bo/WxShareGoodsBo.java

@@ -6,6 +6,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
+import java.util.List;
+
 @ApiModel("微信商品分享")
 @Data
 @NoArgsConstructor
@@ -21,4 +23,10 @@ public class WxShareGoodsBo {
 
     @ApiModelProperty("活动分享码")
     private String shareActivityCode;
+
+    @ApiModelProperty("商品IDs:逗号隔开")
+    private String goodsIds;
+
+    @ApiModelProperty("活动结束时间")
+    private Long endTime;
 }

+ 4 - 0
zhongzheng-system/src/main/resources/mapper/modules/base/CertificateCommonMapper.xml

@@ -44,4 +44,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <select id="getCertificateByTenant" parameterType="map" resultType="com.zhongzheng.modules.base.domain.CertificateCommon">
+        SELECT * from certificate_common where code = #{code} and tenant_id = #{newTenantId}
+    </select>
+
 </mapper>

+ 3 - 0
zhongzheng-system/src/main/resources/mapper/modules/base/CertificateMapper.xml

@@ -13,5 +13,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="code" column="code"/>
     </resultMap>
 
+    <select id="getCertificateByTenant" parameterType="map" resultType="com.zhongzheng.modules.base.domain.Certificate">
+        select * from certificate where code = #{code} and tenant_id = #{newTenantId}
+    </select>
 
 </mapper>

+ 3 - 0
zhongzheng-system/src/main/resources/mapper/modules/base/CertificateTpMapper.xml

@@ -58,6 +58,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND ct.certificate_id =#{certificateId}
         </if>
     </select>
+    <select id="getCertificateTpByTenant" parameterType="map" resultType="com.zhongzheng.modules.base.domain.CertificateTp">
+        select * from certificate_tp where code = #{code} and tenant_id = #{newTenantId}
+    </select>
 
 
 </mapper>

+ 2 - 2
zhongzheng-system/src/main/resources/mapper/modules/base/ProfileTpMapper.xml

@@ -81,9 +81,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             profile_tp p
         WHERE
             1 =1
-        <if test="status != null and status.size()!=0 ">
+        <if test="statusList != null and statusList.size()!=0 ">
             AND p.status in
-            <foreach collection="status" item="item" index="index" open="(" close=")" separator=",">
+            <foreach collection="statusList" item="item" index="index" open="(" close=")" separator=",">
                 #{item}
             </foreach>
         </if>

+ 4 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseHandoutsMapper.xml

@@ -95,4 +95,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ORDER BY s.update_time desc
     </select>
 
+    <select id="getHandoutsByTenant" parameterType="map"  resultType="com.zhongzheng.modules.course.domain.CourseHandouts">
+        SELECT * from course_handouts where encoder = #{encoder} and tenant_id = #{newTenantId}
+    </select>
+
 </mapper>

+ 4 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseMapper.xml

@@ -747,4 +747,8 @@
         </if>
         and cg.`status` =1  and cgu.change_grade = 0 and cgu.`status` = 1
     </select>
+
+    <select id="getCourseByTenant" parameterType="map" resultType="com.zhongzheng.modules.course.domain.Course">
+        select * from course where code = #{code} and tenant_id = #{newTenantId}
+    </select>
 </mapper>

+ 4 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseModuleMapper.xml

@@ -147,6 +147,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ORDER BY c.module_id DESC
     </select>
 
+    <select id="getModuleByTenant" parameterType="map" resultType="com.zhongzheng.modules.course.domain.CourseModule">
+        select * from course_module where code = #{code} and tenant_id = #{newTenantId}
+    </select>
+
 
     <select id="selectList_COUNT" resultType="Long">
         SELECT

+ 4 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseSubjectMapper.xml

@@ -129,4 +129,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             and cs.id != #{id}
         </if>
     </select>
+
+    <select id="getSubjectByTenant" parameterType="map"  resultType="com.zhongzheng.modules.course.domain.CourseSubject">
+        select * from course_subject where encoder = #{encoder} and tenant_id = #{newTenantId}
+    </select>
 </mapper>

+ 20 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsSpecAttributeMapper.xml

@@ -13,4 +13,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </insert>
 
+    <select id="getIdsByTenant" parameterType="java.lang.Long" resultType="java.lang.Long">
+        select spec_attribute_id from goods_spec_attribute where 1 = 1
+        <if test="specIds != null and specIds.size()!=0 ">
+            AND spec_id in
+            <foreach collection="specIds" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
+    <delete id="deleteByIdsTenant" parameterType="java.lang.Long" >
+        DELETE FROM goods_spec_attribute WHERE 1 = 1
+        <if test="specAttrIds != null and specAttrIds.size()!=0 ">
+            AND spec_attribute_id in
+            <foreach collection="specAttrIds" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </delete>
+
 </mapper>

+ 11 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsSpecAttributeRelationMapper.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.goods.mapper.GoodsSpecAttributeRelationMapper">
+
+   <delete id="deleteByTemplateIdTenant" parameterType="map">
+       DELETE FROM goods_spec_attribute_relation WHERE spec_template_id = #{specTemplateId} and tenant_id = #{newTenantId}
+   </delete>
+
+</mapper>

+ 15 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsSpecMapper.xml

@@ -13,4 +13,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </insert>
 
+    <select id="getIdsByTenant" parameterType="map" resultType="java.lang.Long">
+        select spec_id from goods_spec where spec_template_id = #{specTemplateId} and tenant_id = #{newTenantId}
+    </select>
+
+    <delete id="deleteByIdsByTenant" parameterType="java.lang.Long">
+        DELETE FROM goods_spec WHERE 1 = 1
+        <if test="specIds != null and specIds.size()!=0 ">
+            AND spec_id in
+            <foreach collection="specIds" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </delete>
+
+
 </mapper>

+ 11 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsSpecTemplateMapper.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.goods.mapper.GoodsSpecTemplateMapper">
+
+   <select id="getSpecTpByTenant" parameterType="map" resultType="com.zhongzheng.modules.goods.domain.GoodsSpecTemplate">
+       select * from goods_spec_template where `name` = #{name} and create_time = #{createTime} and tenant_id = #{newTenantId}
+   </select>
+
+</mapper>

+ 3 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml

@@ -1109,6 +1109,7 @@
     <select id="sendClassGradeUser"  resultMap="ClassGradeUserGoodsVoResult">
         SELECT
         cgu.user_id,
+        cgu.order_goods_id,
         cg.class_start_time,
         cg.class_end_time,
         cgg.goods_id,
@@ -1134,6 +1135,7 @@
 
         SELECT
         cgu.user_id,
+        cgu.order_goods_id,
         cg.class_start_time,
         cg.class_end_time,
         cgg.goods_id,
@@ -1155,6 +1157,7 @@
 
         SELECT
         cgu.user_id,
+        cgu.order_goods_id,
         cg.class_start_time,
         cg.class_end_time,
         cgg.goods_id,

+ 6 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderBusinessConfigMapper.xml

@@ -40,6 +40,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="businessId != null and businessId != ''">
             and obc.business_id = #{businessId}
         </if>
+        <if test="projectId != null and projectId != ''">
+            and cpt.id = #{projectId}
+        </if>
+        <if test="educationId != null and educationId != ''">
+            and cet.id = #{educationId}
+        </if>
     </select>
 
     <select id="getDetail" parameterType="com.zhongzheng.modules.order.bo.OrderBusinessConfigQueryBo" resultMap="OrderBusinessConfigVoResult">

+ 3 - 0
zhongzheng-system/src/main/resources/mapper/modules/pay/PayServeMapper.xml

@@ -13,5 +13,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="remark" column="remark"/>
     </resultMap>
 
+    <select id="getPayServeByTenant" parameterType="map" resultType="com.zhongzheng.modules.pay.domain.PayServe">
+        select * from pay_serve where serve_name = #{serveName} and tenant_id = #{newTenantId}
+    </select>
 
 </mapper>

+ 27 - 1
zhongzheng-system/src/main/resources/mapper/modules/user/UserBankRecordMapper.xml

@@ -193,5 +193,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             ubr.update_time DESC
         LIMIT 1
     </select>
-
+    <select id="checkBankRecord" parameterType="com.zhongzheng.modules.user.bo.UserBankRecordQueryBo" resultType="java.lang.Integer">
+        SELECT
+        ubr.report_status
+        FROM
+        user_bank_record ubr
+        WHERE
+        1 =1
+        <if test="chapterId != null and chapterId != ''">
+            AND ubr.chapter_id = #{chapterId}
+        </if>
+        <if test="moduleId != null and moduleId != ''">
+            AND ubr.module_id = #{moduleId}
+        </if>
+        <if test="courseId != null and courseId != ''">
+            AND ubr.course_id = #{courseId}
+        </if>
+        <if test="gradeId != null and gradeId != ''">
+            AND ubr.grade_id = #{gradeId}
+        </if>
+        <if test="goodsId != null and goodsId != ''">
+            AND ubr.goods_id = #{goodsId}
+        </if>
+        <if test="examId != null and examId != ''">
+            AND ubr.exam_id = #{examId}
+        </if>
+        AND ubr.user_id = #{userId}
+    </select>
 </mapper>

+ 9 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml

@@ -428,4 +428,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           AND status = 1 AND tenant_id = #{tenantId}
     </select>
 
+    <select id="getUserByTelNotTenant" parameterType="java.lang.String" resultType="com.zhongzheng.modules.user.domain.User">
+        SELECT
+            *
+        FROM
+            `user`
+        WHERE
+            telphone = #{telphone} AND status = 1
+    </select>
+
 </mapper>