Browse Source

Merge branch 'dev'

yangdamao 2 years ago
parent
commit
90771d37b8
43 changed files with 989 additions and 160 deletions
  1. 6 0
      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. 1 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  4. 1 0
      zhongzheng-admin/src/main/resources/application-pre.yml
  5. 1 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  6. 7 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java
  7. 11 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonGoodsController.java
  8. 14 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  9. 11 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserBankRecordController.java
  10. 1 0
      zhongzheng-api/src/main/resources/application-dev.yml
  11. 1 0
      zhongzheng-api/src/main/resources/application-pre.yml
  12. 1 0
      zhongzheng-api/src/main/resources/application-prod.yml
  13. 45 21
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  14. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ProfileTpQueryBo.java
  15. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ProfileTpServiceImpl.java
  16. 37 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  17. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseHandoutsMapper.java
  18. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseHandoutsService.java
  19. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseHandoutsServiceImpl.java
  20. 23 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/GoodsBatchListVo.java
  21. 37 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsEGZInformBo.java
  22. 26 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserGoodsListAllBo.java
  23. 8 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  24. 307 118
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  25. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserGoodsListAllVo.java
  26. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserGoodsVo.java
  27. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  28. 35 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  29. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsVo.java
  30. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/mapper/PayServeMapper.java
  31. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/service/IPayServeService.java
  32. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/pay/service/impl/PayServeServiceImpl.java
  33. 192 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
  34. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserBankRecordMapper.java
  35. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserBankRecordService.java
  36. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserBankRecordServiceImpl.java
  37. 44 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java
  38. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/bo/WxShareGoodsBo.java
  39. 30 2
      zhongzheng-system/src/main/resources/mapper/modules/base/ProfileTpMapper.xml
  40. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseHandoutsMapper.xml
  41. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  42. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/pay/PayServeMapper.xml
  43. 27 1
      zhongzheng-system/src/main/resources/mapper/modules/user/UserBankRecordMapper.xml

+ 6 - 0
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,6 +52,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);
     }

+ 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);
     }
 
 }

+ 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

+ 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",enCodeVersion);

+ 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;
 }

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

@@ -50,7 +50,7 @@ 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));
     }
 
@@ -156,7 +156,7 @@ public class ProfileTpServiceImpl extends ServiceImpl<ProfileTpMapper, ProfileTp
         //查询该商品的资料模板字段
         ProfileTpQueryBo profileTpQueryBo = new ProfileTpQueryBo();
         profileTpQueryBo.setGoodsId(goodsId);
-        profileTpQueryBo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
+        profileTpQueryBo.setStatusList(new ArrayList<Integer>(Arrays.asList(1)));
         List<ProfileTpVo> profileTpVos = baseMapper.selectListByBo(profileTpQueryBo);
         if (!CollectionUtils.isEmpty(profileTpVos)){
             return profileTpVos.get(0);

+ 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);
 }

+ 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);
 }

+ 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);
+    }
 }

+ 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 - 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);
 }

+ 307 - 118
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);
@@ -1056,11 +1064,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 +1189,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 +1208,200 @@ 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<Goods> oldGoodsList = goodsList.stream().map(x -> BeanUtil.toBean(x, Goods.class)).collect(Collectors.toList());
+        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 {
+                        newCourseHandouts.setHandoutsId(null);
+                        newCourseHandouts.setTenantId(newTenantId);
+                        iCourseHandoutsService.save(newCourseHandouts);
+                        goods.setHandoutsId(courseHandouts.getHandoutsId());
+                    }
+                }
+            }
+
+
+        }
+        return false;
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -2278,6 +2448,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return true;
     }
 
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean goodsBatchCopyDisposeTenant() {
@@ -2797,6 +2969,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;

+ 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));
+                }
             }
         }
     }

+ 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/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);
 }

+ 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);
 }

+ 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;
 }

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

@@ -46,6 +46,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="nickName" column="nick_name"/>
     </resultMap>
 
+    <select id="findUserList" resultMap="ProfileTpSysUser">
+        SELECT
+            u.nick_name,
+            u.user_id
+        FROM
+            sys_user u
+        WHERE
+            FIND_IN_SET( u.user_id, #{user_ids})
+    </select>
+
+    <select id="findBusinessList" resultMap="ProfileTpBusiness">
+        SELECT
+            b.education_type_id,
+            b.id,
+            b.business_id,
+            b.project_id,
+            cet.education_name,
+            cpt.project_name,
+            cb.business_name
+        FROM
+            profile_tp_business b
+                LEFT JOIN course_education_type cet ON b.education_type_id = cet.id
+                LEFT JOIN course_project_type cpt ON b.project_id = cpt.id
+                LEFT JOIN course_business cb ON b.business_id = cb.id
+        WHERE
+            b.profile_tp_id=#{profile_tp_id}
+    </select>
+
     <select id="selectListByBo" parameterType="com.zhongzheng.modules.base.bo.ProfileTpQueryBo" resultMap="ProfileTpVoResult">
         SELECT
             *
@@ -53,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>

+ 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,

+ 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>