Selaa lähdekoodia

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

yonge 3 vuotta sitten
vanhempi
commit
d27b69a601
100 muutettua tiedostoa jossa 3952 lisäystä ja 525 poistoa
  1. 2 0
      .gitignore
  2. 3 3
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/UserSetReq.java
  3. 7 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  4. 4 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  5. 35 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  6. 3 0
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  7. 4 0
      cooleshow-user/user-admin/pom.xml
  8. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/config/ResourceServerConfig.java
  9. 25 64
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java
  10. 37 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PracticeController.java
  11. 35 43
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java
  12. 38 40
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java
  13. 51 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/OrderStatusConvert.java
  14. 45 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/OrderTypeConvert.java
  15. 81 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseHomeworkDao.java
  16. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  17. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java
  18. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java
  19. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/PracticeDao.java
  20. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherFreeTimeDao.java
  21. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountDao.java
  22. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserBankCardDao.java
  23. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java
  24. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalDao.java
  25. 52 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkReviewDto.java
  26. 86 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkSaveDto.java
  27. 52 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkSubmitDto.java
  28. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeTimesSetting.java
  29. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserBankCardDto.java
  30. 137 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/excel/UserOrderExport.java
  31. 34 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/excel/UserWithdrawalExport.java
  32. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  33. 89 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkSearch.java
  34. 81 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java
  35. 110 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PracticeSearch.java
  36. 50 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherWithdrawalSearch.java
  37. 139 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherSubjectPrice.java
  38. 6 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccount.java
  39. 49 18
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserBankCard.java
  40. 57 56
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java
  41. 25 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java
  42. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java
  43. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawal.java
  44. 5 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java
  45. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/InOrOutEnum.java
  46. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java
  47. 50 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseHomeworkService.java
  48. 20 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  49. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentPaymentService.java
  50. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/PracticeService.java
  51. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentAttendanceService.java
  52. 19 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentCourseHomeworkService.java
  53. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherFreeTimeService.java
  54. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserBankCardService.java
  55. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  56. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java
  57. 220 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  58. 36 30
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  59. 26 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  60. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  61. 11 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  62. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PracticeServiceImpl.java
  63. 17 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentAttendanceServiceImpl.java
  64. 29 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentCourseHomeworkServiceImpl.java
  65. 1 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  66. 23 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherFreeTimeServiceImpl.java
  67. 5 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  68. 40 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserBankCardServiceImpl.java
  69. 42 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  70. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  71. 0 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardServiceImpl.java
  72. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CountVo.java
  73. 294 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkDetailVo.java
  74. 160 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkVo.java
  75. 168 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PracticeVo.java
  76. 193 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherFreeTimeVo.java
  77. 44 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java
  78. 33 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserWithdrawalVo.java
  79. 13 28
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCreateRes.java
  80. 268 9
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  81. 23 6
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  82. 14 14
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  83. 27 6
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  84. 5 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  85. 89 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/PracticeMapper.xml
  86. 18 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherFreeTimeMapper.xml
  87. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherStyleVideoMapper.xml
  88. 4 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountMapper.xml
  89. 9 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserBankCardMapper.xml
  90. 67 6
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  91. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  92. 37 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml
  93. 96 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseHomeworkController.java
  94. 13 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseScheduleController.java
  95. 0 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java
  96. 77 5
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseHomeworkController.java
  97. 4 7
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherFreeTimeController.java
  98. 38 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserBankCardController.java
  99. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java
  100. 95 88
      toolset/utils/pom.xml

+ 2 - 0
.gitignore

@@ -56,3 +56,5 @@ target
 **/bootstrap-local.yml
 **/bootstrap-local.properties
 **/logback-spring.xml
+**/AuditLogInterceptor.java
+/toolset/audit-log/src/main/java/com/yonge/toolset/log/interceptor/AuditLogInterceptor.java

+ 3 - 3
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/UserSetReq.java

