Sfoglia il codice sorgente

活动排课,复学

zouxuan 3 anni fa
parent
commit
92b87eecec

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ActivityUserMapperService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dao.ActivityUserMapperDao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.ActivityStudentQueryInfo;
@@ -202,4 +203,8 @@ public interface ActivityUserMapperService extends BaseService<Integer, Activity
     * @date 2022/8/3 13:44
     */
     void subCourseConvert(List<CourseScheduleStudentPayment> studentPayments, Integer studentId, Integer singleClassMinutes,Integer categoryId);
+
+    ActivityUserMapperDao getDao();
+
+    BigDecimal use(List<ActivityUserMapper> activityUserMappers, List<ActivityUserMapper> freeActivityUserMappers, int j, int a,Long groupId);
 }

+ 60 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java

@@ -807,14 +807,22 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 			if(StringUtils.isEmpty(activityUserMapper.getVipGroupId())){
 				activityUserMapper.setVipGroupId(groupId.toString());
 			}else {
-				activityUserMapper.setVipGroupId(activityUserMapper.getVipGroupId()+","+groupId);
+				String[] split = activityUserMapper.getVipGroupId().split(",");
+				List<String> idList = Arrays.stream(split).collect(Collectors.toList());
+				if(!idList.contains(groupId.toString())){
+					activityUserMapper.setVipGroupId(activityUserMapper.getVipGroupId()+","+groupId);
+				}
 			}
 			activityUserMapper.setVipFlag(2);
 		}else {
 			if(StringUtils.isEmpty(activityUserMapper.getPracticeGroupId())){
 				activityUserMapper.setPracticeGroupId(groupId.toString());
 			}else {
-				activityUserMapper.setPracticeGroupId(activityUserMapper.getPracticeGroupId()+","+groupId);
+				String[] split = activityUserMapper.getPracticeGroupId().split(",");
+				List<String> idList = Arrays.stream(split).collect(Collectors.toList());
+				if(!idList.contains(groupId.toString())){
+					activityUserMapper.setPracticeGroupId(activityUserMapper.getPracticeGroupId()+","+groupId);
+				}
 			}
 			//虽然还有剩余价值,但是这里处理为已排课,不再考虑退费问题
 			activityUserMapper.setPracticeFlag(2);
@@ -825,14 +833,22 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 			if(StringUtils.isEmpty(activityUserMapper.getGiveVipGroupId())){
 				activityUserMapper.setGiveVipGroupId(groupId.toString());
 			}else {
-				activityUserMapper.setGiveVipGroupId(activityUserMapper.getGiveVipGroupId()+","+groupId);
+				String[] split = activityUserMapper.getGiveVipGroupId().split(",");
+				List<String> idList = Arrays.stream(split).collect(Collectors.toList());
+				if(!idList.contains(groupId.toString())){
+					activityUserMapper.setGiveVipGroupId(activityUserMapper.getGiveVipGroupId()+","+groupId);
+				}
 			}
 			activityUserMapper.setGiveVipFlag(2);
 		}else {
 			if(StringUtils.isEmpty(activityUserMapper.getGivePracticeGroupId())){
 				activityUserMapper.setGivePracticeGroupId(groupId.toString());
 			}else {
-				activityUserMapper.setGivePracticeGroupId(activityUserMapper.getGivePracticeGroupId()+","+groupId);
+				String[] split = activityUserMapper.getGivePracticeGroupId().split(",");
+				List<String> idList = Arrays.stream(split).collect(Collectors.toList());
+				if(!idList.contains(groupId.toString())){
+					activityUserMapper.setGivePracticeGroupId(activityUserMapper.getGivePracticeGroupId()+","+groupId);
+				}
 			}
 			//虽然还有剩余价值,但是这里处理为已排课,不再考虑退费问题
 			activityUserMapper.setGivePracticeFlag(2);
@@ -1044,4 +1060,44 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 		activityUserMapperDao.insert(activityUserMapper);
 	}
 
