yangdamao 2 år sedan
förälder
incheckning
4f3cf56344
18 ändrade filer med 631 tillägg och 58 borttagningar
  1. 12 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  2. 20 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  3. 7 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java
  4. 3 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  5. 83 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  6. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserOrderGoodsListVo.java
  7. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java
  8. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/ClassGrade.java
  9. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  10. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  11. 99 15
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  12. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeVo.java
  13. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java
  14. 74 17
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  15. 25 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  16. 209 12
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  17. 19 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml
  18. 3 3
      zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

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

@@ -49,6 +49,7 @@ import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsJzsVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.goods.vo.UserGoodsListVo;
+import com.zhongzheng.modules.goods.vo.UserOrderGoodsListVo;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
@@ -276,6 +277,17 @@ public class CommonController extends BaseController {
         return AjaxResult.success(voList);
     }
 
+    @ApiOperation("旧系统获取用户商品信息")
+    @PostMapping("common/get/goods")
+    public AjaxResult getUserOrderGoods(@RequestBody UserGoodsListBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            return AjaxResult.error("签名错误");
+        }
+        List<UserOrderGoodsListVo> voList = iGoodsService.getUserOrderGoods(bo);
+
+        return AjaxResult.success(voList);
+    }
+
     @ApiOperation("七大员学员资料批量变更")
     @PostMapping("common/apply/user/profile")
     public AjaxResult updateExamUserProfile(MultipartFile file) {

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

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

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

@@ -9,11 +9,9 @@ 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;
+import com.zhongzheng.modules.goods.vo.*;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.security.core.parameters.P;
 
 import java.util.List;
 
@@ -82,4 +80,9 @@ public interface GoodsMapper extends BaseMapper<Goods> {
     String getGoodsBusinessName(Long goodsId);
 
     String getBusinessName(@Param("goodsId") Long goodsId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Long getNewHandoutsId(@Param("handoutsName") String handoutsName,@Param("encoder") String encoder,@Param("newTenantId") Long newTenantId);
+
+    List<UserOrderGoodsListVo> getUserOrderGoodsList(Long userId);
 }

+ 3 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java

@@ -7,10 +7,7 @@ import com.zhongzheng.modules.exam.bo.ExamNumberGoodsQueryBo;
 import com.zhongzheng.modules.exam.vo.ExamNumberGoodsVo;
 import com.zhongzheng.modules.goods.bo.*;
 import com.zhongzheng.modules.goods.domain.Goods;
-import com.zhongzheng.modules.goods.vo.GoodsListAllVo;
-import com.zhongzheng.modules.goods.vo.GoodsSpecTemplateVo;
-import com.zhongzheng.modules.goods.vo.GoodsVo;
-import com.zhongzheng.modules.goods.vo.UserGoodsListVo;
+import com.zhongzheng.modules.goods.vo.*;
 import com.zhongzheng.modules.grade.vo.SyncGoodsExport;
 
 import java.util.Collection;
@@ -146,4 +143,6 @@ public interface IGoodsService extends IService<Goods> {
 	String getGoodsBusinessName(Long goodsId);
 
 	String getBusinessName(Long goodsId);
+
+	List<UserOrderGoodsListVo> getUserOrderGoods(UserGoodsListBo bo);
 }

+ 83 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -43,10 +43,12 @@ import com.zhongzheng.modules.goods.domain.*;
 import com.zhongzheng.modules.goods.mapper.GoodsMapper;
 import com.zhongzheng.modules.goods.service.*;
 import com.zhongzheng.modules.goods.vo.*;
+import com.zhongzheng.modules.grade.domain.ClassGrade;
 import com.zhongzheng.modules.grade.domain.ClassGradeGoods;
 import com.zhongzheng.modules.grade.domain.ClassGradeInterface;
 import com.zhongzheng.modules.grade.service.IClassGradeGoodsService;
 import com.zhongzheng.modules.grade.service.IClassGradeInterfaceService;
+import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.vo.ClassGradeVo;
 import com.zhongzheng.modules.grade.vo.SyncGoodsExport;
 import com.zhongzheng.modules.inform.domain.InformRemind;
@@ -66,6 +68,7 @@ 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;
@@ -134,6 +137,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
     @Autowired
     private IClassGradeGoodsService iClassGradeGoodsService;
     @Autowired
+    private IClassGradeService iClassGradeService;
+    @Autowired
     private ICourseMenuService iCourseMenuService;
     @Autowired
     private ICourseMenuExamService iCourseMenuExamService;
@@ -274,6 +279,9 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
     @Value("${oldStudySys.educationalInspector}")
     private String INFORM_PATH;
 
+    @Value("${liveGotoURL}")
+    private String URL_PREFIX;
+
     private static Logger log = LoggerFactory.getLogger(GoodsServiceImpl.class);
 
     @Override
@@ -620,8 +628,18 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                         .list(new LambdaQueryWrapper<ClassGradeGoods>()
                         .eq(ClassGradeGoods::getGoodsId, oneGoods.getGoodsId()));
                 if (CollectionUtils.isNotEmpty(classGradeList)){
-                    classGradeList.forEach(item -> item.setGoodsId(goodsId));
-                    iClassGradeGoodsService.saveBatch(classGradeList);
+                    List<ClassGrade> list = iClassGradeService.listByIds(classGradeList.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                    list.forEach(item -> item.setGradeId(null));
+                    iClassGradeService.saveBatch(list);
+                    List<ClassGradeGoods> gradeGoodsList = list.stream().map(item -> {
+                        ClassGradeGoods gradeGoods = new ClassGradeGoods();
+                        gradeGoods.setGradeId(item.getGradeId());
+                        gradeGoods.setGoodsId(goodsId);
+                        gradeGoods.setUpdateTime(DateUtils.getNowTime());
+                        gradeGoods.setCreateTime(DateUtils.getNowTime());
+                        return gradeGoods;
+                    }).collect(Collectors.toList());
+                    iClassGradeGoodsService.saveBatch(gradeGoodsList);
                 }
             }
         }
@@ -1555,7 +1573,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                     CourseHandouts courseHandouts = iCourseHandoutsService.getById(goods.getHandoutsId());
                     if (ObjectUtil.isNotNull(courseHandouts)){
                         Long oid = courseHandouts.getHandoutsId();
-                        Long newId = getNewIdByTenant(oid, GoodsCopyEnum.COURSE_HANDOUTS.getType(),newTenantId);
+//                        Long newId = getNewIdByTenant(oid, GoodsCopyEnum.COURSE_HANDOUTS.getType(),newTenantId);
+                        Long newId = baseMapper.getNewHandoutsId(courseHandouts.getHandoutsName(),courseHandouts.getEncoder(),newTenantId);
                         if (ObjectUtil.isNull(newId)){
                             //讲义业务层次
                             List<CourseHandoutsBusiness> handoutsBusinessList = iCourseHandoutsBusinessService
@@ -5007,6 +5026,67 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return baseMapper.getBusinessName(goodsId);
     }
 
+    @Override
+    public List<UserOrderGoodsListVo> getUserOrderGoods(UserGoodsListBo bo) {
+        List<User> users = null;
+        if (StringUtils.isNotBlank(bo.getIdNum())){
+            users = iUserService.getUserByIdNumNotTenant(bo.getIdNum());
+        }
+        if (CollectionUtils.isEmpty(users)){
+            users = iUserService.getUserByTelNotTenant(bo.getTelphone());
+        }
+        if (CollectionUtils.isEmpty(users)) {
+            throw new CustomException("用户信息获取有误:"+JSONObject.toJSONString(bo));
+        }
+        //获取用户订单商品信息
+        List<UserOrderGoodsListVo> voList = new ArrayList<>();
+        users.forEach(item -> {
+            List<UserOrderGoodsListVo> orderGoodsListByUser = baseMapper.getUserOrderGoodsList(item.getUserId());
+            voList.addAll(orderGoodsListByUser);
+        });
+
+        if (CollectionUtils.isEmpty(voList)) {
+            return new ArrayList<>();
+        }
+
+        for (UserOrderGoodsListVo goodsVo : voList) {
+            User user = users.stream().filter(x -> x.getTenantId().equals(goodsVo.getTenantId())).findFirst().orElse(null);
+            Long tenantId = goodsVo.getTenantId();
+            //缓存用户信息key
+            String key = String.format("KQTZ%s",user.getUserId());
+            SysTenant sysTenant = iSysTenantService.getById(tenantId);
+            //课程
+            String h5Url = "";
+            String pcUrl = "";
+            switch (goodsVo.getCourseType()){
+                case 1://视频
+                    h5Url = String.format("%s%s/pages/learn/index?skipPort=%s", URL_PREFIX, sysTenant.getHostH5(),key);
+                    pcUrl = String.format("%s%s/pages/learn/index?skipPort=%s", URL_PREFIX, sysTenant.getHostH5(),key);
+                    break;
+                case 2://题库
+                    h5Url = String.format("%s%s/pages/questionBank/index?skipPort=%s", URL_PREFIX, sysTenant.getHostH5(),key);
+                    pcUrl = String.format("%s%s/pages/learn/index?skipPort=%s", URL_PREFIX, sysTenant.getHostH5(),key);
+                    break;
+                case 6://视频
+                    h5Url = String.format("%s%s/pages/learn/index?skipPort=%s", URL_PREFIX, sysTenant.getHostH5(),key);
+                    pcUrl = String.format("%s%s/pages/learn/index?skipPort=%s", URL_PREFIX, sysTenant.getHostH5(),key);
+                    break;
+            }
+
+            goodsVo.setH5Url(h5Url);
+
+            UserPhoneBo phoneBo = new UserPhoneBo();
+            phoneBo.setTelphone(bo.getTelphone());
+            phoneBo.setTenantId(tenantId);
+            phoneBo.setIdNum(bo.getIdNum());
+
+            //缓存用户信息
+            redisCache.setCacheObjectTenant(tenantId+":"+key, JSONObject.toJSONString(phoneBo), 12, TimeUnit.HOURS);
+
+        }
+        return voList;
+    }
+
     private void updateHandoutsId(Long goodsId, Long tenantId, Long handoutsId) {
         baseMapper.updateHandoutsId(goodsId,tenantId,handoutsId);
     }

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserOrderGoodsListVo.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.goods.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2022年12月22日 9:35
+ */
+@Data
+public class UserOrderGoodsListVo implements Serializable {
+
+    @ApiModelProperty("商品Id")
+    private Long goodsId;
+
+    @ApiModelProperty("订单ID")
+    private Long orderId;
+
+    @ApiModelProperty("订单商品Id")
+    private Long orderGoodsId;
+
+    @ApiModelProperty("班级ID")
+    private Long gradeId;
+
+    @ApiModelProperty("课程类型")
+    private Integer courseType;
+
+    @ApiModelProperty("课程名称")
+    private String categoryName;
+
+    @ApiModelProperty("课程类型名称")
+    private String platformName;
+
+    @ApiModelProperty("专业名称")
+    private String majorName;
+
+    @ApiModelProperty("机构id")
+    private Long tenantId;
+
+    @ApiModelProperty("课程图片地址,已带域名")
+    private String imageUrl;
+
+    @ApiModelProperty("H5跳转路径")
+    private String h5Url;
+
+    @ApiModelProperty("pc跳转路径")
+    private String pcUrl;
+
+
+}

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

@@ -296,6 +296,9 @@ public class ClassGradeUserQueryBo extends BaseEntity {
 	@ApiModelProperty("周查询结束时间")
 	private Long searchWeekEndTime;
 
+	@ApiModelProperty("七大员继教班级关联code")
+	private String sevenCode;
+
 	private List<WeekDataVo> weekList;
 
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/ClassGrade.java

@@ -88,6 +88,9 @@ private static final long serialVersionUID=1L;
     /** 预报名官方编号 */
     private String registerCode;
 
+    /** 七大员继教班级关联code */
+    private String sevenCode;
+
     /** 企业ID */
     private Long tenantId;
 }

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

@@ -88,4 +88,11 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
     @InterceptorIgnore(tenantLine = "true")
     void UpGradeInterfaceByTenant(ClassGradeOpenUpBo upBo);
 
+    ClassGrade getSevenGrade(List<Long> gradeIds);
+
+    Long getStudeCountByCode(String sevenCode);
+
+    List<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo);
+
+    List<String> getSevenYearByCode(String sevenCode);
 }

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