@@ -15,7 +15,7 @@ public class UserSetReq {
     @ApiModelProperty("昵称")
     private String username;
     @ApiModelProperty(value = "性别 0女 1男")
-    private UserGenderEnum gender;
+    private Integer gender;
 
     public String getAvatar() {
         return avatar;
@@ -33,11 +33,11 @@ public class UserSetReq {
         this.username = username;
     }
 
-    public UserGenderEnum getGender() {
+    public Integer getGender() {
         return gender;
     }
 
-    public void setGender(UserGenderEnum gender) {
+    public void setGender(Integer gender) {
         this.gender = gender;
     }
 }

+ 7 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java

@@ -136,4 +136,11 @@ public interface SysUserDao extends BaseDAO<Long, SysUser> {
      * @updateTime 2022/3/22 11:06
      */
     void updatetSetDetail(@Param("param") UserSetReq setReq, @Param("id") Long id);
+    /***
+     * 创建用户账户
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/4/14 17:07
+     */
+    void createUserAccount(@Param("userId")Long id);
 }

+ 4 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -11,6 +11,7 @@ import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.User;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -158,6 +159,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
             //sysTenantAccount
             //创建teacher表
             sysUserDao.saveTeacher(sysUser.getId());
+            //创建老师账户
+            sysUserDao.createUserAccount(sysUser.getId());
             return queryUserInfoByPhone(phone);
         } else if (StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
             sysUser.setUserType("STUDENT");
@@ -181,6 +184,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
 
     @Override
     public void saveTeacher(Long userId) {
+
         sysUserDao.saveTeacher(userId);
     }
 

+ 35 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -155,6 +155,41 @@ public class UserController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "设置用户名密码")
+    @PostMapping(value = "/setUsernameAndPassword", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    @ApiImplicitParams({@ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "username", value = "用户名", dataType = "String")})
+    public Object setPassword(String password, String username) {
+        if (StringUtils.isEmpty(password)) {
+            return failed("参数校验失败");
+        }
+        AuthUser authUser = SecurityUtils.getUser();
+        if (authUser == null) {
+            return failed("获取用户信息失败");
+        }
+        SysUser sysUser = sysUserService.get(authUser.getUserId());
+        if (sysUser == null) {
+            return failed("用户不存在");
+        }
+        if(!StringUtil.isEmpty(username)){
+            if (sysUser.getUserType().contains("SYSTEM")) {
+                sysUser.setRealName(username);
+            }
+            sysUser.setUsername(username);
+        }
+		/*if(StringUtils.isEmpty(sysUser.getImToken())){
+			ImResult register = imFeignService.register(new ImUserModel(sysUser.getId().toString(), username, sysUser.getAvatar()));
+			sysUser.setImToken(register.getToken());
+		}else {
+			imFeignService.update(new ImUserModel(sysUser.getId().toString(),username,sysUser.getAvatar()));
+		}*/
+        password = new BCryptPasswordEncoder().encode(password);
+        sysUser.setPassword(password);
+        sysUser.setUpdateTime(new Date());
+        sysUserService.update(sysUser);
+        return succeed();
+    }
+
     @ApiOperation(value = "手机验证码修改密码")
     @PostMapping(value = "/updatePassword", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
     @ApiImplicitParams({@ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),

+ 3 - 0
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -71,6 +71,9 @@
     <insert id="saveStudent">
         INSERT INTO student (user_id_,create_time_,update_time_) VALUES(#{userId},NOW(),NOW())
     </insert>
+    <insert id="createUserAccount">
+        INSERT INTO user_cash_account (user_id_,create_time_,update_time_)VALUES(#{userId},NOW(),NOW())
+    </insert>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.yonge.cooleshow.auth.api.entity.SysUser">

+ 4 - 0
cooleshow-user/user-admin/pom.xml

@@ -64,6 +64,10 @@
 			<artifactId>easy-captcha</artifactId>
 			<version>1.6.2</version>
 		</dependency>
+		<dependency>
+			<groupId>com.yonge.toolset</groupId>
+			<artifactId>utils</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/config/ResourceServerConfig.java

@@ -26,7 +26,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 	public void configure(HttpSecurity http) throws Exception {
 		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
 				.authorizeRequests().antMatchers("/task/**").hasIpAddress("0.0.0.0/0")
-				.antMatchers("/v2/api-docs", "/code/*", "/api/*","/payment/callback", "/appVersionInfo/queryByPlatform", "/uploadFile").permitAll().anyRequest().authenticated()
+				.antMatchers("/v2/api-docs", "/code/*", "/api/*","/payment/callback", "/appVersionInfo/queryByPlatform", "/uploadFile","/userOrder/**").permitAll().anyRequest().authenticated()
 				.and().httpBasic();
 	}
 

+ 25 - 64
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java

@@ -1,86 +1,47 @@
 package com.yonge.cooleshow.admin.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
-import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
-import com.yonge.cooleshow.biz.dal.dto.search.CourseHomeworkSearch;
-import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
-import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
-
 @RestController
-@RequestMapping("/courseHomework")
+@RequestMapping("/homework")
 @Api(value = "课程作业表", tags = "课程作业表")
 public class CourseHomeworkController extends BaseController {
 
     @Autowired
     private CourseHomeworkService courseHomeworkService;
 
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<CourseHomeworkVo> detail(@PathVariable("id") Long id) {
-    	return succeed(courseHomeworkService.detail(id));
-	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入courseHomeworkSearch")
-    public HttpResponseResult<PageInfo<CourseHomeworkVo>> page(@RequestBody CourseHomeworkSearch query) {
-		IPage<CourseHomeworkVo> pages = courseHomeworkService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入courseHomework")
-	public HttpResponseResult save(@Valid @RequestBody CourseHomework courseHomework) {
-    	return status(courseHomeworkService.save(courseHomework));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入courseHomework")
-	public HttpResponseResult update(@Valid @RequestBody CourseHomework courseHomework) {
-        return status(courseHomeworkService.updateById(courseHomework));
+
+	@ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+	@PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
+	public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkSearch query) {
+		query.setDecorate(YesOrNoEnum.YES);
+		query.setCourseStatus(CourseScheduleEnum.COMPLETE);
+		query.setCourseType(CourseScheduleEnum.PRACTICE);
+		return succeed(PageUtil.pageInfo(courseHomeworkService.selectAdminPage(PageUtil.getPage(query),query)));
 	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入courseHomework")
-	public HttpResponseResult submit(@Valid @RequestBody CourseHomework courseHomework) {
-        return status(courseHomeworkService.saveOrUpdate(courseHomework));
-    }
 
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(courseHomeworkService.removeByIds(StringUtil.toLongList(ids)));
+
+	@ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
+	@GetMapping(value = "/detail/{courseId}")
+	public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
+															 @PathVariable("courseId") Long courseId) {
+		return succeed(courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId));
 	}
 }

+ 37 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PracticeController.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.PracticeSearch;
+import com.yonge.cooleshow.biz.dal.service.PracticeService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.PracticeVo;
+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.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/pactice")
+@Api(value = "陪练课")
+public class PracticeController extends BaseController {
+
+    @Autowired
+    private PracticeService pacticeService;
+
+    @ApiOperation(value = "陪练课-老师详情")
+    @PostMapping("/teacherPactice")
+    public HttpResponseResult<PageInfo<PracticeVo>> teacherPactice(@RequestBody PracticeSearch search) {
+        IPage<PracticeVo> pages = pacticeService.selectTeacherPactice(PageUtil.getPage(search), search);
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
+    @ApiOperation(value = "陪练课-学生详情")
+    @PostMapping("/studentPactice")
+    public HttpResponseResult<PageInfo<PracticeVo>> studentPactice(@RequestBody PracticeSearch search) {
+        IPage<PracticeVo> pages = pacticeService.selectStudentPactice(PageUtil.getPage(search), search);
+        return succeed(PageUtil.pageInfo(pages));
+    }
+}

+ 35 - 43
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java

@@ -2,22 +2,30 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import com.yonge.cooleshow.biz.dal.dto.excel.UserOrderExport;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 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.easyexcel.ExcelUtils;
 import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
+import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
 @RestController
 @RequestMapping("/userOrder")
 @Api(value = "平台订单表", tags = "平台订单表")
@@ -26,61 +34,45 @@ public class UserOrderController extends BaseController {
     @Autowired
     private UserOrderService userOrderService;
 
-	/**
+    /**
      * 查询单条
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
     public HttpResponseResult<UserOrderVo> detail(@PathVariable("id") Long id) {
-    	return succeed(userOrderService.detail(id));
-	}
-    
+        return succeed(userOrderService.detail(id));
+    }
+
     /**
      * 查询分页
      */
     @PostMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入orderSearch")
     public HttpResponseResult<PageInfo<UserOrderVo>> page(@RequestBody OrderSearch query) {
-		IPage<UserOrderVo> pages = userOrderService.selectPage(PageUtil.getPage(query), query);
+        IPage<UserOrderVo> pages = userOrderService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入order")
-	public HttpResponseResult save(@Valid @RequestBody UserOrder userOrder) {
-    	return status(userOrderService.save(userOrder));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入order")
-	public HttpResponseResult update(@Valid @RequestBody UserOrder userOrder) {
-        return status(userOrderService.updateById(userOrder));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入order")
-	public HttpResponseResult submit(@Valid @RequestBody UserOrder userOrder) {
-        return status(userOrderService.saveOrUpdate(userOrder));
     }
 
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(userOrderService.removeByIds(StringUtil.toLongList(ids)));
-	}
+    /**
+     * 查询导出
+     */
+    @GetMapping("/export")
+    @ApiOperation(value = "查询导出", notes = "传入orderSearch")
+    public void export(OrderSearch query) {
+        List<UserOrderVo> userOrderVos = userOrderService.selectList(query);
+        List<UserOrderExport> list = new ArrayList<>();
+        userOrderVos.forEach(o-> {
+            UserOrderExport export = new UserOrderExport();
+            try {
+                BeanUtils.copyProperties(export,o);
+                list.add(export);
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            } catch (InvocationTargetException e) {
+                e.printStackTrace();
+            }
+        });
+        ExcelUtils.exportExcel(list, "订单列表数据" + System.currentTimeMillis(),
+                "订单列表数据");
+    }
 }

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

@@ -2,22 +2,27 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import com.yonge.cooleshow.biz.dal.dto.excel.UserOrderExport;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 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 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.web.bind.annotation.*;
 
-import javax.validation.Valid;
-
 import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
 import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
 
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
 @RestController
 @RequestMapping("/userWithdrawal")
 @Api(value = "用户账户提现表", tags = "用户账户提现表")
@@ -44,43 +49,36 @@ public class UserWithdrawalController extends BaseController {
 		IPage<UserWithdrawalVo> pages = userWithdrawalService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
 	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入teacherWithdrawal")
-	public HttpResponseResult save(@Valid @RequestBody UserWithdrawal userWithdrawal) {
-    	return status(userWithdrawalService.save(userWithdrawal));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入teacherWithdrawal")
-	public HttpResponseResult update(@Valid @RequestBody UserWithdrawal userWithdrawal) {
-        return status(userWithdrawalService.updateById(userWithdrawal));
-	}
-    
+
     /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入teacherWithdrawal")
-	public HttpResponseResult submit(@Valid @RequestBody UserWithdrawal userWithdrawal) {
-        return status(userWithdrawalService.saveOrUpdate(userWithdrawal));
+     * 查询导出
+     */
+    @GetMapping("/export")
+    @ApiOperation(value = "查询导出", notes = "传入TeacherWithdrawalSearch")
+    public void export(TeacherWithdrawalSearch query) {
+        List<UserWithdrawalVo> withdrawalVoList = userWithdrawalService.selectList(query);
+
+
+
+
+        List<UserOrderExport> list = new ArrayList<>();
+        withdrawalVoList.forEach(o-> {
+            UserOrderExport export = new UserOrderExport();
+            try {
+                BeanUtils.copyProperties(export,o);
+                list.add(export);
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            } catch (InvocationTargetException e) {
+                e.printStackTrace();
+            }
+        });
+        ExcelUtils.exportExcel(list, "订单列表数据" + System.currentTimeMillis(),
+                "订单列表数据");
     }
 
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(userWithdrawalService.removeByIds(StringUtil.toLongList(ids)));
-	}
+
+
+    
+
 }

+ 51 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/OrderStatusConvert.java

@@ -0,0 +1,51 @@
+package com.yonge.cooleshow.biz.dal.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/15 15:45
+ */
+public class OrderStatusConvert implements Converter<OrderStatusEnum> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return OrderStatusEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    /***
+     * WAIT_PAY("WAIT_PAY","待支付"),
+     *     PAYING("PAYING","支付中"),
+     *     PAID("PAID","已付款"),
+     *     CLOSE("CLOSE","已关闭")
+     */
+
+
+    @Override
+    public OrderStatusEnum convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if ("待支付".equals(cellData.getStringValue())) { return OrderStatusEnum.WAIT_PAY; }
+        if ("支付中".equals(cellData.getStringValue())) { return OrderStatusEnum.PAYING; }
+        if ("已付款".equals(cellData.getStringValue())) { return OrderStatusEnum.PAID; }
+        if ("已关闭".equals(cellData.getStringValue())) { return OrderStatusEnum.CLOSE; }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(OrderStatusEnum orderType, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (orderType.equals(OrderStatusEnum.WAIT_PAY)) { return new CellData("待支付"); }
+        if (orderType.equals(OrderStatusEnum.PAYING)) { return new CellData("支付中"); }
+        if (orderType.equals(OrderStatusEnum.PAID)) { return new CellData("已付款"); }
+        if (orderType.equals(OrderStatusEnum.CLOSE)) { return new CellData("已关闭"); }
+        return new CellData("异常数据");
+    }
+}

+ 45 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/OrderTypeConvert.java

@@ -0,0 +1,45 @@
+package com.yonge.cooleshow.biz.dal.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/15 15:36
+ */
+public class OrderTypeConvert implements Converter<OrderTypeEnum> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return CellDataTypeEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public OrderTypeEnum convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if ("开通会员".equals(cellData.getStringValue())) { return OrderTypeEnum.VIP; }
+        if ("陪练课购买".equals(cellData.getStringValue())) { return OrderTypeEnum.PRACTICE; }
+        if ("直播课购买".equals(cellData.getStringValue())) { return OrderTypeEnum.LIVE; }
+        if ("视频课购买".equals(cellData.getStringValue())) { return OrderTypeEnum.VIDEO; }
+        if ("单曲点播".equals(cellData.getStringValue())) { return OrderTypeEnum.MUSIC; }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(OrderTypeEnum orderType, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (orderType.equals(OrderTypeEnum.VIP)) { return new CellData("开通会员"); }
+        if (orderType.equals(OrderTypeEnum.PRACTICE)) { return new CellData("陪练课购买"); }
+        if (orderType.equals(OrderTypeEnum.LIVE)) { return new CellData("直播课购买"); }
+        if (orderType.equals(OrderTypeEnum.VIDEO)) { return new CellData("视频课购买"); }
+        if (orderType.equals(OrderTypeEnum.MUSIC)) { return new CellData("单曲点播"); }
+        return new CellData("异常数据");
+    }
+}

+ 81 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseHomeworkDao.java

@@ -1,30 +1,98 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
+import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
-import com.yonge.cooleshow.biz.dal.dto.search.CourseHomeworkSearch;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
-public interface CourseHomeworkDao extends BaseMapper<CourseHomework>{
+public interface CourseHomeworkDao extends BaseMapper<CourseHomework> {
 	/**
 	 * 查询详情
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo
+	 *
+	 * @author liweifan
+	 * @date 2022-03-30 13:53:51
+	 * @return: com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo
 	 */
 	CourseHomeworkVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo
+	 *
+	 * @author liweifan
+	 * @date 2022-03-30 13:53:51
+	 * @return: com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo
+	 */
+	List<CourseHomeworkVo> selectPage(@Param("page") IPage<CourseHomeworkVo> page, @Param("param") HomeworkSearch query);
+
+	/**
+	 * 课程详情 课后作业信息
+	 *
+	 * @param courseId 课程id
+	 * @return 课后作业信息
+	 */
+	CourseHomeworkDetailVo selectCourseHomeworkDetailByCourseId(@Param("courseId") Long courseId);
+
+	/**
+	 * 获取课程购买的用户信息
+	 *
+	 * @param courseGroupId    课程组id
+	 * @param courseScheduleId 课程id
+	 * @return 购买用户信息
+	 */
+	CourseHomeworkDetailVo selectPaymentStudentInfo(@Param("courseScheduleId") Long courseScheduleId);
+
+	/**
+	 * 获取课程购买的用户信息
+	 *
+	 * @param records 课程id集合
+	 * @return
+	 */
+	List<CourseHomeworkVo> selectStudentInfo(@Param("records") List<CourseHomeworkVo> records);
+
+	/**
+	 * 查询课程组声部信息 和老师信息
+	 *
+	 * @param courseGroupId 课程组id
+	 * @return
+	 */
+	CourseHomeworkDetailVo selectSubjectAndTeacherInfo(@Param("courseGroupId") Long courseGroupId);
+
+	/**
+	 * 查询课程组声部信息
+	 *
+	 * @param records 课程组id集合
+	 * @return
+	 */
+	List<CourseHomeworkVo> selectSubjectInfoList(@Param("records") List<CourseHomeworkVo> records);
+
+	/**
+	 * 查询课程老师信息和学生旷课信息
+	 *
+	 * @param records 课程id集合
+	 * @return
+	 */
+	List<CourseHomeworkVo> selectTeacherInfo(@Param("records") List<CourseHomeworkVo> records);
+
+	/**
+	 * 管理平台查询
+	 *
+	 * @param page
+	 * @param query
+	 * @return
+	 */
+	List<CourseHomeworkVo> selectAdminPage(@Param("page") IPage<CourseHomeworkVo> page, @Param("param") HomeworkSearch query);
+
+	/**
+	 * 查询课程提交时间
+	 *
+	 * @param courseIdList 课程id集合
+	 * @return
 	 */
-	List<CourseHomeworkVo> selectPage(@Param("page") IPage page, @Param("param") CourseHomeworkSearch courseHomework);
-	
+	List<CourseHomeworkVo> selectSubmitTime(@Param("courseIdList") List<Long> courseIdList);
 }

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

@@ -76,7 +76,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     /**
      * 老师未布置的课程作业数量
      * <p>
-     * 陪练课 课程状态为完成,有学生考勤记录 没有学生课程记录
+     * 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
      *
      * @param param 查询条件
      * @return number
@@ -88,5 +88,8 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     //根据学生id查询老师
     List<MyCourseVo> queryStudentPracticeCourse(IPage<MyCourseVo> page, @Param("param") MyCourseSearch search);
+
+    //查询学生约课日历
+    List<String> queryCourseScheduleStudent(MyCourseSearch search);
 }
 

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

@@ -50,5 +50,5 @@ public interface CourseScheduleRepliedDao extends BaseMapper<CourseScheduleRepli
 	 * @Author: cy
 	 * @Date: 2022/4/13
 	 */
-	void insertReplied(CourseScheduleReplied replied);
+	void insertReplied(@Param("param") CourseScheduleReplied replied);
 }

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

@@ -37,4 +37,12 @@ public interface MusicAlbumDao extends BaseMapper<MusicAlbum> {
      */
     List<MusicAlbumVo> selectFavoritePage(@Param("page") IPage<MusicAlbumVo> page, @Param(
             "query") StudentMusicAlbumSearch search);
+
+    /**
+     * 查询收藏专辑的收藏数和曲谱数
+     *
+     * @param records 专辑id集合
+     * @return
+     */
+    List<MusicAlbumVo> selectFavoriteNumAndMusicNum(@Param("records") List<MusicAlbumVo> records);
 }

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/PracticeDao.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.PracticeSearch;
+import com.yonge.cooleshow.biz.dal.vo.PracticeVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface PracticeDao {
+    List<PracticeVo> selectTeacherPactice(IPage page, @Param("param") PracticeSearch search);
+
+    List<PracticeVo> selectStudentPactice(IPage<PracticeVo> page, @Param("param") PracticeSearch search);
+}

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

@@ -1,7 +1,10 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
 import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
+import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
+import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -37,5 +40,17 @@ public interface TeacherFreeTimeDao extends BaseMapper<TeacherFreeTime> {
     * @date 2022/3/29 10:02
     */
     void updateDefaultFlag(@Param("defaultFlag") boolean defaultFlag, @Param("teacherId") Long teacherId);
+
+    //根据id删除关联表数据
+    void deleteSubjectPrice(Long id);
+
+    //新增声部价格
+    void insertPrice(List<TeacherSubjectPrice> list);
+
+    //查询老师配置
+    TeacherFreeTimeVo getDetail(PracticeTimesSetting practiceTimesSetting);
+
+    //根据id查声部售价
+    List<TeacherSubjectPrice> getPrice(Long id);
 }
 

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

@@ -36,7 +36,7 @@ public interface UserAccountDao extends BaseMapper<UserAccount>{
 	 * @updateTime 2022/4/7 17:54
 	 * @return: java.lang.Integer
 	 */
-    Integer frozenChangeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") InOrOutEnum inOrOut);
+    Integer frozenChangeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") String inOrOut);
 	/***
 	 * 账户变更(解冻)
 	 * @author liweifan
@@ -45,7 +45,7 @@ public interface UserAccountDao extends BaseMapper<UserAccount>{
 	 * @updateTime 2022/4/7 17:54
 	 * @return: java.lang.Integer
 	 */
-	Integer unfrozenChangeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") InOrOutEnum inOrOut);
+	Integer unfrozenChangeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") String inOrOut);
 	/***
 	 * 账户变更(余额)
 	 * @author liweifan
@@ -54,5 +54,5 @@ public interface UserAccountDao extends BaseMapper<UserAccount>{
 	 * @updateTime 2022/4/7 19:11
 	 * @return: java.lang.Integer
 	 */
-	Integer changeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") InOrOutEnum inOrOut);
+	Integer changeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") String inOrOut);
 }

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

@@ -43,4 +43,12 @@ public interface UserBankCardDao extends BaseMapper<UserBankCard>{
 	 * @return: com.yonge.cooleshow.biz.dal.vo.UserBankCardVo
 	 */
     UserBankCardVo getBankByUserIdAndCardId(@Param("userId") Long userId,@Param("bankCardId")  Long bankCardId);
+	/***
+	 * 删除用户所有银行卡
+	 * @author liweifan
+	 * @param: userId
+	 * @updateTime 2022/4/14 16:36
+	 * @return: java.lang.Integer
+	 */
+    Integer deleteByUserId(@Param("userId") Long userId);
 }

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

@@ -32,6 +32,13 @@ public interface UserOrderDao extends BaseMapper<UserOrder>{
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderVo
 	 */
 	List<UserOrderVo> selectPage(@Param("page") IPage page, @Param("param") OrderSearch order);
+	/**
+	 * 查询集合
+	 * @author liweifan
+	 * @date 2022-03-30 13:53:51
+	 * @return: com.yonge.cooleshow.biz.dal.vo.OrderVo
+	 */
+	List<UserOrderVo> selectList(@Param("param") OrderSearch order);
 	/***
 	 * 查询创建时间超过半小时还在交易中的订单
 	 * @author liweifan

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

@@ -26,5 +26,14 @@ public interface UserWithdrawalDao extends BaseMapper<UserWithdrawal>{
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherWithdrawalVo
 	 */
 	List<UserWithdrawalVo> selectPage(@Param("page") IPage page, @Param("param") TeacherWithdrawalSearch teacherWithdrawal);
+	/***
+	 * 查询集合
+	 * @author liweifan
+	 * @param: teacherWithdrawal
+	 * @updateTime 2022/4/15 18:05
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo>
+	 */
+	List<UserWithdrawalVo> selectList(@Param("param") TeacherWithdrawalSearch teacherWithdrawal);
+
 	
 }

+ 52 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkReviewDto.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Description 老师作业点评
+ *
+ * @author liujunchi
+ * @date 2022-04-14
+ */
+@ApiModel("老师作业点评")
+public class CourseHomeworkReviewDto {
+
+    @ApiModelProperty(value = "课程ID",required = true)
+    @NotNull(message = "课程ID不能为空 ")
+    private Long courseScheduleId;
+
+    @ApiModelProperty(value = "点评信息",required = true)
+    @NotBlank(message = "点评信息不能为空")
+    private String review;
+
+    @ApiModelProperty(value = "老师id",hidden = true)
+    private Long teacherId;
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public String getReview() {
+        return review;
+    }
+
+    public void setReview(String review) {
+        this.review = review;
+    }
+}

+ 86 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkSaveDto.java

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Description 布置作业
+ *
+ * @author liujunchi
+ * @date 2022-04-14
+ */
+@ApiModel("布置作业信息")
+public class CourseHomeworkSaveDto {
+
+    @ApiModelProperty(value = "课后作业id",hidden = true)
+    private Long courseHomeworkId;
+
+    @ApiModelProperty(value = "课程编号",required = true)
+    @NotNull(message = "课程编号不能为空 ")
+    private Long courseScheduleId;
+
+    @ApiModelProperty(value = "作业标题",required = true)
+    @NotBlank(message = "作业标题不能为空 ")
+    private String title;
+
+    @ApiModelProperty(value = "作业内容",required = true)
+    @NotBlank(message = "作业内容不能为空 ")
+    private String content;
+
+    @ApiModelProperty("作业附件地址(多个用逗号分隔)")
+    private String attachments;
+
+    @ApiModelProperty(value = "老师id",hidden = true)
+    private Long teacherId;
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getAttachments() {
+        return attachments;
+    }
+
+    public void setAttachments(String attachments) {
+        this.attachments = attachments;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Long getCourseHomeworkId() {
+        return courseHomeworkId;
+    }
+
+    public void setCourseHomeworkId(Long courseHomeworkId) {
+        this.courseHomeworkId = courseHomeworkId;
+    }
+}

+ 52 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkSubmitDto.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Description 学生提交作业
+ *
+ * @author liujunchi
+ * @date 2022-04-14
+ */
+@ApiModel("学生提交作业")
+public class CourseHomeworkSubmitDto {
+
+    @ApiModelProperty(value = "课程ID",required = true)
+    @NotNull(message = "课程ID不能为空 ")
+    private Long courseScheduleId;
+
+    @ApiModelProperty(value = "提交信息",required = true)
+    @NotBlank(message = "提交信息不能为空")
+    private String submit;
+
+    @ApiModelProperty(value = "学生id",hidden = true)
+    private Long studentId;
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public String getSubmit() {
+        return submit;
+    }
+
+    public void setSubmit(String submit) {
+        this.submit = submit;
+    }
+}

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

@@ -15,6 +15,17 @@ public class PracticeTimesSetting {
     @ApiModelProperty(value = "单课时分钟数")
     private Integer courseMinutes;
 
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
     public Integer getFreeMinutes() {
         return freeMinutes;
     }

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserBankCardDto.java

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.UserBankCard;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/14 16:10
+ */
+@ApiModel(value = "UserBankCardDto对象", description = "银行卡绑卡数据传输对象")
+public class UserBankCardDto extends UserBankCard {
+
+    @ApiModelProperty(value = "身份证号码")
+    @NotBlank(message = "身份证号码不能为空")
+    private String idCardNo;
+
+    public String getIdCardNo() {
+        return idCardNo;
+    }
+
+    public void setIdCardNo(String idCardNo) {
+        this.idCardNo = idCardNo;
+    }
+}

+ 137 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/excel/UserOrderExport.java

@@ -0,0 +1,137 @@
+package com.yonge.cooleshow.biz.dal.dto.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.yonge.cooleshow.biz.dal.convert.OrderStatusConvert;
+import com.yonge.cooleshow.biz.dal.convert.OrderTypeConvert;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/15 17:32
+ */
+public class UserOrderExport {
+    @ExcelProperty(value = "交易流水号", index = 0)
+    private String transNo;
+    @ExcelProperty(value = "订单号", index = 1)
+    private String orderNo;
+    @ExcelProperty(value = "订单时间", index = 2)
+    private Date createTime;
+    @ExcelProperty(value = "用户编号", index = 3)
+    private Long userId;
+    @ExcelProperty(value = "用户姓名", index = 4)
+    private String username;
+    @ExcelProperty(value = "手机号码", index = 5)
+    private String phone;
+    @ExcelProperty(value = "交易类型", index = 6, converter = OrderTypeConvert.class)
+    private OrderTypeEnum orderType;
+    @ExcelProperty(value = "订单金额", index = 7)
+    private BigDecimal actualPrice;
+    @ExcelProperty(value = "服务费", index = 8)
+    private BigDecimal plantformFee;
+    @ExcelProperty(value = "手续费", index = 9)
+    private BigDecimal feeAmt;
+    @ExcelProperty(value = "交易状态", index = 10, converter = OrderStatusConvert.class)
+    private OrderStatusEnum status;
+    @ExcelProperty(value = "备注", index = 11)
+    private String userNote;
+
+    public String getTransNo() {
+        return transNo;
+    }
+
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public OrderTypeEnum getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(OrderTypeEnum orderType) {
+        this.orderType = orderType;
+    }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+
+    public BigDecimal getPlantformFee() {
+        return plantformFee;
+    }
+
+    public void setPlantformFee(BigDecimal plantformFee) {
+        this.plantformFee = plantformFee;
+    }
+
+    public BigDecimal getFeeAmt() {
+        return feeAmt;
+    }
+
+    public void setFeeAmt(BigDecimal feeAmt) {
+        this.feeAmt = feeAmt;
+    }
+
+    public OrderStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(OrderStatusEnum status) {
+        this.status = status;
+    }
+
+    public String getUserNote() {
+        return userNote;
+    }
+
+    public void setUserNote(String userNote) {
+        this.userNote = userNote;
+    }
+}

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

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.biz.dal.dto.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/15 18:01
+ */
+public class UserWithdrawalExport {
+    @ExcelProperty(value = "提现编号", index = 0)
+    private Long id;
+    @ExcelProperty(value = "提现人", index = 1)
+    private String	withdrawaUser;
+    @ExcelProperty(value = "提现金额", index = 2)
+    private BigDecimal amount;
+    @ExcelProperty(value = "发起时间", index = 3)
+    private Date createTime;
+    @ExcelProperty(value = "开户行", index = 4)
+    private String bankName;
+    @ExcelProperty(value = "银行卡号", index = 5)
+    private String bankCard;
+    @ExcelProperty(value = "转账金额", index = 6)
+    private BigDecimal actualAmount;
+    @ExcelProperty(value = "银行流水号", index = 7)
+    private String bankFlowNo;
+    @ExcelProperty(value = "提现状态 DOING、审核中 PASS、通过 UNPASS、不通过")
+    private AuthStatusEnum status;
+
+}

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

@@ -30,6 +30,8 @@ public class OrderReq {
     private String userNote;
     @ApiModelProperty(value = "业务内容 订单业务内容json")
     private String bizContent;
+    @ApiModelProperty(value = "优惠券id")
+    private Long couponId;
 
     public Long getUserId() {
         return userId;
@@ -78,4 +80,12 @@ public class OrderReq {
     public void setUserNote(String userNote) {
         this.userNote = userNote;
     }
+
+    public Long getCouponId() {
+        return couponId;
+    }
+
+    public void setCouponId(Long couponId) {
+        this.couponId = couponId;
+    }
 }

+ 89 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkSearch.java

@@ -1,10 +1,14 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * Description 课后作业查询条件
@@ -15,18 +19,51 @@ import io.swagger.annotations.ApiModelProperty;
 @ApiModel("课后作业查询条件")
 public class HomeworkSearch extends QueryInfo {
 
-    @ApiModelProperty("老师id")
+    @ApiModelProperty(value = "老师id",hidden = true)
     private Long teacherId;
 
-    @ApiModelProperty("课程类型: PRACTICE 陪练课; LIVE 直播课")
+    @ApiModelProperty(value = "课程类型: PRACTICE 陪练课; LIVE 直播课",hidden = true)
     private CourseScheduleEnum courseType;
 
-    @ApiModelProperty("课程状态: NOT_START:未开始; ING:进行中; COMPLETE:已完成; CANCEL:已取消")
+    @ApiModelProperty(value = "课程状态: NOT_START:未开始; ING:进行中; COMPLETE:已完成; CANCEL:已取消",hidden = true)
     private CourseScheduleEnum courseStatus;
 
-    @ApiModelProperty("布置作业 0:否,1:是")
+    @ApiModelProperty("布置作业状态 0:否,1:是")
     private YesOrNoEnum decorate;
 
+    @ApiModelProperty("提交作业状态 0:否,1:是")
+    private YesOrNoEnum submit;
+
+    @ApiModelProperty(value = "课程编号ID",hidden = true)
+    private Long courseScheduleId;
+
+    @ApiModelProperty(value = "年月 格式:yyyy-MM",required = true)
+    private String date;
+
+    @ApiModelProperty(value = "学生编号",hidden = true)
+    private Long studentId;
+
+    @ApiModelProperty("布置老师、学生,名称/手机号/编号")
+    private String search;
+
+    @ApiModelProperty("布置开始时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty("布置结束时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
     public Long getTeacherId() {
         return teacherId;
     }
@@ -58,4 +95,52 @@ public class HomeworkSearch extends QueryInfo {
     public void setDecorate(YesOrNoEnum decorate) {
         this.decorate = decorate;
     }
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+
+    public YesOrNoEnum getSubmit() {
+        return submit;
+    }
+
+    public void setSubmit(YesOrNoEnum submit) {
+        this.submit = submit;
+    }
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getSearch() {
+        return search;
+    }
+
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
 }

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

@@ -1,7 +1,14 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * @Author: liweifan
@@ -11,4 +18,78 @@ import io.swagger.annotations.ApiModel;
 public class OrderSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("交易流水号/订单号")
+	private String searchNo;
+	@ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
+	private OrderTypeEnum orderType;
+	@ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 ")
+	private OrderStatusEnum 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;
+	@ApiModelProperty(value = "交易结束时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date endTime;
+	@ApiModelProperty("买家id")
+	private Long userId;
+	@ApiModelProperty("卖家id")
+	private Long merchId;
+
+	public String getSearchNo() {
+		return searchNo;
+	}
+
+	public void setSearchNo(String searchNo) {
+		this.searchNo = searchNo;
+	}
+
+	public OrderTypeEnum getOrderType() {
+		return orderType;
+	}
+
+	public void setOrderType(OrderTypeEnum orderType) {
+		this.orderType = orderType;
+	}
+
+	public OrderStatusEnum getStatus() {
+		return status;
+	}
+
+	public void setStatus(OrderStatusEnum status) {
+		this.status = status;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public Long getMerchId() {
+		return merchId;
+	}
+
+	public void setMerchId(Long merchId) {
+		this.merchId = merchId;
+	}
 }

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

@@ -0,0 +1,110 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/14
+ */
+@ApiModel(value = "PracticeSearch")
+public class PracticeSearch extends QueryInfo {
+    @ApiModelProperty(value = "老师id")
+    private Long teacherId;
+
+    @ApiModelProperty(value = "学生id")
+    private Long studentId;
+
+    @ApiModelProperty(value = "课程编号/用户编号/用户姓名/用户手机")
+    private String search;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty("课程声部id")
+    private Long subjectId;
+
+    @ApiModelProperty(value = "课程状态")
+    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;
+
+    @ApiModelProperty(value = "结束时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public Long getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Long subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+}

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

@@ -1,7 +1,13 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * @Author: liweifan
@@ -11,4 +17,48 @@ import io.swagger.annotations.ApiModel;
 public class TeacherWithdrawalSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("银行(交易)流水号 ")
+	private String bankFlowNo;
+	@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;
+	@ApiModelProperty(value = "申请结束时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date endTime;
+
+	public String getBankFlowNo() {
+		return bankFlowNo;
+	}
+
+	public void setBankFlowNo(String bankFlowNo) {
+		this.bankFlowNo = bankFlowNo;
+	}
+
+	public AuthStatusEnum getStatus() {
+		return status;
+	}
+
+	public void setStatus(AuthStatusEnum status) {
+		this.status = status;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
 }

+ 139 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherSubjectPrice.java

@@ -0,0 +1,139 @@
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/15
+ */
+@ApiModel(value = "teacher_subject_price-老师声部价格")
+public class TeacherSubjectPrice implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @TableId("teacher_free_time_id")
+    @ApiModelProperty(value = "排课时间表id")
+    private Long teacherFreeTimeId;
+
+    @TableField("teacher_id_")
+    @ApiModelProperty(value = "老师id")
+    private Long teacherId;
+
+    @TableField("free_minutes_")
+    @ApiModelProperty(value = "课间休息时长(分钟)")
+    private Integer freeMinutes;
+
+    @TableField("course_minutes_")
+    @ApiModelProperty(value = "单课时长(分钟)")
+    private Integer courseMinutes;
+
+    @TableField("subject_id_")
+    @ApiModelProperty(value = "声部id")
+    private Long subjectId;
+
+    @TableField("subject_name_")
+    @ApiModelProperty(value = "声部名称")
+    private String subjectName;
+
+    @TableField("subject_price_")
+    @ApiModelProperty(value = "声部价格")
+    private BigDecimal subjectPrice;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    public Long getTeacherFreeTimeId() {
+        return teacherFreeTimeId;
+    }
+
+    public void setTeacherFreeTimeId(Long teacherFreeTimeId) {
+        this.teacherFreeTimeId = teacherFreeTimeId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Integer getFreeMinutes() {
+        return freeMinutes;
+    }
+
+    public void setFreeMinutes(Integer freeMinutes) {
+        this.freeMinutes = freeMinutes;
+    }
+
+    public Integer getCourseMinutes() {
+        return courseMinutes;
+    }
+
+    public void setCourseMinutes(Integer courseMinutes) {
+        this.courseMinutes = courseMinutes;
+    }
+
+    public Long getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Long subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public BigDecimal getSubjectPrice() {
+        return subjectPrice;
+    }
+
+    public void setSubjectPrice(BigDecimal subjectPrice) {
+        this.subjectPrice = subjectPrice;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}
+

+ 6 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccount.java

@@ -21,27 +21,27 @@ import java.math.BigDecimal;
 public class UserAccount implements Serializable {
 	private static final long serialVersionUID = 1L;
     @ApiModelProperty("用户表id ")
-    @TableId(value = "user_id_", type = IdType.AUTO)
+    @TableId(value = "user_id_")
     private Long userId;
     @ApiModelProperty("总金额 ")
-	@TableField(value = "amount_total")
+	@TableField(value = "amount_total_")
     private BigDecimal amountTotal;
     @ApiModelProperty("可用余额 ")
-	@TableField(value = "amount_usable")
+	@TableField(value = "amount_usable_")
     private BigDecimal amountUsable;
     @ApiModelProperty("冻结金额 ")
-	@TableField(value = "amount_frozen")
+	@TableField(value = "amount_frozen_")
     private BigDecimal amountFrozen;
     @ApiModelProperty("状态 0-停用 1-使用 ")
 	@TableField(value = "status_")
     private Byte status;
     @ApiModelProperty("创建时间 ")
-	@TableField(value = "create_time")
+	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
     @ApiModelProperty("修改时间 ")
-	@TableField(value = "update_time")
+	@TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;

+ 49 - 18
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserBankCard.java

@@ -9,6 +9,8 @@ import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
+
 /**
  * 用户绑卡记录表
  */
@@ -24,22 +26,25 @@ public class UserBankCard implements Serializable {
     private Long userId;
     @ApiModelProperty("持卡人姓名 ")
 	@TableField(value = "name_")
+    @NotBlank(message = "持卡人姓名不能为空")
     private String name;
-    @ApiModelProperty("开户行 ")
-	@TableField(value = "bank_name_")
-    private String bankName;
     @ApiModelProperty("银行卡号 ")
 	@TableField(value = "bank_card_")
+    @NotBlank(message = "银行卡号不能为空")
     private String bankCard;
     @ApiModelProperty("银行预留手机号 ")
 	@TableField(value = "phone_")
+    @NotBlank(message = "银行预留手机号不能为空")
     private String phone;
     @ApiModelProperty("开户行编码 ")
 	@TableField(value = "bank_code_")
     private String bankCode;
+    @ApiModelProperty("开户行 ")
+    @TableField(value = "bank_name_")
+    private String bankName;
     @ApiModelProperty("是否默认 ")
-	@TableField(value = "is_default_")
-    private Byte isDefault;
+	@TableField(value = "default_flag_")
+    private Boolean defaultFlag;
     @ApiModelProperty("创建时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -53,7 +58,7 @@ public class UserBankCard implements Serializable {
     @ApiModelProperty("逻辑删除 ")
     @TableField(value = "del_flag_")
     @TableLogic
-    private Byte delFlag;
+    private Boolean delFlag;
 	public Long getId() {
         return id;
     }
@@ -109,24 +114,24 @@ public class UserBankCard implements Serializable {
     public void setBankCode(String bankCode) {
         this.bankCode = bankCode;
     }
-    
-	public Byte getDelFlag() {
-        return delFlag;
+
+    public Boolean getDefaultFlag() {
+        return defaultFlag;
     }
 
-    public void setDelFlag(Byte delFlag) {
-        this.delFlag = delFlag;
+    public void setDefaultFlag(Boolean defaultFlag) {
+        this.defaultFlag = defaultFlag;
     }
-    
-	public Byte getIsDefault() {
-        return isDefault;
+
+    public Boolean getDelFlag() {
+        return delFlag;
     }
 
-    public void setIsDefault(Byte isDefault) {
-        this.isDefault = isDefault;
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
     }
-    
-	public Date getCreateTime() {
+
+    public Date getCreateTime() {
         return createTime;
     }
 
@@ -141,5 +146,31 @@ public class UserBankCard implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+/**
+ 工商银行   ICBC
+ 建设银行   CCB
+ 邮政储蓄银行   PSBC
+ 中国银行   BOC
+ 农业银行   ABC
+ 通银行   BC
+ 招商银行   CMB
+汇丰银行   HSBC
+交
+中国民生银行   CMB
+上海浦东发展银行   SPDB
+中信银行   无英文简写
+中国光大银行   CEB
+华夏银行   HB
+广东发展银行   GDB
+深圳发展银行   SDB
+兴业银行   CIB
+国家开发银行   CDB
+中国进出口银行   EIBC
+中国农业发展银行   ADBC
+北京银行   BOB
+中国人民银行   PBC
+
+ */
+
     
 }

+ 57 - 56
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java

@@ -6,14 +6,15 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
 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;
+
 import java.math.BigDecimal;
 
 /**
@@ -22,83 +23,83 @@ import java.math.BigDecimal;
 @TableName("user_order")
 @ApiModel(value = "UserOrder对象", description = "平台订单表")
 public class UserOrder implements Serializable {
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
     @ApiModelProperty("订单号 ")
-	@TableField(value = "order_no_")
+    @TableField(value = "order_no_")
     private String orderNo;
     @ApiModelProperty("买家id ")
-	@TableField(value = "user_id_")
+    @TableField(value = "user_id_")
     private Long userId;
     @ApiModelProperty("卖家id ")
-	@TableField(value = "merch_id_")
+    @TableField(value = "merch_id_")
     private Long merchId;
     @ApiModelProperty("订单名称 ")
-	@TableField(value = "order_name_")
+    @TableField(value = "order_name_")
     private String orderName;
     @ApiModelProperty("订单描述信息 ")
-	@TableField(value = "order_desc_")
+    @TableField(value = "order_desc_")
     private String orderDesc;
     @ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 ")
-	@TableField(value = "status_")
+    @TableField(value = "status_")
     private OrderStatusEnum status;
     @ApiModelProperty("原价 ")
-	@TableField(value = "original_price_")
+    @TableField(value = "original_price_")
     private BigDecimal originalPrice;
     @ApiModelProperty("预计价格 ")
-	@TableField(value = "expect_price_")
+    @TableField(value = "expect_price_")
     private BigDecimal expectPrice;
     @ApiModelProperty("实际价格 ")
-	@TableField(value = "actual_price_")
+    @TableField(value = "actual_price_")
     private BigDecimal actualPrice;
     @ApiModelProperty("优惠金额 ")
-	@TableField(value = "coupon_amount_")
+    @TableField(value = "coupon_amount_")
     private BigDecimal couponAmount;
     @ApiModelProperty("平台服务费 ")
-	@TableField(value = "plantform_fee_")
+    @TableField(value = "plantform_fee_")
     private BigDecimal plantformFee;
     @ApiModelProperty("平台服务费比例% ")
-	@TableField(value = "plantform_fee_rate_")
+    @TableField(value = "plantform_fee_rate_")
     private BigDecimal plantformFeeRate;
     @ApiModelProperty("退款金额 ")
-	@TableField(value = "refund_amount_")
+    @TableField(value = "refund_amount_")
     private BigDecimal refundAmount;
     @ApiModelProperty("用户备注 ")
-	@TableField(value = "user_note_")
+    @TableField(value = "user_note_")
     private String userNote;
     @ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
-	@TableField(value = "order_type_")
+    @TableField(value = "order_type_")
     private OrderTypeEnum orderType;
     @ApiModelProperty("下单时间 ")
-	@TableField(value = "create_time_")
+    @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     @ApiModelProperty("支付时间 ")
-	@TableField(value = "pay_time_")
+    @TableField(value = "pay_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date payTime;
     @ApiModelProperty("退款时间 ")
-	@TableField(value = "refund_time_")
+    @TableField(value = "refund_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date refundTime;
-	@TableField(value = "update_time_")
+    @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
-	public Long getId() {
+    public Long getId() {
         return id;
     }
 
     public void setId(Long id) {
         this.id = id;
     }
-    
-	public String getOrderNo() {
+
+    public String getOrderNo() {
         return orderNo;
     }
 
@@ -121,112 +122,112 @@ public class UserOrder implements Serializable {
     public void setMerchId(Long merchId) {
         this.merchId = merchId;
     }
-    
-	public String getOrderName() {
+
+    public String getOrderName() {
         return orderName;
     }
 
     public void setOrderName(String orderName) {
         this.orderName = orderName;
     }
-    
-	public String getOrderDesc() {
+
+    public String getOrderDesc() {
         return orderDesc;
     }
 
     public void setOrderDesc(String orderDesc) {
         this.orderDesc = orderDesc;
     }
-    
-	public BigDecimal getOriginalPrice() {
+
+    public BigDecimal getOriginalPrice() {
         return originalPrice;
     }
 
     public void setOriginalPrice(BigDecimal originalPrice) {
         this.originalPrice = originalPrice;
     }
-    
-	public BigDecimal getExpectPrice() {
+
+    public BigDecimal getExpectPrice() {
         return expectPrice;
     }
 
     public void setExpectPrice(BigDecimal expectPrice) {
         this.expectPrice = expectPrice;
     }
-    
-	public BigDecimal getActualPrice() {
+
+    public BigDecimal getActualPrice() {
         return actualPrice;
     }
 
     public void setActualPrice(BigDecimal actualPrice) {
         this.actualPrice = actualPrice;
     }
-    
-	public BigDecimal getCouponAmount() {
+
+    public BigDecimal getCouponAmount() {
         return couponAmount;
     }
 
     public void setCouponAmount(BigDecimal couponAmount) {
         this.couponAmount = couponAmount;
     }
-    
-	public BigDecimal getPlantformFee() {
+
+    public BigDecimal getPlantformFee() {
         return plantformFee;
     }
 
     public void setPlantformFee(BigDecimal plantformFee) {
         this.plantformFee = plantformFee;
     }
-    
-	public BigDecimal getPlantformFeeRate() {
+
+    public BigDecimal getPlantformFeeRate() {
         return plantformFeeRate;
     }
 
     public void setPlantformFeeRate(BigDecimal plantformFeeRate) {
         this.plantformFeeRate = plantformFeeRate;
     }
-    
-	public BigDecimal getRefundAmount() {
+
+    public BigDecimal getRefundAmount() {
         return refundAmount;
     }
 
     public void setRefundAmount(BigDecimal refundAmount) {
         this.refundAmount = refundAmount;
     }
-    
-	public String getUserNote() {
+
+    public String getUserNote() {
         return userNote;
     }
 
     public void setUserNote(String userNote) {
         this.userNote = userNote;
     }
-    
-	public Date getCreateTime() {
+
+    public Date getCreateTime() {
         return createTime;
     }
 
     public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    
-	public Date getPayTime() {
+
+    public Date getPayTime() {
         return payTime;
     }
 
     public void setPayTime(Date payTime) {
         this.payTime = payTime;
     }
-    
-	public Date getRefundTime() {
+
+    public Date getRefundTime() {
         return refundTime;
     }
 
     public void setRefundTime(Date refundTime) {
         this.refundTime = refundTime;
     }
-    
-	public Date getUpdateTime() {
+
+    public Date getUpdateTime() {
         return updateTime;
     }
 

+ 25 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -30,6 +31,12 @@ public class UserOrderDetail implements Serializable {
     @ApiModelProperty("业务内容 ")
 	@TableField(value = "biz_content_")
     private String bizContent;
+    @ApiModelProperty("商品数量 ")
+    @TableField(value = "good_num_")
+    private Integer goodNum;
+    @ApiModelProperty("商品单价 ")
+    @TableField(value = "good_price_")
+    private BigDecimal goodPrice;
     @ApiModelProperty("下单时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -71,8 +78,24 @@ public class UserOrderDetail implements Serializable {
     public void setBizContent(String bizContent) {
         this.bizContent = bizContent;
     }
-    
-	public Date getCreateTime() {
+
+    public Integer getGoodNum() {
+        return goodNum;
+    }
+
+    public void setGoodNum(Integer goodNum) {
+        this.goodNum = goodNum;
+    }
+
+    public BigDecimal getGoodPrice() {
+        return goodPrice;
+    }
+
+    public void setGoodPrice(BigDecimal goodPrice) {
+        this.goodPrice = goodPrice;
+    }
+
+    public Date getCreateTime() {
         return createTime;
     }
 

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java

@@ -36,6 +36,9 @@ public class UserOrderPayment implements Serializable {
     @ApiModelProperty("交易金额,必须大于0,保留两位小数点,如0.10、100.05等 ")
 	@TableField(value = "pay_amt_")
     private BigDecimal payAmt;
+    @ApiModelProperty("汇付收取的服务费 ")
+    @TableField(value = "fee_amt_")
+    private BigDecimal feeAmt;
     @ApiModelProperty("支付详情信息(用于拉起支付) ")
 	@TableField(value = "pay_info_")
     private String payInfo;
@@ -138,4 +141,12 @@ public class UserOrderPayment implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public BigDecimal getFeeAmt() {
+        return feeAmt;
+    }
+
+    public void setFeeAmt(BigDecimal feeAmt) {
+        this.feeAmt = feeAmt;
+    }
 }

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

@@ -47,7 +47,7 @@ public class UserWithdrawal implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date transferTime;
-    @ApiModelProperty("提现状态 DOING、审核中 PASS、通过 UNPASS、不通过")
+    @ApiModelProperty("提现状态 DOING、提现中 PASS、成功 UNPASS、失败")
     @TableField(value = "status_")
     private AuthStatusEnum status;
     @ApiModelProperty("审核人")

+ 5 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java

@@ -1,5 +1,8 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -7,7 +10,7 @@ import java.util.stream.Collectors;
 /**
  * 课程类型
  */
-public enum CourseScheduleEnum {
+public enum CourseScheduleEnum implements BaseEnum<String,CourseScheduleEnum> {
     //课程类型
     PRACTICE("PRACTICE", "陪练课"),
     LIVE("LIVE", "直播课"),
@@ -17,6 +20,7 @@ public enum CourseScheduleEnum {
     COMPLETE("COMPLETE", "已完成"),
     CANCEL("CANCEL", "已取消");
 
+    @EnumValue
     private String code;
 
     private String msg;

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/InOrOutEnum.java

@@ -12,6 +12,7 @@ public enum InOrOutEnum implements BaseEnum<String, InOrOutEnum> {
 
     IN("收入"),
     OUT("支出");
+
     @EnumValue
     private String code;
     private String msg;

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java

@@ -40,4 +40,5 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     public String getCode() {
         return this.code;
     }
+
 }

+ 50 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseHomeworkService.java

@@ -2,9 +2,13 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
-import com.yonge.cooleshow.biz.dal.dto.search.CourseHomeworkSearch;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkReviewDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSaveDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSubmitDto;
+import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 
 /**
  * 课程作业表 服务类
@@ -22,8 +26,49 @@ public interface CourseHomeworkService extends IService<CourseHomework>  {
 
     /**
      * 分页查询
-     * @author liweifan
- 	 * @date 2022-03-30
      */
-    IPage<CourseHomeworkVo> selectPage(IPage<CourseHomeworkVo> page, CourseHomeworkSearch query);
+    IPage<CourseHomeworkVo> selectPage(IPage<CourseHomeworkVo> page, HomeworkSearch query);
+
+	/**
+	 * 课程详情 课后作业信息
+	 *
+	 * @param courseId 课程id
+	 * @return 课后作业信息
+	 */
+	CourseHomeworkDetailVo getCourseHomeworkDetailByCourseId(Long courseId);
+
+	/**
+	 * 老师布置作业
+	 *
+	 * @param saveDto 作业信息
+	 * @return boolean
+	 */
+    boolean decorateCourseHomework(CourseHomeworkSaveDto saveDto);
+
+	/**
+	 * 老师点评学生课后作业
+	 *
+	 * @param reviewDto 点评信息
+	 * @return boolean
+	 */
+    boolean reviewCourseHomework(CourseHomeworkReviewDto reviewDto);
+
+	/**
+	 * 学生提交课程作业
+	 *
+	 * @param submitDto 学生提交信息
+	 * @return boolean
+	 */
+	boolean submitCourseHomework(CourseHomeworkSubmitDto submitDto);
+
+	/**
+	 * 分页查询
+	 *
+	 * @param page 分页信息
+	 * @param query 查询
+	 * @return
+	 */
+	IPage<CourseHomeworkVo>  selectAdminPage(IPage<CourseHomeworkVo> page, HomeworkSearch query);
+
+
 }

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

@@ -137,7 +137,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
 
     /**
      * 老师未布置的课程作业数量
-     * 陪练课 课程状态为完成,有学生考勤记录 没有学生课程记录
+     * 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
      *
      * @param homeworkSearch 查询信息
      * @return number
@@ -148,5 +148,24 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
 
     IPage<MyCourseVo> queryStudentPracticeCourse(IPage<MyCourseVo> page, MyCourseSearch search);
 
+    /**
+     * 检查课程是否属于老师
+     *
+     * @param teacherId 老师id
+     * @param courseId 课程id
+     * @return boolean true 属于老师
+     */
+    boolean checkTeacherCourseSchedule(Long teacherId, Long courseId);
+
+    List<String> queryCourseScheduleStudent(MyCourseSearch search);
+
+    /**
+     * 检查学生是否购买课程
+     *
+     * @param studentId 学生id
+     * @param courseId 课程id
+     * @return boolean true 购买
+     */
+    boolean checkStudentCourseSchedule(Long studentId, Long courseId);
 }
 

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentPaymentService.java

@@ -24,5 +24,13 @@ public interface CourseScheduleStudentPaymentService extends IService<CourseSche
      * @param groupId 课程组id
      */
     List<LiveCourseInfoVo.CourseBuyStudentVo> queryStudentInfoByGroupId(@Param("groupId") Long groupId);
+
+    /**
+     * 根据陪练课 课程id查看购买记录
+     *
+     * @param courseId 课程id
+     * @return 购买记录
+     */
+    CourseScheduleStudentPayment getByCourseId(Long courseId);
 }
 

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/PracticeService.java

@@ -0,0 +1,11 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.PracticeSearch;
+import com.yonge.cooleshow.biz.dal.vo.PracticeVo;
+
+public interface PracticeService {
+    IPage<PracticeVo> selectTeacherPactice(IPage<PracticeVo> page, PracticeSearch search);
+
+    IPage<PracticeVo> selectStudentPactice(IPage<PracticeVo> page, PracticeSearch search);
+}

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentAttendanceService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.vo.StudentAttendanceVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentAttendanceSearch;
 import com.yonge.cooleshow.biz.dal.entity.StudentAttendance;
@@ -26,4 +27,13 @@ public interface StudentAttendanceService extends IService<StudentAttendance>  {
  	 * @date 2022-03-30
      */
     IPage<StudentAttendanceVo> selectPage(IPage<StudentAttendanceVo> page, StudentAttendanceSearch query);
+
+	/**
+	 * 获取学生考勤信息
+	 *
+	 * @param courseType 课程类型 PRACTICE:陪练课、LIVE:直播课
+	 * @param courseScheduleId 课程id
+	 * @return 考勤对象
+	 */
+    StudentAttendance getByCourseTypeAndScheduleId(CourseScheduleEnum courseType, Long courseScheduleId);
 }

+ 19 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentCourseHomeworkService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentCourseHomeworkVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentCourseHomeworkSearch;
 import com.yonge.cooleshow.biz.dal.entity.StudentCourseHomework;
@@ -26,4 +27,22 @@ public interface StudentCourseHomeworkService extends IService<StudentCourseHome
  	 * @date 2022-03-30
      */
     IPage<StudentCourseHomeworkVo> selectPage(IPage<StudentCourseHomeworkVo> page, StudentCourseHomeworkSearch query);
+
+	/**
+	 *  老师点评
+	 *
+	 * @param studentHomeworkId 学生作业id
+	 * @param review 点评信息
+	 * @return boolean
+	 */
+    boolean reviewCourseHome(Long studentHomeworkId, String review);
+
+	/**
+	 * 学生提交作业
+	 *
+	 * @param courseHomeworkDetailVo 课程作业信息
+	 * @param submit 提交信息
+	 * @return boolean
+	 */
+	boolean submitCourseHome(CourseHomeworkDetailVo courseHomeworkDetailVo, String submit, Long studentId);
 }

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

@@ -2,7 +2,9 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.TeacherFreeTimeDao;
+import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
 import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
+import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 
 /**
  * 老师可排课时间表(TeacherFreeTime)表服务接口
@@ -22,5 +24,7 @@ public interface TeacherFreeTimeService extends IService<TeacherFreeTime> {
     * @date 2022/3/25 10:18
     */
     void upSet(TeacherFreeTime teacherFreeTime);
+
+    TeacherFreeTimeVo getDetail(PracticeTimesSetting practiceTimesSetting);
 }
 

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserBankCardService.java

@@ -2,9 +2,11 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dto.UserBankCardDto;
 import com.yonge.cooleshow.biz.dal.vo.UserBankCardVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserBankCardSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserBankCard;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 /**
  * 用户绑卡记录表 服务类
@@ -26,4 +28,12 @@ public interface UserBankCardService extends IService<UserBankCard>  {
  	 * @date 2022-03-30
      */
     IPage<UserBankCardVo> selectPage(IPage<UserBankCardVo> page, UserBankCardSearch query);
+	/***
+	 * 用户绑卡
+	 * @author liweifan
+	 * @param: bankCard
+	 * @updateTime 2022/4/14 15:53
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.entity.UserBankCard>
+	 */
+    HttpResponseResult<UserBankCard> bankCard(UserBankCardDto bankCard);
 }

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

@@ -10,6 +10,8 @@ import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
+import java.util.List;
+
 /**
  * 平台订单表 服务类
  * @author liweifan
@@ -36,6 +38,15 @@ public interface UserOrderService extends IService<UserOrder>  {
      */
     IPage<UserOrderVo> selectPage(IPage<UserOrderVo> page, OrderSearch query);
 	/***
+	 * 查询集合
+	 * @author liweifan
+	 * @param: query
+	 * @updateTime 2022/4/15 15:05
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.UserOrderVo>
+	 */
+	List<UserOrderVo> selectList(OrderSearch query);
+
+	/***
 	 * 下单接口
 	 * @author liweifan
 	 * @param: orderReq

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java

@@ -9,6 +9,8 @@ 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 java.util.List;
+
 /**
  * 用户账户提现表 服务类
  * @author liweifan
@@ -29,6 +31,14 @@ public interface UserWithdrawalService extends IService<UserWithdrawal>  {
  	 * @date 2022-03-30
      */
     IPage<UserWithdrawalVo> selectPage(IPage<UserWithdrawalVo> page, TeacherWithdrawalSearch query);
+    /***
+     * 查询集合
+     * @author liweifan
+     * @param: query
+     * @updateTime 2022/4/15 18:04
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo>
+     */
+	List<UserWithdrawalVo> selectList(TeacherWithdrawalSearch query);
 	/***
 	 * 查询提现页面信息
 	 * @author liweifan
@@ -46,4 +56,6 @@ public interface UserWithdrawalService extends IService<UserWithdrawal>  {
 	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
 	 */
 	HttpResponseResult<Boolean> withdrawal(Long userId, WithdrawalReq withdrawalReq);
+
+
 }

+ 220 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java

@@ -2,26 +2,238 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
-import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
-import com.yonge.cooleshow.biz.dal.dto.search.CourseHomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dao.CourseHomeworkDao;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkReviewDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSaveDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSubmitDto;
+import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
+import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.service.StudentAttendanceService;
+import com.yonge.cooleshow.biz.dal.service.StudentCourseHomeworkService;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
+import com.yonge.cooleshow.common.exception.BizException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Service
 public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, CourseHomework> implements CourseHomeworkService {
 
+    @Autowired
+    @Lazy
+    private CourseScheduleService courseScheduleService;
+
+    @Autowired
+    private StudentAttendanceService studentAttendanceService;
+
+    @Autowired
+    private StudentCourseHomeworkService studentCourseHomeworkService;
+
 	@Override
     public CourseHomeworkVo detail(Long id) {
         CourseHomeworkVo detail = baseMapper.detail(id);
         return detail;
     }
     
-     @Override
-    public IPage<CourseHomeworkVo> selectPage(IPage<CourseHomeworkVo> page, CourseHomeworkSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
+    @Override
+    public IPage<CourseHomeworkVo> selectPage(IPage<CourseHomeworkVo> page, HomeworkSearch query){
+        IPage<CourseHomeworkVo> courseHomeworkVoIPage = page.setRecords(baseMapper.selectPage(page, query));
+        List<CourseHomeworkVo> records = courseHomeworkVoIPage.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return courseHomeworkVoIPage;
+        }
+        // 学生信息
+        List<CourseHomeworkVo> studentInfoList = baseMapper.selectStudentInfo(records);
+
+        // 旷课状态 和老师信息
+        List<CourseHomeworkVo> teacherInfoList = baseMapper.selectTeacherInfo(records);
+
+        // 声部信息
+        List<CourseHomeworkVo> subjectList = baseMapper.selectSubjectInfoList(records);
+        for (int i = 0; i < records.size(); i++) {
+            records.get(i).setStudentAvatar(studentInfoList.get(i).getStudentAvatar());
+            records.get(i).setStudentName(studentInfoList.get(i).getStudentName());
+            records.get(i).setSubjectName(subjectList.get(i).getSubjectName());
+            records.get(i).setTeacherAvatar(teacherInfoList.get(i).getTeacherAvatar());
+            records.get(i).setTeacherName(teacherInfoList.get(i).getTeacherName());
+            records.get(i).setAbsenteeism(teacherInfoList.get(i).getAbsenteeism());
+        }
+        return courseHomeworkVoIPage;
     }
-	
+
+    @Override
+    public CourseHomeworkDetailVo getCourseHomeworkDetailByCourseId(Long courseId) {
+
+        // 课程基本信息
+        CourseHomeworkDetailVo courseHomeworkDetailVo = baseMapper.selectCourseHomeworkDetailByCourseId(courseId);
+
+        // 学生信息
+        CourseHomeworkDetailVo studentInfoDetailVo = baseMapper
+                .selectPaymentStudentInfo(courseHomeworkDetailVo.getCourseScheduleId());
+
+        // 声部信息
+        CourseHomeworkDetailVo subjectAndTeacherInfoVo = baseMapper
+                .selectSubjectAndTeacherInfo(courseHomeworkDetailVo.getCourseGroupId());
+
+        // 拼接数据
+        courseHomeworkDetailVo.setStudentName(studentInfoDetailVo.getStudentName());
+        courseHomeworkDetailVo.setStudentAvatar(studentInfoDetailVo.getStudentAvatar());
+        courseHomeworkDetailVo.setSubjectName(subjectAndTeacherInfoVo.getSubjectName());
+        courseHomeworkDetailVo.setTeacherAvatar(subjectAndTeacherInfoVo.getTeacherAvatar());
+        courseHomeworkDetailVo.setTeacherName(subjectAndTeacherInfoVo.getTeacherName());
+        return courseHomeworkDetailVo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean decorateCourseHomework(CourseHomeworkSaveDto saveDto) {
+        // 检查 老师 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        checkCourseSchedule(saveDto.getCourseScheduleId());
+
+        // 检查已经布置了课后作业
+        CourseHomework homework = checkHasHomework(saveDto.getCourseScheduleId());
+        if (homework != null) {
+            saveDto.setCourseHomeworkId(homework.getId());
+        }
+
+        CourseSchedule courseSchedule = courseScheduleService.getById(saveDto.getCourseScheduleId());
+        // 创建课后作业
+        CourseHomework courseHomework = getCourseHomework(saveDto, courseSchedule);
+
+        return this.saveOrUpdate(courseHomework);
+    }
+
+    /**
+     * 获取课程作业
+     *
+     * @param courseScheduleId 课程id
+     * @return CourseHomework
+     */
+    private CourseHomework checkHasHomework(Long courseScheduleId) {
+        List<CourseHomework> list = this.lambdaQuery()
+                                        .eq(CourseHomework::getCourseScheduleId, courseScheduleId)
+                                        .eq(CourseHomework::getCourseGroupType, CourseScheduleEnum.PRACTICE.getCode())
+                                        .list();
+        if (CollectionUtils.isEmpty(list)) {
+            return null;
+        }
+        return list.get(0);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean reviewCourseHomework(CourseHomeworkReviewDto reviewDto) {
+        // 检查 老师 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        checkCourseSchedule(reviewDto.getCourseScheduleId());
+
+        // 检查已经布置了课后作业
+        if (checkHasHomework(reviewDto.getCourseScheduleId()) == null) {
+            throw new BizException("没布置作业,不能点评");
+        }
+
+        // 课程基本信息
+        CourseHomeworkDetailVo courseHomeworkDetailVo = baseMapper
+                .selectCourseHomeworkDetailByCourseId(reviewDto.getCourseScheduleId());
+
+        // 检查学生是否提交作业
+        if (!YesOrNoEnum.YES.getCode().equals(courseHomeworkDetailVo.getSubmitHomework().getCode())) {
+            throw  new BizException("学生未提交作业,不能点评");
+        }
+        return studentCourseHomeworkService.reviewCourseHome(courseHomeworkDetailVo.getStudentHomeworkId(),reviewDto.getReview());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean submitCourseHomework(CourseHomeworkSubmitDto submitDto) {
+        // 检查 老师 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        checkCourseSchedule(submitDto.getCourseScheduleId());
+
+        // 检查已经布置了课后作业
+        if (checkHasHomework(submitDto.getCourseScheduleId()) == null) {
+            throw new BizException("没布置作业,不能提交作业");
+        }
+        // 课程基本信息
+        CourseHomeworkDetailVo courseHomeworkDetailVo = baseMapper
+                .selectCourseHomeworkDetailByCourseId(submitDto.getCourseScheduleId());
+
+        // 检查老师是否评价作业
+        if (YesOrNoEnum.YES.getCode().equals(courseHomeworkDetailVo.getReviewHomework().getCode())) {
+            throw  new BizException("老师已经点评作业,不能在提交");
+        }
+        return studentCourseHomeworkService.submitCourseHome(courseHomeworkDetailVo,submitDto.getSubmit(),submitDto.getStudentId());
+
+    }
+
+    @Override
+    public IPage<CourseHomeworkVo> selectAdminPage(IPage<CourseHomeworkVo> page, HomeworkSearch query) {
+        IPage<CourseHomeworkVo> courseHomeworkVoIPage = page.setRecords(baseMapper.selectAdminPage(page, query));
+
+        List<CourseHomeworkVo> records = courseHomeworkVoIPage.getRecords();
+        List<Long> courseIdList = records
+                                                  .stream()
+                                                  .map(CourseHomeworkVo::getCourseId)
+                                                  .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(courseIdList)) {
+            return courseHomeworkVoIPage;
+        }
+        // 查询提交时间
+        List<CourseHomeworkVo> courseHomeworkVoList = baseMapper.selectSubmitTime(courseIdList);
+        for (int i = 0; i < records.size(); i++) {
+            records.get(i).setSubmitTime(courseHomeworkVoList.get(i).getSubmitTime());
+        }
+        return courseHomeworkVoIPage;
+    }
+
+    /**
+     * 检查课程能否布置作业
+     *
+     * @param courseScheduleId 课程id
+     */
+    private void checkCourseSchedule(Long courseScheduleId) {
+        // 1. 检查课程类型
+        CourseSchedule courseSchedule = courseScheduleService.getById(courseScheduleId);
+        if (!CourseScheduleEnum.PRACTICE.getCode().equals(courseSchedule.getType())) {
+            throw  new BizException("非陪练课,不能布置课后作业");
+        }
+        // 2. 检查课程结束
+        if (!CourseScheduleEnum.COMPLETE.getCode().equals(courseSchedule.getStatus())) {
+            throw  new BizException("课程未正常完成,不能布置课后作业");
+        }
+    }
+
+    /**
+     * 封装课程课后作业对象
+     *
+     * @param saveDto 课后作业信息
+     * @param courseSchedule 课程信息
+     * @return 课后作业对象
+     */
+    private CourseHomework getCourseHomework(CourseHomeworkSaveDto saveDto, CourseSchedule courseSchedule) {
+        CourseHomework courseHomework = new CourseHomework();
+        courseHomework.setId(saveDto.getCourseHomeworkId());
+        courseHomework.setCourseGroupId(courseSchedule.getCourseGroupId());
+        courseHomework.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
+        courseHomework.setCourseScheduleId(saveDto.getCourseScheduleId());
+        courseHomework.setTitle(saveDto.getTitle());
+        courseHomework.setContent(saveDto.getContent());
+        courseHomework.setAttachments(saveDto.getAttachments());
+        courseHomework.setExpectNum(1);
+        courseHomework.setCompletedNum(0);
+        courseHomework.setCreateTime(new Date());
+        return courseHomework;
+    }
+
 }

+ 36 - 30
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java

@@ -51,55 +51,45 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
         Long scheduleId = replied.getCourseScheduleId();
         Long studentId = replied.getStudentId();
 
-        CourseSchedule schedule = scheduleDao.selectById(scheduleId);
-        if (schedule == null) {
+        CourseSchedule courseSchedule = scheduleDao.selectById(scheduleId);
+        if (courseSchedule == null) {
             throw new RuntimeException("课程不存在");
         }
-        if (schedule.getStatus().equals(CourseScheduleEnum.NOT_START.getCode())) {
+        if (courseSchedule.getStatus().equals(CourseScheduleEnum.NOT_START.getCode())) {
             throw new RuntimeException("课程未开始无法评论");
         }
 
         //当前用户为老师
-        CourseSchedule courseSchedule = scheduleDao.selectById(scheduleId);
-        if (courseSchedule != null) {
-            Long teacherId = courseSchedule.getTeacherId();
-            if (userId == teacherId) {
-                if (studentId == null) {
-                    throw new RuntimeException("学生id不能为空");
-                }
-                replied.setScore(null);
-                replied.setStudentReplied(null);
-                if (!repliedIsNull(replied)){//评论已存在
-                    repliedDao.updateReplied(replied);
-                    return;
-                }
-                repliedDao.insertReplied(replied);
+        if (userId == courseSchedule.getTeacherId()) {
+            if (studentId == null) {
+                throw new RuntimeException("评价的学生id不能为空");
+            }
+            isPayment(studentId, scheduleId);
+            replied.setScore(null);
+            replied.setStudentReplied(null);
+            if (!repliedIsNull(replied)) {
+                repliedDao.updateReplied(replied);
                 return;
             }
+            repliedDao.insert(replied);
+            return;
         }
 
         //当前用户为学员
-        QueryWrapper<CourseScheduleStudentPayment> wrapper = new QueryWrapper<>();
-        wrapper.eq("user_id_", userId);
-        wrapper.eq("course_id_", scheduleId);
-        wrapper.eq("course_type_", CourseScheduleEnum.PRACTICE);
-        CourseScheduleStudentPayment payment = paymentDao.selectOne(wrapper);
-        if (payment == null) {
-            throw new RuntimeException("未购买该课无法评论");
-        }
+        isPayment(userId, scheduleId);
         replied.setStudentId(userId);
         replied.setTeacherReplied(null);
-        if (!repliedIsNull(replied)){//评论已存在
+        if (!repliedIsNull(replied)) {
             repliedDao.updateReplied(replied);
             return;
         }
-        repliedDao.insertReplied(replied);
+        repliedDao.insert(replied);
     }
 
     /**
-     * @Description: 判断评论是否存在
-     * @Author: cy
-     * @Date: 2022/4/13
+     * 判断评论是否存在
+     * @param replied
+     * @return
      */
     public boolean repliedIsNull(CourseScheduleReplied replied) {
         QueryWrapper<CourseScheduleReplied> queryWrapper = new QueryWrapper<>();
@@ -112,6 +102,22 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
     }
 
     /**
+     * 校验当前用户是否购买课程
+     * @param userId     学员id
+     * @param scheduleId 课程id
+     */
+    public void isPayment(Long userId, Long scheduleId) {
+        QueryWrapper<CourseScheduleStudentPayment> wrapper = new QueryWrapper<>();
+        wrapper.eq("user_id_", userId);
+        wrapper.eq("course_id_", scheduleId);
+        wrapper.eq("course_type_", CourseScheduleEnum.PRACTICE.getCode());
+        CourseScheduleStudentPayment payment = paymentDao.selectOne(wrapper);
+        if (payment == null) {
+            throw new RuntimeException("学生未购买该课无法评论");
+        }
+    }
+
+    /**
      * @Description: 首页-我的课程-课程详情-查询评价
      * @Author: cy
      * @Date: 2022/4/12

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

@@ -67,6 +67,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     @Autowired
     private CourseGroupService courseGroupService;
 
+    @Autowired
+    private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+
     @Override
     public CourseScheduleDao getDao() {
         return this.baseMapper;
@@ -654,7 +657,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     @Override
     public Integer countTeacherNoDecorateHomework(HomeworkSearch homeworkSearch) {
 
-        // 陪练课 课程状态为完成,有学生考勤记录 没有学生课程记录
+        // 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
         return baseMapper.countTeacherNoDecorateHomework(homeworkSearch);
     }
 
@@ -675,5 +678,27 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     public IPage<MyCourseVo> queryStudentPracticeCourse(IPage<MyCourseVo> page, MyCourseSearch search) {
         return page.setRecords(baseMapper.queryStudentPracticeCourse(page, search));
     }
+
+    @Override
+    public boolean checkTeacherCourseSchedule(Long teacherId, Long courseId) {
+        CourseSchedule courseSchedule = this.getById(courseId);
+        return teacherId.equals(courseSchedule.getTeacherId());
+    }
+    /**
+     * @Description: 查询学生约课日历
+     * @Author: cy
+     * @Date: 2022/4/14
+     */
+    public List<String> queryCourseScheduleStudent(MyCourseSearch search) {
+        return baseMapper.queryCourseScheduleStudent(search);
+    }
+
+    @Override
+    public boolean checkStudentCourseSchedule(Long studentId, Long courseId) {
+        CourseScheduleStudentPayment courseScheduleStudentPayment = courseScheduleStudentPaymentService
+                .getByCourseId(courseId);
+        return courseScheduleStudentPayment != null && studentId.equals(courseScheduleStudentPayment.getUserId());
+
+    }
 }
 

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleStudentPaymentService;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,7 +11,9 @@ import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -39,6 +42,21 @@ public class CourseScheduleStudentPaymentServiceImpl extends ServiceImpl<CourseS
         return baseMapper.queryStudentInfoByGroupId(groupId);
     }
 
+    @Override
+    public CourseScheduleStudentPayment getByCourseId(Long courseId) {
+        List<CourseScheduleStudentPayment> list = this.lambdaQuery()
+                                                      .eq(CourseScheduleStudentPayment::getCourseId, courseId)
+                                                      .eq(CourseScheduleStudentPayment::getCourseType,
+                                                          CourseScheduleEnum.PRACTICE.getCode())
+                                                      .isNotNull(CourseScheduleStudentPayment::getUserId)
+                                                      .list();
+        if (CollectionUtils.isEmpty(list)) {
+            return null;
+        }
+        return list.get(0);
+
+    }
+
 
 }
 

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

@@ -163,8 +163,18 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     @Override
     public IPage<MusicAlbumVo> favoriteAlbum(IPage<MusicAlbumVo> page, StudentMusicAlbumSearch search) {
 
-        return page.setRecords(baseMapper.selectFavoritePage(page,search));
+        IPage<MusicAlbumVo> iPage = page.setRecords(baseMapper.selectFavoritePage(page, search));
+        List<MusicAlbumVo> records = iPage.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return iPage;
+        }
+        List<MusicAlbumVo> favoriteNumAndMusicNumList =baseMapper.selectFavoriteNumAndMusicNum(records);
 
+        for (int i = 0; i < records.size(); i++) {
+            records.get(i).setAlbumFavoriteCount(favoriteNumAndMusicNumList.get(i).getAlbumFavoriteCount());
+            records.get(i).setMusicSheetCount(favoriteNumAndMusicNumList.get(i).getMusicSheetCount());
+        }
+        return iPage;
     }
 
     private boolean checkNameRepeat(String albumName, Long id) {

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

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dao.PracticeDao;
+import com.yonge.cooleshow.biz.dal.dto.search.PracticeSearch;
+import com.yonge.cooleshow.biz.dal.service.PracticeService;
+import com.yonge.cooleshow.biz.dal.vo.PracticeVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author: cy
+ * @date: 2022/4/14 15:04
+ */
+@Service
+public class PracticeServiceImpl implements PracticeService {
+    @Autowired
+    private PracticeDao practiceDao;
+
+    @Override
+    public IPage<PracticeVo> selectTeacherPactice(IPage<PracticeVo> page, PracticeSearch search) {
+        return page.setRecords(practiceDao.selectTeacherPactice(page, search));
+    }
+
+    @Override
+    public IPage<PracticeVo> selectStudentPactice(IPage<PracticeVo> page, PracticeSearch search) {
+        return page.setRecords(practiceDao.selectStudentPactice(page, search));
+    }
+}

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

@@ -2,12 +2,16 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.StudentAttendance;
 import com.yonge.cooleshow.biz.dal.vo.StudentAttendanceVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentAttendanceSearch;
 import com.yonge.cooleshow.biz.dal.dao.StudentAttendanceDao;
 import com.yonge.cooleshow.biz.dal.service.StudentAttendanceService;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
 
 
 @Service
@@ -23,5 +27,17 @@ public class StudentAttendanceServiceImpl extends ServiceImpl<StudentAttendanceD
     public IPage<StudentAttendanceVo> selectPage(IPage<StudentAttendanceVo> page, StudentAttendanceSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    public StudentAttendance getByCourseTypeAndScheduleId(CourseScheduleEnum courseType, Long courseScheduleId) {
+        List<StudentAttendance> list = this.lambdaQuery()
+                                           .eq(StudentAttendance::getCourseGroupType, courseType)
+                                           .eq(StudentAttendance::getCourseScheduleId, courseScheduleId)
+                                           .list();
+        if (!CollectionUtils.isEmpty(list)) {
+            return list.get(0);
+        }
+        return null;
+    }
+
 }

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

@@ -2,12 +2,16 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.StudentCourseHomework;
 import com.yonge.cooleshow.biz.dal.vo.StudentCourseHomeworkVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentCourseHomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dao.StudentCourseHomeworkDao;
 import com.yonge.cooleshow.biz.dal.service.StudentCourseHomeworkService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
 
 
 @Service
@@ -23,5 +27,29 @@ public class StudentCourseHomeworkServiceImpl extends ServiceImpl<StudentCourseH
     public IPage<StudentCourseHomeworkVo> selectPage(IPage<StudentCourseHomeworkVo> page, StudentCourseHomeworkSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean reviewCourseHome(Long studentHomeworkId, String review) {
+        return this.lambdaUpdate()
+                .eq(StudentCourseHomework::getId,studentHomeworkId)
+                .set(StudentCourseHomework::getTeacherReplied,review)
+                .update();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean submitCourseHome(CourseHomeworkDetailVo courseHomeworkDetailVo, String submit, Long studentId) {
+        StudentCourseHomework studentCourseHomework = new StudentCourseHomework();
+        studentCourseHomework.setCourseHomeworkId(courseHomeworkDetailVo.getId());
+        studentCourseHomework.setCourseGroupType(courseHomeworkDetailVo.getCourseType().getCode());
+        studentCourseHomework.setCourseGroupId(courseHomeworkDetailVo.getCourseGroupId());
+        studentCourseHomework.setCourseScheduleId(courseHomeworkDetailVo.getCourseScheduleId());
+        studentCourseHomework.setStudentId(studentId);
+        studentCourseHomework.setAttachments(submit);
+        studentCourseHomework.setSubmitTime(new Date());
+        studentCourseHomework.setTeacherReplied("");
+        return this.saveOrUpdate(studentCourseHomework);
+    }
+
 }

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

@@ -47,9 +47,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         StudentHomeVo studentHomeVo = new StudentHomeVo();
         try {
             BeanUtils.copyProperties(studentHomeVo, student);
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        } catch (InvocationTargetException e) {
+        } catch (Exception e) {
             e.printStackTrace();
         }
         studentHomeVo.setHeardUrl(user.getAvatar());

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

@@ -1,15 +1,20 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.TeacherFreeTimeDao;
+import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
 import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
+import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
 import com.yonge.cooleshow.biz.dal.service.TeacherFreeTimeService;
+import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -37,13 +42,28 @@ public class TeacherFreeTimeServiceImpl extends ServiceImpl<TeacherFreeTimeDao,
         //删除原有设置
         if(Objects.nonNull(oldTeacherFreeTime)){
             baseMapper.deleteById(oldTeacherFreeTime.getId());
+            baseMapper.deleteSubjectPrice(oldTeacherFreeTime.getId());
         }
         //将其他配置改为非默认
         baseMapper.updateDefaultFlag(false,teacherFreeTime.getTeacherId());
-        Date date = new Date();
-        teacherFreeTime.setCreateTime(date);
-        teacherFreeTime.setUpdateTime(date);
         baseMapper.insert(teacherFreeTime);
+
+        List<TeacherSubjectPrice> priceList= JSONArray.parseArray(teacherFreeTime.getSubjectPrice(), TeacherSubjectPrice.class);
+        for (TeacherSubjectPrice price : priceList) {
+            price.setTeacherFreeTimeId(teacherFreeTime.getId());
+            price.setTeacherId(teacherFreeTime.getTeacherId());
+            price.setFreeMinutes(teacherFreeTime.getFreeMinutes());
+            price.setCourseMinutes(teacherFreeTime.getCourseMinutes());
+        }
+        baseMapper.insertPrice(priceList);
+    }
+
+    @Override
+    public TeacherFreeTimeVo getDetail(PracticeTimesSetting practiceTimesSetting) {
+        TeacherFreeTimeVo getDetail=baseMapper.getDetail(practiceTimesSetting);
+        List<TeacherSubjectPrice> priceList=baseMapper.getPrice(getDetail.getId());
+        getDetail.setSubjectPrice(priceList);
+        return getDetail;
     }
 }
 

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

@@ -64,11 +64,11 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
 
     private HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecordDto accountRecordDto) {
         if (FrozenTypeEnum.FROZEN.equals(accountRecordDto.getFrozenType())) {
-            baseMapper.frozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut());
+            baseMapper.frozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
         } else if (FrozenTypeEnum.UNFROZEN.equals(accountRecordDto.getFrozenType())) {
-            baseMapper.unfrozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut());
+            baseMapper.unfrozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
         } else {
-            baseMapper.changeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut());
+            baseMapper.changeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
         }
 
         UserAccountVo detail = detail(accountRecordDto.getUserId());
@@ -77,8 +77,9 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
             throw new BizException("账户变更失败");
         }
         //插入账户变更记录
+        accountRecordDto.setAccountId(accountRecordDto.getUserId());
+        accountRecordDto.setAccountBalance(detail.getAmountUsable());
         userAccountRecordService.save(accountRecordDto);
         return HttpResponseResult.succeed(accountRecordDto);
     }
-
 }

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

@@ -2,17 +2,26 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dto.UserBankCardDto;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
+import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
+import com.yonge.toolset.utils.idcard.IdcardValidator;
+import com.yonge.toolset.utils.validator.CommonValidator;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.UserBankCard;
 import com.yonge.cooleshow.biz.dal.vo.UserBankCardVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserBankCardSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserBankCardDao;
 import com.yonge.cooleshow.biz.dal.service.UserBankCardService;
+import org.springframework.transaction.annotation.Transactional;
 
 
 @Service
 public class UserBankCardServiceImpl extends ServiceImpl<UserBankCardDao, UserBankCard> implements UserBankCardService {
-
+    @Autowired
+    private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
 	@Override
     public UserBankCardVo detail(Long id) {
         UserBankCardVo detail = baseMapper.detail(id);
@@ -23,5 +32,34 @@ public class UserBankCardServiceImpl extends ServiceImpl<UserBankCardDao, UserBa
     public IPage<UserBankCardVo> selectPage(IPage<UserBankCardVo> page, UserBankCardSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<UserBankCard> bankCard(UserBankCardDto bankCard) {
+        //验证身份证合法性
+        IdcardValidator idcardValidator = new IdcardValidator();
+        //验证身份证号合法性
+        boolean validatedAllIdcard = idcardValidator.isValidatedAllIdcard(bankCard.getIdCardNo());
+        if (!validatedAllIdcard) {
+            return HttpResponseResult.failed("身份证号不合法");
+        }
+        boolean isMobileNo = CommonValidator.isMobileNo(bankCard.getPhone());
+        if (!isMobileNo) {
+            return HttpResponseResult.failed("手机号不合法");
+        }
+        boolean isBankCard = CommonValidator.isBankCard(bankCard.getBankCard());
+        if (!isBankCard) {
+            return HttpResponseResult.failed("银行卡号不合法");
+        }
+        boolean verify = realnameAuthenticationPlugin.verify(bankCard.getName(), bankCard.getIdCardNo());
+        if (!verify) {
+            return HttpResponseResult.failed("未通过实名认证");
+        }
+	    //当前用户只有一张银行卡
+        baseMapper.deleteByUserId(bankCard.getUserId());
+        bankCard.setDefaultFlag(true);
+        baseMapper.insert(bankCard);
+        return HttpResponseResult.succeed(bankCard);
+    }
+
 }

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

@@ -88,7 +88,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Override
     public UserOrderVo detail(Long id) {
         UserOrderVo userOrderVo = baseMapper.detailById(id);
-        if(null != userOrderVo){
+        if (null != userOrderVo) {
             userOrderVo.setOrderDetail(orderDetailService.detail(userOrderVo.getOrderNo()));
         }
         return userOrderVo;
@@ -97,7 +97,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Override
     public UserOrderVo detail(String orderNo) {
         UserOrderVo userOrderVo = baseMapper.detailByOrderNo(orderNo);
-        if(null != userOrderVo){
+        if (null != userOrderVo) {
             userOrderVo.setOrderDetail(orderDetailService.detail(userOrderVo.getOrderNo()));
         }
         return userOrderVo;
@@ -109,6 +109,11 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     }
 
     @Override
+    public List<UserOrderVo> selectList(OrderSearch query) {
+        return baseMapper.selectList(query);
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq) {
         log.info("订单[创建订单] Req:{}", JSONObject.toJSONString(orderReq));
@@ -125,8 +130,6 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
         if (!checkPositiveOrZero(createRes.getOriginalPrice())
                 || !checkPositiveOrZero(createRes.getExpectPrice())
-                || !checkPositiveOrZero(createRes.getActualPrice())
-                || !checkPositiveOrZero(createRes.getCouponAmount())
         ) {
             return HttpResponseResult.failed("金额校验失败");
         }
@@ -160,16 +163,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     @Override
     public void orderCallback(String data) {
-        JSONObject jsonObject = JSONObject.parseObject(data);
-        if (PayStatusEnum.succeeded.getCode().equals(jsonObject.getString("status"))) {
+        JSONObject hfRes = JSONObject.parseObject(data);
+        if (PayStatusEnum.succeeded.getCode().equals(hfRes.getString("status"))) {
             //订单完成
-            UserOrderVo detail = detail(jsonObject.getString("order_no"));
+            UserOrderVo detail = detail(hfRes.getString("order_no"));
             if (null == detail) {
                 log.error("汇付支付回调,订单未找到。 req is {}", data);
                 return;
             }
             if (detail.getStatus().equals(OrderStatusEnum.PAYING)) {
-                orderSuccess(detail);
+                orderSuccess(detail, hfRes);
             } else {
                 log.error("汇付支付回调,订单状态异常。 req is {}", data);
             }
@@ -270,6 +273,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         insertOrderPayment(res, payReq);
         return HttpResponseResult.succeed(orderPayRes);
     }
+
     /***
      * 插入订单付款单
      * @author liweifan
@@ -334,11 +338,15 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         userOrder.setStatus(OrderStatusEnum.WAIT_PAY);
         userOrder.setOriginalPrice(data.getOriginalPrice());
         userOrder.setExpectPrice(data.getExpectPrice());
-        userOrder.setActualPrice(data.getActualPrice());
-        userOrder.setCouponAmount(data.getCouponAmount());
+
+        //todo 优惠券优惠金额,暂时为0
+        BigDecimal couponAmount = new BigDecimal(0);
+
+        userOrder.setActualPrice(data.getExpectPrice().subtract(couponAmount).setScale(2));
+        userOrder.setCouponAmount(couponAmount);
         //平台服务费
         BigDecimal serviceFeeRate = getServiceFeeRate(orderReq.getOrderType());
-        userOrder.setPlantformFee(data.getActualPrice().multiply(serviceFeeRate));
+        userOrder.setPlantformFee(userOrder.getActualPrice().multiply(serviceFeeRate));
         userOrder.setPlantformFeeRate(serviceFeeRate);
         userOrder.setUserNote(orderReq.getUserNote());
         userOrder.setOrderType(orderReq.getOrderType());
@@ -352,6 +360,15 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderDetail.setOrderNo(userOrder.getOrderNo());
         orderDetail.setBizId(data.getBizId());
         orderDetail.setBizContent(data.getBizContent());
+        if (null != data.getGoodNum()) {
+            orderDetail.setGoodNum(data.getGoodNum());
+        }
+
+        //商品单价计算,使用商品原价计算,退费计算公式(退费金额=实际订单金额-(商品单价 * 已经使用商品数))
+        //其中,已经使用的商品单价按照原价算
+        orderDetail.setGoodPrice(
+                data.getOriginalPrice().divide(new BigDecimal(data.getGoodNum())).setScale(2)
+        );
         orderDetail.setCreateTime(new Date());
         orderDetailService.save(orderDetail);
 
@@ -421,6 +438,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
     }
 
+    void orderSuccess(UserOrderVo detail) {
+        orderSuccess(detail, null);
+    }
+
     /**
      * 订单完成
      *
@@ -429,7 +450,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/4/13 17:17
      */
     @Transactional(rollbackFor = Exception.class)
-    void orderSuccess(UserOrderVo detail) {
+    void orderSuccess(UserOrderVo detail, JSONObject hfRes) {
         detail.setStatus(OrderStatusEnum.PAID);
         detail.setPayTime(new Date());
         updateById(detail);
@@ -437,6 +458,15 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         UserOrderPayment orderPayment = orderPaymentService.detailByOrderNo(detail.getOrderNo());
         orderPayment.setStatus(PayStatusEnum.succeeded);
         orderPayment.setArrivalTime(new Date());
+        if (null != hfRes) {
+            try {
+                orderPayment.setPayAmt(new BigDecimal(hfRes.getString("pay_amt")));
+                orderPayment.setFeeAmt(new BigDecimal(hfRes.getString("fee_amt")));
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error("完成订单,付款单金额格式化失败,参数{}", hfRes.toJSONString());
+            }
+        }
         orderPaymentService.updateById(orderPayment);
         //调用业务
         Consumer<UserOrderVo> userOrderVoConsumer = orderSuccess.get(detail.getOrderType());

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.enums.FrozenTypeEnum;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dao.UserBankCardDao;
 import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
@@ -31,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 
 @Service
@@ -57,12 +59,18 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
     }
 
     @Override
+    public List<UserWithdrawalVo> selectList(TeacherWithdrawalSearch query) {
+        return baseMapper.selectList(query);
+    }
+
+    @Override
     public HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo(Long userId) {
         WithdrawalInfoRes withdrawalInfoRes = new WithdrawalInfoRes();
         UserBankCardVo defaultBank = bankCardDao.getDefaultBankByUserId(userId);
         if (null == defaultBank) {
             return HttpResponseResult.failed("用户未绑定银行卡");
         }
+        defaultBank.setPhone(ValueUtil.fuzzyMobile(defaultBank.getPhone()));
         defaultBank.setBankCard(ValueUtil.fuzzyBankCard(defaultBank.getBankCard()));
         withdrawalInfoRes.setUserBankCard(defaultBank);
         //获取平台提现手续费
@@ -99,6 +107,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
                 userId, withdrawalReq.getAmountWithdrawal(), InOrOutEnum.OUT, AccountBizTypeEnum.WITHDRAWAL,
                 userWithdrawal.getId(), "老师提现", null
         );
+        accountRecordDto.setFrozenType(FrozenTypeEnum.FROZEN);
         HttpResponseResult<UserAccountRecord> accountChange = userAccountService.accountChange(accountRecordDto);
         if(accountChange.getStatus()){
             return HttpResponseResult.succeed(true);

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

@@ -65,8 +65,6 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
 
         orderCreateRes.setOriginalPrice(detail.getOriginalPrice());
         orderCreateRes.setExpectPrice(detail.getActualPrice());
-        orderCreateRes.setActualPrice(detail.getActualPrice());
-        orderCreateRes.setCouponAmount(new BigDecimal(0));
         return HttpResponseResult.succeed(orderCreateRes);
     }
 

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CountVo.java

@@ -0,0 +1,23 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 数量
+ *
+ * @author liujunchi
+ * @date 2022-04-15
+ */
+public class CountVo {
+
+    @ApiModelProperty("数量")
+    private Integer count;
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+}

+ 294 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkDetailVo.java

@@ -0,0 +1,294 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * Description 课后作业详情信息展示
+ *
+ * @author liujunchi
+ * @date 2022-04-14
+ */
+@ApiModel("课后作业详情信息展示")
+public class CourseHomeworkDetailVo {
+
+    @ApiModelProperty("课后作业主键ID ")
+    private Long id;
+
+    @ApiModelProperty("课程编号ID")
+    private Long courseScheduleId;
+
+    @ApiModelProperty("课程组id")
+    private Long courseGroupId;
+
+    @ApiModelProperty("学生课程作业id")
+    private Long studentHomeworkId;
+
+    @ApiModelProperty("课程类型 PRACTICE 陪练课 LIVE直播课")
+    private CourseScheduleEnum courseType;
+
+    @ApiModelProperty("上课日期")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date classDate;
+
+    @ApiModelProperty("上课时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty("下课时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty("课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消")
+    private CourseScheduleEnum courseStatus;
+
+    @ApiModelProperty("作业标题; ")
+    private String title;
+
+    @ApiModelProperty("作业内容 ")
+    private String content;
+
+    @ApiModelProperty("作业附件地址(多个用逗号分隔) ")
+    private String attachments;
+
+    @ApiModelProperty("学员提交的作品附件 ")
+    private String studentAttachments;
+
+    @ApiModelProperty("老师的作业点评 ")
+    private String teacherReplied;
+
+    @ApiModelProperty("作业提交时间 ")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date submitTime;
+
+    @ApiModelProperty("声部名称")
+    private String subjectName;
+
+    @ApiModelProperty("学员姓名")
+    private String studentName;
+
+    @ApiModelProperty("学员头像")
+    private String studentAvatar;
+
+    @ApiModelProperty("老师姓名")
+    private String teacherName;
+
+    @ApiModelProperty("老师头像")
+    private String teacherAvatar;
+
+    @ApiModelProperty("布置作业,0:未布置,1:已布置")
+    private YesOrNoEnum decorateHomework;
+
+    @ApiModelProperty("学生提交作业 0:未提交,1:已提交")
+    private YesOrNoEnum submitHomework;
+
+    @ApiModelProperty("点评作业 0:未点评,1:已点评")
+    private YesOrNoEnum reviewHomework;
+
+    @ApiModelProperty("作业布置时间")
+    private Date decorateTime;
+
+
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getTeacherAvatar() {
+        return teacherAvatar;
+    }
+
+    public void setTeacherAvatar(String teacherAvatar) {
+        this.teacherAvatar = teacherAvatar;
+    }
+
+    public YesOrNoEnum getDecorateHomework() {
+        return decorateHomework;
+    }
+
+    public void setDecorateHomework(YesOrNoEnum decorateHomework) {
+        this.decorateHomework = decorateHomework;
+    }
+
+    public YesOrNoEnum getSubmitHomework() {
+        return submitHomework;
+    }
+
+    public void setSubmitHomework(YesOrNoEnum submitHomework) {
+        this.submitHomework = submitHomework;
+    }
+
+    public YesOrNoEnum getReviewHomework() {
+        return reviewHomework;
+    }
+
+    public void setReviewHomework(YesOrNoEnum reviewHomework) {
+        this.reviewHomework = reviewHomework;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentAvatar() {
+        return studentAvatar;
+    }
+
+    public void setStudentAvatar(String studentAvatar) {
+        this.studentAvatar = studentAvatar;
+    }
+
+    public CourseScheduleEnum getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(CourseScheduleEnum courseType) {
+        this.courseType = courseType;
+    }
+
+    public Date getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(Date classDate) {
+        this.classDate = classDate;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public CourseScheduleEnum getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(CourseScheduleEnum courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getAttachments() {
+        return attachments;
+    }
+
+    public void setAttachments(String attachments) {
+        this.attachments = attachments;
+    }
+
+    public String getStudentAttachments() {
+        return studentAttachments;
+    }
+
+    public void setStudentAttachments(String studentAttachments) {
+        this.studentAttachments = studentAttachments;
+    }
+
+    public String getTeacherReplied() {
+        return teacherReplied;
+    }
+
+    public void setTeacherReplied(String teacherReplied) {
+        this.teacherReplied = teacherReplied;
+    }
+
+    public Date getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(Date submitTime) {
+        this.submitTime = submitTime;
+    }
+
+    public Long getCourseGroupId() {
+        return courseGroupId;
+    }
+
+    public void setCourseGroupId(Long courseGroupId) {
+        this.courseGroupId = courseGroupId;
+    }
+
+    public Long getStudentHomeworkId() {
+        return studentHomeworkId;
+    }
+
+    public void setStudentHomeworkId(Long studentHomeworkId) {
+        this.studentHomeworkId = studentHomeworkId;
+    }
+
+    public Date getDecorateTime() {
+        return decorateTime;
+    }
+
+    public void setDecorateTime(Date decorateTime) {
+        this.decorateTime = decorateTime;
+    }
+}

+ 160 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkVo.java

@@ -1,14 +1,171 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * @Author: liweifan
  * @Data: 2022-03-30 13:53:51
  */
-@ApiModel(value = "CourseHomeworkVo对象", description = "课程作业表查询视图对象")
-public class CourseHomeworkVo extends CourseHomework{
+@ApiModel( description = "课程作业表查询视图对象")
+public class CourseHomeworkVo{
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("课程编号ID")
+	private Long courseId;
+
+
+	@ApiModelProperty("课程组ID")
+	private Long courseGroupId;
+
+
+	@ApiModelProperty("上课日期")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
+	private Date classDate;
+
+	@ApiModelProperty("上课时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+	private Date startTime;
+
+	@ApiModelProperty("下课时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+	private Date endTime;
+
+	@ApiModelProperty("声部名称")
+	private String subjectName;
+
+	@ApiModelProperty("学员姓名")
+	private String studentName;
+
+	@ApiModelProperty("学员头像")
+	private String studentAvatar;
+
+
+	@ApiModelProperty("老师姓名")
+	private String teacherName;
+
+	@ApiModelProperty("老师头像")
+	private String teacherAvatar;
+
+	@ApiModelProperty("旷课 0:否,1:是")
+	private YesOrNoEnum absenteeism;
+
+	@ApiModelProperty("作业布置时间")
+	private Date decorateTime;
+
+	@ApiModelProperty("作业提交时间")
+	private Date submitTime;
+
+
+	public Date getDecorateTime() {
+		return decorateTime;
+	}
+
+	public void setDecorateTime(Date decorateTime) {
+		this.decorateTime = decorateTime;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public String getTeacherAvatar() {
+		return teacherAvatar;
+	}
+
+	public void setTeacherAvatar(String teacherAvatar) {
+		this.teacherAvatar = teacherAvatar;
+	}
+
+	public Long getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(Long courseId) {
+		this.courseId = courseId;
+	}
+
+	public Long getCourseGroupId() {
+		return courseGroupId;
+	}
+
+	public void setCourseGroupId(Long courseGroupId) {
+		this.courseGroupId = courseGroupId;
+	}
+
+	public Date getClassDate() {
+		return classDate;
+	}
+
+	public void setClassDate(Date classDate) {
+		this.classDate = classDate;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public String getStudentName() {
+		return studentName;
+	}
+
+	public void setStudentName(String studentName) {
+		this.studentName = studentName;
+	}
+
+	public String getStudentAvatar() {
+		return studentAvatar;
+	}
+
+	public void setStudentAvatar(String studentAvatar) {
+		this.studentAvatar = studentAvatar;
+	}
+
+	public YesOrNoEnum getAbsenteeism() {
+		return absenteeism;
+	}
+
+	public void setAbsenteeism(YesOrNoEnum absenteeism) {
+		this.absenteeism = absenteeism;
+	}
 }

+ 168 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PracticeVo.java

@@ -0,0 +1,168 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/14
+ */
+@ApiModel(value = "PracticeVo")
+public class PracticeVo implements Serializable {
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "课程编号")
+    private Long courseId;
+
+    @ApiModelProperty(value = "用户名")
+    private String userName;
+
+    @ApiModelProperty(value = "用户手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "课程声部")
+    private String subjectName;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "原价")
+    private BigDecimal originalPrice;
+
+    @ApiModelProperty(value = "预计价格")
+    private BigDecimal expectPrice;
+
+    @ApiModelProperty(value = "实际价格")
+    private BigDecimal actualPrice;
+
+    @ApiModelProperty(value = "支付时间")
+    private String paymentTime;
+
+    @ApiModelProperty(value = "上课日期")
+    private String classDate;
+
+    @ApiModelProperty(value = "上课时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "下课时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "课程状态")
+    private String status;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public BigDecimal getOriginalPrice() {
+        return originalPrice;
+    }
+
+    public void setOriginalPrice(BigDecimal originalPrice) {
+        this.originalPrice = originalPrice;
+    }
+
+    public BigDecimal getExpectPrice() {
+        return expectPrice;
+    }
+
+    public void setExpectPrice(BigDecimal expectPrice) {
+        this.expectPrice = expectPrice;
+    }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+
+    public String getPaymentTime() {
+        return paymentTime;
+    }
+
+    public void setPaymentTime(String paymentTime) {
+        this.paymentTime = paymentTime;
+    }
+
+    public String getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(String classDate) {
+        this.classDate = classDate;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}

+ 193 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherFreeTimeVo.java

@@ -0,0 +1,193 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/15
+ */
+@ApiModel(value = "TeacherFreeTimeVo")
+public class TeacherFreeTimeVo implements Serializable {
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @ApiModelProperty(value = "老师编号")
+    private Long teacherId;
+
+    @ApiModelProperty(value = "课间休息分钟数")
+    private Integer freeMinutes;
+
+    @ApiModelProperty(value = "单课时分钟数")
+    private Integer courseMinutes;
+
+    @ApiModelProperty(value = "是否跳过节假日1是0否")
+    private Boolean skipHolidayFlag;
+
+    @ApiModelProperty(value = "声部金额")
+    private List<TeacherSubjectPrice> subjectPrice;
+
+    @ApiModelProperty(value = "周一")
+    private String monday;
+
+    @ApiModelProperty(value = "周二")
+    private String tuesday;
+
+    @ApiModelProperty(value = "周三")
+    private String wednesday;
+
+    @ApiModelProperty(value = "周四")
+    private String thursday;
+
+    @ApiModelProperty(value = "周五")
+    private String friday;
+
+    @ApiModelProperty(value = "周六")
+    private String saturday;
+
+    @ApiModelProperty(value = "周日")
+    private String sunday;
+
+    @ApiModelProperty(value = "是否默认配置")
+    private Boolean defaultFlag = true;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Integer getFreeMinutes() {
+        return freeMinutes;
+    }
+
+    public void setFreeMinutes(Integer freeMinutes) {
+        this.freeMinutes = freeMinutes;
+    }
+
+    public Integer getCourseMinutes() {
+        return courseMinutes;
+    }
+
+    public void setCourseMinutes(Integer courseMinutes) {
+        this.courseMinutes = courseMinutes;
+    }
+
+    public Boolean getSkipHolidayFlag() {
+        return skipHolidayFlag;
+    }
+
+    public void setSkipHolidayFlag(Boolean skipHolidayFlag) {
+        this.skipHolidayFlag = skipHolidayFlag;
+    }
+
+    public List<TeacherSubjectPrice> getSubjectPrice() {
+        return subjectPrice;
+    }
+
+    public void setSubjectPrice(List<TeacherSubjectPrice> subjectPrice) {
+        this.subjectPrice = subjectPrice;
+    }
+
+    public String getMonday() {
+        return monday;
+    }
+
+    public void setMonday(String monday) {
+        this.monday = monday;
+    }
+
+    public String getTuesday() {
+        return tuesday;
+    }
+
+    public void setTuesday(String tuesday) {
+        this.tuesday = tuesday;
+    }
+
+    public String getWednesday() {
+        return wednesday;
+    }
+
+    public void setWednesday(String wednesday) {
+        this.wednesday = wednesday;
+    }
+
+    public String getThursday() {
+        return thursday;
+    }
+
+    public void setThursday(String thursday) {
+        this.thursday = thursday;
+    }
+
+    public String getFriday() {
+        return friday;
+    }
+
+    public void setFriday(String friday) {
+        this.friday = friday;
+    }
+
+    public String getSaturday() {
+        return saturday;
+    }
+
+    public void setSaturday(String saturday) {
+        this.saturday = saturday;
+    }
+
+    public String getSunday() {
+        return sunday;
+    }
+
+    public void setSunday(String sunday) {
+        this.sunday = sunday;
+    }
+
+    public Boolean getDefaultFlag() {
+        return defaultFlag;
+    }
+
+    public void setDefaultFlag(Boolean defaultFlag) {
+        this.defaultFlag = defaultFlag;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}
+

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

@@ -3,6 +3,9 @@ package com.yonge.cooleshow.biz.dal.vo;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
 
 /**
  * @Author: liweifan
@@ -11,8 +14,16 @@ import io.swagger.annotations.ApiModel;
 @ApiModel(value = "UserOrderVo对象", description = "平台订单表查询视图对象")
 public class UserOrderVo extends UserOrder {
 	private static final long serialVersionUID = 1L;
-
+	@ApiModelProperty("订单详情 ")
 	private UserOrderDetail orderDetail;
+	@ApiModelProperty("交易流水号 ")
+	private String transNo;
+	@ApiModelProperty("汇付收取的服务费 ")
+	private BigDecimal feeAmt;
+	@ApiModelProperty("用户昵称")
+	private String username;
+	@ApiModelProperty(value = "手机号")
+	private String phone;
 
 	public UserOrderDetail getOrderDetail() {
 		return orderDetail;
@@ -21,4 +32,36 @@ public class UserOrderVo extends UserOrder {
 	public void setOrderDetail(UserOrderDetail orderDetail) {
 		this.orderDetail = orderDetail;
 	}
+
+	public String getTransNo() {
+		return transNo;
+	}
+
+	public void setTransNo(String transNo) {
+		this.transNo = transNo;
+	}
+
+	public BigDecimal getFeeAmt() {
+		return feeAmt;
+	}
+
+	public void setFeeAmt(BigDecimal feeAmt) {
+		this.feeAmt = feeAmt;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
 }

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

@@ -2,13 +2,45 @@ package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 /**
  * @Author: liweifan
  * @Data: 2022-03-30 13:53:51
  */
-@ApiModel(value = "TeacherWithdrawalVo对象", description = "老师账户提现表查询视图对象")
+@ApiModel(value = "UserWithdrawalVo对象", description = "账户提现表查询视图对象")
 public class UserWithdrawalVo extends UserWithdrawal {
+
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("银行名称 ")
+	private String bankName;
+	@ApiModelProperty("提现人 ")
+	private String	withdrawaUser;
+	@ApiModelProperty("转账人 ")
+	private String verifyUser;
+
+	public String getBankName() {
+		return bankName;
+	}
+
+	public void setBankName(String bankName) {
+		this.bankName = bankName;
+	}
+
+	public String getWithdrawaUser() {
+		return withdrawaUser;
+	}
+
+	public void setWithdrawaUser(String withdrawaUser) {
+		this.withdrawaUser = withdrawaUser;
+	}
+
+	public String getVerifyUser() {
+		return verifyUser;
+	}
+
+	public void setVerifyUser(String verifyUser) {
+		this.verifyUser = verifyUser;
+	}
 }

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

@@ -1,10 +1,8 @@
 package com.yonge.cooleshow.biz.dal.vo.res;
 
-import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 
 /**
@@ -21,18 +19,13 @@ public class OrderCreateRes {
     private Long bizId;
     @ApiModelProperty(value = "业务内容")
     private String bizContent;
-    @NotNull(message = "原价不能为空")
-    @ApiModelProperty(value = "原价 ", required = true)
+    @ApiModelProperty("商品数量 ")
+    private Integer goodNum;
+
+    @ApiModelProperty(value = "原价 ")
     private BigDecimal originalPrice;
-    @NotNull(message = "预计价格不能为空")
-    @ApiModelProperty(value = "预计价格 ", required = true)
+    @ApiModelProperty(value = "预计价格 ")
     private BigDecimal expectPrice;
-    @NotNull(message = "实际价格不能为空")
-    @ApiModelProperty(value = "实际价格 ", required = true)
-    private BigDecimal actualPrice;
-    @NotNull(message = "优惠金额不能为空")
-    @ApiModelProperty(value = "优惠金额 ", required = true)
-    private BigDecimal couponAmount;
 
     public Boolean getRes() {
         return res;
@@ -74,22 +67,6 @@ public class OrderCreateRes {
         this.expectPrice = expectPrice;
     }
 
-    public BigDecimal getActualPrice() {
-        return actualPrice;
-    }
-
-    public void setActualPrice(BigDecimal actualPrice) {
-        this.actualPrice = actualPrice;
-    }
-
-    public BigDecimal getCouponAmount() {
-        return couponAmount;
-    }
-
-    public void setCouponAmount(BigDecimal couponAmount) {
-        this.couponAmount = couponAmount;
-    }
-
     public String getBizContent() {
         return bizContent;
     }
@@ -97,4 +74,12 @@ public class OrderCreateRes {
     public void setBizContent(String bizContent) {
         this.bizContent = bizContent;
     }
+
+    public Integer getGoodNum() {
+        return goodNum;
+    }
+
+    public void setGoodNum(Integer goodNum) {
+        this.goodNum = goodNum;
+    }
 }

+ 268 - 9
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml

@@ -13,8 +13,8 @@
 	        <result column="completed_num_" property="completedNum" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
-		</resultMap>  
-    
+		</resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
          t.id_
@@ -28,18 +28,277 @@
         , t.completed_num_
         , t.create_time_
         , t.update_time_
-        </sql> 
-    
+        </sql>
+
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
         SELECT
             <include refid="baseColumns"/>
         FROM course_homework t
         where t.id_ = #{id}
     </select>
-    
-    <select id="selectPage" resultMap="BaseResultMap">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM course_homework t
+
+    <select id="selectAdminPage" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        cs.id_ AS courseId,
+        cs.course_group_id_ AS courseGroupId,
+        cs.class_date_ AS classDate,
+        cs.start_time_ AS startTime,
+        cs.end_time_ AS endTime,
+        ch.create_time_ as decorateTime,
+        su2.username_ as studentName,
+        su2.avatar_ as studentAvatar,
+        su.username_ as teacherName,
+        su.avatar_ as teacherAvatar,
+        ch.create_time_ as decorateTime
+        from  course_homework ch
+        left join course_schedule cs on ch.course_schedule_id_ = cs.id_
+        left join course_schedule_student_payment cssp on cssp.course_id_ = cs.id_
+        left join sys_user su on cs.teacher_id_ = su.id_
+        left join sys_user su2 on cssp.user_id_ = su2.id_
+        <where>
+            <if test="param.courseStatus != null">
+                and cs.type_ = #{param.courseType}
+            </if>
+            <if test="param.courseType != null">
+                and cs.status_ = #{param.courseStatus}
+            </if>
+            <if test="param.teacherId != null">
+                and cs.teacher_id_ = #{param.teacherId}
+            </if>
+            <if test="param.studentId != null">
+                and cssp.user_id_ = #{param.studentId}
+            </if>
+            <if test="param.courseScheduleId != null ">
+                and cs.id_ = #{param.courseScheduleId}
+            </if>
+            <if test="param.date != null and param.date != ''">
+                and date_format(cs.class_date_,'%Y-%m') = #{param.date}
+            </if>
+            <if test="param.startTime != null">
+                and #{param.startTime} &lt; ch.create_time_
+            </if>
+            <if test="param.endTime != null">
+                and #{param.endTime} &gt; ch.create_time_
+            </if>
+            <if test="param.search != null and param.search != ''">
+                and (su.id_ like concat('%',#{param.search},'%')
+                    or su.username_ like concat('%',#{param.search},'%')
+                    or su.phone_ like concat('%',#{param.search},'%')
+                    or su2.id_ like concat('%',#{param.search},'%')
+                    or su2.username_ like concat('%',#{param.search},'%')
+                    or su2.phone_ like concat('%',#{param.search},'%') )
+            </if>
+        </where>
+        order by cs.start_time_ desc
+    </select>
+
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        cs.id_ AS courseId,
+        cs.course_group_id_ AS courseGroupId,
+        cs.class_date_ AS classDate,
+        cs.start_time_ AS startTime,
+        cs.end_time_ AS endTime,
+        ch.create_time_ as decorateTime,
+        sch.submit_time_ as submitTime
+        from course_schedule cs
+        left join course_homework ch on ch.course_schedule_id_ = cs.id_
+        left join student_course_homework sch on ch.id_ = sch.course_homework_id_
+        left join course_schedule_student_payment cssp on cssp.course_id_ = cs.id_
+        <where>
+            <if test="param.decorate != null">
+                <if test="param.decorate.code == 0">
+                    and ch.id_ is null
+                </if>
+                <if test="param.decorate.code == 1">
+                    and ch.id_ is not null
+                </if>
+            </if>
+            <if test="param.submit != null">
+                <if test="param.submit.code == 0">
+                    and sch.id_ is null
+                </if>
+                <if test="param.submit.code == 1">
+                    and sch.id_ is not null
+                </if>
+            </if>
+            <if test="param.courseStatus != null">
+                and cs.type_ = #{param.courseType}
+            </if>
+            <if test="param.courseType != null">
+                and cs.status_ = #{param.courseStatus}
+            </if>
+            <if test="param.teacherId != null">
+                and cs.teacher_id_ = #{param.teacherId}
+            </if>
+            <if test="param.studentId != null">
+                and cssp.user_id_ = #{param.studentId}
+            </if>
+            <if test="param.courseScheduleId != null ">
+                and cs.id_ = #{param.courseScheduleId}
+            </if>
+            <if test="param.date != null and param.date != ''">
+                and date_format(cs.class_date_,'%Y-%m') = #{param.date}
+            </if>
+            <if test="param.startTime != null">
+                and #{param.startTime} &lt; ch.create_time_
+            </if>
+            <if test="param.endTime != null">
+                and #{param.endTime} &gt; ch.create_time_
+            </if>
+        </where>
+        order by cs.start_time_ desc
 	</select>
+
+	<select id="selectCourseHomeworkDetailByCourseId"
+            resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo">
+        select  ch.id_ as id
+        ,cs.id_ as courseScheduleId
+        ,ch.title_ as title
+        ,ch.content_ as content
+        ,ch.attachments_ as attachments
+        ,ch.create_time_ as decorateTime
+        ,sch.attachments_ as studentAttachments
+        ,sch.teacher_replied_ as teacherReplied
+        ,sch.submit_time_ as submitTime
+        ,sch.id_ as studentHomeworkId
+        ,cs.type_ as courseType
+        ,cs.class_date_ as classDate
+        ,cs.start_time_ as startTime
+        ,cs.end_time_ as endTime
+        ,cs.status_ as courseStatus
+        ,cs.course_group_id_ as courseGroupId
+        ,if(ch.id_ is null,0,1) as decorateHomework
+        ,if(sch.attachments_ is null or sch.attachments_ = '',0,1) as submitHomework
+        ,if(sch.teacher_replied_ is null or sch.attachments_ = '',0,1) as reviewHomework
+        from course_schedule cs
+        left join course_homework ch on ch.course_schedule_id_ = cs.id_
+        left join student_course_homework sch on ch.id_ = sch.course_homework_id_
+        <where>
+            <if test="courseId != null">
+                cs.id_ = #{courseId}
+            </if>
+        </where>
+    </select>
+
+	<select id="selectPaymentStudentInfo" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo">
+        select su.username_ as studentName
+        ,su.avatar_ as stduentAvatar
+        from course_schedule cs
+        left join course_schedule_student_payment cssp on cs.id_ = cssp.course_id_
+        left join sys_user su on su.id_ = cssp.user_id_
+        <where>
+            <if test="courseScheduleId != null">
+                and cs.id_ = #{courseScheduleId}
+            </if>
+        </where>
+    </select>
+
+
+    <select id="selectSubjectAndTeacherInfo" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo">
+        select s.name_ as subjectName
+        ,su.username_ as teacherName
+        ,su.avatar_ as teacherAvatar
+        from course_group cg
+        left join subject s on cg.subject_id_ = s.id_
+        left join sys_user su on cg.teacher_id_ = su.id_
+        <where>
+            <if test="courseGroupId != null">
+                and cg.id_ = #{courseGroupId}
+            </if>
+        </where>
+    </select>
+
+	<select id="selectStudentInfo" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        s.name_ as subjectName
+        ,su.username_ as studentName
+        ,su.avatar_ as studentAvatar
+        from course_schedule_student_payment cssp
+        left join course_group cg on cssp.course_group_id_ = cg.id_
+        left join subject s on s.id_ = cg.subject_id_
+        left join sys_user su on cssp.user_id_ = su.id_
+        <where>
+            <if test="records != null and records.size() != 0">
+                and cssp.course_id_ in
+                <foreach collection="records" separator="," close=")" open="(" item="item" >
+                    #{item.courseId}
+                </foreach>
+            </if>
+        </where>
+        <if test="records != null and records.size() != 0">
+            order by field(cssp.course_id_,
+            <foreach collection="records" separator="," close=")" open="" item="item" >
+                #{item.courseId}
+            </foreach>
+        </if>
+    </select>
+
+	<select id="selectSubjectInfoList" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        s.name_ as subjectName
+        from course_schedule cs
+        left join course_group cg on cs.course_group_id_ = cg.id_
+        left join subject s on s.id_ = cg.subject_id_
+        <where>
+            <if test="records != null and records.size() != 0">
+                and cs.id_ in
+                <foreach collection="records" separator="," close=")" open="(" item="item" >
+                    #{item.courseId}
+                </foreach>
+            </if>
+        </where>
+        <if test="records != null and records.size() != 0">
+            order by field(cs.id_,
+            <foreach collection="records" separator="," close=")" open="" item="item" >
+                #{item.courseId}
+            </foreach>
+        </if>
+    </select>
+
+	<select id="selectTeacherInfo" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        su.username_ as teacherName
+        ,su.avatar_ as teacherAvatar
+        ,if(sa.id_ is null,1,0) as absenteeism
+        from course_schedule cs
+        left join sys_user su on cs.teacher_id_ = su.id_
+        left join student_attendance sa on sa.course_schedule_id_ = cs.id_
+        <where>
+            <if test="records != null and records.size() != 0">
+                and cs.id_ in
+                <foreach collection="records" separator="," close=")" open="(" item="item" >
+                    #{item.courseId}
+                </foreach>
+            </if>
+        </where>
+        <if test="records != null and records.size() != 0">
+            order by field(cs.id_,
+            <foreach collection="records" separator="," close=")" open="" item="item" >
+                #{item.courseId}
+            </foreach>
+        </if>
+    </select>
+
+	<select id="selectSubmitTime" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        cs.id_ as courseId,
+        sch.submit_time_ as submitTime
+        from course_schedule cs
+        left join  student_course_homework sch on sch.course_schedule_id_ = cs.id_
+        <where>
+            <if test="courseIdList != null and courseIdList.size() != 0">
+                and cs.id_ in
+                <foreach collection="courseIdList" separator="," close=")" open="(" item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        <if test="courseIdList != null and courseIdList.size() != 0">
+            order by field(cs.id_,
+            <foreach collection="courseIdList" separator="," close=")" open="" item="item" >
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 23 - 6
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -182,10 +182,17 @@
 
         select count(1)
         from course_schedule cs
-        left join student_attendance sa on cs.id_ = sa.course_schedule_id_
-        left join course_homework ch on ch.course_schedule_id_ = sa.course_schedule_id_
+        left join course_homework ch on ch.course_schedule_id_ = cs.id_
         <where>
-            ch.id_ is null
+            <!-- 没有布置作业记录 -->
+            <if test="param.decorate != null">
+                <if test="param.decorate.code == 0">
+                    and ch.id_ is null
+                </if>
+                <if test="param.decorate.code == 1">
+                    and ch.id_ is not null
+                </if>
+            </if>
             <if test="param.courseStatus != null">
                 and cs.type_ = #{param.courseType}
             </if>
@@ -195,6 +202,9 @@
             <if test="param.teacherId != null">
                 and cs.teacher_id_ = #{param.teacherId}
             </if>
+            <if test="param.courseScheduleId != null ">
+                and cs.id_ = #{param.courseScheduleId}
+            </if>
         </where>
     </select>
 
@@ -220,13 +230,11 @@
             u.username_ AS userName,
             u.avatar_ AS avatar,
             g.subject_id_ AS subjectId,
-            b.name_ AS subjectName,
-            a.sign_in_time_ AS signInTime
+            b.name_ AS subjectName
         FROM course_schedule s
         LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
         LEFT JOIN course_group g ON s.course_group_id_ = g.id_
         LEFT JOIN `subject` b ON g.subject_id_ = b.id_
-        LEFT JOIN student_attendance a ON s.id_ = a.course_schedule_id_
         WHERE s.id_ IN
         (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{param.studentId} AND course_type_ = 'PRACTICE')
         <if test="param.status !=null and param.status !=''">
@@ -235,8 +243,17 @@
         <if test="param.subjectId !=null">
             AND g.subject_id_ = #{param.subjectId}
         </if>
+        <if test="param.classDate !=null and param.classDate !=''">
+            AND s.class_date_ = #{param.classDate}
+        </if>
         <if test="param.classMonth !=null and param.classMonth !=''">
             AND DATE_FORMAT(s.class_date_,'%Y-%m') = #{param.classMonth}
         </if>
     </select>
+    <select id="queryCourseScheduleStudent" resultType="java.lang.String"
+            parameterType="com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch">
+        SELECT class_date_ FROM course_schedule
+        WHERE id_ IN (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{studentId} AND course_type_ = 'PRACTICE')
+        AND DATE_FORMAT(class_date_,'%Y-%m') = #{classMonth}
+    </select>
 </mapper>

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

@@ -30,48 +30,48 @@
     <insert id="insertReplied" parameterType="com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied">
         INSERT INTO course_schedule_replied
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="studentId != null">
+            <if test="param.studentId != null">
                 student_id_,
             </if>
-            <if test="courseScheduleId != null">
+            <if test="param.courseScheduleId != null">
                 course_schedule_id_,
             </if>
-            <if test="courseGroupType != null">
+            <if test="param.courseGroupType != null">
                 course_group_type_,
             </if>
-            <if test="courseGroupId != null">
+            <if test="param.courseGroupId != null">
                 course_group_id_,
             </if>
-            <if test="score != null">
+            <if test="param.score != null">
                 score_,
             </if>
-            <if test="studentReplied != null">
+            <if test="param.studentReplied != null">
                 student_replied_,
             </if>
-            <if test="teacherReplied != null">
+            <if test="param.teacherReplied != null">
                 teacher_replied_,
             </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="studentId != null">
+            <if test="param.studentId != null">
                 studentId,
             </if>
-            <if test="courseScheduleId != null">
+            <if test="param.courseScheduleId != null">
                 courseScheduleId,
             </if>
-            <if test="courseGroupType != null">
+            <if test="param.courseGroupType != null">
                 courseGroupType,
             </if>
-            <if test="courseGroupId != null">
+            <if test="param.courseGroupId != null">
                 courseGroupId,
             </if>
-            <if test="score != null">
+            <if test="param.score != null">
                 score,
             </if>
-            <if test="studentReplied != null">
+            <if test="param.studentReplied != null">
                 studentReplied,
             </if>
-            <if test="teacherReplied != null">
+            <if test="param.teacherReplied != null">
                 teacherReplied,
             </if>
         </trim>

+ 27 - 6
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml

@@ -48,7 +48,7 @@
                 and (t.id_ like concat('%',#{query.idAndName},'%') or
                     t.album_name_ like concat('%',#{query.idAndName},'%'))
             </if>
-            <if test="query.albumTagIdList != null and query.albumTagIdList != ''">
+            <if test="query.albumTagIdList != null and query.albumTagIdList.size() != 0">
                 and
                 <foreach collection="query.albumTagIdList" separator="and" item="item">
                     find_in_set(#{item},t.album_tag_)
@@ -74,12 +74,8 @@
         select <include refid="Base_Column_List"/>
         ,(select group_concat(mt.name_) from music_tag mt
         where find_in_set(mt.id_,t.album_tag_) and mt.del_flag_ = 0) as musicTagNames
-        , t1.num as musicSheetCount
-        ,t2.num as albumFavoriteCount
         from music_album t
         left join album_favorite af2 on af2.album_id_ = t.id_
-        left join (select count(1) as num,amr.album_id_ from album_music_relate amr group by amr.album_id_) t1 on t1.album_id_ = t.id_
-        left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
         <where>
             <if test="query.studentId != null">
                 and af2.user_id_ = #{query.studentId}
@@ -88,7 +84,7 @@
                 and (t.id_ like concat('%',#{query.idAndName},'%') or
                 t.album_name_ like concat('%',#{query.idAndName},'%'))
             </if>
-            <if test="query.albumTagIdList != null and query.albumTagIdList != ''">
+            <if test="query.albumTagIdList != null and query.albumTagIdList.size() != 0">
                 and
                 <foreach collection="query.albumTagIdList" separator="and" item="item">
                     find_in_set(#{item},t.album_tag_)
@@ -98,5 +94,30 @@
                 and t.album_status_ = #{query.albumStatus}
             </if>
         </where>
+        order by  af2.favorite_time_ desc
+    </select>
+
+    <select id="selectFavoriteNumAndMusicNum" resultType="com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo">
+        select
+        t1.num as musicSheetCount
+        ,t2.num as albumFavoriteCount
+        from music_album t
+        left join (select count(1) as num,amr.album_id_ from album_music_relate amr group by amr.album_id_) t1 on t1.album_id_ = t.id_
+        left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
+        <where>
+            <if test="records != null and records.size() != 0">
+                and t.id_ in
+                <foreach collection="records" item="item" open="(" close=")" separator=",">
+                    #{item.id}
+                </foreach>
+            </if>
+        </where>
+        order by
+        <if test="records != null and records.size() != 0">
+            field(t.id_,
+            <foreach collection="records" item="item" open="" close=")" separator=",">
+                #{item.id}
+            </foreach>
+        </if>
     </select>
 </mapper>

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

@@ -138,18 +138,19 @@
             <if test="param.state != null">
                 and t.state_ = #{param.state}
             </if>
+            <if test="param.delFlag != null">
+                and t.del_flag_ = #{param.delFlag}
+            </if>
             <if test="param.id != null">
                 <if test="param.type == 2">
                     and amr.album_id_ = #{param.id}
                     order by amr.create_time_
                 </if>
                 <if test="param.type == 1">
-                    and (amr.album_id_ &lt;&gt;  #{param.id} or amr.album_id_ is null)
+                    and not exists(select amr2.music_sheet_id_  from album_music_relate amr2
+                        where amr2.album_id_ = #{param.id} and t.id_ = amr2.music_sheet_id_)
                 </if>
             </if>
-            <if test="param.delFlag != null">
-                and t.del_flag_ = #{param.delFlag}
-            </if>
         </where>
     </select>
 

+ 89 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/PracticeMapper.xml

@@ -0,0 +1,89 @@
+<?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.PracticeDao">
+	<select id="selectTeacherPactice" resultType="com.yonge.cooleshow.biz.dal.vo.PracticeVo">
+		SELECT
+			u.id_ AS userId,
+			u.username_ AS userName,
+			u.phone_ AS phone,
+			s.name_ AS subjectName,
+			p.course_id_ AS courseId,
+			p.order_no_ AS orderNo,
+			p.original_price_ AS originalPrice,
+			p.expect_price_ AS expectPrice,
+			p.actual_price_ AS actualPrice,
+			p.created_time_ AS paymentTime,
+			cs.class_date_ AS classDate,
+			cs.start_time_ AS startTime,
+			cs.end_time_ AS endTime,
+			cs.status_ AS `status`
+		FROM course_schedule_student_payment p
+		LEFT JOIN sys_user u ON p.user_id_ = u.id_
+		LEFT JOIN `subject` s ON p.course_group_id_ = s.id_
+		LEFT JOIN course_schedule cs ON p.course_id_ = cs.id_
+		WHERE p.course_id_ IN (SELECT id_ FROM course_schedule WHERE teacher_id_ = #{param.teacherId} AND type_ = 'PRACTICE')
+		<if test="null != param.search and '' != param.search">
+			AND (
+			cs.id_ LIKE CONCAT('%', #{param.search}, '%') OR
+			u.id_ LIKE CONCAT('%', #{param.search}, '%') OR
+			u.username_ LIKE CONCAT('%', #{param.search}, '%') OR
+			u.phone_ LIKE CONCAT('%', #{param.search}, '%')
+			)
+		</if>
+		<if test="null != param.orderNo and '' != param.orderNo">
+			AND p.order_no_ = #{param.orderNo}
+		</if>
+		<if test="null != param.subjectId">
+			AND s.id_ = #{param.subjectId}
+		</if>
+		<if test="param.startTime !=null">
+			<![CDATA[AND p.created_time_ >= #{param.startTime} ]]>
+		</if>
+		<if test="param.endTime !=null">
+			<![CDATA[AND p.created_time_ <= #{param.endTime} ]]>
+		</if>
+	</select>
+	<select id="selectStudentPactice" resultType="com.yonge.cooleshow.biz.dal.vo.PracticeVo">
+		SELECT
+			u.id_ AS userId,
+			u.username_ AS userName,
+			u.phone_ AS phone,
+			s.name_ AS subjectName,
+			p.course_id_ AS courseId,
+			p.order_no_ AS orderNo,
+			p.original_price_ AS originalPrice,
+			p.expect_price_ AS expectPrice,
+			p.actual_price_ AS actualPrice,
+			p.created_time_ AS paymentTime,
+			cs.class_date_ AS classDate,
+			cs.start_time_ AS startTime,
+			cs.end_time_ AS endTime,
+			cs.status_ AS `status`
+		FROM course_schedule cs
+		LEFT JOIN course_schedule_student_payment p ON cs.id_ = p.course_id_
+		LEFT JOIN sys_user u ON cs.teacher_id_ = u.id_
+		LEFT JOIN `subject` s ON p.course_group_id_ = s.id_
+		WHERE cs.id_ IN (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{param.studentId} AND course_type_ = 'PRACTICE')
+		<if test="null != param.search and '' != param.search">
+			AND (
+			cs.id_ LIKE CONCAT('%', #{param.search}, '%') OR
+			u.id_ LIKE CONCAT('%', #{param.search}, '%') OR
+			u.username_ LIKE CONCAT('%', #{param.search}, '%') OR
+			u.phone_ LIKE CONCAT('%', #{param.search}, '%')
+			)
+		</if>
+		<if test="null != param.orderNo and '' != param.orderNo">
+			AND p.order_no_ = #{param.orderNo}
+		</if>
+		<if test="null != param.subjectId">
+			AND s.id_ = #{param.subjectId}
+		</if>
+		<if test="param.startTime !=null">
+			<![CDATA[AND p.created_time_ >= #{param.startTime} ]]>
+		</if>
+		<if test="param.endTime !=null">
+			<![CDATA[AND p.created_time_ <= #{param.endTime} ]]>
+		</if>
+	</select>
+</mapper>

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

@@ -37,14 +37,31 @@
             #{entity.friday}, #{entity.saturday}, #{entity.sunday}, #{entity.defaultFlag},NOW(),NOW())
         </foreach>
     </insert>
+    <insert id="insertPrice" parameterType="java.util.List">
+        INSERT INTO teacher_subject_price
+            (teacher_free_time_id,teacher_id_,free_minutes_,course_minutes_,subject_id_,subject_name_,subject_price_)VALUES
+        <foreach collection="list" item="item" index="index" separator=",">
+            (#{item.teacherFreeTimeId},#{item.teacherId},#{item.freeMinutes},#{item.courseMinutes},#{item.subjectId},#{item.subjectName},#{item.subjectPrice})
+        </foreach>
+    </insert>
     <update id="updateDefaultFlag">
         UPDATE teacher_free_time SET default_flag_ = #{defaultFlag} WHERE teacher_id_ = #{teacherId}
     </update>
+    <delete id="deleteSubjectPrice" parameterType="java.lang.Long">
+        DELETE FROM teacher_subject_price WHERE teacher_free_time_id = #{id}
+    </delete>
     <select id="findOne" resultMap="BaseResultMap">
         SELECT <include refid="Base_Column_List"/>
         FROM teacher_free_time WHERE teacher_id_ = #{teacherId}
         AND free_minutes_ = #{freeMinutes}
         AND course_minutes_ = #{courseMinutes} LIMIT 1
     </select>
-
+    <select id="getDetail" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo"
+            parameterType="com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting">
+        SELECT * FROM teacher_free_time WHERE teacher_id_=#{userId} AND free_minutes_=#{freeMinutes} AND course_minutes_=#{courseMinutes}
+    </select>
+    <select id="getPrice" resultType="com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice"
+            parameterType="java.lang.Long">
+        SELECT * FROM teacher_subject_price WHERE teacher_free_time_id = #{id}
+    </select>
 </mapper>

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

@@ -45,8 +45,8 @@
 		SELECT
 			<include refid="baseColumns"/>,
 			ta.live_flag_ as liveFlag,
-			u.avatar,
-			u.username
+			u.avatar_ as avatar,
+			u.username_ as username
 		FROM teacher_style_video t
 		LEFT JOIN teacher a on t.user_id_ = a.user_id_
 		LEFT JOIN sys_user u on t.user_id_ = u.id_

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

@@ -26,10 +26,10 @@
         update user_cash_account
         <choose>
             <when test="null != inOrOut and inOrOut == 'IN'">
-                set amount_total_ = (amount_total_ + #{transAmount}),amount_frozen_ = (amount_frozen + #{transAmount})
+                set amount_total_ = (amount_total_ + #{transAmount}),amount_frozen_ = (amount_frozen_ + #{transAmount})
             </when>
             <otherwise>
-                set amount_usable_ = (amount_usable_ - #{transAmount}),amount_frozen_ = (amount_frozen + #{transAmount})
+                set amount_usable_ = (amount_usable_ - #{transAmount}),amount_frozen_ = (amount_frozen_ + #{transAmount})
             </otherwise>
         </choose>
         where user_id_ = #{userId}
@@ -38,10 +38,10 @@
         update user_cash_account
         <choose>
             <when test="null != inOrOut and inOrOut == 'IN'">
-                set amount_usable_ = (amount_usable_ + #{transAmount}),amount_frozen_ = (amount_frozen - #{transAmount})
+                set amount_usable_ = (amount_usable_ + #{transAmount}),amount_frozen_ = (amount_frozen_ - #{transAmount})
             </when>
             <otherwise>
-                set amount_total_ = (amount_total_ - #{transAmount}),amount_frozen_ = (amount_frozen - #{transAmount})
+                set amount_total_ = (amount_total_ - #{transAmount}),amount_frozen_ = (amount_frozen_ - #{transAmount})
             </otherwise>
         </choose>
         where user_id_ = #{userId}

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

@@ -9,7 +9,7 @@
 	        <result column="bank_card_" property="bankCard" />
 	        <result column="phone_" property="phone" />
 	        <result column="bank_code_" property="bankCode" />
-	        <result column="is_default_" property="isDefault" />
+	        <result column="default_flag_" property="defaultFlag" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
 		</resultMap>
@@ -23,7 +23,7 @@
         , t.bank_card_ as bankCard
         , t.phone_ as phone
         , t.bank_code_ as bankCode
-        , t.is_default_ as isDefault
+        , t.default_flag_ as defaultFlag
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         , t.del_flag_ as delFlag
@@ -42,14 +42,16 @@
 		FROM user_bank_card t
 		where t.del_flag_ = 0
 	</select>
+
     <select id="getDefaultBankByUserId" resultType="com.yonge.cooleshow.biz.dal.vo.UserBankCardVo">
         SELECT
             <include refid="baseColumns"/>
         FROM user_bank_card t
         where t.del_flag_ = 0 and  t.user_id_ = #{userId}
-        order by is_default_ desc,create_time_ desc
+        order by default_flag_ desc,create_time_ desc
         limit 1
     </select>
+
     <select id="getBankByUserIdAndCardId" resultType="com.yonge.cooleshow.biz.dal.vo.UserBankCardVo">
         SELECT
             <include refid="baseColumns"/>
@@ -58,4 +60,8 @@
         and  t.user_id_ = #{userId}
         and t.id_ = #{bankCardId}
     </select>
+
+    <update id="deleteByUserId">
+        update user_bank_card set del_flag_ = 1 where user_id_ = #{userId}
+    </update>
 </mapper>

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

@@ -50,26 +50,87 @@
 
     <select id="detailById" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
-            <include refid="baseColumns"/>
+            <include refid="baseColumns"/>,
+            p.trans_no_ as transNo,
+            p.fee_amt_ as feeAmt,
+            u.username_ as username,
+            u.phone_ as phone
         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"/>
+            <include refid="baseColumns"/>,
+            p.trans_no_ as transNo,
+            p.fee_amt_ as feeAmt,
+            u.username_ as username,
+            u.phone_ as phone
         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.order_no_ = #{orderNo}
     </select>
 
-    <select id="selectPage" resultMap="BaseResultMap">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM user_order t
+
+    <sql id="selectSql">
+        SELECT
+            <include refid="baseColumns" />,
+            p.trans_no_ as transNo,
+            p.fee_amt_ as feeAmt,
+            u.username_ as username,
+            u.phone_ as phone
+        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>
+            <if test="null != param.search and '' != param.search">
+                AND (
+                t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.username_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.phone_ LIKE CONCAT('%', #{param.search}, '%')
+                )
+            </if>
+            <if test="null != param.searchNo and '' != param.searchNo">
+                AND (
+                t.order_no_ LIKE CONCAT('%', #{param.search}, '%') or
+                p.trans_no_ LIKE CONCAT('%', #{param.search}, '%')
+                )
+            </if>
+            <if test="null != param.orderType">
+                AND t.order_type_ = #{param.orderType}
+            </if>
+            <if test="null != param.status">
+                AND t.status_ = #{param.status}
+            </if>
+            <if test="param.startTime !=null">
+                <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
+            </if>
+            <if test="param.endTime !=null">
+                <![CDATA[AND t.create_time_ <= #{param.endTime} ]]>
+            </if>
+            <if test="param.userId !=null">
+                AND t.user_id_ = #{param.userId}
+            </if>
+            <if test="param.merchId !=null">
+                AND t.merch_id_ = #{param.merchId}
+            </if>
+        </where>
+        order by t.create_time_ desc
+        </sql>
+
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
+        <include refid="selectSql"/>
 	</select>
+    <select id="selectList" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
+        <include refid="selectSql"/>
+    </select>
     <select id="selectPendingList" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT * FROM user_order t
         where (t.status_ = 'WAIT_PAY' or t.status_ = 'PAYING')
         and t.create_time_ &lt;= date_sub(now(),interval 30 minute)
     </select>
+
 </mapper>

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

@@ -7,6 +7,7 @@
         <result column="trans_no_" property="transNo" />
         <result column="pay_channel_" property="payChannel" />
         <result column="pay_amt_" property="payAmt" />
+        <result column="fee_amt_" property="feeAmt" />
         <result column="pay_info_" property="payInfo" />
         <result column="status_" property="status" />
         <result column="arrival_time_" property="arrivalTime" />
@@ -21,6 +22,7 @@
         , t.trans_no_ as transNo
         , t.pay_channel_ as payChannel
         , t.pay_amt_ as payAmt
+        , t.fee_amt_ as feeAmt
         , t.pay_info_ as payInfo
         , t.status_ as status
         , t.arrival_time_ as arrivalTime

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

@@ -39,9 +39,44 @@
         where t.id_ = #{id}
     </select>
 
-    <select id="selectPage" resultMap="BaseResultMap">
+    <sql id="selectSql">
         SELECT
-        <include refid="baseColumns" />
+            <include refid="baseColumns" />,
+            bc.bank_name_ as bankName,
+            u.username_  as withdrawaUser,
+            (
+                SELECT u.username_ FROM sys_user u WHERE u.id_ = t.verify_user_id_
+            ) 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_
+        <where>
+            <if test="null != param.search and '' != param.search">
+                AND (
+                    t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
+                    u.username_ LIKE CONCAT('%', #{param.search}, '%') or
+                    u.phone_ LIKE CONCAT('%', #{param.search}, '%')
+                )
+            </if>
+            <if test="null != param.bankFlowNo and '' != param.bankFlowNo">
+                AND t.bank_flow_no_ LIKE CONCAT('%', #{param.bankFlowNo}, '%')
+            </if>
+            <if test="param.startTime !=null">
+                <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
+            </if>
+            <if test="param.endTime !=null">
+                <![CDATA[AND t.create_time_ <= #{param.endTime} ]]>
+            </if>
+            <if test="param.status !=null">
+                AND t.status_ = #{param.status}
+            </if>
+        </where>
+    </sql>
+
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo">
+        <include refid="selectSql"/>
+    </select>
+    <select id="selectList" resultType="com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo">
+        <include refid="selectSql"/>
     </select>
 </mapper>

+ 96 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseHomeworkController.java

@@ -0,0 +1,96 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkReviewDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSaveDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSubmitDto;
+import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.CountVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
+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.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * Description 老师课后作业相关接口
+ *
+ * @author liujunchi
+ * @date 2022-04-13
+ */
+@Api(tags = "学生课后作业相关接口")
+@RestController
+@RequestMapping("/homework")
+public class CourseHomeworkController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private CourseScheduleService courseScheduleService;
+
+    @Autowired
+    private CourseHomeworkService courseHomeworkService;
+
+
+    @ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
+    @GetMapping(value = "/detail/{courseId}")
+    public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
+                                                                 @PathVariable("courseId") Long courseId) {
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        HttpResponseResult info = checkCourseSchedule(courseId,sysUser);
+        if (info != null) return info;
+        return succeed(courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId));
+    }
+
+    private HttpResponseResult checkCourseSchedule(Long courseId,SysUser sysUser) {
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!courseScheduleService.checkStudentCourseSchedule(sysUser.getId(), courseId)) {
+            return failed("学生只能看自己购买的课程详情");
+        }
+        return null;
+    }
+
+
+    @ApiOperation(value = "陪练课-作业提交", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/submit", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<Boolean> reviewCourseHomework(@Valid @RequestBody CourseHomeworkSubmitDto submitDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        HttpResponseResult info = checkCourseSchedule(submitDto.getCourseScheduleId(),sysUser);
+        if (info != null) return info;
+        submitDto.setStudentId(sysUser.getId());
+        return succeed(courseHomeworkService.submitCourseHomework(submitDto));
+    }
+
+    @ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (query.getSubmit() == null) {
+            return failed("提交状态不能为空");
+        }
+        query.setDecorate(YesOrNoEnum.YES);
+        query.setStudentId(sysUser.getId());
+        query.setCourseStatus(CourseScheduleEnum.COMPLETE);
+        query.setCourseType(CourseScheduleEnum.PRACTICE);
+        return succeed(PageUtil.pageInfo(courseHomeworkService.selectPage(PageUtil.getPage(query),query)));
+    }
+
+
+}

+ 13 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseScheduleController.java

@@ -23,6 +23,8 @@ 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;
+
 /**
  * @Author: cy
  * @Date: 2022/4/13
@@ -76,5 +78,16 @@ public class CourseScheduleController extends BaseController {
         replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
         return succeed(repliedService.selectReplied(replied));
     }
+
+    @ApiOperation("学生端-课表-日历")
+    @PostMapping("/queryCourseScheduleStudent")
+    public HttpResponseResult<List<String>> queryCourseScheduleStudent(@RequestBody MyCourseSearch search) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        search.setStudentId(user.getId());
+        return succeed(courseScheduleService.queryCourseScheduleStudent(search));
+    }
 }
 

+ 0 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java

@@ -2,7 +2,6 @@ package com.yonge.cooleshow.student.controller;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -17,8 +16,6 @@ import org.springframework.web.bind.annotation.*;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 
-import java.util.List;
-
 @RestController
 @RequestMapping("/student")
 @Api(value = "学生表", tags = "学生表")

+ 77 - 5
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseHomeworkController.java

@@ -2,17 +2,27 @@ package com.yonge.cooleshow.teacher.controller;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkReviewDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSaveDto;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.CountVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 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.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
 
 /**
  * Description 老师课后作业相关接口
@@ -31,9 +41,12 @@ public class CourseHomeworkController extends BaseController {
     @Autowired
     private CourseScheduleService courseScheduleService;
 
+    @Autowired
+    private CourseHomeworkService courseHomeworkService;
+
     @ApiOperation(value = "未布置的课后作业数量")
     @GetMapping(value="/count")
-    public HttpResponseResult<Integer> countTeacherNoDecorateHomework() {
+    public HttpResponseResult<CountVo> countTeacherNoDecorateHomework() {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");
@@ -43,7 +56,66 @@ public class CourseHomeworkController extends BaseController {
         homeworkSearch.setTeacherId(sysUser.getId());
         homeworkSearch.setCourseStatus(CourseScheduleEnum.COMPLETE);
         homeworkSearch.setCourseType(CourseScheduleEnum.PRACTICE);
-        return succeed(courseScheduleService.countTeacherNoDecorateHomework(homeworkSearch));
+        homeworkSearch.setDecorate(YesOrNoEnum.NO);
+        Integer integer = courseScheduleService.countTeacherNoDecorateHomework(homeworkSearch);
+        CountVo countVo = new CountVo();
+        countVo.setCount(integer);
+        return succeed(countVo);
+    }
+
+    @ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
+    @GetMapping(value = "/detail/{courseId}")
+    public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
+                                                                 @PathVariable("courseId") Long courseId) {
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        HttpResponseResult info = checkCourseSchedule(courseId,sysUser);
+        if (info != null) return info;
+        return succeed(courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId));
+    }
+
+    private HttpResponseResult checkCourseSchedule(Long courseId,SysUser sysUser) {
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!courseScheduleService.checkTeacherCourseSchedule(sysUser.getId(), courseId)) {
+            return failed("老师只能看自己的课程详情");
+        }
+        return null;
+    }
+
+    @ApiOperation(value = "陪练课-布置作业", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/decorate", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<Boolean> decorateCourseHomework(@Valid @RequestBody CourseHomeworkSaveDto saveDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        HttpResponseResult info = checkCourseSchedule(saveDto.getCourseScheduleId(),sysUser);
+        if (info != null) return info;
+        saveDto.setTeacherId(sysUser.getId());
+        return succeed(courseHomeworkService.decorateCourseHomework(saveDto));
+    }
+
+    @ApiOperation(value = "陪练课-作业点评", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/review", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<Boolean> reviewCourseHomework(@Valid @RequestBody CourseHomeworkReviewDto reviewDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        HttpResponseResult info = checkCourseSchedule(reviewDto.getCourseScheduleId(),sysUser);
+        if (info != null) return info;
+        reviewDto.setTeacherId(sysUser.getId());
+        return succeed(courseHomeworkService.reviewCourseHomework(reviewDto));
+    }
+
+    @ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (query.getDecorate() == null) {
+            return failed("布置状态不能为空");
+        }
+        query.setTeacherId(sysUser.getId());
+        query.setCourseStatus(CourseScheduleEnum.COMPLETE);
+        query.setCourseType(CourseScheduleEnum.PRACTICE);
+        return succeed(PageUtil.pageInfo(courseHomeworkService.selectPage(PageUtil.getPage(query),query)));
     }
 
+
 }

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

@@ -1,12 +1,11 @@
 package com.yonge.cooleshow.teacher.controller;
 
-
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
-import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
 import com.yonge.cooleshow.biz.dal.service.TeacherFreeTimeService;
+import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
@@ -19,8 +18,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
 
 /**
  * 老师可排课时间表(TeacherFreeTime)表控制层
@@ -54,13 +51,13 @@ public class TeacherFreeTimeController extends BaseController {
 
     @ApiOperation(value = "获取老师陪练课设置")
     @PostMapping("/getDetail")
-    public HttpResponseResult<TeacherFreeTime> detDetail(@Valid @RequestBody PracticeTimesSetting practiceTimesSetting){
+    public HttpResponseResult<TeacherFreeTimeVo> getDetail(@Valid @RequestBody PracticeTimesSetting practiceTimesSetting){
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(teacherFreeTimeService.getDao().
-                findOne(user.getId(),practiceTimesSetting.getCourseMinutes(),practiceTimesSetting.getFreeMinutes()));
+        practiceTimesSetting.setUserId(user.getId());
+        return succeed(teacherFreeTimeService.getDetail(practiceTimesSetting));
     }
 }
 

+ 38 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserBankCardController.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.UserBankCardDto;
+import com.yonge.cooleshow.biz.dal.entity.UserBankCard;
+import com.yonge.cooleshow.biz.dal.service.UserBankCardService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+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.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping("/userBankCard")
+@Api(value = "用户绑卡记录表", tags = "用户绑卡记录表")
+public class UserBankCardController extends BaseController {
+    @Autowired
+    private UserBankCardService userBankCardService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@PostMapping("/bankCard")
+	@ApiOperation(value = "用户绑卡")
+	public HttpResponseResult<UserBankCard> bankCard(@Valid @RequestBody UserBankCardDto bankCard) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		bankCard.setUserId(user.getId());
+		return userBankCardService.bankCard(bankCard);
+	}
+
+}

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.teacher.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.WithdrawalReq;
+import com.yonge.cooleshow.biz.dal.entity.UserBankCard;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
@@ -30,7 +31,6 @@ public class UserWithdrawalController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
-
     @PostMapping("/getWithdrawalInfo")
     @ApiOperation(value = "查询提现页面信息")
     public HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo() {

+ 95 - 88
toolset/utils/pom.xml

@@ -1,105 +1,112 @@
 <?xml version="1.0"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.yonge.toolset</groupId>
+        <artifactId>toolset</artifactId>
+        <version>1.0</version>
+    </parent>
     <groupId>com.yonge.toolset</groupId>
-    <artifactId>toolset</artifactId>
+    <artifactId>utils</artifactId>
     <version>1.0</version>
-  </parent>
-  <groupId>com.yonge.toolset</groupId>
-  <artifactId>utils</artifactId>
-  <version>1.0</version>
-  <name>utils</name>
-  <url>http://maven.apache.org</url>
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-  <dependencies>
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-		</dependency>
+    <name>utils</name>
+    <url>http://maven.apache.org</url>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>commons-beanutils</groupId>
-			<artifactId>commons-beanutils</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>com.google.zxing</groupId>
-			<artifactId>core</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>com.google.zxing</groupId>
-			<artifactId>javase</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>org.apache.httpcomponents</groupId>
-			<artifactId>httpclient</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>org.apache.httpcomponents</groupId>
-			<artifactId>httpmime</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>com.lowagie</groupId>
-			<artifactId>itext</artifactId>
-			<version>2.1.7</version>
-		</dependency>
+        <dependency>
+            <groupId>com.lowagie</groupId>
+            <artifactId>itext</artifactId>
+            <version>2.1.7</version>
+        </dependency>
 
-		<dependency>
-			<groupId>org.xhtmlrenderer</groupId>
-			<artifactId>flying-saucer-pdf</artifactId>
-			<version>9.0.7</version>
-		</dependency>
+        <dependency>
+            <groupId>org.xhtmlrenderer</groupId>
+            <artifactId>flying-saucer-pdf</artifactId>
+            <version>9.0.7</version>
+        </dependency>
 
-		<dependency>
-			<groupId>org.freemarker</groupId>
-			<artifactId>freemarker</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi</artifactId>
-			<version>3.12</version>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.17</version>
+        </dependency>
 
-		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi-ooxml</artifactId>
-			<version>3.12</version>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.17</version>
+        </dependency>
 
-		<dependency>
-			<groupId>iTextAsian</groupId>
-			<artifactId>iTextAsian</artifactId>
-			<version>1.0</version>
-		</dependency>
-		<dependency>
-			<groupId>org.ini4j</groupId>
-			<artifactId>ini4j</artifactId>
-			<version>0.5.4</version>
-		</dependency>
+        <dependency>
+            <groupId>iTextAsian</groupId>
+            <artifactId>iTextAsian</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.ini4j</groupId>
+            <artifactId>ini4j</artifactId>
+            <version>0.5.4</version>
+        </dependency>
 
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>fastjson</artifactId>
-			<version>1.2.70</version>
-		</dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.70</version>
+        </dependency>
 
-		<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-			<version>2.8.0</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-expression</artifactId>
-		</dependency>
-  </dependencies>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-expression</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.2.10</version>
+        </dependency>
+    </dependencies>
 </project>

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä