Ver Fonte

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

liujunchi há 3 anos atrás
pai
commit
85a204cbe3
40 ficheiros alterados com 671 adições e 232 exclusões
  1. 14 7
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java
  2. 16 4
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java
  3. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/WithdrawalStatusConvert.java
  4. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  5. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  6. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java
  7. 11 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/excel/UserWithdrawalExport.java
  8. 41 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/HomeTotalReq.java
  9. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  10. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java
  11. 6 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherWithdrawalSearch.java
  12. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawal.java
  13. 4 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCard.java
  14. 16 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuthStatusEnum.java
  15. 6 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/TimeTypeEnum.java
  16. 16 24
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  17. 11 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java
  18. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  19. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  20. 1 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java
  21. 29 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  22. 52 63
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  23. 17 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java
  24. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  25. 29 16
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  26. 23 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  27. 5 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardServiceImpl.java
  28. 46 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVo.java
  29. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java
  30. 93 24
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/HomeTotalVo.java
  31. 5 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  32. 37 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  33. 4 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  34. 23 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  35. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml
  36. 22 5
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java
  37. 49 6
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  38. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java
  39. 4 4
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java
  40. 2 2
      toolset/utils/src/main/java/com/yonge/toolset/utils/easyexcel/ExcelDataReader.java

+ 14 - 7
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.HomeTotalReq;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.service.HomeService;
 import com.yonge.cooleshow.biz.dal.vo.HomeTotalVo;
@@ -13,6 +14,8 @@ import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+
 @RestController
 @RequestMapping("/home")
 @Api(value = "首页", tags = "首页")
@@ -23,14 +26,18 @@ public class HomeController extends BaseController {
     private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "查询用户待办事项数")
-    @GetMapping("/getUserToDoNum")
+    @PostMapping("/getUserToDoNum")
     @PreAuthorize("@pcs.hasPermissions('home/getUserToDoNum')")
-    public HttpResponseResult<HomeTotalVo> getUserToDoNum() {
-        SysUser user = sysUserFeignService.queryUserInfo();
-        if (user == null || null == user.getId()) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return succeed(homeService.getUserToDoNum(user.getId()));
+    public HttpResponseResult<HomeTotalVo.UserToDoNum> getUserToDoNum() {
+        return succeed(homeService.getUserToDoNum());
+    }
+
+    @ApiOperation(value = "老师数据统计")
+    @PostMapping("/totalTeacher")
+    @PreAuthorize("@pcs.hasPermissions('home/totalTeacher')")
+    public HttpResponseResult<HomeTotalVo.TotalTeacher> totalTeacher(@Valid @RequestBody HomeTotalReq totalReq) {
+        return succeed(homeService.totalTeacher(totalReq));
     }
 
+
 }

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