@@ -106,4 +106,5 @@ public interface IClassGradeService extends IService<ClassGrade> {
 	List<ClassNpUserInfoVo> otherClassUserList(ClassNpUserInfoBo bo);
 
 
+	List<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo);
 }

+ 99 - 15
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.grade.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -181,7 +182,16 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     public ClassGradeVo queryById(Long gradeId) {
         ClassGradeQueryBo classGradeQueryBo = new ClassGradeQueryBo();
         classGradeQueryBo.setGradeId(gradeId);
-        return entity2Vo(baseMapper.queryList(classGradeQueryBo)).get(0);
+        ClassGradeVo vo = entity2Vo(baseMapper.queryList(classGradeQueryBo)).get(0);
+        if (ObjectUtil.isNotNull(vo) && StringUtils.isNotBlank(vo.getSevenCode())){
+            //七大员继教班级 获取年份
+            List<String> years = baseMapper.getSevenYearByCode(vo.getSevenCode());
+            if (CollectionUtils.isNotEmpty(years)){
+                vo.setSevenYear(years.stream().collect(Collectors.joining(",")));
+            }
+
+        }
+        return vo;
     }
 
 
@@ -289,23 +299,30 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         //七大员继教班级默认学时推送和报名推送
         if (bo.getClassGradeGoodsAddBos() != null ) {
             Long goodsId = bo.getClassGradeGoodsAddBos()[0];
+            Goods goods = iGoodsService.getById(goodsId);
             String businessName = iGoodsService.getGoodsBusinessName(goodsId);
+            //2021 和 2022 年的课程不在祥粤学习
             if (businessName.contains("继续教育") && businessName.contains("施工现场专业人员")) {
-                List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
-                        .list(new LambdaQueryWrapper<ClassGradeInterface>()
-                        .in(ClassGradeInterface::getType, Arrays.asList(1, 3))
-                        .eq(ClassGradeInterface::getStatus, 1));
-                if (CollectionUtils.isNotEmpty(interfaceList)){
-                    interfaceList.forEach(item -> {
-                        if (item.getType() == 1){
-                            //官方信息推送
-                            add.setInterfacePushId(item.getId());
-                        }else if (item.getType() == 3){
-                            //学时推送
-                            add.setInterfacePeriodId(item.getId());
-                        }
-                    });
+                String sevenYear = goods.getSevenYear();
+                if (!Arrays.asList("2021,2022").contains(sevenYear)){
+                    List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
+                            .list(new LambdaQueryWrapper<ClassGradeInterface>()
+                                    .in(ClassGradeInterface::getType, Arrays.asList(1, 3))
+                                    .eq(ClassGradeInterface::getStatus, 1));
+                    if (CollectionUtils.isNotEmpty(interfaceList)){
+                        interfaceList.forEach(item -> {
+                            if (item.getType() == 1){
+                                //官方信息推送
+                                add.setInterfacePushId(item.getId());
+                            }else if (item.getType() == 3){
+                                //学时推送
+                                add.setInterfacePeriodId(item.getId());
+                            }
+                        });
+                    }
                 }
+                String sevenCode = getSevenCode(goodsId);
+                add.setSevenCode(sevenCode);
             }
         }
         //是否创建官方班级编号
@@ -436,6 +453,32 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return save;
     }
 
