Kaynağa Gözat

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

liujunchi 2 yıl önce
ebeveyn
işleme
c20f9f7241
50 değiştirilmiş dosya ile 647 ekleme ve 338 silme
  1. 2 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountController.java
  2. 3 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountRecordController.java
  3. 4 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java
  4. 5 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java
  5. 0 86
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VipCardRecordController.java
  6. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentStarDao.java
  7. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentTimeDao.java
  8. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountDao.java
  9. 11 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java
  10. 7 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java
  11. 1 22
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PracticeTeacherSearch.java
  12. 7 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherWithdrawalSearch.java
  13. 7 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserAccountRecordSearch.java
  14. 111 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/StudentTime.java
  15. 0 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PeriodEnum.java
  16. 5 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/ImGroupMemberAuditQueryInfo.java
  17. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  18. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentStarService.java
  19. 31 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentTimeService.java
  20. 19 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  21. 21 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  22. 46 34
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java
  23. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentStarServiceImpl.java
  24. 62 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTimeServiceImpl.java
  25. 31 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  26. 3 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  27. 15 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  28. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/WrapperUtil.java
  29. 42 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java
  30. 0 21
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java
  31. 17 18
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  32. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  33. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  34. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  35. 12 6
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentStarMapper.xml
  36. 24 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentTimeMapper.xml
  37. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentTotalMapper.xml
  38. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherTotalMapper.xml
  39. 3 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountMapper.xml
  40. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  41. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundsMapper.xml
  42. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml
  43. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml
  44. 24 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java
  45. 13 8
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java
  46. 14 7
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  47. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  48. 2 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java
  49. 37 23
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserAccountController.java
  50. 20 12
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java

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

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -31,6 +32,7 @@ public class UserAccountController extends BaseController {
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('userAccount/detail')")
     public HttpResponseResult<UserAccountVo> detail(@PathVariable("id") Long id) {
     	return succeed(userAccountService.detail(id));
 	}

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
@@ -27,6 +28,7 @@ public class UserAccountRecordController extends BaseController {
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('userAccountRecord/detail')")
     public HttpResponseResult<UserAccountRecordVo> detail(@PathVariable("id") Long id) {
     	return succeed(userAccountRecordService.detail(id));
 	}
@@ -36,6 +38,7 @@ public class UserAccountRecordController extends BaseController {
      */
     @PostMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入userAccountRecordSearch")
+    @PreAuthorize("@pcs.hasPermissions('userAccountRecord/page')")
     public HttpResponseResult<PageInfo<UserAccountRecordVo>> page(@RequestBody UserAccountRecordSearch query) {
 		IPage<UserAccountRecordVo> pages = userAccountRecordService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));

+ 4 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java

@@ -12,6 +12,7 @@ import com.yonge.toolset.utils.easyexcel.ExcelUtils;
 import io.swagger.annotations.*;
 import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
@@ -34,6 +35,7 @@ public class UserOrderController extends BaseController {
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('userOrder/detail')")
     public HttpResponseResult<UserOrderVo> detail(@PathVariable("id") Long id) {
         return succeed(userOrderService.detail(id));
     }
@@ -43,6 +45,7 @@ public class UserOrderController extends BaseController {
      */
     @PostMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入orderSearch")
+    @PreAuthorize("@pcs.hasPermissions('userOrder/page')")
     public HttpResponseResult<PageInfo<UserOrderVo>> page(@RequestBody OrderSearch query) {
         IPage<UserOrderVo> pages = userOrderService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
@@ -53,6 +56,7 @@ public class UserOrderController extends BaseController {
      */
     @PostMapping("/export")
     @ApiOperation(value = "查询导出", notes = "传入orderSearch")
+    @PreAuthorize("@pcs.hasPermissions('userOrder/export')")
     public void export(@RequestBody OrderSearch query) {
         List<UserOrderVo> userOrderVos = userOrderService.selectList(query);
         List<UserOrderExport> list = new ArrayList<>();

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

@@ -19,6 +19,7 @@ import io.swagger.annotations.*;
 import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.DigestUtils;
 import org.springframework.web.bind.annotation.*;
@@ -46,6 +47,7 @@ public class UserWithdrawalController extends BaseController {
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('userWithdrawal/detail')")
     public HttpResponseResult<UserWithdrawalVo> detail(@PathVariable("id") Long id) {
         return succeed(userWithdrawalService.detail(id));
     }
@@ -55,6 +57,7 @@ public class UserWithdrawalController extends BaseController {
      */
     @PostMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入teacherWithdrawalSearch")
+    @PreAuthorize("@pcs.hasPermissions('userWithdrawal/page')")
     public HttpResponseResult<PageInfo<UserWithdrawalVo>> page(@RequestBody TeacherWithdrawalSearch query) {
         IPage<UserWithdrawalVo> pages = userWithdrawalService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
@@ -65,6 +68,7 @@ public class UserWithdrawalController extends BaseController {
      */
     @PostMapping("/exportExcel")
     @ApiOperation(value = "查询导出", notes = "传入TeacherWithdrawalSearch")
+    @PreAuthorize("@pcs.hasPermissions('userWithdrawal/exportExcel')")
     public void exportExcel(@RequestBody TeacherWithdrawalSearch query) {
         List<UserWithdrawalVo> withdrawalVoList = userWithdrawalService.selectList(query);
         List<UserWithdrawalExport> list = new ArrayList<>();
@@ -97,6 +101,7 @@ public class UserWithdrawalController extends BaseController {
      */
     @PostMapping("/importExcel")
     @ApiOperation(value = "导入", notes = "传入file")
+    @PreAuthorize("@pcs.hasPermissions('userWithdrawal/importExcel')")
     public HttpResponseResult<List<ErrMsg>> importExcel(@RequestParam("file") MultipartFile file) {
         if (null == file) {
             return HttpResponseResult.failed("请上传文件");

+ 0 - 86
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VipCardRecordController.java

@@ -1,86 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.common.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
-import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
-import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
-import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
-
-@RestController
-@RequestMapping("/vipCardRecord")
-@Api(value = "购买会员卡记录表", tags = "购买会员卡记录表")
-public class VipCardRecordController extends BaseController {
-
-    @Autowired
-    private VipCardRecordService vipCardRecordService;
-
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<VipCardRecordVo> detail(@PathVariable("id") Long id) {
-    	return succeed(vipCardRecordService.detail(id));
-	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入vipCardRecordSearch")
-    public HttpResponseResult<PageInfo<VipCardRecordVo>> page(@RequestBody VipCardRecordSearch query) {
-		IPage<VipCardRecordVo> pages = vipCardRecordService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入vipCardRecord")
-	public HttpResponseResult save(@Valid @RequestBody VipCardRecord vipCardRecord) {
-    	return status(vipCardRecordService.save(vipCardRecord));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入vipCardRecord")
-	public HttpResponseResult update(@Valid @RequestBody VipCardRecord vipCardRecord) {
-        return status(vipCardRecordService.updateById(vipCardRecord));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入vipCardRecord")
-	public HttpResponseResult submit(@Valid @RequestBody VipCardRecord vipCardRecord) {
-        return status(vipCardRecordService.saveOrUpdate(vipCardRecord));
-    }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(vipCardRecordService.removeByIds(StringUtil.toLongList(ids)));
-	}
-}

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentStarDao.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.entity.StudentStar;
 import com.yonge.cooleshow.biz.dal.vo.StudentTotalVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.security.core.parameters.P;
 
 public interface StudentStarDao extends BaseMapper<StudentStar>{
 	/***
@@ -23,4 +25,13 @@ public interface StudentStarDao extends BaseMapper<StudentStar>{
 	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo>
 	 */
 	List<StudentTotalVo> queryStudentTotal();
+	/***
+	 * 通过学生和老师id查询
+	 * @author liweifan
+	 * @param: studentId
+	 * @param: teacherId
+	 * @updateTime 2022/4/26 17:05
+	 * @return: com.yonge.cooleshow.biz.dal.entity.StudentStar
+	 */
+    StudentStar getByStudentIdAndTeacherId(@Param("studentId") Long studentId,@Param("teacherId") Long teacherId);
 }

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

@@ -0,0 +1,9 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.StudentTime;
+
+
+public interface StudentTimeDao extends BaseMapper<StudentTime>{
+
+}

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

@@ -64,5 +64,5 @@ public interface UserAccountDao extends BaseMapper<UserAccount>{
 	 * @updateTime 2022/4/24 13:53
 	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.res.AccountTotal>
 	 */
-    List<AccountTotal> accountTotal(@Param("param")TotalReq totalReq);
+    List<AccountTotal> accountTotal(@Param("timeType")String timeType,@Param("param")TotalReq totalReq);
 }

+ 11 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.enums.TimeTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,6 +9,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -20,19 +22,17 @@ public class TotalReq {
     private Long userId;
     @NotNull(message = "时间类型不能为空")
     @ApiModelProperty("时间类型 MONTH、月度  YEAR、年度")
-    private TimeTypeEnum timeType;
+    private PeriodEnum timeType;
     @NotBlank(message = "时间不能为空")
     @ApiModelProperty("时间 yyyy | yyyy-MM")
     private String dateTime;
 
     @ApiModelProperty(value = "开始时间")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date startTime;
+    private LocalDateTime 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;
+    private LocalDateTime endTime;
 
     public Long getUserId() {
         return userId;
@@ -42,11 +42,11 @@ public class TotalReq {
         this.userId = userId;
     }
 
-    public TimeTypeEnum getTimeType() {
+    public PeriodEnum getTimeType() {
         return timeType;
     }
 
-    public void setTimeType(TimeTypeEnum timeType) {
+    public void setTimeType(PeriodEnum timeType) {
         this.timeType = timeType;
     }
 
@@ -58,19 +58,19 @@ public class TotalReq {
         this.dateTime = dateTime;
     }
 
-    public Date getStartTime() {
+    public LocalDateTime getStartTime() {
         return startTime;
     }
 
-    public void setStartTime(Date startTime) {
+    public void setStartTime(LocalDateTime startTime) {
         this.startTime = startTime;
     }
 
-    public Date getEndTime() {
+    public LocalDateTime getEndTime() {
         return endTime;
     }
 
-    public void setEndTime(Date endTime) {
+    public void setEndTime(LocalDateTime endTime) {
         this.endTime = endTime;
     }
 }

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

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
 
@@ -25,13 +26,11 @@ public class OrderSearch extends QueryInfo{
 	@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")
-	private Date startTime;
+	private LocalDateTime 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;
+	private LocalDateTime endTime;
 	@ApiModelProperty("买家id")
 	private Long userId;
 	@ApiModelProperty("卖家id")
@@ -64,19 +63,19 @@ public class OrderSearch extends QueryInfo{
 		this.status = status;
 	}
 
-	public Date getStartTime() {
+	public LocalDateTime getStartTime() {
 		return startTime;
 	}
 
-	public void setStartTime(Date startTime) {
+	public void setStartTime(LocalDateTime startTime) {
 		this.startTime = startTime;
 	}
 
-	public Date getEndTime() {
+	public LocalDateTime getEndTime() {
 		return endTime;
 	}
 
-	public void setEndTime(Date endTime) {
+	public void setEndTime(LocalDateTime endTime) {
 		this.endTime = endTime;
 	}
 

+ 1 - 22
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PracticeTeacherSearch.java

@@ -16,12 +16,7 @@ public class PracticeTeacherSearch extends QueryInfo {
     @ApiModelProperty(value = "老师名称")
     private String search;
 
-    @ApiModelProperty(value = "排序字段(starGrade,expTime,subjectPrice)")
-    private String sortField;
-
-    @ApiModelProperty(value = "排序规则(升序:ASC 降序:DESC)")
-    private String collation;
-
+    @ApiModelProperty(value = "排序字段(starGrade,expTime,subjectPrice) 排序规则(升序:ASC 降序:DESC)")
     private String sort;
 
     @Override
@@ -51,20 +46,4 @@ public class PracticeTeacherSearch extends QueryInfo {
     public void setSearch(String search) {
         this.search = search;
     }
-
-    public String getSortField() {
-        return sortField;
-    }
-
-    public void setSortField(String sortField) {
-        this.sortField = sortField;
-    }
-
-    public String getCollation() {
-        return collation;
-    }
-
-    public void setCollation(String collation) {
-        this.collation = collation;
-    }
 }

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

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -21,13 +22,11 @@ public class TeacherWithdrawalSearch extends QueryInfo{
 	@ApiModelProperty("状态 DOING、审核中 PASS、通过 UNPASS、不通过")
 	private AuthStatusEnum status;
 	@ApiModelProperty(value = "申请开始时间")
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-	private Date startTime;
+	private LocalDateTime 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;
+	private LocalDateTime endTime;
 
 
 	@ApiModelProperty("查询时间(yyyy-mm) ")
@@ -51,19 +50,19 @@ public class TeacherWithdrawalSearch extends QueryInfo{
 		this.status = status;
 	}
 
-	public Date getStartTime() {
+	public LocalDateTime getStartTime() {
 		return startTime;
 	}
 
-	public void setStartTime(Date startTime) {
+	public void setStartTime(LocalDateTime startTime) {
 		this.startTime = startTime;
 	}
 
-	public Date getEndTime() {
+	public LocalDateTime getEndTime() {
 		return endTime;
 	}
 
-	public void setEndTime(Date endTime) {
+	public void setEndTime(LocalDateTime endTime) {
 		this.endTime = endTime;
 	}
 

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

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -34,12 +35,12 @@ public class UserAccountRecordSearch extends QueryInfo{
 	@ApiModelProperty(value = "交易开始时间")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-	private Date startTime;
+	private LocalDateTime 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;
+	private LocalDateTime endTime;
 
 	public Long getUserId() {
 		return userId;
@@ -73,19 +74,19 @@ public class UserAccountRecordSearch extends QueryInfo{
 		this.searchDate = searchDate;
 	}
 
-	public Date getStartTime() {
+	public LocalDateTime getStartTime() {
 		return startTime;
 	}
 
-	public void setStartTime(Date startTime) {
+	public void setStartTime(LocalDateTime startTime) {
 		this.startTime = startTime;
 	}
 
-	public Date getEndTime() {
+	public LocalDateTime getEndTime() {
 		return endTime;
 	}
 
-	public void setEndTime(Date endTime) {
+	public void setEndTime(LocalDateTime endTime) {
 		this.endTime = endTime;
 	}
 }

+ 111 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/StudentTime.java

@@ -0,0 +1,111 @@
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 学生使用功能时间表
+ */
+@TableName("student_time")
+@ApiModel(value = "StudentTime对象", description = "学生使用功能时间表")
+public class StudentTime implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @TableId(value = "user_id_", type = IdType.AUTO)
+    private Long userId;
+    @ApiModelProperty("第一次购买vip时间 ")
+    @TableField(value = "first_vip_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date firstVipTime;
+    @ApiModelProperty("第一次购买陪练课时间 ")
+    @TableField(value = "first_practice_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date firstPracticeTime;
+    @ApiModelProperty("第一次购买视频课时间 ")
+    @TableField(value = "first_video_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date firstVideoTime;
+    @ApiModelProperty("第一次直播课购买时间 ")
+    @TableField(value = "first_live_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date firstLiveTime;
+    @ApiModelProperty("第一次购买乐曲时间 ")
+    @TableField(value = "first_music_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date firstMusicTime;
+    @ApiModelProperty("第一次商城购买时间 ")
+    @TableField(value = "first_mall_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date firstMallTime;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Date getFirstVipTime() {
+        return firstVipTime;
+    }
+
+    public void setFirstVipTime(Date firstVipTime) {
+        this.firstVipTime = firstVipTime;
+    }
+
+    public Date getFirstPracticeTime() {
+        return firstPracticeTime;
+    }
+
+    public void setFirstPracticeTime(Date firstPracticeTime) {
+        this.firstPracticeTime = firstPracticeTime;
+    }
+
+    public Date getFirstVideoTime() {
+        return firstVideoTime;
+    }
+
+    public void setFirstVideoTime(Date firstVideoTime) {
+        this.firstVideoTime = firstVideoTime;
+    }
+
+    public Date getFirstLiveTime() {
+        return firstLiveTime;
+    }
+
+    public void setFirstLiveTime(Date firstLiveTime) {
+        this.firstLiveTime = firstLiveTime;
+    }
+
+    public Date getFirstMusicTime() {
+        return firstMusicTime;
+    }
+
+    public void setFirstMusicTime(Date firstMusicTime) {
+        this.firstMusicTime = firstMusicTime;
+    }
+
+    public Date getFirstMallTime() {
+        return firstMallTime;
+    }
+
+    public void setFirstMallTime(Date firstMallTime) {
+        this.firstMallTime = firstMallTime;
+    }
+
+}

+ 0 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PeriodEnum.java

@@ -22,10 +22,6 @@ public enum PeriodEnum implements BaseEnum<String, PeriodEnum> {
 		this.msg = msg;
 	}
 
-	public void setCode(String code) {
-		this.code = code;
-	}
-
 	public String getMsg() {
 		return msg;
 	}

+ 5 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/ImGroupMemberAuditQueryInfo.java

@@ -4,6 +4,7 @@ import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 public class ImGroupMemberAuditQueryInfo extends QueryInfo {
@@ -14,15 +15,15 @@ public class ImGroupMemberAuditQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "用户编号")
     private Long userId;
 
-    @NotNull(message = "群编号不可为空")
+    @NotBlank(message = "群编号不可为空")
     @ApiModelProperty(value = "群编号")
-    private Long groupId;
+    private String groupId;
 
-    public Long getGroupId() {
+    public String getGroupId() {
         return groupId;
     }
 
-    public void setGroupId(Long groupId) {
+    public void setGroupId(String groupId) {
         this.groupId = groupId;
     }
 

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

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
+import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -185,5 +186,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
     void courseAdjust(CourseAdjustVo adjustVo);
 
     StudentHomePage queryLiveAndVideo();
+
+    TeacherSubjectPrice teacherSubjectPrice(Long teacherId, Long subjectId);
 }
 

+ 9 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentStarService.java

@@ -10,5 +10,13 @@ import com.yonge.cooleshow.biz.dal.entity.StudentStar;
  * @date 2022-03-23
  */
 public interface StudentStarService extends IService<StudentStar>  {
-
+    /***
+     *
+     * @author liweifan
+     * @param: studentId
+     * @param: teacherId
+     * @updateTime 2022/4/26 17:05
+     * @return: com.yonge.cooleshow.biz.dal.entity.StudentStar
+     */
+    StudentStar getByStudentIdAndTeacherId(Long studentId, Long teacherId);
 }

+ 31 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentTimeService.java

@@ -0,0 +1,31 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.StudentTime;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+
+/**
+ * 学生使用功能时间表 服务类
+ *
+ * @author liweifan
+ * @date 2022-04-26
+ */
+public interface StudentTimeService extends IService<StudentTime> {
+    /***
+     * 统计学员第一次购买时间(一天一次,统计前一天数据)
+     * @author liweifan
+     * @updateTime 2022/4/26 14:39
+     */
+    void totalStudentTime();
+
+    /***
+     * 通过订单类型设置时间
+     * @author liweifan
+     * @param: studentTime
+     * @param: goodType
+     * @updateTime 2022/4/26 14:25
+     * @return: com.yonge.cooleshow.biz.dal.entity.StudentTime
+     */
+    StudentTime setTimeByGoodType(StudentTime studentTime, GoodTypeEnum goodType);
+}

+ 19 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java

@@ -48,11 +48,11 @@ public interface TeacherService extends IService<Teacher>  {
     /***
      * 查询老师首页统计信息
      * @author liweifan
-     * @param: id
+     * @param: userId
      * @updateTime 2022/3/28 16:49
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo
      */
-    HttpResponseResult<TeacherHomeVo> queryUserInfo(SysUser user);
+    HttpResponseResult<TeacherHomeVo> queryUserInfo(Long userId);
     /***
      * 开通直播
      * @author liweifan
@@ -70,9 +70,14 @@ public interface TeacherService extends IService<Teacher>  {
     * @date 2022/3/25 09:37
     */
     List<Subject> querySubject(Long userId);
-
-
-
+    /***
+     * 查询老师个人风采
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/4/8 14:11
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.TeacherVo>
+     */
+    HttpResponseResult<TeacherVo> queryTeacherStyle(Long id);
     /***
      * 设置声部
      * @author liweifan
@@ -83,13 +88,15 @@ public interface TeacherService extends IService<Teacher>  {
      */
     Integer setSubject(Long id, String subjectIds);
     /***
-     * 查询老师个人风采
+     * 查询教师基本信息
      * @author liweifan
-     * @param: id
-     * @updateTime 2022/4/8 14:11
-     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.TeacherVo>
+     * @param: studentId
+     * @param: teacherId
+     * @updateTime 2022/4/26 17:03
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo>
      */
-    HttpResponseResult<TeacherVo> queryTeacherStyle(Long id);
+    HttpResponseResult<TeacherHomeVo> queryTeacherHome(Long studentId , Long teacherId);
+
     /***
      * 保存老师风采信息
      * @author liweifan
@@ -98,6 +105,7 @@ public interface TeacherService extends IService<Teacher>  {
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.TeacherVo>
      */
     HttpResponseResult<TeacherVo> saveTeacherStyle(TeacherDto teacherDto);
+
     /***
      * 增加主页浏览量
      * @author liweifan
@@ -106,4 +114,5 @@ public interface TeacherService extends IService<Teacher>  {
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
      */
     HttpResponseResult<Boolean> addHomeBrowse(Long userId);
+
 }

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

@@ -32,6 +32,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;
@@ -216,7 +217,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      *              <p> - teacherId 老师id
      *              <p> - year 年
      *              <p> - month 月
-     *              <p> - singleCourseMinutes 单课时时长(包含休息时间)
+     *              <p> - singleCourseMinutes 单课时时长(不包含休息时间)
+     *              <p> - freeCourseMinutes 单课时休息时长
      * @return 返回传入时间当月每日的剩余时间段
      */
     public List<CourseCalendarEntity> createLiveCourseCalendar(Map<String, Object> param) {
@@ -225,6 +227,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Integer year = WrapperUtil.toInt(param, "year", "日历的时间年份不能为空!");
         Integer month = WrapperUtil.toInt(param, "month", "日历的时间月份不能为空!");
         Integer singleCourseMinutes = WrapperUtil.toInt(param, "singleCourseMinutes", "单课时时长不能为空!");
+        Integer freeCourseMinutes = WrapperUtil.toInt(param, "freeCourseMinutes");
         if (singleCourseMinutes < 25) {
             throw new BizException("单课时时长不能小于25分钟!");
         }
@@ -235,7 +238,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //获取老师的课程  key:日期-年月日 value:课程时间-开始时间,结束时间
         Map<String, List<CourseTimeEntity>> nowCourseMap = getTeacherCourseTime(teacherId, firstDay.toString(), lastDay.toString());
         //生成日历数据
-        List<CourseCalendarEntity> courseCalendarEntities = generateCourseData(firstDay, lastDay, singleCourseMinutes);
+        List<CourseCalendarEntity> courseCalendarEntities = generateCourseData(firstDay, lastDay, singleCourseMinutes, freeCourseMinutes);
         //对比课程数据,筛选出空余的课程时间
         opsCourseCalendarData(nowCourseMap, courseCalendarEntities, 0);
         return courseCalendarEntities;
@@ -314,8 +317,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @param firstDay            开始日期年月日
      * @param lastDay             最后一天的日期年月日
      * @param singleCourseMinutes 单结课时长
+     * @param freeCourseMinutes   单课时休息时长
      */
-    public List<CourseCalendarEntity> generateCourseData(LocalDate firstDay, LocalDate lastDay, Integer singleCourseMinutes) {
+    public List<CourseCalendarEntity> generateCourseData(LocalDate firstDay, LocalDate lastDay, Integer singleCourseMinutes, Integer freeCourseMinutes) {
         //获取上课的最早时间和最晚时间,将每日时间切片
         String sysStartTime = sysConfigService.findConfigValue(SysConfigConstant.COURSE_START_SETTING);
         String sysEndTime = sysConfigService.findConfigValue(SysConfigConstant.COURSE_END_SETTING);
@@ -329,7 +333,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //每日日期数据
         List<CourseCalendarEntity> list = new ArrayList<>();
         //生成每日课程时间段 -根据单节课时长 及每日最早最晚时间 生成一天的时间切片
-        List<CourseTimeEntity> dayTime = generateDayTime(singleCourseMinutes, dayStartTime, dayEndTime);
+        List<CourseTimeEntity> dayTime = generateDayTime(singleCourseMinutes, freeCourseMinutes, dayStartTime, dayEndTime);
         int addDay = 0;
         //获取每日日期数据
         while (firstDay.isBefore(lastDay) || firstDay.isEqual(lastDay)) {
@@ -352,10 +356,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * <p>根据单节课时长 及每日最早最晚时间 生成一天的时间切片
      *
      * @param singleCourseMinutes 单节课时长
+     * @param freeCourseMinutes   单课时休息时长
      * @param startTime           每日最早上课时间
      * @param endTime             每日最晚下课时间
      */
-    public List<CourseTimeEntity> generateDayTime(Integer singleCourseMinutes, Date startTime, Date endTime) {
+    public List<CourseTimeEntity> generateDayTime(Integer singleCourseMinutes, Integer freeCourseMinutes, Date startTime, Date endTime) {
         List<CourseTimeEntity> result = new ArrayList<>();
         //划分每日课程时间
         Date edate = startTime;
@@ -369,6 +374,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 //加时间得到课程结束时间
                 edate = DateUtil.addMinutes(edate, singleCourseMinutes);
                 timeEntity.setEndTime(edate);
+                //再加上单节课休息时间
+                edate = DateUtil.addMinutes(edate, freeCourseMinutes);
                 result.add(timeEntity);
             }
         }
@@ -741,13 +748,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      */
     @Override
     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);
-        }
         return page.setRecords(baseMapper.teacherList(page, search));
     }
 
@@ -976,4 +976,13 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         homePage.setVideoList(baseMapper.selectVideo());
         return homePage;
     }
+
+    /**
+     * @Description: 查询老师陪练课配置
+     * @Author: cy
+     * @Date: 2022/4/26
+     */
+    public TeacherSubjectPrice teacherSubjectPrice(Long teacherId,Long subjectId){
+        return teacherFreeTimeDao.selectSubjectPrice(teacherId,subjectId);
+    }
 }

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

@@ -2,17 +2,20 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.yonge.cooleshow.biz.dal.dao.HomeDao;
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
-import com.yonge.cooleshow.biz.dal.enums.TimeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.service.HomeService;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.utils.date.DateUtil;
+import com.yonge.cooleshow.common.exception.BizException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Calendar;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.temporal.TemporalAdjusters;
 import java.util.List;
 
 /**
@@ -34,26 +37,30 @@ public class HomeServiceImpl implements HomeService {
     }
 
     @Override
-    public HttpResponseResult<HomeTotalTeacher> totalTeacher(TotalReq totalReq) {
+    public HttpResponseResult<HomeTotalTeacher> totalTeacher(TotalReq query) {
         //参数处理
-        Calendar calendar = Calendar.getInstance();
-        if (TimeTypeEnum.MONTH.equals(totalReq.getTimeType())) {
-            String[] classDateSp = totalReq.getDateTime().split("-");
-            calendar.set(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1])-1, 1, 0, 0, 0);
-            totalReq.setStartTime(calendar.getTime());
-            totalReq.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
-        } else if (TimeTypeEnum.YEAR.equals(totalReq.getTimeType())) {
-            calendar.set(Integer.parseInt(totalReq.getDateTime()), 1, 1, 0, 0, 0);
-            totalReq.setStartTime(calendar.getTime());
+        try {
+            LocalDateTime firstDay;
+            LocalDateTime lastDay;
+            if (PeriodEnum.YEAR.equals(query.getTimeType())) {
+                LocalDate date = LocalDate.of(Integer.parseInt(query.getDateTime()), 1, 1);
+                firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
+                lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
+            } else {
+                String[] classDateSp = query.getDateTime().split("-");
+                LocalDate date = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
 
-            calendar.set(Integer.parseInt(totalReq.getDateTime()), 12, 1, 0, 0, 0);
-            totalReq.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
-        } else {
-            return HttpResponseResult.failed("参数异常");
+                firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
+                lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
+            }
+            query.setStartTime(firstDay);
+            query.setEndTime(lastDay);
+        } catch (Exception e) {
+            throw new BizException("查询时间格式不正确 [" + query.getDateTime() + "]");
         }
 
         //统计查询
-        List<HomeTotalTeacher> totalList = baserMapper.totalTeacher(totalReq.getTimeType().getCode(), totalReq);
+        List<HomeTotalTeacher> totalList = baserMapper.totalTeacher(query.getTimeType().getCode(), query);
         Integer registerNum = 0;
         Integer entryNum = 0;
         Integer liveNum = 0;
@@ -79,24 +86,29 @@ public class HomeServiceImpl implements HomeService {
     }
 
     @Override
-    public HttpResponseResult<HomeTotalStudent> totalStudent(TotalReq totalReq) {
+    public HttpResponseResult<HomeTotalStudent> totalStudent(TotalReq query) {
         //参数处理
-        Calendar calendar = Calendar.getInstance();
-        if (TimeTypeEnum.MONTH.equals(totalReq.getTimeType())) {
-            String[] classDateSp = totalReq.getDateTime().split("-");
-            calendar.set(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1])-1, 1, 0, 0, 0);
-            totalReq.setStartTime(calendar.getTime());
-            totalReq.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
-        } else if (TimeTypeEnum.YEAR.equals(totalReq.getTimeType())) {
-            calendar.set(Integer.parseInt(totalReq.getDateTime()), 1, 1, 0, 0, 0);
-            totalReq.setStartTime(calendar.getTime());
+        try {
+            LocalDateTime firstDay;
+            LocalDateTime lastDay;
+            if (PeriodEnum.YEAR.equals(query.getTimeType())) {
+                LocalDate date = LocalDate.of(Integer.parseInt(query.getDateTime()), 1, 1);
+                firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
+                lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
+            } else {
+                String[] classDateSp = query.getDateTime().split("-");
+                LocalDate date = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
 
-            calendar.set(Integer.parseInt(totalReq.getDateTime()), 12, 1, 0, 0, 0);
-            totalReq.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
-        } else {
-            return HttpResponseResult.failed("参数异常");
+                firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
+                lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
+            }
+            query.setStartTime(firstDay);
+            query.setEndTime(lastDay);
+        } catch (Exception e) {
+            throw new BizException("查询时间格式不正确 [" + query.getDateTime() + "]");
         }
-        List<HomeTotalStudent> totalList = baserMapper.totalStudent(totalReq.getTimeType().getCode(), totalReq);
+
+        List<HomeTotalStudent> totalList = baserMapper.totalStudent(query.getTimeType().getCode(), query);
         Integer registerNum = 0;
         Integer vipNum = 0;
         Integer courseNum = 0;
@@ -105,7 +117,7 @@ public class HomeServiceImpl implements HomeService {
         for (HomeTotalStudent totalStudent : totalList) {
             totalStudent.setRegisterNum(null == totalStudent.getRegisterNum() ? 0 : totalStudent.getRegisterNum());
             totalStudent.setVipNum(null == totalStudent.getVipNum() ? 0 : totalStudent.getVipNum());
-            totalStudent.setCourseNum(null == totalStudent.getCourseNum() ? 0 :totalStudent.getCourseNum());
+            totalStudent.setCourseNum(null == totalStudent.getCourseNum() ? 0 : totalStudent.getCourseNum());
             totalStudent.setShoppingNum(null == totalStudent.getShoppingNum() ? 0 : totalStudent.getShoppingNum());
 
             registerNum += totalStudent.getRegisterNum();

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

@@ -11,4 +11,8 @@ import com.yonge.cooleshow.biz.dal.service.StudentStarService;
 @Service
 public class StudentStarServiceImpl extends ServiceImpl<StudentStarDao, StudentStar> implements StudentStarService {
 
+    @Override
+    public StudentStar getByStudentIdAndTeacherId(Long studentId, Long teacherId) {
+        return baseMapper.getByStudentIdAndTeacherId(studentId, teacherId);
+    }
 }

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

@@ -0,0 +1,62 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.yonge.cooleshow.biz.dal.entity.StudentTime;
+import com.yonge.cooleshow.biz.dal.dao.StudentTimeDao;
+import com.yonge.cooleshow.biz.dal.service.StudentTimeService;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.Date;
+
+
+@Service
+public class StudentTimeServiceImpl extends ServiceImpl<StudentTimeDao, StudentTime> implements StudentTimeService {
+    private final static Logger log = LoggerFactory.getLogger(StudentTimeServiceImpl.class);
+    @Autowired
+    private UserOrderService userOrderService;
+    @Override
+    public void totalStudentTime() {
+        LocalDate toDay = LocalDate.now();
+        LocalDateTime startDay = LocalDateTime.of(toDay, LocalTime.MIN);
+        LocalDateTime endDay = LocalDateTime.of(toDay, LocalTime.MAX);
+
+        //查询前一天订单涉及用户
+        OrderSearch query = new OrderSearch();
+
+        //userOrderService.selectList()
+        //查询需要统计的用户
+
+    }
+
+    @Override
+    public StudentTime setTimeByGoodType(StudentTime studentTime, GoodTypeEnum goodType) {
+        if (null == studentTime) {
+            studentTime = new StudentTime();
+        }
+        if (GoodTypeEnum.VIP.equals(goodType) && null == studentTime.getFirstVipTime()) {
+            studentTime.setFirstVipTime(new Date());
+        }
+        if (GoodTypeEnum.PRACTICE.equals(goodType) && null == studentTime.getFirstPracticeTime()) {
+            studentTime.setFirstPracticeTime(new Date());
+        }
+        if (GoodTypeEnum.LIVE.equals(goodType) && null == studentTime.getFirstLiveTime()) {
+            studentTime.setFirstLiveTime(new Date());
+        }
+        if (GoodTypeEnum.VIDEO.equals(goodType) && null == studentTime.getFirstVideoTime()) {
+            studentTime.setFirstVideoTime(new Date());
+        }
+        if (GoodTypeEnum.MUSIC.equals(goodType) && null == studentTime.getFirstMusicTime()) {
+            studentTime.setFirstMusicTime(new Date());
+        }
+        return studentTime;
+    }
+}

+ 31 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -56,6 +56,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     private SysConfigService sysConfigService;
     @Autowired
     private LiveRoomService liveRoomService;
+    @Autowired
+    private StudentStarService studentStarService;
 
     @Override
     public TeacherVo detail(Long userId) {
@@ -93,8 +95,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     }
 
     @Override
-    public HttpResponseResult<TeacherHomeVo> queryUserInfo(SysUser user) {
-        TeacherVo teacher = detail(user.getId());
+    public HttpResponseResult<TeacherHomeVo> queryUserInfo(Long userId) {
+        TeacherVo teacher = detail(userId);
         if (null == teacher) {
             return HttpResponseResult.failed("未查询到老师信息");
         }
@@ -107,12 +109,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         //身份证号、手机号脱敏
         teacherHomeVo.setIdCardNo(ValueUtil.fuzzyIdCard(teacherHomeVo.getIdCardNo()));
         teacherHomeVo.setPhone(ValueUtil.fuzzyMobile(teacherHomeVo.getPhone()));
-        teacherHomeVo.setHeardUrl(user.getAvatar());
+        teacherHomeVo.setHeardUrl(teacher.getAvatar());
 
         if (YesOrNoEnum.YES.equals(teacher.getEntryFlag())) {
             teacherHomeVo.setEntryStatus(AuthStatusEnum.PASS);
         } else {
-            TeacherAuthEntryRecordVo entryRecord = entryRecordService.getLastRecordByUserId(user.getId());
+            TeacherAuthEntryRecordVo entryRecord = entryRecordService.getLastRecordByUserId(userId);
             if (null == entryRecord) {
                 teacherHomeVo.setEntryStatus(AuthStatusEnum.UNPAALY);
             } else {
@@ -123,7 +125,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         if (YesOrNoEnum.YES.equals(teacher.getMusicianFlag())) {
             teacherHomeVo.setMusicianAuthStatus(AuthStatusEnum.PASS);
         } else {
-            TeacherAuthMusicianRecord musicianRecord = musicianRecordService.getLastRecordByUserId(user.getId());
+            TeacherAuthMusicianRecord musicianRecord = musicianRecordService.getLastRecordByUserId(userId);
             if (null == musicianRecord) {
                 teacherHomeVo.setMusicianAuthStatus(AuthStatusEnum.UNPAALY);
             } else {
@@ -131,7 +133,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             }
         }
 
-        TeacherTotal total = (TeacherTotal) redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(user.getId())).get();
+        TeacherTotal total = (TeacherTotal) redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(userId)).get();
         if (null == total) {
             total = new TeacherTotal();
         }
@@ -171,6 +173,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         return baseMapper.querySubject(userId);
     }
 
+    @Override
+    public HttpResponseResult<TeacherVo> queryTeacherStyle(Long id) {
+        TeacherVo detail = detail(id);
+        return HttpResponseResult.succeed(detail);
+    }
+
     private HttpResponseResult<Boolean> doCreate(TeacherSubmitReq teacherSubmitReq) throws BizException {
         //判断手机号
         SysUser sysUser = employeeDao.querySysUserByPhone(teacherSubmitReq.getPhone());
@@ -293,16 +301,26 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     }
 
     @Override
-    public HttpResponseResult<TeacherVo> queryTeacherStyle(Long id) {
-        TeacherVo detail = detail(id);
-        LiveRoom liveRoom = liveRoomService.getliveingRoomBySpeakerId(id);
+    public HttpResponseResult<TeacherHomeVo> queryTeacherHome(Long studentId, Long teacherId) {
+        TeacherHomeVo data = queryUserInfo(teacherId).getData();
+        if (null == data) {
+            return HttpResponseResult.failed("未查询到用户信息");
+        }
+        LiveRoom liveRoom = liveRoomService.getliveingRoomBySpeakerId(teacherId);
         if (null != liveRoom) {
-            detail.setRoomUid(liveRoom.getRoomUid());
-            detail.setLiveing(YesOrNoEnum.YES);
+            data.setRoomUid(liveRoom.getRoomUid());
+            data.setLiveing(YesOrNoEnum.YES);
         } else {
-            detail.setLiveing(YesOrNoEnum.NO);
+            data.setLiveing(YesOrNoEnum.NO);
         }
-        return HttpResponseResult.succeed(detail);
+
+        StudentStar studentStar = studentStarService.getByStudentIdAndTeacherId(studentId, teacherId);
+        if (null == studentStar) {
+            data.setIsStar(YesOrNoEnum.NO);
+        } else {
+            data.setIsStar(YesOrNoEnum.YES);
+        }
+        return HttpResponseResult.succeed(data);
     }
 
     @Override

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

@@ -26,7 +26,6 @@ import com.yonge.cooleshow.biz.dal.service.UserAccountService;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Calendar;
 import java.util.List;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
@@ -74,15 +73,15 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
 
     @Override
     public HttpResponseResult<AccountTotal> accountTotal(TotalReq totalReq) {
-        List<AccountTotal> infoList= baseMapper.accountTotal(totalReq);
+        List<AccountTotal> infoList = baseMapper.accountTotal(totalReq.getTimeType().getCode(), totalReq);
 
         BigDecimal practiceAmount = BigDecimal.ZERO;
         BigDecimal liveAmount = BigDecimal.ZERO;
         BigDecimal musicAmount = BigDecimal.ZERO;
         for (AccountTotal info : infoList) {
             info.setPracticeAmount(null == info.getPracticeAmount() ? BigDecimal.ZERO : info.getPracticeAmount());
-            info.setLiveAmount(null == info.getLiveAmount() ? BigDecimal.ZERO  : info.getLiveAmount());
-            info.setMusicAmount(null == info.getMusicAmount() ? BigDecimal.ZERO  : info.getMusicAmount());
+            info.setLiveAmount(null == info.getLiveAmount() ? BigDecimal.ZERO : info.getLiveAmount());
+            info.setMusicAmount(null == info.getMusicAmount() ? BigDecimal.ZERO : info.getMusicAmount());
 
             practiceAmount = practiceAmount.add(info.getPracticeAmount());
             liveAmount = liveAmount.add(info.getLiveAmount());

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.config.HuifuConfiguration;
+import com.yonge.cooleshow.biz.dal.entity.StudentTime;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
@@ -59,9 +60,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private CourseScheduleService scheduleService;
     @Autowired
     private VideoLessonPurchaseRecordService recordService;
-
     @Autowired
     private MusicSheetService musicSheetService;
+    @Autowired
+    private StudentTimeService studentTimeService;
 
     //验证订单是否可以下单
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
@@ -658,6 +660,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
         orderPaymentService.updateById(orderPayment);
 
+        //StudentTime studentTime = studentTimeService.getById(detail.getUserId());
+
         List<UserOrderDetailVo> orderDetailList = orderDetailService.getOrderDetilListByOrderNo(detail.getOrderNo());
         for (UserOrderDetailVo orderDetailVo : orderDetailList) {
             orderDetailVo.setUserId(detail.getUserId());
@@ -667,6 +671,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             if (!Objects.isNull(userOrderVoConsumer)) {
                 userOrderVoConsumer.accept(orderDetailVo);
             }
+            //设置第一次购买时间
+            //studentTimeService.setTimeByGoodType(studentTime,orderDetailVo.getGoodType());
         }
+
+        //记录第一次购买时间
+        /*if(null == studentTime || null == studentTime.getUserId()){
+            studentTime.setUserId(detail.getUserId());
+            studentTimeService.save(studentTime);
+        }else{
+            studentTimeService.updateById(studentTime);
+        }*/
     }
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/WrapperUtil.java

@@ -35,7 +35,7 @@ public class WrapperUtil {
         Optional<O> o = Optional.ofNullable(map)
                 .map(m -> m.get(str));
         return intOptional(o)
-                .orElse(null);
+                .orElse(0);
     }
 
     public static <S, O> Long toLong(Map<S, O> map, S str, String exMsg) {

+ 42 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java

@@ -1,8 +1,8 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
@@ -12,6 +12,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author: liweifan
@@ -46,7 +47,6 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date birthdate;
-
     @ApiModelProperty("老师入驻状态 0、未申请  UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过")
     private AuthStatusEnum entryStatus;
     @ApiModelProperty("音乐人审核状态  0、未申请 UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过")
@@ -57,6 +57,14 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     private YesOrNoEnum isReal;
     @ApiModelProperty(value = "是否绑卡 0否 1是")
     private YesOrNoEnum isBank;
+    @ApiModelProperty(value = "老师是否在直播中 0否 1是")
+    private YesOrNoEnum liveing;
+    @ApiModelProperty(value = "直播间房号")
+    private String roomUid;
+    @ApiModelProperty(value = "是否关注 0否 1是")
+    private YesOrNoEnum isStar;
+    @ApiModelProperty(value = "老师风采视频")
+    private List<TeacherStyleVideo> styleVideo;
 
     public String getHeardUrl() {
         return heardUrl;
@@ -193,4 +201,36 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     public void setBirthdate(Date birthdate) {
         this.birthdate = birthdate;
     }
+
+    public YesOrNoEnum getLiveing() {
+        return liveing;
+    }
+
+    public void setLiveing(YesOrNoEnum liveing) {
+        this.liveing = liveing;
+    }
+
+    public String getRoomUid() {
+        return roomUid;
+    }
+
+    public void setRoomUid(String roomUid) {
+        this.roomUid = roomUid;
+    }
+
+    public List<TeacherStyleVideo> getStyleVideo() {
+        return styleVideo;
+    }
+
+    public void setStyleVideo(List<TeacherStyleVideo> styleVideo) {
+        this.styleVideo = styleVideo;
+    }
+
+    public YesOrNoEnum getIsStar() {
+        return isStar;
+    }
+
+    public void setIsStar(YesOrNoEnum isStar) {
+        this.isStar = isStar;
+    }
 }

+ 0 - 21
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java

@@ -52,11 +52,6 @@ public class TeacherVo extends Teacher {
     @ApiModelProperty(value = "老师风采视频")
     private List<TeacherStyleVideo> styleVideo;
 
-    @ApiModelProperty(value = "老师是否在直播中 0否 1是")
-    private YesOrNoEnum liveing;
-    @ApiModelProperty(value = "直播间房号")
-    private String roomUid;
-
     public String getAvatar() {
         return avatar;
     }
@@ -168,20 +163,4 @@ public class TeacherVo extends Teacher {
     public void setTeacherType(String teacherType) {
         this.teacherType = teacherType;
     }
-
-    public YesOrNoEnum getLiveing() {
-        return liveing;
-    }
-
-    public void setLiveing(YesOrNoEnum liveing) {
-        this.liveing = liveing;
-    }
-
-    public String getRoomUid() {
-        return roomUid;
-    }
-
-    public void setRoomUid(String roomUid) {
-        this.roomUid = roomUid;
-    }
 }

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

@@ -322,28 +322,27 @@
     </select>
     <select id="teacherList" resultType="com.yonge.cooleshow.biz.dal.vo.PracticeTeacherVo">
         SELECT
-            cs.teacher_id_ AS teacherId,
-            u.username_ AS userName,
-            u.avatar_ AS avatar,
+        t.user_id_ AS teacherId,
+        u.username_ AS userName,
+        u.avatar_ AS avatar,
 
-            tt.star_grade_ AS starGrade,
-            tt.exp_time_ AS expTime,
-            t.graduate_school_ AS school,
-            t.subject_ AS schoolSubject,
+        tt.star_grade_ AS starGrade,
+        tt.exp_time_ AS expTime,
+        t.graduate_school_ AS school,
+        t.subject_ AS schoolSubject,
 
-            (SELECT group_concat(p.subject_name_) FROM teacher_subject_price p WHERE find_in_set(cs.teacher_id_,p.teacher_id_)) AS configSubject,
-            sp.subject_id_ AS subjectId,
-            sp.subject_name_ AS subjectName,
-            sp.subject_price_ AS subjectPrice,
-            sp.course_minutes_ AS courseMinutes
+        (SELECT group_concat(p.subject_name_) FROM teacher_subject_price p WHERE find_in_set(t.user_id_,p.teacher_id_)) AS configSubject,
+        sp.subject_id_ AS subjectId,
+        sp.subject_name_ AS subjectName,
+        sp.subject_price_ AS subjectPrice,
+        sp.course_minutes_ AS courseMinutes
 
-        FROM course_schedule cs
-        LEFT JOIN sys_user u ON cs.teacher_id_ = u.id_
-        LEFT JOIN teacher_total tt ON cs.teacher_id_=tt.user_id_
-        LEFT JOIN teacher t ON cs.teacher_id_=t.user_id_
-        LEFT JOIN teacher_subject_price sp ON cs.teacher_id_=sp.teacher_id_
+        FROM teacher t
+        LEFT JOIN sys_user u ON t.user_id_ = u.id_
+        LEFT JOIN teacher_total tt ON t.user_id_=tt.user_id_
+        LEFT JOIN teacher_subject_price sp ON t.user_id_=sp.teacher_id_
 
-        WHERE cs.type_='PRACTICE'
+        WHERE t.user_id_ IN (SELECT teacher_id_ FROM teacher_free_time GROUP BY teacher_id_)
         <if test="param.subjectId !=null">
             AND sp.subject_id_=#{param.subjectId}
         </if>

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

@@ -84,7 +84,7 @@
         where t.id_ = #{id}
     </select>
     
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.CourseScheduleRepliedVo">
 		SELECT         
         	<include refid="baseColumns" />
 		FROM course_schedule_replied t

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

@@ -33,7 +33,7 @@
         where t.id_ = #{id}
     </select>
     
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.StudentAttendanceVo">
 		SELECT         
         	<include refid="baseColumns" />
 		FROM student_attendance t

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

@@ -37,7 +37,7 @@
         where t.id_ = #{id}
     </select>
 
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.StudentCourseHomeworkVo">
         SELECT
         <include refid="baseColumns" />
         FROM student_course_homework t

+ 12 - 6
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentStarMapper.xml

@@ -16,17 +16,23 @@
 
 	<select id="queryTeacherTotal" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo">
 		select
-			teacher_id_ as userId,
+			t.teacher_id_ as userId,
 			count(1) as fansNum
-		from student_star
-		group by teacher_id_
+		from student_star t
+		group by t.teacher_id_
 	</select>
     <select id="queryStudentTotal" resultType="com.yonge.cooleshow.biz.dal.vo.StudentTotalVo">
 		select
-			student_id_ as userId,
+			t.student_id_ as userId,
 			count(1) as starTeacherNum
-		from student_star
-		group by student_id_
+		from student_star t
+		group by t.student_id_
 	</select>
 
+    <select id="getByStudentIdAndTeacherId" resultType="com.yonge.cooleshow.biz.dal.entity.StudentStar">
+		select
+			<include refid="baseColumns"/>
+		from student_star t
+		where t.student_id_ = #{studentId} and t.teacher_id_ #{teacherId}
+	</select>
 </mapper>

+ 24 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentTimeMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.StudentTimeDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.StudentTime">
+        <result column="user_id_" property="userId" />
+        <result column="first_vip_time_" property="firstVipTime" />
+        <result column="first_practice_time_" property="firstPracticeTime" />
+        <result column="first_video_time_" property="firstVideoTime" />
+        <result column="first_live_time_" property="firstLiveTime" />
+        <result column="first_music_time_" property="firstMusicTime" />
+        <result column="first_mall_time_" property="firstMallTime" />
+    </resultMap>
+
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.user_id_ as userId
+        , t.first_vip_time_ as firstVipTime
+        , t.first_practice_time_ as firstPracticeTime
+        , t.first_video_time_ as firstVideoTime
+        , t.first_live_time_ as firstLiveTime
+        , t.first_music_time_ as firstMusicTime
+        , t.first_mall_time_ as firstMallTime
+        </sql>
+</mapper>

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

@@ -31,7 +31,7 @@
         where t.user_id_ = #{id}
     </select>
     
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.StudentTotalVo">
 		SELECT         
         	<include refid="baseColumns" />
 		FROM student_total t

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

@@ -29,7 +29,7 @@
         where t.user_id_ = #{id}
     </select>
     
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo">
 		SELECT         
         	<include refid="baseColumns" />
 		FROM teacher_total t

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

@@ -69,7 +69,7 @@
         where t.user_id_ = #{id}
     </select>
 
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountVo">
         SELECT
         <include refid="baseColumns"/>
         FROM user_cash_account t
@@ -102,7 +102,7 @@
                     <![CDATA[AND t.create_time_ <= #{param.endTime} ]]>
                 </if>
                 <if test="param.userId !=null">
-                    t.account_id_ = #{userId}
+                    AND t.account_id_ = #{param.userId}
                 </if>
             </where>
             group by DATE_FORMAT(t.create_time_,'%Y-%m-%d')
@@ -115,12 +115,12 @@
                 <![CDATA[AND t.sys_day_ <= #{param.endTime} ]]>
             </if>
         </where>
-        order by t.sys_day_ desc
         <if test="timeType != null and timeType == 'MONTH'">
             group by t.sys_day_ymd_
         </if>
         <if test="timeType != null and timeType == 'YEAR'">
             group by t.sys_day_ym_
         </if>
+        order by t.sys_day_ymd_ desc
     </select>
 </mapper>

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

@@ -39,7 +39,7 @@
         where t.id_ = #{id}
     </select>
 
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderPaymentVo">
         SELECT
         <include refid="baseColumns" />
         FROM user_order_payment t

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

@@ -37,7 +37,7 @@
         where t.id_ = #{id}
     </select>
     
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo">
 		SELECT         
         	<include refid="baseColumns" />
 		FROM order_refunds t

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

@@ -51,7 +51,7 @@
             ) as verifyUser
         FROM user_withdrawal t
         left join sys_user u on u.id_ = t.user_id_
-        LEFT JOIN user_bank_card bc on t.bank_card_ = bc.bank_card_ and bc.del_flag_ = 0
+        LEFT JOIN user_bank_card bc on t.bank_card_ = bc.bank_card_ and t.user_id_ = bc.user_id_ and bc.del_flag_ = 0
         <where>
             <if test="null != param.search and '' != param.search">
                 AND (

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

@@ -31,7 +31,7 @@
         where t.id_ = #{id}
     </select>
     
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo">
 		SELECT         
         	<include refid="baseColumns" />
 		FROM vip_card_record t

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

@@ -5,7 +5,9 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
+import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
+import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRepliedService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
@@ -23,6 +25,8 @@ import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.constraints.NotNull;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -91,7 +95,7 @@ public class StudentCourseScheduleController extends BaseController {
         return succeed(courseScheduleService.queryCourseScheduleStudent(search));
     }
 
-    @ApiOperation("学生端-首页-陪练课老师列表")
+    @ApiOperation(value = "学生端-首页-陪练课老师列表", notes = "search:{\"subjectId\":null,\"search\":\"\",\"sort\":\"starGrade ASC,expTime DESC,subjectPrice DESC\"}")
     @PostMapping("/teacherList")
     public HttpResponseResult<PageInfo<PracticeTeacherVo>> teacherList(@RequestBody PracticeTeacherSearch search) {
         IPage<PracticeTeacherVo> pages = courseScheduleService.teacherList(PageUtil.getPage(search), search);
@@ -128,5 +132,24 @@ public class StudentCourseScheduleController extends BaseController {
     public HttpResponseResult<StudentHomePage> queryLiveAndVideo() {
         return succeed(courseScheduleService.queryLiveAndVideo());
     }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),
+            @ApiImplicitParam(name = "studentId", dataType = "Long", value = "学生id"),
+            @ApiImplicitParam(name = "year", dataType = "Integer", value = "年"),
+            @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
+            @ApiImplicitParam(name = "day", dataType = "Integer", value = "日"),
+    })
+    @ApiOperation("陪练课日历-用于学生购买指定老师陪练课")
+    @PostMapping("/createPracticeCourseCalendar")
+    public HttpResponseResult<List<CourseCalendarEntity>> generatePracticeCourseCalender(@RequestBody Map<String, Object> param) {
+        return succeed(courseScheduleService.createPracticeCourseCalender(param));
+    }
+
+    @ApiOperation("查询老师陪练课配置")
+    @GetMapping("/getTeacherSubjectPrice")
+    public HttpResponseResult<TeacherSubjectPrice> getTeacherSubjectPrice(@NotNull Long teacherId, @NotNull Long subjectId) {
+        return succeed(courseScheduleService.teacherSubjectPrice(teacherId, subjectId));
+    }
 }
 

+ 13 - 8
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.TeacherStyleSearch;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TeacherStyleVideoService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherStyleVideoVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -42,19 +43,23 @@ public class TeacherController extends BaseController {
         return succeed(PageUtil.pageInfo(pages));
     }
 
-    @ApiOperation(value = "个人风采-详情")
-    @GetMapping("/queryTeacherStyle")
-    public HttpResponseResult<TeacherVo> queryTeacherStyle(@ApiParam(value = "用户ID", required = true) @RequestParam("userId") Long userId) {
-        if(null == userId){
-            return failed("缺少userId");
+    @ApiOperation(value = "查询教师基本信息")
+    @GetMapping("/queryTeacherHome")
+    public HttpResponseResult<TeacherHomeVo> queryTeacherHome(@ApiParam(value = "老师ID", required = true) @RequestParam("userId") Long userId) {
+        if (null == userId) {
+            return failed("缺少老师ID");
+        }
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return teacherService.queryTeacherStyle(userId);
+        return teacherService.queryTeacherHome(user.getId(), userId);
     }
 
     @ApiOperation(value = "增加视频浏览量")
     @GetMapping("/addVideoBrowse")
     public HttpResponseResult<Boolean> addVideoBrowse(@ApiParam(value = "视频ID", required = true) @RequestParam("videoId") Long videoId) {
-        if(null == videoId){
+        if (null == videoId) {
             return failed("缺少videoId");
         }
         return styleVideoService.addVideoBrowse(videoId);
@@ -63,7 +68,7 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "增加主页浏览量")
     @GetMapping("/addHomeBrowse")
     public HttpResponseResult<Boolean> addHomeBrowse(@ApiParam(value = "老师ID", required = true) @RequestParam("userId") Long userId) {
-        if(null == userId){
+        if (null == userId) {
             return failed("缺少userId");
         }
         return teacherService.addHomeBrowse(userId);

+ 14 - 7
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -29,7 +29,10 @@ import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
-import java.util.Calendar;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.temporal.TemporalAdjusters;
 import java.util.Date;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
@@ -158,15 +161,19 @@ public class UserOrderController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         query.setUserId(user.getId());
+
         if (StringUtil.isEmpty(query.getSearchDate())) {
             query.setSearchDate(DateUtil.format(new Date(), "yyyy-MM"));
         }
+        String[] classDateSp = query.getSearchDate().split("-");
         try {
-            Calendar calendar = Calendar.getInstance();
-            String[] classDateSp = query.getSearchDate().split("-");
-            calendar.set(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1])-1, 1, 0, 0, 0);
-            query.setStartTime(calendar.getTime());
-            query.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
+            LocalDate date = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
+
+            LocalDateTime firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
+            LocalDateTime lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
+
+            query.setStartTime(firstDay);
+            query.setEndTime(lastDay);
         } catch (Exception e) {
             throw new BizException("查询时间格式不正确 [" + query.getSearchDate() + "]");
         }
@@ -191,7 +198,7 @@ public class UserOrderController extends BaseController {
      */
     @GetMapping("/detailByOrderNo/{orderNo}")
     @ApiOperation(value = "通过订单号查询详情", notes = "传入orderNo")
-    public HttpResponseResult<UserOrderVo> detailByOrderNo(@PathVariable("orderNo")String orderNo) {
+    public HttpResponseResult<UserOrderVo> detailByOrderNo(@PathVariable("orderNo") String orderNo) {
         UserOrder param = new UserOrder();
         param.setOrderNo(orderNo);
         UserOrderVo detail = userOrderService.detailApp(param);

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -37,7 +37,7 @@ public class TeacherController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return teacherService.queryUserInfo(user);
+        return teacherService.queryUserInfo(user.getId());
     }
 
     @ApiOperation(value = "开通直播")

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

@@ -64,7 +64,8 @@ public class TeacherCourseScheduleController extends BaseController {
             @ApiImplicitParam(name = "year", dataType = "Integer", value = "年"),
             @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
             @ApiImplicitParam(name = "day", dataType = "Integer", value = "日"),
-            @ApiImplicitParam(name = "singleCourseMinutes", dataType = "Integer", value = "单课时时长(包含休息时间)"),
+            @ApiImplicitParam(name = "singleCourseMinutes", dataType = "Integer", value = "单课时时长(不包含休息时间)"),
+            @ApiImplicitParam(name = "freeCourseMinutes", dataType = "Integer", value = "单课时休息时长)"),
             @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),
     })
     @ApiOperation("直播课创建时的日历数据")

+ 37 - 23
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserAccountController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
 import com.yonge.cooleshow.biz.dal.dto.search.UserAccountRecordSearch;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.enums.TimeTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
 import com.yonge.cooleshow.biz.dal.service.UserAccountService;
@@ -13,7 +14,6 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
 import com.yonge.cooleshow.biz.dal.vo.res.AccountTotal;
-import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
@@ -24,10 +24,13 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.temporal.TemporalAdjusters;
 import java.util.Calendar;
 import java.util.Date;
 
@@ -67,46 +70,57 @@ public class UserAccountController extends BaseController {
         }
         query.setUserId(user.getId());
         query.setInOrOut(InOrOutEnum.IN);
+
         if (StringUtil.isEmpty(query.getSearchDate())) {
             query.setSearchDate(DateUtil.format(new Date(), "yyyy-MM"));
         }
+        String[] classDateSp = query.getSearchDate().split("-");
         try {
-            Calendar calendar = Calendar.getInstance();
-            String[] classDateSp = query.getSearchDate().split("-");
-            calendar.set(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1])-1, 1, 0, 0, 0);
-            query.setStartTime(calendar.getTime());
-            query.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
+            LocalDate date = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
+
+            LocalDateTime firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
+            LocalDateTime lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
+
+            query.setStartTime(firstDay);
+            query.setEndTime(lastDay);
         } catch (Exception e) {
             throw new BizException("查询时间格式不正确 [" + query.getSearchDate() + "]");
         }
+
         IPage<UserAccountRecordVo> pages = userAccountRecordService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
     }
 
     @ApiOperation(value = "收入数据统计")
     @PostMapping("/accountTotal")
-    public HttpResponseResult<AccountTotal> accountTotal(@Valid @RequestBody TotalReq totalReq) {
+    public HttpResponseResult<AccountTotal> accountTotal(@Valid @RequestBody TotalReq query) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        totalReq.setUserId(user.getId());
+        query.setUserId(user.getId());
+
         //参数处理
-        Calendar calendar = Calendar.getInstance();
-        if (TimeTypeEnum.MONTH.equals(totalReq.getTimeType())) {
-            String[] classDateSp = totalReq.getDateTime().split("-");
-            calendar.set(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1])-1, 1, 0, 0, 0);
-            totalReq.setStartTime(calendar.getTime());
-            totalReq.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
-        } else if (TimeTypeEnum.YEAR.equals(totalReq.getTimeType())) {
-            calendar.set(Integer.parseInt(totalReq.getDateTime()), 1, 1, 0, 0, 0);
-            totalReq.setStartTime(calendar.getTime());
+        try {
+            LocalDateTime firstDay;
+            LocalDateTime lastDay;
+            if (PeriodEnum.YEAR.getCode().equals(query.getTimeType())) {
+                LocalDate date = LocalDate.of(Integer.parseInt(query.getDateTime()), 1, 1);
+                firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
+                lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
+            } else {
+                String[] classDateSp = query.getDateTime().split("-");
+                LocalDate date = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
 
-            calendar.set(Integer.parseInt(totalReq.getDateTime()), 12, 1, 0, 0, 0);
-            totalReq.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
-        } else {
-            return HttpResponseResult.failed("参数异常");
+                firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
+                lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
+            }
+            query.setStartTime(firstDay);
+            query.setEndTime(lastDay);
+        } catch (Exception e) {
+            throw new BizException("查询时间格式不正确 [" + query.getDateTime() + "]");
         }
-        return userAccountService.accountTotal(totalReq);
+
+        return userAccountService.accountTotal(query);
     }
 }

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

@@ -22,7 +22,10 @@ import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.Calendar;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.temporal.TemporalAdjusters;
 import java.util.Date;
 
 @RestController
@@ -56,25 +59,30 @@ public class UserWithdrawalController extends BaseController {
 
     @PostMapping("/withdrawalPage")
     @ApiOperation(value = "提现记录")
-    public HttpResponseResult<PageInfo<UserWithdrawalVo>> withdrawalPage(@RequestBody TeacherWithdrawalSearch withdrawalSearch) {
+    public HttpResponseResult<PageInfo<UserWithdrawalVo>> withdrawalPage(@RequestBody TeacherWithdrawalSearch query) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        withdrawalSearch.setUserId(user.getId());
-        if (StringUtil.isEmpty(withdrawalSearch.getSearchDate())) {
-            withdrawalSearch.setSearchDate(DateUtil.format(new Date(), "yyyy-MM"));
+        query.setUserId(user.getId());
+
+        if (StringUtil.isEmpty(query.getSearchDate())) {
+            query.setSearchDate(DateUtil.format(new Date(), "yyyy-MM"));
         }
+        String[] classDateSp = query.getSearchDate().split("-");
         try {
-            Calendar calendar = Calendar.getInstance();
-            String[] classDateSp = withdrawalSearch.getSearchDate().split("-");
-            calendar.set(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]) - 1, 1, 0, 0, 0);
-            withdrawalSearch.setStartTime(calendar.getTime());
-            withdrawalSearch.setEndTime(DateUtil.dayEnd(DateUtil.getLastDayOfMonth(calendar.getTime())));
+            LocalDate date = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
+
+            LocalDateTime firstDay = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
+            LocalDateTime lastDay = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
+
+            query.setStartTime(firstDay);
+            query.setEndTime(lastDay);
         } catch (Exception e) {
-            throw new BizException("查询时间格式不正确 [" + withdrawalSearch.getSearchDate() + "]");
+            throw new BizException("查询时间格式不正确 [" + query.getSearchDate() + "]");
         }
-        IPage<UserWithdrawalVo> pages = userWithdrawalService.selectPage(PageUtil.getPage(withdrawalSearch), withdrawalSearch);
+
+        IPage<UserWithdrawalVo> pages = userWithdrawalService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
     }