yangdamao 2 жил өмнө
parent
commit
429ad3321b
21 өөрчлөгдсөн 172 нэмэгдсэн , 18 устгасан
  1. 2 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  2. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  3. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ShoppingCartVo.java
  4. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserTempQueryBo.java
  5. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/ClassGradeUserTemp.java
  6. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  7. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  8. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  9. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  10. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserTempServiceImpl.java
  11. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeVo.java
  12. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderGoodsMapper.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsService.java
  14. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java
  15. 76 13
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  16. 4 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  17. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java
  18. 2 0
      zhongzheng-system/src/main/resources/mapper/modules/base/ShoppingCartMapper.xml
  19. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  20. 15 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  21. 18 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml

+ 2 - 1
zhongzheng-api/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -80,7 +80,8 @@ public class ClassGradeController extends BaseController {
     @ApiOperation("获取班级详细信息")
     @GetMapping("/{classId}")
     public AjaxResult<ClassGradeVo> getInfo(@PathVariable("classId") Long classId) {
-        return AjaxResult.success(iClassGradeService.queryById(classId));
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        return AjaxResult.success(iClassGradeService.queryClassById(classId,loginUser.getUser().getUserId()));
     }
 
     /**

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

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
@@ -162,7 +163,10 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         studyRecordQueryBo.setGradeId(bo.getGradeId());
         UserStudyRecordVo studyRecordVo = iUserStudyRecordService.queryLast(studyRecordQueryBo);
         //获取培训结束时间
-        ClassGradeUser classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId, bo.getUserId()).eq(ClassGradeUser::getGradeId,bo.getGradeId()).last("limit 1"));
+        ClassGradeUser classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
+                .eq(ClassGradeUser::getUserId, bo.getUserId())
+                .eq(ObjectUtils.isNotNull(bo.getOrderGoodsId()),ClassGradeUser::getOrderGoodsId, bo.getOrderGoodsId())
+                .eq(ClassGradeUser::getGradeId,bo.getGradeId()).last("limit 1"));
         //获取章列表
         List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(bo);
         UserVo userVo = iUserService.queryById(bo.getUserId());

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ShoppingCartVo.java

@@ -70,4 +70,6 @@ public class ShoppingCartVo {
 	private Integer choiceStatus;
 	@ApiModelProperty("班级列表")
 	private List<ClassGradeVo> gradeList;
+	@ApiModelProperty("七大员继教可选年份")
+	private String sevenYear;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserTempQueryBo.java

@@ -54,4 +54,6 @@ public class ClassGradeUserTempQueryBo extends BaseEntity {
 	/** 订单编号 */
 	@ApiModelProperty("订单编号")
 	private String orderSn;
+	@ApiModelProperty("七大员继教商品年份")
+	private String sevenYear;
 }

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

@@ -48,4 +48,6 @@ private static final long serialVersionUID=1L;
     private Long goodsId;
     /** 订单编号 */
     private String orderSn;
+    /** 七大员继教商品年份 */
+    private String sevenYear;
 }

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

@@ -7,6 +7,7 @@ import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.domain.ClassGrade;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.grade.vo.*;
+import com.zhongzheng.modules.order.domain.OrderGoods;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
@@ -86,4 +87,6 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 
     @InterceptorIgnore(tenantLine = "true")
     void UpGradeInterfaceByTenant(ClassGradeOpenUpBo upBo);
+
+    OrderGoods getOrderGoodsByClassId(@Param("gradeId") Long gradeId,@Param("userId") Long userId);
 }

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

@@ -23,6 +23,8 @@ public interface IClassGradeService extends IService<ClassGrade> {
 	 */
 	ClassGradeVo queryById(Long classId);
 
+	ClassGradeVo queryClassById(Long classId, Long userId);
+
 	/**
 	 * 查询列表
 	 */
@@ -104,4 +106,6 @@ public interface IClassGradeService extends IService<ClassGrade> {
 	void openOfficialGrade(ClassGradeOpenBo bo);
 
 	List<ClassNpUserInfoVo> otherClassUserList(ClassNpUserInfoBo bo);
+
+
 }

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

@@ -41,7 +41,9 @@ import com.zhongzheng.modules.inform.service.IInformRemindService;
 import com.zhongzheng.modules.inform.service.IInformUserService;
 import com.zhongzheng.modules.inform.vo.InformRemindBusinessVo;
 import com.zhongzheng.modules.inform.vo.InformRemindVo;
+import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.mapper.OrderMapper;
+import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.system.domain.SysOldOrg;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysOldOrgService;
@@ -154,6 +156,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Autowired
     private ISysOldOrgService sysOldOrgService;
 
+    @Autowired
+    private IOrderGoodsService iOrderGoodsService;
+
     @Autowired
     private com.zhongzheng.modules.alisms.service.IAliSmsService IAliSmsService;
 
@@ -179,6 +184,19 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return entity2Vo(baseMapper.queryList(classGradeQueryBo)).get(0);
     }
 
+    @Override
+    public ClassGradeVo queryClassById(Long gradeId,Long userId) {
+        ClassGradeQueryBo classGradeQueryBo = new ClassGradeQueryBo();
+        classGradeQueryBo.setGradeId(gradeId);
+        ClassGradeVo vo = entity2Vo(baseMapper.queryList(classGradeQueryBo)).get(0);
+        //七大员继教年份
+        OrderGoods orderGoods = baseMapper.getOrderGoodsByClassId(gradeId,userId);
+        if (ObjectUtils.isNotNull(orderGoods)){
+            vo.setSevenYear(orderGoods.getSevenYear());
+        }
+        return vo;
+    }
+
     @Override
     @DataScope(businessAlias = "cb")
     public List<ClassGradeVo> queryList(ClassGradeQueryBo bo) {

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -693,7 +693,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         ClassGradeUser classGradeUser = null;
         ClassGrade grade = null;
         for (ClassGrade classGrade : classGradeList) {
-            classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getGradeId, classGrade.getGradeId()).eq(ClassGradeUser::getUserId, user.getUserId()).last("limit 1"));
+            classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
+                    .eq(ClassGradeUser::getGradeId, classGrade.getGradeId())
+                    .eq(ClassGradeUser::getUserId, user.getUserId()).last("limit 1"));
             if (Validator.isNotEmpty(classGradeUser)) {
                 grade = classGrade;
                 break;

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

@@ -45,6 +45,7 @@ public class ClassGradeUserTempServiceImpl extends ServiceImpl<ClassGradeUserTem
         lqw.eq(bo.getStatus() != null, ClassGradeUserTemp::getStatus, bo.getStatus());
         lqw.eq(bo.getFromType() != null, ClassGradeUserTemp::getFromType, bo.getFromType());
         lqw.eq(StrUtil.isNotBlank(bo.getOrderSn()), ClassGradeUserTemp::getOrderSn, bo.getOrderSn());
+        lqw.eq(StrUtil.isNotBlank(bo.getSevenYear()), ClassGradeUserTemp::getSevenYear, bo.getSevenYear());
         return entity2Vo(this.list(lqw));
     }
 

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

@@ -197,4 +197,7 @@ public class ClassGradeVo {
 	private Long goodsId;
 	@ApiModelProperty("用户ID")
 	private Long userId;
+
+	@ApiModelProperty("七大员继教年份")
+	private String sevenYear;
 }

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

@@ -70,4 +70,6 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
     List<OrderGoods> getApplyOrderGoods(@Param("goodsIds")List<Long> goodsIds,@Param("userId") Long userId);
 
     OrderGoods getSevenLastOne(@Param("projectId")Integer projectId,@Param("sevenYear")String sevenYear,@Param("userId")Long userId);
+
+    Long countOrderGoodsByYear(@Param("sevenYear") String sevenYear,@Param("goodsId") Long goodsId,@Param("userId") Long userId);
 }

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

@@ -120,4 +120,6 @@ public interface IOrderGoodsService extends IService<OrderGoods> {
     List<OrderGoods> getApplyOrderGoods(List<Long> goodsIds, Long userId);
 
     OrderGoods getSevenLastOne(Integer projectId,String sevenYear,Long userId);
+
+    Long countOrderGoodsByYear(String sevenYear, Long goodsId, Long userId);
 }

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

