Explorar o código

Merge remote-tracking branch 'origin/master'

hgw %!s(int64=3) %!d(string=hai) anos
pai
achega
40c51b91b2
Modificáronse 58 ficheiros con 1273 adicións e 521 borrados
  1. 5 5
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  2. 10 27
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  3. 12 1
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysRoleMapper.xml
  4. 0 22
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java
  5. 18 18
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java
  6. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java
  7. 29 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountDao.java
  8. 17 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserBankCardDao.java
  9. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalDao.java
  10. 63 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserAccountRecordDto.java
  11. 37 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/WithdrawalReq.java
  12. 0 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java
  13. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccount.java
  14. 48 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccountRecord.java
  15. 5 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserBankCard.java
  16. 25 36
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawal.java
  17. 7 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroup.java
  18. 5 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroupDetail.java
  19. 53 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java
  20. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java
  21. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/FrozenTypeEnum.java
  22. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/InOrOutEnum.java
  23. 0 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/TeacherTypeEnum.java
  24. 3 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SubjectQueryInfo.java
  25. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SubjectService.java
  26. 0 29
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherWithdrawalService.java
  27. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserAccountService.java
  28. 49 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java
  29. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java
  30. 10 25
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java
  31. 7 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  32. 0 27
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherWithdrawalServiceImpl.java
  33. 62 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  34. 175 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  35. 55 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  36. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicianAuthEntryRecordVo.java
  37. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherAuthEntryRecordVo.java
  38. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderPaymentVo.java
  39. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserWithdrawalVo.java
  40. 47 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/WithdrawalInfoRes.java
  41. 33 33
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  42. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  43. 0 49
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherWithdrawalMapper.xml
  44. 63 26
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountMapper.xml
  45. 32 30
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountRecordMapper.xml
  46. 33 17
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserBankCardMapper.xml
  47. 10 10
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  48. 22 22
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  49. 38 25
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  50. 15 15
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundsMapper.xml
  51. 47 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml
  52. 12 12
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml
  53. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java
  54. 3 4
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SubjectController.java
  55. 3 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SubjectController.java
  56. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  57. 53 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java
  58. 39 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/VideoLessonGroupController.java

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

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -144,9 +145,11 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     @Override
     @Transactional(rollbackFor = Exception.class)
     public SysUserInfo registerUser(String phone, String clientId) {
+        SysUser sysUser = new SysUser();
+        sysUser.setPhone(phone);
+        String password = sysUser.getPhone().substring(sysUser.getPhone().length() - 6);
+        sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
         if (StringUtils.equalsIgnoreCase(clientId, "TEACHER")) {
-            SysUser sysUser = new SysUser();
-            sysUser.setPhone(phone);
             sysUser.setUserType("TEACHER");
             sysUserDao.insert(sysUser);
             //添加用户现金账户
@@ -157,10 +160,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
             sysUserDao.insertTeacher(sysUser.getId());
             return queryUserInfoByPhone(phone);
         } else if (StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
-            SysUser sysUser = new SysUser();
-            sysUser.setPhone(phone);
             sysUser.setUserType("STUDENT");
-
             sysUserDao.insert(sysUser);
             sysUserService.saveStudent(sysUser.getId());
             return queryUserInfoByPhone(phone);

+ 10 - 27
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -52,8 +52,6 @@ public class UserController extends BaseController {
     private SysUserService sysUserService;
     @Autowired
     private SysRoleService sysRoleService;
-    /*@Autowired
-    private ImFeignService imFeignService;*/
     @Autowired
     private SysUserRoleService sysUserRoleService;
     @Autowired
@@ -118,10 +116,10 @@ public class UserController extends BaseController {
     }
 
     @PostMapping(value = "/updateSysUser", consumes = MediaType.APPLICATION_JSON_VALUE)
-    public boolean updateSysUser(@RequestBody SysUser user) {
+    public HttpResponseResult<Boolean> updateSysUser(@RequestBody SysUser user) {
         user.setUpdateTime(new Date());
         sysUserService.update(user);
-        return true;
+        return HttpResponseResult.succeed(true);
     }
 
     @ApiOperation(value = "新增用户")
@@ -130,33 +128,19 @@ public class UserController extends BaseController {
         return succeed(sysUserService.add(sysUser));
     }
 
-    @ApiOperation(value = "设置密码")
+    @ApiOperation(value = "设置用户密码")
     @PostMapping(value = "/setPassword", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
     @ApiImplicitParams({@ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String")})
-    public Object setPassword(String password, String username) {
-        if (StringUtils.isEmpty(password)) {
+            @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long")})
+    public Object setPassword(String password, Long id) {
+        if (StringUtils.isEmpty(password) || null == id) {
             return failed("参数校验失败");
         }
-        AuthUser authUser = SecurityUtils.getUser();
-        if (authUser == null) {
-            return failed("获取用户信息失败");
-        }
-        SysUser sysUser = sysUserService.get(authUser.getUserId());
+        SysUser sysUser = sysUserService.get(id);
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        if (sysUser.getUserType().contains("TEACHER") || sysUser.getUserType().contains("SYSTEM")) {
-            sysUser.setRealName(username);
-        } else {
-            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());
@@ -199,8 +183,7 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        String oldPassword = new BCryptPasswordEncoder().encode(updatePasswordDto.getOldPassword());
-        if (!oldPassword.equals(sysUser.getPassword())) {
+        if (!new BCryptPasswordEncoder().matches(updatePasswordDto.getOldPassword(), sysUser.getPassword())) {
             return failed("原密码错误");
         }
         sysUser.setPassword(new BCryptPasswordEncoder().encode(updatePasswordDto.getNewPasswordFirst()));
@@ -324,7 +307,7 @@ public class UserController extends BaseController {
                 throw new BizException("出生日期不可超过当前时间");
             }
             //手机号不能被占用
-            if(!StringUtil.isEmpty(sysUser.getPhone())){
+            if (!StringUtil.isEmpty(sysUser.getPhone())) {
                 SysUser newSysUser = sysUserService.queryByPhone(sysUser.getPhone());
                 if (newSysUser != null && !newSysUser.getId().equals(sysUser.getId())) {
                     return failed("手机号被占用");

+ 12 - 1
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysRoleMapper.xml

@@ -67,13 +67,24 @@
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="SysRole" parameterType="map">
-        SELECT * FROM sys_role WHERE del_flag_ = 0 ORDER BY update_time_ DESC
+        SELECT * FROM sys_role WHERE del_flag_ = 0
+        <where>
+        	<if test="search != null and search != ''">
+        		role_name_ like CONCAT('%',#{search},'%')
+        	</if>
+        </where>
+        ORDER BY update_time_ DESC
         <include refid="global.limit"/>
     </select>
 
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM sys_role WHERE del_flag_ = 0
+        <where>
+        	<if test="search != null and search != ''">
+        		role_name_ like CONCAT('%',#{search},'%')
+        	</if>
+        </where>
 	</select>
 
     <select id="findRoleByUserId" resultMap="SysRole">

+ 0 - 22
cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java

@@ -1,29 +1,7 @@
 package com.yonge.cooleshow.common.entity;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.yonge.cooleshow.common.exception.BizException;
-import com.yonge.toolset.thirdparty.exception.ThirdpartyException;
-import com.yonge.toolset.utils.http.HttpUtil;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.springframework.context.support.DefaultMessageSourceResolvable;
 import org.springframework.http.HttpStatus;
-import org.springframework.security.access.AccessDeniedException;
-import org.springframework.validation.BindException;
-import org.springframework.validation.FieldError;
-import org.springframework.web.bind.MethodArgumentNotValidException;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-
-import javax.crypto.Mac;
-import javax.crypto.spec.SecretKeySpec;
-import javax.servlet.http.HttpServletRequest;
-import java.net.URLEncoder;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * HttpResponse 返回结果

+ 18 - 18
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherWithdrawalController.java → cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java

@@ -13,26 +13,26 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
-import com.yonge.cooleshow.biz.dal.vo.TeacherWithdrawalVo;
+import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
-import com.yonge.cooleshow.biz.dal.entity.TeacherWithdrawal;
-import com.yonge.cooleshow.biz.dal.service.TeacherWithdrawalService;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
+import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
 
 @RestController
-@RequestMapping("/teacherWithdrawal")
-@Api(value = "老师账户提现表", tags = "老师账户提现表")
-public class TeacherWithdrawalController extends BaseController {
+@RequestMapping("/userWithdrawal")
+@Api(value = "用户账户提现表", tags = "用户账户提现表")
+public class UserWithdrawalController extends BaseController {
 
     @Autowired
-    private TeacherWithdrawalService teacherWithdrawalService;
+    private UserWithdrawalService userWithdrawalService;
 
 	/**
      * 查询单条
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<TeacherWithdrawalVo> detail(@PathVariable("id") Long id) {
-    	return succeed(teacherWithdrawalService.detail(id));
+    public HttpResponseResult<UserWithdrawalVo> detail(@PathVariable("id") Long id) {
+    	return succeed(userWithdrawalService.detail(id));
 	}
     
     /**
@@ -40,8 +40,8 @@ public class TeacherWithdrawalController extends BaseController {
      */
     @PostMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入teacherWithdrawalSearch")
-    public HttpResponseResult<PageInfo<TeacherWithdrawalVo>> page(@RequestBody TeacherWithdrawalSearch query) {
-		IPage<TeacherWithdrawalVo> pages = teacherWithdrawalService.selectPage(PageUtil.getPage(query), query);
+    public HttpResponseResult<PageInfo<UserWithdrawalVo>> page(@RequestBody TeacherWithdrawalSearch query) {
+		IPage<UserWithdrawalVo> pages = userWithdrawalService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
 	}
     
@@ -50,8 +50,8 @@ public class TeacherWithdrawalController extends BaseController {
 	 */
 	@PostMapping("/save")
 	@ApiOperation(value = "新增", notes = "传入teacherWithdrawal")
-	public HttpResponseResult save(@Valid @RequestBody TeacherWithdrawal teacherWithdrawal) {
-    	return status(teacherWithdrawalService.save(teacherWithdrawal));
+	public HttpResponseResult save(@Valid @RequestBody UserWithdrawal userWithdrawal) {
+    	return status(userWithdrawalService.save(userWithdrawal));
 	}
     
     /**
@@ -59,8 +59,8 @@ public class TeacherWithdrawalController extends BaseController {
 	 */
 	@PostMapping("/update")
 	@ApiOperation(value = "修改", notes = "传入teacherWithdrawal")
-	public HttpResponseResult update(@Valid @RequestBody TeacherWithdrawal teacherWithdrawal) {
-        return status(teacherWithdrawalService.updateById(teacherWithdrawal));
+	public HttpResponseResult update(@Valid @RequestBody UserWithdrawal userWithdrawal) {
+        return status(userWithdrawalService.updateById(userWithdrawal));
 	}
     
     /**
@@ -68,8 +68,8 @@ public class TeacherWithdrawalController extends BaseController {
 	 */
     @PostMapping("/submit")
     @ApiOperation(value = "新增或修改", notes = "传入teacherWithdrawal")
-	public HttpResponseResult submit(@Valid @RequestBody TeacherWithdrawal teacherWithdrawal) {
-        return status(teacherWithdrawalService.saveOrUpdate(teacherWithdrawal));
+	public HttpResponseResult submit(@Valid @RequestBody UserWithdrawal userWithdrawal) {
+        return status(userWithdrawalService.saveOrUpdate(userWithdrawal));
     }
 
  	/**
@@ -81,6 +81,6 @@ public class TeacherWithdrawalController extends BaseController {
         if (StringUtil.isEmpty(ids)) {
 			return failed("参数不能为空");
 		}
-		return status(teacherWithdrawalService.removeByIds(StringUtil.toLongList(ids)));
+		return status(userWithdrawalService.removeByIds(StringUtil.toLongList(ids)));
 	}
 }

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

@@ -33,7 +33,7 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
      * @updateTime 2022/4/6 11:40
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
-    List<Subject> findByParentId(@Param("parentId") Long parentId, @Param("delFlag") YesOrNoEnum delFlag);
+    List<Subject> findByParentId(@Param("parentId") Long parentId, @Param("delFlag") Boolean delFlag);
 
     /***
      * 通过id删除

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

@@ -1,9 +1,11 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.UserAccount;
 import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
@@ -26,5 +28,31 @@ public interface UserAccountDao extends BaseMapper<UserAccount>{
      * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountVo
 	 */
 	List<UserAccountVo> selectPage(@Param("page") IPage page, @Param("param") UserAccountSearch userAccount);
-	
+	/***
+	 * 账户变更(冻结)
+	 * @author liweifan
+	 * @param: userId
+	 * @param: transAmount
+	 * @updateTime 2022/4/7 17:54
+	 * @return: java.lang.Integer
+	 */
+    Integer frozenChangeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") InOrOutEnum inOrOut);
+	/***
+	 * 账户变更(解冻)
+	 * @author liweifan
+	 * @param: userId
+	 * @param: transAmount
+	 * @updateTime 2022/4/7 17:54
+	 * @return: java.lang.Integer
+	 */
+	Integer unfrozenChangeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") InOrOutEnum inOrOut);
+	/***
+	 * 账户变更(余额)
+	 * @author liweifan
+	 * @param: userId
+	 * @param: transAmount
+	 * @updateTime 2022/4/7 19:11
+	 * @return: java.lang.Integer
+	 */
+	Integer changeAccount(@Param("userId") Long userId, @Param("transAmount") BigDecimal transAmount,@Param("inOrOut") InOrOutEnum inOrOut);
 }

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

@@ -26,5 +26,21 @@ public interface UserBankCardDao extends BaseMapper<UserBankCard>{
      * @return: com.yonge.cooleshow.biz.dal.vo.UserBankCardVo
 	 */
 	List<UserBankCardVo> selectPage(@Param("page") IPage page, @Param("param") UserBankCardSearch userBankCard);
-	
+	/***
+	 * 查询用户默认银行卡
+	 * @author liweifan
+	 * @param: userId
+	 * @updateTime 2022/4/7 14:37
+	 * @return: com.yonge.cooleshow.biz.dal.vo.UserBankCardVo
+	 */
+	UserBankCardVo getDefaultBankByUserId(@Param("userId") Long userId);
+	/***
+	 * 获取用户银行卡
+	 * @author liweifan
+	 * @param: userId
+	 * @param: bankCardId
+	 * @updateTime 2022/4/7 15:36
+	 * @return: com.yonge.cooleshow.biz.dal.vo.UserBankCardVo
+	 */
+    UserBankCardVo getBankByUserIdAndCardId(@Param("userId") Long userId,@Param("bankCardId")  Long bankCardId);
 }

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherWithdrawalDao.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalDao.java

@@ -5,19 +5,19 @@ 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.entity.TeacherWithdrawal;
-import com.yonge.cooleshow.biz.dal.vo.TeacherWithdrawalVo;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
+import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
 
 
-public interface TeacherWithdrawalDao extends BaseMapper<TeacherWithdrawal>{
+public interface UserWithdrawalDao extends BaseMapper<UserWithdrawal>{
 	/**
 	 * 查询详情
      * @author liweifan
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherWithdrawalVo
 	 */
-	TeacherWithdrawalVo detail(@Param("id") Long id);
+	UserWithdrawalVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
@@ -25,6 +25,6 @@ public interface TeacherWithdrawalDao extends BaseMapper<TeacherWithdrawal>{
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherWithdrawalVo
 	 */
-	List<TeacherWithdrawalVo> selectPage(@Param("page") IPage page, @Param("param") TeacherWithdrawalSearch teacherWithdrawal);
+	List<UserWithdrawalVo> selectPage(@Param("page") IPage page, @Param("param") TeacherWithdrawalSearch teacherWithdrawal);
 	
 }

+ 63 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserAccountRecordDto.java

@@ -0,0 +1,63 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
+import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.FrozenTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 账户变更传输对象
+ *
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:46
+ */
+@ApiModel(value = "UserAccountRecordDto对象", description = "账户变更传输对象")
+public class UserAccountRecordDto extends UserAccountRecord {
+
+    @ApiModelProperty(value = "用户id", required = true)
+    private Long userId;
+    @ApiModelProperty(value = "变更冻结类型 NONE 无 FROZEN 冻结 UNFROZEN 解冻")
+    private FrozenTypeEnum frozenType;
+
+    public UserAccountRecordDto() {
+    }
+
+    public UserAccountRecordDto(Long userId, BigDecimal transAmount, InOrOutEnum inOrOut, AccountBizTypeEnum bizType) {
+        this.userId = userId;
+        this.setTransAmount(transAmount);
+        this.setInOrOut(inOrOut);
+        this.setBizType(bizType);
+    }
+
+    public UserAccountRecordDto(Long userId, BigDecimal transAmount, InOrOutEnum inOrOut, AccountBizTypeEnum bizType,
+                                Long bizId, String bizName, Long orderId) {
+        this.userId = userId;
+        this.setTransAmount(transAmount);
+        this.setInOrOut(inOrOut);
+        this.setBizType(bizType);
+        this.setBizId(bizId);
+        this.setBizName(bizName);
+        this.setOrderId(orderId);
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public FrozenTypeEnum getFrozenType() {
+        return frozenType;
+    }
+
+    public void setFrozenType(FrozenTypeEnum frozenType) {
+        this.frozenType = frozenType;
+    }
+}

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

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.biz.dal.dto.req;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:07
+ */
+@ApiModel(value = "WithdrawalReq对象", description = "用户发起提现申请对象")
+public class WithdrawalReq {
+    @NotNull(message = "缺少用户银行卡id")
+    @ApiModelProperty("用户银行卡id")
+    private Long bankCardId;
+    @NotNull(message = "缺少提现金额")
+    @ApiModelProperty("提现金额")
+    private BigDecimal amountWithdrawal;
+
+    public Long getBankCardId() {
+        return bankCardId;
+    }
+
+    public void setBankCardId(Long bankCardId) {
+        this.bankCardId = bankCardId;
+    }
+
+    public BigDecimal getAmountWithdrawal() {
+        return amountWithdrawal;
+    }
+
+    public void setAmountWithdrawal(BigDecimal amountWithdrawal) {
+        this.amountWithdrawal = amountWithdrawal;
+    }
+}

+ 0 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java

@@ -6,8 +6,6 @@ import java.util.List;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
-import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
-
 /**
  * 对应数据库表(subject):
  */

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

@@ -16,7 +16,7 @@ import java.math.BigDecimal;
 /**
  * 用户账户表
  */
-@TableName("user_account")
+@TableName("user_cash_account")
 @ApiModel(value = "UserAccount对象", description = "用户账户表")
 public class UserAccount implements Serializable {
 	private static final long serialVersionUID = 1L;

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

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -16,110 +18,121 @@ import java.math.BigDecimal;
 /**
  * 用户账户流水表
  */
-@TableName("user_account_record")
+@TableName("user_cash_account_record")
 @ApiModel(value = "UserAccountRecord对象", description = "用户账户流水表")
 public class UserAccountRecord implements Serializable {
-	private static final long serialVersionUID = 1L;
-    @ApiModelProperty("用户表id ")
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty("id ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
+    @ApiModelProperty("账户id ")
+    @TableField(value = "account_id_")
+    private Long accountId;
     @ApiModelProperty("交易金额 ")
-	@TableField(value = "trans_amount_")
+    @TableField(value = "trans_amount_")
     private BigDecimal transAmount;
     @ApiModelProperty("账户余额 ")
-	@TableField(value = "account_balance_")
+    @TableField(value = "account_balance_")
     private BigDecimal accountBalance;
-    @ApiModelProperty("收支类型:1、收入 2、支出 ")
-	@TableField(value = "in_or_out_")
-    private Integer inOrOut;
-    @ApiModelProperty("业务类型:1、陪练课 2、直播课 3、乐谱 4、提现 ")
-	@TableField(value = "biz_type_")
-    private Integer bizType;
+    @ApiModelProperty("收支类型:IN、收入 OUT、支出 ")
+    @TableField(value = "in_or_out_")
+    private InOrOutEnum inOrOut;
+    @ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 MUSIC、乐谱 WITHDRAWAL、提现 ")
+    @TableField(value = "biz_type_")
+    private AccountBizTypeEnum bizType;
     @ApiModelProperty("业务id ")
-	@TableField(value = "biz_id_")
+    @TableField(value = "biz_id_")
     private Long bizId;
     @ApiModelProperty("业务名称 ")
-	@TableField(value = "biz_name_")
+    @TableField(value = "biz_name_")
     private String bizName;
     @ApiModelProperty("订单id ")
-	@TableField(value = "order_id_")
+    @TableField(value = "order_id_")
     private Long orderId;
     @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;
 
-	public Long getId() {
+    public Long getId() {
         return id;
     }
 
     public void setId(Long id) {
         this.id = id;
     }
-    
-	public BigDecimal getTransAmount() {
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(Long accountId) {
+        this.accountId = accountId;
+    }
+
+    public BigDecimal getTransAmount() {
         return transAmount;
     }
 
     public void setTransAmount(BigDecimal transAmount) {
         this.transAmount = transAmount;
     }
-    
-	public BigDecimal getAccountBalance() {
+
+    public BigDecimal getAccountBalance() {
         return accountBalance;
     }
 
     public void setAccountBalance(BigDecimal accountBalance) {
         this.accountBalance = accountBalance;
     }
-    
-	public Integer getInOrOut() {
+
+    public InOrOutEnum getInOrOut() {
         return inOrOut;
     }
 
-    public void setInOrOut(Integer inOrOut) {
+    public void setInOrOut(InOrOutEnum inOrOut) {
         this.inOrOut = inOrOut;
     }
-    
-	public Integer getBizType() {
+
+    public AccountBizTypeEnum getBizType() {
         return bizType;
     }
 
-    public void setBizType(Integer bizType) {
+    public void setBizType(AccountBizTypeEnum bizType) {
         this.bizType = bizType;
     }
-    
-	public Long getBizId() {
+
+    public Long getBizId() {
         return bizId;
     }
 
     public void setBizId(Long bizId) {
         this.bizId = bizId;
     }
-    
-	public String getBizName() {
+
+    public String getBizName() {
         return bizName;
     }
 
     public void setBizName(String bizName) {
         this.bizName = bizName;
     }
-    
-	public Long getOrderId() {
+
+    public Long getOrderId() {
         return orderId;
     }
 
     public void setOrderId(Long orderId) {
         this.orderId = orderId;
     }
-    
-	public Date getCreateTime() {
+
+    public Date getCreateTime() {
         return createTime;
     }
 
     public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    
+
 }

+ 5 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserBankCard.java

@@ -1,9 +1,6 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -40,9 +37,6 @@ public class UserBankCard implements Serializable {
     @ApiModelProperty("开户行编码 ")
 	@TableField(value = "bank_code_")
     private String bankCode;
-    @ApiModelProperty("逻辑删除 ")
-	@TableField(value = "del_flag_")
-    private Byte delFlag;
     @ApiModelProperty("是否默认 ")
 	@TableField(value = "is_default_")
     private Byte isDefault;
@@ -56,7 +50,10 @@ public class UserBankCard implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
-
+    @ApiModelProperty("逻辑删除 ")
+    @TableField(value = "del_flag_")
+    @TableLogic
+    private Byte delFlag;
 	public Long getId() {
         return id;
     }

+ 25 - 36
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherWithdrawal.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawal.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -14,11 +15,11 @@ import org.springframework.format.annotation.DateTimeFormat;
 import java.math.BigDecimal;
 
 /**
- * 老师账户提现表
+ * 用户账户提现表
  */
-@TableName("teacher_withdrawal")
-@ApiModel(value = "TeacherWithdrawal对象", description = "老师账户提现表")
-public class TeacherWithdrawal implements Serializable {
+@TableName("user_withdrawal")
+@ApiModel(value = "UserWithdrawal对象", description = "用户账户提现表")
+public class UserWithdrawal implements Serializable {
 	private static final long serialVersionUID = 1L;
     @ApiModelProperty("提现id ")
     @TableId(value = "id_", type = IdType.AUTO)
@@ -26,9 +27,6 @@ public class TeacherWithdrawal implements Serializable {
     @ApiModelProperty("用户表id ")
 	@TableField(value = "user_id_")
     private Long userId;
-    @ApiModelProperty("账户变动记录id ")
-	@TableField(value = "user_account_record_id_")
-    private Long userAccountRecordId;
     @ApiModelProperty("提现金额 ")
 	@TableField(value = "amount_")
     private BigDecimal amount;
@@ -37,13 +35,10 @@ public class TeacherWithdrawal implements Serializable {
     private BigDecimal plantformFee;
     @ApiModelProperty("实际到账金额 ")
 	@TableField(value = "actual_amount_")
-    private String actualAmount;
+    private BigDecimal actualAmount;
     @ApiModelProperty("银行卡 ")
 	@TableField(value = "bank_card_")
     private String bankCard;
-    @ApiModelProperty("开户行 ")
-	@TableField(value = "bank_name_")
-    private String bankName;
     @ApiModelProperty("银行流水号 ")
 	@TableField(value = "bank_flow_no_")
     private String bankFlowNo;
@@ -52,6 +47,11 @@ public class TeacherWithdrawal 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、不通过")
+    @TableField(value = "status_")
+    private AuthStatusEnum status;
+    @ApiModelProperty("审核人")
+    private Long verifyUserId;
     @ApiModelProperty("发起时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -62,9 +62,7 @@ public class TeacherWithdrawal implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
-    @ApiModelProperty("提现状态 ")
-	@TableField(value = "status_")
-    private Byte status;
+
 
 	public Long getId() {
         return id;
@@ -82,14 +80,6 @@ public class TeacherWithdrawal implements Serializable {
         this.userId = userId;
     }
     
-	public Long getUserAccountRecordId() {
-        return userAccountRecordId;
-    }
-
-    public void setUserAccountRecordId(Long userAccountRecordId) {
-        this.userAccountRecordId = userAccountRecordId;
-    }
-    
 	public BigDecimal getAmount() {
         return amount;
     }
@@ -106,11 +96,11 @@ public class TeacherWithdrawal implements Serializable {
         this.plantformFee = plantformFee;
     }
     
-	public String getActualAmount() {
+	public BigDecimal getActualAmount() {
         return actualAmount;
     }
 
-    public void setActualAmount(String actualAmount) {
+    public void setActualAmount(BigDecimal actualAmount) {
         this.actualAmount = actualAmount;
     }
     
@@ -121,15 +111,7 @@ public class TeacherWithdrawal implements Serializable {
     public void setBankCard(String bankCard) {
         this.bankCard = bankCard;
     }
-    
-	public String getBankName() {
-        return bankName;
-    }
 
-    public void setBankName(String bankName) {
-        this.bankName = bankName;
-    }
-    
 	public String getBankFlowNo() {
         return bankFlowNo;
     }
@@ -161,13 +143,20 @@ public class TeacherWithdrawal implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    
-	public Byte getStatus() {
+
+    public AuthStatusEnum getStatus() {
         return status;
     }
 
-    public void setStatus(Byte status) {
+    public void setStatus(AuthStatusEnum status) {
         this.status = status;
     }
-    
+
+    public Long getVerifyUserId() {
+        return verifyUserId;
+    }
+
+    public void setVerifyUserId(Long verifyUserId) {
+        this.verifyUserId = verifyUserId;
+    }
 }

+ 7 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroup.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.yonge.cooleshow.biz.dal.valid.AddGroup;
+import com.yonge.cooleshow.biz.dal.valid.UpdateGroup;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -22,11 +24,12 @@ public class VideoLessonGroup extends BaseEntity {
 
     @TableId(value = "id_", type = IdType.AUTO)
     @ApiModelProperty(value = "主键id")
+	@NotNull(message = "组id不能为空;",groups = {UpdateGroup.class})
     private Long id;  //主键ID
 
     @TableField("lesson_name_")
     @ApiModelProperty(value = "课程名称",required = true)
-	@NotBlank(message = "课程名称不能为空;")
+	@NotBlank(message = "课程名称不能为空;",groups = {AddGroup.class,UpdateGroup.class})
     private String lessonName;  //课程名称
 
     @TableField("lesson_subject_")
@@ -35,17 +38,17 @@ public class VideoLessonGroup extends BaseEntity {
 
     @TableField("lesson_desc_")
     @ApiModelProperty(value = "课程介绍",required = true)
-	@NotBlank(message = "课程介绍不能为空;")
+	@NotBlank(message = "课程介绍不能为空;",groups = {AddGroup.class,UpdateGroup.class})
     private String lessonDesc;  //课程介绍
 
     @TableField("lesson_price_")
     @ApiModelProperty(value = "课程价格",required = true)
-	@NotNull(message = "课程价格不能为空;")
+	@NotNull(message = "课程价格不能为空;",groups = {AddGroup.class,UpdateGroup.class})
     private Integer lessonPrice;  //课程价格
 
     @TableField("lesson_cover_url_")
     @ApiModelProperty(value = "课程封面图片URL",required = true)
-	@NotBlank(message = "课程封面图片URL不能为空;")
+	@NotBlank(message = "课程封面图片URL不能为空;",groups = {AddGroup.class,UpdateGroup.class})
     private String lessonCoverUrl;  //课程封面图片URL
 
     @TableField("teacher_id_")

+ 5 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroupDetail.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.yonge.cooleshow.biz.dal.valid.AddGroup;
+import com.yonge.cooleshow.biz.dal.valid.UpdateGroup;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -30,17 +32,17 @@ public class VideoLessonGroupDetail extends BaseEntity {
 
     @TableField("video_title_")
     @ApiModelProperty(value = "视频标题", required = true)
-    @NotBlank(message = "课程标题不能为空;")
+    @NotBlank(message = "课程标题不能为空;",groups = {AddGroup.class,UpdateGroup.class})
     private String videoTitle;  //视频标题
 
     @TableField("video_content_")
     @ApiModelProperty(value = "视频内容", required = true)
-    @NotBlank(message = "课程内容不能为空;")
+    @NotBlank(message = "课程内容不能为空;",groups = {AddGroup.class,UpdateGroup.class})
     private String videoContent;  //视频内容
 
     @TableField("video_url_")
     @ApiModelProperty(value = "视频文件URL", required = true)
-    @NotBlank(message = "课程视频URL不能为空;")
+    @NotBlank(message = "课程视频URL不能为空;",groups = {AddGroup.class,UpdateGroup.class})
     private String videoUrl;  //视频文件URL
 
     @TableField("cover_url_")

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

@@ -0,0 +1,53 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * 账户流水枚举
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:48
+ */
+public enum AccountBizTypeEnum implements BaseEnum<String, AccountBizTypeEnum> {
+
+    PRACTICE("陪练课", InOrOutEnum.IN),
+    LIVE("直播课", InOrOutEnum.IN),
+    MUSIC("乐谱", InOrOutEnum.IN),
+    WITHDRAWAL("提现", InOrOutEnum.OUT);
+    @EnumValue
+    private String code;
+    private String msg;
+    //收入、支出
+    private InOrOutEnum inOrOut;
+
+    AccountBizTypeEnum(String msg, InOrOutEnum inOrOut) {
+        this.code = getCode();
+        this.msg = msg;
+        this.inOrOut = inOrOut;
+    }
+
+    @Override
+    public String getCode() {
+        return this.name();
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public InOrOutEnum getInOrOut() {
+        return inOrOut;
+    }
+
+    public void setInOrOut(InOrOutEnum inOrOut) {
+        this.inOrOut = inOrOut;
+    }
+}

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java

@@ -17,7 +17,8 @@ public enum CacheNameEnum implements BaseEnum<String, CacheNameEnum> {
     STUDENT_HOME_TOTAL("学生首页统计缓存"),
 
     LOCK_EXECUTE_ORDER("用户下单锁"),
-    LOCK_PAY_ORDER("用户付款锁")
+    LOCK_PAY_ORDER("用户付款锁"),
+    LOCK_CHANGE_ACCOUNT("账户变更锁"),
     ;
     /***
      * 缓存描述

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/FrozenTypeEnum.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * 账户变更冻结类型
+ * @Author: liweifan
+ * @Data: 2022/4/7 20:07
+ */
+public enum  FrozenTypeEnum implements BaseEnum<String, FrozenTypeEnum> {
+    NONE("无"),
+    FROZEN("冻结"),
+    UNFROZEN("解冻");
+    @EnumValue
+    private String code;
+    private String msg;
+
+    FrozenTypeEnum(String msg) {
+        this.code = getCode();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.name();
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

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

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * 收入支出枚举
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:48
+ */
+public enum InOrOutEnum implements BaseEnum<String, InOrOutEnum> {
+
+    IN("收入"),
+    OUT("支出");
+    @EnumValue
+    private String code;
+    private String msg;
+
+    InOrOutEnum(String msg) {
+        this.code = getCode();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.name();
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

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

@@ -65,8 +65,6 @@ public enum TeacherTypeEnum implements BaseEnum<String, TeacherTypeEnum> {
         }
         if (teacherType.length() > 0) {
             teacherType = teacherType.substring(1);
-        } else {
-            teacherType = TeacherTypeEnum.TOURIST.getCode();
         }
         return teacherType;
     }

+ 3 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SubjectQueryInfo.java

@@ -2,7 +2,6 @@ package com.yonge.cooleshow.biz.dal.queryInfo;
 
 import io.swagger.annotations.ApiModelProperty;
 
-import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 
 public class SubjectQueryInfo extends QueryInfo {
@@ -13,13 +12,13 @@ public class SubjectQueryInfo extends QueryInfo {
     private String queryType;
 
     @ApiModelProperty(value = "节点状态,默认0未删除,1删除",required = false)
-    private YesOrNoEnum delFlag = YesOrNoEnum.NO;
+    private Boolean delFlag = false;
 
-    public YesOrNoEnum getDelFlag() {
+    public Boolean getDelFlag() {
         return delFlag;
     }
 
-    public void setDelFlag(YesOrNoEnum delFlag) {
+    public void setDelFlag(Boolean delFlag) {
         this.delFlag = delFlag;
     }
 

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

@@ -51,5 +51,5 @@ public interface SubjectService extends BaseService<Long, Subject> {
 	 * @updateTime 2022/3/21 17:23
 	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.SubjectSelectVo>
 	 */
-	List<SubjectSelectVo> subjectSelect();
+	List<Subject> subjectSelect();
 }

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

@@ -1,29 +0,0 @@
-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.TeacherWithdrawalVo;
-import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
-import com.yonge.cooleshow.biz.dal.entity.TeacherWithdrawal;
-
-/**
- * 老师账户提现表 服务类
- * @author liweifan
- * @date 2022-03-30
- */
-public interface TeacherWithdrawalService extends IService<TeacherWithdrawal>  {
-
-	/**
-     * 查询详情
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-	TeacherWithdrawalVo detail(Long id);
-
-    /**
-     * 分页查询
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-    IPage<TeacherWithdrawalVo> selectPage(IPage<TeacherWithdrawalVo> page, TeacherWithdrawalSearch query);
-}

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

@@ -2,9 +2,12 @@ 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.UserAccountRecordDto;
+import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
 import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserAccountSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserAccount;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 /**
  * 用户账户表 服务类
@@ -26,4 +29,12 @@ public interface UserAccountService extends IService<UserAccount>  {
  	 * @date 2022-03-30
      */
     IPage<UserAccountVo> selectPage(IPage<UserAccountVo> page, UserAccountSearch query);
+    /***
+     * 账户变更(账户变更使用该方法,有分布式锁)
+     * @author liweifan
+     * @param: accountRecordDto
+     * @updateTime 2022/4/7 16:40
+     * @return: java.lang.Integer
+     */
+    HttpResponseResult<UserAccountRecord> accountChange(UserAccountRecordDto accountRecordDto);
 }

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

@@ -0,0 +1,49 @@
+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.req.WithdrawalReq;
+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.vo.res.WithdrawalInfoRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+
+/**
+ * 用户账户提现表 服务类
+ * @author liweifan
+ * @date 2022-03-30
+ */
+public interface UserWithdrawalService extends IService<UserWithdrawal>  {
+
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+	UserWithdrawalVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+    IPage<UserWithdrawalVo> selectPage(IPage<UserWithdrawalVo> page, TeacherWithdrawalSearch query);
+	/***
+	 * 查询提现页面信息
+	 * @author liweifan
+	 * @param: userId
+	 * @updateTime 2022/4/7 14:31
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.WithdrawalInfoRes>
+	 */
+    HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo(Long userId);
+	/***
+	 * 用户发起提现申请
+	 * @author liweifan
+	 * @param: userId
+	 * @param: withdrawalReq
+	 * @updateTime 2022/4/7 15:26
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+	 */
+	HttpResponseResult<Boolean> withdrawal(Long userId, WithdrawalReq withdrawalReq);
+}

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

@@ -28,4 +28,8 @@ public interface VideoLessonGroupService extends IService<VideoLessonGroup> {
     IPage<VideoLessonTeacherVo> selectTeacherPage(IPage<VideoLessonTeacherVo> page, VideoLessonSearch search);
 
     IPage<VideoLessonPurchaseVo> selectPurchaseStudent(IPage<VideoLessonPurchaseVo> page, VideoLessonSearch search);
+
+    VideoLessonStudentVo selectVideoLesson(Long groupId);
+
+    void update(VideoLessonVo lessonVo, SysUser sysUser);
 }

+ 10 - 25
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java

@@ -3,16 +3,11 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import com.yonge.cooleshow.biz.dal.vo.SubjectSelectVo;
-
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
-import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.queryInfo.SubjectQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.common.dal.BaseDAO;
@@ -70,42 +65,32 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
     }
 
     @Override
-    public List<SubjectSelectVo> subjectSelect() {
+    public List<Subject> subjectSelect() {
         List<Subject> allList = subjectDao.findAll(new HashMap<>());
-        List<SubjectSelectVo> allListVo = new ArrayList<>();
-        allList.stream().forEach(o -> {
-            SubjectSelectVo subjectSelectVo = new SubjectSelectVo();
-            try {
-                BeanUtils.copyProperties(subjectSelectVo, o);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-            allListVo.add(subjectSelectVo);
-        });
 
-        List<SubjectSelectVo> parents = allListVo.stream()
+        List<Subject> parents = allList.stream()
                 .filter(o -> (null == o.getParentSubjectId() || o.getParentSubjectId().equals(0L) ))
                 .collect(Collectors.toList());
 
-        List<SubjectSelectVo> subjects = allListVo.stream()
+        List<Subject> subjects = allList.stream()
                 .filter(o -> !(null == o.getParentSubjectId() || o.getParentSubjectId().equals(0L)))
                 .collect(Collectors.toList());
 
-        for (SubjectSelectVo parent : parents) {
+        for (Subject parent : parents) {
             if (null == parent.getId()) {
                 continue;
             }
-            for (SubjectSelectVo subject : subjects) {
+            for (Subject subject : subjects) {
                 if (null == subject.getId() || null == subject.getParentSubjectId()) {
                     continue;
                 }
                 if (subject.getParentSubjectId().equals(parent.getId())) {
-                    List<SubjectSelectVo> children = parent.getChildren();
+                    List<Subject> children = parent.getSubjects();
                     if(CollectionUtils.isEmpty(children)){
                         children = new ArrayList<>();
                     }
                     children.add(subject);
-                    parent.setChildren(children);
+                    parent.setSubjects(children);
                 }
             }
         }
@@ -138,17 +123,17 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
      * @updateTime 2022/4/6 11:33
      * @return: com.yonge.cooleshow.biz.dal.entity.Subject
      */
-    private Subject getTree(Subject sub, YesOrNoEnum yesOrNoEnum) {
+    private Subject getTree(Subject sub, Boolean delFlag) {
         //得到根节点对象
         //获取子节点list
-        List<Subject> subjects = subjectDao.findByParentId(sub.getId(), yesOrNoEnum);
+        List<Subject> subjects = subjectDao.findByParentId(sub.getId(), delFlag);
         //如果存在子节点
         if (subjects != null && subjects.size() > 0) {
             //将子节点list放入父节点对象
             sub.setSubjects(subjects);
             //遍历子节点....
             for (Subject subject : subjects) {
-                getTree(subject, yesOrNoEnum);
+                getTree(subject, delFlag);
             }
         }
         return sub;

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

@@ -82,7 +82,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
     @Override
     public IPage<TeacherVo> selectPage(IPage<TeacherVo> page, TeacherSearch search) {
-        return page.setRecords(baseMapper.selectPage(page, search));
+        List<TeacherVo> teacherVos = baseMapper.selectPage(page, search);
+        return page.setRecords(teacherVos);
     }
 
     @Override
@@ -115,7 +116,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
         teacherHomeVo.setHeardUrl(avatar);
 
-        TeacherAuthEntryRecord entryRecord = entryRecordService.getLastRecordByUserId(user.getId());
+        TeacherAuthEntryRecordVo entryRecord = entryRecordService.getLastRecordByUserId(user.getId());
         if (null == entryRecord) {
             teacherHomeVo.setEntryStatus(AuthStatusEnum.UNPAALY);
         } else {
@@ -299,12 +300,14 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
      */
     private Teacher getTeacherDetil(Teacher teacher, TeacherSubmitReq teacherSubmitReq) {
         teacher.setSubjectId(teacherSubmitReq.getSubjectId());
-
-        String[] teacherTypes = teacherSubmitReq.getTeacherType().split(",");
         teacher.setEntryFlag(YesOrNoEnum.NO);
         teacher.setEntryAuthDate(null);
         teacher.setMusicianFlag(YesOrNoEnum.NO);
         teacher.setMusicianDate(null);
+        if(StringUtil.isEmpty(teacherSubmitReq.getTeacherType())){
+            return teacher;
+        }
+        String[] teacherTypes = teacherSubmitReq.getTeacherType().split(",");
         for (String teacherType : teacherTypes) {
             if (TeacherTypeEnum.ENTRY.getCode().equals(teacherType)) {
                 teacher.setEntryFlag(YesOrNoEnum.YES);

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

@@ -1,27 +0,0 @@
-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.TeacherWithdrawal;
-import com.yonge.cooleshow.biz.dal.vo.TeacherWithdrawalVo;
-import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
-import com.yonge.cooleshow.biz.dal.dao.TeacherWithdrawalDao;
-import com.yonge.cooleshow.biz.dal.service.TeacherWithdrawalService;
-
-
-@Service
-public class TeacherWithdrawalServiceImpl extends ServiceImpl<TeacherWithdrawalDao, TeacherWithdrawal> implements TeacherWithdrawalService {
-
-	@Override
-    public TeacherWithdrawalVo detail(Long id) {
-        TeacherWithdrawalVo detail = baseMapper.detail(id);
-        return detail;
-    }
-    
-     @Override
-    public IPage<TeacherWithdrawalVo> selectPage(IPage<TeacherWithdrawalVo> page, TeacherWithdrawalSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
-    }
-	
-}

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

@@ -2,6 +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.dto.UserAccountRecordDto;
+import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
+import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.biz.dal.enums.FrozenTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
+import com.yonge.cooleshow.biz.dal.support.DistributedLock;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.exception.BizException;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.UserAccount;
 import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
@@ -9,19 +19,66 @@ import com.yonge.cooleshow.biz.dal.dto.search.UserAccountSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserAccountDao;
 import com.yonge.cooleshow.biz.dal.service.UserAccountService;
 
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
 
 @Service
 public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAccount> implements UserAccountService {
+    @Autowired
+    private UserAccountRecordService userAccountRecordService;
+    @Autowired
+    private RedissonClient redissonClient;
 
-	@Override
+    @Override
     public UserAccountVo detail(Long id) {
         UserAccountVo detail = baseMapper.detail(id);
+        if (null == detail) {
+            throw new BizException("用户没有开通账户");
+        }
         return detail;
     }
-    
-     @Override
-    public IPage<UserAccountVo> selectPage(IPage<UserAccountVo> page, UserAccountSearch query){
+
+    @Override
+    public IPage<UserAccountVo> selectPage(IPage<UserAccountVo> page, UserAccountSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    public HttpResponseResult<UserAccountRecord> accountChange(UserAccountRecordDto accountRecordDto) {
+        if (null == accountRecordDto.getUserId() || null == accountRecordDto.getTransAmount()
+                || null == accountRecordDto.getInOrOut() || null == accountRecordDto.getBizType()) {
+            throw new BizException("缺少参数");
+        }
+
+        Future<HttpResponseResult<UserAccountRecord>> httpResponseResultFuture = DistributedLock.of(redissonClient)
+                .callIfLockCanGet(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(accountRecordDto.getUserId())
+                        , () -> doAccountChange(accountRecordDto), 60L, TimeUnit.SECONDS);
+        try {
+            return httpResponseResultFuture.get();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BizException("账户变更失败");
+        }
+    }
+
+    private HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecordDto accountRecordDto) {
+        if (FrozenTypeEnum.FROZEN.equals(accountRecordDto.getFrozenType())) {
+            baseMapper.frozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut());
+        } else if (FrozenTypeEnum.UNFROZEN.equals(accountRecordDto.getFrozenType())) {
+            baseMapper.unfrozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut());
+        } else {
+            baseMapper.changeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut());
+        }
+
+        UserAccountVo detail = detail(accountRecordDto.getUserId());
+        if (detail.getAmountTotal().doubleValue() < 0
+                || detail.getAmountUsable().doubleValue() < 0 || detail.getAmountFrozen().doubleValue() < 0) {
+            throw new BizException("账户变更失败");
+        }
+        //插入账户变更记录
+        userAccountRecordService.save(accountRecordDto);
+        return HttpResponseResult.succeed(accountRecordDto);
+    }
+
 }

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

@@ -0,0 +1,175 @@
+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.constant.SysConfigConstant;
+import com.yonge.cooleshow.biz.dal.dao.UserAccountDao;
+import com.yonge.cooleshow.biz.dal.dao.UserBankCardDao;
+import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
+import com.yonge.cooleshow.biz.dal.dto.req.WithdrawalReq;
+import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
+import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.service.UserAccountService;
+import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
+import com.yonge.cooleshow.biz.dal.vo.UserBankCardVo;
+import com.yonge.cooleshow.biz.dal.vo.res.WithdrawalInfoRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.exception.BizException;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
+import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
+import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
+import com.yonge.cooleshow.biz.dal.dao.UserWithdrawalDao;
+import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+@Service
+public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, UserWithdrawal> implements UserWithdrawalService {
+    private final static Logger log = LoggerFactory.getLogger(UserWithdrawalServiceImpl.class);
+
+    @Autowired
+    private UserBankCardDao bankCardDao;
+    @Autowired
+    private UserAccountService userAccountService;
+    @Autowired
+    private SysConfigService sysConfigService;
+
+
+    @Override
+    public UserWithdrawalVo detail(Long id) {
+        UserWithdrawalVo detail = baseMapper.detail(id);
+        return detail;
+    }
+
+    @Override
+    public IPage<UserWithdrawalVo> selectPage(IPage<UserWithdrawalVo> page, TeacherWithdrawalSearch query) {
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    @Override
+    public HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo(Long userId) {
+        WithdrawalInfoRes withdrawalInfoRes = new WithdrawalInfoRes();
+        UserBankCardVo defaultBank = bankCardDao.getDefaultBankByUserId(userId);
+        if (null == defaultBank) {
+            return HttpResponseResult.failed("用户未绑定银行卡");
+        }
+        withdrawalInfoRes.setUserBankCard(defaultBank);
+        //获取平台提现手续费
+        BigDecimal withdrawalServiceFee = getWithdrawalServiceFee();
+        withdrawalInfoRes.setWithdrawalServiceFee(withdrawalServiceFee);
+        //获取用户可用于提现余额
+        withdrawalInfoRes.setAmountWithdrawal(getAmountWithdrawal(userId));
+        return HttpResponseResult.succeed(withdrawalInfoRes);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<Boolean> withdrawal(Long userId, WithdrawalReq withdrawalReq) {
+        BigDecimal withdrawalServiceFee = getWithdrawalServiceFee();
+        //校验金额
+        if (withdrawalReq.getAmountWithdrawal().subtract(withdrawalServiceFee).floatValue() < 0) {
+            return HttpResponseResult.failed("提现金额过小");
+        }
+        //获取用户提现金额
+        BigDecimal amountWithdrawal = getAmountWithdrawal(userId);
+        //比较大小
+        if (amountWithdrawal.compareTo(withdrawalReq.getAmountWithdrawal()) < 0) {
+            return HttpResponseResult.failed("账户余额不足");
+        }
+        //获取提现银行卡
+        UserBankCardVo bankCardVo = bankCardDao.getBankByUserIdAndCardId(userId, withdrawalReq.getBankCardId());
+        if (null == bankCardVo) {
+            return HttpResponseResult.failed("未找到用户绑卡信息");
+        }
+        //插入用户提现表
+        UserWithdrawal userWithdrawal = insertUserWithdrawal(userId, withdrawalReq, bankCardVo, withdrawalServiceFee);
+        //插入账户变更
+        UserAccountRecordDto accountRecordDto = new UserAccountRecordDto(
+                userId, withdrawalReq.getAmountWithdrawal(), InOrOutEnum.OUT, AccountBizTypeEnum.WITHDRAWAL,
+                userWithdrawal.getId(), "老师提现", null
+        );
+        HttpResponseResult<UserAccountRecord> accountChange = userAccountService.accountChange(accountRecordDto);
+        if(accountChange.getStatus()){
+            return HttpResponseResult.succeed(true);
+        }else{
+            throw new BizException("提现失败");
+        }
+    }
+
+    /***
+     * 入提现表
+     * @author liweifan
+     * @param: userId
+     * @param: withdrawalReq
+     * @param: bankCardVo
+     * @param: userAccountRecord
+     * @updateTime 2022/4/7 16:46
+     */
+    private UserWithdrawal insertUserWithdrawal(Long userId, WithdrawalReq withdrawalReq,
+                                                UserBankCardVo bankCardVo, BigDecimal withdrawalServiceFee) {
+        UserWithdrawal userWithdrawal = new UserWithdrawal();
+        userWithdrawal.setUserId(userId);
+        userWithdrawal.setAmount(withdrawalReq.getAmountWithdrawal());
+        userWithdrawal.setPlantformFee(withdrawalServiceFee);
+
+        BigDecimal actualAmount = withdrawalReq.getAmountWithdrawal().subtract(withdrawalServiceFee);
+        userWithdrawal.setActualAmount(actualAmount);
+        userWithdrawal.setBankCard(bankCardVo.getBankCard());
+        //todo 银行流水号
+
+        userWithdrawal.setCreateTime(new Date());
+        userWithdrawal.setUpdateTime(new Date());
+        userWithdrawal.setStatus(AuthStatusEnum.DOING);
+        baseMapper.insert(userWithdrawal);
+        return userWithdrawal;
+    }
+
+    /***
+     * 获取平台提现服务费
+     * @author liweifan
+     * @param: userId
+     * @updateTime 2022/4/7 14:59
+     * @return: java.math.BigDecimal
+     */
+    private BigDecimal getWithdrawalServiceFee() {
+        BigDecimal withdrawalServiceFee = new BigDecimal(0);
+        try {
+            String configValue = sysConfigService.findConfigValue(SysConfigConstant.WITHDRAWAL_SERVICE_FEE);
+            withdrawalServiceFee = new BigDecimal(configValue);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info("获取平台配置失败 key={}", SysConfigConstant.WITHDRAWAL_SERVICE_FEE);
+        }
+        return withdrawalServiceFee;
+    }
+
+    /***
+     * 获取用户可提现金额
+     * @author liweifan
+     * @param: userId
+     * @param: withdrawalServiceFee
+     * @updateTime 2022/4/7 15:02
+     * @return: java.math.BigDecimal
+     */
+    private BigDecimal getAmountWithdrawal(Long userId) {
+        //查询用户账户余额
+        UserAccountVo detail = userAccountService.detail(userId);
+        BigDecimal subtract = detail.getAmountUsable();
+        if (subtract.intValue() < 0) {
+            subtract = new BigDecimal(0);
+        }
+        return subtract;
+    }
+
+}

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

@@ -130,4 +130,59 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     public IPage<VideoLessonPurchaseVo> selectPurchaseStudent(IPage<VideoLessonPurchaseVo> page, VideoLessonSearch search) {
         return page.setRecords(baseMapper.selectPurchaseStudent(page, search));
     }
+
+    /**
+     * @Description: 根据组id查询视频课&视频课组
+     * @Author: cy
+     * @Date: 2022/4/7
+     */
+    @Override
+    public VideoLessonStudentVo selectVideoLesson(Long groupId) {
+        VideoLessonStudentVo lessonStudentVo = new VideoLessonStudentVo();
+
+        VideoLessonGroupSearch query = new VideoLessonGroupSearch();
+        query.setGroupId(groupId);
+        List<VideoLessonGroupVo> lessonGroup = videoLessonGroupDao.selectPage(null, query);
+        if (lessonGroup.isEmpty()){
+            return lessonStudentVo;
+        }
+        lessonStudentVo.setLessonGroup(lessonGroup.get(0));
+
+        VideoLessonSearch search = new VideoLessonSearch();
+        search.setVideoLessonGroupId(groupId);
+        lessonStudentVo.setDetailList(videoLessonGroupDetailDao.selectPage(null, search));
+        return lessonStudentVo;
+    }
+
+    /**
+     * @Description: 修改视频课组&视频课
+     * @Author: cy
+     * @Date: 2022/4/7
+     */
+    @Override
+    public void update(VideoLessonVo lessonVo, SysUser sysUser) {
+        VideoLessonGroup lessonGroup = lessonVo.getLessonGroup();
+        List<VideoLessonGroupDetail> lessonList = lessonVo.getLessonList();
+
+        //清除原有组&课
+        videoLessonGroupDao.deleteById(lessonGroup.getId());
+        videoLessonGroupDetailDao.deleteByGroupId(lessonGroup.getId());
+
+        //添加组
+        lessonGroup.setTeacherId(sysUser.getId());
+        videoLessonGroupDao.insert(lessonGroup);
+
+        for (VideoLessonGroupDetail detail : lessonList) {
+            detail.setVideoLessonGroupId(lessonGroup.getId());
+            detail.setTeacherId(sysUser.getId());
+        }
+
+        //添加课程
+        videoLessonGroupDetailDao.insertVideoLesson(lessonList);
+
+        //刷新统计
+        VideoLessonGroupUpVo groupUpVo = new VideoLessonGroupUpVo();
+        groupUpVo.setId(lessonGroup.getId());
+        videoLessonGroupDao.updateGroup(groupUpVo);
+    }
 }

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

@@ -8,7 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
  * @Author: liweifan
  * @Data: 2022/3/21 13:34
  */
-@ApiModel(value = "TeacherAuthEntryRecordVo对象", description = "老师入驻审核详情")
+@ApiModel(value = "MusicianAuthEntryRecordVo对象", description = "音乐人审核详情")
 public class MusicianAuthEntryRecordVo extends TeacherAuthMusicianRecord {
 
     @ApiModelProperty(value = "真实姓名")

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

@@ -11,7 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
  */
 @ApiModel(value = "TeacherAuthEntryRecordVo对象", description = "老师入驻审核详情")
 public class TeacherAuthEntryRecordVo extends TeacherAuthEntryRecord {
-    private static final long serialVersionUID = 1123L;
+    private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "真实姓名")
     private String realName;

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderPaymentVo.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/7 17:15
+ */
+@ApiModel(value = "UserOrderPaymentVo对象", description = "订单支付对象")
+public class UserOrderPaymentVo extends UserOrderPayment {
+    private static final long serialVersionUID = 1L;
+
+}

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherWithdrawalVo.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserWithdrawalVo.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.yonge.cooleshow.biz.dal.entity.TeacherWithdrawal;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
 import io.swagger.annotations.ApiModel;
 
 /**
@@ -8,7 +8,7 @@ import io.swagger.annotations.ApiModel;
  * @Data: 2022-03-30 13:53:51
  */
 @ApiModel(value = "TeacherWithdrawalVo对象", description = "老师账户提现表查询视图对象")
-public class TeacherWithdrawalVo extends TeacherWithdrawal{
+public class UserWithdrawalVo extends UserWithdrawal {
 	private static final long serialVersionUID = 1L;
 
 }

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

@@ -0,0 +1,47 @@
+package com.yonge.cooleshow.biz.dal.vo.res;
+
+import com.yonge.cooleshow.biz.dal.entity.UserBankCard;
+import com.yonge.cooleshow.biz.dal.vo.UserBankCardVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+/**
+ * 老师提现页面返回对象
+ * @Author: liweifan
+ * @Data: 2022/4/7 14:24
+ */
+@ApiModel(value = "WithdrawalInfoRes", description = "老师提现页面返回对象")
+public class WithdrawalInfoRes {
+    @ApiModelProperty("用户银行卡")
+    private UserBankCardVo userBankCard;
+    @ApiModelProperty("可提现余额")
+    private BigDecimal amountWithdrawal;
+    @ApiModelProperty("平台提现手续费")
+    private BigDecimal withdrawalServiceFee;
+
+    public UserBankCardVo getUserBankCard() {
+        return userBankCard;
+    }
+
+    public void setUserBankCard(UserBankCardVo userBankCard) {
+        this.userBankCard = userBankCard;
+    }
+
+    public BigDecimal getAmountWithdrawal() {
+        return amountWithdrawal;
+    }
+
+    public void setAmountWithdrawal(BigDecimal amountWithdrawal) {
+        this.amountWithdrawal = amountWithdrawal;
+    }
+
+    public BigDecimal getWithdrawalServiceFee() {
+        return withdrawalServiceFee;
+    }
+
+    public void setWithdrawalServiceFee(BigDecimal withdrawalServiceFee) {
+        this.withdrawalServiceFee = withdrawalServiceFee;
+    }
+}

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

@@ -1,45 +1,45 @@
 <?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.StudentCourseHomeworkDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.StudentCourseHomework">
-            <result column="id_" property="id" />
-	        <result column="course_homework_id_" property="courseHomeworkId" />
-	        <result column="course_group_type_" property="courseGroupType" />
-	        <result column="course_group_id_" property="courseGroupId" />
-	        <result column="course_schedule_id_" property="courseScheduleId" />
-	        <result column="student_id_" property="studentId" />
-	        <result column="attachments_" property="attachments" />
-	        <result column="teacher_replied_" property="teacherReplied" />
-	        <result column="submit_time_" property="submitTime" />
-	        <result column="create_time_" property="createTime" />
-	        <result column="update_time_" property="updateTime" />
-		</resultMap>  
-    
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.StudentCourseHomework">
+        <result column="id_" property="id" />
+        <result column="course_homework_id_" property="courseHomeworkId" />
+        <result column="course_group_type_" property="courseGroupType" />
+        <result column="course_group_id_" property="courseGroupId" />
+        <result column="course_schedule_id_" property="courseScheduleId" />
+        <result column="student_id_" property="studentId" />
+        <result column="attachments_" property="attachments" />
+        <result column="teacher_replied_" property="teacherReplied" />
+        <result column="submit_time_" property="submitTime" />
+        <result column="create_time_" property="createTime" />
+        <result column="update_time_" property="updateTime" />
+    </resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.course_homework_id_
-        , t.course_group_type_
-        , t.course_group_id_
-        , t.course_schedule_id_
-        , t.student_id_
-        , t.attachments_
-        , t.teacher_replied_
-        , t.submit_time_
-        , t.create_time_
-        , t.update_time_
-        </sql> 
-    
+         t.id_ as id
+        , t.course_homework_id_ as courseHomeworkId
+        , t.course_group_type_ as courseGroupType
+        , t.course_group_id_ as courseGroupId
+        , t.course_schedule_id_ as courseScheduleId
+        , t.student_id_ as studentId
+        , t.attachments_ as attachments
+        , t.teacher_replied_ as teacherReplied
+        , t.submit_time_ as submitTime
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        </sql>
+
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.StudentCourseHomeworkVo">
         SELECT
-            <include refid="baseColumns"/>
+        <include refid="baseColumns"/>
         FROM student_course_homework t
         where t.id_ = #{id}
     </select>
-    
+
     <select id="selectPage" resultMap="BaseResultMap">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM student_course_homework t
-	</select>
+        SELECT
+        <include refid="baseColumns" />
+        FROM student_course_homework t
+    </select>
 </mapper>

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

@@ -101,6 +101,9 @@
             <if test="delFlag != null">
                 AND del_flag_ = #{delFlag}
             </if>
+            <if test="search != null and search != ''">
+                AND (id_ like concat('%',#{search},'%') or name_ like concat('%',#{search},'%'))
+            </if>
             <if test="queryType != null and queryType == 'category'">
             	and (parent_subject_id_ = 0 or parent_subject_id_ is null)
             </if>

+ 0 - 49
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherWithdrawalMapper.xml

@@ -1,49 +0,0 @@
-<?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.TeacherWithdrawalDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.TeacherWithdrawal">
-            <result column="id_" property="id" />
-	        <result column="user_id_" property="userId" />
-	        <result column="user_account_record_id_" property="userAccountRecordId" />
-	        <result column="amount_" property="amount" />
-	        <result column="plantform_fee_" property="plantformFee" />
-	        <result column="actual_amount_" property="actualAmount" />
-	        <result column="bank_card_" property="bankCard" />
-	        <result column="bank_name_" property="bankName" />
-	        <result column="bank_flow_no_" property="bankFlowNo" />
-	        <result column="transfer_time_" property="transferTime" />
-	        <result column="create_time_" property="createTime" />
-	        <result column="update_time_" property="updateTime" />
-	        <result column="status_" property="status" />
-		</resultMap>  
-    
-    <!-- 表字段 -->
-    <sql id="baseColumns">
-         t.id_
-        , t.user_id_
-        , t.user_account_record_id_
-        , t.amount_
-        , t.plantform_fee_
-        , t.actual_amount_
-        , t.bank_card_
-        , t.bank_name_
-        , t.bank_flow_no_
-        , t.transfer_time_
-        , t.create_time_
-        , t.update_time_
-        , t.status_
-        </sql> 
-    
-    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherWithdrawalVo">
-        SELECT
-            <include refid="baseColumns"/>
-        FROM teacher_withdrawal t
-        where t.id_ = #{id}
-    </select>
-    
-    <select id="selectPage" resultMap="BaseResultMap">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM teacher_withdrawal t
-	</select>
-</mapper>

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

@@ -1,37 +1,74 @@
 <?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.UserAccountDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserAccount">
-            <result column="user_id_" property="userId" />
-	        <result column="amount_total" property="amountTotal" />
-	        <result column="amount_usable" property="amountUsable" />
-	        <result column="amount_frozen" property="amountFrozen" />
-	        <result column="status_" property="status" />
-	        <result column="create_time" property="createTime" />
-	        <result column="update_time" property="updateTime" />
-		</resultMap>  
-    
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserAccount">
+        <result column="user_id_" property="userId"/>
+        <result column="amount_total_" property="amountTotal"/>
+        <result column="amount_usable_" property="amountUsable"/>
+        <result column="amount_frozen_" property="amountFrozen"/>
+        <result column="status_" property="status"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.user_id_
-        , t.amount_total
-        , t.amount_usable
-        , t.amount_frozen
-        , t.status_
-        , t.create_time
-        , t.update_time
-        </sql> 
-    
+         t.user_id_ as userId
+        , t.amount_total_ as amountTotal
+        , t.amount_usable_ as amountUsable
+        , t.amount_frozen_ as amountFrozen
+        , t.status_ as status
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        </sql>
+
+    <update id="frozenChangeAccount">
+        update user_cash_account
+        <choose>
+            <when test="null != inOrOut and inOrOut == 'IN'">
+                set amount_total_ = (amount_total_ + #{transAmount}),amount_frozen_ = (amount_frozen + #{transAmount})
+            </when>
+            <otherwise>
+                set amount_usable_ = (amount_usable_ - #{transAmount}),amount_frozen_ = (amount_frozen + #{transAmount})
+            </otherwise>
+        </choose>
+        where user_id_ = #{userId}
+    </update>
+    <update id="unfrozenChangeAccount">
+        update user_cash_account
+        <choose>
+            <when test="null != inOrOut and inOrOut == 'IN'">
+                set amount_usable_ = (amount_usable_ + #{transAmount}),amount_frozen_ = (amount_frozen - #{transAmount})
+            </when>
+            <otherwise>
+                set amount_total_ = (amount_total_ - #{transAmount}),amount_frozen_ = (amount_frozen - #{transAmount})
+            </otherwise>
+        </choose>
+        where user_id_ = #{userId}
+    </update>
+    <update id="changeAccount">
+        update user_cash_account
+        <choose>
+            <when test="null != inOrOut and inOrOut == 'IN'">
+                set amount_total_ = (amount_total_ + #{transAmount}),amount_usable_ = (amount_usable_ + #{transAmount})
+            </when>
+            <otherwise>
+                set amount_total_ = (amount_total_ - #{transAmount}),amount_usable_ = (amount_usable_ - #{transAmount})
+            </otherwise>
+        </choose>
+        where user_id_ = #{userId}
+    </update>
+
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountVo">
         SELECT
-            <include refid="baseColumns"/>
-        FROM user_account t
+        <include refid="baseColumns"/>
+        FROM user_cash_account t
         where t.user_id_ = #{id}
     </select>
-    
+
     <select id="selectPage" resultMap="BaseResultMap">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM user_account t
-	</select>
+        SELECT
+        <include refid="baseColumns"/>
+        FROM user_cash_account t
+    </select>
 </mapper>

+ 32 - 30
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountRecordMapper.xml

@@ -1,41 +1,43 @@
 <?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.UserAccountRecordDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserAccountRecord">
-            <result column="id_" property="id" />
-	        <result column="trans_amount_" property="transAmount" />
-	        <result column="account_balance_" property="accountBalance" />
-	        <result column="in_or_out_" property="inOrOut" />
-	        <result column="biz_type_" property="bizType" />
-	        <result column="biz_id_" property="bizId" />
-	        <result column="biz_name_" property="bizName" />
-	        <result column="order_id_" property="orderId" />
-	        <result column="create_time_" property="createTime" />
-		</resultMap>  
-    
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserAccountRecord">
+        <result column="id_" property="id" />
+        <result column="account_id_" property="accountId" />
+        <result column="trans_amount_" property="transAmount" />
+        <result column="account_balance_" property="accountBalance" />
+        <result column="in_or_out_" property="inOrOut" />
+        <result column="biz_type_" property="bizType" />
+        <result column="biz_id_" property="bizId" />
+        <result column="biz_name_" property="bizName" />
+        <result column="order_id_" property="orderId" />
+        <result column="create_time_" property="createTime" />
+    </resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.trans_amount_
-        , t.account_balance_
-        , t.in_or_out_
-        , t.biz_type_
-        , t.biz_id_
-        , t.biz_name_
-        , t.order_id_
-        , t.create_time_
-        </sql> 
-    
+         t.id_ as id
+        , t.account_id_ as accountId
+        , t.trans_amount_ as transAmount
+        , t.account_balance_ as accountBalance
+        , t.in_or_out_ as inOrOut
+        , t.biz_type_ as bizType
+        , t.biz_id_ as bizId
+        , t.biz_name_ as bizName
+        , t.order_id_ as orderId
+        , t.create_time_ as createTime
+        </sql>
+
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
         SELECT
-            <include refid="baseColumns"/>
-        FROM user_account_record t
+        <include refid="baseColumns"/>
+        FROM user_cash_account_record t
         where t.id_ = #{id}
     </select>
-    
+
     <select id="selectPage" resultMap="BaseResultMap">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM user_account_record t
-	</select>
+        SELECT
+        <include refid="baseColumns" />
+        FROM user_cash_account_record t
+    </select>
 </mapper>

+ 33 - 17
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserBankCardMapper.xml

@@ -9,37 +9,53 @@
 	        <result column="bank_card_" property="bankCard" />
 	        <result column="phone_" property="phone" />
 	        <result column="bank_code_" property="bankCode" />
-	        <result column="del_flag_" property="delFlag" />
 	        <result column="is_default_" property="isDefault" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
-		</resultMap>  
-    
+		</resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.user_id_
-        , t.name_
-        , t.bank_name_
-        , t.bank_card_
-        , t.phone_
-        , t.bank_code_
-        , t.del_flag_
-        , t.is_default_
-        , t.create_time_
-        , t.update_time_
-        </sql> 
-    
+         t.id_ as id
+        , t.user_id_ as userId
+        , t.name_ as name
+        , t.bank_name_ as bankName
+        , t.bank_card_ as bankCard
+        , t.phone_ as phone
+        , t.bank_code_ as bankCode
+        , t.is_default_ as isDefault
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        , t.del_flag_ as delFlag
+        </sql>
+
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserBankCardVo">
         SELECT
             <include refid="baseColumns"/>
         FROM user_bank_card t
-        where t.id_ = #{id}
+        where t.del_flag_ = 0 and t.id_ = #{id}
     </select>
     
     <select id="selectPage" resultMap="BaseResultMap">
 		SELECT         
         	<include refid="baseColumns" />
 		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
+        limit 1
+    </select>
+    <select id="getBankByUserIdAndCardId" 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}
+        and t.id_ = #{bankCardId}
+    </select>
 </mapper>

+ 10 - 10
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml

@@ -8,18 +8,18 @@
 	        <result column="biz_content_" property="bizContent" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
-		</resultMap>  
-    
+		</resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.order_no_
-        , t.biz_id_
-        , t.biz_content_
-        , t.create_time_
-        , t.update_time_
-        </sql> 
-    
+         t.id_ as id
+        , t.order_no_ as orderNo
+        , t.biz_id_ as bizId
+        , t.biz_content_ as bizContent
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        </sql>
+
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
         SELECT
             <include refid="baseColumns"/>

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

@@ -26,28 +26,28 @@
     
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.order_no_
-        , t.user_id_
-        , t.merch_id_
-        , t.order_name_
-        , t.order_desc_
-        , t.status_
-        , t.original_price_
-        , t.expect_price_
-        , t.actual_price_
-        , t.coupon_amount_
-        , t.plantform_fee_
-        , t.plantform_fee_rate_
-        , t.refund_amount_
-        , t.user_note_
-        , t.order_type_
-        , t.create_time_
-        , t.pay_time_
-        , t.refund_time_
-        , t.update_time_
-        </sql> 
-    
+         t.id_ as id
+        , t.order_no_ as orderNo
+        , t.user_id_ as userId
+        , t.merch_id_ as merchId
+        , t.order_name_ as orderName
+        , t.order_desc_ as orderDesc
+        , t.status_ as status
+        , t.original_price_ as originalPrice
+        , t.expect_price_ as expectPrice
+        , t.actual_price_ as actualPrice
+        , t.coupon_amount_ as couponAmount
+        , t.plantform_fee_ as plantformFee
+        , t.plantform_fee_rate_ as plantformFeeRate
+        , t.refund_amount_ as refundAmount
+        , t.user_note_ as userNote
+        , t.order_type_ as orderType
+        , t.create_time_ as createTime
+        , t.pay_time_ as payTime
+        , t.refund_time_ as refundTime
+        , t.update_time_ as updateTime
+        </sql>
+
     <select id="detailById" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
             <include refid="baseColumns"/>

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

@@ -1,32 +1,45 @@
 <?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.UserOrderPaymentDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderPayment">
-            <result column="id_" property="id" />
-	        <result column="order_no_" property="orderNo" />
-	        <result column="trans_no_" property="transNo" />
-	        <result column="pay_channel_" property="payChannel" />
-	        <result column="pay_amt_" property="payAmt" />
-	        <result column="pay_info" property="payInfo" />
-	        <result column="status_" property="status" />
-	        <result column="arrival_time_" property="arrivalTime" />
-	        <result column="pay_fail_msg_" property="payFailMsg" />
-            <result column="create_time_" property="createTime" />
-            <result column="update_time_" property="updateTime" />
-		</resultMap>  
-    
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderPayment">
+        <result column="id_" property="id" />
+        <result column="order_no_" property="orderNo" />
+        <result column="trans_no_" property="transNo" />
+        <result column="pay_channel_" property="payChannel" />
+        <result column="pay_amt_" property="payAmt" />
+        <result column="pay_info_" property="payInfo" />
+        <result column="status_" property="status" />
+        <result column="arrival_time_" property="arrivalTime" />
+        <result column="pay_fail_msg_" property="payFailMsg" />
+        <result column="create_time_" property="createTime" />
+        <result column="update_time_" property="updateTime" />
+    </resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.order_no_
-        , t.trans_no_
-        , t.pay_channel_
-        , t.pay_amt_
-        , t.pay_info
-        , t.status_
-        , t.arrival_time_
-        , t.pay_fail_msg_
-        ,create_time_
-        ,update_time_
+         t.id_ as id
+        , t.order_no_ as orderNo
+        , t.trans_no_ as transNo
+        , t.pay_channel_ as payChannel
+        , t.pay_amt_ as payAmt
+        , t.pay_info_ as payInfo
+        , t.status_ as status
+        , t.arrival_time_ as arrivalTime
+        , t.pay_fail_msg_ as payFailMsg
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
         </sql>
+
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderPaymentVo">
+        SELECT
+        <include refid="baseColumns"/>
+        FROM user_order_payment t
+        where t.id_ = #{id}
+    </select>
+
+    <select id="selectPage" resultMap="BaseResultMap">
+        SELECT
+        <include refid="baseColumns" />
+        FROM user_order_payment t
+    </select>
 </mapper>

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

@@ -13,23 +13,23 @@
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
 	        <result column="remark_" property="remark" />
-		</resultMap>  
-    
+		</resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.user_id_
-        , t.order_no_
-        , t.status_
-        , t.apply_amount_
-        , t.actual_amount_
-        , t.reason_
-        , t.operate_user_id_
-        , t.create_time_
-        , t.update_time_
-        , t.remark_
-        </sql> 
-    
+         t.id_ as id
+        , t.user_id_ as userId
+        , t.order_no_ as orderNo
+        , t.status_ as status
+        , t.apply_amount_ as applyAmount
+        , t.actual_amount_ as actualAmount
+        , t.reason_ as reason
+        , t.operate_user_id_ as operateUserId
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        , t.remark_ as remark
+        </sql>
+
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo">
         SELECT
             <include refid="baseColumns"/>

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

@@ -0,0 +1,47 @@
+<?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.UserWithdrawalDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserWithdrawal">
+        <result column="id_" property="id" />
+        <result column="user_id_" property="userId" />
+        <result column="amount_" property="amount" />
+        <result column="plantform_fee_" property="plantformFee" />
+        <result column="actual_amount_" property="actualAmount" />
+        <result column="bank_card_" property="bankCard" />
+        <result column="bank_flow_no_" property="bankFlowNo" />
+        <result column="transfer_time_" property="transferTime" />
+        <result column="status_" property="status" />
+        <result column="verify_user_id_" property="verifyUserId" />
+        <result column="create_time_" property="createTime" />
+        <result column="update_time_" property="updateTime" />
+    </resultMap>
+
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ as id
+        , t.user_id_ as userId
+        , t.amount_ as amount
+        , t.plantform_fee_ as plantformFee
+        , t.actual_amount_ as actualAmount
+        , t.bank_card_ as bankCard
+        , t.bank_flow_no_ as bankFlowNo
+        , t.transfer_time_ as transferTime
+        , t.status_ as status
+        , t.verify_user_id_ as verifyUserId
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        </sql>
+
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo">
+        SELECT
+        <include refid="baseColumns"/>
+        FROM user_withdrawal t
+        where t.id_ = #{id}
+    </select>
+
+    <select id="selectPage" resultMap="BaseResultMap">
+        SELECT
+        <include refid="baseColumns" />
+        FROM user_withdrawal t
+    </select>
+</mapper>

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

@@ -10,20 +10,20 @@
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
 	        <result column="end_time_" property="endTime" />
-		</resultMap>  
-    
+		</resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.user_id_
-        , t.order_id_
-        , t.time_type_
-        , t.start_time_
-        , t.create_time_
-        , t.update_time_
-        , t.end_time_
-        </sql> 
-    
+         t.id_ as id
+        , t.user_id_ as userId
+        , t.order_id_ as orderId
+        , t.time_type_ as timeType
+        , t.start_time_ as startTime
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        , t.end_time_ as endTime
+        </sql>
+
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo">
         SELECT
             <include refid="baseColumns"/>

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

@@ -50,7 +50,7 @@ public class StudentController extends BaseController {
     }
 
     @ApiOperation(value = "设置声部")
-    @PostMapping("/setSubject")
+    @GetMapping("/setSubject")
     public HttpResponseResult<List<SubjectSelectVo>> setSubject(@ApiParam(value = "声部主键集合", required = true) @RequestParam("subjectIds") String subjectIds) {
         if (StringUtil.isEmpty(subjectIds)) {
             return failed("参数不能为空");

+ 3 - 4
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SubjectController.java

@@ -2,6 +2,7 @@ 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.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.vo.SubjectSelectVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -22,8 +23,6 @@ import java.util.List;
 public class SubjectController extends BaseController {
     @Autowired
     private SubjectService subjectService;
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "根据声部编号查询声部")
     @GetMapping("/get/{id}")
@@ -33,8 +32,8 @@ public class SubjectController extends BaseController {
 
     @ApiOperation(value = "获取声部")
     @GetMapping("/subjectSelect")
-    public HttpResponseResult<List<SubjectSelectVo>> subjectSelect() {
-        List<SubjectSelectVo> subjectSelect = subjectService.subjectSelect();
+    public HttpResponseResult<List<Subject>> subjectSelect() {
+        List<Subject> subjectSelect = subjectService.subjectSelect();
         return succeed(subjectSelect);
     }
 

+ 3 - 2
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SubjectController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import com.yonge.cooleshow.biz.dal.entity.Subject;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -34,8 +35,8 @@ public class SubjectController extends BaseController {
 
 	@ApiOperation(value = "获取声部")
 	@GetMapping("/subjectSelect")
-    public HttpResponseResult<List<SubjectSelectVo>> subjectSelect(){
-        List<SubjectSelectVo> subjectSelect = subjectService.subjectSelect();
+    public HttpResponseResult<List<Subject>> subjectSelect(){
+        List<Subject> subjectSelect = subjectService.subjectSelect();
         return succeed(subjectSelect);
     }
 }

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

@@ -58,7 +58,7 @@ public class TeacherController extends BaseController {
     }
 
     @ApiOperation(value = "设置声部")
-    @PostMapping("/setSubject")
+    @GetMapping("/setSubject")
     public HttpResponseResult<List<SubjectSelectVo>> setSubject(@ApiParam(value = "声部主键集合", required = true) @RequestParam("subjectIds") String subjectIds) {
         if (StringUtil.isEmpty(subjectIds)) {
             return failed("参数不能为空");

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

@@ -0,0 +1,53 @@
+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.UserOrder;
+import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
+import com.yonge.cooleshow.biz.dal.support.DistributedLock;
+import com.yonge.cooleshow.biz.dal.vo.res.WithdrawalInfoRes;
+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.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+@RestController
+@RequestMapping("/userWithdrawal")
+@Api(value = "用户账户提现表", tags = "用户账户提现表")
+public class UserWithdrawalController extends BaseController {
+    @Autowired
+    private UserWithdrawalService userWithdrawalService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+
+    @PostMapping("/getWithdrawalInfo")
+    @ApiOperation(value = "查询提现页面信息")
+    public HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return userWithdrawalService.getWithdrawalInfo(user.getId());
+    }
+
+    @PostMapping("/withdrawal")
+    @ApiOperation(value = "用户提现")
+    public HttpResponseResult<Boolean> withdrawal(@Valid @RequestBody WithdrawalReq withdrawalReq) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return userWithdrawalService.withdrawal(user.getId(), withdrawalReq);
+    }
+}

+ 39 - 2
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/VideoLessonGroupController.java

@@ -2,9 +2,13 @@ package com.yonge.cooleshow.teacher.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
+import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.valid.AddGroup;
+import com.yonge.cooleshow.biz.dal.valid.UpdateGroup;
 import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupUpVo;
 import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentVo;
 import com.yonge.cooleshow.biz.dal.vo.VideoLessonVo;
 import com.yonge.cooleshow.common.page.PageInfo;
 import io.swagger.annotations.Api;
@@ -20,6 +24,8 @@ import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * 视频课基本信息表 web 控制层
  * @author yzp
@@ -72,7 +78,7 @@ public class VideoLessonGroupController extends BaseController {
     * @Date: 2022/3/31
     */
     @ApiOperation(value = "修改视频课组", httpMethod = "POST", consumes = "application/json", produces = "application/json")
-    @PostMapping(value = "/update", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/updateGroup", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Object> update(@Validated @RequestBody VideoLessonGroupUpVo lessonGroupUpVo) {
         videoLessonGroupService.updateGroup(lessonGroupUpVo);
         return succeed();
@@ -97,7 +103,7 @@ public class VideoLessonGroupController extends BaseController {
     */
     @ApiOperation(value = "新增视频课组&视频课", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/add", consumes = "application/json", produces = "application/json")
-    public HttpResponseResult<Object> add(@Validated @RequestBody VideoLessonVo lessonVo) {
+    public HttpResponseResult<Object> add(@Validated(AddGroup.class) @RequestBody VideoLessonVo lessonVo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
 
         if (sysUser == null||sysUser.getId()==null) {
@@ -109,4 +115,35 @@ public class VideoLessonGroupController extends BaseController {
         videoLessonGroupService.add(lessonVo,sysUser);
         return succeed();
     }
+
+    /**
+     * @Description: 根据组id查询视频课&视频课组
+     * @Author: cy
+     * @Date: 2022/4/2
+     */
+    @ApiOperation(value = "根据组id查询视频课&视频课组")
+    @GetMapping(value="/selectVideoLesson")
+    public HttpResponseResult<VideoLessonStudentVo> selectVideoLesson(@NotNull(message = "视频组id不能为空") Long groupId) {
+        return succeed(videoLessonGroupService.selectVideoLesson(groupId));
+    }
+
+    /**
+     * @Description: 修改视频课组&视频课
+     * @Author: cy
+     * @Date: 2022/4/7
+     */
+    @ApiOperation(value = "修改视频课组&视频课", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/update", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<Object> update(@Validated(UpdateGroup.class) @RequestBody VideoLessonVo lessonVo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+
+        if (sysUser == null||sysUser.getId()==null) {
+            return failed("用户信息获取失败");
+        }
+        if (lessonVo.getLessonList().isEmpty()) {
+            return failed("课程不能为空");
+        }
+        videoLessonGroupService.update(lessonVo,sysUser);
+        return succeed();
+    }
 }