Explorar el Código

Merge remote-tracking branch 'origin/master'

weifanli hace 3 años
padre
commit
d39aef24d0
Se han modificado 47 ficheros con 357 adiciones y 168 borrados
  1. 6 0
      cooleshow-auth/auth-server/pom.xml
  2. 24 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/RongCloudConfig.java
  3. 17 5
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  4. 0 3
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  5. 3 4
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  6. 12 8
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  7. 54 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java
  8. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java
  9. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  10. 0 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupDao.java
  11. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupMemberAuditDao.java
  12. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupMemberDao.java
  13. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java
  14. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  15. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java
  16. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupMember.java
  17. 5 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupMemberAudit.java
  18. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupNotice.java
  19. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MemberPriceSettings.java
  20. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupMemberAuditService.java
  21. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupMemberService.java
  22. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java
  23. 1 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  24. 55 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  25. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/EmployeeServiceImpl.java
  26. 2 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberAuditServiceImpl.java
  27. 8 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberServiceImpl.java
  28. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupNoticeServiceImpl.java
  29. 10 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
  30. 16 29
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java
  31. 34 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseScheduleStudentPaymentVo.java
  32. 11 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonExamineVo.java
  33. 16 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  34. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/EmployeeMapper.xml
  35. 1 16
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  36. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMemberAuditMapper.xml
  37. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  38. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupNoticeMapper.xml
  39. 2 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MemberPriceSettingsMapper.xml
  40. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  41. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  42. 3 2
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupMemberController.java
  43. 1 4
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java
  44. 2 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupController.java
  45. 5 6
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupMemberAuditController.java
  46. 4 3
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupMemberController.java
  47. 6 7
      toolset/utils/src/main/java/com/yonge/toolset/utils/easyexcel/ExcelDataReader.java

+ 6 - 0
cooleshow-auth/auth-server/pom.xml

@@ -83,6 +83,12 @@
 			<groupId>com.yonge.toolset</groupId>
 			<artifactId>thirdparty-component</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cn.rongcloud.im</groupId>
+            <artifactId>server-sdk-java</artifactId>
+            <version>3.2.17</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 24 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/RongCloudConfig.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.auth.config;
+
+import io.rong.RongCloud;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+@Configuration
+public class RongCloudConfig {
+
+    @Value("${cn.rongcloud.im.appkey}")
+    private String appKey;
+    @Value("${cn.rongcloud.im.secret}")
+    private String appSecret;
+
+    public static RongCloud rongCloud;
+
+    @Bean
+    @Primary
+    public void getRongCloud() {
+        rongCloud = RongCloud.getInstance(appKey,appSecret);
+    }
+}

+ 17 - 5
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationSuccessEventHandler.java

@@ -9,6 +9,12 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.yonge.cooleshow.auth.config.RongCloudConfig;
+import com.yonge.cooleshow.common.entity.ImResult;
+import com.yonge.cooleshow.common.entity.ImUserModel;
+import com.yonge.cooleshow.common.exception.BizException;
+import io.rong.models.response.TokenResult;
+import io.rong.models.user.UserModel;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -51,7 +57,6 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 	private SysUserService sysUserService;
 	@Autowired
 	private ObjectMapper objectMapper;
-	
 	@Autowired
 	private ClientDetailsService clientDetailsService;
 
@@ -83,10 +88,17 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 			if(StringUtils.isEmpty(name)){
 				name = sysUser.getUsername();
 			}
-			/*ImResult register = imFeignService.register(new ImUserModel(sysUser.getId().toString(), name, sysUser.getAvatar()));
-			sysUser.setImToken(register.getToken());
-			sysUser.setUpdateTime(new Date());
-			sysUserService.update(sysUser);*/
+			try {
+				TokenResult result = RongCloudConfig.rongCloud.user.register(new UserModel(sysUser.getId().toString(), name, sysUser.getAvatar()));
+				if(!result.code.equals(200)){
+					logger.error("获取用户token失败:{}",result.errorMessage);
+				}
+				sysUser.setImToken(result.getToken());
+				sysUser.setUpdateTime(new Date());
+				sysUserService.update(sysUser);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
 		}
 		Date date = new Date();
 		//修改添加登录信息

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

@@ -2,9 +2,6 @@ package com.yonge.cooleshow.auth.core.provider;
 
 import java.util.Date;
 
-import com.yonge.cooleshow.auth.api.entity.SysConfig;
-import com.yonge.cooleshow.auth.service.SysConfigService;
-import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.InternalAuthenticationServiceException;

+ 3 - 4
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java

@@ -2,15 +2,14 @@ package com.yonge.cooleshow.auth.dal.dao;
 
 import java.util.List;
 
+import org.apache.ibatis.annotations.Param;
+
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
 import com.yonge.cooleshow.auth.api.dto.UserSetReq;
-import com.yonge.cooleshow.auth.api.vo.UserSetVo;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import org.apache.ibatis.annotations.Param;
-
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.UserLockFlag;
+import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.common.dal.BaseDAO;
 import com.yonge.cooleshow.common.entity.ImUserModel;
 

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

@@ -3,26 +3,24 @@ package com.yonge.cooleshow.auth.service.impl;
 import java.util.Date;
 import java.util.List;
 
-import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
-import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
-import com.yonge.cooleshow.auth.api.dto.UserSetReq;
-import com.yonge.cooleshow.auth.api.vo.UserSetVo;
-import com.yonge.cooleshow.auth.service.SysConfigService;
-import com.yonge.cooleshow.common.constant.SysConfigConstant;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.userdetails.User;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
+import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
+import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.auth.dal.dao.SysUserDao;
+import com.yonge.cooleshow.auth.service.SysConfigService;
 import com.yonge.cooleshow.auth.service.SysRoleMenuService;
 import com.yonge.cooleshow.auth.service.SysUserRoleService;
 import com.yonge.cooleshow.auth.service.SysUserService;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.dal.BaseDAO;
 import com.yonge.cooleshow.common.entity.ImUserModel;
 import com.yonge.cooleshow.common.exception.BizException;
@@ -179,14 +177,20 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void saveStudent(Long userId) {
         sysUserDao.saveStudent(userId);
+        //创建老师账户
+        sysUserDao.createUserAccount(userId);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void saveTeacher(Long userId) {
 
         sysUserDao.saveTeacher(userId);
+        //创建老师账户
+        sysUserDao.createUserAccount(userId);
     }
 
     @Override

+ 54 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java

@@ -0,0 +1,54 @@
+package com.yonge.cooleshow.admin.controller;
+
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.ImGroup;
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.*;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 即时通讯群组(ImGroup)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 10:45:56
+ */
+@Api(tags = "即时通讯群组")
+@RestController
+@RequestMapping("/imGroup")
+public class ImGroupController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImGroupService imGroupService;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation("获取群详情")
+    @PostMapping(value = "/getDetail/{groupId}")
+    @PreAuthorize("@pcs.hasPermissions('imGroup/detail')")
+    public HttpResponseResult<ImGroup> getDetail(@ApiParam(value = "群编号", required = true) @PathVariable("groupId") Long groupId) throws Exception {
+        return succeed(imGroupService.getById(groupId));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "根据群名称、编号、简介模糊查询"),
+    })
+    @ApiOperation("群列表")
+    @PostMapping(value = "/queryAll")
+    @PreAuthorize("@pcs.hasPermissions('imGroup/queryAll')")
+    public HttpResponseResult<List<ImGroup>> queryAll(@RequestBody Map<String,Object> params) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        params.put("userId",sysUser.getId());
+        return succeed(imGroupService.queryAll(params));
+    }
+}
+

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

@@ -72,7 +72,7 @@ public class SubjectController extends BaseController {
 
 	@ApiOperation(value = "删除指定声部")
 	@PostMapping("/delete/{id}")
-	@PreAuthorize("@pcs.hasPermissions('subject/get')")
+	@PreAuthorize("@pcs.hasPermissions('subject/delete')")
 	public HttpResponseResult<Subject> delete(@ApiParam(value = "声部编号", required = true) @PathVariable("id") Long id) {
 		subjectService.deleteById(id);
 		return succeed();

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -2,6 +2,8 @@ package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.yonge.cooleshow.biz.dal.vo.CourseScheduleStudentPaymentVo;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -36,6 +38,10 @@ public interface CourseScheduleStudentPaymentDao extends BaseMapper<CourseSchedu
      */
     List<LiveCourseInfoVo.CourseBuyStudentVo> queryStudentInfoByGroupId(@Param("groupId") Long groupId);
 
+    //查询所有购买陪练课用户id
     List<Long> selectAll();
+
+    //根据查询锁定中的课程
+    List<CourseScheduleStudentPaymentVo> selectPaymentList(String orderNo);
 }
 

+ 0 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupDao.java

@@ -15,10 +15,6 @@ import java.util.Map;
  */
 public interface ImGroupDao extends BaseMapper<ImGroup> {
 
-    int insertBatch(@Param("entities") List<ImGroup> entities);
-
-    ImGroup getLock(@Param("groupId") Long groupId);
-
     List<ImGroup> findAll(Map<String, Object> params);
 }
 

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

@@ -28,6 +28,6 @@ public interface ImGroupMemberAuditDao extends BaseMapper<ImGroupMemberAudit> {
 
     List<ImGroupMemberAudit> findByIds(@Param("auditIds") String auditIds);
 
-    void delByGroupId(@Param("groupId") Long groupId);
+    void delByGroupId(@Param("groupId") String groupId);
 }
 

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

@@ -19,7 +19,7 @@ public interface ImGroupMemberDao extends BaseMapper<ImGroupMember> {
 
     int insertBatch(@Param("entities") List<ImGroupMember> entities);
 
-    void delByGroupId(@Param("groupId") Long groupId);
+    void delByGroupId(@Param("groupId") String groupId);
 
     ImGroupMember findOne(Map<String, Object> params);
 
@@ -30,7 +30,7 @@ public interface ImGroupMemberDao extends BaseMapper<ImGroupMember> {
     * @author zx
     * @date 2022/3/23 15:17
     */
-    List<GroupMember> queryGroupMember(@Param("groupId") Long groupId);
+    List<GroupMember> queryGroupMember(@Param("groupId") String groupId);
 
     /**
      * @description: 获取群成员列表
@@ -41,10 +41,10 @@ public interface ImGroupMemberDao extends BaseMapper<ImGroupMember> {
      * @author zx
      * @date 2022/3/23 17:08
      */
-    List<ImGroupMember> initImGroupMember(@Param("imGroupId") Long imGroupId,
+    List<ImGroupMember> initImGroupMember(@Param("imGroupId") String imGroupId,
                                            @Param("userIds") Set<Long> userIds,
                                            @Param("roleType") String roleType);
 
-    ImGroupMember findByUserIdAndGroupId(@Param("userId") Long userId, @Param("groupId") Long groupId);
+    ImGroupMember findByUserIdAndGroupId(@Param("userId") Long userId, @Param("groupId") String groupId);
 }
 

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

@@ -1,12 +1,10 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import java.util.List;
-import java.util.Map;
 
 import org.apache.ibatis.annotations.Param;
 
 import com.yonge.cooleshow.biz.dal.entity.Subject;
-import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.dal.BaseDAO;
 
 public interface SubjectDao extends BaseDAO<Long, Subject> {
@@ -45,4 +43,6 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
 
     //根据声部id查详情
     Subject selectSubjectById(String lessonSubject);
+    
+    Subject queryByName(String name);
 }

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

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModel;

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

@@ -21,10 +21,10 @@ import java.util.Date;
  */
 @ApiModel(value = "im_group-即时通讯群组")
 public class ImGroup implements Serializable {
-    @TableId(value = "id_", type = IdType.AUTO)
-    @NotNull(message = "群编号不可为空")
+    @TableId(value = "id_")
+    @NotBlank(message = "群编号不可为空")
     @ApiModelProperty(value = "主键;")
-    private Long id;
+    private String id;
 
     @NotBlank(message = "群名称不能为空")
     @TableField("name_")
@@ -103,11 +103,11 @@ public class ImGroup implements Serializable {
         this.createBy = createBy;
     }
 
-    public Long getId() {
+    public String getId() {
         return id;
     }
 
-    public void setId(Long id) {
+    public void setId(String id) {
         this.id = id;
     }
 

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

@@ -25,7 +25,7 @@ public class ImGroupMember implements Serializable {
 
     @TableField("group_id_")
     @ApiModelProperty(value = "群编号;")
-    private Long groupId;
+    private String groupId;
 
     @TableField("user_id_")
     @ApiModelProperty(value = "用户编号;")
@@ -58,7 +58,7 @@ public class ImGroupMember implements Serializable {
     public ImGroupMember() {
     }
 
-    public ImGroupMember(Long groupId, Long userId, String nickname, String avatar, Boolean isAdmin, ImGroupMemberRoleType roleType) {
+    public ImGroupMember(String groupId, Long userId, String nickname, String avatar, Boolean isAdmin, ImGroupMemberRoleType roleType) {
         this.groupId = groupId;
         this.userId = userId;
         this.avatar = avatar;
@@ -103,11 +103,11 @@ public class ImGroupMember implements Serializable {
         this.id = id;
     }
 
-    public Long getGroupId() {
+    public String getGroupId() {
         return groupId;
     }
 
-    public void setGroupId(Long groupId) {
+    public void setGroupId(String groupId) {
         this.groupId = groupId;
     }
 

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
@@ -33,9 +34,9 @@ public class ImGroupMemberAudit implements Serializable {
     private ImGroupMember.ImGroupMemberRoleType roleType;
 
     @TableField("group_id_")
-    @NotNull(message = "群编号不可为空")
+    @NotBlank(message = "群编号不可为空")
     @ApiModelProperty(value = "群组编号")
-    private Long groupId;
+    private String groupId;
 
     @TableField("desc_")
     @ApiModelProperty(value = "申请原因")
@@ -78,11 +79,11 @@ public class ImGroupMemberAudit implements Serializable {
         this.roleType = roleType;
     }
 
-    public Long getGroupId() {
+    public String getGroupId() {
         return groupId;
     }
 
-    public void setGroupId(Long groupId) {
+    public void setGroupId(String groupId) {
         this.groupId = groupId;
     }
 

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

@@ -26,9 +26,9 @@ public class ImGroupNotice implements Serializable {
     private Long id;
 
     @TableField("group_id_")
-    @NotNull(message = "群编号不可为空")
+    @NotBlank(message = "群编号不可为空")
     @ApiModelProperty(value = "群编号;")
-    private Long groupId;
+    private String groupId;
 
     @TableField("title_")
     @NotBlank(message = "公告标题不可为空")
@@ -72,11 +72,11 @@ public class ImGroupNotice implements Serializable {
         this.id = id;
     }
 
-    public Long getGroupId() {
+    public String getGroupId() {
         return groupId;
     }
 
-    public void setGroupId(Long groupId) {
+    public void setGroupId(String groupId) {
         this.groupId = groupId;
     }
 

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

@@ -35,6 +35,8 @@ public class MemberPriceSettings {
 	@ApiModelProperty(value = "更新人",required = false)
 	private Long updateBy;
 	
+	private String modifierName;
+	
 	public MemberPriceSettings setId(Integer id){
 		this.id = id;
 		return this;
@@ -107,6 +109,14 @@ public class MemberPriceSettings {
 		return this.updateBy;
 	}
 			
+	public String getModifierName() {
+		return modifierName;
+	}
+
+	public void setModifierName(String modifierName) {
+		this.modifierName = modifierName;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -37,7 +37,7 @@ public interface ImGroupMemberAuditService extends IService<ImGroupMemberAudit>
     * @author zx
     * @date 2022/3/22 19:58
     */
-    void applyAudit(String auditId, AuditStatusEnum auditStatus,Long groupId) throws Exception;
+    void applyAudit(String auditId, AuditStatusEnum auditStatus,String groupId) throws Exception;
 
     List<ImGroupMemberAudit> queryAll(ImGroupMemberAuditQueryInfo queryInfo);
 }

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

@@ -37,7 +37,7 @@ public interface ImGroupMemberService extends IService<ImGroupMember> {
     * @author zx
     * @date 2022/3/22 15:59
     */
-    List<GroupMember> initGroupMember(Long imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception;
+    List<GroupMember> initGroupMember(String imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception;
 
     /**
     * @description: 添加群成员
@@ -48,7 +48,7 @@ public interface ImGroupMemberService extends IService<ImGroupMember> {
     * @author zx
     * @date 2022/3/22 15:59
     */
-    List<GroupMember> initGroupMembers(Long imGroupId, Set<Long> userIds, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception;
+    List<GroupMember> initGroupMembers(String imGroupId, Set<Long> userIds, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception;
 
     /**
     * @description: 加入融云群
@@ -58,7 +58,7 @@ public interface ImGroupMemberService extends IService<ImGroupMember> {
     * @author zx
     * @date 2022/3/23 17:50
     */
-    void join(List<GroupMember> groupMemberList,Long imGroupId) throws Exception;
+    void join(List<GroupMember> groupMemberList,String imGroupId) throws Exception;
 
     /**
     * @description: 删除群成员
@@ -67,7 +67,7 @@ public interface ImGroupMemberService extends IService<ImGroupMember> {
     * @author zx
     * @date 2022/3/22 16:21
     */
-    void delByGroupId(Long groupId);
+    void delByGroupId(String groupId);
 
     /**
     * @description: 获取群成员基本信息
@@ -77,6 +77,6 @@ public interface ImGroupMemberService extends IService<ImGroupMember> {
     * @author zx
     * @date 2022/3/24 13:53
     */
-    ImGroupMember getUserDetail(Long userId, Long groupId);
+    ImGroupMember getUserDetail(Long userId, String groupId);
 }
 

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

@@ -39,7 +39,7 @@ public interface ImGroupService extends IService<ImGroup> {
     * @author zx
     * @date 2022/3/22 11:17
     */
-    void dismiss(Long groupId) throws Exception;
+    void dismiss(String groupId) throws Exception;
 
     /**
     * @description: 同步群成员数量
@@ -47,7 +47,7 @@ public interface ImGroupService extends IService<ImGroup> {
     * @author zx
     * @date 2022/3/22 11:17
     */
-    void syncGroupMemberNum(Long groupId) throws Exception;
+    void syncGroupMemberNum(String groupId) throws Exception;
 
     List<ImGroup> queryAll(Map<String, Object> params);
 }

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

@@ -54,7 +54,6 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -648,7 +647,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         courseList.forEach(course -> {
             CourseScheduleTeacherSalary teacherSalary = new CourseScheduleTeacherSalary();
             teacherSalary.setTeacherId(course.getTeacherId());
-            teacherSalary.setStudentId(course.getTeacherId());
+            teacherSalary.setStudentId(studentPayment.getUserId());
             teacherSalary.setCourseScheduleId(course.getId());
             teacherSalary.setCourseGroupType(course.getType());
             teacherSalary.setCourseGroupId(course.getCourseGroupId());

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

@@ -21,6 +21,7 @@ import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.CourseGroupEnum;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.TeacherSalaryEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
@@ -41,6 +42,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.*;
@@ -75,6 +77,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     private CourseGroupService courseGroupService;
     @Autowired
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+    @Autowired
+    private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
 
     @Override
     public CourseScheduleDao getDao() {
@@ -799,7 +803,29 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         pageInfo.setAsc(" cs.start_time_");
         return PageUtil.pageInfo(baseMapper.queryStudentLiveCourse(pageInfo, param));
     }
-
+    /**
+     * 计算课堂每节课价格
+     *
+     * @param totalCourseNum 总课程数
+     * @param totalRatePrice 总金额
+     * @return key 课堂数 value 课酬
+     */
+    private Map<Integer, BigDecimal> getCourseAveragePrice(Integer totalCourseNum, BigDecimal totalRatePrice) {
+        //每节课的单价 四舍五入
+        BigDecimal singerSalary = totalRatePrice.divide(BigDecimal.valueOf(totalCourseNum), 2, RoundingMode.HALF_UP);
+        //单价累计总额
+        BigDecimal cumulativeAmount = BigDecimal.ZERO;
+        Map<Integer, BigDecimal> map = new HashMap<>();
+        for (int i = 1; i <= totalCourseNum; i++) {
+            //最后一节课,直接用总课酬减去累计总额
+            if (i == totalCourseNum) {
+                singerSalary = totalRatePrice.subtract(cumulativeAmount);
+            }
+            cumulativeAmount = cumulativeAmount.add(singerSalary);
+            map.put(i, singerSalary);
+        }
+        return map;
+    }
     /**
      * @Description: 学生购买陪练课
      * @Author: cy
@@ -826,7 +852,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         baseMapper.addCourseGroup(scheduleDto);
         Long groupId = scheduleDto.getGroupId();
 
-        BigDecimal unitPrice = scheduleDto.getUnitPrice();
+        //获取每节课购买的价格
+        Map<Integer, BigDecimal> courseAveragePrice = getCourseAveragePrice(scheduleDto.getCourseNum(), scheduleDto.getCoursePrice());
+
         List<CourseScheduleDate> classTime = scheduleDto.getClassTime();
         for (int i = 0; i < classTime.size(); i++) {
             CourseScheduleDate date = classTime.get(i);
@@ -851,9 +879,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             payment.setCourseGroupId(groupId);
             payment.setCourseType(CourseScheduleEnum.PRACTICE.getCode());
             payment.setOrderNo(orderNo);
-            payment.setOriginalPrice(unitPrice);
-            payment.setExpectPrice(unitPrice);
-            payment.setActualPrice(unitPrice);
+            payment.setOriginalPrice(courseAveragePrice.get(i+1));
+            payment.setExpectPrice(courseAveragePrice.get(i+1));
+            payment.setActualPrice(courseAveragePrice.get(i+1));
             //写入course_schedule_student_payment
             courseScheduleStudentPaymentService.save(payment);
         }
@@ -878,8 +906,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     public void buyPracticeCourseSuccess(UserOrderDetailVo orderParam) {
         log.info("学生购买陪练课-成功-回调,请求参数:{}", JSON.toJSONString(orderParam));
         String orderNo = orderParam.getOrderNo();
-        List<CourseScheduleStudentPayment> paymentList = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
-                .eq(CourseScheduleStudentPayment::getOrderNo, orderNo));
+        List<CourseScheduleStudentPaymentVo> paymentList = paymentDao.selectPaymentList(orderNo);
         if (paymentList.isEmpty()) {
             throw new BizException("订单不存在!");
         }
@@ -887,6 +914,26 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //course_schedule中lock_改为0
         List<Long> scheduleIds = paymentList.stream().map(CourseScheduleStudentPayment::getCourseId).collect(Collectors.toList());
         baseMapper.updateLock(scheduleIds);
+
+        //写course_schedule_teacher_salary
+        Date now = new Date();
+        List<CourseScheduleTeacherSalary> teacherSalaryList = new ArrayList<>();
+        for (CourseScheduleStudentPaymentVo payment : paymentList) {
+            CourseScheduleTeacherSalary teacherSalary = new CourseScheduleTeacherSalary();
+            teacherSalary.setTeacherId(payment.getTeacherId());
+            teacherSalary.setStudentId(payment.getUserId());
+            teacherSalary.setCourseScheduleId(payment.getCourseId());
+            teacherSalary.setCourseGroupType(payment.getCourseType());
+            teacherSalary.setCourseGroupId(payment.getCourseGroupId());
+            teacherSalary.setClassNum(payment.getClassNum());
+            teacherSalary.setExpectSalary(payment.getExpectPrice());
+            teacherSalary.setActualSalary(payment.getActualPrice());
+            teacherSalary.setReduceSalary(BigDecimal.ZERO);
+            teacherSalary.setStatus(TeacherSalaryEnum.NOT_START.getCode());
+            teacherSalaryList.add(teacherSalary);
+            teacherSalary.setCreateTime(now);
+        }
+        courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
     }
 
     /**
@@ -937,5 +984,4 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         homePage.setVideoList(baseMapper.selectVideo());
         return homePage;
     }
-}
-
+}

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

@@ -59,6 +59,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Long, Employee> impleme
             //初始密码,手机号后6位
             String password = param.getPhone().substring(param.getPhone().length() - 6);
             sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
+            sysUser.setGender(param.getGender().getCode());
             sysUser.setCreateTime(new Date());
             sysUser.setUpdateTime(new Date());
             employeeDao.insertSysUser(sysUser);

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

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -13,9 +12,7 @@ import com.yonge.cooleshow.biz.dal.queryInfo.ImGroupMemberAuditQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberAuditService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.exception.BizException;
-import com.yonge.cooleshow.common.page.PageInfo;
 import io.rong.models.group.GroupMember;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,7 +49,7 @@ public class ImGroupMemberAuditServiceImpl extends ServiceImpl<ImGroupMemberAudi
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void apply(ImGroupMemberAudit imGroupMemberAudit) throws Exception {
-        Long groupId = imGroupMemberAudit.getGroupId();
+        String groupId = imGroupMemberAudit.getGroupId();
         ImGroup imGroup = imGroupService.getById(groupId);
         if(Objects.isNull(imGroup)){
             throw new BizException("群组信息不存在");
@@ -92,7 +89,7 @@ public class ImGroupMemberAuditServiceImpl extends ServiceImpl<ImGroupMemberAudi
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void applyAudit(String auditIds, AuditStatusEnum auditStatus,Long groupId) throws Exception {
+    public void applyAudit(String auditIds, AuditStatusEnum auditStatus,String groupId) throws Exception {
         if(auditStatus == AuditStatusEnum.AUDITING ){
             throw new BizException("操作失败:审核状态异常");
         }

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

@@ -54,7 +54,7 @@ public class ImGroupMemberServiceImpl extends ServiceImpl<ImGroupMemberDao, ImGr
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public List<GroupMember> initGroupMember(Long imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception {
+    public List<GroupMember> initGroupMember(String imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception {
         //记录群成员
         BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(userId);
         String username = roleType== ImGroupMember.ImGroupMemberRoleType.TEACHER?basicUserInfo.getRealName():basicUserInfo.getUsername();
@@ -65,13 +65,13 @@ public class ImGroupMemberServiceImpl extends ServiceImpl<ImGroupMemberDao, ImGr
         this.baseMapper.insert(imGroupMember);
         //加入融云群
         List<GroupMember> groupMemberList = new ArrayList<>();
-        groupMemberList.add(new GroupMember(userId.toString(),imGroupId.toString(),null));
+        groupMemberList.add(new GroupMember(userId.toString(),imGroupId,null));
         return groupMemberList;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public List<GroupMember> initGroupMembers(Long imGroupId, Set<Long> userIds, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception {
+    public List<GroupMember> initGroupMembers(String imGroupId, Set<Long> userIds, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception {
         //记录群成员
         List<ImGroupMember> imGroupMembers = baseMapper.initImGroupMember(imGroupId,userIds,roleType.getCode());
         List<GroupMember> groupMemberList = new ArrayList<>();
@@ -79,7 +79,7 @@ public class ImGroupMemberServiceImpl extends ServiceImpl<ImGroupMemberDao, ImGr
             baseMapper.insertBatch(imGroupMembers);
             //加入融云群
             for (Long userId : userIds) {
-                groupMemberList.add(new GroupMember(userId.toString(),imGroupId.toString(),null));
+                groupMemberList.add(new GroupMember(userId.toString(),imGroupId,null));
             }
             return groupMemberList;
         }
@@ -87,9 +87,9 @@ public class ImGroupMemberServiceImpl extends ServiceImpl<ImGroupMemberDao, ImGr
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void join(List<GroupMember> groupMemberList,Long imGroupId) throws Exception {
+    public void join(List<GroupMember> groupMemberList,String imGroupId) throws Exception {
         GroupMember[] groupMembers = groupMemberList.toArray(new GroupMember[groupMemberList.size()]);
-        GroupModel groupModel = new GroupModel(imGroupId.toString(), 0);
+        GroupModel groupModel = new GroupModel(imGroupId, 0);
         groupModel.setMembers(groupMembers);
         ImGroup imGroup = imGroupDao.selectById(imGroupId);
         groupModel.setName(imGroup.getName());
@@ -102,12 +102,12 @@ public class ImGroupMemberServiceImpl extends ServiceImpl<ImGroupMemberDao, ImGr
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void delByGroupId(Long groupId) {
+    public void delByGroupId(String groupId) {
         this.baseMapper.delByGroupId(groupId);
     }
 
     @Override
-    public ImGroupMember getUserDetail(Long userId, Long groupId) {
+    public ImGroupMember getUserDetail(Long userId, String groupId) {
         ImGroupMember imGroupMember = baseMapper.findByUserIdAndGroupId(userId,groupId);
         if(Objects.isNull(imGroupMember)){
             throw new BizException("当前用户不在此群组");

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

@@ -85,7 +85,7 @@ public class ImGroupNoticeServiceImpl extends ServiceImpl<ImGroupNoticeDao, ImGr
         baseMapper.updateById(imGroupNotice);
     }
 
-    public Long checkAdmin(Long groupId){
+    public Long checkAdmin(String groupId){
         ImGroup imGroup = imGroupDao.selectById(groupId);
         if(Objects.isNull(imGroup)){
             throw new BizException("群信息不存在");

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

@@ -70,8 +70,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         imGroup.setMemberNum(1);
         imGroup.setCreateTime(now);
         imGroup.setUpdateTime(now);
+        String imGroupId = UUID.randomUUID().toString() + imGroup.getType().getCode();
+        imGroup.setId(imGroupId);
         this.baseMapper.insert(imGroup);
-        Long imGroupId = imGroup.getId();
         //处理本地群成员列表
         List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMember.ImGroupMemberRoleType.TEACHER);
         //创建融云群
@@ -105,8 +106,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         imGroup.setType(ImGroup.ImGroupType.COURSE);
         imGroup.setCreateTime(now);
         imGroup.setUpdateTime(now);
+        String imGroupId = UUID.randomUUID().toString() + imGroup.getType().getCode();
+        imGroup.setId(imGroupId);
         this.baseMapper.insert(imGroup);
-        Long imGroupId = imGroup.getId();
         //保存老师学员关联的通讯录
         imUserFriendService.saveUserFriend(teacherId,studentIds);
         //处理本地群成员列表
@@ -119,10 +121,10 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     }
 
     //创建融云群
-    private void rtcCreate(Long userId,Long imGroupId,String imGroupName) throws Exception {
+    private void rtcCreate(Long userId,String imGroupId,String imGroupName) throws Exception {
         //创建融云群
-        GroupMember[] groupMembers = new GroupMember[]{new GroupMember(userId.toString(),imGroupId.toString(),null)};
-        GroupModel groupModel = new GroupModel(imGroupId.toString(),0);
+        GroupMember[] groupMembers = new GroupMember[]{new GroupMember(userId.toString(),imGroupId,null)};
+        GroupModel groupModel = new GroupModel(imGroupId,0);
         groupModel.setMembers(groupMembers);
         groupModel.setName(imGroupName);
         Result result = RongCloudConfig.rongCloud.group.create(groupModel);
@@ -134,7 +136,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void dismiss(Long groupId) throws Exception {
+    public void dismiss(String groupId) throws Exception {
         ImGroup imGroup = this.baseMapper.selectById(groupId);
         if(Objects.isNull(imGroup)){
             throw new BizException("操作失败:群组不存在");
@@ -152,7 +154,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         //删除群成员
         imGroupMemberService.delByGroupId(groupId);
         //解散融云群
-        GroupModel groupModel = new GroupModel(groupId.toString(),0);
+        GroupModel groupModel = new GroupModel(groupId,0);
         GroupMember[] groupMembersArr = groupMembers.toArray(new GroupMember[groupMembers.size()]);
         groupModel.setMembers(groupMembersArr);
         Result result = RongCloudConfig.rongCloud.group.dismiss(groupModel);
@@ -164,7 +166,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void syncGroupMemberNum(Long groupId) throws Exception {
+    public void syncGroupMemberNum(String groupId) throws Exception {
         ImGroup imGroup = baseMapper.selectById(groupId);
         Integer memberNum = imGroupMemberService.getBaseMapper().
                 selectCount(new QueryWrapper<ImGroupMember>().eq("group_id_",groupId));

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

@@ -11,8 +11,10 @@ import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.queryInfo.SubjectQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.common.dal.BaseDAO;
+import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.cooleshow.common.service.impl.BaseServiceImpl;
+
 import org.springframework.util.CollectionUtils;
 
 @Service
@@ -51,16 +53,20 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
 
 	@Override
     public void upSetSubject(Subject subject) {
-        if (subject.getDelFlag()) {
-            subjectDao.delete(subject.getId());
-            return;
-        }
-        Long parentId = upset(subject, null);
-        List<Subject> subjects = subject.getSubjects();
-        if (subjects != null && subjects.size() > 0) {
-            subjects.forEach(e -> {
-                upset(e, parentId);
-            });
+		
+		Subject orginSubject = subjectDao.queryByName(subject.getName());
+		
+		if(orginSubject != null){
+			if(orginSubject.getId() != subject.getId()){
+				throw new BizException("名称已存在,请修改名称");
+			}
+		}
+		
+		if (subject.getId() != null) {
+            subject.setUpdateTime(new Date());
+            subjectDao.update(subject);
+        } else {
+            subjectDao.insert(subject);
         }
     }
 
@@ -98,25 +104,6 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
     }
 
     /***
-     * 新增、修改声部
-     * @param: subject
-     * @param: parentId
-     * @updateTime 2022/4/6 11:33
-     * @return: java.lang.Long
-     */
-    private Long upset(Subject subject, Long parentId) {
-        if (parentId != null) {
-            subject.setParentSubjectId(parentId);
-        }
-        if (subject.getId() != null) {
-            subject.setUpdateTime(new Date());
-            subjectDao.update(subject);
-        } else {
-            subjectDao.insert(subject);
-        }
-        return subject.getId();
-    }
-    /***
      * 查询声部树
      * @param: sub
      * @param: yesOrNoEnum

+ 34 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseScheduleStudentPaymentVo.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/22
+ */
+@ApiModel(value = "CourseScheduleStudentPaymentVo")
+public class CourseScheduleStudentPaymentVo extends CourseScheduleStudentPayment {
+    @ApiModelProperty(value = "老师id")
+    private Long teacherId;
+    @ApiModelProperty(value = "课程数")
+    private Integer classNum;
+
+    public Integer getClassNum() {
+        return classNum;
+    }
+
+    public void setClassNum(Integer classNum) {
+        this.classNum = classNum;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+}
+

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

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.yonge.cooleshow.biz.dal.valid.ListValue;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -20,6 +19,17 @@ public class VideoLessonExamineVo extends BaseEntity {
     @ApiModelProperty(value = "审核状态  UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过")
     private String auditStatus;
 
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
     private Long auditId;
 
     private String auditName;

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

@@ -56,5 +56,20 @@
     <select id="selectAll" resultType="java.lang.Long">
         SELECT user_id_ FROM course_schedule_student_payment WHERE course_type_ = 'PRACTICE'
     </select>
-
+    <select id="selectPaymentList" resultType="com.yonge.cooleshow.biz.dal.vo.CourseScheduleStudentPaymentVo"
+            parameterType="java.lang.String">
+        SELECT
+            p.user_id_ AS userId,
+            p.course_group_id_ AS courseGroupId,
+            p.course_id_ AS courseId,
+            p.course_type_ AS courseType,
+            p.expect_price_ AS expectPrice,
+            p.actual_price_ AS actualPrice,
+            g.teacher_id_ AS teacherId,
+            s.class_num_ AS classNum
+        FROM course_schedule_student_payment p
+        LEFT JOIN course_group g ON p.course_group_id_ = g.id_
+        LEFT JOIN course_schedule s ON p.course_id_ = s.id_
+        WHERE p.order_no_=#{orderNo}
+    </select>
 </mapper>

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

@@ -107,9 +107,9 @@
             keyProperty="id">
         INSERT INTO sys_user
         (is_super_admin_,im_token_,id_,username_,salt_,phone_,avatar_,create_time_,update_time_,wx_openid_,qq_openid_,user_type_,
-        gender_,nation_,birthdate_,email_,id_card_no_,wechat_id_,real_name_,certificate_type_)
+        gender_,nation_,birthdate_,email_,id_card_no_,wechat_id_,real_name_,certificate_type_,password_)
         VALUES(#{isSuperAdmin},#{imToken},#{id},#{username},#{salt},#{phone},#{avatar},now(),now(),#{wxOpenid},#{qqOpenid},#{userType},
-        #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{wechatId},#{realName},#{certificateType})
+        #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{wechatId},#{realName},#{certificateType},#{password})
     </insert>
 
     <update id="updateSysUser" parameterType="com.yonge.cooleshow.auth.api.entity.SysUser">

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

@@ -2,7 +2,7 @@
 <!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.ImGroupDao">
     <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.ImGroup">
-        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <id column="id_" jdbcType="VARCHAR" property="id"/>
         <result column="name_" jdbcType="VARCHAR" property="name"/>
         <result column="introduce_" jdbcType="VARCHAR" property="introduce"/>
         <result column="member_num_" jdbcType="INTEGER" property="memberNum"/>
@@ -34,9 +34,6 @@
         </set>
         where id_ = #{et.id}
     </update>
-    <select id="getLock" resultMap="BaseResultMap">
-        SELECT * FROM im_group WHERE id_ = #{groupId} LIMIT 1 FOR UPDATE
-    </select>
     <select id="findAll" resultMap="BaseResultMap">
         SELECT ig.* FROM im_group ig
         LEFT JOIN im_group_member igm ON igm.group_id_ = ig.id_
@@ -51,16 +48,4 @@
         </where>
         ORDER BY id_ DESC
     </select>
-
-    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
-            parameterType="com.yonge.cooleshow.biz.dal.entity.ImGroup">
-        INSERT INTO im_group(name_, introduce_, member_num_, memo_, img_, type_,create_by_,auto_pass_flag_, create_time_, update_time_)
-        VALUES
-        <foreach collection="entities" item="entity" separator=",">
-            (#{entity.name}, #{entity.introduce}, #{entity.memberNum}, #{entity.memo}, #{entity.img},
-             #{entity.type,typeHandler=com.yonge.cooleshow.common.dal.CustomEnumTypeHandler},
-             #{entity.createBy},#{entity.autoPassFlag}, NOW(), NOW())
-        </foreach>
-    </insert>
-
 </mapper>

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

@@ -5,7 +5,7 @@
         <id column="id_" jdbcType="INTEGER" property="id"/>
         <result column="user_id_" jdbcType="INTEGER" property="userId"/>
         <result column="role_type_" jdbcType="VARCHAR" property="roleType" typeHandler="com.yonge.cooleshow.common.dal.CustomEnumTypeHandler"/>
-        <result column="group_id_" jdbcType="INTEGER" property="groupId"/>
+        <result column="group_id_" jdbcType="VARCHAR" property="groupId"/>
         <result column="desc_" jdbcType="VARCHAR" property="desc"/>
         <result column="audit_status_" jdbcType="VARCHAR" property="auditStatus" typeHandler="com.yonge.cooleshow.common.dal.CustomEnumTypeHandler"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>

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

@@ -3,7 +3,7 @@
 <mapper namespace="com.yonge.cooleshow.biz.dal.dao.ImGroupMemberDao">
     <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.ImGroupMember">
         <id column="id_" jdbcType="INTEGER" property="id"/>
-        <result column="group_id_" jdbcType="INTEGER" property="groupId"/>
+        <result column="group_id_" jdbcType="VARCHAR" property="groupId"/>
         <result column="user_id_" jdbcType="INTEGER" property="userId"/>
         <result column="nickname_" jdbcType="VARCHAR" property="nickname"/>
         <result column="is_admin_" jdbcType="VARCHAR" property="isAdmin"/>

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

@@ -3,7 +3,7 @@
 <mapper namespace="com.yonge.cooleshow.biz.dal.dao.ImGroupNoticeDao">
     <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.ImGroupNotice">
         <id column="id_" jdbcType="INTEGER" property="id"/>
-        <result column="group_id_" jdbcType="INTEGER" property="groupId"/>
+        <result column="group_id_" jdbcType="VARCHAR" property="groupId"/>
         <result column="title_" jdbcType="VARCHAR" property="title"/>
         <result column="content_" jdbcType="VARCHAR" property="content"/>
         <result column="top_flag_" property="topFlag"/>

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

@@ -13,6 +13,7 @@
 		<result column="update_time_" property="updateTime" />
 		<result column="create_by_" property="createBy" />
 		<result column="update_by_" property="updateBy" />
+		<result column="modifier_name_" property="modifierName" />
 	</resultMap>
 
 	<!-- 根据主键查询一条记录 -->
@@ -75,7 +76,7 @@
 
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="BaseResultMap" parameterType="map">
-		SELECT * FROM member_price_settings ORDER BY id_
+		SELECT mps.*,ifnull(u.real_name_,u.username_) modifier_name_ FROM member_price_settings mps left join sys_user u on mps.update_by_ = u.id_ ORDER BY id_
 		<include refid="global.limit" />
 	</select>
 

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

@@ -124,9 +124,15 @@
             #{subjectId}
         </foreach>
     </select>
+    
     <select id="selectSubjectById" resultType="com.yonge.cooleshow.biz.dal.entity.Subject"
             parameterType="java.lang.String">
         SELECT * FROM subject WHERE del_flag_ = 0 and id_=#{lessonSubject}
     </select>
+    
+    <select id="queryByName" resultType="com.yonge.cooleshow.biz.dal.entity.Subject"
+            parameterType="java.lang.String">
+        SELECT * FROM subject WHERE del_flag_ = 0 and name_ = #{name}
+    </select>
 
 </mapper>

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

@@ -66,6 +66,7 @@
 			<if test="auditStatus !=null and auditStatus !=''">audit_status_ = #{auditStatus},</if>
 			<if test="auditName !=null and auditName!=''">audit_name_ = #{auditName},</if>
 			<if test="auditId !=null">audit_id_ = #{auditId},</if>
+			<if test="remarks !=null and remarks !=''">remarks = #{remarks},</if>
 			update_time_ = SYSDATE()
 		</set>
 		WHERE id_ = #{id}

+ 3 - 2
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupMemberController.java

@@ -44,11 +44,12 @@ public class ImGroupMemberController extends BaseController {
     })
     @ApiOperation("获取好友详情")
     @PostMapping(value = "/getUserDetail")
-    public HttpResponseResult<ImGroupMember> getUserDetail(@RequestBody Map<String,Long> params) throws Exception {
+    public HttpResponseResult<ImGroupMember> getUserDetail(@RequestBody Map<String,Object> params) throws Exception {
         if(Objects.isNull(params.get("groupId")) || Objects.isNull(params.get("userId"))){
             throw new BizException("参数校验失败");
         }
-        return succeed(imGroupMemberService.getUserDetail(params.get("userId"),params.get("groupId")));
+        return succeed(imGroupMemberService.getUserDetail(Long.parseLong(params.get("userId").toString()),
+                params.get("groupId").toString()));
     }
 
 

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

@@ -10,10 +10,7 @@ import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRepliedService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.CourseStudent;
-import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
-import com.yonge.cooleshow.biz.dal.vo.PracticeTeacherVo;
-import com.yonge.cooleshow.biz.dal.vo.StudentHomePage;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;

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

@@ -47,14 +47,14 @@ public class ImGroupController extends BaseController {
 
     @ApiOperation("解散群聊")
     @PostMapping(value = "/dismiss/{groupId}")
-    public HttpResponseResult dismiss(@ApiParam(value = "群编号", required = true) @PathVariable("groupId") Long groupId) throws Exception {
+    public HttpResponseResult dismiss(@ApiParam(value = "群编号", required = true) @PathVariable("groupId") String groupId) throws Exception {
         imGroupService.dismiss(groupId);
         return succeed();
     }
 
     @ApiOperation("获取群详情")
     @PostMapping(value = "/getDetail/{groupId}")
-    public HttpResponseResult<ImGroup> getDetail(@ApiParam(value = "群编号", required = true) @PathVariable("groupId") Long groupId) throws Exception {
+    public HttpResponseResult<ImGroup> getDetail(@ApiParam(value = "群编号", required = true) @PathVariable("groupId") String groupId) throws Exception {
         return succeed(imGroupService.getById(groupId));
     }
 

+ 5 - 6
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupMemberAuditController.java

@@ -11,7 +11,6 @@ import com.yonge.cooleshow.biz.dal.service.ImGroupMemberAuditService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
-import com.yonge.cooleshow.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -56,19 +55,19 @@ public class ImGroupMemberAuditController extends BaseController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "auditIds", dataType = "String", value = "审核编号列表",required = true),
             @ApiImplicitParam(name = "auditStatus", dataType = "String", value = "审核状态",required = true),
-            @ApiImplicitParam(name = "groupId", dataType = "Long", value = "审核状态",required = true)
+            @ApiImplicitParam(name = "groupId", dataType = "String", value = "审核状态",required = true)
     })
     @ApiOperation("申请入群批量审核")
     @PostMapping(value = "/applyAudit")
-    public HttpResponseResult applyAudit(@RequestBody Map<String,Object> params) throws Exception {
+    public HttpResponseResult applyAudit(@RequestBody Map<String,String> params) throws Exception {
         if(Objects.isNull(params.get("auditIds"))
                 || Objects.isNull(params.get("auditStatus"))
                 || Objects.isNull(params.get("groupId"))){
             throw new BizException("参数校验失败");
         }
-        imGroupMemberAuditService.applyAudit(params.get("auditIds").toString(),
-                AuditStatusEnum.valueOf(params.get("auditStatus").toString()),
-                Long.parseLong(params.get("groupId").toString()));
+        imGroupMemberAuditService.applyAudit(params.get("auditIds"),
+                AuditStatusEnum.valueOf(params.get("auditStatus")),
+                params.get("groupId"));
         return succeed();
     }
 

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

@@ -41,16 +41,17 @@ public class ImGroupMemberController extends BaseController {
     private ImGroupMemberService imGroupMemberService;
 
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "groupId", dataType = "Long", value = "群编号",required = true),
+            @ApiImplicitParam(name = "groupId", dataType = "String", value = "群编号",required = true),
             @ApiImplicitParam(name = "userId", dataType = "Long", value = "用户编号",required = true),
     })
     @ApiOperation("获取好友详情")
     @PostMapping(value = "/getUserDetail")
-    public HttpResponseResult<ImGroupMember> getUserDetail(@RequestBody Map<String,Long> params) throws Exception {
+    public HttpResponseResult<ImGroupMember> getUserDetail(@RequestBody Map<String,Object> params) throws Exception {
         if(Objects.isNull(params.get("groupId")) || Objects.isNull(params.get("userId"))){
             throw new BizException("参数校验失败");
         }
-        return succeed(imGroupMemberService.getUserDetail(params.get("userId"),params.get("groupId")));
+        return succeed(imGroupMemberService.getUserDetail(Long.parseLong(params.get("userId").toString()),
+                params.get("groupId").toString()));
     }
 
     @ApiImplicitParams({

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

@@ -1,6 +1,5 @@
 package com.yonge.toolset.utils.easyexcel;
 
-import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import org.apache.commons.collections.CollectionUtils;
@@ -10,10 +9,11 @@ import org.slf4j.LoggerFactory;
 import javax.validation.ConstraintViolation;
 import javax.validation.Validation;
 import javax.validation.Validator;
-import javax.websocket.Session;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
@@ -88,14 +88,13 @@ public class ExcelDataReader<T> extends AnalysisEventListener<T> {
     private ExcelDataReaderProperty<T> executed(T data, AnalysisContext context) {
         ExcelDataReaderProperty<T> property = new ExcelDataReaderProperty<>();
         property.setClazz(data);
-        Integer rowIndex = context.readRowHolder().getRowIndex();
-        property.setRowIndex(rowIndex);
+        property.setRowIndex(context.readRowHolder().getRowIndex());
         //执行注解校验
         Set<ConstraintViolation<T>> set = vf.validate(data);
         if (CollectionUtils.isNotEmpty(set)) {
             String collect = set.stream()
                     .map(ConstraintViolation::getMessage)
-                    .collect(Collectors.joining());
+                    .collect(Collectors.joining(", "));
             property.setErrorMessage(collect);
         }
         return property;