Pārlūkot izejas kodu

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow

yonge 3 gadi atpakaļ
vecāks
revīzija
2a4f351fc2
22 mainītis faili ar 473 papildinājumiem un 138 dzēšanām
  1. 2 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/PollingOrderTask.java
  2. 0 49
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountController.java
  3. 0 39
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountRecordController.java
  4. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java
  5. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  6. 9 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java
  7. 67 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserAccountRecordSearch.java
  8. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccountRecord.java
  9. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java
  10. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  11. 14 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  12. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  13. 7 20
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  14. 246 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java
  15. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java
  16. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherStyleVideoVo.java
  17. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserAccountRecordVo.java
  18. 35 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  19. 23 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountRecordMapper.xml
  20. 4 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  21. 7 5
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java
  22. 2 2
      toolset/utils/src/main/java/com/yonge/toolset/utils/easyexcel/ExcelUtils.java

+ 2 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/PollingOrderTask.java

@@ -4,12 +4,14 @@ import com.yonge.cooleshow.task.core.BaseTask;
 import com.yonge.cooleshow.task.core.TaskException;
 import com.yonge.cooleshow.task.feign.StudentFeignService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 /**
  * 订单轮询
  * @Author: liweifan
  * @Data: 2022/4/13 17:36
  */
