yangdamao 2 년 전
부모
커밋
0c93bade48
15개의 변경된 파일627개의 추가작업 그리고 315개의 파일을 삭제
  1. 4 5
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  2. 7 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java
  3. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  4. 47 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  5. 69 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsListAllVo.java
  6. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java
  7. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  8. 80 31
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  9. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeVo.java
  10. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/mapper/SysGoodsCopyRecordMapper.java
  11. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/ISysGoodsCopyRecordService.java
  12. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/impl/SysGoodsCopyRecordServiceImpl.java
  13. 387 278
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  14. 7 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  15. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/system/SysGoodsCopyRecordMapper.xml

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

@@ -325,11 +325,10 @@ public class GoodsController extends BaseController {
      */
     @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;
+    public AjaxResult<List<GoodsListAllVo>> getUserGoodsListAll(@RequestBody UserGoodsListAllBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iGoodsService.getUserGoodsListAll(bo));
     }
 
 

+ 7 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java

@@ -7,7 +7,9 @@ import com.zhongzheng.modules.course.vo.CourseVo;
 import com.zhongzheng.modules.exam.bo.ExamNumberGoodsQueryBo;
 import com.zhongzheng.modules.exam.vo.ExamNumberGoodsVo;
 import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
+import com.zhongzheng.modules.goods.bo.UserGoodsListAllBo;
 import com.zhongzheng.modules.goods.domain.Goods;
+import com.zhongzheng.modules.goods.vo.GoodsListAllVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.goods.vo.UserGoodsListVo;
 import com.zhongzheng.modules.goods.vo.UserOrderGoodsVo;
@@ -40,7 +42,7 @@ public interface GoodsMapper extends BaseMapper<Goods> {
 
     Long getExamNum(Long goodsId);
 
-    GoodsVo getSectionNum(CourseQueryBo bo);
+    GoodsVo getSectionNumByBo(CourseQueryBo bo);
 
     Long getSectionNum(Long goodsId);
 
@@ -58,4 +60,8 @@ public interface GoodsMapper extends BaseMapper<Goods> {
 
     @InterceptorIgnore(tenantLine = "true")
     Goods queryGoodsByIdTenant(@Param("goodsId") Long goodsId,@Param("tenantId") Long tenantId);
+
+    List<GoodsListAllVo> getUserGoodsListAll(UserGoodsListAllBo bo);
+
+    Long getCourseExamNum(@Param("goodsId") Long goodsId);
 }

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

@@ -113,4 +113,6 @@ public interface IGoodsService extends IService<Goods> {
 	boolean goodsBatchCopyDisposeTenant();
 
     List<GoodsVo> getShareList(Long time);
+
+	List<GoodsListAllVo> getUserGoodsListAll(UserGoodsListAllBo bo);
 }

+ 47 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -57,8 +57,10 @@ import com.zhongzheng.modules.polyv.service.IPolyvVideoService;
 import com.zhongzheng.modules.system.bo.GoodsCopyEnum;
 import com.zhongzheng.modules.system.domain.SysConfig;
 import com.zhongzheng.modules.system.domain.SysGoodsCopyRecord;
+import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysGoodsCopyRecordService;
+import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.user.bo.SubjectStudyRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserPhoneBo;
 import com.zhongzheng.modules.user.domain.School;
@@ -244,6 +246,9 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
     @Autowired
     private IInformRemindService iInformRemindService;
 
+    @Autowired
+    private ISysTenantService iSysTenantService;
+
     @Autowired
     private ISysGoodsCopyRecordService iGoodsCopyRecordService;
 
@@ -339,6 +344,19 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
             } else {
                 goods.setExamRecord(0);
             }
+
+            //商品同步新机构时间
+            List<SysGoodsCopyRecord> copyRecords = iSysGoodsCopyRecordService.getGoodsCopy(goods.getGoodsId(),GoodsCopyEnum.GOODS.getType());
+            if (CollectionUtils.isNotEmpty(copyRecords)){
+                Map<Long, List<SysGoodsCopyRecord>> map = copyRecords.stream().collect(Collectors.groupingBy(SysGoodsCopyRecord::getTenantId));
+                List<String> msg = new ArrayList<>();
+                map.forEach((k,v) -> {
+                    SysGoodsCopyRecord record = v.stream().sorted(Comparator.comparing(SysGoodsCopyRecord::getCreateTime).reversed()).collect(Collectors.toList()).stream().findFirst().get();
+                    SysTenant tenant = iSysTenantService.getById(record.getTenantId());
+                    msg.add(String.format("%s【最新同步时间:%s】",tenant.getTenantName(),DateUtils.timestampToDateFormat(record.getCreateTime(),"yyyy-MM-dd HH:mm:ss")));
+                });
+                goods.setCopyTime(msg);
+            }
         });
         //继教二建统计学时
         if (Validator.isNotEmpty(bo.getChapterNum())) {
@@ -3854,6 +3872,35 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return goodsList.stream().map(item -> BeanUtil.toBean(item,GoodsVo.class)).collect(Collectors.toList());
     }
 
+    @Override
+    public List<GoodsListAllVo> getUserGoodsListAll(UserGoodsListAllBo bo) {
+        //获取用户购买的商品
+        List<GoodsListAllVo> voList = baseMapper.getUserGoodsListAll(bo);
+        if (CollectionUtils.isEmpty(voList)){
+            return new ArrayList<>();
+        }
+        for (GoodsListAllVo vo : voList) {
+            switch (vo.getGoodsType()){
+                case 1://视频
+                    //商品课程数目
+                    int courseCount = iGoodsCourseService.count(new LambdaQueryWrapper<GoodsCourse>()
+                            .eq(GoodsCourse::getGoodsId, vo.getGoodsId()));
+                    Long sectionNum = 0L;//总节数
+                    if (courseCount > 0){
+                        //获取课程节数量
+                        sectionNum = baseMapper.getSectionNum(vo.getGoodsId());
+                        vo.setGoodsCourseMsg(String.format("%s课程 %s节 %s学时",courseCount,sectionNum,vo.getClassHours()));
+                    }
+                    //学习进度
+                   Long examNum = baseMapper.getCourseExamNum(vo.getGoodsId());
+
+            }
+
+
+        }
+        return null;
+    }
+
     private Long getNewId(Long oldId, Integer type){
         if (ObjectUtils.isNull(oldId) || oldId <= 0L){
             return null;

+ 69 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsListAllVo.java

@@ -0,0 +1,69 @@
+package com.zhongzheng.modules.goods.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2022年12月20日 10:14
+ */
+@Data
+public class GoodsListAllVo implements Serializable {
+
+    @ApiModelProperty("商品ID")
+    private Long goodsId;
+
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+
+    @ApiModelProperty("商品类型:1视频2题库 3补考 4前培 5虚拟赠送题库 6直播")
+    private Integer goodsType;
+
+    @ApiModelProperty("商品学时")
+    private BigDecimal classHours;
+
+    @ApiModelProperty("商品有效期开始")
+    private Long validityStartTime;
+
+    @ApiModelProperty("商品有效期结束")
+    private Long validityEndTime;
+
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+
+    @ApiModelProperty("服务有效期开始")
+    private Long serviceStartTime;
+
+    @ApiModelProperty("服务有效期结束")
+    private Long serviceEndTime;
+
+    @ApiModelProperty("商品课程信息")
+    private String goodsCourseMsg;
+
+    @ApiModelProperty("已学节数")
+    private Long stuAllNum;
+
+    @ApiModelProperty("总节数")
+    private Long secAllNum;
+
+    @ApiModelProperty("学习状态:0.未学习,1.学习中,2已学完")
+    private Integer studyStatus;
+
+    @ApiModelProperty("最后学习信息")
+    private String lastStudyMsg;
+
+    @ApiModelProperty("班级状态:0未开班(预报名) 1开班")
+    private Integer classStatus;
+
+    @ApiModelProperty("班级有效期开始时间")
+    private Long classStartTime;
+
+    @ApiModelProperty("班级有效期结束时间")
+    private Long classEndTime;
+
+    @ApiModelProperty("学时审批状态 0 未通过 1通过 2待审核 -1 不可审核")
+    private Integer periodStatus;
+}

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java

@@ -344,4 +344,7 @@ public class GoodsVo {
 	@ApiModelProperty("是否二建商品:1是 0否")
 	private Integer specialGoods;
 
+	@ApiModelProperty("商品复制时间")
+	private List<String> copyTime;
+
 }

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

@@ -62,4 +62,7 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
     Integer queryOfficialGradeCount(ClassGradeQueryBo bo);
 
     List<ClassGradeVo> queryGradeList(ClassGradeQueryBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Long getClassUserNumByTenant(@Param("gradeId") Long gradeId);
 }

+ 80 - 31
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -154,7 +154,15 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     @DataScope(businessAlias = "cb")
     public List<ClassGradeVo> queryList(ClassGradeQueryBo bo) {
-        return entity2Vo(baseMapper.queryList(bo));
+        List<ClassGradeVo> classGradeVos = entity2Vo(baseMapper.queryList(bo));
+        if (CollectionUtils.isEmpty(classGradeVos)) {
+            return new ArrayList<>();
+        }
+        classGradeVos.forEach(item -> {
+            //获取班级总人数
+            item.setStudentNumAll(getClassUserNumAll(item.getGradeId()));
+        });
+        return classGradeVos;
     }
 
     @Override
@@ -378,9 +386,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     }
 
                     //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));
+                    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));
                     }
                 }
             }