+    private String getSevenCode(Long goodsId) {
+        Goods g = iGoodsService.getById(goodsId);
+        Goods oneGoods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>()
+                .eq(Goods::getEducationTypeId, g.getEducationTypeId())
+                .eq(Goods::getProjectId, g.getProjectId())
+                .eq(Goods::getBusinessId, g.getBusinessId())
+                .eq(ObjectUtils.isNotNull(g.getMajorId()), Goods::getMajorId, g.getMajorId())
+                .eq(Goods::getSubjectIds, g.getSubjectIds())
+                .eq(Goods::getStatus, 1)
+                .eq(Goods::getGoodsStatus,1)
+                .ne(Goods::getGoodsId, goodsId)
+                .last("limit 1"));
+        if (ObjectUtils.isNotNull(oneGoods)){
+            List<ClassGradeGoods> classGradeList = iClassGradeGoodsService
+                    .list(new LambdaQueryWrapper<ClassGradeGoods>()
+                            .eq(ClassGradeGoods::getGoodsId, oneGoods.getGoodsId()));
+            if (CollectionUtils.isNotEmpty(classGradeList)){
+                ClassGrade classGrade = baseMapper.getSevenGrade(classGradeList.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                if (ObjectUtils.isNotNull(classGrade)){
+                    return classGrade.getSevenCode();
+                }
+            }
+        }
+        return ServletUtils.getEncoded("SEV");
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean updateByEditBo(ClassGradeEditBo bo) {
@@ -557,6 +600,28 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             sendClassSMS(classGradeVo);
         }
         this.updateById(update);
+        if (fullName.contains("继续教育") && fullName.contains("施工现场专业人员") && StringUtils.isNotBlank(classGradeVo.getSevenCode())){
+            List<ClassGrade> list = list(new LambdaQueryWrapper<ClassGrade>()
+                    .eq(ClassGrade::getSevenCode, classGradeVo.getSevenCode())
+                    .ne(ClassGrade::getGradeId,update.getGradeId()));
+            if (CollectionUtils.isNotEmpty(list)){
+                List<ClassGrade> collect = list.stream().filter(item -> {
+                    ClassGradeGoods classGradeGoods = iClassGradeGoodsService
+                            .getOne(new LambdaQueryWrapper<ClassGradeGoods>()
+                                    .eq(ClassGradeGoods::getGradeId, item.getGradeId())
+                                    .last("limit 1"));
+                    Goods goodsOne = iGoodsService.getById(classGradeGoods.getGoodsId());
+                    return StringUtils.isNotBlank(goodsOne.getSevenYear()) && !Arrays.asList("2021", "2022").contains(goodsOne.getSevenYear());
+                }).collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(collect)){
+                    List<ClassGrade> collect1 = list.stream().map(item -> {
+                        update.setGradeId(item.getGradeId());
+                        return update;
+                    }).collect(Collectors.toList());
+                    updateBatchById(collect1);
+                }
+            }
+        }
 
         ClassGrade grade = getById(update.getGradeId());
         if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && org.getShareClass() == 1) {
@@ -1186,6 +1251,12 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 throw new CustomException("同步查询班级人数请求错误" + e.getMessage());
             }
             numAll = peopleNum + oldGradeNum;
