Browse Source

Merge remote-tracking branch 'origin/master'

weifanli 3 năm trước cách đây
mục cha
commit
8ffa884683
33 tập tin đã thay đổi với 473 bổ sung80 xóa
  1. 2 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  2. 24 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/service/CustomTokenServices.java
  3. 4 5
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  4. 11 11
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  5. 1 22
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  6. 20 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  7. 8 6
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java
  8. 11 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/NewsInformationQueryInfo.java
  9. 0 2
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/SysNewsInformation.java
  10. 25 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/AppParam.java
  11. 8 2
      cooleshow-cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml
  12. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  13. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  14. 9 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherFreeTimeDao.java
  15. 38 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicSheetPayDto.java
  16. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeScheduleDto.java
  17. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicAlbum.java
  18. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java
  19. 17 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  20. 24 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  21. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/EmployeeServiceImpl.java
  22. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  23. 96 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  24. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  25. 24 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java
  26. 26 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CheckVo.java
  27. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java
  28. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ContractTemplateMapper.xml
  29. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  30. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  31. 14 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherFreeTimeMapper.xml
  32. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  33. 44 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

+ 2 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -94,9 +94,9 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
 					// 添加userType以及附加信息
 					if (StringUtils.equals("STUDENT", clientId)) {
-						sysUserService.saveStudent(user.getId());
+						sysUserService.saveStudent(user);
 					} else if (StringUtils.equals("TEACHER", clientId)) {
-						sysUserService.saveTeacher(user.getId());
+						sysUserService.saveTeacher(user);
 					}
 					sysUserService.update(user);
 				}

+ 24 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/service/CustomTokenServices.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.auth.core.service;
 
+import java.util.Collection;
 import java.util.Date;
 import java.util.Set;
 import java.util.UUID;
@@ -33,6 +34,8 @@ import org.springframework.security.web.authentication.preauth.PreAuthenticatedA
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
+import com.yonge.cooleshow.common.security.SecurityConstants;
+
 /**
  * Base implementation for token services using random UUID values for the access token and refresh token values. The
  * main extension point for customizations is the {@link TokenEnhancer} which will be called after the access and
@@ -271,6 +274,27 @@ public class CustomTokenServices implements AuthorizationServerTokenServices, Re
 		}
 		return clientAuth.getClientId();
 	}
+	
+	public boolean revokeToken(String clientId, String phone){
+		Collection<OAuth2AccessToken> list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.PHONE_PRINCIPAL_PREFIX + phone);
+
+		if (list == null || list.size() == 0) {
+			list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.USERNAME_PRINCIPAL_PREFIX + phone);
+		} else {
+			list.addAll(tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.USERNAME_PRINCIPAL_PREFIX + phone));
+		}
+		if (list != null) {
+			for (OAuth2AccessToken accessToken : list) {
+				if (accessToken != null) {
+					if (accessToken.getRefreshToken() != null) {
+						tokenStore.removeRefreshToken(accessToken.getRefreshToken());
+					}
+					tokenStore.removeAccessToken(accessToken);
+				}
+			}
+		}
+		return true;
+	}
 
 	public boolean revokeToken(String tokenValue) {
 		OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);

+ 4 - 5
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.auth.service;
 
+import java.util.List;
+
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
 import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
@@ -8,9 +10,6 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.common.entity.ImUserModel;
 import com.yonge.cooleshow.common.service.BaseService;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-
-import java.util.List;
 
 public interface SysUserService extends BaseService<Long, SysUser> {
 
@@ -138,14 +137,14 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      *
      * @param userId
      */
-    void saveStudent(Long userId);
+    void saveStudent(SysUser sysUser);
 
     /**
      * 保存teacher数据
      *
      * @param userId
      */
