cy 3 лет назад
Родитель
Сommit
b5ceb9ce44

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -2,6 +2,8 @@ package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.yonge.cooleshow.biz.dal.vo.CourseScheduleStudentPaymentVo;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -36,6 +38,10 @@ public interface CourseScheduleStudentPaymentDao extends BaseMapper<CourseSchedu
      */
     List<LiveCourseInfoVo.CourseBuyStudentVo> queryStudentInfoByGroupId(@Param("groupId") Long groupId);
 
+    //查询所有购买陪练课用户id
     List<Long> selectAll();
+
+    //根据查询锁定中的课程
+    List<CourseScheduleStudentPaymentVo> selectPaymentList(String orderNo);
 }
 

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModel;

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

@@ -54,7 +54,6 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -648,7 +647,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         courseList.forEach(course -> {
             CourseScheduleTeacherSalary teacherSalary = new CourseScheduleTeacherSalary();
             teacherSalary.setTeacherId(course.getTeacherId());
-            teacherSalary.setStudentId(course.getTeacherId());
+            teacherSalary.setStudentId(studentPayment.getUserId());
             teacherSalary.setCourseScheduleId(course.getId());
             teacherSalary.setCourseGroupType(course.getType());
             teacherSalary.setCourseGroupId(course.getCourseGroupId());

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

@@ -21,6 +21,7 @@ import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.CourseGroupEnum;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.TeacherSalaryEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
@@ -41,6 +42,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
@@ -75,6 +77,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     private CourseGroupService courseGroupService;
     @Autowired
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+    @Autowired
+    private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
 
     @Override
     public CourseScheduleDao getDao() {
@@ -799,7 +803,29 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         pageInfo.setAsc(" cs.start_time_");
         return PageUtil.pageInfo(baseMapper.queryStudentLiveCourse(pageInfo, param));
     }
-
+    /**
+     * 计算课堂每节课价格
+     *
+     * @param totalCourseNum 总课程数
+     * @param totalRatePrice 总金额
+     * @return key 课堂数 value 课酬
+     */
+    private Map<Integer, BigDecimal> getCourseAveragePrice(Integer totalCourseNum, BigDecimal totalRatePrice) {
+        //每节课的单价 四舍五入
+        BigDecimal singerSalary = totalRatePrice.divide(BigDecimal.valueOf(totalCourseNum), 2, RoundingMode.HALF_UP);
+        //单价累计总额
+        BigDecimal cumulativeAmount = BigDecimal.ZERO;
+        Map<Integer, BigDecimal> map = new HashMap<>();
+        for (int i = 1; i <= totalCourseNum; i++) {
+            //最后一节课,直接用总课酬减去累计总额
+            if (i == totalCourseNum) {
+                singerSalary = totalRatePrice.subtract(cumulativeAmount);
+            }
+            cumulativeAmount = cumulativeAmount.add(singerSalary);
+            map.put(i, singerSalary);
+        }
+        return map;
+    }
     /**
      * @Description: 学生购买陪练课
      * @Author: cy
@@ -826,7 +852,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         baseMapper.addCourseGroup(scheduleDto);
         Long groupId = scheduleDto.getGroupId();
 
-        BigDecimal unitPrice = scheduleDto.getUnitPrice();
+        //获取每节课购买的价格
+        Map<Integer, BigDecimal> courseAveragePrice = getCourseAveragePrice(scheduleDto.getCourseNum(), scheduleDto.getCoursePrice());
+
         List<CourseScheduleDate> classTime = scheduleDto.getClassTime();
         for (int i = 0; i < classTime.size(); i++) {
             CourseScheduleDate date = classTime.get(i);
@@ -851,9 +879,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             payment.setCourseGroupId(groupId);
             payment.setCourseType(CourseScheduleEnum.PRACTICE.getCode());
             payment.setOrderNo(orderNo);
-            payment.setOriginalPrice(unitPrice);
-            payment.setExpectPrice(unitPrice);
-            payment.setActualPrice(unitPrice);
+            payment.setOriginalPrice(courseAveragePrice.get(i+1));
+            payment.setExpectPrice(courseAveragePrice.get(i+1));
+            payment.setActualPrice(courseAveragePrice.get(i+1));
             //写入course_schedule_student_payment
             courseScheduleStudentPaymentService.save(payment);
         }
@@ -878,8 +906,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     public void buyPracticeCourseSuccess(UserOrderDetailVo orderParam) {
         log.info("学生购买陪练课-成功-回调,请求参数:{}", JSON.toJSONString(orderParam));
         String orderNo = orderParam.getOrderNo();
-        List<CourseScheduleStudentPayment> paymentList = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
-                .eq(CourseScheduleStudentPayment::getOrderNo, orderNo));
+        List<CourseScheduleStudentPaymentVo> paymentList = paymentDao.selectPaymentList(orderNo);
         if (paymentList.isEmpty()) {
             throw new BizException("订单不存在!");
         }
@@ -887,6 +914,26 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //course_schedule中lock_改为0
         List<Long> scheduleIds = paymentList.stream().map(CourseScheduleStudentPayment::getCourseId).collect(Collectors.toList());
         baseMapper.updateLock(scheduleIds);
+
+        //写course_schedule_teacher_salary
+        Date now = new Date();
+        List<CourseScheduleTeacherSalary> teacherSalaryList = new ArrayList<>();
+        for (CourseScheduleStudentPaymentVo payment : paymentList) {
+            CourseScheduleTeacherSalary teacherSalary = new CourseScheduleTeacherSalary();
+            teacherSalary.setTeacherId(payment.getTeacherId());
+            teacherSalary.setStudentId(payment.getUserId());
+            teacherSalary.setCourseScheduleId(payment.getCourseId());
+            teacherSalary.setCourseGroupType(payment.getCourseType());
+            teacherSalary.setCourseGroupId(payment.getCourseGroupId());
+            teacherSalary.setClassNum(payment.getClassNum());
+            teacherSalary.setExpectSalary(payment.getExpectPrice());
+            teacherSalary.setActualSalary(payment.getActualPrice());
+            teacherSalary.setReduceSalary(BigDecimal.ZERO);
+            teacherSalary.setStatus(TeacherSalaryEnum.NOT_START.getCode());
+            teacherSalaryList.add(teacherSalary);
+            teacherSalary.setCreateTime(now);
+        }
+        courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
     }
 
     /**
@@ -937,5 +984,4 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         homePage.setVideoList(baseMapper.selectVideo());
         return homePage;
     }
-}
-
+}

+ 34 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseScheduleStudentPaymentVo.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/22
+ */
+@ApiModel(value = "CourseScheduleStudentPaymentVo")
+public class CourseScheduleStudentPaymentVo extends CourseScheduleStudentPayment {
+    @ApiModelProperty(value = "老师id")
+    private Long teacherId;
+    @ApiModelProperty(value = "课程数")
+    private Integer classNum;
+
+    public Integer getClassNum() {
+        return classNum;
+    }
+
+    public void setClassNum(Integer classNum) {
+        this.classNum = classNum;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+}
+

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

@@ -56,5 +56,20 @@
     <select id="selectAll" resultType="java.lang.Long">
         SELECT user_id_ FROM course_schedule_student_payment WHERE course_type_ = 'PRACTICE'
     </select>
-
+    <select id="selectPaymentList" resultType="com.yonge.cooleshow.biz.dal.vo.CourseScheduleStudentPaymentVo"
+            parameterType="java.lang.String">
+        SELECT
+            p.user_id_ AS userId,
+            p.course_group_id_ AS courseGroupId,
+            p.course_id_ AS courseId,
+            p.course_type_ AS courseType,
+            p.expect_price_ AS expectPrice,
+            p.actual_price_ AS actualPrice,
+            g.teacher_id_ AS teacherId,
+            s.class_num_ AS classNum
+        FROM course_schedule_student_payment p
+        LEFT JOIN course_group g ON p.course_group_id_ = g.id_
+        LEFT JOIN course_schedule s ON p.course_id_ = s.id_
+        WHERE p.order_no_=#{orderNo}
+    </select>
 </mapper>

+ 1 - 4
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java

@@ -10,10 +10,7 @@ import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRepliedService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.CourseStudent;
-import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
-import com.yonge.cooleshow.biz.dal.vo.PracticeTeacherVo;
-import com.yonge.cooleshow.biz.dal.vo.StudentHomePage;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;