+@Service
 public class PollingOrderTask extends BaseTask {
 
     @Autowired

+ 0 - 49
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountController.java

@@ -34,53 +34,4 @@ public class UserAccountController extends BaseController {
     public HttpResponseResult<UserAccountVo> detail(@PathVariable("id") Long id) {
     	return succeed(userAccountService.detail(id));
 	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入userAccountSearch")
-    public HttpResponseResult<PageInfo<UserAccountVo>> page(@RequestBody UserAccountSearch query) {
-		IPage<UserAccountVo> pages = userAccountService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入userAccount")
-	public HttpResponseResult save(@Valid @RequestBody UserAccount userAccount) {
-    	return status(userAccountService.save(userAccount));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入userAccount")
-	public HttpResponseResult update(@Valid @RequestBody UserAccount userAccount) {
-        return status(userAccountService.updateById(userAccount));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入userAccount")
-	public HttpResponseResult submit(@Valid @RequestBody UserAccount userAccount) {
-        return status(userAccountService.saveOrUpdate(userAccount));
-    }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(userAccountService.removeByIds(StringUtil.toLongList(ids)));
-	}
 }

+ 0 - 39
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountRecordController.java

@@ -44,43 +44,4 @@ public class UserAccountRecordController extends BaseController {
 		IPage<UserAccountRecordVo> pages = userAccountRecordService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
 	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入userAccountRecord")
-	public HttpResponseResult save(@Valid @RequestBody UserAccountRecord userAccountRecord) {
-    	return status(userAccountRecordService.save(userAccountRecord));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入userAccountRecord")
-	public HttpResponseResult update(@Valid @RequestBody UserAccountRecord userAccountRecord) {
-        return status(userAccountRecordService.updateById(userAccountRecord));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入userAccountRecord")
-	public HttpResponseResult submit(@Valid @RequestBody UserAccountRecord userAccountRecord) {
-        return status(userAccountRecordService.saveOrUpdate(userAccountRecord));
-    }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(userAccountRecordService.removeByIds(StringUtil.toLongList(ids)));
-	}
 }

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java

@@ -104,8 +104,8 @@ public class UserWithdrawalController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        ExcelDataReader<UserWithdrawalExport> reader = ExcelUtils.getReader(UserWithdrawalExport.class, file);
         try {
+            ExcelDataReader<UserWithdrawalExport> reader = ExcelUtils.getReader(UserWithdrawalExport.class, file);
             userWithdrawalService.importExcel(reader.getDataList(),user.getId());
             return HttpResponseResult.succeed();
         }catch (ExcelException e){

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

@@ -120,5 +120,11 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     //根据课程id修改时间
     void courseAdjust(CourseAdjustVo adjustVo);
+
+    //学生端-首页-直播课
+    List<StudentHomePage.Live> selectLive();
+
+    //学生端-首页-视频课
+    List<StudentHomePage.Video> selectVideo();
 }
 

+ 9 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author: liweifan
@@ -19,10 +20,10 @@ public class OrderSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
 	@ApiModelProperty("交易流水号/订单号")
 	private String searchNo;
-	@ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
-	private OrderTypeEnum orderType;
-	@ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 FAIL 支付失败")
-	private OrderStatusEnum status;
+	@ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 (多选用,分割)")
+	private String orderType;
+	@ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 FAIL 支付失败 (多选用,分割)")
+	private String status;
 	@ApiModelProperty(value = "交易开始时间")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -47,19 +48,19 @@ public class OrderSearch extends QueryInfo{
 		this.searchNo = searchNo;
 	}
 
-	public OrderTypeEnum getOrderType() {
+	public String getOrderType() {
 		return orderType;
 	}
 
-	public void setOrderType(OrderTypeEnum orderType) {
+	public void setOrderType(String orderType) {
 		this.orderType = orderType;
 	}
 
-	public OrderStatusEnum getStatus() {
+	public String getStatus() {
 		return status;
 	}
 
-	public void setStatus(OrderStatusEnum status) {
+	public void setStatus(String status) {
 		this.status = status;
 	}
 

+ 67 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserAccountRecordSearch.java

@@ -1,7 +1,15 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * @Author: liweifan
@@ -9,6 +17,65 @@ import io.swagger.annotations.ApiModel;
  */
 @ApiModel(value = "UserAccountRecordSearch对象", description = "用户账户流水表查询对象")
 public class UserAccountRecordSearch extends QueryInfo{
+
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("用户id ")
+	private Long userId;
+
+	@ApiModelProperty("收支类型:IN、收入 OUT、支出 ")
+	private InOrOutEnum inOrOut;
+
+	@ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 MUSIC、乐谱 WITHDRAWAL、提现 ")
+	private AccountBizTypeEnum bizType;
+
+	@ApiModelProperty(value = "交易开始时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date startTime;
+
+	@ApiModelProperty(value = "交易结束时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date endTime;
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public InOrOutEnum getInOrOut() {
+		return inOrOut;
+	}
+
+	public void setInOrOut(InOrOutEnum inOrOut) {
+		this.inOrOut = inOrOut;
+	}
+
+	public AccountBizTypeEnum getBizType() {
+		return bizType;
+	}
+
+	public void setBizType(AccountBizTypeEnum bizType) {
+		this.bizType = bizType;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
 }

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

@@ -37,7 +37,7 @@ public class UserAccountRecord implements Serializable {
     @ApiModelProperty("收支类型:IN、收入 OUT、支出 ")
     @TableField(value = "in_or_out_")
     private InOrOutEnum inOrOut;
-    @ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 MUSIC、乐谱 WITHDRAWAL、提现 ")
+    @ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课  MUSIC、乐谱 WITHDRAWAL、提现 ")
     @TableField(value = "biz_type_")
     private AccountBizTypeEnum bizType;
     @ApiModelProperty("业务id ")

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

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.common.enums.BaseEnum;
 
 /**
  * 账户流水枚举
+ *
  * @Author: liweifan
  * @Data: 2022/4/7 15:48
  */
@@ -12,6 +13,7 @@ public enum AccountBizTypeEnum implements BaseEnum<String, AccountBizTypeEnum> {
 
     PRACTICE("陪练课", InOrOutEnum.IN),
     LIVE("直播课", InOrOutEnum.IN),
+    VIDEO("视频课", InOrOutEnum.IN),
     MUSIC("乐谱", InOrOutEnum.IN),
     WITHDRAWAL("提现", InOrOutEnum.OUT);
     @EnumValue

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -180,8 +180,10 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
 
     void buyPracticeCourseSuccess(UserOrderDetailVo orderParam);
 
-    void buyPracticeCourseFailed(String orderNo);
+    void buyPracticeCourseFailed(UserOrderDetailVo orderParam);
 
     void courseAdjust(CourseAdjustVo adjustVo);
+
+    StudentHomePage queryLiveAndVideo();
 }
 

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

@@ -893,7 +893,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * 学生购买陪练课-失败-回调
      */
     @Transactional(rollbackFor = Exception.class)
-    public void buyPracticeCourseFailed(String orderNo) {
+    public void buyPracticeCourseFailed(UserOrderDetailVo orderParam) {
+        String orderNo = orderParam.getOrderNo();
         List<CourseScheduleStudentPayment> paymentList = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
                 .eq(CourseScheduleStudentPayment::getOrderNo, orderNo));
         if (paymentList.isEmpty()) {
@@ -924,5 +925,17 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         baseMapper.courseAdjust(adjustVo);
     }
 
+    /**
+     * @Description: 学生-首页-直播课&视频课
+     * @Author: cy
+     * @Date: 2022/4/22
+     */
+    @Override
+    public StudentHomePage queryLiveAndVideo() {
+        StudentHomePage homePage = new StudentHomePage();
+        homePage.setLiveList(baseMapper.selectLive());
+        homePage.setVideoList(baseMapper.selectVideo());
+        return homePage;
+    }
 }
 

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

@@ -43,16 +43,16 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
 
     @Override
     public StudentHomeVo queryUserInfo(SysUser user) {
-        Student student = getById(user.getId());
+        StudentVo detail = detail(user.getId());
         StudentHomeVo studentHomeVo = new StudentHomeVo();
         try {
-            BeanUtils.copyProperties(studentHomeVo, student);
+            BeanUtils.copyProperties(studentHomeVo, detail);
         } catch (Exception e) {
             e.printStackTrace();
         }
         studentHomeVo.setHeardUrl(user.getAvatar());
         studentHomeVo.setUsername(user.getUsername());
-        int num = DateUtil.daysBetween(new Date(), student.getMembershipEndTime());
+        int num = DateUtil.daysBetween(new Date(), detail.getMembershipEndTime());
         studentHomeVo.setMembershipDays(num < 0 ? 0 : num);
         StudentTotal total = (StudentTotal) redissonClient.getBucket(CacheNameEnum.STUDENT_TOTAL.getRedisKey(user.getId()))
                 .get();

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

@@ -9,7 +9,6 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
 import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
@@ -30,7 +29,6 @@ import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
 import org.springframework.transaction.annotation.Transactional;
-import springfox.documentation.spring.web.json.Json;
 
 import javax.annotation.PostConstruct;
 import java.math.BigDecimal;
@@ -39,7 +37,6 @@ import java.util.*;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
-
 @Service
 public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> implements UserOrderService {
     private final static Logger log = LoggerFactory.getLogger(UserOrderServiceImpl.class);
@@ -94,7 +91,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderSuccess.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseSuccess);
 
         /**********订单取消后******************/
-        //orderCancel.put();
+        orderCancel.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseFailed);
     }
 
     @Override
@@ -176,7 +173,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
 
         //验证成功后,订单入库
-        UserOrderVo orderVo = insertOrder(orderNo,orderReq, resList);
+        UserOrderVo orderVo = insertOrder(orderNo, orderReq, resList);
 
         List<UserOrderDetailVo> orderDetailList = orderVo.getOrderDetailList();
         for (UserOrderDetailVo orderDetailVo : orderDetailList) {
@@ -213,7 +210,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     public HttpResponseResult<OrderPayRes> orderPaytoPaying(OrderPayReq payReq) {
         //查询订单
         UserOrderVo detail = detail(payReq.getOrderNo());
-        if(OrderStatusEnum.PAYING.equals(detail.getStatus())){
+        if (OrderStatusEnum.PAYING.equals(detail.getStatus())) {
             //处于付款中状态,需要拉起付款接口返回信息,并且去到汇付
             return orderPayPaying(payReq, detail);
         }
@@ -246,9 +243,6 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         List<UserOrderVo> orderList = baseMapper.selectPendingList();
         for (UserOrderVo userOrder : orderList) {
             //待支付订单直接取消
-            if (OrderStatusEnum.FAIL.equals(userOrder.getStatus())) {
-                failPayOrderHandle(userOrder);
-            }
             if (OrderStatusEnum.WAIT_PAY.equals(userOrder.getStatus())) {
                 waitPayOrderHandle(userOrder);
             }
@@ -258,17 +252,6 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
     }
 
-
-    /***
-     * 处理支付失败订单
-     * @author liweifan
-     * @param: userOrder
-     * @updateTime 2022/4/13 16:51
-     */
-    private void failPayOrderHandle(UserOrderVo userOrder) {
-        orderCancel(userOrder);
-    }
-
     /***
      * 处理待支付订单
      * @author liweifan
@@ -351,6 +334,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             return HttpResponseResult.succeed(orderPayRes);
         } else {
             //入订单付款表,同时修改订单状态
+            orderCancel(detail);
             insertOrderPayment(responseResult, payReq);
             baseMapper.updateStatusByOrderNo(payReq.getOrderNo(), OrderStatusEnum.FAIL.getCode());
             return HttpResponseResult.failed(responseResult.getMsg());
@@ -443,6 +427,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             orderDetail.setBizContent(res.getBizContent());
             orderDetail.setOriginalPrice(null != res.getOriginalPrice() ? res.getOriginalPrice() : BigDecimal.ZERO);
             orderDetail.setExpectPrice(null != res.getExpectPrice() ? res.getExpectPrice() : BigDecimal.ZERO);
+            orderDetail.setActualPrice(null != res.getActualPrice() ? res.getActualPrice() : BigDecimal.ZERO);
+            orderDetail.setCouponAmount(null != res.getCouponAmount() ? res.getCouponAmount() : BigDecimal.ZERO);
+
             orderDetail.setGoodNum(null != res.getGoodNum() ? res.getGoodNum() : 1);
             //商品单价计算,使用商品原价计算,退费计算公式(退费金额=实际订单金额-(商品单价 * 已经使用商品数))
             //其中,已经使用的商品单价按照原价算

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

@@ -0,0 +1,246 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/22
+ */
+@ApiModel(value = "StudentHomePage")
+public class StudentHomePage implements Serializable {
+    @ApiModelProperty(value = "直播课")
+    private List<Live> liveList;
+    @ApiModelProperty(value = "视频课")
+    private List<Video> videoList;
+
+    public static class Live {
+        @ApiModelProperty(value = "老师id")
+        private Long teacherId;
+        @ApiModelProperty(value = "老师姓名")
+        private String teacherName;
+        @ApiModelProperty(value = "老师头像")
+        private String avatar;
+
+        @ApiModelProperty(value = "课程组id")
+        private Long courseGroupId;
+        @ApiModelProperty(value = "课程组名称")
+        private String courseGroupName;
+        @ApiModelProperty(value = "课程组售价")
+        private BigDecimal courseGroupPrice;
+        @ApiModelProperty(value = "开课时间")
+        private Date courseStartTime;
+        @ApiModelProperty(value = "直播背景图")
+        private String backgroundPic;
+        @ApiModelProperty(value = "课程数")
+        private Integer courseNum;
+
+        public Long getTeacherId() {
+            return teacherId;
+        }
+
+        public void setTeacherId(Long teacherId) {
+            this.teacherId = teacherId;
+        }
+
+        public String getTeacherName() {
+            return teacherName;
+        }
+
+        public void setTeacherName(String teacherName) {
+            this.teacherName = teacherName;
+        }
+
+        public String getAvatar() {
+            return avatar;
+        }
+
+        public void setAvatar(String avatar) {
+            this.avatar = avatar;
+        }
+
+        public Long getCourseGroupId() {
+            return courseGroupId;
+        }
+
+        public void setCourseGroupId(Long courseGroupId) {
+            this.courseGroupId = courseGroupId;
+        }
+
+        public String getCourseGroupName() {
+            return courseGroupName;
+        }
+
+        public void setCourseGroupName(String courseGroupName) {
+            this.courseGroupName = courseGroupName;
+        }
+
+        public BigDecimal getCourseGroupPrice() {
+            return courseGroupPrice;
+        }
+
+        public void setCourseGroupPrice(BigDecimal courseGroupPrice) {
+            this.courseGroupPrice = courseGroupPrice;
+        }
+
+        public Date getCourseStartTime() {
+            return courseStartTime;
+        }
+
+        public void setCourseStartTime(Date courseStartTime) {
+            this.courseStartTime = courseStartTime;
+        }
+
+        public String getBackgroundPic() {
+            return backgroundPic;
+        }
+
+        public void setBackgroundPic(String backgroundPic) {
+            this.backgroundPic = backgroundPic;
+        }
+
+        public Integer getCourseNum() {
+            return courseNum;
+        }
+
+        public void setCourseNum(Integer courseNum) {
+            this.courseNum = courseNum;
+        }
+    }
+
+    public static class Video {
+        @ApiModelProperty(value = "老师id")
+        private Long teacherId;
+        @ApiModelProperty(value = "老师姓名")
+        private String teacherName;
+        @ApiModelProperty(value = "老师头像")
+        private String avatar;
+
+        @ApiModelProperty(value = "视频课组id")
+        private Long videoGroupId;
+        @ApiModelProperty(value = "视频课组名称")
+        private String videoGroupName;
+        @ApiModelProperty(value = "视频课组售价")
+        private BigDecimal lessonPrice;
+        @ApiModelProperty(value = "创建时间")
+        private Date createTime;
+        @ApiModelProperty(value = "课程封面")
+        private String lessonCoverUrl;
+        @ApiModelProperty(value = "课程数")
+        private Integer lessonCount;
+        @ApiModelProperty(value = "声部id")
+        private Integer subjectId;
+        @ApiModelProperty(value = "声部名称")
+        private String subjectName;
+
+        public Long getTeacherId() {
+            return teacherId;
+        }
+
+        public void setTeacherId(Long teacherId) {
+            this.teacherId = teacherId;
+        }
+
+        public String getTeacherName() {
+            return teacherName;
+        }
+
+        public void setTeacherName(String teacherName) {
+            this.teacherName = teacherName;
+        }
+
+        public String getAvatar() {
+            return avatar;
+        }
+
+        public void setAvatar(String avatar) {
+            this.avatar = avatar;
+        }
+
+        public Long getVideoGroupId() {
+            return videoGroupId;
+        }
+
+        public void setVideoGroupId(Long videoGroupId) {
+            this.videoGroupId = videoGroupId;
+        }
+
+        public String getVideoGroupName() {
+            return videoGroupName;
+        }
+
+        public void setVideoGroupName(String videoGroupName) {
+            this.videoGroupName = videoGroupName;
+        }
+
+        public BigDecimal getLessonPrice() {
+            return lessonPrice;
+        }
+
+        public void setLessonPrice(BigDecimal lessonPrice) {
+            this.lessonPrice = lessonPrice;
+        }
+
+        public Date getCreateTime() {
+            return createTime;
+        }
+
+        public void setCreateTime(Date createTime) {
+            this.createTime = createTime;
+        }
+
+        public String getLessonCoverUrl() {
+            return lessonCoverUrl;
+        }
+
+        public void setLessonCoverUrl(String lessonCoverUrl) {
+            this.lessonCoverUrl = lessonCoverUrl;
+        }
+
+        public Integer getLessonCount() {
+            return lessonCount;
+        }
+
+        public void setLessonCount(Integer lessonCount) {
+            this.lessonCount = lessonCount;
+        }
+
+        public Integer getSubjectId() {
+            return subjectId;
+        }
+
+        public void setSubjectId(Integer subjectId) {
+            this.subjectId = subjectId;
+        }
+
+        public String getSubjectName() {
+            return subjectName;
+        }
+
+        public void setSubjectName(String subjectName) {
+            this.subjectName = subjectName;
+        }
+    }
+
+    public List<Live> getLiveList() {
+        return liveList;
+    }
+
+    public void setLiveList(List<Live> liveList) {
+        this.liveList = liveList;
+    }
+
+    public List<Video> getVideoList() {
+        return videoList;
+    }
+
+    public void setVideoList(List<Video> videoList) {
+        this.videoList = videoList;
+    }
+}
+

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java

@@ -30,6 +30,8 @@ public class StudentHomeVo extends Student {
     private Integer unfinshClassHours;
     @ApiModelProperty("关注老师数")
     private Integer starTeacherNum;
+    @ApiModelProperty(value = "声部名称(支持多个,用逗号分隔) ")
+    private String subjectName;
 
     public String getHeardUrl() {
         return heardUrl;
@@ -102,4 +104,12 @@ public class StudentHomeVo extends Student {
     public void setMembershipDays(Integer membershipDays) {
         this.membershipDays = membershipDays;
     }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherStyleVideoVo.java

@@ -9,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty;
  * @Author: liweifan
  * @Data: 2022/4/11 14:44
  */
-@ApiModel(value = "TeacherStyleVideoVo对象", description = "老师风采信息")
+@ApiModel(value = "TeacherStyleVideoVo", description = "老师风采信息")
 public class TeacherStyleVideoVo extends TeacherStyleVideo {
     @ApiModelProperty(value = "是否直播 0否 1是")
     private YesOrNoEnum liveFlag;

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserAccountRecordVo.java

@@ -1,7 +1,12 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * @Author: liweifan
@@ -11,4 +16,29 @@ import io.swagger.annotations.ApiModel;
 public class UserAccountRecordVo extends UserAccountRecord{
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty(value = "上课时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date startTime;
+
+	@ApiModelProperty(value = "下课时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date endTime;
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
 }

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

@@ -454,4 +454,39 @@
         SET class_date_=#{classDate},start_time_=#{startTime},end_time_=#{endTime}
         WHERE id_ = #{courseId}
     </update>
+    <select id="selectLive" resultType="com.yonge.cooleshow.biz.dal.vo.StudentHomePage$Live">
+        SELECT
+            u.id_ AS teacherId,
+            u.username_ AS teacherName,
+            u.avatar_ AS avatar,
+            g.id_ AS courseGroupId,
+            g.name_ AS courseGroupName,
+            g.course_price_ AS courseGroupPrice,
+            g.course_start_time_ AS courseStartTime,
+            g.background_pic_ AS backgroundPic,
+            g.course_num_ AS courseNum
+        FROM course_group g
+        LEFT JOIN sys_user u ON g.teacher_id_=u.id_
+        WHERE type_='LIVE'
+        ORDER BY courseStartTime DESC LIMIT 4
+    </select>
+    <select id="selectVideo" resultType="com.yonge.cooleshow.biz.dal.vo.StudentHomePage$Video">
+        SELECT
+            u.id_ AS teacherId,
+            u.username_ AS teacherName,
+            u.avatar_ AS avatar,
+            g.id_ AS videoGroupId,
+            g.lesson_name_ AS videoGroupName,
+            g.lesson_price_ AS lessonPrice,
+            g.create_time_ AS createTime,
+            g.lesson_cover_url_ AS lessonCoverUrl,
+            g.lesson_count_ AS lessonCount,
+            g.lesson_subject_ AS subjectId,
+            s.name_ AS subjectName
+        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_
+        WHERE g.audit_status_='PASS'
+        ORDER BY g.create_time_ DESC LIMIT 4
+    </select>
 </mapper>

+ 23 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountRecordMapper.xml

@@ -30,14 +30,34 @@
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
         SELECT
-        <include refid="baseColumns"/>
+            <include refid="baseColumns"/>
         FROM user_cash_account_record t
         where t.id_ = #{id}
     </select>
 
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
         SELECT
-        <include refid="baseColumns" />
+            <include refid="baseColumns" />,
+            a.start_time_ as startTime,
+            a.end_time_ as endTime
         FROM user_cash_account_record t
+        left join course_schedule a on t.biz_id_ = a.id_ and t.biz_type_ in ('PRACTICE','LIVE')
+        <where>
+            <if test="null != param.userId">
+                AND t.account_id_ = #{param.userId}
+            </if>
+            <if test="null != param.inOrOut">
+                AND t.in_or_out_ = #{param.inOrOut}
+            </if>
+            <if test="null != param.bizType">
+                AND t.biz_type_ = #{param.bizType}
+            </if>
+            <if test="param.startTime !=null">
+                <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
+            </if>
+            <if test="param.endTime !=null">
+                <![CDATA[AND t.create_time_ <= #{param.endTime} ]]>
+            </if>
+        </where>
     </select>
 </mapper>

+ 4 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -113,11 +113,11 @@
                 p.trans_no_ LIKE CONCAT('%', #{param.search}, '%')
                 )
             </if>
-            <if test="null != param.orderType">
-                AND t.order_type_ = #{param.orderType}
+            <if test="null != param.orderType and '' != param.orderType">
+                AND INTE_ARRAY(#{param.orderType},t.order_type_)
             </if>
-            <if test="null != param.status">
-                AND t.status_ = #{param.status}
+            <if test="null != param.status and '' != param.status">
+                AND INTE_ARRAY(#{param.status},t.status_)
             </if>
             <if test="param.startTime !=null">
                 <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>

+ 7 - 5
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java

@@ -13,6 +13,7 @@ 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.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -23,12 +24,8 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -129,5 +126,10 @@ public class StudentCourseScheduleController extends BaseController {
         return succeed(courseScheduleService.queryStudentLiveCourse(param));
     }
 
+    @ApiOperation("学生-首页-直播课&视频课")
+    @GetMapping("/queryLiveAndVideo")
+    public HttpResponseResult<StudentHomePage> queryLiveAndVideo() {
+        return succeed(courseScheduleService.queryLiveAndVideo());
+    }
 }
 

+ 2 - 2
toolset/utils/src/main/java/com/yonge/toolset/utils/easyexcel/ExcelUtils.java

@@ -133,9 +133,9 @@ public class ExcelUtils {
             response.setContentType("application/vnd.ms-excel");
             response.setCharacterEncoding(Charsets.UTF_8.name());
             fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name());
-            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ExcelTypeEnum.XLS.getValue());
             if (!CollectionUtils.isEmpty(data)) {
-                EasyExcel.write(response.getOutputStream(), data.get(0).getClass()).sheet(sheetName).doWrite(data);
+                EasyExcel.write(response.getOutputStream(), data.get(0).getClass()).excelType(ExcelTypeEnum.XLS).sheet(sheetName).doWrite(data);
             } else {
                 throw new RuntimeException("没有数据导出!");
             }