+        } else if (Validator.isNotEmpty(gradeVo) && Validator.isNotEmpty(gradeVo.getSevenCode())){
+            //七大员继教
+            Long num = baseMapper.getStudeCountByCode(gradeVo.getSevenCode());
+            if (ObjectUtils.isNotNull(num)) {
+                numAll = num.intValue();
+            }
         } else {
             Long num = baseMapper.getClassUserNumByTenant(gradeId);
             if (ObjectUtils.isNotNull(num)) {
@@ -1468,6 +1539,19 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return result;
     }
 
+    @Override
+    public List<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo) {
+        List<ClassGradeVo> classGradeVos = entity2Vo(baseMapper.searchGradeList(bo));
+        if (CollectionUtils.isEmpty(classGradeVos)) {
+            return new ArrayList<>();
+        }
+        classGradeVos.forEach(item -> {
+            //获取班级总人数
+            item.setStudentNumAll(getClassUserNumAll(item.getGradeId()));
+        });
+        return classGradeVos;
+    }
+
     //创建预开班班级
     private void creatClass(List<Long> goodsIds, Long tenantId, String code) {
         goodsIds.forEach(goodsId -> {

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

@@ -200,4 +200,10 @@ public class ClassGradeVo {
 
 	@ApiModelProperty("七大员继教年份")
 	private String sevenYear;
+
+	@ApiModelProperty("七大员继教班级关联code")
+	private String sevenCode;
+
+	@ApiModelProperty("七大员继教班级年份")
+	private String sevenYears;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java

@@ -45,4 +45,8 @@ public interface OrderMapper extends BaseMapper<Order> {
     List<Long> getUserGoods(@Param("userId") Long userId);
 
     List<String> queryBusinessFullNameBySn(@Param("orderSn") String orderSn);
+
+    ClassGrade getSevenGrade(List<Long> gradeIds);
+
+    Integer getStudeCountByCode(String sevenCode);
 }

+ 74 - 17
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -521,7 +521,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             orderGoods.setDept(bo.getOrderBusiness().getDept());
             orderGoods.setSource(bo.getOrderBusiness().getSource());
             orderGoods.setSchool(bo.getOrderBusiness().getSchool());
-
+            if (StringUtils.isNotBlank(goods.getSevenYear())){
+                orderGoods.setSevenYear(goods.getSevenYear());
+            }
             //收货公司信息
             orderGoods.setAddress(bo.getOrderStudent().getAddress());
             orderGoods.setCompany(bo.getOrderStudent().getCompany());
@@ -676,6 +678,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (g.getGoodsReceived().compareTo(g.getGoodsRealPrice()) == 1) {
                 throw new CustomException("已收费大于成交价", 510);
             }
+            if (StringUtils.isNotBlank(goods.getSevenYear())){
+                orderGoods.setSevenYear(goods.getSevenYear());
+            }
             //成交价
             orderGoods.setGoodsRealPrice(g.getGoodsRealPrice());
             orderGoods.setGoodsYear(goods.getYear().toString());
@@ -1019,6 +1024,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (g.getGoodsInputData() != null) {
                 orderGoods.setGoodsInputData(JSON.toJSONString(g.getGoodsInputData()));
             }
+            if (StringUtils.isNotBlank(goods.getSevenYear())){
+                orderGoods.setSevenYear(goods.getSevenYear());
+            }
             //赋值业务信息
            /* orderGoods.setBusinessOwner(bo.getOrderBusiness().getBusinessOwner());
             orderGoods.setDept(bo.getOrderBusiness().getDept());
@@ -1429,6 +1437,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (g.getGoodsInputData() != null) {
                 orderGoods.setGoodsInputData(JSON.toJSONString(g.getGoodsInputData()));
             }
+            if (StringUtils.isNotBlank(goods.getSevenYear())){
+                orderGoods.setSevenYear(goods.getSevenYear());
+            }
             //赋值业务信息
            /* orderGoods.setBusinessOwner(bo.getOrderBusiness().getBusinessOwner());
             orderGoods.setDept(bo.getOrderBusiness().getDept());
@@ -1633,6 +1644,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (g.getGoodsInputData() != null) {
                 orderGoods.setGoodsInputData(JSON.toJSONString(g.getGoodsInputData()));
             }
+            if (StringUtils.isNotBlank(goods.getSevenYear())){
+                orderGoods.setSevenYear(goods.getSevenYear());
+            }
             //赋值业务信息
            /* orderGoods.setBusinessOwner(bo.getOrderBusiness().getBusinessOwner());
             orderGoods.setDept(bo.getOrderBusiness().getDept());
@@ -2252,6 +2266,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             throw new CustomException("该学员已在此商品有效期内的班级,无法加入新的有效期班级,请查看该学员此商品下的班级");
         }*/
         OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
+        String businessFull = iGoodsService.getGoodsBusinessName(goodsId);
         //指定班级
         if (gradeId != null && gradeId > 0) {
             ClassGradeVo classGradeVo = iClassGradeService.queryById(gradeId);
@@ -2266,18 +2281,25 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (gradeGoods == null) {
                 throw new CustomException("该班级不支持该商品使用");
             }
-            LambdaQueryWrapper<ClassGradeUser> lqw = new LambdaQueryWrapper<>();
-            lqw.eq(ClassGradeUser::getGradeId, gradeId);
-            lqw.eq(ClassGradeUser::getStatus, 1);
-            int studentNum = iClassGradeUserService.count(lqw);
-            //临时锁定的班级学员数量
-            LambdaQueryWrapper<ClassGradeUserTemp> lqwLock = new LambdaQueryWrapper<>();
-            lqwLock.eq(ClassGradeUserTemp::getGradeId, gradeId);
-            lqwLock.eq(ClassGradeUserTemp::getStatus, 1);
-            int locakStudentNum = iClassGradeUserTempService.count(lqwLock);
 
+            int locakStudentNum = 0;
+            if (businessFull.contains("继续教育") && businessFull.contains("施工现场专业人员")){
+                locakStudentNum = baseMapper.getStudeCountByCode(classGradeVo.getSevenCode());
+            }else {
+                LambdaQueryWrapper<ClassGradeUser> lqw = new LambdaQueryWrapper<>();
+                lqw.eq(ClassGradeUser::getGradeId, gradeId);
+                lqw.eq(ClassGradeUser::getStatus, 1);
+                int studentNum = iClassGradeUserService.count(lqw);
+                //临时锁定的班级学员数量
+                LambdaQueryWrapper<ClassGradeUserTemp> lqwLock = new LambdaQueryWrapper<>();
+                lqwLock.eq(ClassGradeUserTemp::getGradeId, gradeId);
+                lqwLock.eq(ClassGradeUserTemp::getStatus, 1);
+                int count = iClassGradeUserTempService.count(lqwLock);
+                locakStudentNum = studentNum+count;
+
+            }
             //预留0空位避免超人数
-            if ((classGradeVo.getStudentUpper() - studentNum - locakStudentNum) > 0) {
+            if ((classGradeVo.getStudentUpper() - locakStudentNum) > 0) {
                 ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getGradeId, gradeId)
                         .eq(ClassGradeUser::getOrderGoodsId,orderGoodsId)
                         .eq(ClassGradeUser::getUserId, userId));
@@ -2299,13 +2321,20 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         List<ClassGradeVo> classGradeVoList = iClassGradeService.queryList(bo);
         for (int i = 0; i < classGradeVoList.size(); i++) {
             ClassGradeVo classGradeVo = classGradeVoList.get(i);
-            //临时锁定的班级学员数量
-            LambdaQueryWrapper<ClassGradeUserTemp> lqwLock = new LambdaQueryWrapper<>();
-            lqwLock.eq(ClassGradeUserTemp::getGradeId, classGradeVo.getGradeId());
-            lqwLock.eq(ClassGradeUserTemp::getStatus, 1);
-            int locakStudentNum = iClassGradeUserTempService.count(lqwLock);
+            int locakStudentNum = 0;
+            if (businessFull.contains("继续教育") && businessFull.contains("施工现场专业人员")){
+                locakStudentNum = baseMapper.getStudeCountByCode(classGradeVo.getSevenCode());
+            }else {
+                //临时锁定的班级学员数量
+                LambdaQueryWrapper<ClassGradeUserTemp> lqwLock = new LambdaQueryWrapper<>();
+                lqwLock.eq(ClassGradeUserTemp::getGradeId, classGradeVo.getGradeId());
+                lqwLock.eq(ClassGradeUserTemp::getStatus, 1);
+                int count = iClassGradeUserTempService.count(lqwLock);
+                locakStudentNum = classGradeVo.getStudentNum() + count;
+            }
+
             //预留0空位避免超人数
-            if ((classGradeVo.getStudentUpper() - classGradeVo.getStudentNum() - locakStudentNum) > 0) {
+            if ((classGradeVo.getStudentUpper() - locakStudentNum) > 0) {
                 //有空位则进入班级
                 gradeId = classGradeVo.getGradeId();
                 //班级还有剩位,直接锁定班级
@@ -2350,6 +2379,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                         }
                     });
                 }
+                String sevenCode = getSevenCode(goodsId);
+                classGrade.setSevenCode(sevenCode);
             }else {
                 classGrade.setStudentUpper(ClassGrade.INIT_UPPER); //上限300
             }
@@ -2418,6 +2449,32 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return true;
     }
 
+    private String getSevenCode(Long goodsId) {
+        Goods g = iGoodsService.getById(goodsId);
+        Goods oneGoods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>()
+                .eq(Goods::getEducationTypeId, g.getEducationTypeId())
+                .eq(Goods::getProjectId, g.getProjectId())
+                .eq(Goods::getBusinessId, g.getBusinessId())
+                .eq(ObjectUtils.isNotNull(g.getMajorId()), Goods::getMajorId, g.getMajorId())
+                .eq(Goods::getSubjectIds, g.getSubjectIds())
+                .eq(Goods::getStatus, 1)
+                .eq(Goods::getGoodsStatus,1)
+                .ne(Goods::getGoodsId, goodsId)
+                .last("limit 1"));
+        if (ObjectUtils.isNotNull(oneGoods)){
+            List<ClassGradeGoods> classGradeList = iClassGradeGoodsService
+                    .list(new LambdaQueryWrapper<ClassGradeGoods>()
+                            .eq(ClassGradeGoods::getGoodsId, oneGoods.getGoodsId()));
+            if (CollectionUtils.isNotEmpty(classGradeList)){
+                ClassGrade classGrade = baseMapper.getSevenGrade(classGradeList.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                if (ObjectUtils.isNotNull(classGrade)){
+                    return classGrade.getSevenCode();
+                }
+            }
+        }
+        return ServletUtils.getEncoded("SEV");
+    }
+
     @Override
     public Map<String, String> getActivityGoods(OrderAddBo bo) {
         String key = "ORDER-" + "-" + bo.getUserId();

+ 25 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml

@@ -762,6 +762,27 @@
           AND og.refund_status !=2
     </select>
 
+    <select id="getUserOrderGoodsList" parameterType="Long"
+            resultType="com.zhongzheng.modules.goods.vo.UserOrderGoodsListVo">
+        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,
@@ -946,6 +967,10 @@
         UPDATE goods SET handouts_id = #{handoutsId} WHERE goods_id = #{goodsId} and tenant_id = #{tenantId}
     </update>
 
+    <select id="getNewHandoutsId" parameterType="map" resultType="java.lang.Long">
+        SELECT * FROM course_handouts WHERE INSTR(handouts_name,#{handoutsName}) AND encoder = #{encoder} AND tenant_id = #{newTenantId}
+    </select>
+
     <select id="getGoodsBusinessName" parameterType="java.lang.Long" resultType="java.lang.String">
         SELECT
             CONCAT( cet.education_name, cb.business_name, cpt.project_name )

+ 209 - 12
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml

@@ -59,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="businessId" column="business_id"/>
         <result property="projectId" column="project_id"/>
         <result property="goodsId" column="goods_id"/>
+        <result property="sevenCode" column="seven_code"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.grade.vo.ClassGradeUserListVo" id="ClassGradeUserListVo">
@@ -230,6 +231,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="queryList" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeQueryBo" resultMap="ClassGradeVoResult">
         SELECT
             g.*,
+            d.goods_id,
             (SELECT name FROM class_grade_interface i where g.interface_push_id = i.id) as interface_push_name,
             (SELECT name FROM class_grade_interface i where g.interface_account_id = i.id) as interface_account_name,
             (SELECT name FROM class_grade_interface i where g.interface_period_id = i.id) as interface_period_name,
@@ -341,16 +343,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             ) >0
         </if>
         <if test="goodsId != null and goodsId !='' ">
-            AND (
-            SELECT
-            COUNT(*)
-            FROM
-            class_grade_goods s
-            WHERE
-            1 = 1
-            AND g.grade_id = s.grade_id
-            AND s.goods_id =#{goodsId}
-            ) >0
+            AND d.goods_id = #{goodsId}
+        </if>
+        <if test="goodsIds != null and goodsIds.size()!=0 ">
+            AND d.goods_id in
+            <foreach collection="goodsIds" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
         </if>
         <if test="hasInterface != null and hasInterface == 0">
             AND g.interface_account_id is null AND g.no_interface_account_id is null
@@ -453,8 +452,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN user_wx_follow uwf ON u.union_id = uwf.union_id
         LEFT JOIN user_exam_goods ueg ON ueg.order_goods_id = og.order_goods_id
         where 1=1
-
-        <if test="gradeId != null and gradeId !='' ">
+        <if test="sevenCode != null and sevenCode !='' ">
+            AND cg.seven_code = #{sevenCode}
+        </if>
+        <if test="gradeId != null and gradeId !='' and (sevenCode == null or sevenCode =='')">
           and cgu.grade_id = #{gradeId}
         </if>
         <if test="choice != null and choice == 1 ">
@@ -1089,4 +1090,200 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         update class_grade set interface_push_id = #{interfacePushId} where grade_id = #{gradeId}
     </update>
 
+    <select id="getSevenGrade" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.grade.domain.ClassGrade">
+        SELECT *
+        FROM class_grade cg
+        WHERE cg.`status` = 1 AND (
+        (SELECT COUNT(DISTINCT cgu.user_id) FROM class_grade_user cgu WHERE cg.grade_id = cgu.grade_id AND cgu.`status` = 1 AND cgu.change_grade = 0) +
+        (SELECT COUNT(DISTINCT cgut.user_id) FROM class_grade_user_temp cgut WHERE cg.grade_id = cgut.grade_id AND cgut.`status` = 1 )
+        ) <![CDATA[   <  ]]> cg.student_upper AND cg.grade_id IN
+        <foreach collection="gradeIds" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        LIMIT 1
+    </select>
+
+    <select id="getStudeCountByCode" resultType="java.lang.Long" parameterType="java.lang.String">
+        SELECT SUM(
+                           (SELECT COUNT(DISTINCT cgu.user_id) FROM class_grade_user cgu WHERE cgu.grade_id = cg.grade_id AND cgu.`status` = 1 AND cgu.change_grade = 0) +
+                           (SELECT COUNT(DISTINCT cgut.user_id) FROM class_grade_user_temp cgut WHERE cgut.grade_id = cg.grade_id AND cgut.`status` = 1 )
+                   ) as num FROM class_grade cg
+        WHERE cg.`status` = 1 AND  cg.seven_code = #{sevenCode}
+    </select>
+
+    <select id="searchGradeList" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeQueryBo" resultType="com.zhongzheng.modules.grade.vo.ClassGradeVo">
+        SELECT
+        *
+        FROM
+        (
+        SELECT DISTINCT
+        g.grade_id,
+        g.class_name,
+        g.create_time,
+        g.class_status,
+        d.goods_name,
+        g.official_name,
+        g.seven_code,
+        g.student_upper,
+        g.class_start_time,
+        g.class_end_time,
+        g.learning_status,
+        (SELECT COUNT(a.id) FROM class_grade_user a where a.grade_id = g.grade_id and a.status =1) as student_num,
+        (
+        SELECT
+        GROUP_CONCAT( subject_name )
+        FROM
+        course_subject
+        WHERE
+        FIND_IN_SET( id, d.subject_ids )) subject_names
+        FROM
+        class_grade g
+        LEFT JOIN class_grade_goods cgg ON cgg.grade_id = g.grade_id
+        LEFT JOIN goods d ON cgg.goods_id = d.goods_id
+        LEFT JOIN course_business cb ON d.business_id = cb.id
+        WHERE
+            g.seven_code IS NULL
+        <if test="status != null and status.size()!=0 ">
+            AND g.status in
+            <foreach collection="status" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="searchKey != null and searchKey !='' ">
+            AND ((g.class_name like concat('%', #{searchKey}, '%')) or (
+            SELECT
+            COUNT(*)
+            FROM
+            class_grade_user cgu
+            LEFT JOIN `user` u ON cgu.user_id = u.user_id
+            WHERE
+            g.grade_id = cgu.grade_id
+            AND u.realname  like concat('%', #{searchKey}, '%')
+            ) >0 or (
+            SELECT
+            COUNT(*)
+            FROM
+            class_grade_goods s
+            LEFT JOIN goods d ON s.goods_id = d.goods_id
+            WHERE
+            g.grade_id = s.grade_id
+            AND d.goods_name  like concat('%', #{searchKey}, '%')
+            ) >0)
+        </if>
+        <if test="classStatus != null  ">
+            AND g.class_status =  #{classStatus}
+        </if>
+        <if test="atFull != null and atFull !='' ">
+            AND (SELECT COUNT(a.id) FROM class_grade_user a where a.grade_id = g.grade_id and a.status =1) &lt; g.student_upper
+        </if>
+        <if test="classStartTime != null and classStartTime != ''  and classEndTime != null and classEndTime != ''">
+            AND (#{classStartTime} BETWEEN g.class_start_time and g.class_end_time or #{classEndTime} BETWEEN g.class_start_time and g.class_end_time)
+        </if>
+        <if test="pastDue != null or pastDue != null ">
+            AND ((unix_timestamp(now())+10*24*3600) &lt; g.class_end_time or g.class_start_time is null)
+        </if>
+        <if test="educationTypeId != null and educationTypeId !='' ">
+            AND d.education_type_id = #{educationTypeId}
+        </if>
+        <if test="businessId != null and businessId !='' ">
+            AND cb.id = #{businessId}
+        </if>
+        <if test="majorId != null and majorId !='' ">
+            AND d.major_id = #{majorId}
+        </if>
+        UNION ALL
+        SELECT DISTINCT
+        g.grade_id,
+        g.class_name,
+        g.create_time,
+        g.class_status,
+        d.goods_name,
+        g.official_name,
+        g.seven_code,
+        g.student_upper,
+        g.class_start_time,
+        g.class_end_time,
+        g.learning_status,
+        (SELECT COUNT(c.id) FROM class_grade_user c where a.grade_id = c.grade_id and c.status =1) as student_num,
+        (
+        SELECT
+        GROUP_CONCAT( subject_name )
+        FROM
+        course_subject
+        WHERE
+        FIND_IN_SET( id, d.subject_ids )) subject_names
+        FROM
+        ( SELECT any_value ( grade_id ) AS grade_id FROM class_grade WHERE `status` != - 1 AND seven_code IS NOT NULL GROUP BY seven_code ) a
+        LEFT JOIN class_grade g ON a.grade_id = g.grade_id
+        LEFT JOIN class_grade_goods cgg ON cgg.grade_id = g.grade_id
+        LEFT JOIN goods d ON cgg.goods_id = d.goods_id
+        LEFT JOIN course_business cb ON d.business_id = cb.id
+        WHERE
+        1 = 1
+        <if test="status != null and status.size()!=0 ">
+            AND g.status in
+            <foreach collection="status" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="searchKey != null and searchKey !='' ">
+            AND ((g.class_name like concat('%', #{searchKey}, '%')) or (
+            SELECT
+            COUNT(*)
+            FROM
+            class_grade_user cgu
+            LEFT JOIN `user` u ON cgu.user_id = u.user_id
+            WHERE
+            g.grade_id = cgu.grade_id
+            AND u.realname  like concat('%', #{searchKey}, '%')
+            ) >0 or (
+            SELECT
+            COUNT(*)
+            FROM
+            class_grade_goods s
+            LEFT JOIN goods d ON s.goods_id = d.goods_id
+            WHERE
+            g.grade_id = s.grade_id
+            AND d.goods_name  like concat('%', #{searchKey}, '%')
+            ) >0)
+        </if>
+        <if test="classStatus != null  ">
+            AND g.class_status =  #{classStatus}
+        </if>
+        <if test="atFull != null and atFull !='' ">
+            AND (SELECT COUNT(a.id) FROM class_grade_user a where a.grade_id = g.grade_id and a.status =1) &lt; g.student_upper
+        </if>
+        <if test="classStartTime != null and classStartTime != ''  and classEndTime != null and classEndTime != ''">
+            AND (#{classStartTime} BETWEEN g.class_start_time and g.class_end_time or #{classEndTime} BETWEEN g.class_start_time and g.class_end_time)
+        </if>
+        <if test="pastDue != null or pastDue != null ">
+            AND ((unix_timestamp(now())+10*24*3600) &lt; g.class_end_time or g.class_start_time is null)
+        </if>
+        <if test="educationTypeId != null and educationTypeId !='' ">
+            AND d.education_type_id = #{educationTypeId}
+        </if>
+        <if test="businessId != null and businessId !='' ">
+            AND cb.id = #{businessId}
+        </if>
+        <if test="majorId != null and majorId !='' ">
+            AND d.major_id = #{majorId}
+        </if>
+        ) b
+        WHERE
+        1 = 1
+        ORDER BY
+        b.create_time DESC
+    </select>
+
+    <select id="getSevenYearByCode" resultType="java.lang.String" parameterType="java.lang.String">
+        SELECT DISTINCT
+            g.seven_year
+        FROM
+            class_grade cg
+                LEFT JOIN class_grade_goods cgg ON cg.grade_id = cgg.grade_id
+                LEFT JOIN goods g ON cgg.goods_id = g.goods_id
+        WHERE
+            cg.`status` != - 1
+	        AND cg.seven_code = #{sevenCode}
+    </select>
 </mapper>

+ 19 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml

@@ -468,4 +468,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 AND og.pay_status IN (2,3,4)
     </select>
 
+    <select id="getSevenGrade" resultType="java.lang.String" parameterType="java.lang.String">
+        SELECT * FROM class_grade cg
+        WHERE cg.`status` = 1 AND (
+                (SELECT COUNT(DISTINCT cgu.user_id) FROM class_grade_user cgu WHERE cgu.grade_id = cg.grade_id AND cgu.`status` = 1 AND cgu.change_grade = 0) +
+                (SELECT COUNT(DISTINCT cgut.user_id) FROM class_grade_user_temp cgut WHERE cgut.grade_id = cg.grade_id AND cgut.`status` = 1 )
+            ) <![CDATA[   <  ]]> cg.student_upper AND cg.grade_id IN
+        <foreach collection="gradeIds" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        LIMIT 1
+    </select>
+
+    <select id="getStudeCountByCode" resultType="java.lang.Integer" parameterType="java.lang.String">
+        SELECT SUM(
+                           (SELECT COUNT(DISTINCT cgu.user_id) FROM class_grade_user cgu WHERE cgu.grade_id = cg.grade_id AND cgu.`status` = 1 AND cgu.change_grade = 0) +
+                           (SELECT COUNT(DISTINCT cgut.user_id) FROM class_grade_user_temp cgut WHERE cgut.grade_id = cg.grade_id AND cgut.`status` = 1 )
+                   ) as num FROM class_grade cg
+        WHERE cg.`status` = 1 AND  cg.seven_code = #{sevenCode}
+    </select>
 </mapper>

+ 3 - 3
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

@@ -661,7 +661,7 @@
         a.id as question_id,
         e.exam_name as question_name,
         (SELECT s.subject_name FROM question_business b LEFT JOIN course_subject s on b.subject_id= s.id where b.type =2
-        and b.major_id =a.major_id) as subject_name,
+        and b.major_id =a.major_id LIMIT 1) as subject_name,
         0 as module_num,
         0 as chapter_num,
         1 as exam_num,
@@ -683,7 +683,7 @@
         a.id as question_id,
         c.`name` as question_name,
         (SELECT s.subject_name FROM question_business b LEFT JOIN course_subject s on b.subject_id= s.id where b.type =3
-        and b.major_id =a.major_id) as subject_name,
+        and b.major_id =a.major_id LIMIT 1) as subject_name,
         0 as module_num,
         1 as chapter_num,
         (SELECT COUNT(e.id) FROM question_chapter_exam e where c.chapter_exam_id=e.chapter_exam_id) as exam_num,
@@ -707,7 +707,7 @@
         a.id as question_id,
         c.module_name as question_name,
         (SELECT s.subject_name FROM question_business b LEFT JOIN course_subject s on b.subject_id= s.id where b.type =4
-        and b.major_id =a.major_id) as subject_name,
+        and b.major_id =a.major_id LIMIT 1) as subject_name,
         1 as module_num,
         (SELECT COUNT(e.id) FROM question_module_chapter e where c.module_exam_id=e.module_exam_id) as chapter_num,
         (SELECT COUNT(e.id) FROM question_chapter_exam e LEFT JOIN question_module_chapter r on e.chapter_exam_id =