-    void saveTeacher(Long userId);
+    void saveTeacher(SysUser sysUser);
 
     /***
      * 更新用户实名信息

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

@@ -36,8 +36,6 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     @Autowired
     private SysRoleMenuService sysRoleMenuService;
     @Autowired
-    private SysUserService sysUserService;
-    @Autowired
     private SysConfigService sysConfigService;
 
     @Override
@@ -164,7 +162,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         } else if (StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
             sysUser.setUserType("STUDENT");
             sysUserDao.insert(sysUser);
-            sysUserService.saveStudent(sysUser.getId());
+            saveStudent(sysUser);
             return queryUserInfoByPhone(phone);
         }
         return null;
@@ -178,19 +176,21 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void saveStudent(Long userId) {
-        sysUserDao.saveStudent(userId);
-        //创建老师账户
-        sysUserDao.createUserAccount(userId);
+    public void saveStudent(SysUser sysUser) {
+        sysUserDao.saveStudent(sysUser.getId());
+        if(!sysUser.getUserType().contains("TEACHER")){
+            sysUserDao.createUserAccount(sysUser.getId());
+        }
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void saveTeacher(Long userId) {
+    public void saveTeacher(SysUser sysUser) {
 
-        sysUserDao.saveTeacher(userId);
-        //创建老师账户
-        sysUserDao.createUserAccount(userId);
+        sysUserDao.saveTeacher(sysUser.getId());
+        if(!sysUser.getUserType().contains("STUDENT")){
+            sysUserDao.createUserAccount(sysUser.getId());
+        }
     }
 
     @Override

+ 1 - 22
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -7,7 +7,6 @@ import io.swagger.annotations.ApiOperation;
 
 import java.io.IOException;
 import java.util.Base64;
-import java.util.Collection;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
@@ -38,7 +37,6 @@ import com.yonge.cooleshow.auth.service.SysUserService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.security.AuthUser;
-import com.yonge.cooleshow.common.security.SecurityConstants;
 import com.yonge.cooleshow.common.security.SecurityUtils;
 
 @RestController
@@ -159,30 +157,11 @@ public class TokenController extends BaseController {
 		return succeed("退出成功");
 	}
 
-
 	@PostMapping(value = "exit/{clientId}/{phone}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
 	@ApiOperation(value = "指定用户退出登录")
 	public HttpResponseResult<String> exitByPhone(@PathVariable("clientId") String clientId, @PathVariable("phone") String phone) {
 
-		Collection<OAuth2AccessToken> list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.PHONE_PRINCIPAL_PREFIX + phone);
-
-		if (list == null || list.size() == 0) {
-			list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.USERNAME_PRINCIPAL_PREFIX + phone);
-		} else {
-			list.addAll(tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.USERNAME_PRINCIPAL_PREFIX + phone));
-		}
-		if (list != null) {
-			for (OAuth2AccessToken accessToken : list) {
-				if (accessToken != null) {
-					if (accessToken.getRefreshToken() != null) {
-						tokenStore.removeRefreshToken(accessToken.getRefreshToken());
-					}
-					tokenStore.removeAccessToken(accessToken);
-				}
-			}
-		}
-
-		return succeed("退出成功");
+		return tokenService.revokeToken(clientId, phone) ? succeed("退出成功") : failed();
 	}
 
 	@GetMapping(value = "/checkToken",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)

+ 20 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -32,6 +32,7 @@ import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysRole;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
+import com.yonge.cooleshow.auth.core.service.CustomTokenServices;
 import com.yonge.cooleshow.auth.service.SysConfigService;
 import com.yonge.cooleshow.auth.service.SysRoleService;
 import com.yonge.cooleshow.auth.service.SysUserRoleService;
@@ -64,8 +65,13 @@ public class UserController extends BaseController {
     private SysUserRoleService sysUserRoleService;
     @Autowired
     private IdGeneratorService smsCodeService;
+
+	@Autowired
+	private CustomTokenServices tokenService;
+	
     @Value("${message.debugMode}")
     private boolean debugMode;
+    
     @Autowired
     private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
     @Autowired
@@ -305,10 +311,22 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        if (sysUser.getId() != userId) {
+        if (sysUser.getId() != userId.longValue()) {
             return failed("非法操作");
         }
         sysUser.setLockFlag(lockFlag);
+        
+        if(lockFlag == 1){
+        	if(sysUser.getUserType().contains("STUDENT")){
+        		tokenService.revokeToken("STUDENT", sysUser.getPhone());
+        	}
+        	if(sysUser.getUserType().contains("TEACHER")){
+        		tokenService.revokeToken("TEACHER", sysUser.getPhone());
+        	}
+        	if(sysUser.getUserType().contains("SYSTEM")){
+        		tokenService.revokeToken("SYSTEM", sysUser.getPhone());
+        	}
+        }
         sysUser.setUpdateTime(new Date());
         sysUserService.update(sysUser);
         return succeed();
@@ -330,7 +348,7 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        if (sysUser.getId() != userId) {
+        if (sysUser.getId() != userId.longValue()) {
             return failed("非法操作");
         }
 

+ 8 - 6
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.cms.controller;
 
 import com.yonge.cooleshow.cms.dal.entity.NewsStatusEnum;
 import com.yonge.cooleshow.cms.dto.AppHomeDto;
+import com.yonge.cooleshow.cms.dto.AppParam;
 import com.yonge.cooleshow.cms.dto.SysNewsInformationDto;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -131,7 +132,7 @@ public class NewsController extends BaseController {
 
 	@ApiOperation("app首页banner、按钮、资讯")
 	@PostMapping(value = "/app/home")
-	public HttpResponseResult<AppHomeDto> appHome() {
+	public HttpResponseResult<AppHomeDto> appHome(@RequestBody AppParam param) {
 		AppHomeDto appHomeDto = new AppHomeDto();
 		NewsInformationQueryInfo queryInfo = new NewsInformationQueryInfo();
 		queryInfo.setStatus(NewsStatusEnum.SHOW);
@@ -145,25 +146,26 @@ public class NewsController extends BaseController {
 		List<SysNewsInformationDto> rows = sysNewsInformationService.selectPage(queryInfo).getRows();
 		appHomeDto.setInformation(rows);
 
+
+		// 查所有
+		queryInfo.setRows(999);
 		// 轮播图
 		queryInfo.setType(4);
-		queryInfo.setRows(999);
 		params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
 		appHomeDto.setBanner(sysNewsInformationService.selectPage(queryInfo).getRows());
 		// 闪页
 		queryInfo.setType(3);
-		queryInfo.setRows(999);
 		params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
 		appHomeDto.setFlashPage(sysNewsInformationService.selectPage(queryInfo).getRows());
 
 		// 按钮
-		queryInfo.setType(35);
-		queryInfo.setRows(999);
+		queryInfo.setType(5);
+		queryInfo.setVersion(param.getVersion());
 		params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
-		appHomeDto.setFlashPage(sysNewsInformationService.selectPage(queryInfo).getRows());
+		appHomeDto.setAppMenu(sysNewsInformationService.selectPage(queryInfo).getRows());
 		return succeed(appHomeDto);
 	}
 }

+ 11 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/NewsInformationQueryInfo.java

@@ -39,6 +39,9 @@ public class NewsInformationQueryInfo extends QueryInfo {
 	@ApiModelProperty(value = "需排除编号")
 	private List<Long> excludeIds;
 
+	@ApiModelProperty("版本号")
+	private String version;
+
 	private Date date;
 
 	public Integer getType() {
@@ -112,4 +115,12 @@ public class NewsInformationQueryInfo extends QueryInfo {
 	public void setPlatformType(String platformType) {
 		this.platformType = platformType;
 	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
 }

+ 0 - 2
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/SysNewsInformation.java

@@ -24,7 +24,6 @@ public class SysNewsInformation {
 
 	/** 内容 */
 	@ApiModelProperty(value = "内容", required = true)