@@ -2,7 +2,11 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
+import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -30,7 +34,8 @@ import java.util.*;
 @RequestMapping("/userWithdrawal")
 @Api(value = "用户账户提现表", tags = "用户账户提现表")
 public class UserWithdrawalController extends BaseController {
-
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
     @Autowired
     private UserWithdrawalService userWithdrawalService;
 
@@ -62,13 +67,16 @@ public class UserWithdrawalController extends BaseController {
         List<UserWithdrawalVo> withdrawalVoList = userWithdrawalService.selectList(query);
         List<UserWithdrawalExport> list = new ArrayList<>();
         withdrawalVoList.forEach(o -> {
+            if(AuthStatusEnum.PASS.equals(o.getStatus())){
+                return;
+            }
             UserWithdrawalExport export = new UserWithdrawalExport();
             try {
                 BeanUtils.copyProperties(export, o);
                 StringBuffer buffer = new StringBuffer(export.getId().toString());
                 buffer.append(export.getUserId());
-                buffer.append(export.getAmount());
-                buffer.append(export.getActualAmount());
+                buffer.append(export.getAmount().setScale(2, RoundingMode.HALF_UP));
+                buffer.append(export.getActualAmount().setScale(2, RoundingMode.HALF_UP));
                 String s = DigestUtils.md5DigestAsHex(buffer.toString().getBytes());
                 export.setSign(s);
                 list.add(export);
@@ -91,9 +99,13 @@ public class UserWithdrawalController extends BaseController {
         if (null == file) {
             return HttpResponseResult.failed("请上传文件");
         }
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
         ExcelDataReader<UserWithdrawalExport> reader = ExcelUtils.getReader(UserWithdrawalExport.class, file);
         try {
-            userWithdrawalService.importExcel(reader.getDataList());
+            userWithdrawalService.importExcel(reader.getDataList(),user.getId());
             return HttpResponseResult.succeed();
         }catch (ExcelException e){
             return HttpResponseResult.failed(HttpStatus.INTERNAL_SERVER_ERROR,e.getErrMsgList(),"导入文件异常");

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/WithdrawalStatusConvert.java

@@ -26,16 +26,16 @@ public class WithdrawalStatusConvert implements Converter<AuthStatusEnum> {
     @Override
     public AuthStatusEnum convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
         try {
-            return AuthStatusEnum.valueOf(cellData.getStringValue());
-        }catch (Exception e){
+            return AuthStatusEnum.getByName(cellData.getStringValue().trim());
+        } catch (Exception e) {
             return null;
         }
     }
 
     @Override
     public CellData convertToExcelData(AuthStatusEnum statusEnum, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
-        if(null != statusEnum){
-            return new CellData(statusEnum.getCode());
+        if (null != statusEnum) {
+            return new CellData(statusEnum.getName());
         }
         return new CellData("异常数据");
     }

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

@@ -71,7 +71,6 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     List<MyCourseVo> queryTeacherPracticeCourse(IPage page, @Param("param") MyCourseSearch query);
 
 
-
     /**
      * 老师未布置的课程作业数量
      * <p>
@@ -99,5 +98,17 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     //学生端-课表-日历-用户
     List<CourseStudent> queryCourseTeacher(@Param("param") MyCourseSearch search);
+
+    /**
+     * 学生-查询直播课
+     *
+     * @param param <p> - studentId 学生id
+     *              <p> - courseState 课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消
+     *              <p> - startDate 开始时间
+     *              <p> - endDate 结束时间
+     *              <p> - subjectId 声部id
+     *              <p> - type PRACTICE 陪练课 LIVE 直播课
+     */
+    List<CourseStudent> queryStudentLiveCourse(@Param("param") Map<String, Object> param);
 }
 

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -109,4 +109,12 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
      */
     List<TeacherMusicSheetVo> selectAuditPage(@Param("page") IPage<TeacherMusicSheetVo> page, @Param(
             "param") TeacherMusicSheetAuditSearch query);
+
+    /***
+     * 查询待处理的记录数
+     * @author liweifan
+     * @updateTime 2022/3/30 18:45
+     * @return: java.lang.Integer
+     */
+    Integer getUserToDoNum();
 }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java

@@ -26,6 +26,14 @@ public interface UserOrderDao extends BaseMapper<UserOrder>{
 	 * @return: com.yonge.cooleshow.biz.dal.vo.OrderVo
 	 */
 	UserOrderVo detailByOrderNo(@Param("orderNo") String orderNo);
+	/***
+	 * app查询
+	 * @author liweifan
+	 * @param: id
+	 * @updateTime 2022/4/20 15:57
+	 * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderVo
+	 */
+	UserOrderVo detailApp(@Param("id")Long id);
 	/**
 	 * 分页查询
      * @author liweifan
@@ -56,4 +64,5 @@ public interface UserOrderDao extends BaseMapper<UserOrder>{
 	 * @return: java.lang.Integer
 	 */
     Integer updateStatusByOrderNo(@Param("orderNo")String orderNo,@Param("orderStatus") String orderStatus);
+
 }

+ 11 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/excel/UserWithdrawalExport.java

@@ -35,14 +35,15 @@ public class UserWithdrawalExport {
     private String bankCard;
     @ExcelProperty(value = "转账金额", index = 7)
     private BigDecimal actualAmount;
-    @NotBlank(message = "银行流水号不能为空")
     @ExcelProperty(value = "银行流水号", index = 8)
     private String bankFlowNo;
     @NotNull(message = "提现状态不能为空")
     @ExcelProperty(value = "提现状态 审核中/通过/不通过", index = 9,converter = WithdrawalStatusConvert.class)
     private AuthStatusEnum status;
+    @ExcelProperty(value = "审核原因", index = 10)
+    private String verifyReason;
     @NotBlank(message = "签名不能为空")
-    @ExcelProperty(value = "签名", index = 10)
+    @ExcelProperty(value = "签名", index = 11)
     private String sign;
 
     public Long getId() {
@@ -132,4 +133,12 @@ public class UserWithdrawalExport {
     public void setSign(String sign) {
         this.sign = sign;
     }
+
+    public String getVerifyReason() {
+        return verifyReason;
+    }
+
+    public void setVerifyReason(String verifyReason) {
+        this.verifyReason = verifyReason;
+    }
 }

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

@@ -0,0 +1,41 @@
+package com.yonge.cooleshow.biz.dal.dto.req;
+
+import com.yonge.cooleshow.biz.dal.enums.TimeTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:07
+ */
+@ApiModel(value = "HomeTotalReq对象", description = "首页统计查询对象")
+public class HomeTotalReq {
+
+    @NotNull(message = "时间类型不能为空")
+    @ApiModelProperty("时间类型 MONTH、月度  YEAR、年度")
+    private TimeTypeEnum timeType;
+    @NotBlank(message = "时间不能为空")
+    @ApiModelProperty("时间 yyyy | yyyy-MM")
+    private String dateTime;
+
+
+
+    public TimeTypeEnum getTimeType() {
+        return timeType;
+    }
+
+    public void setTimeType(TimeTypeEnum timeType) {
+        this.timeType = timeType;
+    }
+
+    public String getDateTime() {
+        return dateTime;
+    }
+
+    public void setDateTime(String dateTime) {
+        this.dateTime = dateTime;
+    }
+}

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

@@ -48,8 +48,8 @@ public class OrderReq {
         private GoodTypeEnum goodType;
         @ApiModelProperty("商品名称 ")
         private String goodName;
-        @ApiModelProperty(value = "业务内容 订单业务内容json")
-        private String bizContent;
+        @ApiModelProperty(value = "业务内容")
+        private Object bizContent;
 
         public Long getUserId() {
             return userId;
@@ -67,11 +67,11 @@ public class OrderReq {
             this.goodType = goodType;
         }
 
-        public String getBizContent() {
+        public Object getBizContent() {
             return bizContent;
         }
 
-        public void setBizContent(String bizContent) {
+        public void setBizContent(Object bizContent) {
             this.bizContent = bizContent;
         }
 

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

@@ -36,6 +36,9 @@ public class OrderSearch extends QueryInfo{
 	@ApiModelProperty("卖家id")
 	private Long merchId;
 
+	@ApiModelProperty("查询时间(yyyy-mm) ")
+	private String searchDate;
+
 	public String getSearchNo() {
 		return searchNo;
 	}
@@ -91,4 +94,13 @@ public class OrderSearch extends QueryInfo{
 	public void setMerchId(Long merchId) {
 		this.merchId = merchId;
 	}
+
+
+	public String getSearchDate() {
+		return searchDate;
+	}
+
+	public void setSearchDate(String searchDate) {
+		this.searchDate = searchDate;
+	}
 }

+ 6 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherWithdrawalSearch.java

@@ -30,8 +30,8 @@ public class TeacherWithdrawalSearch extends QueryInfo{
 	private Date endTime;
 
 
-	@ApiModelProperty("提现时间(yyyy-mm) ")
-	private String withdrawalDate;
+	@ApiModelProperty("查询时间(yyyy-mm) ")
+	private String searchDate;
 
 	private Long userId;
 
@@ -67,12 +67,12 @@ public class TeacherWithdrawalSearch extends QueryInfo{
 		this.endTime = endTime;
 	}
 
-	public String getWithdrawalDate() {
-		return withdrawalDate;
+	public String getSearchDate() {
+		return searchDate;
 	}
 
-	public void setWithdrawalDate(String withdrawalDate) {
-		this.withdrawalDate = withdrawalDate;
+	public void setSearchDate(String searchDate) {
+		this.searchDate = searchDate;
 	}
 
 	public Long getUserId() {

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawal.java

@@ -51,7 +51,11 @@ public class UserWithdrawal implements Serializable {
     @TableField(value = "status_")
     private AuthStatusEnum status;
     @ApiModelProperty("审核人")
+    @TableField(value = "verify_user_id_")
     private Long verifyUserId;
+    @ApiModelProperty("审核原因")
+    @TableField(value = "verify_reason_")
+    private String verifyReason;
     @ApiModelProperty("发起时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -159,4 +163,12 @@ public class UserWithdrawal implements Serializable {
     public void setVerifyUserId(Long verifyUserId) {
         this.verifyUserId = verifyUserId;
     }
+
+    public String getVerifyReason() {
+        return verifyReason;
+    }
+
+    public void setVerifyReason(String verifyReason) {
+        this.verifyReason = verifyReason;
+    }
 }

+ 4 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCard.java

@@ -1,10 +1,9 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.yonge.cooleshow.biz.dal.enums.VipTimeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.TimeTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -29,7 +28,7 @@ public class VipCard implements Serializable {
     @ApiModelProperty("时长类型:MONTH、月卡 QUARTER、季卡 YEAR、年卡 ")
 	@TableField(value = "time_type_")
     @NotNull(message = "时长类型不能为空")
-    private VipTimeTypeEnum timeType;
+    private TimeTypeEnum timeType;
     @ApiModelProperty("原价 ")
 	@TableField(value = "original_price_")
     @NotNull(message = "原价不能为空")
@@ -63,11 +62,11 @@ public class VipCard implements Serializable {
         this.id = id;
     }
 
-    public VipTimeTypeEnum getTimeType() {
+    public TimeTypeEnum getTimeType() {
         return timeType;
     }
 
-    public void setTimeType(VipTimeTypeEnum timeType) {
+    public void setTimeType(TimeTypeEnum timeType) {
         this.timeType = timeType;
     }
 

+ 16 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuthStatusEnum.java

@@ -16,11 +16,11 @@ public enum AuthStatusEnum implements BaseEnum<String, AuthStatusEnum> {
     UNPASS("不通过");
     @EnumValue
     private String code;
-    private String msg;
+    private String name;
 
-    AuthStatusEnum(String msg) {
+    AuthStatusEnum(String name) {
         this.code = getCode();
-        this.msg = msg;
+        this.name = name;
     }
 
     @Override
@@ -32,11 +32,20 @@ public enum AuthStatusEnum implements BaseEnum<String, AuthStatusEnum> {
         this.code = code;
     }
 
-    public String getMsg() {
-        return msg;
+    public String getName() {
+        return name;
     }
 
-    public void setMsg(String msg) {
-        this.msg = msg;
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public static AuthStatusEnum getByName(String name) {
+        for (AuthStatusEnum statusEnum : AuthStatusEnum.values()) {
+            if (statusEnum.getName().equals(name)) {
+                return statusEnum;
+            }
+        }
+        return null;
     }
 }

+ 6 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/VipTimeTypeEnum.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/TimeTypeEnum.java

@@ -4,19 +4,19 @@ import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.cooleshow.common.enums.BaseEnum;
 
 /**
- * 会员卡
+ * 时间枚举
  * @Author: liweifan
  * @Data: 2022/4/13 14:22
  */
-public enum VipTimeTypeEnum implements BaseEnum<String, VipTimeTypeEnum> {
-    MONTH("月"),
-    QUARTER("季"),
-    YEAR("年");
+public enum TimeTypeEnum implements BaseEnum<String, TimeTypeEnum> {
+    MONTH("月"),
+    QUARTER("季"),
+    YEAR("年");
     @EnumValue
     private String code;
     private String msg;
 
-    VipTimeTypeEnum(String msg) {
+    TimeTypeEnum(String msg) {
         this.code = this.name();
         this.msg = msg;
     }

+ 16 - 24
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
 import com.yonge.cooleshow.biz.dal.vo.PracticeTeacherVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherLiveCourseInfoVo;
 import com.yonge.cooleshow.common.page.PageInfo;
+import org.apache.ibatis.annotations.Param;
 
 import javax.validation.Valid;
 import java.util.Date;
@@ -90,26 +91,6 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
                                 Date startTime, Date endTime);
 
     /**
-     * 修改-锁定课时
-     *
-     * @param id 课程id
-     */
-    void lockCourseTime(Long id);
-
-    /**
-     * 修改-解锁课时
-     *
-     * @param id 课程id
-     */
-    void unlockCourseTime(Long id);
-
-    /**
-     * 添加课时
-     */
-    void add(@Valid CourseSchedule course);
-
-
-    /**
      * 创建直播课时选课时的日历
      * <P>主要查询该老师目前的课程时间
      * <P>根据传入的单课时时长将时间分片后来匹配数据库中课程时间,得到每日空余时间
@@ -164,7 +145,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      * 检查课程是否属于老师
      *
      * @param teacherId 老师id
-     * @param courseId 课程id
+     * @param courseId  课程id
      * @return boolean true 属于老师
      */
     boolean checkTeacherCourseSchedule(Long teacherId, Long courseId);
@@ -175,15 +156,26 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      * 检查学生是否购买课程
      *
      * @param studentId 学生id
-     * @param courseId 课程id
+     * @param courseId  课程id
      * @return boolean true 购买
      */
     boolean checkStudentCourseSchedule(Long studentId, Long courseId);
 
-    Map<String,Object> queryCourseUser(MyCourseSearch search);
+    Map<String, Object> queryCourseUser(MyCourseSearch search);
 
     IPage<PracticeTeacherVo> teacherList(IPage<PracticeTeacherVo> page, PracticeTeacherSearch search);
 
-    Map<String,Object> queryCourseTeacher(MyCourseSearch search);
+    Map<String, Object> queryCourseTeacher(MyCourseSearch search);
+
+    /**
+     * 学生-查询直播课
+     *
+     * @param param 传入参数
+     *              <p> - studentId 学生id
+     *              <p> - courseState 课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消
+     *              <p> - classDate 查询时间-年月
+     *              <p> - subjectId 声部id
+     */
+    List<CourseStudent> queryStudentLiveCourse(Map<String, Object> param);
 }
 

+ 11 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.yonge.cooleshow.biz.dal.dto.req.HomeTotalReq;
 import com.yonge.cooleshow.biz.dal.vo.HomeTotalVo;
 
 /**
@@ -10,9 +11,17 @@ public interface HomeService {
     /***
      * 查询首页待办事项
      * @author liweifan
-     * @param: id
      * @updateTime 2022/3/30 18:10
      * @return: com.yonge.cooleshow.biz.dal.vo.HomeTotalVo
      */
-    HomeTotalVo getUserToDoNum(Long id);
+    HomeTotalVo.UserToDoNum getUserToDoNum();
+
+    /***
+     * 统计老师数据
+     * @author liweifan
+     * @param: totalReq
+     * @updateTime 2022/4/20 17:00
+     * @return: com.yonge.cooleshow.biz.dal.vo.HomeTotalVo.TotalTeacher
+     */
+    HomeTotalVo.TotalTeacher totalTeacher(HomeTotalReq totalReq);
 }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java

@@ -165,4 +165,11 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return
      */
     Integer countTeacherMusicSheet(SysUser sysUser);
+    /***
+     * 查询待处理的记录数
+     * @author liweifan
+     * @updateTime 2022/3/30 18:41
+     * @return: java.lang.Integer
+     */
+    Integer getUserToDoNum();
 }

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

@@ -75,4 +75,6 @@ public interface UserOrderService extends IService<UserOrder>  {
 	 * @updateTime 2022/4/13 16:27
 	 */
     void pollingOrder();
+
+	UserOrderVo detailApp(Long id);
 }

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

@@ -9,7 +9,6 @@ import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
 import com.yonge.cooleshow.biz.dal.vo.res.WithdrawalInfoRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 
 import java.util.List;
@@ -67,5 +66,5 @@ public interface UserWithdrawalService extends IService<UserWithdrawal>  {
 	 * @updateTime 2022/4/20 9:45
 	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.util.List<com.yonge.toolset.utils.easyexcel.ErrMsg>>
 	 */
-    void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList);
+    void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList, Long userId);
 }

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

@@ -2,7 +2,6 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -117,6 +116,9 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setCoursePrice(group.getCoursePrice());
         result.setCourseNum(group.getCourseNum());
         result.setCourseIntroduce(group.getCourseIntroduce());
+        result.setSalesStartDate(group.getSalesStartDate());
+        result.setSalesEndDate(group.getSalesEndDate());
+        result.setMixStudentNum(group.getMixStudentNum());
         Optional.ofNullable(group.getTeacherId()).map(this::getSysUser)
                 .ifPresent(sysUser -> result.setTeacherName(sysUser.getRealName()));
         Optional.ofNullable(group.getSubjectId()).map(subjectService::get)
@@ -467,8 +469,8 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             return liveCourseGroupVoIPage;
         }
         List<Long> courseGroupIdList = records.stream()
-                                              .map(LiveCourseGroupVo::getCourseGroupId)
-                                              .collect(Collectors.toList());
+                .map(LiveCourseGroupVo::getCourseGroupId)
+                .collect(Collectors.toList());
 
         // 获取课程组声部
         List<LiveCourseGroupVo> subjectList = baseMapper.selectCourseGroupSubject(courseGroupIdList);
@@ -584,18 +586,22 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         List<CourseSchedule> courseList = JSONArray.parseArray(JSON.toJSONString(param.get("courseList")), CourseSchedule.class);
         CourseGroup courseGroup = (CourseGroup) param.get("courseGroup");
 
+        //获取每节课购买的价格
+        Map<Integer, BigDecimal> courseAveragePrice = getCourseAveragePrice(courseGroup.getCourseNum(), courseGroup.getCoursePrice());
         //写course_schedule_student_payment表 作为记录锁定时间用,防止重复购买,如果支付失败则删除该数据
         List<CourseScheduleStudentPayment> studentPaymentList = new ArrayList<>();
         Date now = new Date();
+        AtomicInteger i = new AtomicInteger(1);
         courseList.forEach(course -> {
             CourseScheduleStudentPayment studentPayment = new CourseScheduleStudentPayment();
             studentPayment.setUserId(studentId);
             studentPayment.setCourseGroupId(courseGroup.getId());
             studentPayment.setCourseId(course.getId());
             studentPayment.setOrderNo(orderNo);
-            studentPayment.setOriginalPrice(courseGroup.getCoursePrice());
-            studentPayment.setExpectPrice(courseGroup.getCoursePrice());
-            studentPayment.setActualPrice(courseGroup.getCoursePrice());
+            BigDecimal amount = courseAveragePrice.get(i.getAndIncrement());
+            studentPayment.setOriginalPrice(amount);
+            studentPayment.setExpectPrice(amount);
+            studentPayment.setActualPrice(amount);
             studentPayment.setCreatedTime(now);
             studentPayment.setUpdatedTime(now);
             studentPayment.setCourseType(courseGroup.getType());
@@ -609,7 +615,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void buyLiveCourseSuccess( UserOrderDetailVo orderParam) {
+    public void buyLiveCourseSuccess(UserOrderDetailVo orderParam) {
         log.info("学生购买直播课程-成功-回调,请求参数:{}", JSON.toJSONString(orderParam));
         String orderNo = orderParam.getOrderNo();
         //更新课程组的购买人数+1
@@ -654,6 +660,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
     }
 
+
     /**
      * 学生购买直播课程,计算每节课课酬
      *
@@ -667,13 +674,24 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         BiFunction<BigDecimal, BigDecimal, BigDecimal> getPrice = (p, r) -> p.subtract(p.multiply(r)).setScale(2, RoundingMode.HALF_UP);
         //总课酬
         BigDecimal totalRatePrice = getPrice.apply(totalPrice, rate);
-        //每节课累计总额
-        BigDecimal cumulativeAmount = BigDecimal.ZERO;
-        //每节课的课酬
+        return getCourseAveragePrice(totalCourseNum, totalRatePrice);
+    }
+
+    /**
+     * 计算课堂每节课价格
+     *
+     * @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);
             }

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

@@ -28,6 +28,7 @@ import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
 import org.redisson.api.RMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,7 +50,6 @@ import java.util.function.Function;
  * @author hgw
  * @since 2022-03-18 15:29:11
  */
-@Validated
 @Service("courseScheduleService")
 public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, CourseSchedule> implements CourseScheduleService {
 
@@ -201,46 +201,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 锁定课时
-     *
-     * @param id 课程id
-     */
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void lockCourseTime(Long id) {
-        CourseSchedule course = new CourseSchedule();
-        course.setId(id);
-        course.setLock(1);
-        course.setLockTime(new Date());
-        this.updateById(course);
-    }
-
-    /**
-     * 解锁
-     *
-     * @param id 课程id
-     */
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void unlockCourseTime(Long id) {
-        CourseSchedule course = new CourseSchedule();
-        course.setId(id);
-        course.setLock(0);
-        course.setLockTime(new Date());
-        this.updateById(course);
-    }
-
-    /**
-     * 添加课时
-     */
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void add(@Valid CourseSchedule course) {
-        CourseScheduleEnum.existCourseType(course.getType(), "课程类型不正确");
-        this.save(course);
-    }
-
-    /**
      * 创建直播课时选课时的日历
      * <P>主要查询该老师目前的课程时间
      * <P>根据传入的单课时时长将时间分片后来匹配数据库中课程时间,得到每日空余时间
@@ -678,7 +638,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      */
     public MyCourseSearch monthToDate(MyCourseSearch search) {
         String classMonth = search.getClassMonth();
-        if (StringUtils.isBlank(classMonth)){
+        if (StringUtils.isBlank(classMonth)) {
             return search;
         }
         String[] classDateSp = classMonth.split("-");
@@ -742,22 +702,22 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Date: 2022/4/18
      */
     @Override
-    public Map<String,Object> queryCourseUser(MyCourseSearch search) {
+    public Map<String, Object> queryCourseUser(MyCourseSearch search) {
         List<CourseStudent> studentList = baseMapper.queryCourseUser(search);
 
         Map<String, String> sysConfig = new HashMap<>();
         //提前XX分钟创建/进入陪练课房间时间
-        sysConfig.put("practiceStartTime",sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
+        sysConfig.put("practiceStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
         //陪练课结束后,XX分钟关闭房间
-        sysConfig.put("practiceEndTime",sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
+        sysConfig.put("practiceEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
         //提前XX分钟创建/进入直播房间的时间
-        sysConfig.put("liveStartTime",sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
+        sysConfig.put("liveStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
         //直播结束后,XX分钟关闭房间
-        sysConfig.put("liveEndTime",sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE));
+        sysConfig.put("liveEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE));
 
-        Map map=new HashMap();
-        map.put("sysConfig",sysConfig);
-        map.put("studentList",studentList);
+        Map map = new HashMap();
+        map.put("sysConfig", sysConfig);
+        map.put("studentList", studentList);
         return map;
     }
 
@@ -770,10 +730,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     public IPage<PracticeTeacherVo> teacherList(IPage<PracticeTeacherVo> page, PracticeTeacherSearch search) {
         String collation = search.getCollation();//排序规则
         String sortField = search.getSortField();//排序字段
-        if (StringUtils.isNotBlank(sortField)){
-            if (StringUtils.isNotBlank(collation)){
-                search.setSort(sortField+" "+collation);
-            }else search.setSort(sortField);
+        if (StringUtils.isNotBlank(sortField)) {
+            if (StringUtils.isNotBlank(collation)) {
+                search.setSort(sortField + " " + collation);
+            } else search.setSort(sortField);
         }
         return page.setRecords(baseMapper.teacherList(page, search));
     }
@@ -783,22 +743,51 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Author: cy
      * @Date: 2022/4/20
      */
-    public Map<String,Object> queryCourseTeacher(MyCourseSearch search) {
-        List<CourseStudent> teacherList=baseMapper.queryCourseTeacher(search);
+    public Map<String, Object> queryCourseTeacher(MyCourseSearch search) {
+        List<CourseStudent> teacherList = baseMapper.queryCourseTeacher(search);
         Map<String, String> sysConfig = new HashMap<>();
         //提前XX分钟创建/进入陪练课房间时间
-        sysConfig.put("practiceStartTime",sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
+        sysConfig.put("practiceStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
         //陪练课结束后,XX分钟关闭房间
-        sysConfig.put("practiceEndTime",sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
+        sysConfig.put("practiceEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
         //提前XX分钟创建/进入直播房间的时间
-        sysConfig.put("liveStartTime",sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
+        sysConfig.put("liveStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
         //直播结束后,XX分钟关闭房间
-        sysConfig.put("liveEndTime",sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE));
+        sysConfig.put("liveEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE));
 
-        Map map=new HashMap();
-        map.put("sysConfig",sysConfig);
-        map.put("studentList",teacherList);
+        Map map = new HashMap();
+        map.put("sysConfig", sysConfig);
+        map.put("studentList", teacherList);
         return map;
     }
+
+
+    /**
+     * 学生-查询直播课
+     *
+     * @param param 传入参数
+     *              <p> - studentId 学生id
+     *              <p> - courseState 课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消
+     *              <p> - classDate 查询时间-年月
+     *              <p> - subjectId 声部id
+     */
+    @Override
+    public List<CourseStudent> queryStudentLiveCourse(Map<String, Object> param) {
+        String classDate = WrapperUtil.toStr(param, "classDate");
+        String[] classDateSp = classDate.split("-");
+        LocalDate firstDay;
+        try {
+            firstDay = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
+        } catch (Exception e) {
+            throw new BizException("查询时间格式不正确 [" + classDate + "]");
+        }
+        //本月的最后一天
+        LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
+        param.put("type", CourseScheduleEnum.LIVE.getCode());
+        param.put("startDate", firstDay.toString());
+        param.put("endDate", lastDay.toString());
+       return baseMapper.queryStudentLiveCourse(param);
+    }
+
 }
 

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.yonge.cooleshow.biz.dal.dto.req.HomeTotalReq;
 import com.yonge.cooleshow.biz.dal.service.HomeService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
@@ -21,15 +22,24 @@ public class HomeServiceImpl implements HomeService {
     @Autowired
     private MusicSheetService musicSheetService;
     @Override
-    public HomeTotalVo getUserToDoNum(Long id) {
+    public HomeTotalVo.UserToDoNum getUserToDoNum() {
         Integer entryNum = entryRecordService.getUserToDoNum();
         Integer musicianNum = musicianRecordService.getUserToDoNum();
+        Integer musicNum = musicSheetService.getUserToDoNum();
 
-        HomeTotalVo homeTotalVo = new HomeTotalVo();
-        homeTotalVo.setEntryNum(entryNum);
-        homeTotalVo.setMusicianNum(musicianNum);
-        //todo 待审乐谱
-        homeTotalVo.setMusicNum(0);
-        return homeTotalVo;
+        HomeTotalVo.UserToDoNum userToDoNum = new HomeTotalVo.UserToDoNum();
+        userToDoNum.setEntryNum(entryNum);
+        userToDoNum.setMusicianNum(musicianNum);
+        userToDoNum.setMusicNum(musicNum);
+        return userToDoNum;
+    }
+
+    @Override
+    public HomeTotalVo.TotalTeacher totalTeacher(HomeTotalReq totalReq) {
+
+        /*if(){
+
+        }*/
+        return null;
     }
 }

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

@@ -271,4 +271,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
                 .eq(MusicSheet::getDelFlag,YesOrNoEnum.NO)
                 .count();
     }
+
+    @Override
+    public Integer getUserToDoNum() {
+        return baseMapper.getUserToDoNum();
+    }
 }

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

@@ -109,6 +109,20 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     }
 
     @Override
+    public UserOrderVo detailApp(Long id) {
+        UserOrderVo userOrderVo = baseMapper.detailApp(id);
+        if (null != userOrderVo) {
+            List<UserOrderDetailVo> orderDetilList = orderDetailService.getOrderDetilListByOrderNo(userOrderVo.getOrderNo());
+            orderDetilList.forEach(o -> {
+                o.setPlantformFee(null);
+                o.setPlantformFeeRate(null);
+            });
+            userOrderVo.setOrderDetailList(orderDetilList);
+        }
+        return userOrderVo;
+    }
+
+    @Override
     public IPage<UserOrderVo> selectPage(IPage<UserOrderVo> page, OrderSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
@@ -193,7 +207,6 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
     }
 
-
     @Override
     public void pollingOrder() {
         //查询创建时间超过半小时还在交易中的订单
@@ -212,6 +225,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
     }
 
+
     /***
      * 处理支付失败订单
      * @author liweifan
@@ -293,7 +307,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         HttpResponseResult<Map<String, Object>> responseResult = paymentSdk.executePayment(paymentReq);
         if (responseResult.getStatus()) {
             OrderPayRes orderPayRes = new OrderPayRes();
-            orderPayRes.setPay_amt(detail.getActualPrice().setScale(2).toString());
+            orderPayRes.setPay_amt(detail.getActualPrice().setScale(2, RoundingMode.HALF_UP).toString());
             String pay_info = ((JSONObject) responseResult.getData().get("expend")).getString("pay_info");
             orderPayRes.setPay_info(pay_info);
 
@@ -326,7 +340,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             Map<String, Object> res = responseResult.getData();
             orderPayment.setTransNo(res.get("id").toString());
             orderPayment.setPayAmt(
-                    new BigDecimal(res.get("pay_amt").toString()).setScale(2)
+                    new BigDecimal(res.get("pay_amt").toString()).setScale(2, RoundingMode.HALF_UP)
             );
             String pay_info = ((JSONObject) res.get("expend")).getString("pay_info");
             orderPayment.setPayInfo(pay_info);
@@ -378,9 +392,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         userOrder.setStatus(OrderStatusEnum.WAIT_PAY);
         userOrder.setUserNote(orderReq.getUserNote());
         userOrder.setCreateTime(new Date());
-        userOrder.setOriginalPrice(new BigDecimal(0));
-        userOrder.setExpectPrice(new BigDecimal(0));
-        userOrder.setPlantformFee(new BigDecimal(0));
+        userOrder.setOriginalPrice(BigDecimal.ZERO);
+        userOrder.setExpectPrice(BigDecimal.ZERO);
+        userOrder.setPlantformFee(BigDecimal.ZERO);
         List<UserOrderDetailVo> orderDetailList = new ArrayList<>();
         for (OrderCreateRes res : resList) {
 
@@ -390,14 +404,13 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             orderDetail.setGoodType(res.getGoodType());
             orderDetail.setBizId(res.getBizId());
             orderDetail.setBizContent(res.getBizContent());
-            orderDetail.setOriginalPrice(null != res.getOriginalPrice() ? res.getOriginalPrice() : new BigDecimal(0));
-            orderDetail.setExpectPrice(null != res.getExpectPrice() ? res.getExpectPrice() : new BigDecimal(0));
+            orderDetail.setOriginalPrice(null != res.getOriginalPrice() ? res.getOriginalPrice() : BigDecimal.ZERO);
+            orderDetail.setExpectPrice(null != res.getExpectPrice() ? res.getExpectPrice() : BigDecimal.ZERO);
             orderDetail.setGoodNum(null != res.getGoodNum() ? res.getGoodNum() : 1);
             //商品单价计算,使用商品原价计算,退费计算公式(退费金额=实际订单金额-(商品单价 * 已经使用商品数))
             //其中,已经使用的商品单价按照原价算
             orderDetail.setGoodPrice(
-                    orderDetail.getOriginalPrice().divide(new BigDecimal(orderDetail.getGoodNum())).setScale(2)
-            );
+                    orderDetail.getOriginalPrice().divide(new BigDecimal(orderDetail.getGoodNum()), 2, RoundingMode.HALF_UP));
             //平台服务费
             BigDecimal serviceFeeRate = getServiceFeeRate(res.getGoodType());
             orderDetail.setPlantformFee(userOrder.getExpectPrice().multiply(serviceFeeRate));
@@ -405,8 +418,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             orderDetail.setBizParam(res.getBizParam());
             orderDetail.setCreateTime(new Date());
 
-            orderReq.getOrderInfos().forEach(o->{
-                if(o.getGoodType().equals(res.getGoodType())){
+            orderReq.getOrderInfos().forEach(o -> {
+                if (o.getGoodType().equals(res.getGoodType())) {
                     orderDetail.setGoodName(o.getGoodName());
                 }
             });
@@ -421,11 +434,11 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
 
         //todo 优惠券优惠金额,暂时为0
-        BigDecimal couponAmount = new BigDecimal(0);
-        userOrder.setActualPrice(userOrder.getExpectPrice().subtract(couponAmount).setScale(2));
+        BigDecimal couponAmount = BigDecimal.ZERO;
+        userOrder.setActualPrice(userOrder.getExpectPrice().subtract(couponAmount).setScale(2, RoundingMode.HALF_UP));
         userOrder.setCouponAmount(couponAmount);
         if (userOrder.getActualPrice().subtract(orderReq.getActualPrice()).abs()
-                .compareTo(new BigDecimal(0.01)) > 0) {
+                .compareTo(new BigDecimal("0.01")) > 0) {
             throw new BizException("交易金额异常");
         }
 
@@ -463,7 +476,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         } else if (GoodTypeEnum.MUSIC.equals(goodTypeEnum)) {
             configValue = sysConfigService.findConfigValue(SysConfigConstant.MUSIC_SHEET_SERVICE_FEE);
         }
-        return new BigDecimal(configValue).divide(new BigDecimal(100));
+        return new BigDecimal(configValue).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
     }
 
     /***

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

@@ -38,6 +38,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.DigestUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Date;
@@ -128,31 +129,43 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
     }
 
     @Override
-    @Transactional
-    public void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList) {
+    @Transactional(rollbackFor = Exception.class)
+    public void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList, Long userId) {
         List<ErrMsg> errMsgList = new ArrayList<>();
         dataList.sort(Comparator.comparingInt(ExcelDataReaderProperty::getRowIndex));
         List<UserWithdrawal> userWithdrawalList = new ArrayList<>();
         for (ExcelDataReaderProperty<UserWithdrawalExport> dataReaderProperty : dataList) {
             String errMsg = dataReaderProperty.getErrorMessage();
-            if (StringUtil.isEmpty(errMsg)) {
+            if (!StringUtil.isEmpty(errMsg)) {
                 errMsgList.add(new ErrMsg(dataReaderProperty.getRowIndex(), errMsg));
                 continue;
             }
             UserWithdrawalExport data = dataReaderProperty.getClazz();
             StringBuffer buffer = new StringBuffer(data.getId().toString());
             buffer.append(data.getUserId());
-            buffer.append(data.getAmount());
-            buffer.append(data.getActualAmount());
+            buffer.append(data.getAmount().setScale(2, RoundingMode.HALF_UP));
+            buffer.append(data.getActualAmount().setScale(2, RoundingMode.HALF_UP));
             String sign = DigestUtils.md5DigestAsHex(buffer.toString().getBytes());
             if (!data.getSign().equals(sign)) {
                 errMsgList.add(new ErrMsg(dataReaderProperty.getRowIndex(), "验签失败"));
                 continue;
             }
+            if(AuthStatusEnum.PASS.equals(data.getStatus()) && StringUtil.isEmpty(data.getBankFlowNo())){
+                errMsgList.add(new ErrMsg(dataReaderProperty.getRowIndex(), "审核通过时,转账流水号不能为空"));
+                continue;
+            }
+            if(!AuthStatusEnum.DOING.equals(data.getStatus())
+                    && StringUtil.isEmpty(data.getVerifyReason())){
+                errMsgList.add(new ErrMsg(dataReaderProperty.getRowIndex(), "审核理由不能为空"));
+                continue;
+            }
             UserWithdrawal userWithdrawal = new UserWithdrawal();
             userWithdrawal.setId(data.getId());
             userWithdrawal.setBankFlowNo(data.getBankFlowNo());
             userWithdrawal.setStatus(data.getStatus());
+            userWithdrawal.setVerifyReason(data.getVerifyReason());
+            userWithdrawal.setVerifyUserId(userId);
+            userWithdrawal.setTransferTime(new Date());
             userWithdrawalList.add(userWithdrawal);
         }
         if (!CollectionUtils.isEmpty(errMsgList)) {
@@ -169,7 +182,11 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
      */
     private void authWithdrawalBancth(List<UserWithdrawal> userWithdrawalList) {
         for (UserWithdrawal userWithdrawal : userWithdrawalList) {
-            baseMapper.updateById(userWithdrawal);
+            UserWithdrawal old = baseMapper.selectById(userWithdrawal.getId());
+            if(null != old && !AuthStatusEnum.PASS.equals(old.getStatus())
+                && !old.getStatus().equals(userWithdrawal.getStatus())){
+                baseMapper.updateById(userWithdrawal);
+            }
         }
     }
 

+ 5 - 12
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardServiceImpl.java

@@ -1,22 +1,16 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
-import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.VipTimeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.TimeTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import io.swagger.annotations.ApiModelProperty;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,7 +19,6 @@ import com.yonge.cooleshow.biz.dal.vo.VipCardVo;
 import com.yonge.cooleshow.biz.dal.dao.VipCardDao;
 import com.yonge.cooleshow.biz.dal.service.VipCardService;
 
-import java.math.BigDecimal;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -55,7 +48,7 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
 
     @Override
     public HttpResponseResult<OrderCreateRes> orderCreate(OrderReq.OrderReqInfo orderReqInfo) {
-        VipCardVo detail = detail(Long.parseLong(orderReqInfo.getBizContent()));
+        VipCardVo detail = detail(Long.parseLong(orderReqInfo.getBizContent().toString()));
         if (null == detail) {
             return HttpResponseResult.failed("未找到会员卡信息");
         }
@@ -95,11 +88,11 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
             now.setTime(studentVo.getMembershipEndTime());
         }
         vipCardRecord.setStartTime(now.getTime());
-        if (VipTimeTypeEnum.MONTH.equals(detail.getTimeType())) {
+        if (TimeTypeEnum.MONTH.equals(detail.getTimeType())) {
             now.add(Calendar.MONTH, 1);
-        } else if (VipTimeTypeEnum.QUARTER.equals(detail.getTimeType())) {
+        } else if (TimeTypeEnum.QUARTER.equals(detail.getTimeType())) {
             now.add(Calendar.MONTH, 3);
-        } else if (VipTimeTypeEnum.YEAR.equals(detail.getTimeType())) {
+        } else if (TimeTypeEnum.YEAR.equals(detail.getTimeType())) {
             now.add(Calendar.YEAR, 1);
         }
         vipCardRecord.setEndTime(now.getTime());

+ 46 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVo.java

@@ -56,6 +56,20 @@ public class CourseGroupVo implements Serializable {
     @ApiModelProperty(value = "课程介绍")
     private String courseIntroduce;
 
+    @ApiModelProperty(value = "老师头像")
+    private String avatar;
+
+    @ApiModelProperty(value = "销售开始日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date salesStartDate;
+
+    @ApiModelProperty(value = "销售结束日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date salesEndDate;
+
+    @ApiModelProperty(value = "最少成课人数")
+    private Integer mixStudentNum;
+
     public Long getCourseGroupId() {
         return courseGroupId;
     }
@@ -159,4 +173,36 @@ public class CourseGroupVo implements Serializable {
     public void setCourseIntroduce(String courseIntroduce) {
         this.courseIntroduce = courseIntroduce;
     }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Date getSalesStartDate() {
+        return salesStartDate;
+    }
+
+    public void setSalesStartDate(Date salesStartDate) {
+        this.salesStartDate = salesStartDate;
+    }
+
+    public Date getSalesEndDate() {
+        return salesEndDate;
+    }
+
+    public void setSalesEndDate(Date salesEndDate) {
+        this.salesEndDate = salesEndDate;
+    }
+
+    public Integer getMixStudentNum() {
+        return mixStudentNum;
+    }
+
+    public void setMixStudentNum(Integer mixStudentNum) {
+        this.mixStudentNum = mixStudentNum;
+    }
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java

@@ -51,6 +51,9 @@ public class CourseStudent implements Serializable {
     @ApiModelProperty(value = "声部名称")
     private String subjectName;
 
+    @ApiModelProperty(value = "头像")
+    private String avatar;
+
     public Integer getCourseId() {
         return courseId;
     }
@@ -154,5 +157,13 @@ public class CourseStudent implements Serializable {
     public void setSubjectName(String subjectName) {
         this.subjectName = subjectName;
     }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
 }
 

+ 93 - 24
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/HomeTotalVo.java

@@ -3,40 +3,109 @@ package com.yonge.cooleshow.biz.dal.vo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 /**
  * @Author: liweifan
  * @Data: 2022/3/30 17:53
  */
-@ApiModel(value = "HomeVo对象", description = "后台首页统计查询对象")
 public class HomeTotalVo {
-    @ApiModelProperty("待审核老师认证数 ")
-    private Integer entryNum;
-    @ApiModelProperty("待审核音乐认证人数 ")
-    private Integer musicianNum;
-    @ApiModelProperty("待审核乐谱 ")
-    private Integer musicNum;
-
-    public Integer getEntryNum() {
-        return entryNum;
-    }
+    @ApiModel(value = "HomeTotalVo.UserToDoNum", description = "后台首页待办事项统计查询对象")
+    public static class UserToDoNum{
+        @ApiModelProperty("待审核老师认证数 ")
+        private Integer entryNum;
+        @ApiModelProperty("待审核音乐认证人数 ")
+        private Integer musicianNum;
+        @ApiModelProperty("待审核乐谱 ")
+        private Integer musicNum;
 
-    public void setEntryNum(Integer entryNum) {
-        this.entryNum = entryNum;
-    }
+        public Integer getEntryNum() {
+            return entryNum;
+        }
 
-    public Integer getMusicianNum() {
-        return musicianNum;
-    }
+        public void setEntryNum(Integer entryNum) {
+            this.entryNum = entryNum;
+        }
 
-    public void setMusicianNum(Integer musicianNum) {
-        this.musicianNum = musicianNum;
-    }
+        public Integer getMusicianNum() {
+            return musicianNum;
+        }
 
-    public Integer getMusicNum() {
-        return musicNum;
+        public void setMusicianNum(Integer musicianNum) {
+            this.musicianNum = musicianNum;
+        }
+
+        public Integer getMusicNum() {
+            return musicNum;
+        }
+
+        public void setMusicNum(Integer musicNum) {
+            this.musicNum = musicNum;
+        }
     }
 
-    public void setMusicNum(Integer musicNum) {
-        this.musicNum = musicNum;
+    @ApiModel(value = "HomeTotalVo.TotalTeacher", description = "后台首页老师数据统计查询对象")
+    public class TotalTeacher {
+        @ApiModelProperty("老师注册量 ")
+        private Integer registerNum;
+        @ApiModelProperty("认证老师 ")
+        private Integer entryNum;
+        @ApiModelProperty("直播老师 ")
+        private Integer liveNum;
+        @ApiModelProperty("平台音乐人 ")
+        private Integer musicianNum;
+
+        @ApiModelProperty("时间(详情数据中使用) ")
+        private String time;
+        @ApiModelProperty("详情数据 ")
+        private List<TotalTeacher> infoList;
+
+        public Integer getRegisterNum() {
+            return registerNum;
+        }
+
+        public void setRegisterNum(Integer registerNum) {
+            this.registerNum = registerNum;
+        }
+
+        public Integer getEntryNum() {
+            return entryNum;
+        }
+
+        public void setEntryNum(Integer entryNum) {
+            this.entryNum = entryNum;
+        }
+
+        public Integer getLiveNum() {
+            return liveNum;
+        }
+
+        public void setLiveNum(Integer liveNum) {
+            this.liveNum = liveNum;
+        }
+
+        public Integer getMusicianNum() {
+            return musicianNum;
+        }
+
+        public void setMusicianNum(Integer musicianNum) {
+            this.musicianNum = musicianNum;
+        }
+
+        public String getTime() {
+            return time;
+        }
+
+        public void setTime(String time) {
+            this.time = time;
+        }
+
+        public List<TotalTeacher> getInfoList() {
+            return infoList;
+        }
+
+        public void setInfoList(List<TotalTeacher> infoList) {
+            this.infoList = infoList;
+        }
     }
 }

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

@@ -58,7 +58,11 @@
         ifnull(b.pre_student_num_, 0) as studentCount,
         b.background_pic_             as backgroundPic,
         b.course_price_               as coursePrice,
-        b.course_num_                 as courseNum
+        b.course_num_                 as courseNum,
+        u.avatar_ as avatar,
+        b.sales_start_date_           as salesStartDate,
+        b.sales_end_date_             as salesEndDate,
+        b.mix_student_num_            as mixStudentNum
         from course_group as b
         left join subject as s on b.subject_id_ = s.id_
         left join sys_user as u on b.teacher_id_ = u.id_

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

@@ -348,6 +348,7 @@
             </when>
         </choose>
     </select>
+
     <select id="queryCourseTeacher" resultType="com.yonge.cooleshow.biz.dal.vo.CourseStudent"
             parameterType="com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch">
         SELECT
@@ -392,4 +393,40 @@
         AND s.class_date_ = #{param.classDate}
         ORDER BY startTime
     </select>
+
+    <select id="queryStudentLiveCourse" parameterType="map" resultType="com.yonge.cooleshow.biz.dal.vo.CourseStudent">
+        SELECT
+        cs.id_ AS courseId,
+        cs.course_group_id_ AS courseGoupId,
+        cs.class_date_ AS classDate,
+        cs.start_time_ AS startTime,
+        cs.end_time_ AS endTime,
+        cs.status_ AS `status`,
+        cs.type_ AS courseType,
+        su.real_name_ AS userId,
+        CONCAT(g.name_,'-第',cs.class_num_,'课') AS name,
+        IFNULL(g.pre_student_num_, 0) AS payCount,
+        g.background_pic_ AS cover,
+        g.subject_id_ AS subjectId,
+        sb.name_ AS subjectName,
+        su.avatar_ AS avatar
+        FROM
+        course_schedule_student_payment as a
+        LEFT JOIN course_schedule cs on a.course_id_ = cs.id_
+        LEFT JOIN course_group g ON cs.course_group_id_ = g.id_
+        LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
+        LEFT JOIN sys_user su on g.teacher_id_ = su.id_
+        WHERE cs.type_=#{param.type}
+        AND a.user_id_ = #{param.studentId}
+        <![CDATA[ AND class_date_  >= #{param.startDate} ]]>
+        <![CDATA[ AND class_date_  <= #{param.endDate} ]]>
+        <if test="param.subjectId != null">
+            AND g.subject_id_ = #{param.subjectId}
+        </if>
+        <if test="param.courseState != null">
+            and cs.status_ = #{param.courseState}
+        </if>
+        ORDER BY cs.start_time_
+    </select>
+
 </mapper>

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

@@ -443,4 +443,8 @@
         </where>
         order by  ms.submit_audit_time_ desc
     </select>
+
+    <select id="getUserToDoNum" resultType="java.lang.Integer">
+        select count(1) from music_sheet where del_flag_ = 0 and audit_status_ = 'DOING'
+    </select>
 </mapper>

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

@@ -53,6 +53,28 @@
         where t.id_ = #{id}
     </select>
 
+    <select id="detailApp" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
+        SELECT
+            t.id_ as id
+            , t.order_no_ as orderNo
+            , t.user_id_ as userId
+            , t.order_name_ as orderName
+            , t.order_type_ as orderType
+            , t.order_desc_ as orderDesc
+            , t.status_ as status
+            , t.original_price_ as originalPrice
+            , t.expect_price_ as expectPrice
+            , t.actual_price_ as actualPrice
+            , t.coupon_amount_ as couponAmount
+            , t.user_note_ as userNote
+            , t.pay_time_ as payTime
+            ,p.trans_no_ as transNo
+        FROM user_order t
+        left join user_order_payment p on t.order_no_ = p.order_no_
+        left join sys_user u on t.user_id_ = u.id_
+        where t.id_ = #{id}
+    </select>
+
     <select id="detailByOrderNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
             <include refid="baseColumns"/>,
@@ -122,6 +144,7 @@
         and t.create_time_ &lt;= date_sub(now(),interval 30 minute)
     </select>
 
+
     <update id="updateStatusByOrderNo">
         update user_order set status_ = #{orderStatus} where order_no_ = #{orderNo}
     </update>

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml

@@ -12,6 +12,7 @@
         <result column="transfer_time_" property="transferTime" />
         <result column="status_" property="status" />
         <result column="verify_user_id_" property="verifyUserId" />
+        <result column="verify_reason_" property="verifyReason" />
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
     </resultMap>
@@ -28,6 +29,7 @@
         , t.transfer_time_ as transferTime
         , t.status_ as status
         , t.verify_user_id_ as verifyUserId
+        , t.verify_reason_ as verifyReason
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         </sql>

+ 22 - 5
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseScheduleController.java → cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java

@@ -10,12 +10,15 @@ 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.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -25,6 +28,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -35,7 +39,7 @@ import java.util.Set;
 @Api(tags = "学生课表")
 @RestController
 @RequestMapping("/courseSchedule")
-public class CourseScheduleController extends BaseController {
+public class StudentCourseScheduleController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
@@ -60,12 +64,12 @@ public class CourseScheduleController extends BaseController {
     @PostMapping(value = "/replied", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Object> replied(@Validated @RequestBody CourseScheduleReplied replied) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null  || sysUser.getId() == null) {
+        if (sysUser == null || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
 
         replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
-        repliedService.replied(replied,sysUser);
+        repliedService.replied(replied, sysUser);
         return succeed();
     }
 
@@ -100,9 +104,9 @@ public class CourseScheduleController extends BaseController {
         return succeed(PageUtil.pageInfo(pages));
     }
 
-    @ApiOperation(value = "学生端-课表-日历-用户",notes = "search:{\"classDate\":\"2022-03-27\"}")
+    @ApiOperation(value = "学生端-课表-日历-用户", notes = "search:{\"classDate\":\"2022-03-27\"}")
     @PostMapping("/queryCourseTeacher")
-    public HttpResponseResult<Map<String,Object>> queryCourseTeacher(@RequestBody MyCourseSearch search) {
+    public HttpResponseResult<Map<String, Object>> queryCourseTeacher(@RequestBody MyCourseSearch search) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
@@ -110,5 +114,18 @@ public class CourseScheduleController extends BaseController {
         search.setStudentId(user.getId());
         return succeed(courseScheduleService.queryCourseTeacher(search));
     }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "studentId", dataType = "String", required = true, value = "学生id"),
+            @ApiImplicitParam(name = "classDate", dataType = "String", required = true, value = "年月"),
+            @ApiImplicitParam(name = "courseState", dataType = "String", value = "课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消"),
+            @ApiImplicitParam(name = "subjectId", dataType = "Long", value = "声部id"),
+    })
+    @ApiOperation("学生-查询直播课")
+    @PostMapping("/queryStudentLiveCourse")
+    public HttpResponseResult<List<CourseStudent>> queryStudentLiveCourse(@RequestBody Map<String, Object> param) {
+        return succeed(courseScheduleService.queryStudentLiveCourse(param));
+    }
+
 }
 

+ 49 - 6
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -1,31 +1,37 @@
 package com.yonge.cooleshow.student.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.toolset.utils.date.DateUtil;
+import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.utils.string.ValueUtil;
 import com.yonge.toolset.utils.web.WebUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.redisson.Redisson;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-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 javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
-import java.util.concurrent.ExecutionException;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
@@ -85,4 +91,41 @@ public class UserOrderController extends BaseController {
             return HttpResponseResult.failed("付款失败");
         }
     }
+
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入orderSearch")
+    public HttpResponseResult<PageInfo<UserOrderVo>> page(@RequestBody OrderSearch query) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        query.setUserId(user.getId());
+        if (StringUtil.isEmpty(query.getSearchDate())) {
+            query.setSearchDate(DateUtil.format(new Date(), "yyyy-MM"));
+        }
+        try {
+            Calendar calendar = Calendar.getInstance();
+            String[] classDateSp = query.getSearchDate().split("-");
+            calendar.set(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1, 0, 0, 0);
+            query.setStartTime(calendar.getTime());
+            query.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
+        } catch (Exception e) {
+            throw new BizException("查询时间格式不正确 [" + query.getSearchDate() + "]");
+        }
+        IPage<UserOrderVo> pages = userOrderService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入id")
+    public HttpResponseResult<UserOrderVo> detail(@PathVariable("id") Long id) {
+        UserOrderVo detail = userOrderService.detailApp(id);
+        return succeed();
+    }
 }

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleController.java → cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java

@@ -36,7 +36,7 @@ import java.util.Set;
 @Api(tags = "老师课程表")
 @RestController
 @RequestMapping("/courseSchedule")
-public class CourseScheduleController extends BaseController {
+public class TeacherCourseScheduleController extends BaseController {
     /**
      * 服务对象
      */

+ 4 - 4
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java

@@ -65,17 +65,17 @@ public class UserWithdrawalController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         withdrawalSearch.setUserId(user.getId());
-        if (StringUtil.isEmpty(withdrawalSearch.getWithdrawalDate())) {
-            withdrawalSearch.setWithdrawalDate(DateUtil.format(new Date(), "yyyy-MM"));
+        if (StringUtil.isEmpty(withdrawalSearch.getSearchDate())) {
+            withdrawalSearch.setSearchDate(DateUtil.format(new Date(), "yyyy-MM"));
         }
         try {
             Calendar calendar = Calendar.getInstance();
-            String[] classDateSp = withdrawalSearch.getWithdrawalDate().split("-");
+            String[] classDateSp = withdrawalSearch.getSearchDate().split("-");
             calendar.set(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1, 0, 0, 0);
             withdrawalSearch.setStartTime(calendar.getTime());
             withdrawalSearch.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
         } catch (Exception e) {
-            throw new BizException("查询时间格式不正确 [" + withdrawalSearch.getWithdrawalDate() + "]");
+            throw new BizException("查询时间格式不正确 [" + withdrawalSearch.getSearchDate() + "]");
         }
         IPage<UserWithdrawalVo> pages = userWithdrawalService.selectPage(PageUtil.getPage(withdrawalSearch), withdrawalSearch);
         return succeed(PageUtil.pageInfo(pages));

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

@@ -88,14 +88,14 @@ public class ExcelDataReader<T> extends AnalysisEventListener<T> {
     private ExcelDataReaderProperty<T> executed(T data, AnalysisContext context) {
         ExcelDataReaderProperty<T> property = new ExcelDataReaderProperty<>();
         property.setClazz(data);
+        Integer rowIndex = context.readRowHolder().getRowIndex();
+        property.setRowIndex(rowIndex);
         //执行注解校验
         Set<ConstraintViolation<T>> set = vf.validate(data);
         if (CollectionUtils.isNotEmpty(set)) {
             String collect = set.stream()
                     .map(ConstraintViolation::getMessage)
                     .collect(Collectors.joining());
-            Integer rowIndex = context.readRowHolder().getRowIndex();
-            property.setRowIndex(rowIndex);
             property.setErrorMessage(collect);
         }
         return property;