@@ -585,9 +593,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         Header[] headers = loginResponse.getHeaders("Set-Cookie");
         try {
             loginHttpResponse = EntityUtils.toString(loginResponse.getEntity());
-        }catch (IOException e) {
+        } catch (IOException e) {
             e.printStackTrace();
-        }finally {
+        } finally {
             // 关闭CloseableHttpResponse
             if (loginResponse != null) {
                 try {
@@ -611,7 +619,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     try {
                         hearders.put("Referer", "https://zjzyk.etledu.com/Student/TrainInfo");
                         getInfoHttpResponse = HttpUtils.postFormBodyHeader(getInfoRequestUrl, paramMap, hearders, headers);
-                    }catch (IOException e) {
+                    } catch (IOException e) {
                         e.printStackTrace();
                     }
                     if (getInfoHttpResponse.contains("{\"success\":true")) {
@@ -637,7 +645,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                         try {
                             hearders.put("Referer", "https://zjzyk.etledu.com/Student/TrainInfo");
                             getProductHttpResponse = HttpUtils.postFormBodyHeader(getProductUrl, paramMap, hearders, headers);
-                        }catch (IOException e) {
+                        } catch (IOException e) {
                             e.printStackTrace();
                         }
                         if (getProductHttpResponse.contains("{\"success\":true")) {
@@ -660,8 +668,8 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                             paramMap.put("WorkTypeCode", certInfoListItem.getWorkTypeCode());
                             paramMap.put("WorkTypeName", certInfoListItem.getWorkTypeName());
                             paramMap.put("productId", productsItem.getId().toString());
-                            certInfoListItem.getTrainInfos().forEach(trainInfo->{
-                                if (String.valueOf(cal.get(Calendar.YEAR)).equals(trainInfo.getTrainYear())){
+                            certInfoListItem.getTrainInfos().forEach(trainInfo -> {
+                                if (String.valueOf(cal.get(Calendar.YEAR)).equals(trainInfo.getTrainYear())) {
                                     paramMap.put("trainPeriodDate", trainInfo.getTrainStartTime());
                                 }
                             });
@@ -672,7 +680,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                             try {
                                 hearders.put("Referer", "");
                                 sumitHttpResponse = HttpUtils.postFormBodyHeader(sumitRequestUrl, paramMap, hearders, headers);
-                            }catch (IOException e) {
+                            } catch (IOException e) {
                                 e.printStackTrace();
                             }
 
@@ -695,7 +703,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             if (falseCount > 0) {
                 throw new CustomException(falseCount + "个开通失败");
             }
-        }else {
+        } else {
             throw new CustomException("登录官网失败,请检查信息");
         }
 
@@ -719,9 +727,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         CloseableHttpResponse codeResponse = HttpUtils.sendPostHeader(sendCodeUrl, codeJsonObject.toString(), hearders);
         try {
             codeHttpResponse = EntityUtils.toString(codeResponse.getEntity());
-        }catch (IOException e) {
+        } catch (IOException e) {
             e.printStackTrace();
-        }finally {
+        } finally {
             // 关闭CloseableHttpResponse
             if (codeResponse != null) {
                 try {
@@ -757,38 +765,38 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
         businessQueryBo.setId(businessId);
         String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
-        if(("继续教育二级建造师".equals(fullName))||("继续教育二级造价师".equals(fullName))){
+        if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
             //继教二建或者继教二造班级
             ClassGradeVo gradeVo = queryById(gradeId);
-            if(Validator.isNotEmpty(gradeVo)&&Validator.isNotEmpty(gradeVo.getOfficialName())){
+            if (Validator.isNotEmpty(gradeVo) && Validator.isNotEmpty(gradeVo.getOfficialName())) {
                 ClassGradeQueryBo queryBo = new ClassGradeQueryBo();
                 queryBo.setOfficialName(gradeVo.getOfficialName());
                 Integer peopleNum = queryOfficialGradeCount(queryBo);
                 //查询旧系统
                 Map<String, String> params = new HashMap<>();
                 Long nowTime = DateUtils.getNowTime();
-                String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
+                String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
                 params.put("stamp", nowTime.toString());
                 params.put("sign", sign);
                 params.put("jsonstr", gradeVo.getOfficialName());
                 String respone = "";
-                log.info("查询业务系统班级人数"+params,"");
+                log.info("查询业务系统班级人数" + params, "");
                 Integer oldGradeNum = 0;
                 try {
                     respone = HttpUtils.postFormBody(GRADE_COUNT_PATH, params);
-                    log.info("查询业务系统班级人数结果"+respone,"");
+                    log.info("查询业务系统班级人数结果" + respone, "");
                     if (!respone.contains("\"Status\":true")) {
-                        throw new CustomException("同步请求错误"+respone);
+                        throw new CustomException("同步请求错误" + respone);
                     }
                     JSONObject jsonObject = (JSONObject) JSONObject.parse(respone);
-                    JSONArray dataArray =  jsonObject.getJSONArray("Data");
+                    JSONArray dataArray = jsonObject.getJSONArray("Data");
                     JSONObject fObject = dataArray.getJSONObject(0);
-                    oldGradeNum = (Integer)fObject.get("num");
+                    oldGradeNum = (Integer) fObject.get("num");
                 } catch (IOException e) {
-                    log.info("查询业务系统班级人数失败参数"+params,"");
-                    throw new CustomException("同步查询班级人数请求错误"+e.getMessage());
+                    log.info("查询业务系统班级人数失败参数" + params, "");
+                    throw new CustomException("同步查询班级人数请求错误" + e.getMessage());
                 }
-                if((peopleNum+oldGradeNum)>=3){ //全系统平台二建班级人数不能超300
+                if ((peopleNum + oldGradeNum) >= 3) { //全系统平台二建班级人数不能超300
                     return false;
                 }
             }
@@ -797,6 +805,47 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return true;
     }
 
+    private Integer getClassUserNumAll(Long gradeId) {
+        Integer numAll = 0;
+        ClassGradeVo gradeVo = queryById(gradeId);
+        if (Validator.isNotEmpty(gradeVo) && Validator.isNotEmpty(gradeVo.getOfficialName())) {
+            ClassGradeQueryBo queryBo = new ClassGradeQueryBo();
+            queryBo.setOfficialName(gradeVo.getOfficialName());
+            Integer peopleNum = queryOfficialGradeCount(queryBo);
+            //查询旧系统
+            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", gradeVo.getOfficialName());
+            String respone = "";
+            log.info("查询业务系统班级人数" + params, "");
+            Integer oldGradeNum = 0;
+            try {
+                respone = HttpUtils.postFormBody(GRADE_COUNT_PATH, params);
+                log.info("查询业务系统班级人数结果" + respone, "");
+                if (!respone.contains("\"Status\":true")) {
+                    throw new CustomException("同步请求错误" + respone);
+                }
+                JSONObject jsonObject = (JSONObject) JSONObject.parse(respone);
+                JSONArray dataArray = jsonObject.getJSONArray("Data");
+                JSONObject fObject = dataArray.getJSONObject(0);
+                oldGradeNum = (Integer) fObject.get("num");
+            } catch (IOException e) {
+                log.info("查询业务系统班级人数失败参数" + params, "");
+                throw new CustomException("同步查询班级人数请求错误" + e.getMessage());
+            }
+            numAll = peopleNum + oldGradeNum;
+        }else {
+            Long num = baseMapper.getClassUserNumByTenant(gradeId);
+            if (ObjectUtils.isNotNull(num)){
+                numAll = num.intValue();
+            }
+        }
+        return numAll;
+    }
+
     @Override
     public List<ClassGradeVo> queryGradeList(ClassGradeQueryBo bo) {
         return baseMapper.queryGradeList(bo);
@@ -807,10 +856,10 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
         businessQueryBo.setId(businessId);
         String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
-        if(("继续教育二级建造师".equals(fullName))||("继续教育二级造价师".equals(fullName))){
+        if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
             //继教二建或者继教二造班级
             ClassGradeVo gradeVo = queryById(gradeId);
-            if(Validator.isNotEmpty(gradeVo)&&Validator.isNotEmpty(gradeVo.getOfficialName())){
+            if (Validator.isNotEmpty(gradeVo) && Validator.isNotEmpty(gradeVo.getOfficialName())) {
                 ClassGradeQueryBo queryBo = new ClassGradeQueryBo();
                 queryBo.setOfficialName(gradeVo.getOfficialName());
                 Integer num = queryOfficialGradeCount(queryBo);
@@ -822,19 +871,19 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 //通知旧系统
                 Map<String, String> params = new HashMap<>();
                 Long nowTime = DateUtils.getNowTime();
-                String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
+                String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
                 params.put("stamp", nowTime.toString());
                 params.put("sign", sign);
                 params.put("jsonstr", JSONArray.toJSONString(boList));
                 String respone = "";
                 try {
                     respone = HttpUtils.postFormBody(GRADE_CHANGE_PATH, params);
-                    log.info("同步系统班级人数结果"+respone,"");
+                    log.info("同步系统班级人数结果" + respone, "");
                     if (!respone.contains("\"Status\":true")) {
-                        throw new CustomException("旧系统接口请求错误"+respone);
+                        throw new CustomException("旧系统接口请求错误" + respone);
                     }
                 } catch (IOException e) {
-                    throw new CustomException("旧系统接口请求错误"+e.getMessage());
+                    throw new CustomException("旧系统接口请求错误" + e.getMessage());
                 }
             }
 

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

@@ -134,6 +134,9 @@ public class ClassGradeVo {
 	@ApiModelProperty("学员人数")
 	private Integer studentNum;
 
+	@ApiModelProperty("学员总人数")
+	private Integer studentNumAll;
+
 	/** 学时变为待审核时间 */
 	@Excel(name = "学时变为待审核时间")
 	@ApiModelProperty("学时变为待审核时间")

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

@@ -6,6 +6,8 @@ import com.zhongzheng.modules.system.bo.SysGoodsCopyDelBo;
 import com.zhongzheng.modules.system.domain.SysGoodsCopyRecord;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * 参数配置 数据层
  *
@@ -18,4 +20,7 @@ public interface SysGoodsCopyRecordMapper extends BaseMapper<SysGoodsCopyRecord>
 
     @InterceptorIgnore(tenantLine = "true")
     void deleteByTenantId(SysGoodsCopyDelBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<SysGoodsCopyRecord> getGoodsCopy(@Param("goodsId") Long goodsId, @Param("type") Integer type);
 }

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

@@ -18,4 +18,5 @@ public interface ISysGoodsCopyRecordService extends IService<SysGoodsCopyRecord>
 
     void deleteByTenantId(List<Long> specAttrIds, Integer type, Long newTenantId);
 
+    List<SysGoodsCopyRecord> getGoodsCopy(Long goodsId, Integer type);
 }

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

@@ -30,4 +30,9 @@ public class SysGoodsCopyRecordServiceImpl extends ServiceImpl<SysGoodsCopyRecor
         bo.setTenantId(newTenantId);
         baseMapper.deleteByTenantId(bo);
     }
+
+    @Override
+    public List<SysGoodsCopyRecord> getGoodsCopy(Long goodsId, Integer type) {
+        return baseMapper.getGoodsCopy(goodsId, type);
+    }
 }

+ 387 - 278
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zhongzheng.modules.goods.mapper.GoodsMapper">
 
     <resultMap type="com.zhongzheng.modules.goods.domain.Goods" id="GoodsResult">
@@ -151,33 +151,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <select id="getSectionNum" parameterType="Long" resultType="Long">
-        SELECT
-                COUNT( m.id ) + (
-                SELECT
-                    COUNT( n.id )
-                FROM
-                    course_chapter_section n
-                        LEFT JOIN course_module_chapter p ON n.chapter_id = p.chapter_id
-                        LEFT JOIN course_menu m ON m.menu_id = p.module_id
-                        LEFT JOIN goods_course gc ON gc.course_id = m.course_id
-                WHERE
-                    gc.goods_id = #{goodsId}
-                  AND m.type =1) + (
-                    SELECT
-                        COUNT( n.id )
-                    FROM
-                        course_chapter_section n
+        SELECT COUNT(m.id) + (
+            SELECT COUNT(n.id)
+            FROM course_chapter_section n
+                     LEFT JOIN course_module_chapter p ON n.chapter_id = p.chapter_id
+                     LEFT JOIN course_menu m ON m.menu_id = p.module_id
+                     LEFT JOIN goods_course gc ON gc.course_id = m.course_id
+            WHERE gc.goods_id = #{goodsId}
+              AND m.type = 1) + (
+                   SELECT COUNT(n.id)
+                   FROM course_chapter_section n
                             LEFT JOIN course_menu m ON m.menu_id = n.chapter_id
                             LEFT JOIN goods_course gc ON gc.course_id = m.course_id
-                    WHERE
-                        gc.goods_id = #{goodsId}
-                      AND m.type =2)
-        FROM
-            course_menu m
-                LEFT JOIN goods_course gc ON gc.course_id = m.course_id
-        WHERE
-            gc.goods_id =  #{goodsId}
-          AND m.type =3
+                   WHERE gc.goods_id = #{goodsId}
+                     AND m.type = 2)
+        FROM course_menu m
+                 LEFT JOIN goods_course gc ON gc.course_id = m.course_id
+        WHERE gc.goods_id = #{goodsId}
+          AND m.type = 3
     </select>
 
     <select id="selectAllList" parameterType="com.zhongzheng.modules.goods.bo.GoodsQueryBo" resultMap="GoodsResultVo">
@@ -190,26 +181,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         cb.goods_learning_order,
         s.school_name,
         m.category_name,
-        (SELECT GROUP_CONCAT(subject_name)  from course_subject where FIND_IN_SET(id,g.subject_ids)) subject_names,
-        (SELECT COUNT( DISTINCT gar.spec_template_id ) FROM goods_spec_attribute_relation gar WHERE gar.goods_id = g.goods_id AND gar.`status` = 1 ) spec_template_number,
+        (SELECT GROUP_CONCAT(subject_name) from course_subject where FIND_IN_SET(id,g.subject_ids)) subject_names,
+        (SELECT COUNT( DISTINCT gar.spec_template_id ) FROM goods_spec_attribute_relation gar WHERE gar.goods_id =
+        g.goods_id AND gar.`status` = 1 ) spec_template_number,
         ot.type AS template_type,
         (SELECT gs.goods_name FROM goods gs where 1=1 and g.make_goods_id = gs.goods_id) as make_goods_name,
         (SELECT gs.code FROM goods gs where 1=1 and g.make_goods_id = gs.goods_id) as make_goods_code
         <if test="chapterNum ==1">
-        ,(SELECT COUNT(m.id)+(SELECT COUNT(p.id) FROM course_module_chapter p LEFT JOIN course_menu m on m.menu_id = p.module_id LEFT JOIN goods_course gc on gc.course_id = m.course_id  where gc.goods_id =  g.goods_id and m.type in(1))+(SELECT COUNT(cmc.id) FROM course_module_chapter cmc  LEFT JOIN course_menu m on m.menu_id = cmc.module_id LEFT JOIN goods_course gc on gc.course_id = m.course_id where gc.goods_id =  g.goods_id and m.type in(2)) FROM course_menu m LEFT JOIN goods_course gc on gc.course_id = m.course_id  where gc.goods_id =  g.goods_id  and m.type in(3)) as chapter_num
-        </if>
-        ,(case WHEN g.goods_type =1 then (SELECT count(*) FROM goods_course gc LEFT JOIN course c on gc.course_id = c.course_id where gc.goods_id =g.goods_id  and c.course_show=1) ELSE 0 end) as course_num
+            ,(SELECT COUNT(m.id)+(SELECT COUNT(p.id) FROM course_module_chapter p LEFT JOIN course_menu m on m.menu_id =
+            p.module_id LEFT JOIN goods_course gc on gc.course_id = m.course_id where gc.goods_id = g.goods_id and
+            m.type in(1))+(SELECT COUNT(cmc.id) FROM course_module_chapter cmc LEFT JOIN course_menu m on m.menu_id =
+            cmc.module_id LEFT JOIN goods_course gc on gc.course_id = m.course_id where gc.goods_id = g.goods_id and
+            m.type in(2)) FROM course_menu m LEFT JOIN goods_course gc on gc.course_id = m.course_id where gc.goods_id =
+            g.goods_id and m.type in(3)) as chapter_num
+        </if>
+        ,(case WHEN g.goods_type =1 then (SELECT count(*) FROM goods_course gc LEFT JOIN course c on gc.course_id =
+        c.course_id where gc.goods_id =g.goods_id and c.course_show=1) ELSE 0 end) as course_num
         <if test="goodsType ==1">
-        , (SELECT count(*) FROM class_grade cg  LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id where  cgg.goods_id = g.goods_id and cg.`status` = 1 ) as grade_num
+            , (SELECT count(*) FROM class_grade cg LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id where
+            cgg.goods_id = g.goods_id and cg.`status` = 1 ) as grade_num
         </if>
         <if test="goodsType ==2">
-        , (SELECT count(*) from order_goods og where og.goods_id = g.goods_id and  og.pay_status IN ( 2, 3, 4 )
+            , (SELECT count(*) from order_goods og where og.goods_id = g.goods_id and og.pay_status IN ( 2, 3, 4 )
             AND og.refund_status IN (0,3,1) ) as order_num
         </if>
-        <if test="getOrderNum != null and getOrderNum == 1" >
+        <if test="getOrderNum != null and getOrderNum == 1">
             ,ou.goods_live_num
         </if>
-        <if test="getUserNum != null and getUserNum == 1" >
+        <if test="getUserNum != null and getUserNum == 1">
             ,(SELECT count(*) from order_goods og where og.goods_id = g.goods_id and og.`status` = 1
             AND og.refund_status in (0,1,3)
             AND og.pay_status in (2,3,4)) as buy_user_num
@@ -223,7 +222,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN school s ON s.id = g.school_id
         LEFT JOIN major m ON g.major_id = m.id
         LEFT JOIN order_input_template ot ON cb.template_status = ot.id
-        <if test="getOrderNum != null and getOrderNum == 1" >
+        <if test="getOrderNum != null and getOrderNum == 1">
             LEFT JOIN (
             SELECT
             og.goods_id,
@@ -255,7 +254,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </foreach>
         </if>
         <if test="goodsTypes != null and goodsTypes.size()!=0 ">
-            AND g.goods_type  in
+            AND g.goods_type in
             <foreach collection="goodsTypes" item="item" index="index" open="(" close=")" separator=",">
                 #{item}
             </foreach>
@@ -305,14 +304,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="searchKey != null and searchKey != ''">
             and (g.goods_name like concat('%', #{searchKey}, '%') or g.code like concat('%', #{searchKey}, '%'))
         </if>
-          <if test="goodsStatus != null ">
+        <if test="goodsStatus != null ">
             AND g.goods_status = #{goodsStatus}
         </if>
         <if test="studyStartTime != null and studyStartTime != '' and studyEndTime != null and studyEndTime != ''">
-            and #{studyStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{studyEndTime} BETWEEN g.validity_start_time and g.validity_end_time
+            and #{studyStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{studyEndTime} BETWEEN
+            g.validity_start_time and g.validity_end_time
         </if>
         <if test="validityStartTime != null or validityEndTime != null ">
-            AND (#{validityStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{validityEndTime} BETWEEN g.validity_start_time and g.validity_end_time)
+            AND (#{validityStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{validityEndTime}
+            BETWEEN g.validity_start_time and g.validity_end_time)
         </if>
         <if test="subjectId != null and subjectId >0">
             AND FIND_IN_SET(#{subjectId},g.subject_ids)
@@ -330,7 +331,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             )
         </if>
         <if test="goodsType ==1 and haveCourse != null and haveCourse == 1">
-            AND (SELECT count(*) from goods_course gc LEFT JOIN course c ON gc.course_id = c.course_id where gc.goods_id = g.goods_id and c.`status` = 1
+            AND (SELECT count(*) from goods_course gc LEFT JOIN course c ON gc.course_id = c.course_id where gc.goods_id
+            = g.goods_id and c.`status` = 1
             ) >0
         </if>
         <!-- 数据范围过滤 -->
@@ -344,12 +346,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="sortType != null and sortType == 1">
             ORDER BY g.show_sort DESC,g.create_time DESC
         </if>
-        <if test="sortType == null" >
+        <if test="sortType == null">
             ORDER BY g.create_time DESC
         </if>
     </select>
 
-    <select id="selectListToInput" parameterType="com.zhongzheng.modules.goods.bo.GoodsQueryBo" resultMap="GoodsResultVo">
+    <select id="selectListToInput" parameterType="com.zhongzheng.modules.goods.bo.GoodsQueryBo"
+            resultMap="GoodsResultVo">
         SELECT
         g.*,
         ps.supply_name,
@@ -362,13 +365,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         (SELECT gs.goods_name FROM goods gs where 1=1 and g.make_goods_id = gs.goods_id) as make_goods_name,
         (SELECT gs.code FROM goods gs where 1=1 and g.make_goods_id = gs.goods_id) as make_goods_code
         <if test="sectionNum ==1">
-            ,(SELECT COUNT(m.id)+(SELECT COUNT(n.id) FROM course_chapter_section n LEFT JOIN course_module_chapter p on n.chapter_id = p.chapter_id LEFT JOIN course_menu m on m.menu_id = p.module_id LEFT JOIN goods_course gc on gc.course_id = m.course_id  where gc.goods_id =  g.goods_id and m.type in(1))+(SELECT COUNT(n.id) FROM course_chapter_section n  LEFT JOIN course_menu m on m.menu_id = n.chapter_id LEFT JOIN goods_course gc on gc.course_id = m.course_id where gc.goods_id =  g.goods_id and m.type in(2)) FROM course_menu m LEFT JOIN goods_course gc on gc.course_id = m.course_id  where gc.goods_id =  g.goods_id  and m.type in(3)) as section_num
+            ,(SELECT COUNT(m.id)+(SELECT COUNT(n.id) FROM course_chapter_section n LEFT JOIN course_module_chapter p on
+            n.chapter_id = p.chapter_id LEFT JOIN course_menu m on m.menu_id = p.module_id LEFT JOIN goods_course gc on
+            gc.course_id = m.course_id where gc.goods_id = g.goods_id and m.type in(1))+(SELECT COUNT(n.id) FROM
+            course_chapter_section n LEFT JOIN course_menu m on m.menu_id = n.chapter_id LEFT JOIN goods_course gc on
+            gc.course_id = m.course_id where gc.goods_id = g.goods_id and m.type in(2)) FROM course_menu m LEFT JOIN
+            goods_course gc on gc.course_id = m.course_id where gc.goods_id = g.goods_id and m.type in(3)) as
+            section_num
         </if>
         <if test="goodsType ==1">
             , (SELECT count(*) FROM goods_course where goods_id =g.goods_id ) as course_num
-            , (SELECT count(*) FROM class_grade cg  LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id where  cgg.goods_id = g.goods_id and cg.`status` = 1 ) as grade_num
-            , (SELECT cg.grade_id FROM class_grade cg  LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id where  cgg.goods_id = g.goods_id and cg.`status` = 1 AND (unix_timestamp(now()) &lt; cg.class_end_time or cg.class_start_time is null) AND cg.`status` = 1  AND (SELECT COUNT(a.id) FROM class_grade_user a where a.grade_id = cg.grade_id and a.status =1) &lt; cg.student_upper limit 1) as grade_id
-            , (SELECT cg.class_name FROM class_grade cg  LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id where  cgg.goods_id = g.goods_id and cg.`status` = 1 AND (unix_timestamp(now()) &lt; cg.class_end_time or cg.class_start_time is null) AND cg.`status` = 1  AND (SELECT COUNT(a.id) FROM class_grade_user a where a.grade_id = cg.grade_id and a.status =1) &lt; cg.student_upper limit 1) as grade_name
+            , (SELECT count(*) FROM class_grade cg LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id where
+            cgg.goods_id = g.goods_id and cg.`status` = 1 ) as grade_num
+            , (SELECT cg.grade_id FROM class_grade cg LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id
+            where cgg.goods_id = g.goods_id and cg.`status` = 1 AND (unix_timestamp(now()) &lt; cg.class_end_time or
+            cg.class_start_time is null) AND cg.`status` = 1 AND (SELECT COUNT(a.id) FROM class_grade_user a where
+            a.grade_id = cg.grade_id and a.status =1) &lt; cg.student_upper limit 1) as grade_id
+            , (SELECT cg.class_name FROM class_grade cg LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id
+            where cgg.goods_id = g.goods_id and cg.`status` = 1 AND (unix_timestamp(now()) &lt; cg.class_end_time or
+            cg.class_start_time is null) AND cg.`status` = 1 AND (SELECT COUNT(a.id) FROM class_grade_user a where
+            a.grade_id = cg.grade_id and a.status =1) &lt; cg.student_upper limit 1) as grade_name
         </if>
         FROM
         goods g
@@ -437,16 +453,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND g.goods_status = #{goodsStatus}
         </if>
         <if test="studyStartTime != null and studyStartTime != '' and studyEndTime != null and studyEndTime != ''">
-            and #{studyStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{studyEndTime} BETWEEN g.validity_start_time and g.validity_end_time
+            and #{studyStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{studyEndTime} BETWEEN
+            g.validity_start_time and g.validity_end_time
         </if>
         <if test="validityStartTime != null or validityEndTime != null ">
-            AND (#{validityStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{validityEndTime} BETWEEN g.validity_start_time and g.validity_end_time)
+            AND (#{validityStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{validityEndTime}
+            BETWEEN g.validity_start_time and g.validity_end_time)
         </if>
         <if test="subjectId != null and subjectId >0">
             AND FIND_IN_SET(#{subjectId},g.subject_ids)
         </if>
         <if test="goodsType ==1 and haveCourse != null and haveCourse == 1">
-            AND (SELECT count(*) from goods_course gc LEFT JOIN course c ON gc.course_id = c.course_id where gc.goods_id = g.goods_id and c.`status` = 1
+            AND (SELECT count(*) from goods_course gc LEFT JOIN course c ON gc.course_id = c.course_id where gc.goods_id
+            = g.goods_id and c.`status` = 1
             ) >0
         </if>
         <if test="sortType != null and sortType == 2">
@@ -462,40 +481,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <select id="selectDetail" parameterType="Long" resultMap="GoodsResultVo">
-        SELECT
-            g.*,
-            ps.supply_name,
-            cet.education_name,
-            cpt.project_name,
-            cb.business_name,
-            cb.template_status as special_goods,
-            s.school_name,
-            m.category_name,
-            ot.type AS template_type,
-            (SELECT gs.goods_name FROM goods gs where 1=1 and g.make_goods_id = gs.goods_id) as make_goods_name,
-            (SELECT gs.code FROM goods gs where 1=1 and g.make_goods_id = gs.goods_id) as make_goods_code,
-            (SELECT
-                 count( DISTINCT c.subject_id )
-             FROM
-                 course c
-                     LEFT JOIN goods_course gc ON gc.course_id = c.course_id
-             WHERE
-                 gc.goods_id = g.goods_id) as subject_num,
-            (SELECT GROUP_CONCAT(subject_name)  from course_subject where FIND_IN_SET(id,g.subject_ids)) subject_names
-        FROM
-            goods g
-                LEFT JOIN pay_supply ps ON g.supply_id = ps.supply_id
-                LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
-                LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
-                LEFT JOIN course_business cb ON g.business_id = cb.id
-                LEFT JOIN school s ON s.id = g.school_id
-                LEFT JOIN major m ON g.major_id = m.id
-                LEFT JOIN order_input_template ot ON cb.template_status = ot.id
-        WHERE
-            g.goods_id = #{goodsId}
+        SELECT g.*,
+               ps.supply_name,
+               cet.education_name,
+               cpt.project_name,
+               cb.business_name,
+               cb.template_status                                                                 as special_goods,
+               s.school_name,
+               m.category_name,
+               ot.type                                                                            AS template_type,
+               (SELECT gs.goods_name FROM goods gs where 1 = 1 and g.make_goods_id = gs.goods_id) as make_goods_name,
+               (SELECT gs.code FROM goods gs where 1 = 1 and g.make_goods_id = gs.goods_id)       as make_goods_code,
+               (SELECT count(DISTINCT c.subject_id)
+                FROM course c
+                         LEFT JOIN goods_course gc ON gc.course_id = c.course_id
+                WHERE gc.goods_id = g.goods_id)                                                   as subject_num,
+               (SELECT GROUP_CONCAT(subject_name)
+                from course_subject
+                where FIND_IN_SET(id, g.subject_ids))                                                subject_names
+        FROM goods g
+                 LEFT JOIN pay_supply ps ON g.supply_id = ps.supply_id
+                 LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+                 LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+                 LEFT JOIN course_business cb ON g.business_id = cb.id
+                 LEFT JOIN school s ON s.id = g.school_id
+                 LEFT JOIN major m ON g.major_id = m.id
+                 LEFT JOIN order_input_template ot ON cb.template_status = ot.id
+        WHERE g.goods_id = #{goodsId}
     </select>
 
-    <select id="listGoods" parameterType="com.zhongzheng.modules.exam.bo.ExamNumberGoodsQueryBo" resultMap="ExamNumberGoodsVoResult">
+    <select id="listGoods" parameterType="com.zhongzheng.modules.exam.bo.ExamNumberGoodsQueryBo"
+            resultMap="ExamNumberGoodsVoResult">
         SELECT
         goods_id,
         goods_name,
@@ -506,10 +522,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         CODE,
         stand_price,
         <if test="filtration != null and filtration == 1">
-            (case WHEN (SELECT COUNT(gs.goods_id) FROM goods gs where 1=1 and gs.make_goods_id = g.goods_id and gs.status =1 and gs.goods_type =4) >0 then 0 ELSE 1 end) as select_status
+            (case WHEN (SELECT COUNT(gs.goods_id) FROM goods gs where 1=1 and gs.make_goods_id = g.goods_id and
+            gs.status =1 and gs.goods_type =4) >0 then 0 ELSE 1 end) as select_status
         </if>
         <if test="filtration != null and filtration == 2">
-        (case WHEN (SELECT COUNT(gs.goods_id) FROM goods gs where 1=1 and gs.make_goods_id = g.goods_id and gs.status =1 and gs.goods_type =3) >0 then 0 ELSE 1 end) as select_status
+            (case WHEN (SELECT COUNT(gs.goods_id) FROM goods gs where 1=1 and gs.make_goods_id = g.goods_id and
+            gs.status =1 and gs.goods_type =3) >0 then 0 ELSE 1 end) as select_status
         </if>
         FROM
         goods g
@@ -539,232 +557,323 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <select id="selectUserDetail" parameterType="map" resultMap="GoodsResultVo">
-        SELECT
-            g.*,
-            ps.supply_name,
-            cet.education_name,
-            cpt.project_name,
-            cb.business_name,
-            cb.template_status AS special_goods,
-            s.school_name,
-            m.category_name,
-            ot.type AS template_type,
-            (SELECT gs.goods_name FROM goods gs where 1=1 and g.make_goods_id = gs.goods_id) as make_goods_name,
-            (SELECT gs.code FROM goods gs where 1=1 and g.make_goods_id = gs.goods_id) as make_goods_code,
-            (SELECT  DISTINCT cg.grade_id FROM class_grade_user cgu LEFT JOIN class_grade_goods cgg on cgg.grade_id = cgu.grade_id LEFT JOIN class_grade cg on cg.grade_id = cgu.grade_id
-            where cgu.user_id = #{userId} and cgg.goods_id=g.goods_id and cg.`status` =1 and unix_timestamp(now()) BETWEEN cg.class_start_time and cg.class_end_time)  as grade_id
-        FROM
-            goods g
-                LEFT JOIN pay_supply ps ON g.supply_id = ps.supply_id
-                LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
-                LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
-                LEFT JOIN course_business cb ON g.business_id = cb.id
-                LEFT JOIN school s ON s.id = g.school_id
-                LEFT JOIN major m ON g.major_id = m.id
-                LEFT JOIN order_input_template ot ON cb.template_status = ot.id
-        WHERE
-            g.goods_id = #{goodsId}
+        SELECT g.*,
+               ps.supply_name,
+               cet.education_name,
+               cpt.project_name,
+               cb.business_name,
+               cb.template_status                                                                 AS special_goods,
+               s.school_name,
+               m.category_name,
+               ot.type                                                                            AS template_type,
+               (SELECT gs.goods_name FROM goods gs where 1 = 1 and g.make_goods_id = gs.goods_id) as make_goods_name,
+               (SELECT gs.code FROM goods gs where 1 = 1 and g.make_goods_id = gs.goods_id)       as make_goods_code,
+               (SELECT DISTINCT cg.grade_id
+                FROM class_grade_user cgu
+                         LEFT JOIN class_grade_goods cgg on cgg.grade_id = cgu.grade_id
+                         LEFT JOIN class_grade cg on cg.grade_id = cgu.grade_id
+                where cgu.user_id = #{userId}
+                  and cgg.goods_id = g.goods_id
+                  and cg.`status` = 1
+                  and unix_timestamp(now()) BETWEEN cg.class_start_time and cg.class_end_time)    as grade_id
+        FROM goods g
+                 LEFT JOIN pay_supply ps ON g.supply_id = ps.supply_id
+                 LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+                 LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+                 LEFT JOIN course_business cb ON g.business_id = cb.id
+                 LEFT JOIN school s ON s.id = g.school_id
+                 LEFT JOIN major m ON g.major_id = m.id
+                 LEFT JOIN order_input_template ot ON cb.template_status = ot.id
+        WHERE g.goods_id = #{goodsId}
     </select>
 
     <select id="getQuestionNum" parameterType="Long" resultType="Long">
-        SELECT
-            count(DISTINCT  question_id ) question_num
-        FROM
-            exam_question
-        WHERE
-            find_in_set(
-                    exam_id,(
-                SELECT
-                    concat(
-                            IFNULL((
-                                       SELECT
-                                           GROUP_CONCAT(  exam_id )
-                                       FROM
-                                           question_chapter_exam
-                                       WHERE
-                                           FIND_IN_SET(chapter_exam_id,
-                                                       (SELECT
-                                                            concat(
-                                                                    IFNULL(( SELECT GROUP_CONCAT(  major_id ) eids FROM goods_attached WHERE goods_id = #{goodsId} AND type = 2 ), '' ),
-                                                                    ',',
-                                                                    IFNULL(
-                                                                            (
-                                                                                SELECT
-                                                                                    GROUP_CONCAT(  chapter_exam_id ) eids2
-                                                                                FROM
-                                                                                    question_module_chapter
-                                                                                WHERE
-                                                                                        module_exam_id IN ( SELECT major_id FROM goods_attached WHERE goods_id = #{goodsId} AND type = 1 )),
-                                                                            ''
-                                                                        ))))),
-                                   ''
-                                ),
-                            ',',
-                            IFNULL(( SELECT GROUP_CONCAT(  major_id ) FROM goods_attached WHERE goods_id = #{goodsId} AND type = 3 ), '' ))))
+        SELECT count(DISTINCT question_id) question_num
+        FROM exam_question
+        WHERE find_in_set(
+                      exam_id, (
+                    SELECT concat(
+                                   IFNULL((
+                                              SELECT GROUP_CONCAT(exam_id)
+                                              FROM question_chapter_exam
+                                              WHERE FIND_IN_SET(chapter_exam_id,
+                                                                (SELECT concat(
+                                                                                IFNULL(
+                                                                                        (SELECT GROUP_CONCAT(major_id) eids
+                                                                                         FROM goods_attached
+                                                                                         WHERE goods_id = #{goodsId}
+                                                                                           AND type = 2), ''),
+                                                                                ',',
+                                                                                IFNULL(
+                                                                                        (
+                                                                                            SELECT GROUP_CONCAT(chapter_exam_id) eids2
+                                                                                            FROM question_module_chapter
+                                                                                            WHERE module_exam_id IN
+                                                                                                  (SELECT major_id
+                                                                                                   FROM goods_attached
+                                                                                                   WHERE goods_id = #{goodsId} AND type = 1)),
+                                                                                        ''
+                                                                                    ))))),
+                                          ''
+                                       ),
+                                   ',',
+                                   IFNULL((SELECT GROUP_CONCAT(major_id)
+                                           FROM goods_attached
+                                           WHERE goods_id = #{goodsId} AND type = 3), ''))))
     </select>
 
     <select id="getRandomQuestionNum" parameterType="map" resultType="Long">
-        SELECT
-            count(DISTINCT  eq.question_id ) question_num
-        FROM
-            exam_question eq LEFT JOIN exam e on  eq.exam_id = e.exam_id
-        WHERE
-            find_in_set(
-                    eq.exam_id,(
-                SELECT
-                    concat(
-                            IFNULL((
-                                       SELECT
-                                           GROUP_CONCAT(  exam_id )
-                                       FROM
-                                           question_chapter_exam
-                                       WHERE
-                                           FIND_IN_SET(chapter_exam_id,
-                                                       (SELECT
-                                                            concat(
-                                                                    IFNULL(( SELECT GROUP_CONCAT(  major_id ) eids FROM goods_attached WHERE goods_id = #{goodsId} AND type = 2 ), '' ),
-                                                                    ',',
-                                                                    IFNULL(
-                                                                            (
-                                                                                SELECT
-                                                                                    GROUP_CONCAT(  chapter_exam_id ) eids2
-                                                                                FROM
-                                                                                    question_module_chapter
-                                                                                WHERE
-                                                                                        module_exam_id IN ( SELECT major_id FROM goods_attached WHERE goods_id = #{goodsId} AND type = 1 )),
-                                                                            ''
-                                                                        ))))),
-                                   ''
-                                ),
-                            ',',
-                            IFNULL(( SELECT GROUP_CONCAT(  major_id ) FROM goods_attached WHERE goods_id = #{goodsId} AND type = 3 ), '' )))) and e.exam_paper_id = #{examPaperId}
+        SELECT count(DISTINCT eq.question_id) question_num
+        FROM exam_question eq
+                 LEFT JOIN exam e on eq.exam_id = e.exam_id
+        WHERE find_in_set(
+                eq.exam_id, (
+                    SELECT concat(
+                                   IFNULL((
+                                              SELECT GROUP_CONCAT(exam_id)
+                                              FROM question_chapter_exam
+                                              WHERE FIND_IN_SET(chapter_exam_id,
+                                                                (SELECT concat(
+                                                                                IFNULL(
+                                                                                        (SELECT GROUP_CONCAT(major_id) eids
+                                                                                         FROM goods_attached
+                                                                                         WHERE goods_id = #{goodsId}
+                                                                                           AND type = 2), ''),
+                                                                                ',',
+                                                                                IFNULL(
+                                                                                        (
+                                                                                            SELECT GROUP_CONCAT(chapter_exam_id) eids2
+                                                                                            FROM question_module_chapter
+                                                                                            WHERE module_exam_id IN
+                                                                                                  (SELECT major_id
+                                                                                                   FROM goods_attached
+                                                                                                   WHERE goods_id = #{goodsId} AND type = 1)),
+                                                                                        ''
+                                                                                    ))))),
+                                          ''
+                                       ),
+                                   ',',
+                                   IFNULL((SELECT GROUP_CONCAT(major_id)
+                                           FROM goods_attached
+                                           WHERE goods_id = #{goodsId} AND type = 3), ''))))
+          and e.exam_paper_id = #{examPaperId}
     </select>
 
     <update id="queryUpGoods">
-        update goods g set g.goods_status=0 where unix_timestamp(now()) > g.validity_end_time and g.goods_status = 1
+        update goods g
+        set g.goods_status=0
+        where unix_timestamp(now()) > g.validity_end_time
+          and g.goods_status = 1
     </update>
 
     <select id="getExamNum" parameterType="Long" resultType="Long">
-        SELECT
-                count( exam_id )+((
-                SELECT
-                    count( major_id )
-                FROM
-                    goods_attached
-                WHERE
-                    goods_id = #{goodsId}
-                  AND type = 3
-            )) AS exam_num
-        FROM
-            question_chapter_exam
-        WHERE
-            FIND_IN_SET(
-                    chapter_exam_id,
-                    (
-                        SELECT
-                            concat(
-                                    IFNULL(( SELECT GROUP_CONCAT( major_id ) eids FROM goods_attached WHERE goods_id = #{goodsId} AND type = 2 ), '' ),
-                                    ',',
-                                    IFNULL(
-                                            (
-                                                SELECT
-                                                    GROUP_CONCAT( chapter_exam_id ) eids2
-                                                FROM
-                                                    question_module_chapter
-                                                WHERE
-                                                        module_exam_id IN ( SELECT major_id FROM goods_attached WHERE goods_id = #{goodsId} AND type = 1 )),
-                                            ''
-                                        ))))
+        SELECT count(exam_id) + ((
+            SELECT count(major_id)
+            FROM goods_attached
+            WHERE goods_id = #{goodsId}
+              AND type = 3
+        )) AS exam_num
+        FROM question_chapter_exam
+        WHERE FIND_IN_SET(
+                      chapter_exam_id,
+                      (
+                          SELECT concat(
+                                         IFNULL((SELECT GROUP_CONCAT(major_id) eids
+                                                 FROM goods_attached
+                                                 WHERE goods_id = #{goodsId} AND type = 2), ''),
+                                         ',',
+                                         IFNULL(
+                                                 (
+                                                     SELECT GROUP_CONCAT(chapter_exam_id) eids2
+                                                     FROM question_module_chapter
+                                                     WHERE module_exam_id IN (SELECT major_id
+                                                                              FROM goods_attached
+                                                                              WHERE goods_id = #{goodsId} AND type = 1)),
+                                                 ''
+                                             ))))
     </select>
 
-    <select id="getSectionNum" parameterType="Long" resultMap="GoodsResultVo">
-        SELECT
-            (SELECT IFNULL(COUNT(m.id),0)+(SELECT IFNULL(COUNT(n.id),0) FROM course_chapter_section n LEFT JOIN course_module_chapter p on n.chapter_id = p.chapter_id LEFT JOIN course_menu m on m.menu_id = p.module_id LEFT JOIN goods_course gc on gc.course_id = m.course_id  where gc.goods_id =  g.goods_id and m.type in(1))+(SELECT IFNULL(COUNT(n.id),0) FROM course_chapter_section n  LEFT JOIN course_menu m on m.menu_id = n.chapter_id LEFT JOIN goods_course gc on gc.course_id = m.course_id where gc.goods_id =  g.goods_id and m.type in(2)) FROM course_menu m LEFT JOIN goods_course gc on gc.course_id = m.course_id  where gc.goods_id =  g.goods_id  and m.type in(3)) as section_num,
-            (SELECT IFNULL(COUNT(1),0) FROM goods_course gc where gc.goods_id = g.goods_id) as course_num,
-            (SELECT
-                 IFNULL(COUNT( m.id ),0)
-             FROM
-                 goods_course c  LEFT JOIN  course_menu_exam m ON m.course_id = c.course_id
-             where
-                 m.type = 1
-               and c.goods_id = g.goods_id) as exam_num
-        FROM
-            goods g
-        WHERE
-            g.goods_id = #{goodsId}
+    <select id="getSectionNumByBo" parameterType="Long" resultMap="GoodsResultVo">
+        SELECT (SELECT IFNULL(COUNT(m.id), 0) + (SELECT IFNULL(COUNT(n.id), 0)
+                                                 FROM course_chapter_section n
+                                                          LEFT JOIN course_module_chapter p on n.chapter_id = p.chapter_id
+                                                          LEFT JOIN course_menu m on m.menu_id = p.module_id
+                                                          LEFT JOIN goods_course gc on gc.course_id = m.course_id
+                                                 where gc.goods_id = g.goods_id
+                                                   and m.type in (1)) + (SELECT IFNULL(COUNT(n.id), 0)
+                                                                         FROM course_chapter_section n
+                                                                                  LEFT JOIN course_menu m on m.menu_id = n.chapter_id
+                                                                                  LEFT JOIN goods_course gc on gc.course_id = m.course_id
+                                                                         where gc.goods_id = g.goods_id
+                                                                           and m.type in (2))
+                FROM course_menu m
+                         LEFT JOIN goods_course gc on gc.course_id = m.course_id
+                where gc.goods_id = g.goods_id
+                  and m.type in (3))                                                            as section_num,
+               (SELECT IFNULL(COUNT(1), 0) FROM goods_course gc where gc.goods_id = g.goods_id) as course_num,
+               (SELECT IFNULL(COUNT(m.id), 0)
+                FROM goods_course c
+                         LEFT JOIN course_menu_exam m ON m.course_id = c.course_id
+                where m.type = 1
+                  and c.goods_id = g.goods_id)                                                  as exam_num
+        FROM goods g
+        WHERE g.goods_id = #{goodsId}
     </select>
 
-    <select id="getOrderGoodsListByUser" parameterType="Long" resultType="com.zhongzheng.modules.goods.vo.UserGoodsListVo">
-        SELECT
-            og.goods_id AS goodsId,
-            og.order_goods_id as orderGoodsId,
-            o.order_id as orderId,
-            g.goods_name as categoryName,
-            m.category_name as majorName,
-            o.tenant_id as tenantId,
-            g.goods_type as courseType,
-            concat('https://file.xyyxt.net/', g.cover_url) as imageUrl,
-            o.create_time as createTimeStr,
-            og.grade_id as gradeId
-        FROM
-            `order` o
-                LEFT JOIN order_goods og ON o.order_sn = og.order_sn
-                LEFT JOIN goods g ON og.goods_id = g.goods_id
-                LEFT JOIN major m ON g.major_id = m.id
-        WHERE
-            o.user_id = #{userId}
-          AND og.pay_status IN ( 2, 3, 4 )
+    <select id="getOrderGoodsListByUser" parameterType="Long"
+            resultType="com.zhongzheng.modules.goods.vo.UserGoodsListVo">
+        SELECT og.goods_id                                    AS goodsId,
+               og.order_goods_id                              as orderGoodsId,
+               o.order_id                                     as orderId,
+               g.goods_name                                   as categoryName,
+               m.category_name                                as majorName,
+               o.tenant_id                                    as tenantId,
+               g.goods_type                                   as courseType,
+               concat('https://file.xyyxt.net/', g.cover_url) as imageUrl,
+               o.create_time                                  as createTimeStr,
+               og.grade_id                                    as gradeId
+        FROM `order` o
+                 LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+                 LEFT JOIN goods g ON og.goods_id = g.goods_id
+                 LEFT JOIN major m ON g.major_id = m.id
+        WHERE o.user_id = #{userId}
+          AND og.pay_status IN (2, 3, 4)
           AND og.refund_status !=2
     </select>
 
     <select id="countUserOrderGoods" parameterType="Long" resultType="com.zhongzheng.modules.goods.vo.UserOrderGoodsVo">
-        SELECT
-            og.order_goods_id,
-            og.goods_id,
-            og.grade_id
-        FROM
-            `order` o
-                LEFT JOIN order_goods og ON o.order_sn = og.order_sn
-        WHERE
-            o.user_id = #{userId}
+        SELECT og.order_goods_id,
+               og.goods_id,
+               og.grade_id
+        FROM `order` o
+                 LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+        WHERE o.user_id = #{userId}
           AND og.goods_id = #{goodsId}
-          AND og.pay_status IN ( 2, 3, 4 )
+          AND og.pay_status IN (2, 3, 4)
           AND og.refund_status != 2
           AND o.tenant_id = #{tenantId}
           AND og.tenant_id = #{tenantId}
     </select>
 
     <select id="queryGoodsByIdTenant" parameterType="map" resultType="com.zhongzheng.modules.goods.domain.Goods">
-        SELECT
-            *
-        FROM
-            `goods`
-        WHERE
-            goods_id = #{goodsId} AND tenant_id = #{tenantId}
+        SELECT *
+        FROM `goods`
+        WHERE goods_id = #{goodsId}
+          AND tenant_id = #{tenantId}
     </select>
 
     <select id="queryGoodsByTenant" parameterType="map" resultType="com.zhongzheng.modules.goods.domain.Goods">
-        SELECT
-            *
-        FROM
-            `goods`
-        WHERE
-            `code` = #{code} AND tenant_id = #{tenantId}
+        SELECT *
+        FROM `goods`
+        WHERE `code` = #{code}
+          AND tenant_id = #{tenantId}
     </select>
 
 
     <update id="updateByTenant" parameterType="com.zhongzheng.modules.goods.domain.Goods">
-        UPDATE goods SET`year` = #{year},supply_id = #{supplyId},goods_type = #{goodsType},education_type_id = #{educationTypeId},business_id = #{businessId},
-                         school_id = #{schoolId},major_id = #{majorId},goods_name = #{goodsName},stand_price = #{standPrice},lowest_price = #{lowestPrice},create_time = #{createTime},
-                         update_time = #{updateTime},`status` = #{status},validity_start_time = #{validityStartTime},validity_end_time = #{validityEndTime},study_start_time = #{studyStartTime},
-                         study_end_time = #{studyEndTime},certificate_ids = #{certificateIds},introduce = #{introduce},suitable_object = #{suitableObject},buy_note = #{buyNote},pc_detail_html = #{pcDetailHtml},
-                         mobile_detail_html = #{mobileDetailHtml},goods_status = #{goodsStatus},cover_url = #{coverUrl},class_hours = #{classHours},stand_price_json =  #{standPriceJson},tenant_id = #{tenantId},
-                         `code` = #{code},project_id = #{projectId},goods_audition_config = #{goodsAuditionConfig},goods_photograph_config = #{goodsPhotographConfig},goods_play_config = #{goodsPlayConfig},
-                         goods_exam_config = #{goodsExamConfig},handouts_id = #{handoutsId},make_start_time = #{makeStartTime},make_end_time = #{makeEndTime},study_count = #{studyCount},
-                         goods_photo_exam_config = #{goodsPhotoExamConfig},make_goods_id = #{makeGoodsId},service_time_type = #{serviceTimeType},service_time_num = #{serviceTimeNum},section_max_num = #{sectionMaxNum},
-                         exam_number = #{examNumber},do_number = #{doNumber},teacher_id = #{teacherId},subject_ids = #{subjectIds},certificate_type_id = #{certificateTypeId},certificate_id = #{certificateId},
-                         certificate_tp_id = #{certificateTpId},line_price = #{linePrice},spec_template_id = #{specTemplateId},show_status = #{showStatus},show_sort = #{showSort}
-        WHERE goods_id = #{goodsId} and tenant_id = #{tenantId}
+        UPDATE goods
+        SET `year`                  = #{year},
+            supply_id               = #{supplyId},
+            goods_type              = #{goodsType},
+            education_type_id       = #{educationTypeId},
+            business_id             = #{businessId},
+            school_id               = #{schoolId},
+            major_id                = #{majorId},
+            goods_name              = #{goodsName},
+            stand_price             = #{standPrice},
+            lowest_price            = #{lowestPrice},
+            create_time             = #{createTime},
+            update_time             = #{updateTime},
+            `status`                = #{status},
+            validity_start_time     = #{validityStartTime},
+            validity_end_time       = #{validityEndTime},
+            study_start_time        = #{studyStartTime},
+            study_end_time          = #{studyEndTime},
+            certificate_ids         = #{certificateIds},
+            introduce               = #{introduce},
+            suitable_object         = #{suitableObject},
+            buy_note                = #{buyNote},
+            pc_detail_html          = #{pcDetailHtml},
+            mobile_detail_html      = #{mobileDetailHtml},
+            goods_status            = #{goodsStatus},
+            cover_url               = #{coverUrl},
+            class_hours             = #{classHours},
+            stand_price_json        = #{standPriceJson},
+            tenant_id               = #{tenantId},
+            `code`                  = #{code},
+            project_id              = #{projectId},
+            goods_audition_config   = #{goodsAuditionConfig},
+            goods_photograph_config = #{goodsPhotographConfig},
+            goods_play_config       = #{goodsPlayConfig},
+            goods_exam_config       = #{goodsExamConfig},
+            handouts_id             = #{handoutsId},
+            make_start_time         = #{makeStartTime},
+            make_end_time           = #{makeEndTime},
+            study_count             = #{studyCount},
+            goods_photo_exam_config = #{goodsPhotoExamConfig},
+            make_goods_id           = #{makeGoodsId},
+            service_time_type       = #{serviceTimeType},
+            service_time_num        = #{serviceTimeNum},
+            section_max_num         = #{sectionMaxNum},
+            exam_number             = #{examNumber},
+            do_number               = #{doNumber},
+            teacher_id              = #{teacherId},
+            subject_ids             = #{subjectIds},
+            certificate_type_id     = #{certificateTypeId},
+            certificate_id          = #{certificateId},
+            certificate_tp_id       = #{certificateTpId},
+            line_price              = #{linePrice},
+            spec_template_id        = #{specTemplateId},
+            show_status             = #{showStatus},
+            show_sort               = #{showSort}
+        WHERE goods_id = #{goodsId}
+          and tenant_id = #{tenantId}
     </update>
-
+    <select id="getUserGoodsListAll" parameterType="com.zhongzheng.modules.goods.bo.UserGoodsListAllBo"
+            resultType="com.zhongzheng.modules.goods.vo.GoodsListAllVo">
+        SELECT
+        o.order_id,
+        og.order_goods_id,
+        g.goods_id,
+        g.goods_name,
+        g.goods_type,
+        g.class_hours,
+        g.validity_start_time,
+        g.validity_end_time,
+        g.study_start_time AS serviceStartTime,
+        g.study_end_time AS serviceEndTime,
+        cg.class_status,
+        cg.class_start_time,
+        cg.class_end_time
+        FROM
+        order_goods og
+        LEFT JOIN `order` o ON og.order_sn = o.order_sn
+        LEFT JOIN goods g ON og.goods_id = g.goods_id
+        LEFT JOIN class_grade cg ON og.grade_id = cg.grade_id
+        WHERE
+        og.pay_status IN ( 2, 3, 4 )
+        AND og.refund_status != 2
+        <if test="goodsName != null and goodsName != ''">
+            AND g.goods_name like concat('%', #{goodsName}, '%')
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND g.education_type_id = #{educationTypeId}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            AND g.business_id = #{businessId}
+        </if>
+        <if test="userId != null and userId != ''">
+            AND o.user_id = #{userId}
+        </if>
+    </select>
+    <select id="getCourseExamNum" parameterType="java.lang.Long" resultType="java.lang.Long">
+        SELECT
+            COUNT(*)
+        FROM
+            course_menu_exam cme
+                LEFT JOIN goods_course gc ON cme.course_id = gc.course_id
+        WHERE
+            cme.type != 2
+	AND gc.goods_id = #{goodsId}
+    </select>
 </mapper>

+ 7 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml

@@ -895,4 +895,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             cg.class_end_time > #{startTime}
             AND #{endTime} >= cg.class_end_time
     </select>
+
+    <select id="getClassUserNumByTenant" parameterType="java.lang.Long" resultType="java.lang.Long">
+        SELECT
+            sum( a.num )
+        FROM
+            ( SELECT COUNT( user_id ) AS num FROM class_grade_user WHERE grade_id = #{gradeId} AND `status` = 1 AND change_grade = 0 GROUP BY user_id ) a
+    </select>
 </mapper>

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

@@ -18,4 +18,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </delete>
 
+    <select id="getGoodsCopy" parameterType="map" resultType="com.zhongzheng.modules.system.domain.SysGoodsCopyRecord">
+        select * from sys_goods_copy_record where old_id = #{goodsId} and `type` = #{type}
+    </select>
+
 </mapper>