+	@Override
+	public ActivityUserMapperDao getDao() {
+		return activityUserMapperDao;
+	}
+
+	@Override
+	public BigDecimal use(List<ActivityUserMapper> activityUserMappers, List<ActivityUserMapper> freeActivityUserMappers, int j, int a,Long groupId) {
+		//扣除排课资格
+		if (!org.springframework.util.CollectionUtils.isEmpty(freeActivityUserMappers) && freeActivityUserMappers.size() > j) {
+			ActivityUserMapper activityUserMapper = freeActivityUserMappers.get(j);
+			Integer subCourseNum = activityUserMapper.getSubCourseNum();
+			if(subCourseNum == 1){
+				j++;
+			}
+			activityUserMapper.setSubCourseNum(subCourseNum - 1);
+			this.modifyGiveGroupId(activityUserMapper,groupId);
+			return ZERO;
+		}else if(!org.springframework.util.CollectionUtils.isEmpty(activityUserMappers) && activityUserMappers.size() > a){
+			ActivityUserMapper activityUserMapper = activityUserMappers.get(a);
+			BigDecimal consumerPrice = ZERO;
+			Integer subCourseNum = activityUserMapper.getSubCourseNum();
+			if(subCourseNum == 1){
+				a++;
+				consumerPrice = activityUserMapper.getSubNoCoursePrice();
+				activityUserMapper.setSubNoCoursePrice(ZERO);
+			}else {
+				if(activityUserMapper.getActualPrice().compareTo(ZERO) > 0) {
+					//单课金额
+					consumerPrice = activityUserMapper.getActualPrice().divide(new BigDecimal(activityUserMapper.getTotalCourseNum()), BigDecimal.ROUND_CEILING, RoundingMode.DOWN);
+					activityUserMapper.setSubNoCoursePrice(activityUserMapper.getSubNoCoursePrice().subtract(consumerPrice));
+				}
+			}
+			activityUserMapper.setSubCourseNum(subCourseNum - 1);
+			this.modifyGroupId(activityUserMapper,groupId);
+			return consumerPrice;
+		}else {
+			throw new BizException("所选学员排课资格不足");
+		}
+	}
+
 }

+ 1 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -4350,10 +4350,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             activityUserMapper.setTenantId(order.getTenantId());
             activityUserMapperService.copyProperty(activityUserMapper,activity,false,true);
             if (activity.isPayToBalance()) {
-                boolean appendCourseBalance = sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getExpectAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "通用营销活动购买");
-                if (!appendCourseBalance) {
-                    throw new BizException("增加用户课程余额失败");
-                }
+                sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getExpectAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "通用营销活动购买");
             }
             if (activity.getFullMinusCourseTimes() != -1 && order.getActivityBuyNum() >= activity.getFullMinusCourseTimes()) {
                 activityUserMapper.setGiveVipFlag(1);

+ 1 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java

@@ -108,10 +108,7 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
                         throw new BizException("给用户增加抽奖次数失败");
                     }
                 }
