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

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherFreeTimeDao.java

@@ -48,7 +48,7 @@ public interface TeacherFreeTimeDao extends BaseMapper<TeacherFreeTime> {
     void insertPrice(List<TeacherSubjectPrice> list);
 
     //查询老师配置
-    TeacherFreeTimeVo getDetail(PracticeTimesSetting practiceTimesSetting);
+    TeacherFreeTimeVo getDetail(@Param("param") PracticeTimesSetting practiceTimesSetting);
 
     //根据id查声部售价
     List<TeacherSubjectPrice> getPrice(Long id);

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonPurchaseRecordDao.java

@@ -17,4 +17,7 @@ public interface VideoLessonPurchaseRecordDao extends BaseMapper<VideoLessonPurc
 
     //根据课程id查询老师id
     Long selectTeacherByDetail(Long videoId);
+
+    //修改订单状态
+    void updateStatus(String orderNo);
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeTimesSetting.java

@@ -18,6 +18,17 @@ public class PracticeTimesSetting {
     @ApiModelProperty(value = "用户id")
     private Long userId;
 
+    @ApiModelProperty(value = "默认配置(1:是 0:否)")
+    private Integer defaultFlag;
+
+    public Integer getDefaultFlag() {
+        return defaultFlag;
+    }
+
+    public void setDefaultFlag(Integer defaultFlag) {
+        this.defaultFlag = defaultFlag;
+    }
+
     public Long getUserId() {
         return userId;
     }

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonPurchaseRecord.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
-import java.util.Date;
 
 /**
  * 视频课购买记录表

+ 10 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonPurchaseRecordService.java

@@ -1,14 +1,23 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonPurchaseRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 /**
  * VideoLessonPurchaseRecordService服务类
+ *
  * @author yzp
- * @date 2022-03-25 23:46:29
  * @version v1.0
+ * @date 2022-03-25 23:46:29
  **/
 public interface VideoLessonPurchaseRecordService extends IService<VideoLessonPurchaseRecord> {
+    HttpResponseResult<OrderCreateRes> buyVideoCourse(OrderReq.OrderReqInfo orderReqInfo);
+
+    void buyVideoCourseSuccess(UserOrderDetailVo orderParam);
 
+    void buyVideoCourseFailed(UserOrderDetailVo orderParam);
 }

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

@@ -803,6 +803,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         pageInfo.setAsc(" cs.start_time_");
         return PageUtil.pageInfo(baseMapper.queryStudentLiveCourse(pageInfo, param));
     }
+
     /**
      * 计算课堂每节课价格
      *
@@ -826,6 +827,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         }
         return map;
     }
+
     /**
      * @Description: 学生购买陪练课
      * @Author: cy

+ 117 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java

@@ -1,29 +1,143 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.yonge.cooleshow.biz.dal.entity.VideoLessonPurchaseRecord;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDao;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonPurchaseRecordDao;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonPurchaseRecordService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.exception.BizException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * VideoLessonPurchaseRecordService服务实现类
+ *
  * @author yzp
- * @date 2022-03-26 00:01:38
  * @version v1.0
+ * @date 2022-03-26 00:01:38
  **/
 @Service
-public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLessonPurchaseRecordDao,VideoLessonPurchaseRecord> implements VideoLessonPurchaseRecordService {
+public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLessonPurchaseRecordDao, VideoLessonPurchaseRecord> implements VideoLessonPurchaseRecordService {
 
     private final static Logger log = LoggerFactory.getLogger(VideoLessonPurchaseRecordServiceImpl.class);
 
     @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
     private VideoLessonPurchaseRecordDao videoLessonPurchaseRecordDao;
+    @Autowired
+    private VideoLessonGroupDao videoLessonGroupDao;
 
     public VideoLessonPurchaseRecordDao getDao() {
         return videoLessonPurchaseRecordDao;
     }
+
+    /**
+     * @Description: 购买视频课
+     * @Author: cy
+     * @Date: 2022/4/24
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<OrderCreateRes> buyVideoCourse(OrderReq.OrderReqInfo orderReqInfo) {
+        log.info("学生购买视频课程组,请求参数:{}", JSON.toJSONString(orderReqInfo));
+        Long studentId = orderReqInfo.getUserId();
+        String orderNo = orderReqInfo.getOrderNo();
+
+        //校验学生信息
+        getSysUser(studentId);
+
+        ObjectMapper objectMapper = new ObjectMapper();
+        VideoLessonPurchaseRecord purchaseRecord = objectMapper.convertValue(orderReqInfo.getBizContent(), VideoLessonPurchaseRecord.class);
+
+        //校验视频课信息
+        Long groupId = purchaseRecord.getVideoLessonGroupId();
+        VideoLessonGroup lessonGroup = videoLessonGroupDao.selectById(groupId);
+        if (lessonGroup == null) {
+            throw new BizException("课程组不存在!");
+        }
+
+        orderNo="999";
+        purchaseRecord.setOrderNo(orderNo);
+        purchaseRecord.setStudentId(studentId);
+        purchaseRecord.setOrderStatus(0);
+        videoLessonPurchaseRecordDao.insert(purchaseRecord);
+
+        OrderCreateRes orderCreateRes = new OrderCreateRes();
+        orderCreateRes.setRes(true);
+        orderCreateRes.setMerchId(lessonGroup.getTeacherId());
+        orderCreateRes.setBizId(orderReqInfo.getCouponId());
+        orderCreateRes.setOriginalPrice(BigDecimal.valueOf(lessonGroup.getLessonPrice()));
+        orderCreateRes.setExpectPrice(BigDecimal.valueOf(lessonGroup.getLessonPrice()));
+        orderCreateRes.setActualPrice(purchaseRecord.getPayMoney());
+        orderCreateRes.setGoodNum(lessonGroup.getLessonCount());
+        orderCreateRes.setGoodType(GoodTypeEnum.VIDEO);
+        HttpResponseResult<OrderCreateRes> httpResponseResult = new HttpResponseResult<>();
+        httpResponseResult.setData(orderCreateRes);
+        return httpResponseResult;
+    }
+
+    /**
+     * @Description: 购买视频课-成功-回调
+     * @Author: cy
+     * @Date: 2022/4/24
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void buyVideoCourseSuccess(UserOrderDetailVo orderParam) {
+        log.info("学生购买视频课-成功-回调,请求参数:{}", JSON.toJSONString(orderParam));
+        String orderNo = orderParam.getOrderNo();
+
+        VideoLessonPurchaseRecord videoGroup = videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
+                .eq(VideoLessonPurchaseRecord::getOrderNo, orderNo));
+        if (videoGroup == null) {
+            throw new BizException("课程组不存在!");
+        }
+
+        //video_lesson_purchase_record中order_status_改为1
+        videoLessonPurchaseRecordDao.updateStatus(orderNo);
+    }
+
+    /**
+     * @Description: 购买视频课-失败-回调
+     * @Author: cy
+     * @Date: 2022/4/24
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void buyVideoCourseFailed(UserOrderDetailVo orderParam) {
+        String orderNo = orderParam.getOrderNo();
+
+        VideoLessonPurchaseRecord videoGroup = videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
+                .eq(VideoLessonPurchaseRecord::getOrderNo, orderNo));
+        if (videoGroup == null) {
+            throw new BizException("课程组不存在!");
+        }
+
+        //删除video_lesson_purchase_record数据
+        videoLessonPurchaseRecordDao.delete(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
+                .eq(VideoLessonPurchaseRecord::getOrderNo, orderNo));
+    }
+
+    /**
+     * 获取用户信息
+     */
+    private SysUser getSysUser(Long userId) {
+        return Optional.ofNullable(userId)
+                .map(sysUserFeignService::queryUserById)
+                .orElseThrow(() -> new BizException("用户不存在"));
+    }
 }

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java

@@ -39,6 +39,16 @@ public class StudentHomePage implements Serializable {
         private String backgroundPic;
         @ApiModelProperty(value = "课程数")
         private Integer courseNum;
+        @ApiModelProperty(value = "购买人数")
+        private Integer buyCount;
+
+        public Integer getBuyCount() {
+            return buyCount;
+        }
+
+        public void setBuyCount(Integer buyCount) {
+            this.buyCount = buyCount;
+        }
 
         public Long getTeacherId() {
             return teacherId;
@@ -137,6 +147,16 @@ public class StudentHomePage implements Serializable {
         private Integer subjectId;
         @ApiModelProperty(value = "声部名称")
         private String subjectName;
+        @ApiModelProperty(value = "购买人数")
+        private Integer buyCount;
+
+        public Integer getBuyCount() {
+            return buyCount;
+        }
+
+        public void setBuyCount(Integer buyCount) {
+            this.buyCount = buyCount;
+        }
 
         public Long getTeacherId() {
             return teacherId;

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCreateRes.java

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

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

@@ -464,7 +464,8 @@
             g.course_price_ AS courseGroupPrice,
             g.course_start_time_ AS courseStartTime,
             g.background_pic_ AS backgroundPic,
-            g.course_num_ AS courseNum
+            g.course_num_ AS courseNum,
+            g.pre_student_num_ AS buyCount
         FROM course_group g
         LEFT JOIN sys_user u ON g.teacher_id_=u.id_
         WHERE type_='LIVE'
@@ -482,10 +483,12 @@
             g.lesson_cover_url_ AS lessonCoverUrl,
             g.lesson_count_ AS lessonCount,
             g.lesson_subject_ AS subjectId,
-            s.name_ AS subjectName
+            s.name_ AS subjectName,
+            IFNULL(r.count_,0) AS buyCount
         FROM video_lesson_group g
         LEFT JOIN sys_user u ON g.teacher_id_=u.id_
         LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
+        LEFT JOIN (SELECT video_lesson_group_id_ ,COUNT(1) AS count_ FROM video_lesson_purchase_record GROUP BY video_lesson_group_id_) r ON g.id_= r.video_lesson_group_id_
         WHERE g.audit_status_='PASS'
         ORDER BY g.create_time_ DESC LIMIT 4
     </select>

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

@@ -58,7 +58,24 @@
     </select>
     <select id="getDetail" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo"
             parameterType="com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting">
-        SELECT * FROM teacher_free_time WHERE teacher_id_=#{userId} AND free_minutes_=#{freeMinutes} AND course_minutes_=#{courseMinutes}
+        SELECT * FROM teacher_free_time
+        <where>
+            <if test="param.userId != null">
+                AND teacher_id_ = #{param.userId}
+            </if>
+            <if test="param.freeMinutes != null">
+                AND free_minutes_ = #{param.freeMinutes}
+            </if>
+            <if test="param.courseMinutes != null">
+                AND course_minutes_ = #{param.courseMinutes}
+            </if>
+            <if test="param.courseMinutes != null">
+                AND course_minutes_ = #{param.courseMinutes}
+            </if>
+            <if test="param.defaultFlag != null">
+                AND default_flag_ = #{param.defaultFlag}
+            </if>
+        </where>
     </select>
     <select id="getPrice" resultType="com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice"
             parameterType="java.lang.Long">

+ 3 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonPurchaseRecordMapper.xml

@@ -26,4 +26,7 @@
 		WHERE id_=
 		(SELECT video_lesson_group_id_ FROM video_lesson_group_detail WHERE id_=#{videoId})
 	</select>
+	<update id="updateStatus" parameterType="java.lang.String">
+		UPDATE video_lesson_purchase_record SET order_status_=1 WHERE order_no_=#{orderNo}
+	</update>
 </mapper>