Browse Source

Merge branch 'feature/1113-vipCourse' of http://git.dayaedu.com/yonge/cooleshow into feature/1113-vipCourse

zouxuan 8 tháng trước cách đây
mục cha
commit
42ad597fbd

+ 6 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -310,6 +310,12 @@ public interface SysConfigConstant {
      * 趣纠课账期
      */
     String PRACTICE_ACCOUNT_PERIOD = "practice_account_period";
+
+    /**
+     * vip课帐期
+     */
+    String VIP_COURSE_ACCOUNT_PERIOD = "vip_course_account_period";
+
     /**
      * 直播课账期
      */

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java

@@ -26,6 +26,7 @@ public enum AccountBizTypeEnum implements BaseEnum<String, AccountBizTypeEnum> {
     VIP_COURSE("VIP定制课"),
     DISCOUNT("畅学卡"),
 
+
     LIVE_SHARE("直播课分润"),
     VIDEO_SHARE("视频课分润"),
     MUSIC_SHARE("乐谱分润"),

+ 9 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -503,12 +503,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Map<String, List<CourseTimeEntity>> nowCourseMap = getAllPracticeCourseTime(teacherId, studentId, firstDay.toString(), lastDay.toString());
         //和生成的日历对比,筛选出空余的课程时间
         opsNewCourseCalendarData(nowCourseMap, courseCalendarEntities, Boolean.TRUE.equals(teacherTime.getSkipHolidayFlag()) ? 1 : 0 ,
-                teacherSubjectPrice.getCourseMinutes()+teacherSubjectPrice.getFreeMinutes());
+                teacherSubjectPrice.getCourseMinutes(),teacherSubjectPrice.getFreeMinutes());
         return courseCalendarEntities;
     }
 
     private void opsNewCourseCalendarData(Map<String, List<CourseTimeEntity>> nowCourseMap, List<CourseCalendarEntity> courseCalendarEntities,
-                                          Integer skipHoliday,Integer courseMinutes) {
+                                          Integer skipHoliday,Integer courseMinutes,Integer freeMinutes) {
         //储存节假日数据,避免重复查询
         Map<Integer, List<String>> holidayMap = new HashMap<>();
         courseCalendarEntities.forEach(calendarEntity -> {
@@ -534,7 +534,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 }
 
                 // 检查时间段是否满足课程时间,不满足则删除,满足 并且可多段的情况下,将时间段拆分
-                courseTime = splitTime(courseTime,courseMinutes);
+                courseTime = splitTime(courseTime,courseMinutes,freeMinutes);
                 calendarEntity.setCourseTime(courseTime);
 
                 //如果日历时间集合数据删没了,那么就证明当天课程已经满了  0:未满 1满
@@ -569,19 +569,20 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     // 检查时间段是否满足课程时间,不满足则删除,满足 并且可多段的情况下,将时间段拆分
-    private List<CourseTimeEntity> splitTime(List<CourseTimeEntity> courseTime, Integer courseMinutes) {
+    private List<CourseTimeEntity> splitTime(List<CourseTimeEntity> courseTime, Integer courseMinutes,Integer freeMinutes) {
+        Integer mergeMinutes = courseMinutes + freeMinutes;
         List<CourseTimeEntity> result = new ArrayList<>();
         for (CourseTimeEntity courseTimeEntity : courseTime) {
-            if (courseTimeEntity.getEndTime().getTime() - courseTimeEntity.getStartTime().getTime() >= courseMinutes * 60 * 1000) {
+            if (courseTimeEntity.getEndTime().getTime() - courseTimeEntity.getStartTime().getTime() >= mergeMinutes * 60 * 1000) {
                 long time = courseTimeEntity.getEndTime().getTime() - courseTimeEntity.getStartTime().getTime();
                 long startTime = courseTimeEntity.getStartTime().getTime();
-                while (time >= courseMinutes * 60 * 1000) {
+                while (time >= mergeMinutes * 60 * 1000) {
                     CourseTimeEntity entity = new CourseTimeEntity();
                     entity.setStartTime(new Date(startTime));
                     entity.setEndTime(new Date(startTime + courseMinutes * 60 * 1000));
                     result.add(entity);
-                    startTime = startTime + courseMinutes * 60 * 1000;
-                    time = time - courseMinutes * 60 * 1000;
+                    startTime = startTime + mergeMinutes * 60 * 1000;
+                    time = time - mergeMinutes * 60 * 1000;
                 }
             }
         }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PlatformCashAccountRecordServiceImpl.java

@@ -76,6 +76,7 @@ public class PlatformCashAccountRecordServiceImpl extends ServiceImpl<PlatformCa
         paramNames.add(AccountBizTypeEnum.ALBUM_SHARE.getCode());
         paramNames.add(AccountBizTypeEnum.VIP.getCode());
         paramNames.add(AccountBizTypeEnum.SVIP.getCode());
+        paramNames.add(AccountBizTypeEnum.DISCOUNT.getCode());
         paramNames.add(AccountBizTypeEnum.VIP_SHARE.getCode());
         paramNames.add(AccountBizTypeEnum.ACTI_REGIST.getCode());
         paramNames.add(AccountBizTypeEnum.ACTI_REGIST_SHARE.getCode());

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -1428,6 +1428,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             instance.add(Calendar.DAY_OF_MONTH, Integer.parseInt(sysConfigService.findConfigValue(SysConfigConstant.ALBUM_ACCOUNT_PERIOD)));
         } else if (GoodTypeEnum.ACTI_REGIST.equals(goodType)) {
             instance.add(Calendar.DAY_OF_MONTH, Integer.parseInt(sysConfigService.findConfigValue(SysConfigConstant.ACTI_REGIST_ACCOUNT_PERIOD)));
+        } else if (GoodTypeEnum.VIP_COURSE.equals(goodType)) {
+            instance.add(Calendar.DAY_OF_MONTH, Integer.parseInt(sysConfigService.findConfigValue(SysConfigConstant.VIP_COURSE_ACCOUNT_PERIOD)));
         }
         return instance.getTime();
     }
@@ -1514,6 +1516,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             return new BigDecimal(sysConfigService.findConfigValue(SysConfigConstant.MUSIC_SHEET_SERVICE_FEE))
                     .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
         }
+        if (GoodTypeEnum.VIP_COURSE.equals(goodType)) {
+            return new BigDecimal(sysConfigService.findConfigValue(SysConfigConstant.VIP_COURSE_SERVICE_FEE))
+                    .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
+        }
         return BigDecimal.ZERO;
     }
 

+ 45 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java

@@ -870,17 +870,8 @@ DISCOUNT("畅学卡")
         ActivityPlanVo activityPlan = activityPlanService.detail(orderReq.getActivityId());
         if (activityPlan != null && activityPlan.getActivityState() == 1) {
             if (ActivityTypeEnum.MEMBER == activityPlan.getActivityType()) {
-                //  检查购买次数是否符合要求 待支付,支付中,支付完成的订单小于次数才可以继续购买
-                if (activityPlan.getBuyCount() !=null && activityPlan.getBuyCount() !=-1) {
-                    int count = userOrderService.lambdaQuery()
-                            .eq(UserOrder::getActivityId, orderReq.getActivityId())
-                            .in(UserOrder::getStatus, OrderStatusEnum.WAIT_PAY.getCode(),
-                                    OrderStatusEnum.PAYING.getCode(), OrderStatusEnum.PAID.getCode())
-                            .count();
-                    if (count >= activityPlan.getBuyCount()) {
-                        throw new BizException("活动以达到参与最大次数");
-                    }
-                }
+
+                checkActivityTimes(orderReq.getUserId(),orderReq.getPaymentClient(), activityPlan.getId());
 
                 // 会员买赠活动 判断购买商品是否符合活动要求
                 Map<String, List<Long>> map = orderReq.getGoodsInfos().stream()
@@ -921,6 +912,49 @@ DISCOUNT("畅学卡")
         }
     }
 
+
+    /**
+     * 检查活动购买次数
+     *
+     * @param userId 用户ID
+     * @param client 客户端
+     * @param activityId 活动ID
+     */
+    private void checkActivityTimes(Long userId,ClientEnum client, Long activityId) {
+        ActivityPlan activityPlan = activityPlanService.getById(activityId);
+        if (activityPlan == null) {
+            throw new BizException("活动不存在");
+        }
+
+        //  检查购买次数是否符合要求 待支付,支付中,支付完成的订单小于次数才可以继续购买
+        if (activityPlan.getBuyCount() !=null && activityPlan.getBuyCount() !=-1) {
+            int count = getActivityCount(userId, client, activityId);
+            if (count >= activityPlan.getBuyCount()) {
+                throw new BizException("活动以达到参与最大次数");
+            }
+
+        }
+
+    }
+
+    /**
+     * 查询活动参与次数
+     *
+     * @param userId 用户ID
+     * @param client 客户端
+     * @param activityId 活动ID
+     * @return int 活动参与次数
+     */
+    private int getActivityCount(Long userId, ClientEnum client, Long activityId) {
+        return userOrderService.lambdaQuery()
+                    .eq(UserOrder::getActivityId, activityId)
+                    .eq(UserOrder::getUserId, userId)
+                    .eq(UserOrder::getOrderClient, client)
+                    .in(UserOrder::getStatus, OrderStatusEnum.WAIT_PAY.getCode(),
+                            OrderStatusEnum.PAYING.getCode(), OrderStatusEnum.PAID.getCode())
+                    .count();
+    }
+
     /**
      * 用户支付请求
      *

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -963,7 +963,7 @@
         FROM course_schedule_teacher_salary ts
         LEFT JOIN course_group g ON ts.course_group_id_ = g.id_
         LEFT JOIN course_schedule_student_payment sp ON ts.course_schedule_id_ = sp.course_id_
-        WHERE ts.course_group_type_ = 'PRACTICE'
+        WHERE ts.course_group_type_ in ('PRACTICE','VIP_COURSE')
         AND ts.status_ = 'WAIT'
         <![CDATA[ AND DATE_FORMAT(ts.update_time_,'%Y-%m-%d') <= #{day}]]>
     </select>