@@ -729,6 +729,11 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         return baseMapper.getSevenLastOne(projectId,sevenYear,userId);
     }
 
+    @Override
+    public Long countOrderGoodsByYear(String sevenYear, Long goodsId, Long userId) {
+        return baseMapper.countOrderGoodsByYear(sevenYear, goodsId, userId);
+    }
+
     private boolean checkUnique(Long GoodsId,Long UserId) {
         ShoppingCart info = iShoppingCartService.getOne(new LambdaQueryWrapper<ShoppingCart>()
                 .eq(ShoppingCart::getUserId,UserId).eq(ShoppingCart::getGoodsId,GoodsId).last("limit 1"));

+ 76 - 13
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -478,6 +478,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (goods.getGoodsStatus() != 1) {
                 throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
+            //校验是否有重复商品
+            if (StringUtils.isNotBlank(g.getSevenYear())){
+                Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
+                }
+            }
             OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
             orderGoods.setOrderSn(out_trade_no);
             if (g.getGoodsInputData() != null) {
@@ -517,7 +524,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
                 Long gradeId = null;
                 //判断是否购买历史班级都过期
-                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId());
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId(),g.getSevenYear());
                 if (g.getGoodsInputData() != null) {
                     gradeId = g.getGoodsInputData().getGradeId();
                     if (Validator.isNotEmpty(oldOrderGoodsId)) {
@@ -619,6 +626,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (Validator.isEmpty(goods)) {
                 throw new CustomException("商品不存在", 510);
             }
+            //校验是否有重复商品
+            if (StringUtils.isNotBlank(g.getSevenYear())){
+                Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
+                }
+            }
 //            if (goods.getGoodsStatus() != 1) {
 //                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单", 510);
 //            }
@@ -658,7 +672,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
                 Long gradeId = null;
                 //判断是否购买历史班级都过期
-                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId());
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId(),g.getSevenYear());
                 if (g.getGoodsInputData() != null) {
                     gradeId = g.getGoodsInputData().getGradeId();
                     if (Validator.isNotEmpty(oldOrderGoodsId)) {
@@ -811,6 +825,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (goods.getGoodsStatus() != 1) {
                 throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
+            //校验是否有重复商品
+            if (StringUtils.isNotBlank(g.getSevenYear())){
+                Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
+                }
+            }
             body = "中正祥粤云-" + goods.getGoodsName();
             OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
             orderGoods.setOrderSn(out_trade_no);
@@ -882,7 +903,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 }
                 Long gradeId = null;
                 //判断是否购买历史班级都过期
-                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId());
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId(),g.getSevenYear());
                 if (g.getGoodsInputData() != null) {
                     gradeId = g.getGoodsInputData().getGradeId();
                     if (Validator.isNotEmpty(oldOrderGoodsId)) {
@@ -1204,6 +1225,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (goods.getGoodsStatus() != 1) {
                 throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
+            //校验是否有重复商品
+            if (StringUtils.isNotBlank(g.getSevenYear())){
+                Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
+                }
+            }
             body = "中正祥粤云-" + goods.getGoodsName();
             OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
             orderGoods.setOrderSn(out_trade_no);
@@ -1275,7 +1303,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 }
                 Long gradeId = null;
                 //判断是否购买历史班级都过期
-                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId());
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId(),g.getSevenYear());
                 if (g.getGoodsInputData() != null) {
                     gradeId = g.getGoodsInputData().getGradeId();
                     if (Validator.isNotEmpty(oldOrderGoodsId)) {
@@ -1390,6 +1418,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (goods.getGoodsStatus() != 1) {
                 throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
+            //校验是否有重复商品
+            if (StringUtils.isNotBlank(g.getSevenYear())){
+                Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
+                }
+            }
             body = "中正祥粤云-" + goods.getGoodsName();
             OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
             orderGoods.setOrderSn(out_trade_no);
@@ -1431,7 +1466,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 }
                 Long gradeId = null;
                 //判断是否购买历史班级都过期
-                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId());
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId(),g.getSevenYear());
                 if (g.getGoodsInputData() != null) {
                     gradeId = g.getGoodsInputData().getGradeId();
                     if (Validator.isNotEmpty(oldOrderGoodsId)) {
@@ -1926,7 +1961,21 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     }
 
     //检查是否允许重复购买视频商品
-    public boolean canBuyRepeatGoods(Long goodsId, Long userId) {
+    public boolean canBuyRepeatGoods(Long goodsId, Long userId,String sevenYear) {
+        String businessName = iGoodsService.getGoodsBusinessName(goodsId);
+        if (businessName.contains("继续教育") && businessName.contains("施工现场专业人员")){
+            //判断是否有锁定的班级
+            ClassGradeUserTempQueryBo gradeUserTempQueryBo = new ClassGradeUserTempQueryBo();
+            gradeUserTempQueryBo.setUserId(userId);
+            gradeUserTempQueryBo.setGoodsId(goodsId);
+            gradeUserTempQueryBo.setSevenYear(sevenYear);
+            gradeUserTempQueryBo.setStatus(ClassGradeUserTemp.STATUS_LOCK);
+            List<ClassGradeUserTempVo> list1 = iClassGradeUserTempService.queryList(gradeUserTempQueryBo);
+            if (list1 != null && list1.size() > 0) {
+                throw new CustomException("当前所购买商品,存在订单未支付", 510);
+            }
+            return true;
+        }
         //判断是否还有未过期的班级
         ClassGradeQueryBo bo = new ClassGradeQueryBo();
         bo.setUserId(userId);
@@ -1955,6 +2004,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     //检查是否购买过商品
     public boolean checkBuyGoods(Long goodsId, Long userId, Integer goodsType) {
+        String businessName = iGoodsService.getGoodsBusinessName(goodsId);
+        if (businessName.contains("继续教育") && businessName.contains("施工现场专业人员")){
+            return true;
+        }
         OrderGoodsQueryBo bo = new OrderGoodsQueryBo();
         bo.setUserId(userId);
         bo.setGoodsId(goodsId);
@@ -1986,6 +2039,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         if (classNum > 0){
             throw new CustomException("该学员已在此商品有效期内的班级,无法加入新的有效期班级,请查看该学员此商品下的班级");
         }*/
+        OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
         //指定班级
         if (gradeId != null && gradeId > 0) {
             ClassGradeVo classGradeVo = iClassGradeService.queryById(gradeId);
@@ -2013,12 +2067,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //预留0空位避免超人数
             if ((classGradeVo.getStudentUpper() - studentNum - locakStudentNum) > 0) {
                 ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getGradeId, gradeId)
+                        .eq(ClassGradeUser::getOrderGoodsId,orderGoodsId)
                         .eq(ClassGradeUser::getUserId, userId));
                 //不在此班级内
                 if (Validator.isEmpty(gradeUser)) {
                     //班级还有剩位,直接锁定班级
                     if (iClassGradeService.checkEjjjPeopleNumLimit(businessId, gradeId)) { //判断全系统平台二建班级人数是否超300
-                        return lockGrade(orderGoodsId, gradeId, userId, goodsId, orderSn);
+                        return lockGrade(orderGoodsId, gradeId, userId, goodsId, orderSn,orderGoods.getSevenYear());
                     }
 
                 }
@@ -2043,11 +2098,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 gradeId = classGradeVo.getGradeId();
                 //班级还有剩位,直接锁定班级
                 ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getGradeId, gradeId)
+                        .eq(ClassGradeUser::getOrderGoodsId,orderGoodsId)
                         .eq(ClassGradeUser::getUserId, userId));
                 //不在此班级内
                 if (Validator.isEmpty(gradeUser)) {
                     if (iClassGradeService.checkEjjjPeopleNumLimit(businessId, gradeId)) { //判断全系统平台二建班级人数是否超300
-                        return lockGrade(orderGoodsId, gradeId, userId, goodsId, orderSn);
+                        return lockGrade(orderGoodsId, gradeId, userId, goodsId, orderSn,orderGoods.getSevenYear());
                     }
                 }
             }
@@ -2133,7 +2189,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         classGradeGoods.setUpdateTime(DateUtils.getNowTime());
         iClassGradeGoodsService.save(classGradeGoods);
         //锁定班级
-        lockGrade(orderGoodsId, classGrade.getGradeId(), userId, goodsId, orderSn);
+        lockGrade(orderGoodsId, classGrade.getGradeId(), userId, goodsId, orderSn,orderGoods.getSevenYear());
         return true;
     }
 