-	@NotBlank(message = "内容不能为空")
 	private String content;
 
 	/** 封面图片 */
@@ -57,7 +56,6 @@ public class SysNewsInformation {
 	private Integer order;
 	
 	@ApiModelProperty(value = "上线、生效时间", required = false)
-	@NotNull(message = "上线、生效时间不为空")
 	private Date onlineTime;
 	
 	@ApiModelProperty(value = "下线时间", required = false)

+ 25 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/AppParam.java

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.cms.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-25
+ */
+@ApiModel("app首页查询参数")
+public class AppParam {
+
+    @ApiModelProperty("版本号")
+    private String version;
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+}

+ 8 - 2
cooleshow-cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -60,8 +60,11 @@
 			</if>
 			<if test="platformType != null and platformType != ''">
 				<if test="platformType != 'ADMIN'" >
-					and sni.status_ = 1 and sni.online_time_ &lt;= now()
-					and if(sni.offline_time_ is not null,sni.offline_time_ &gt;= now(),1=1)
+					and sni.status_ = 1
+					<if test="type != 5">
+						and sni.online_time_ &lt;= now()
+						and if(sni.offline_time_ is not null,sni.offline_time_ &gt;= now(),1=1)
+					</if>
 				</if>
 			</if>
 			<if test="excludeIds!=null and excludeIds.size()>0">
@@ -70,6 +73,9 @@
 					#{excludeId}
 				</foreach>
 			</if>
+			<if test="version != null and version != ''">
+				and sni.attribute1_ = #{version}
+			</if>
 		</where>
 	</sql>
 	

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

@@ -64,7 +64,7 @@ public class MusicAlbumController extends BaseController {
             return failed("用户信息获取失败");
         }
 
-        return succeed(musicAlbumService.removeById(id));
+        return succeed(musicAlbumService.del(id));
     }
 
     @ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")

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

@@ -7,7 +7,6 @@ import com.yonge.cooleshow.biz.dal.dto.PracticeScheduleDto;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;

+ 9 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherFreeTimeDao.java