-                boolean appendCourseBalance = sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.SPORADIC, "双11活动");
-                if (!appendCourseBalance) {
-                    throw new BizException("增加用户课程余额失败");
-                }
+                sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.SPORADIC, "双11活动");
             } else if (info.getChargeType().getCode() == 9 || info.getChargeType().getCode() == 13 || info.getChargeType().getCode() == 14) { //零星收费账户充值,网基课活动,关心包
                 sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费"+info.getChargeType().getMsg(), studentPaymentOrder.getTransNo());
             } else if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -216,7 +216,7 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
     }
 
     @Override
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public boolean appendCourseBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String description) {
         SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
         if (cashAccount == null) {

+ 34 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -3050,15 +3050,38 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         }
 
         List<CourseScheduleStudentPayment> courseScheduleStudentPaymentList = new ArrayList<>();
+        //获取账户信息
+        SysUserCashAccount cashAccount = sysUserCashAccountService.getLocked(studentRecoverInfo.getUserId());
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", studentRecoverInfo.getUserId());
+        }
+        BigDecimal courseBalance = cashAccount.getCourseBalance();
+        //获取学员排课资格
+        List studentIdList = new ArrayList<>();
+        studentIdList.add(studentRecoverInfo.getUserId());
+        //获取学员付费排课资格
+        List<ActivityUserMapper> activityUserMappers = activityUserMapperService.getDao().findByStudents(studentIdList,vipGroup.getVipGroupCategoryId(),vipGroup.getSingleClassMinutes());
+        //获取学员赠送排课资格
+        List<ActivityUserMapper> freeActivityUserMappers = activityUserMapperService.getDao().findByStudents1(studentIdList,vipGroup.getVipGroupCategoryId(),vipGroup.getSingleClassMinutes());
+        int j = 0;
+        int a = 0;
         for (int i = 0; i < surplusCourseWithGroup.size(); i++) {
             CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+            BigDecimal actualPrice = coursePrices.get(i);
+            courseScheduleStudentPayment.setExpectPrice(actualPrice);
+            //按课扣除课程余额
+            if(courseBalance.compareTo(actualPrice) >= 0){
+                courseBalance = courseBalance.subtract(actualPrice);
+            }else {
+                //扣除排课资格
+                actualPrice = activityUserMapperService.use(activityUserMappers,freeActivityUserMappers,j,a,vipGroup.getId());
+            }
+            courseScheduleStudentPayment.setActualPrice(actualPrice);
             courseScheduleStudentPayment.setGroupType(GroupType.VIP);
             courseScheduleStudentPayment.setMusicGroupId(studentRecoverInfo.getVipGroupId().toString());
             courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
             courseScheduleStudentPayment.setCourseScheduleId(surplusCourseWithGroup.get(i).getId());
             courseScheduleStudentPayment.setUserId(studentRecoverInfo.getUserId());
-            courseScheduleStudentPayment.setExpectPrice(coursePrices.get(i));
-            courseScheduleStudentPayment.setActualPrice(coursePrices.get(i));
             courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(surplusCourseWithGroup.get(i)) ? vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice() : vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
             courseScheduleStudentPayment.setCreateTime(now);
             courseScheduleStudentPayment.setUpdateTime(now);
@@ -3070,7 +3093,15 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             studentDao.updateStudentServiceTag(studentRecoverInfo.getUserId(), null, YesOrNoEnum.YES.getCode());
             courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
         }
-        sysUserCashAccountService.appendCourseBalance(studentRecoverInfo.getUserId(), surplusCourseFee.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "学生复学扣除课程余额");
+        //扣余额,如果余额不足,那么扣排课资格
+        if(cashAccount.getCourseBalance().compareTo(courseBalance) != 0){
+            sysUserCashAccountService.appendCourseBalance(studentRecoverInfo.getUserId(), cashAccount.getCourseBalance().subtract(courseBalance).negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "学生复学扣除课程余额");
+        }
+        //更新资格
+        activityUserMappers.addAll(freeActivityUserMappers);
+        if(!CollectionUtils.isEmpty(activityUserMappers)){
+            activityUserMapperService.getDao().batchUpdate(activityUserMappers);
+        }
         studentPauseInfo.setDelFlag(1);
         studentPauseInfoDao.update(studentPauseInfo);
         vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);

+ 1 - 0
mec-biz/src/main/resources/config/mybatis/ActivityUserMapperMapper.xml

@@ -531,6 +531,7 @@
 		<if test="categoryId == null">
 			AND aum.give_category_id_ IS NULL
 		</if>
+
 	</select>
 	<select id="findByStudents" resultMap="ActivityUserMapper">
 		select * from activity_user_mapper aum