@@ -2197,7 +2253,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 }
                 Long gradeId = null;
                 //判断是否购买历史班级都过期
-                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId());
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId(),g.getSevenYear());
                 if (g.getGoodsInputData() != null) {
                     gradeId = g.getGoodsInputData().getGradeId();
                     if (Validator.isNotEmpty(oldOrderGoodsId)) {
@@ -2370,7 +2426,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 throw new CustomException("该班级不支持该商品使用");
             }
             //判断用户是否在此班过
-            ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId, userId).eq(ClassGradeUser::getGradeId, gradeId).last("limit 1"));
+            ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
+                    .eq(ClassGradeUser::getUserId, userId)
+                    .eq(ObjectUtils.isNotNull(orderGoodsId),ClassGradeUser::getOrderGoodsId, orderGoodsId)
+                    .eq(ClassGradeUser::getGradeId, gradeId).last("limit 1"));
             if (Validator.isEmpty(gradeUser)) {
                 LambdaQueryWrapper<ClassGradeUser> lqw = new LambdaQueryWrapper<>();
                 lqw.eq(ClassGradeUser::getGradeId, gradeId);
@@ -2410,7 +2469,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 //有空位则进入班级
                 gradeId = classGradeVo.getGradeId();
                 //判断用户是否在此班过
-                ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId, userId).eq(ClassGradeUser::getGradeId, gradeId).last("limit 1"));
+                ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
+                        .eq(ObjectUtils.isNotNull(orderGoodsId),ClassGradeUser::getOrderGoodsId, orderGoodsId)
+                        .eq(ClassGradeUser::getUserId, userId)
+                        .eq(ClassGradeUser::getGradeId, gradeId).last("limit 1"));
                 if (Validator.isEmpty(gradeUser)) {
                     //班级还有剩位,直接加入班级
                     if (iClassGradeService.checkEjjjPeopleNumLimit(businessId, gradeId)) { //判断全系统平台二建班级人数是否超300
@@ -2525,7 +2587,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
      * @param orderSn
      * @return
      */
-    public boolean lockGrade(Long orderGoodsId, Long gradeId, Long userId, Long goodsId, String orderSn) {
+    public boolean lockGrade(Long orderGoodsId, Long gradeId, Long userId, Long goodsId, String orderSn,String sevenYear) {
         //锁定班级
         ClassGradeUserTemp classGradeUserTemp = new ClassGradeUserTemp();
         classGradeUserTemp.setUserId(userId);
@@ -2534,6 +2596,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         classGradeUserTemp.setFromType(1);
         classGradeUserTemp.setGoodsId(goodsId);
         classGradeUserTemp.setOrderSn(orderSn);
+        classGradeUserTemp.setSevenYear(sevenYear);
         classGradeUserTemp.setCreateTime(DateUtils.getNowTime());
         classGradeUserTemp.setUpdateTime(DateUtils.getNowTime());
         iClassGradeUserTempService.save(classGradeUserTemp);

+ 4 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -572,8 +572,10 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
             //发送课时完成
             //获取旧信息
             ClassGradeUser gradeUser =iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
-                    .eq(ClassGradeUser::getUserId,bo.getUserId()).eq(ClassGradeUser::getGradeId,bo.getGradeId()
-                    ).eq(ClassGradeUser::getStatus,1).eq(ClassGradeUser::getChangeGrade,0).eq(ClassGradeUser::getPeriodStatus,-1).last("limit 1"));
+                    .eq(ClassGradeUser::getUserId,bo.getUserId())
+                    .eq(ObjectUtils.isNotNull(bo.getOrderGoodsId()),ClassGradeUser::getOrderGoodsId, bo.getOrderGoodsId())
+                    .eq(ClassGradeUser::getGradeId,bo.getGradeId())
+                    .eq(ClassGradeUser::getStatus,1).eq(ClassGradeUser::getChangeGrade,0).eq(ClassGradeUser::getPeriodStatus,-1).last("limit 1"));
             //原本未审核才可进来
             if(Validator.isNotEmpty(gradeUser)&&gradeUser.getPeriodStatus()==-1){
                 //最新数据学完变为待审核

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java

@@ -1000,10 +1000,12 @@ public class WxPayServiceImpl implements IWxPayService {
     @Override
     public boolean joinLockGrade(String orderSn, Long goodsId, Long orderGoodsId) {
         GoodsVo goodsVo = iGoodsService.queryById(goodsId);
+        OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
         if (goodsVo.getGoodsType().equals(1)) {
             LambdaQueryWrapper<ClassGradeUserTemp> lqwLock = new LambdaQueryWrapper<>();
             lqwLock.eq(ClassGradeUserTemp::getOrderSn, orderSn);
             lqwLock.eq(ClassGradeUserTemp::getGoodsId, goodsId);
+            lqwLock.eq(StringUtils.isNotBlank(orderGoods.getSevenYear()),ClassGradeUserTemp::getSevenYear,orderGoods.getSevenYear());
             lqwLock.eq(ClassGradeUserTemp::getStatus, ClassGradeUserTemp.STATUS_LOCK);
             ClassGradeUserTemp classGradeUserTemp = iClassGradeUserTempService.getOne(lqwLock);
             if (classGradeUserTemp != null) {

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

@@ -31,6 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="classHours" column="class_hours"/>
         <result property="distributionCode" column="distribution_code"/>
         <result property="choiceStatus" column="choice_status"/>
+        <result property="sevenYear" column="seven_year"/>
     </resultMap>
 
     <select id="selectList" parameterType="com.zhongzheng.modules.base.bo.ShoppingCartQueryBo"  resultMap="ShoppingCartVoResult">
@@ -47,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             g.goods_status,
             g.project_id,
             g.class_hours,
+            g.seven_year,
             ot.type AS template_type,
             cet.education_name,
             cpt.project_name,

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

@@ -100,6 +100,7 @@
         <result property="specialGoods" column="special_goods"/>
         <result property="externalLink" column="external_link"/>
         <result property="externalLinkStatus" column="external_link_status"/>
+        <result property="sevenYear" column="seven_year"/>
 
         <result property="supplyName" column="supply_name"/>
         <result property="educationName" column="education_name"/>

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

@@ -1084,4 +1084,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <update id="UpGradeInterfaceByTenant" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeOpenUpBo" >
         update class_grade set interface_push_id = #{interfacePushId} where grade_id = #{gradeId}
     </update>
+
+    <select id="getOrderGoodsByClassId" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.order.domain.OrderGoods" >
+        SELECT
+            og.*
+        FROM
+            order_goods og
+                LEFT JOIN `order` o ON og.order_sn = o.order_sn
+        WHERE
+            og.pay_status IN ( 2, 3, 4 )
+            AND og.refund_status != 2
+	        AND og.`status` = 1
+	        AND o.`status` = 1
+	        AND o.user_id = #{userId}
+	        AND og.grade_id = #{gradeId}
+    </select>
 </mapper>

+ 18 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml

@@ -894,4 +894,22 @@
         ORDER BY og.seven_class_version DESC
         LIMIT 1
     </select>
+
+    <select id="countOrderGoodsByYear" parameterType="map" resultType="java.lang.Long">
+        SELECT
+            COUNT( og.order_goods_id )
+        FROM
+            order_goods og
+            LEFT JOIN `order` o ON og.order_sn = o.order_sn
+        WHERE
+            og.refund_status != 2
+            AND og.pay_status IN ( 2, 3, 4 )
+            AND og.`status` = 1
+            AND o.`status` = 1
+            AND o.user_id = #{userId}
+            AND og.goods_id = #{goodsId}
+            AND og.seven_year = #{sevenYear}
+            AND og.service_start_time <![CDATA[  >=  ]]> NOW()
+            AND og.service_end_time <![CDATA[   <=  ]]> NOW()
+    </select>
 </mapper>