@@ -20,11 +20,11 @@ public interface TeacherFreeTimeDao extends BaseMapper<TeacherFreeTime> {
     int insertBatch(@Param("entities") List<TeacherFreeTime> entities);
 
     /**
-     * @description: 获取老师陪练课设置
      * @param teacherId
      * @param courseMinutes
      * @param freeMinutes
      * @return com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime
+     * @description: 获取老师陪练课设置
      * @author zx
      * @date 2022/3/25 10:25
      */
@@ -33,12 +33,12 @@ public interface TeacherFreeTimeDao extends BaseMapper<TeacherFreeTime> {
                             @Param("freeMinutes") Integer freeMinutes);
 
     /**
-    * @description: 修改默认配置
      * @param defaultFlag
-    * @return void
-    * @author zx
-    * @date 2022/3/29 10:02
-    */
+     * @return void
+     * @description: 修改默认配置
+     * @author zx
+     * @date 2022/3/29 10:02
+     */
     void updateDefaultFlag(@Param("defaultFlag") boolean defaultFlag, @Param("teacherId") Long teacherId);
 
     //根据id删除关联表数据
@@ -52,5 +52,8 @@ public interface TeacherFreeTimeDao extends BaseMapper<TeacherFreeTime> {
 
     //根据id查声部售价
     List<TeacherSubjectPrice> getPrice(Long id);
+
+    //查询老师声部默认售价
+    TeacherSubjectPrice selectSubjectPrice(@Param("teacherId") Long teacherId, @Param("subjectId") Long subjectId);
 }
 

+ 38 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicSheetPayDto.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+/**
+ * Description 曲目购买参数
+ *
+ * @author liujunchi
+ * @date 2022-04-21
+ */
+@ApiModel("曲目购买参数")
+public class MusicSheetPayDto {
+
+    @ApiModelProperty("曲目id")
+    private Long musicSheetId;
+
+    @ApiModelProperty("订单金额")
+    private BigDecimal actualPrice;
+
+    public Long getMusicSheetId() {
+        return musicSheetId;
+    }
+
+    public void setMusicSheetId(Long musicSheetId) {
+        this.musicSheetId = musicSheetId;
+    }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+}

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeScheduleDto.java

@@ -28,7 +28,7 @@ public class PracticeScheduleDto implements Serializable {
     @ApiModelProperty(value = "课程组名称")
     private String courseGroupName;
     @ApiModelProperty(value = "声部id")
-    private String subjectId;
+    private Long subjectId;
     @ApiModelProperty(value = "单课时长")
     private Integer singleCourseMinutes;
     @ApiModelProperty(value = "课程数")
@@ -98,11 +98,11 @@ public class PracticeScheduleDto implements Serializable {
         this.courseGroupName = courseGroupName;
     }
 
-    public String getSubjectId() {
+    public Long getSubjectId() {
         return subjectId;
     }
 
-    public void setSubjectId(String subjectId) {
+    public void setSubjectId(Long subjectId) {
         this.subjectId = subjectId;
     }
 

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicAlbum.java

@@ -76,6 +76,9 @@ public class MusicAlbum extends BaseEntity {
     @ApiModelProperty(value = "更新人")
     private Long updateBy;  //更新人
 
+	@TableField("del_flag_")
+	@ApiModelProperty("假删除标识 0:未删除 1:已删除")
+	private Boolean delFlag;
 
 	public MusicAlbum setId(Long id) {
 	    this.id = id;
@@ -200,4 +203,11 @@ public class MusicAlbum extends BaseEntity {
         return ToStringBuilder.reflectionToString(this);
     }
 
+	public Boolean getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(Boolean delFlag) {
+		this.delFlag = delFlag;
+	}
 }

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

@@ -105,4 +105,12 @@ public interface MusicAlbumService extends IService<MusicAlbum> {
      * @return list
      */
     IPage<MusicAlbumVo> favoriteAlbum(IPage<MusicAlbumVo> page, StudentMusicAlbumSearch search);
+
+    /**
+     * 删除专辑
+     *
+     * @param id
+     * @return
+     */
+    boolean del(Long id);
 }

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

@@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 /**
  * MusicSheetService服务类
@@ -167,4 +170,18 @@ public interface MusicSheetService extends IService<MusicSheet> {
      */
     boolean saveMusicSheet(MusicSheetDto musicSheetDto,Long userId);
 
+    /**
+     * 曲目购买前的验证
+     *
+     * @param orderReqInfo 购买信息
+     * @return
+     */
+    HttpResponseResult<OrderCreateRes> buyMusicSheetCheck(OrderReq.OrderReqInfo orderReqInfo);
+
+    /**
+     * 曲目购买成功后的记录数据
+     *
+     * @param userOrderDetailVo
+     */
+    void buyMusicSheetSuccess(UserOrderDetailVo userOrderDetailVo);
 }

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

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleRepliedDao;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.yonge.cooleshow.biz.dal.dao.TeacherFreeTimeDao;
 import com.yonge.cooleshow.biz.dal.dto.PracticeScheduleDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
@@ -42,6 +43,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
@@ -78,6 +80,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
     @Autowired
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
+    @Autowired
+    private TeacherFreeTimeDao teacherFreeTimeDao;
 
     @Override
     public CourseScheduleDao getDao() {
@@ -810,7 +814,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      */
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<OrderCreateRes> buyPracticeCourse(OrderReq.OrderReqInfo orderReqInfo) {
-        log.info("学生购买陪练课,请求参数:{}", JSON.toJSONString(orderReqInfo));
+        log.info("buyPracticeCourse  param:{}", JSON.toJSONString(orderReqInfo));
         Long studentId = orderReqInfo.getUserId();
 
         //校验学生信息
@@ -829,7 +833,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         baseMapper.addCourseGroup(scheduleDto);
         Long groupId = scheduleDto.getGroupId();
 
-        //获取每节课购买的价格
+        //根据老师id获取默认配置声部原价
+        TeacherSubjectPrice teacherSubjectPrice = teacherFreeTimeDao.selectSubjectPrice(scheduleDto.getTeacherId(), scheduleDto.getSubjectId());
+        BigDecimal subjectPrice = teacherSubjectPrice.getSubjectPrice();
+
+        //每课实际价格
         Map<Integer, BigDecimal> courseAveragePrice = WrapperUtil.getAveragePrice(scheduleDto.getCourseNum(), scheduleDto.getCoursePrice());
 
         List<CourseScheduleDate> classTime = scheduleDto.getClassTime();
@@ -856,9 +864,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             payment.setCourseGroupId(groupId);
             payment.setCourseType(CourseScheduleEnum.PRACTICE.getCode());
             payment.setOrderNo(orderNo);
-            payment.setOriginalPrice(courseAveragePrice.get(i + 1));
-            payment.setExpectPrice(courseAveragePrice.get(i + 1));
-            payment.setActualPrice(courseAveragePrice.get(i + 1));
+            payment.setOriginalPrice(subjectPrice);//原价
+            payment.setExpectPrice(subjectPrice);//预计价格
+            payment.setActualPrice(courseAveragePrice.get(i + 1));//实际价格
             //写入course_schedule_student_payment
             courseScheduleStudentPaymentService.save(payment);
         }
@@ -873,6 +881,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         orderCreateRes.setGoodType(GoodTypeEnum.PRACTICE);
         HttpResponseResult<OrderCreateRes> httpResponseResult = new HttpResponseResult<>();
         httpResponseResult.setData(orderCreateRes);
+        log.info("buyPracticeCourse  return {}", httpResponseResult);
         return httpResponseResult;
     }
 
@@ -892,10 +901,16 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         List<Long> scheduleIds = paymentList.stream().map(CourseScheduleStudentPayment::getCourseId).collect(Collectors.toList());
         baseMapper.updateLock(scheduleIds);
 
+        //查询陪练课服务费
+        String practiceServiceRateStr = sysConfigService.findConfigValue(SysConfigConstant.PRACTICE_SERVICE_FEE);
+        BigDecimal practiceServiceRate = new BigDecimal(practiceServiceRateStr).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
+
         //写course_schedule_teacher_salary
         Date now = new Date();
         List<CourseScheduleTeacherSalary> teacherSalaryList = new ArrayList<>();
         for (CourseScheduleStudentPaymentVo payment : paymentList) {
+            BigDecimal expectPrice = payment.getExpectPrice();//预计价格
+
             CourseScheduleTeacherSalary teacherSalary = new CourseScheduleTeacherSalary();
             teacherSalary.setTeacherId(payment.getTeacherId());
             teacherSalary.setStudentId(payment.getUserId());
@@ -903,8 +918,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             teacherSalary.setCourseGroupType(payment.getCourseType());
             teacherSalary.setCourseGroupId(payment.getCourseGroupId());
             teacherSalary.setClassNum(payment.getClassNum());
-            teacherSalary.setExpectSalary(payment.getExpectPrice());
-            teacherSalary.setActualSalary(payment.getActualPrice());
+            //预计获取学生支付单课全部课酬
+            teacherSalary.setExpectSalary(payment.getActualPrice());
+            //实际获取扣除手续费后课酬
+            teacherSalary.setActualSalary(expectPrice.subtract(expectPrice.multiply(practiceServiceRate)).setScale(2, RoundingMode.HALF_UP));//实际
             teacherSalary.setReduceSalary(BigDecimal.ZERO);
             teacherSalary.setStatus(TeacherSalaryEnum.NOT_START.getCode());
             teacherSalaryList.add(teacherSalary);
@@ -935,8 +952,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         this.removeByIds(scheduleIds);
         //删除course_group数据
         courseGroupService.removeById(courseGroupId);
-
-        //修改订单为失败
     }
 
     /**

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

@@ -10,6 +10,8 @@ import com.yonge.cooleshow.biz.dal.dto.EmployeeDto;
 import com.yonge.cooleshow.biz.dal.dto.search.EmployeeSearch;
 import com.yonge.cooleshow.biz.dal.vo.EmployeeVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -69,6 +71,9 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Long, Employee> impleme
                 return HttpResponseResult.failed("该手机号对应用户已经是员工");
             }
             sysUser.setUserType(SysUserType.SYSTEM.getCode() + "," + sysUser.getUserType());
+            if(StringUtils.isNotBlank(param.getUsername())){
+            	sysUser.setUsername(param.getUsername());
+            }
             sysUser.setUpdateTime(new Date());
             employeeDao.updateSysUser(sysUser);
         }

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

@@ -126,6 +126,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         if (checkNameRepeat(musicAlbum.getAlbumName(),musicAlbum.getId())) {
             throw new BizException("专辑名称重复");
         }
+        musicAlbum.setDelFlag(false);
         return this.save(musicAlbum);
     }
 
@@ -178,6 +179,14 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         return iPage;
     }
 
+    @Override
+    public boolean del(Long id) {
+        MusicAlbum musicAlbum = new MusicAlbum();
+        musicAlbum.setDelFlag(true);
+        musicAlbum.setId(id);
+        return this.updateById(musicAlbum);
+    }
+
     private boolean checkNameRepeat(String albumName, Long id) {
         LambdaQueryChainWrapper<MusicAlbum> eq = this.lambdaQuery()
                                                    .eq(MusicAlbum::getAlbumName, albumName);

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

@@ -1,11 +1,17 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.MusicSheetPayDto;
+import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
@@ -13,6 +19,8 @@ import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,6 +33,7 @@ import org.springframework.util.CollectionUtils;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -59,6 +68,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     @Autowired
     private MusicSheetAuthRecordService musicSheetAuthRecordService;
 
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private UserAccountService userAccountService;
+
     public MusicSheetDao getDao() {
         return musicSheetDao;
     }
@@ -290,4 +305,85 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
             return this.saveOrUpdate(musicSheet);
         }
     }
+
+    @Override
+    public HttpResponseResult<OrderCreateRes> buyMusicSheetCheck(OrderReq.OrderReqInfo orderReqInfo) {
+
+        // 下单前的验证
+        getSysUser(orderReqInfo.getUserId());
+
+        MusicSheetPayDto musicSheetPayDto = JSON.parseObject(
+                JSON.toJSONString(orderReqInfo.getBizContent()), MusicSheetPayDto.class);
+
+        MusicSheet musicSheet = this.getById(musicSheetPayDto.getMusicSheetId());
+        OrderCreateRes orderCreateRes = new OrderCreateRes();
+        if (musicSheet == null) {
+            throw new BizException("不存在曲目信息");
+        }
+
+        // 检查已经购买
+        checkoutPay(orderReqInfo.getUserId(),musicSheetPayDto.getMusicSheetId());
+
+
+
+        orderCreateRes.setRes(true);
+        orderCreateRes.setMerchId(musicSheet.getUserId());
+        orderCreateRes.setGoodType(orderCreateRes.getGoodType());
+        orderCreateRes.setBizId(musicSheet.getId());
+        orderCreateRes.setGoodNum(1);
+        orderCreateRes.setOriginalPrice(musicSheet.getMusicPrice());
+        orderCreateRes.setExpectPrice(musicSheet.getMusicPrice());
+        return  HttpResponseResult.succeed(orderCreateRes);
+
+    }
+
+    /**
+     * 检查是否已购买当前曲目
+     *
+     * @param userId 用户id
+     * @param musicSheetId 曲目id
+     */
+    private void checkoutPay(Long userId, Long musicSheetId) {
+        List<MusicSheetPurchaseRecord> list = musicSheetPurchaseRecordService
+                .lambdaQuery()
+                .eq(MusicSheetPurchaseRecord::getMusicSheetId, musicSheetId)
+                .eq(MusicSheetPurchaseRecord::getStudentId, userId)
+                .eq(MusicSheetPurchaseRecord::getOrderStatus, YesOrNoEnum.YES)
+                .list();
+        if (!CollectionUtils.isEmpty(list)) {
+            throw  new BizException("已经购买了当前曲目");
+        }
+    }
+
+    @Override
+    public void buyMusicSheetSuccess(UserOrderDetailVo userOrderDetailVo) {
+        // 保存购买记录
+        MusicSheetPurchaseRecord musicSheetPurchaseRecord = new MusicSheetPurchaseRecord();
+        musicSheetPurchaseRecord.setMusicSheetId(userOrderDetailVo.getBizId());
+        musicSheetPurchaseRecord.setOrderNo(userOrderDetailVo.getOrderNo());
+        musicSheetPurchaseRecord.setPurchasePrice(userOrderDetailVo.getExpectPrice());
+        musicSheetPurchaseRecord.setPurchaseTime(new Date());
+        musicSheetPurchaseRecord.setTeacherId(userOrderDetailVo.getMerchId());
+        musicSheetPurchaseRecord.setOrderStatus(YesOrNoEnum.YES);
+        musicSheetPurchaseRecord.setStudentId(userOrderDetailVo.getUserId());
+        musicSheetPurchaseRecordService.save(musicSheetPurchaseRecord);
+
+        // 加入账户
+        UserAccountRecordDto userAccountRecordDto = new UserAccountRecordDto();
+        userAccountRecordDto.setUserId(userOrderDetailVo.getMerchId());
+        userAccountRecordDto.setFrozenType(FrozenTypeEnum.NONE);
+        userAccountRecordDto.setTransAmount(musicSheetPurchaseRecord.getPurchasePrice());
+        userAccountRecordDto.setInOrOut(InOrOutEnum.IN);
+        userAccountRecordDto.setBizType(AccountBizTypeEnum.MUSIC);
+        userAccountRecordDto.setBizId(musicSheetPurchaseRecord.getMusicSheetId());
+        userAccountRecordDto.setBizName(userOrderDetailVo.getGoodName());
+        userAccountRecordDto.setOrderNo(userOrderDetailVo.getOrderNo());
+        userAccountService.accountChange(userAccountRecordDto);
+    }
+
+    private SysUser getSysUser(Long userId) {
+        return Optional.ofNullable(userId)
+                       .map(sysUserFeignService::queryUserById)
+                       .orElseThrow(() -> new BizException("用户不存在"));
+    }
 }

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

@@ -60,6 +60,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Autowired
     private VideoLessonPurchaseRecordService recordService;
 
+    @Autowired
+    private MusicSheetService musicSheetService;
+
     //验证订单是否可以下单
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
@@ -76,11 +79,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderCreate.put(GoodTypeEnum.VIP, memberPriceSettingsService::orderCreate);
         //直播课程购买
         orderCreate.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourse);
+
         //陪练课购买
         orderCreate.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourse);
         //视频课购买
         orderCreate.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourse);
 
+        //曲目购买
+        orderCreate.put(GoodTypeEnum.MUSIC,musicSheetService::buyMusicSheetCheck);
+
+
         /**********订单生成后******************/
 
         /**********订单完成后******************/
@@ -88,11 +96,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderSuccess.put(GoodTypeEnum.VIP, memberPriceSettingsService::orderSuccess);
         //直播课程购买
         orderSuccess.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourseSuccess);
+
         //陪练课购买
         orderSuccess.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseSuccess);
         //视频课购买
         orderSuccess.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourseSuccess);
 
+
+        //曲目购买
+        orderSuccess.put(GoodTypeEnum.MUSIC,musicSheetService::buyMusicSheetSuccess);
+
         /**********订单取消后******************/
         //陪练课购买
         orderCancel.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseFailed);

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

@@ -6,10 +6,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDao;
+import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonPurchaseRecordDao;
+import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.biz.dal.service.UserAccountService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonPurchaseRecordService;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
@@ -43,6 +47,8 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
     private VideoLessonPurchaseRecordDao videoLessonPurchaseRecordDao;
     @Autowired
     private VideoLessonGroupDao videoLessonGroupDao;
+    @Autowired
+    private UserAccountService userAccountService;
 
     public VideoLessonPurchaseRecordDao getDao() {
         return videoLessonPurchaseRecordDao;
@@ -55,7 +61,7 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
      */
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<OrderCreateRes> buyVideoCourse(OrderReq.OrderReqInfo orderReqInfo) {
-        log.info("学生购买视频课程组,请求参数:{}", JSON.toJSONString(orderReqInfo));
+        log.info("buyVideoCourse  param:{}", JSON.toJSONString(orderReqInfo));
         Long studentId = orderReqInfo.getUserId();
         String orderNo = orderReqInfo.getOrderNo();
 
@@ -72,7 +78,6 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
             throw new BizException("课程组不存在!");
         }
 
-        orderNo="999";
         purchaseRecord.setOrderNo(orderNo);
         purchaseRecord.setStudentId(studentId);
         purchaseRecord.setOrderStatus(0);
@@ -89,6 +94,7 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         orderCreateRes.setGoodType(GoodTypeEnum.VIDEO);
         HttpResponseResult<OrderCreateRes> httpResponseResult = new HttpResponseResult<>();
         httpResponseResult.setData(orderCreateRes);
+        log.info("buyVideoCourse  return {}", httpResponseResult);
         return httpResponseResult;
     }
 
@@ -102,14 +108,27 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         log.info("学生购买视频课-成功-回调,请求参数:{}", JSON.toJSONString(orderParam));
         String orderNo = orderParam.getOrderNo();
 
-        VideoLessonPurchaseRecord videoGroup = videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
+        VideoLessonPurchaseRecord purchaseRecord = videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
                 .eq(VideoLessonPurchaseRecord::getOrderNo, orderNo));
-        if (videoGroup == null) {
-            throw new BizException("课程组不存在!");
+        if (purchaseRecord == null) {
+            throw new BizException("课程组购买记录不存在!");
         }
 
         //video_lesson_purchase_record中order_status_改为1
         videoLessonPurchaseRecordDao.updateStatus(orderNo);
+        //查询组信息
+        VideoLessonGroup lessonGroup = videoLessonGroupDao.selectById(purchaseRecord.getVideoLessonGroupId());
+
+        //记录流水
+        UserAccountRecordDto userAccountRecord = new UserAccountRecordDto();
+        userAccountRecord.setUserId(lessonGroup.getTeacherId());
+        userAccountRecord.setTransAmount(purchaseRecord.getPayMoney());
+        userAccountRecord.setInOrOut(InOrOutEnum.IN);
+        userAccountRecord.setBizType(AccountBizTypeEnum.VIDEO);
+        userAccountRecord.setBizId(lessonGroup.getTeacherId());
+        userAccountRecord.setBizName(lessonGroup.getLessonName());
+        userAccountRecord.setOrderNo(orderNo);
+        userAccountService.accountChange(userAccountRecord);
     }
 
     /**

+ 26 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CheckVo.java

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 检查功能返回
+ *
+ * @author liujunchi
+ * @date 2022-04-21
+ */
+@ApiModel("返回检查结果")
+public class CheckVo {
+
+    @ApiModelProperty("检查结果 1:是,0:否 ")
+    private YesOrNoEnum check;
+
+    public YesOrNoEnum getCheck() {
+        return check;
+    }
+
+    public void setCheck(YesOrNoEnum check) {
+        this.check = check;
+    }
+}

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

@@ -24,12 +24,23 @@ public class MusicSheetDetailVo extends MusicSheet {
     @ApiModelProperty("上传老师名称")
     private String userName;
 
+    @ApiModelProperty("上传用户头像")
+    private String userAvatar;
+
     @ApiModelProperty("标签名")
     private String musicTagNames;
 
     @ApiModelProperty("声部名")
     private String subjectNames;
 
+    public String getUserAvatar() {
+        return userAvatar;
+    }
+
+    public void setUserAvatar(String userAvatar) {
+        this.userAvatar = userAvatar;
+    }
+
     public String getMusicTagNames() {
         return musicTagNames;
     }

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

@@ -106,7 +106,7 @@
 	<!-- 分页查询 -->
 	<select id="queryPageList" resultMap="ContractTemplateDto"
 		parameterType="map">
-		SELECT tct.*,u.real_name_ latest_operator_ FROM contract_template tct left join sys_user u on tct.modify_by_ = u.id_ 
+		SELECT tct.*,ifnull(u.real_name_,u.username_) latest_operator_ FROM contract_template tct left join sys_user u on tct.modify_by_ = u.id_ 
 		<where>
 			<if test="status != null">
 				and tct.status_ = #{status}

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

@@ -44,6 +44,7 @@
         left join (select count(1) as num,amr.album_id_ from album_music_relate amr group by amr.album_id_) t1 on t1.album_id_ = t.id_
         left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
         <where>
+            t.del_flag_ = 0
             <if test="query.idAndName != null and query.idAndName != ''">
                 and (t.id_ like concat('%',#{query.idAndName},'%') or
                     t.album_name_ like concat('%',#{query.idAndName},'%'))
@@ -77,6 +78,7 @@
         from music_album t
         left join album_favorite af2 on af2.album_id_ = t.id_
         <where>
+            t.del_flag_ = 0
             <if test="query.studentId != null">
                 and af2.user_id_ = #{query.studentId}
             </if>
@@ -105,6 +107,7 @@
         left join (select count(1) as num,amr.album_id_ from album_music_relate amr group by amr.album_id_) t1 on t1.album_id_ = t.id_
         left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
         <where>
+            t.del_flag_ = 0
             <if test="records != null and records.size() != 0">
                 and t.id_ in
                 <foreach collection="records" item="item" open="(" close=")" separator=",">

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

@@ -170,6 +170,7 @@
         ,msa.metronome_url_ as accompanimentMetronomeUrl
         ,msa.track_ as track
         ,su.username_ as userName
+        ,su.avatar_ as userAvatar
         ,(select group_concat(mt.name_) from music_tag mt
         where find_in_set(mt.id_,t.music_tag_) and mt.del_flag_ = 0) as musicTagNames
         ,(select group_concat(s.name_) from subject s

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

@@ -81,4 +81,18 @@
             parameterType="java.lang.Long">
         SELECT * FROM teacher_subject_price WHERE teacher_free_time_id = #{id}
     </select>
+    <select id="selectSubjectPrice" resultType="com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice">
+        SELECT
+            p.id_ AS id,
+            p.teacher_free_time_id AS teacherFreeTimeId,
+            p.teacher_id_ AS teacherId,
+            p.free_minutes_ AS freeMinutes,
+            p.course_minutes_ AS courseMinutes,
+            p.subject_id_ AS subjectId,
+            p.subject_name_ AS subjectName,
+            p.subject_price_ AS subjectPrice
+        FROM teacher_free_time f
+        LEFT JOIN teacher_subject_price p ON f.id_=p.teacher_free_time_id
+        WHERE f.teacher_id_=#{teacherId} AND f.default_flag_=1 AND p.subject_id_=#{subjectId}
+    </select>
 </mapper>

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

@@ -270,13 +270,13 @@
 				)
 			</if>
 			<if test="param.auditStatus !=null and param.auditStatus !=''">
-				AND g.audit_status_ = #{param.auditStatus}
+				AND r.audit_status_ = #{param.auditStatus}
 			</if>
 			<if test="param.subjectId !=null">
 				AND g.lesson_subject_ = #{param.subjectId}
 			</if>
 			<if test="param.auditName !=null and param.auditName !=''">
-				AND g.audit_name_ LIKE CONCAT('%', #{param.auditName}, '%')
+				AND r.audit_name_ LIKE CONCAT('%', #{param.auditName}, '%')
 			</if>
 			<if test="param.startTime !=null">
 				<![CDATA[AND g.create_time_ >= #{param.startTime} ]]>

+ 44 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.student.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
@@ -9,18 +10,23 @@ import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.CheckVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.cooleshow.common.page.QueryInfo;
+import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
+import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+
 /**
  * 曲谱表 web 控制层
  * @author yzp
@@ -138,4 +144,42 @@ public class MusicSheetController extends BaseController {
         return succeed(PageUtil.pageInfo(sheetVoIPage));
     }
 
+
+    /**
+     * 最近练习
+     */
+    @GetMapping("/realNameAuth/check")
+    @ApiOperation(value = "检查实名认证")
+    public HttpResponseResult<CheckVo> realNameAuthCheck() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+
+        CheckVo checkVo = new CheckVo();
+        if (StringUtil.isEmpty(sysUser.getIdCardNo())) {
+            checkVo.setCheck(YesOrNoEnum.NO);
+        }  else {
+            checkVo.setCheck(YesOrNoEnum.YES);
+        }
+        return succeed(checkVo);
+    }
+
+
+    /**
+     * 实名认证
+     */
+    @PostMapping(value = "/realNameAuth" ,consumes="application/json", produces="application/json")
+    @ApiOperation(value = "实名认证", httpMethod="POST",consumes="application/json", produces="application/json")
+    public HttpResponseResult<IdcardInfoExtractor> realNameAuth(@Valid @RequestBody RealnameAuthReq realNameAuthDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+
+        return sysUserFeignService.realNameAuth(realNameAuthDto);
+    }
+
+
+
 }