Parcourir la source

Merge branch 'dev_1_3_4_20220825' of http://git.dayaedu.com/yonge/cooleshow into activity-0826

Eric il y a 2 ans
Parent
commit
4771c00679
100 fichiers modifiés avec 3475 ajouts et 397 suppressions
  1. 12 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java
  2. 140 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/EmployeeApi.java
  3. 134 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/StudentApi.java
  4. 362 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/TeacherApi.java
  5. 18 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java
  6. 3 3
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/SysUser.java
  7. 8 3
      cooleshow-auth/auth-server/pom.xml
  8. 44 7
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java
  9. 4 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  10. 4 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  11. 5 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  12. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  13. 34 20
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  14. 12 0
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  15. 9 6
      cooleshow-bbs/pom.xml
  16. 7 3
      cooleshow-cms/pom.xml
  17. 2 2
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UserLockFlag.java
  18. 39 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UserStatusEnum.java
  19. 9 6
      cooleshow-mall/mall-admin/pom.xml
  20. 7 8
      cooleshow-mall/mall-portal/pom.xml
  21. 1 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityEvaluationController.java
  22. 41 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/EmployeeController.java
  23. 58 18
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  24. 124 14
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  25. 10 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherAuthEntryRecordController.java
  26. 104 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
  27. 0 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountRecordController.java
  28. 24 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java
  29. 46 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java
  30. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  31. 11 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherAuthEntryRecordDao.java
  32. 24 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java
  33. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDetailDao.java
  34. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupLogDao.java
  35. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonPurchaseRecordDao.java
  36. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java
  37. 68 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/VipSubmitReq.java
  38. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherApplyDetailReq.java
  39. 23 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/AuthEntryRecordSearch.java
  40. 34 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/EmployeeSearch.java
  41. 31 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentSearch.java
  42. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherMusicSheetAuditSearch.java
  43. 36 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherSearch.java
  44. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/VideoGroupSearch.java
  45. 97 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/VipRecordSearch.java
  46. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Employee.java
  47. 28 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetAuthRecord.java
  48. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Student.java
  49. 68 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Teacher.java
  50. 16 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherAuthEntryRecord.java
  51. 25 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonAuthRecord.java
  52. 12 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroup.java
  53. 311 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroupLog.java
  54. 5 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonPurchaseRecord.java
  55. 49 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java
  56. 34 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuthTypeEnum.java
  57. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  58. 11 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MemberPriceSettingsService.java
  59. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetAccompanimentService.java
  60. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetAuthRecordService.java
  61. 17 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  62. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherAuthEntryRecordService.java
  63. 2 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupDetailService.java
  64. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupLogService.java
  65. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java
  66. 15 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java
  67. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  68. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java
  69. 59 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  70. 39 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  71. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetAccompanimentServiceImpl.java
  72. 45 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetAuthRecordServiceImpl.java
  73. 92 36
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  74. 3 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  75. 71 22
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java
  76. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  77. 50 20
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupDetailServiceImpl.java
  78. 38 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupLogServiceImpl.java
  79. 199 62
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  80. 10 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java
  81. 20 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  82. 30 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/EmployeeVo.java
  83. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseInfoVo.java
  84. 56 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java
  85. 19 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java
  86. 11 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherAuthEntryRecordVo.java
  87. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherMusicSheetVo.java
  88. 15 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java
  89. 60 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonAuthGroup.java
  90. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonExamineVo.java
  91. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonShelvesVo.java
  92. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentVo.java
  93. 26 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VipRecordVo.java
  94. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  95. 14 7
      cooleshow-user/user-biz/src/main/resources/config/mybatis/EmployeeMapper.xml
  96. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/HomeMapper.xml
  97. 70 9
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  98. 10 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  99. 99 20
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthEntryRecordMapper.xml
  100. 18 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

+ 12 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -1,5 +1,8 @@
 package com.yonge.cooleshow.api.feign;
 
+import com.yonge.cooleshow.api.feign.dto.EmployeeApi;
+import com.yonge.cooleshow.api.feign.dto.StudentApi;
+import com.yonge.cooleshow.api.feign.dto.TeacherApi;
 import com.yonge.cooleshow.api.feign.fallback.AdminFeignServiceFallback;
 import com.yonge.cooleshow.common.constant.AppConstant;
 import com.yonge.cooleshow.common.entity.ContractDto;
@@ -101,4 +104,13 @@ public interface AdminFeignService {
             @RequestParam("userId") Long userId,
             @RequestParam("userType") String userType,
             @RequestParam("firstTimeType") UserFirstTimeTypeEnum firstTimeType);
+
+    @GetMapping(value = "/open/adminClient/getTeacher")
+    HttpResponseResult<TeacherApi> getTeacher(@RequestParam("userId") Long userId);
+
+    @GetMapping(value = "/open/adminClient/getStudent")
+    HttpResponseResult<StudentApi> getStudent(@RequestParam("userId") Long userId);
+
+    @GetMapping(value = "/open/adminClient/getEmployee")
+    HttpResponseResult<EmployeeApi> getEmployee(@RequestParam("userId") Long userId);
 }

+ 140 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/EmployeeApi.java

@@ -0,0 +1,140 @@
+package com.yonge.cooleshow.api.feign.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 员工表
+ */
+public class EmployeeApi implements Serializable {
+	private static final long serialVersionUID = 1L;
+	private Long userId;
+	private String jobNature;
+	private String isProbationPeriod;
+	private String educationBackground;
+	private String graduateSchool;
+	private String technicalTitles;
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+	private Date entryDate;
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+	private Date createTime;
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+	private Date updateTime;
+	private String introduction;
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+	private Date demissionDate;
+	private String contactAddress;
+	private UserLockFlag lockFlag;
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public String getJobNature() {
+		return jobNature;
+	}
+
+	public void setJobNature(String jobNature) {
+		this.jobNature = jobNature;
+	}
+
+	public String getIsProbationPeriod() {
+		return isProbationPeriod;
+	}
+
+	public void setIsProbationPeriod(String isProbationPeriod) {
+		this.isProbationPeriod = isProbationPeriod;
+	}
+
+	public String getEducationBackground() {
+		return educationBackground;
+	}
+
+	public void setEducationBackground(String educationBackground) {
+		this.educationBackground = educationBackground;
+	}
+
+	public String getGraduateSchool() {
+		return graduateSchool;
+	}
+
+	public void setGraduateSchool(String graduateSchool) {
+		this.graduateSchool = graduateSchool;
+	}
+
+	public String getTechnicalTitles() {
+		return technicalTitles;
+	}
+
+	public void setTechnicalTitles(String technicalTitles) {
+		this.technicalTitles = technicalTitles;
+	}
+
+	public Date getEntryDate() {
+		return entryDate;
+	}
+
+	public void setEntryDate(Date entryDate) {
+		this.entryDate = entryDate;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getIntroduction() {
+		return introduction;
+	}
+
+	public void setIntroduction(String introduction) {
+		this.introduction = introduction;
+	}
+
+	public Date getDemissionDate() {
+		return demissionDate;
+	}
+
+	public void setDemissionDate(Date demissionDate) {
+		this.demissionDate = demissionDate;
+	}
+
+	public String getContactAddress() {
+		return contactAddress;
+	}
+
+	public void setContactAddress(String contactAddress) {
+		this.contactAddress = contactAddress;
+	}
+
+	public UserLockFlag getLockFlag() {
+		return lockFlag;
+	}
+
+	public void setLockFlag(UserLockFlag lockFlag) {
+		this.lockFlag = lockFlag;
+	}
+}

+ 134 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/StudentApi.java

@@ -0,0 +1,134 @@
+package com.yonge.cooleshow.api.feign.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 学生表
+ */
+public class StudentApi implements Serializable {
+	private static final long serialVersionUID = 1L;
+    private Long userId;
+    /** 
+    * 学员声部 
+    */
+    private String subjectId;
+    /**
+    * 会员等级 
+    */
+    private Long memberRankSettingId;
+    /** 
+    * 有效期开始时间 
+    */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date membershipStartTime;
+    /** 
+    * 有效期结束时间 
+    */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date membershipEndTime;
+    /** 
+    * 小酷Ai连续使用天数 
+    */
+    private Integer cloudStudySequenceDays;
+    /** 
+    * 小酷Ai最后使用日期 
+    */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date cloudStudyUseLastDay;
+
+    private UserLockFlag lockFlag;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date createTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(String subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public Long getMemberRankSettingId() {
+        return memberRankSettingId;
+    }
+
+    public void setMemberRankSettingId(Long memberRankSettingId) {
+        this.memberRankSettingId = memberRankSettingId;
+    }
+
+    public Date getMembershipStartTime() {
+        return membershipStartTime;
+    }
+
+    public void setMembershipStartTime(Date membershipStartTime) {
+        this.membershipStartTime = membershipStartTime;
+    }
+
+    public Date getMembershipEndTime() {
+        return membershipEndTime;
+    }
+
+    public void setMembershipEndTime(Date membershipEndTime) {
+        this.membershipEndTime = membershipEndTime;
+    }
+
+    public Integer getCloudStudySequenceDays() {
+        return cloudStudySequenceDays;
+    }
+
+    public void setCloudStudySequenceDays(Integer cloudStudySequenceDays) {
+        this.cloudStudySequenceDays = cloudStudySequenceDays;
+    }
+
+    public Date getCloudStudyUseLastDay() {
+        return cloudStudyUseLastDay;
+    }
+
+    public void setCloudStudyUseLastDay(Date cloudStudyUseLastDay) {
+        this.cloudStudyUseLastDay = cloudStudyUseLastDay;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public UserLockFlag getLockFlag() {
+        return lockFlag;
+    }
+
+    public void setLockFlag(UserLockFlag lockFlag) {
+        this.lockFlag = lockFlag;
+    }
+}

+ 362 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/TeacherApi.java

@@ -0,0 +1,362 @@
+package com.yonge.cooleshow.api.feign.dto;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 教师表
+ */
+@TableName("teacher")
+public class TeacherApi implements Serializable {
+	private static final long serialVersionUID = 1L;
+    /** 
+    * 对应user表用户编号 
+    */
+    private Long userId;
+    /** 
+    * 学历 
+    */
+    private String educationBackground;
+    /** 
+    * 毕业学校 
+    */
+    private String graduateSchool;
+    /** 
+    * 技术职称 
+    */
+    private String technicalTitles;
+    /** 
+    * 工作单位 
+    */
+    private String workUnit;
+    /** 
+    * 专业技能(支持多个,用逗号分隔),对应声部表编号
+    */
+    private String subjectId;
+    /**
+     * 个人介绍
+     */
+    private String introduction;
+    /**
+     * 学校专业
+     */
+    private String subject;
+    /**
+     * 毕业证书
+     */
+    private String gradCertificate;
+    /**
+     * 学位证书
+     */
+    private String degreeCertificate;
+    /**
+     * 教师资格证
+     */
+    private String teacherCertificate;
+    /**
+     * 老师入驻  0 否 1 是
+     */
+    private YesOrNoEnum entryFlag;
+    /**
+    * 入驻时间 
+    */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date entryAuthDate;
+
+    private String tag;
+
+    /** 
+    * 音乐人  0 否 1 是
+    */
+    private YesOrNoEnum musicianFlag;
+    /**
+     * 音乐人认证时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date musicianDate;
+    private YesOrNoEnum liveFlag;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date liveDate;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date musicDate;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date videoDate;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date styleDate;
+
+    /**
+     * 会员等级
+     */
+    private Long memberRankSettingId;
+    /**
+     * 有效期开始时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date membershipStartTime;
+    /**
+     * 有效期结束时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date membershipEndTime;
+
+    private Integer browse;
+    private String memo;
+    private UserLockFlag lockFlag;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date createTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+
+
+    public Date getMusicDate() {
+        return musicDate;
+    }
+
+    public void setMusicDate(Date musicDate) {
+        this.musicDate = musicDate;
+    }
+
+    public Date getVideoDate() {
+        return videoDate;
+    }
+
+    public void setVideoDate(Date videoDate) {
+        this.videoDate = videoDate;
+    }
+
+    public Date getStyleDate() {
+        return styleDate;
+    }
+
+    public void setStyleDate(Date styleDate) {
+        this.styleDate = styleDate;
+    }
+
+    public String getTag() {
+        return tag;
+    }
+
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+
+    public Long getMemberRankSettingId() {
+        return memberRankSettingId;
+    }
+
+    public void setMemberRankSettingId(Long memberRankSettingId) {
+        this.memberRankSettingId = memberRankSettingId;
+    }
+
+    public Date getMembershipStartTime() {
+        return membershipStartTime;
+    }
+
+    public void setMembershipStartTime(Date membershipStartTime) {
+        this.membershipStartTime = membershipStartTime;
+    }
+
+    public Date getMembershipEndTime() {
+        return membershipEndTime;
+    }
+
+    public void setMembershipEndTime(Date membershipEndTime) {
+        this.membershipEndTime = membershipEndTime;
+
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getEducationBackground() {
+        return educationBackground;
+    }
+
+    public void setEducationBackground(String educationBackground) {
+        this.educationBackground = educationBackground;
+    }
+
+    public String getGraduateSchool() {
+        return graduateSchool;
+    }
+
+    public void setGraduateSchool(String graduateSchool) {
+        this.graduateSchool = graduateSchool;
+    }
+
+    public String getTechnicalTitles() {
+        return technicalTitles;
+    }
+
+    public void setTechnicalTitles(String technicalTitles) {
+        this.technicalTitles = technicalTitles;
+    }
+
+    public String getWorkUnit() {
+        return workUnit;
+    }
+
+    public void setWorkUnit(String workUnit) {
+        this.workUnit = workUnit;
+    }
+
+    public String getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(String subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getIntroduction() {
+        return introduction;
+    }
+
+    public void setIntroduction(String introduction) {
+        this.introduction = introduction;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getGradCertificate() {
+        return gradCertificate;
+    }
+
+    public void setGradCertificate(String gradCertificate) {
+        this.gradCertificate = gradCertificate;
+    }
+
+    public String getDegreeCertificate() {
+        return degreeCertificate;
+    }
+
+    public void setDegreeCertificate(String degreeCertificate) {
+        this.degreeCertificate = degreeCertificate;
+    }
+
+    public String getTeacherCertificate() {
+        return teacherCertificate;
+    }
+
+    public void setTeacherCertificate(String teacherCertificate) {
+        this.teacherCertificate = teacherCertificate;
+    }
+
+    public YesOrNoEnum getEntryFlag() {
+        return entryFlag;
+    }
+
+    public void setEntryFlag(YesOrNoEnum entryFlag) {
+        this.entryFlag = entryFlag;
+    }
+
+    public Date getEntryAuthDate() {
+        return entryAuthDate;
+    }
+
+    public void setEntryAuthDate(Date entryAuthDate) {
+        this.entryAuthDate = entryAuthDate;
+    }
+
+    public YesOrNoEnum getMusicianFlag() {
+        return musicianFlag;
+    }
+
+    public void setMusicianFlag(YesOrNoEnum musicianFlag) {
+        this.musicianFlag = musicianFlag;
+    }
+
+    public Date getMusicianDate() {
+        return musicianDate;
+    }
+
+    public void setMusicianDate(Date musicianDate) {
+        this.musicianDate = musicianDate;
+    }
+
+    public YesOrNoEnum getLiveFlag() {
+        return liveFlag;
+    }
+
+    public void setLiveFlag(YesOrNoEnum liveFlag) {
+        this.liveFlag = liveFlag;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Date getLiveDate() {
+        return liveDate;
+    }
+
+    public void setLiveDate(Date liveDate) {
+        this.liveDate = liveDate;
+    }
+
+    public Integer getBrowse() {
+        return browse;
+    }
+
+    public void setBrowse(Integer browse) {
+        this.browse = browse;
+    }
+
+    public UserLockFlag getLockFlag() {
+        return lockFlag;
+    }
+
+    public void setLockFlag(UserLockFlag lockFlag) {
+        this.lockFlag = lockFlag;
+    }
+}

+ 18 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.api.feign.fallback;
 
 import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.api.feign.dto.EmployeeApi;
+import com.yonge.cooleshow.api.feign.dto.StudentApi;
+import com.yonge.cooleshow.api.feign.dto.TeacherApi;
 import com.yonge.cooleshow.common.entity.ContractDto;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.entity.MallOrderItemDto;
@@ -76,4 +79,19 @@ public class AdminFeignServiceFallback implements AdminFeignService {
     public HttpResponseResult recordTime(Long userId, String userType, UserFirstTimeTypeEnum firstTimeTypeEnum) {
         return null;
     }
+
+    @Override
+    public HttpResponseResult<TeacherApi> getTeacher(Long userId) {
+        return null;
+    }
+
+    @Override
+    public HttpResponseResult<StudentApi> getStudent(Long userId) {
+        return null;
+    }
+
+    @Override
+    public HttpResponseResult<EmployeeApi> getEmployee(Long userId) {
+        return null;
+    }
 }

+ 3 - 3
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/SysUser.java

@@ -47,12 +47,12 @@ public class SysUser implements Serializable{
 	/** 修改时间 */
 	private java.util.Date updateTime;
 
-	/** 0-正常,9-锁定 */
-	@ApiModelProperty(value = "0-正常,1-锁定")
+	/** 0-正常, 1-锁定 */
+	@ApiModelProperty(value = "0-正常, 1-锁定")
 	private Integer lockFlag;
 
 	/** 0-正常,1-删除 */
-	@ApiModelProperty(value = "0-正常,1+ -删除")
+	@ApiModelProperty(value = "0-正常,1-删除")
 	private Boolean delFlag;
 
 	/** 微信openid */

+ 8 - 3
cooleshow-auth/auth-server/pom.xml

@@ -96,10 +96,15 @@
             <scope>compile</scope>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>com.yonge.toolset</groupId>-->
+<!--            <artifactId>toolset-emoji</artifactId>-->
+<!--            <version>1.0</version>-->
+<!--        </dependency>-->
+
         <dependency>
-            <groupId>com.yonge.toolset</groupId>
-            <artifactId>toolset-emoji</artifactId>
-            <version>1.0</version>
+            <groupId>com.vdurmont</groupId>
+            <artifactId>emoji-java</artifactId>
         </dependency>
         <!-- redisson -->
         <dependency>

+ 44 - 7
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java

@@ -3,6 +3,12 @@ package com.yonge.cooleshow.auth.core.provider.service;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.api.feign.dto.EmployeeApi;
+import com.yonge.cooleshow.api.feign.dto.StudentApi;
+import com.yonge.cooleshow.api.feign.dto.TeacherApi;
+import com.yonge.cooleshow.common.enums.SysUserType;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +28,8 @@ import com.yonge.cooleshow.auth.service.SysUserService;
 import com.yonge.cooleshow.common.security.AuthUser;
 import com.yonge.cooleshow.common.security.SecurityConstants;
 
+import javax.annotation.Resource;
+
 @Service
 public class DefaultUserDetailsService implements UserDetailsService {
 
@@ -31,6 +39,9 @@ public class DefaultUserDetailsService implements UserDetailsService {
     @Autowired
     private SysUserService sysUserService;
 
+    @Resource
+    private AdminFeignService adminFeignService;
+
     private final String BCRYPT = "{bcrypt}";
 
     @Override
@@ -38,6 +49,8 @@ public class DefaultUserDetailsService implements UserDetailsService {
         if (StringUtils.isBlank(username)) {
             return null;
         }
+        String clientId = WebUtil.getParameter("clientId").toUpperCase();
+        String clientSecret = WebUtil.getParameter("clientSecret");
 
         SysUserInfo userInfo;
 
@@ -48,15 +61,43 @@ public class DefaultUserDetailsService implements UserDetailsService {
         } else {
             userInfo = sysUserService.queryUserInfoByUsername(username);
         }
-        if (userInfo == null) {
+        SysUser sysUser = userInfo.getSysUser();
+
+        if (userInfo == null || sysUser == null) {
             throw new UsernameNotFoundException("账户不存在");
-        } else if (userInfo.getSysUser().getLockFlag() == 9) {
+        } else if (sysUser.getLockFlag() == 9) {
             throw new LockedException("账户被锁定");
         }
+        //判断用户是否被锁定
+        if (SysUserType.STUDENT.getCode().equals(clientId)) {
+            StudentApi data = adminFeignService.getStudent(sysUser.getId()).getData();
+            if (data == null) {
+                throw new UsernameNotFoundException("账户不存在");
+            }
+            if (UserLockFlag.LOCKED.equals(data.getLockFlag())) {
+                throw new LockedException("账户被锁定");
+            }
+        }else if(SysUserType.TEACHER.getCode().equals(clientId)) {
+            TeacherApi data = adminFeignService.getTeacher(sysUser.getId()).getData();
+            if (data == null) {
+                throw new UsernameNotFoundException("账户不存在");
+            }
+            if (UserLockFlag.LOCKED.equals(data.getLockFlag())) {
+                throw new LockedException("账户被锁定");
+            }
+        }else if(SysUserType.SYSTEM.getCode().equals(clientId)) {
+            EmployeeApi data = adminFeignService.getEmployee(sysUser.getId()).getData();
+            if (data == null) {
+                throw new UsernameNotFoundException("账户不存在");
+            }
+            if (UserLockFlag.LOCKED.equals(data.getLockFlag())) {
+                throw new LockedException("账户被锁定");
+            }
+        }
 
         List<GrantedAuthority> authorities = null;
 
-        String userType = userInfo.getSysUser().getUserType();
+        String userType = sysUser.getUserType();
         String[] roles = userType.split(",");
 
         if (userType.contains("SYSTEM")) {
@@ -73,10 +114,6 @@ public class DefaultUserDetailsService implements UserDetailsService {
             authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(role)));
         }
 
-        SysUser sysUser = userInfo.getSysUser();
-
-        String clientId = WebUtil.getParameter("clientId");
-        String clientSecret = WebUtil.getParameter("clientSecret");
         return new AuthUser(sysUser.getId(), username, BCRYPT + sysUser.getPassword(), sysUser.getLockFlag() == 0, true, true, true, authorities, clientId, clientSecret);
     }
 

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

@@ -2,6 +2,8 @@ package com.yonge.cooleshow.auth.dal.dao;
 
 import java.util.List;
 
+import com.yonge.cooleshow.common.enums.SysUserType;
+import io.swagger.models.auth.In;
 import org.apache.ibatis.annotations.Param;
 
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
@@ -170,4 +172,6 @@ public interface SysUserDao extends BaseDAO<Long, SysUser> {
     List<SysUser> queryHistoryUserById(@Param("id")Long id);
 
     Integer getUnCompCourseNum(@Param("userId") Long userId);
+
+    void updateLockStatus(@Param("userId")Long userId, @Param("lockFlag") Integer lockFlag, @Param("sysUserType")  String sysUserType);
 }

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

@@ -9,6 +9,8 @@ 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.common.entity.ImUserModel;
+import com.yonge.cooleshow.common.enums.SysUserType;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.toolset.mybatis.service.BaseService;
 
 public interface SysUserService extends BaseService<Long, SysUser> {
@@ -191,4 +193,6 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      * @param id
      */
     void logoffById(Long id);
+
+    void updateLockStatus(Long userId, Integer lockFlag, String sysUserType);
 }

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.auth.config.RongCloudConfig;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.cooleshow.common.enums.UserFirstTimeTypeEnum;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import io.rong.models.user.UserModel;
 import org.apache.commons.lang3.StringUtils;
@@ -282,4 +283,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         sysUserDao.logoffById(id, maxVersion);
     }
 
+    @Override
+    public void updateLockStatus(Long userId, Integer lockFlag, String sysUserType) {
+        sysUserDao.updateLockStatus(userId, lockFlag, sysUserType);
+    }
 }

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

@@ -284,7 +284,7 @@ public class TokenController extends BaseController {
         url += "&qrCode=" + code;
         url += "&loginUserType=" + authUser.getClientId().toUpperCase();
 
-        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(headers);
+        HttpEntity<LinkedMultiValueMap<String, String>> entity = new HttpEntity<>(headers);
 
         ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
 

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

@@ -1,23 +1,16 @@
 package com.yonge.cooleshow.auth.web.controller;
 
-import com.yonge.cooleshow.common.constant.SysConfigConstant;
-import com.yonge.cooleshow.common.enums.SysUserType;
-import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
-import java.time.Duration;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
 import java.util.Date;
 import java.util.List;
 
 import javax.validation.Valid;
 
 import org.apache.commons.lang3.StringUtils;
-import org.joda.time.LocalDate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
@@ -47,13 +40,17 @@ import com.yonge.cooleshow.auth.service.SysUserRoleService;
 import com.yonge.cooleshow.auth.service.SysUserService;
 import com.yonge.cooleshow.auth.web.controller.queryInfo.RoleQueryInfo;
 import com.yonge.cooleshow.common.constant.CommonConstants;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.exception.BizException;
+import com.yonge.cooleshow.common.enums.SysUserType;
+import com.yonge.cooleshow.common.enums.UserStatusEnum;
 import com.yonge.cooleshow.common.security.AuthUser;
 import com.yonge.cooleshow.common.security.SecurityConstants;
 import com.yonge.cooleshow.common.security.SecurityUtils;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
@@ -192,7 +189,7 @@ public class UserController extends BaseController {
                 sysUser.setRealName(username);
             }
             sysUser.setUsername(username);
-            if(SysUserType.TEACHER.getCode().equals(authUser.getClientId().toUpperCase())){
+            if (SysUserType.TEACHER.getCode().equals(authUser.getClientId().toUpperCase())) {
                 sysUser.setLastUsernameTime(new Date());
             }
         }
@@ -247,6 +244,18 @@ public class UserController extends BaseController {
         }
     }
 
+    private void loginOut(SysUser sysUser, SysUserType sysUserType) {
+        if (SysUserType.STUDENT.equals(sysUserType)) {
+            tokenService.revokeToken("student", sysUser.getPhone());
+        }
+        if (SysUserType.TEACHER.equals(sysUserType)) {
+            tokenService.revokeToken("teacher", sysUser.getPhone());
+        }
+        if (SysUserType.SYSTEM.equals(sysUserType)) {
+            tokenService.revokeToken("system", sysUser.getPhone());
+        }
+    }
+
     @ApiOperation(value = "原密码修改密码")
     @PostMapping(value = "/updatePasswordByOldPassword")
     public Object updatePasswordByOldPassword(@RequestBody UpdatePasswordDto updatePasswordDto) {
@@ -320,14 +329,16 @@ public class UserController extends BaseController {
     /**
      * 启用/冻结
      */
-    @GetMapping(value = "/changeLock/{userId}/{lockFlag}")
+    @GetMapping(value = "/changeLock/{userId}/{userStatus}/{userType}")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "userId", value = "userId", paramType = "path", dataType = "long", required = true),
-            @ApiImplicitParam(name = "lockFlag", value = "锁定状态 0-正常,1-锁定", paramType = "path", dataType = "int", required = true)
+            @ApiImplicitParam(name = "lockFlag", value = "锁定状态 0-正常, 1-锁定", paramType = "path", dataType = "int", required = true),
+            @ApiImplicitParam(name = "userType", value = "用户类型 STUDENT 学生 TEACHER 老师 SYSTEM 员工", paramType = "path", dataType = "String", required = true)
     })
     @ApiOperation(value = "启用/冻结", notes = "传入lockFlag")
-    public HttpResponseResult<Boolean> changeLock(@PathVariable("userId") Long userId, @PathVariable("lockFlag") Integer lockFlag) {
-        if (userId == null && lockFlag != 0 && lockFlag != 1) {
+    public HttpResponseResult<Boolean> changeLock(@PathVariable("userId") Long userId
+            , @PathVariable("userStatus") String userStatus, @PathVariable("userType") SysUserType sysUserType) {
+        if (userId == null || StringUtils.isBlank(userStatus) || sysUserType == null) {
             return failed("参数校验异常");
         }
         SysUser sysUser = sysUserService.queryUserInfo(userId);
@@ -337,13 +348,16 @@ public class UserController extends BaseController {
         if (sysUser.getId() != userId.longValue()) {
             return failed("非法操作");
         }
-        sysUser.setLockFlag(lockFlag);
-
-        if (lockFlag == 1) {
-            loginOut(sysUser);
+        UserStatusEnum userStatusEnum = UserStatusEnum.codeOf(userStatus);
+        //退出对应用户
+        if (UserStatusEnum.NORMAL != userStatusEnum) {
+            loginOut(sysUser, sysUserType);
         }
-        sysUser.setUpdateTime(new Date());
-        sysUserService.update(sysUser);
+        //sysUser.setLockFlag(lockFlag.getCode());
+        //sysUser.setUpdateTime(new Date());
+        //sysUserService.update(sysUser);
+        Integer lockFlag = userStatusEnum == UserStatusEnum.NORMAL ? 0 : 1;
+        sysUserService.updateLockStatus(userId, lockFlag, sysUserType.getCode());
         return succeed();
     }
 
@@ -599,7 +613,7 @@ public class UserController extends BaseController {
             if (null != user.getLastUsernameTime()
                     && StringUtils.isNotEmpty(configValue)) {
                 Long lastUsernameMonth = Long.parseLong(configValue);
-                Long monthDiff = DateUtil.getMonthDiff(user.getLastUsernameTime(),new Date());
+                Long monthDiff = DateUtil.getMonthDiff(user.getLastUsernameTime(), new Date());
 
                 if (monthDiff < lastUsernameMonth && lastUsernameMonth > 0) {
                     throw new BizException("每隔" + lastUsernameMonth + "个月可修改一次");

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

@@ -304,4 +304,16 @@
           and status_ in ('NOT_START','ING')
     </select>
 
+    <update id="updateLockStatus">
+        <if test="sysUserType == 'STUDENT'">
+            update student set lock_flag_ = #{lockFlag} where user_id_ = #{userId}
+        </if>
+        <if test="sysUserType == 'TEACHER'">
+            update teacher set lock_flag_ = #{lockFlag} where user_id_ = #{userId}
+        </if>
+        <if test="sysUserType == 'SYSTEM'">
+            update employee set lock_flag_ = #{lockFlag} where user_id_ = #{userId}
+        </if>
+    </update>
+
 </mapper>

+ 9 - 6
cooleshow-bbs/pom.xml

@@ -57,7 +57,10 @@
             <groupId>com.yonge.cooleshow</groupId>
             <artifactId>cooleshow-common</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.vdurmont</groupId>
+            <artifactId>emoji-java</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.yonge.toolset</groupId>
             <artifactId>thirdparty-component</artifactId>
@@ -69,11 +72,11 @@
             <version>${project.version}</version>
         </dependency>
 
-        <dependency>
-            <groupId>com.yonge.toolset</groupId>
-            <artifactId>toolset-emoji</artifactId>
-            <version>1.0</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.yonge.toolset</groupId>-->
+<!--            <artifactId>toolset-emoji</artifactId>-->
+<!--            <version>1.0</version>-->
+<!--        </dependency>-->
 
         <!-- mybatis-plus -->
         <dependency>

+ 7 - 3
cooleshow-cms/pom.xml

@@ -72,10 +72,14 @@
             <groupId>com.yonge.toolset</groupId>
             <artifactId>utils</artifactId>
         </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.yonge.toolset</groupId>-->
+<!--            <artifactId>toolset-emoji</artifactId>-->
+<!--            <version>1.0</version>-->
+<!--        </dependency>-->
         <dependency>
-            <groupId>com.yonge.toolset</groupId>
-            <artifactId>toolset-emoji</artifactId>
-            <version>1.0</version>
+            <groupId>com.vdurmont</groupId>
+            <artifactId>emoji-java</artifactId>
         </dependency>
         <dependency>
             <groupId>com.yonge.toolset</groupId>

+ 2 - 2
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UserLockFlag.java

@@ -4,11 +4,11 @@ import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
- * 会员状态枚举类
+ * 用户状态枚举类
  */
 public enum UserLockFlag implements BaseEnum<Integer, UserLockFlag> {
 
-	NORMAL(0, "正常"), LOCKED(9, "锁定"), CANCELLED(1, "冻结");
+	NORMAL(0, "正常"), LOCKED(1, "锁定");
 
 	@EnumValue
 	private int code;

+ 39 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UserStatusEnum.java

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+public enum UserStatusEnum implements BaseEnum<String, UserStatusEnum> {
+
+	NORMAL("正常"),
+	LOCKED("冻结"),
+    CLOSED("注销"),
+    ;
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    UserStatusEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+	public static UserStatusEnum codeOf(String code) {
+		for (UserStatusEnum userStatus : UserStatusEnum.values()) {
+			if (code.equals(userStatus.getCode())) {
+				return userStatus;
+			}
+		}
+		return null;
+	}
+}

+ 9 - 6
cooleshow-mall/mall-admin/pom.xml

@@ -33,7 +33,10 @@
             <artifactId>thirdparty-component</artifactId>
             <version>1.0</version>
         </dependency>
-
+        <dependency>
+            <groupId>com.vdurmont</groupId>
+            <artifactId>emoji-java</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.yonge.cooleshow</groupId>
             <artifactId>mall-mbg</artifactId>
@@ -77,11 +80,11 @@
             <version>${project.toolset.version}</version>
         </dependency>
 
-        <dependency>
-            <groupId>com.yonge.toolset</groupId>
-            <artifactId>toolset-emoji</artifactId>
-            <version>1.0</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.yonge.toolset</groupId>-->
+<!--            <artifactId>toolset-emoji</artifactId>-->
+<!--            <version>1.0</version>-->
+<!--        </dependency>-->
 
         <dependency>
             <groupId>com.yonge.cooleshow</groupId>

+ 7 - 8
cooleshow-mall/mall-portal/pom.xml

@@ -74,10 +74,14 @@
             <version>20.0</version>
             <scope>compile</scope>
         </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.yonge.toolset</groupId>-->
+<!--            <artifactId>toolset-emoji</artifactId>-->
+<!--            <version>1.0</version>-->
+<!--        </dependency>-->
         <dependency>
-            <groupId>com.yonge.toolset</groupId>
-            <artifactId>toolset-emoji</artifactId>
-            <version>1.0</version>
+            <groupId>com.vdurmont</groupId>
+            <artifactId>emoji-java</artifactId>
         </dependency>
         <dependency>
             <groupId>com.yonge.toolset</groupId>
@@ -85,11 +89,6 @@
             <version>1.0</version>
         </dependency>
         <dependency>
-            <groupId>com.yonge.cooleshow</groupId>
-            <artifactId>cooleshow-api</artifactId>
-            <version>1.0</version>
-        </dependency>
-        <dependency>
             <groupId>com.yonge.toolset</groupId>
             <artifactId>toolset-payment</artifactId>
             <version>${project.toolset.version}</version>

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

@@ -38,6 +38,7 @@ public class ActivityEvaluationController extends BaseController {
     private ActivityEvaluationService activityEvaluationService;
 	@Resource
 	private SysUserFeignService sysUserFeignService;
+
     /**
      * 查询分页
      */

+ 41 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/EmployeeController.java

@@ -9,15 +9,22 @@ import com.yonge.cooleshow.biz.dal.dto.search.EmployeeSearch;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.EmployeeVo;
+import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.cooleshow.common.enums.UserStatusEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
 import java.util.Date;
+import java.util.List;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -27,6 +34,7 @@ import com.yonge.cooleshow.biz.dal.entity.Employee;
 import com.yonge.cooleshow.biz.dal.service.EmployeeService;
 import com.yonge.cooleshow.common.controller.BaseController;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 
 @RequestMapping("employee")
@@ -35,9 +43,9 @@ import javax.validation.Valid;
 public class EmployeeController extends BaseController {
     @Autowired
     private EmployeeService employeeService;
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
-    @Autowired
+    @Resource
     private EmployeeDao employeeDao;
 
     @GetMapping("/detail/{id}")
@@ -59,7 +67,37 @@ public class EmployeeController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('employee/page')")
     public HttpResponseResult<PageInfo<EmployeeVo>> page(@RequestBody EmployeeSearch query) {
         query.setSort("id_");
+    	
+    	if(StringUtils.isNotBlank(query.getUserStatus())){
+    		switch (query.getUserStatus()) {
+			case "LOCKED":
+				query.setDelFlag(YesOrNoEnum.NO);
+				query.setLockFlag(UserLockFlag.LOCKED);
+				break;
+			case "CLOSED":
+				query.setDelFlag(YesOrNoEnum.YES);
+				break;
+
+			default:
+				query.setDelFlag(YesOrNoEnum.NO);
+				query.setLockFlag(UserLockFlag.NORMAL);
+				break;
+			}
+    	}
         IPage<EmployeeVo> pages = employeeService.selectPage(PageUtil.getPage(query), query);
+		List<EmployeeVo> rows = pages.getRecords();
+		
+		for(EmployeeVo vo : rows){
+			if(vo.getDelFlag() == YesOrNoEnum.YES){
+				vo.setUserStatus(UserStatusEnum.CLOSED);
+			}else{
+				if(vo.getLockFlag() == UserLockFlag.LOCKED){
+					vo.setUserStatus(UserStatusEnum.LOCKED);
+				}else{
+					vo.setUserStatus(UserStatusEnum.NORMAL);
+				}
+			}
+		}
         return succeed(PageUtil.pageInfo(pages));
     }
 
@@ -97,4 +135,5 @@ public class EmployeeController extends BaseController {
         }
         return failed("获取用户信息失败");
     }
+
 }

+ 58 - 18
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -1,5 +1,26 @@
 package com.yonge.cooleshow.admin.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -12,34 +33,29 @@ import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherMusicSheetAuditSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.service.MusicTagService;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.mybatis.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetStudentByMessage;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.StudentMusicSheetOrderVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.BizHttpStatus;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.util.StringUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReader;
 import com.yonge.toolset.utils.easyexcel.ExcelException;
 import com.yonge.toolset.utils.easyexcel.ExcelUtils;
-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.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.validation.Valid;
-import java.util.Date;
-import java.util.List;
 
 /**
  * 曲谱表 web 控制层
@@ -202,7 +218,7 @@ public class MusicSheetController extends BaseController {
                 musicSheet.getSourceType().equals(SourceTypeEnum.TEACHER) && StringUtil.isEmpty(reasonDto.getReason())) {
             return failed("请填写下架原因");
         }
-        return status(musicSheetService.state(id,reasonDto.getReason()));
+        return status(musicSheetService.state(id,reasonDto.getReason(),ClientEnum.SYSTEM));
     }
 
 
@@ -272,6 +288,30 @@ public class MusicSheetController extends BaseController {
     }
 
 
+    /**
+     * 审核中心-乐谱审核
+     */
+    @GetMapping(value = "/auditDetail/{authMusicSheetId}")
+    @ApiOperation(value = "审核中心-乐谱审核详情",  notes = "传入曲目审核id")
+    public HttpResponseResult<MusicSheetDetailVo> auditDetail(@PathVariable Long authMusicSheetId) {
+
+        return succeed(musicSheetService.auditDetail(authMusicSheetId));
+    }
+
+
+
+    /**
+     * 审核中心-乐谱审核记录列表
+     */
+    @GetMapping(value = "/auditDetailList/{authMusicSheetId}")
+    @ApiOperation(value = "审核中心-乐谱审核详情历史记录",  notes = "传入曲目审核id")
+    public HttpResponseResult<List<MusicSheetDetailVo>> auditDetailList(@PathVariable Long authMusicSheetId) {
+
+        return succeed(musicSheetService.auditDetailList(authMusicSheetId));
+    }
+
+
+
 
 
     @PostMapping(value = "/buySendMessage", consumes="application/json", produces="application/json")

+ 124 - 14
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java

@@ -1,32 +1,51 @@
 package com.yonge.cooleshow.admin.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Date;
 import java.util.List;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.toolset.mybatis.support.PageUtil;
-import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.excel.POIUtil;
+import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
-import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.cooleshow.common.enums.UserStatusEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
-
-import io.swagger.annotations.*;
-
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.utils.date.DateUtil;
+import com.yonge.toolset.utils.excel.POIUtil;
 
 @RestController
 @RequestMapping("/student")
@@ -35,6 +54,17 @@ public class StudentController extends BaseController {
     @Autowired
     private StudentService studentService;
 
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private MemberPriceSettingsService memberPriceSettingsService;
+
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+
+
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
     @ApiImplicitParams({
@@ -50,7 +80,38 @@ public class StudentController extends BaseController {
     @ApiOperation(value = "查询分页", notes = "传入StudentSearch")
     @PreAuthorize("@pcs.hasPermissions('student/page')")
     public HttpResponseResult<PageInfo<StudentVo>> page(@RequestBody StudentSearch query) {
+    	
+    	if(StringUtils.isNotBlank(query.getUserStatus())){
+    		switch (query.getUserStatus()) {
+			case "LOCKED":
+				query.setDelFlag(YesOrNoEnum.NO);
+				query.setLockFlag(UserLockFlag.LOCKED);
+				break;
+			case "CLOSED":
+				query.setDelFlag(YesOrNoEnum.YES);
+				break;
+
+			default:
+				query.setDelFlag(YesOrNoEnum.NO);
+				query.setLockFlag(UserLockFlag.NORMAL);
+				break;
+			}
+    	}
+    	
 		IPage<StudentVo> pages = studentService.selectPage(PageUtil.getPage(query), query);
+		List<StudentVo> rows = pages.getRecords();
+		
+		for(StudentVo vo : rows){
+			if(vo.getDelFlag() == YesOrNoEnum.YES){
+				vo.setUserStatus(UserStatusEnum.CLOSED);
+			}else{
+				if(vo.getLockFlag() == UserLockFlag.LOCKED){
+					vo.setUserStatus(UserStatusEnum.LOCKED);
+				}else{
+					vo.setUserStatus(UserStatusEnum.NORMAL);
+				}
+			}
+		}
         return succeed(PageUtil.pageInfo(pages));
 	}
 
@@ -60,16 +121,45 @@ public class StudentController extends BaseController {
     public void export(HttpServletResponse response, @RequestBody StudentSearch queryInfo) throws IOException {
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
+    	
+    	if(StringUtils.isNotBlank(queryInfo.getUserStatus())){
+    		switch (queryInfo.getUserStatus()) {
+			case "LOCKED":
+				queryInfo.setDelFlag(YesOrNoEnum.NO);
+				queryInfo.setLockFlag(UserLockFlag.LOCKED);
+				break;
+			case "CLOSED":
+				queryInfo.setDelFlag(YesOrNoEnum.YES);
+				break;
+
+			default:
+				queryInfo.setDelFlag(YesOrNoEnum.NO);
+				queryInfo.setLockFlag(UserLockFlag.NORMAL);
+				break;
+			}
+    	}
         List<StudentVo> rows = studentService.selectPage(PageUtil.getPage(queryInfo), queryInfo).getRecords();
         if (rows.size() < 1) {
             throw new BizException("没有可导出数据");
         }
+		
+		for(StudentVo vo : rows){
+			if(vo.getDelFlag() == YesOrNoEnum.YES){
+				vo.setUserStatus(UserStatusEnum.CLOSED);
+			}else{
+				if(vo.getLockFlag() == UserLockFlag.LOCKED){
+					vo.setUserStatus(UserStatusEnum.LOCKED);
+				}else{
+					vo.setUserStatus(UserStatusEnum.NORMAL);
+				}
+			}
+		}
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学生编号", "学生姓名", "真实姓名", "性别", "出生日期",
-                    "年龄", "专业", "手机号码", "是否是会员", "注册时间"}, new String[]{
+                    "年龄", "专业", "手机号码", "是否是会员", "注册时间","用户状态"}, new String[]{
                     "userId","username" , "realName", "gender.msg", "birthdate", "age", "subjectName", "phone",
-                    "isVip.msg", "createTime"}, rows);
+                    "isVip.msg", "createTime", "userStatus.msg"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=学生列表-" + DateUtil.getDate(new Date()) + ".xls");
@@ -90,4 +180,24 @@ public class StudentController extends BaseController {
         }
     }
 
+    @PostMapping("/addVip")
+    @ApiOperation(value = "添加会员")
+    @PreAuthorize("@pcs.hasPermissions('student/addVip')")
+    public HttpResponseResult<Boolean> addVip(@Valid @RequestBody VipSubmitReq vipSubmitReq) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(memberPriceSettingsService.addVip(vipSubmitReq, ClientEnum.STUDENT, sysUser));
+    }
+
+
+    @PostMapping("/vipRecord")
+    @ApiOperation(value = "会员记录")
+    @PreAuthorize("@pcs.hasPermissions('student/vipRecord')")
+    public HttpResponseResult<PageInfo<VipRecordVo>> vipRecord(@Valid @RequestBody VipRecordSearch recordSearch) {
+
+        recordSearch.setClient(ClientEnum.STUDENT);
+        return succeed(vipCardRecordService.vipRecord(recordSearch));
+    }
 }

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

@@ -17,6 +17,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 
 @RestController
@@ -25,7 +26,7 @@ import javax.validation.Valid;
 public class TeacherAuthEntryRecordController extends BaseController {
     @Autowired
     private TeacherAuthEntryRecordService teacherAuthEntryRecordService;
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @GetMapping("/detail/{id}")
@@ -47,6 +48,14 @@ public class TeacherAuthEntryRecordController extends BaseController {
         return succeed(PageUtil.pageInfo(pages));
     }
 
+    @PostMapping("/historyPage")
+    @ApiOperation(value = "查询分页", notes = "传入AuthEntryRecordSearch")
+    @PreAuthorize("@pcs.hasPermissions('teacherAuthEntryRecord/page')")
+    public HttpResponseResult<PageInfo<TeacherAuthEntryRecordVo>> historyPage(@RequestBody AuthEntryRecordSearch search) {
+        IPage<TeacherAuthEntryRecordVo> pages = teacherAuthEntryRecordService.historyPage(PageUtil.getPage(search), search);
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
     @PostMapping("/doAuth")
     @ApiOperation(value = "审核", notes = "传入authOperaDto")
     @PreAuthorize("@pcs.hasPermissions('teacherAuthEntryRecord/doAuth')")

+ 104 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java

@@ -27,14 +27,25 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.cooleshow.common.enums.UserStatusEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
@@ -47,8 +58,17 @@ import com.yonge.toolset.utils.excel.POIUtil;
 public class TeacherController extends BaseController {
 
     @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
     private TeacherService teacherService;
 
+    @Autowired
+    private MemberPriceSettingsService memberPriceSettingsService;
+
+
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+
     /**
      * 查询单条
      */
@@ -75,7 +95,37 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "查询分页", notes = "传入teacher")
     @PreAuthorize("@pcs.hasPermissions('teacher/page')")
     public HttpResponseResult<PageInfo<TeacherVo>> page(@RequestBody TeacherSearch query) {
+    	
+    	if(StringUtils.isNotBlank(query.getUserStatus())){
+    		switch (query.getUserStatus()) {
+			case "LOCKED":
+				query.setDelFlag(YesOrNoEnum.NO);
+				query.setLockFlag(UserLockFlag.LOCKED);
+				break;
+			case "CLOSED":
+				query.setDelFlag(YesOrNoEnum.YES);
+				break;
+
+			default:
+				query.setDelFlag(YesOrNoEnum.NO);
+				query.setLockFlag(UserLockFlag.NORMAL);
+				break;
+			}
+    	}
         IPage<TeacherVo> pages = teacherService.selectPage(PageUtil.getPage(query), query);
+		List<TeacherVo> rows = pages.getRecords();
+		
+		for(TeacherVo vo : rows){
+			if(vo.getDelFlag() == YesOrNoEnum.YES){
+				vo.setUserStatus(UserStatusEnum.CLOSED);
+			}else{
+				if(vo.getLockFlag() == UserLockFlag.LOCKED){
+					vo.setUserStatus(UserStatusEnum.LOCKED);
+				}else{
+					vo.setUserStatus(UserStatusEnum.NORMAL);
+				}
+			}
+		}
         return succeed(PageUtil.pageInfo(pages));
     }
 
@@ -95,13 +145,42 @@ public class TeacherController extends BaseController {
     public void export(HttpServletResponse response, @RequestBody TeacherSearch queryInfo) throws IOException {
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
+    	
+    	if(StringUtils.isNotBlank(queryInfo.getUserStatus())){
+    		switch (queryInfo.getUserStatus()) {
+			case "LOCKED":
+				queryInfo.setDelFlag(YesOrNoEnum.NO);
+				queryInfo.setLockFlag(UserLockFlag.LOCKED);
+				break;
+			case "CLOSED":
+				queryInfo.setDelFlag(YesOrNoEnum.YES);
+				break;
+
+			default:
+				queryInfo.setDelFlag(YesOrNoEnum.NO);
+				queryInfo.setLockFlag(UserLockFlag.NORMAL);
+				break;
+			}
+    	}
         List<TeacherVo> rows = teacherService.selectPage(PageUtil.getPage(queryInfo), queryInfo).getRecords();
         if (rows.size() < 1) {
             throw new BizException("没有可导出数据");
         }
+		
+		for(TeacherVo vo : rows){
+			if(vo.getDelFlag() == YesOrNoEnum.YES){
+				vo.setUserStatus(UserStatusEnum.CLOSED);
+			}else{
+				if(vo.getLockFlag() == UserLockFlag.LOCKED){
+					vo.setUserStatus(UserStatusEnum.LOCKED);
+				}else{
+					vo.setUserStatus(UserStatusEnum.NORMAL);
+				}
+			}
+		}
         for(TeacherVo vo : rows){
         	if(StringUtils.isNotBlank(vo.getTag())){
-        		vo.setTag(vo.getTag().replace("STYLE", "个人风采").replace("LIVE", "直播课").replace("VIDEO", "视频课").replace("MUSIC", "乐谱"));
+        		vo.setTag(vo.getTag().replace("STYLE", "个人风采").replace("LIVE", "直播课").replace("VIDEO", "视频课").replace("MUSIC", "乐谱").replace("DEGREE", "学历").replace("TEACHER", "教资"));
         	}
         }
         OutputStream outputStream = response.getOutputStream();
@@ -109,7 +188,7 @@ public class TeacherController extends BaseController {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"老师编号", "昵称", "姓名", "手机号", "老师类型",
                     "注册时间", "认证时间", "状态", "是否是会员", "徽章"}, new String[]{
                     "userId", "username", "realName", "phone", "entryFlag.code == 1 ? '达人' : '游客'", "createTime", "entryAuthDate",
-                    "lockFlag.remark", "isVip.code == 1 ? '是' : '否'", "tag"}, rows);
+                    "userStatus.msg", "isVip.code == 1 ? '是' : '否'", "tag"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=老师列表-" + DateUtil.getDate(new Date()) + ".xls");
@@ -129,4 +208,27 @@ public class TeacherController extends BaseController {
             }
         }
     }
+
+    @PostMapping("/addVip")
+    @ApiOperation(value = "添加会员")
+    @PreAuthorize("@pcs.hasPermissions('teacher/addVip')")
+    public HttpResponseResult<Boolean> addVip(@Valid @RequestBody VipSubmitReq vipSubmitReq) {
+
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(memberPriceSettingsService.addVip(vipSubmitReq, ClientEnum.TEACHER,sysUser));
+    }
+
+
+    @PostMapping("/vipRecord")
+    @ApiOperation(value = "会员记录")
+    @PreAuthorize("@pcs.hasPermissions('teacher/vipRecord')")
+    public HttpResponseResult<PageInfo<VipRecordVo>> vipRecord(@Valid @RequestBody VipRecordSearch recordSearch) {
+
+        recordSearch.setClient(ClientEnum.TEACHER);
+        return succeed(vipCardRecordService.vipRecord(recordSearch));
+    }
 }

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

@@ -57,7 +57,6 @@ public class UserAccountRecordController extends BaseController {
     @ApiOperation(value = "查询分页", notes = "传入userAccountRecordSearch")
     @PreAuthorize("@pcs.hasPermissions('userAccountRecord/page')")
     public HttpResponseResult<PageInfo<UserAccountRecordVo>> page(@RequestBody UserAccountRecordSearch query) {
-        query.setInOrOut(InOrOutEnum.IN);
         IPage<UserAccountRecordVo> pages = userAccountRecordService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
     }

+ 24 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.VideoGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
 import com.yonge.toolset.base.util.StringUtil;
@@ -18,7 +19,9 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
@@ -106,6 +109,24 @@ public class VideoLessonController extends BaseController {
         return succeed(PageUtil.pageInfo(lessonGroupService.queryGroupList(PageUtil.getPage(search), search)));
     }
 
+    @ApiOperation(value = "审核-视频课组历史记录列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/queryGroupHistoryList", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<PageInfo<VideoLessonAuthGroup>> queryGroupHistoryList(@RequestBody VideoGroupSearch search) {
+        return succeed(PageUtil.pageInfo(lessonGroupService.queryGroupHistoryList(PageUtil.getPage(search), search)));
+    }
+
+    /**
+     * @Description: 审核-根据视频课组id查视频课详情
+     * @Author: cy
+     * @Date: 2022/4/20
+     */
+    @ApiOperation(value = "审核-根据视频课组id查视频课详情")
+    @GetMapping("/authGroupDetil")
+    public HttpResponseResult<VideoLessonAuthGroup> authGroupDetil(
+            @ApiParam(value = "当前视频组id", required = true) @RequestParam(value = "videoGroupId") Long videoGroupId) {
+        return succeed(lessonGroupService.authGroupDetil(videoGroupId));
+    }
+
     /**
      * @Description: 审核-根据视频课组id查视频课详情
      * @Author: cy
@@ -119,6 +140,8 @@ public class VideoLessonController extends BaseController {
         return succeed(videoLessonGroupDetailService.list(queryWrapper));
     }
 
+
+
     /**
      * @Description: 审核-修改视频课组审核状态
      * @Author: cy
@@ -155,6 +178,7 @@ public class VideoLessonController extends BaseController {
 
         shelvesVo.setShelvesId(user.getId());
         shelvesVo.setShelvesTime(new Date());
+        shelvesVo.setClientType(ClientEnum.SYSTEM);
         lessonGroupService.updateShelves(shelvesVo);
         return succeed();
     }

+ 46 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java

@@ -1,6 +1,15 @@
 package com.yonge.cooleshow.admin.controller.open;
 
+import com.yonge.cooleshow.api.feign.dto.EmployeeApi;
+import com.yonge.cooleshow.api.feign.dto.StudentApi;
+import com.yonge.cooleshow.api.feign.dto.TeacherApi;
+import com.yonge.cooleshow.biz.dal.entity.Employee;
+import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.EmployeeService;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.UserFirstTimeService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.ContractDto;
@@ -9,6 +18,7 @@ import com.yonge.cooleshow.common.enums.UserFirstTimeTypeEnum;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -23,6 +33,15 @@ public class AdminClient extends BaseController {
     @Autowired
     private UserFirstTimeService userFirstTimeService;
 
+    @Autowired
+    private TeacherService teacherService;
+
+    @Autowired
+    private StudentService studentService;
+
+    @Autowired
+    private EmployeeService employeeService;
+
     @GetMapping("/recordTime")
     public HttpResponseResult<Boolean> recordTime(
             @RequestParam("userId") Long userId,
@@ -34,4 +53,31 @@ public class AdminClient extends BaseController {
         return succeed(true);
     }
 
+    @GetMapping("/getTeacher")
+    public HttpResponseResult<TeacherApi> getTeacher(@RequestParam("userId") Long userId) {
+        Teacher teacher = teacherService.getById(userId);
+
+        TeacherApi teacherApi = new TeacherApi();
+        BeanUtils.copyProperties(teacher, teacherApi);
+        return succeed(teacherApi);
+    }
+
+    @GetMapping("/getStudent")
+    public HttpResponseResult<StudentApi> getStudent(@RequestParam("userId") Long userId) {
+        Student student = studentService.getById(userId);
+
+        StudentApi studentApi = new StudentApi();
+        BeanUtils.copyProperties(student, studentApi);
+        return succeed(studentApi);
+    }
+
+    @GetMapping("/getEmployee")
+    public HttpResponseResult<EmployeeApi> getEmployee(@RequestParam("userId") Long userId) {
+        Employee employee = employeeService.get(userId);
+
+        EmployeeApi employeeApi = new EmployeeApi();
+        BeanUtils.copyProperties(employee, employeeApi);
+        return succeed(employeeApi);
+    }
+
 }

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -139,14 +139,27 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
 
     /**
      * 老师统计
+     *
      * @param userId
      * @return
      */
     List<TeacherTotalVo> queryTeacherTotal(@Param("userId") Long userId);
+
     /**
      * 学生统计
+     *
      * @param userId
      * @return
      */
     List<StudentTotalVo> queryStudentTotal(@Param("userId") Long userId);
+
+    /**
+     * 审核历史记录
+     *
+     * @param originalMusicSheetId 原曲目id
+     * @param authMusicSheetId     最新的审核曲目id
+     * @return
+     */
+    List<MusicSheetDetailVo> auditDetailList(@Param("originalMusicSheetId") Long originalMusicSheetId, @Param(
+            "authMusicSheetId") Long authMusicSheetId);
 }

+ 11 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherAuthEntryRecordDao.java

@@ -11,12 +11,6 @@ import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import org.apache.ibatis.annotations.Param;
 
 public interface TeacherAuthEntryRecordDao extends BaseMapper<TeacherAuthEntryRecord>{
-
-	/**
-	 * 自定义分页
-	 */
-	List<TeacherAuthEntryRecordVo> selectPage(@Param("page")IPage page,@Param("param") AuthEntryRecordSearch search);
-
 	/***
 	 * 根据老师id查询详情
 	 * @author liweifan
@@ -24,7 +18,17 @@ public interface TeacherAuthEntryRecordDao extends BaseMapper<TeacherAuthEntryRe
 	 * @updateTime 2022/3/21 13:43
 	 * @return: com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo
 	 */
-    TeacherAuthEntryRecordVo detail(@Param("id") Long id);
+	TeacherAuthEntryRecordVo detail(@Param("id") Long id);
+
+	TeacherAuthEntryRecordVo lastDetil(@Param("id") Long id,@Param("userId") Long userId);
+
+	/**
+	 * 自定义分页
+	 */
+	List<TeacherAuthEntryRecordVo> selectPage(@Param("page")IPage page,@Param("param") AuthEntryRecordSearch search);
+
+	List<TeacherAuthEntryRecordVo> historyPage(@Param("page")IPage page,@Param("param")  AuthEntryRecordSearch search);
+
 	/***
 	 * 查询最近一条申请记录
 	 * @author liweifan

+ 24 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java

@@ -1,15 +1,26 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.yonge.cooleshow.biz.dal.vo.*;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupLog;
+import com.yonge.cooleshow.biz.dal.vo.CountVideoGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.LessonGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonAuthGroup;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonExamineVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupUpVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonPurchaseVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonShelvesVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonTeacherVo;
 
 /**
  * VideoLessonGroupDao数据库访问类
@@ -40,10 +51,17 @@ public interface VideoLessonGroupDao extends BaseMapper<VideoLessonGroup> {
 
     //查询视频课组
     List<LessonGroupVo> selectLessonGroup(IPage page, @Param("param") VideoLessonGroupSearch search);
+    
+  //查询我的视频课组
+    List<LessonGroupVo> queryMyLessonGroup(IPage page, @Param("param") VideoLessonGroupSearch search);
 
     //查询所有视频课组
     List<VideoLessonAuthGroup> queryGroupList(IPage<VideoLessonAuthGroup> page, @Param("param") VideoGroupSearch query);
 
+    List<VideoLessonAuthGroup> queryGroupHistoryList(IPage<VideoLessonAuthGroup> page, @Param("param") VideoGroupSearch query);
+
+    VideoLessonAuthGroup authGroupDetil(@Param("videoGroupId") Long videoGroupId);
+
     //根据组id查详情
     VideoLessonGroup selectGroupById(Long groupId);
 
@@ -52,4 +70,5 @@ public interface VideoLessonGroupDao extends BaseMapper<VideoLessonGroup> {
 
     //查询付费人数前5的课程
     List<CountVideoGroupVo.VideoLesson> selectVideoLesson();
+
 }

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

@@ -34,4 +34,6 @@ public interface VideoLessonGroupDetailDao extends BaseMapper<VideoLessonGroupDe
     void deleteByGroupId(Long groupId);
 
     List<VideoLessonGroupDetailVo> selectPageAuth(IPage page, @Param("param") VideoLessonSearch query);
+    
+    List<VideoLessonGroupDetail> queryByVideoLessonGroupId(Long videoLessonGroupId);
 }

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupLogDao.java

@@ -0,0 +1,20 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupLog;
+import com.yonge.toolset.mybatis.dal.BaseDAO;
+
+public interface VideoLessonGroupLogDao extends BaseDAO<Long, VideoLessonGroupLog> {
+
+	Long queryMaxVersion(Long videoLessonGroupId);
+	
+	VideoLessonGroupLog queryByVideoLessonGroupId(@Param("videoLessonGroupId") Long videoLessonGroupId, @Param("version") Long version);
+	
+	/**
+	 * 查询最新上架信息
+	 * @param videoLessonGroupId
+	 * @return
+	 */
+	VideoLessonGroupLog queryLastestShelvesInfo(Long videoLessonGroupId);
+}

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

@@ -21,4 +21,6 @@ public interface VideoLessonPurchaseRecordDao extends BaseMapper<VideoLessonPurc
 
     //修改订单状态
     void updateStatus(@Param("orderNo") String orderNo,@Param("status") String status);
+    
+    List<VideoLessonPurchaseRecord> queryByVideoLessonGroupId(@Param("videoLessonGroupId") Long videoLessonGroupId, @Param("orderStatus") String orderStatus);
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java

@@ -4,7 +4,9 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings;
+import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
@@ -48,4 +50,12 @@ public interface VipCardRecordDao extends BaseMapper<VipCardRecord> {
     List<VipCardRecordVo> selectExpireRecord();
 
 
+    /**
+     * 会员添加记录
+     *
+     * @param page
+     * @param param
+     * @return
+     */
+    IPage<VipRecordVo> selectVipRecord(@Param("page") IPage<VipRecordVo> page, @Param("param") VipRecordSearch param);
 }

+ 68 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/VipSubmitReq.java

@@ -0,0 +1,68 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-23
+ */
+@ApiModel("添加会员")
+public class VipSubmitReq {
+
+    @ApiModelProperty("时间数量")
+    @NotNull(message = "数量不能为空")
+    @Min(value = 1,message = "数量不能小于1")
+    private Integer times;
+
+    @ApiModelProperty("时间类型 DAY:天 MONTH:月 ,QUARTERLY : 季度 YEAR_HALF : 半年 YEAR:年")
+    @NotNull(message = "周期不能为空")
+    private PeriodEnum type;
+
+    @ApiModelProperty("原因")
+    @NotBlank(message = "原因不能为空")
+    private String reason;
+
+    @ApiModelProperty("用户id")
+    @NotNull(message = "用户id不能为空")
+    private Long  userId;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Integer getTimes() {
+        return times;
+    }
+
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+
+    public PeriodEnum getType() {
+        return type;
+    }
+
+    public void setType(PeriodEnum type) {
+        this.type = type;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+}

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

@@ -58,7 +58,6 @@ public class TeacherApplyDetailReq implements Serializable {
     private String teacherCertificate;
 
     @ApiModelProperty("老师风采视频json 格式:[{'videoUrl':'视频地址','cover':'视频封面地址'},{'videoUrl':'视频地址','cover':'视频封面地址'}] ,将单引号替换为双引号")
-    @NotBlank(message = "至少要有一个老师风采视频")
     private String styleVideoJson;
 
     public Long getUserId() {

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

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.AuthTypeEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -14,9 +16,11 @@ import java.util.Date;
  * @Data: 2022/3/21 15:26
  */
 @ApiModel(value = "AuthEntryRecordSearch", description = "审核列表查询")
-public class AuthEntryRecordSearch extends QueryInfo{
+public class AuthEntryRecordSearch extends QueryInfo {
     @ApiModelProperty(value = "老师编号/名称/电话")
     private String search;
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
     @ApiModelProperty(value = "审批人")
     private String verifyUser;
     @ApiModelProperty(value = "申请开始时间")
@@ -29,6 +33,8 @@ public class AuthEntryRecordSearch extends QueryInfo{
     private Date endTime;
     @ApiModelProperty(value = "审核状态  UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过")
     private AuthStatusEnum authStatus;
+    @ApiModelProperty("认证审核类型 ADD 新增 MODIFY 修改")
+    private AuthTypeEnum teacherAuthType;
 
     public String getSearch() {
         return search;
@@ -38,6 +44,14 @@ public class AuthEntryRecordSearch extends QueryInfo{
         this.search = search;
     }
 
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
     public String getVerifyUser() {
         return verifyUser;
     }
@@ -69,4 +83,12 @@ public class AuthEntryRecordSearch extends QueryInfo{
     public void setAuthStatus(AuthStatusEnum authStatus) {
         this.authStatus = authStatus;
     }
+
+    public AuthTypeEnum getTeacherAuthType() {
+        return teacherAuthType;
+    }
+
+    public void setTeacherAuthType(AuthTypeEnum teacherAuthType) {
+        this.teacherAuthType = teacherAuthType;
+    }
 }

+ 34 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/EmployeeSearch.java

@@ -1,15 +1,18 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
-import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.toolset.base.page.QueryInfo;
+
 /**
  * @Author: liweifan
  * @Data: 2022/3/21 15:26
@@ -22,8 +25,8 @@ public class EmployeeSearch extends QueryInfo{
     private GenderEnum gender;
     @ApiModelProperty("学员声部 ")
     private String subjectIdList;
-    @ApiModelProperty(value = "0-正常,9-锁定")
-    private YesOrNoEnum lockFlag;
+    @ApiModelProperty(value = "0-正常, 1-锁定")
+    private UserLockFlag lockFlag;
     @ApiModelProperty(value = "创建开始时间")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -33,6 +36,12 @@ public class EmployeeSearch extends QueryInfo{
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
+    @ApiModelProperty(value = "是否注销 0否 1是")
+    private YesOrNoEnum delFlag;
+    
+    @ApiModelProperty("用户状态")
+    private String userStatus;
+
     public String getSearch() {
         return search;
     }
@@ -63,11 +72,11 @@ public class EmployeeSearch extends QueryInfo{
         this.subjectIdList = subjectIdList;
     }
 
-    public YesOrNoEnum getLockFlag() {
+    public UserLockFlag getLockFlag() {
         return lockFlag;
     }
 
-    public void setLockFlag(YesOrNoEnum lockFlag) {
+    public void setLockFlag(UserLockFlag lockFlag) {
         this.lockFlag = lockFlag;
     }
 
@@ -86,4 +95,20 @@ public class EmployeeSearch extends QueryInfo{
     public void setEndTime(Date endTime) {
         this.endTime = endTime;
     }
+
+	public YesOrNoEnum getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(YesOrNoEnum delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public String getUserStatus() {
+		return userStatus;
+	}
+
+	public void setUserStatus(String userStatus) {
+		this.userStatus = userStatus;
+	}
 }

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dto.search;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
@@ -22,6 +23,9 @@ public class StudentSearch extends QueryInfo{
     private GenderEnum gender;
     @ApiModelProperty("学员声部 ")
     private String subjectId;
+    @ApiModelProperty(value = "0-正常, 1-锁定")
+    private UserLockFlag lockFlag;
+    private YesOrNoEnum delFlag;
     @ApiModelProperty(value = "是否会员 0否 1是")
     private YesOrNoEnum isVip;
     @ApiModelProperty(value = "注册开始时间")
@@ -32,6 +36,9 @@ public class StudentSearch extends QueryInfo{
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
+    
+    @ApiModelProperty("用户状态")
+    private String userStatus;
 
     public String getSearch() {
         return search;
@@ -61,6 +68,14 @@ public class StudentSearch extends QueryInfo{
         this.subjectId = subjectId;
     }
 
+    public UserLockFlag getLockFlag() {
+        return lockFlag;
+    }
+
+    public void setLockFlag(UserLockFlag lockFlag) {
+        this.lockFlag = lockFlag;
+    }
+
     public YesOrNoEnum getIsVip() {
         return isVip;
     }
@@ -84,4 +99,20 @@ public class StudentSearch extends QueryInfo{
     public void setEndTime(Date endTime) {
         this.endTime = endTime;
     }
+
+	public String getUserStatus() {
+		return userStatus;
+	}
+
+	public void setUserStatus(String userStatus) {
+		this.userStatus = userStatus;
+	}
+
+	public YesOrNoEnum getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(YesOrNoEnum delFlag) {
+		this.delFlag = delFlag;
+	}
 }

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

@@ -22,6 +22,9 @@ public class TeacherMusicSheetAuditSearch extends QueryInfo{
     @ApiModelProperty("老师编号/名称/电话")
     private String idAndName;
 
+    @ApiModelProperty("审核类型  0:新增 1:修改")
+    private Integer firstAuth;
+
 
     @ApiModelProperty("审批人")
     private String auditName;
@@ -45,6 +48,14 @@ public class TeacherMusicSheetAuditSearch extends QueryInfo{
     @ApiModelProperty(value = "假删除 0 : 未删除 1:已删除",hidden = true)
     private Boolean delFlag = false;
 
+    public Integer getFirstAuth() {
+        return firstAuth;
+    }
+
+    public void setFirstAuth(Integer firstAuth) {
+        this.firstAuth = firstAuth;
+    }
+
     public ChargeTypeEnum getChargeType() {
         return chargeType;
     }

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

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -17,9 +20,17 @@ public class TeacherSearch extends QueryInfo{
     
     @ApiModelProperty(value = "徽章(STYLE-个人风采  LIVE-直播  VIDEO-视频课  MUSIC-曲谱)")
     private String tag;
+
+    @ApiModelProperty(value = "0-正常, 1-锁定")
+    private UserLockFlag lockFlag;
+    
+    private YesOrNoEnum delFlag;
     
     @ApiModelProperty(value = "是否会员(0-否 1-是)")
     private Integer isVip;
+    
+    @ApiModelProperty("用户状态")
+    private String userStatus;
 
     public String getSearch() {
         return search;
@@ -45,11 +56,35 @@ public class TeacherSearch extends QueryInfo{
 		this.tag = tag;
 	}
 
-	public Integer getIsVip() {
+    public UserLockFlag getLockFlag() {
+        return lockFlag;
+    }
+
+    public void setLockFlag(UserLockFlag lockFlag) {
+        this.lockFlag = lockFlag;
+    }
+
+    public Integer getIsVip() {
 		return isVip;
 	}
 
 	public void setIsVip(Integer isVip) {
 		this.isVip = isVip;
 	}
+
+	public String getUserStatus() {
+		return userStatus;
+	}
+
+	public void setUserStatus(String userStatus) {
+		this.userStatus = userStatus;
+	}
+
+	public YesOrNoEnum getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(YesOrNoEnum delFlag) {
+		this.delFlag = delFlag;
+	}
 }

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

@@ -39,6 +39,9 @@ public class VideoGroupSearch extends QueryInfo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
+    @ApiModelProperty(value = "历史记录所属视频组id")
+    private Long groupId;
+
     public String getSearch() {
         return search;
     }
@@ -94,4 +97,12 @@ public class VideoGroupSearch extends QueryInfo {
     public void setEndTime(Date endTime) {
         this.endTime = endTime;
     }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
 }

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

@@ -0,0 +1,97 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-23
+ */
+@ApiModel("会员记录查询")
+public class VipRecordSearch extends QueryInfo {
+
+    @ApiModelProperty("开始时间 yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty("结束时间 yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty("操作人")
+    private String search;
+
+    @ApiModelProperty("用户id")
+    @NotNull(message = "用户id不能为空")
+    private Long userId;
+
+    @ApiModelProperty("人员类型")
+    private ClientEnum client;
+
+
+    @ApiModelProperty("来源类型 : ACTIVITY :活动 ,ORDER:订单 PLATFORM:平台")
+    private SourceTypeEnum sourceType;
+
+    public SourceTypeEnum getSourceType() {
+        return sourceType;
+    }
+
+    public void setSourceType(SourceTypeEnum sourceType) {
+        this.sourceType = sourceType;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public ClientEnum getClient() {
+        return client;
+    }
+
+    public void setClient(ClientEnum client) {
+        this.client = client;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
+}

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Employee.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -60,6 +61,9 @@ public class Employee implements Serializable {
 	@ApiModelProperty("联系地址 ")
 	@TableField(value = "contact_address_")
 	private String contactAddress;
+	@ApiModelProperty("锁定状态 0-正常, 1=锁定")
+	@TableField(value = "lock_flag_")
+	private UserLockFlag lockFlag;
 
 	public Long getUserId() {
 		return userId;
@@ -156,4 +160,12 @@ public class Employee implements Serializable {
 	public void setContactAddress(String contactAddress) {
 		this.contactAddress = contactAddress;
 	}
+
+	public UserLockFlag getLockFlag() {
+		return lockFlag;
+	}
+
+	public void setLockFlag(UserLockFlag lockFlag) {
+		this.lockFlag = lockFlag;
+	}
 }

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

@@ -26,6 +26,17 @@ public class MusicSheetAuthRecord implements Serializable {
     @ApiModelProperty("曲目id ")
 	@TableField(value = "music_sheet_id_")
     private Long musicSheetId;
+
+
+    @ApiModelProperty("原本的曲目id ")
+    @TableField(value = "original_music_sheet_id_")
+    private Long originalMusicSheetId;
+
+
+    @ApiModelProperty("第一次提交审核 ")
+    @TableField(value = "first_auth_")
+    private Integer firstAuth;
+
     @ApiModelProperty("审核状态 DOING:审核中;PASS:通过;UNPASS:未通过 ")
 	@TableField(value = "audit_state_")
     private AuthStatusEnum auditState;
@@ -44,7 +55,23 @@ public class MusicSheetAuthRecord implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
-	public Long getId() {
+    public Integer getFirstAuth() {
+        return firstAuth;
+    }
+
+    public void setFirstAuth(Integer firstAuth) {
+        this.firstAuth = firstAuth;
+    }
+
+    public Long getOriginalMusicSheetId() {
+        return originalMusicSheetId;
+    }
+
+    public void setOriginalMusicSheetId(Long originalMusicSheetId) {
+        this.originalMusicSheetId = originalMusicSheetId;
+    }
+
+    public Long getId() {
         return id;
     }
 

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Student.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -60,6 +61,9 @@ public class Student implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date cloudStudyUseLastDay;
+    @ApiModelProperty("锁定状态 0-正常, 1=锁定")
+    @TableField(value = "lock_flag_")
+    private UserLockFlag lockFlag;
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@@ -140,4 +144,12 @@ public class Student implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public UserLockFlag getLockFlag() {
+        return lockFlag;
+    }
+
+    public void setLockFlag(UserLockFlag lockFlag) {
+        this.lockFlag = lockFlag;
+    }
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -104,7 +105,7 @@ public class Teacher implements Serializable {
     private Date entryAuthDate;
 
 
-    @ApiModelProperty("老师点亮图标 STYLE:个人风采 VIDEO:视频课 LIVE:直播课,MUSIC:曲目 ")
+    @ApiModelProperty("老师点亮图标 STYLE:个人风采 VIDEO:视频课 LIVE:直播课,MUSIC:曲目 DEGREE:学历 TEACHER:教资")
     @TableField(value = "tag_")
     private String tag;
 
@@ -149,6 +150,29 @@ public class Teacher implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date styleDate;
 
+
+    @ApiModelProperty("学位认证 0:未认证 1:已认证 ")
+    @TableField(value = "degree_flag_")
+    private YesOrNoEnum degreeFlag;
+
+
+    @ApiModelProperty("教师资格认证 0:未认证 1:已认证 ")
+    @TableField(value = "teacher_flag_")
+    private YesOrNoEnum teacherFlag;
+
+    @ApiModelProperty("学位认证时间 ")
+    @TableField(value = "degree_date_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date degreeDate;
+
+
+    @ApiModelProperty("教师资格认证时间 ")
+    @TableField(value = "teacher_date_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date teacherDate;
+
     /**
      * 会员等级
      */
@@ -178,6 +202,9 @@ public class Teacher implements Serializable {
     @ApiModelProperty("备注 ")
 	@TableField(value = "memo_")
     private String memo;
+    @ApiModelProperty("锁定状态 0-正常, 1=锁定")
+    @TableField(value = "lock_flag_")
+    private UserLockFlag lockFlag;
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@@ -188,6 +215,38 @@ public class Teacher implements Serializable {
     private Date updateTime;
 
 
+    public YesOrNoEnum getDegreeFlag() {
+        return degreeFlag;
+    }
+
+    public void setDegreeFlag(YesOrNoEnum degreeFlag) {
+        this.degreeFlag = degreeFlag;
+    }
+
+    public YesOrNoEnum getTeacherFlag() {
+        return teacherFlag;
+    }
+
+    public void setTeacherFlag(YesOrNoEnum teacherFlag) {
+        this.teacherFlag = teacherFlag;
+    }
+
+    public Date getDegreeDate() {
+        return degreeDate;
+    }
+
+    public void setDegreeDate(Date degreeDate) {
+        this.degreeDate = degreeDate;
+    }
+
+    public Date getTeacherDate() {
+        return teacherDate;
+    }
+
+    public void setTeacherDate(Date teacherDate) {
+        this.teacherDate = teacherDate;
+    }
+
     public Date getMusicDate() {
         return musicDate;
     }
@@ -412,4 +471,12 @@ public class Teacher implements Serializable {
     public void setBrowse(Integer browse) {
         this.browse = browse;
     }
+
+    public UserLockFlag getLockFlag() {
+        return lockFlag;
+    }
+
+    public void setLockFlag(UserLockFlag lockFlag) {
+        this.lockFlag = lockFlag;
+    }
 }

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

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 
 
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.AuthTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -87,7 +88,13 @@ public class TeacherAuthEntryRecord implements Serializable {
     @ApiModelProperty("达人认证审核状态 UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过")
 	@TableField(value = "teacher_auth_status_")
     private AuthStatusEnum teacherAuthStatus;
-    /** 
+    /**
+     * 认证审核类型 ADD 新增 MODIFY 修改
+     */
+    @ApiModelProperty("认证审核类型 ADD 新增 MODIFY 修改")
+    @TableField(value = "teacher_auth_type_")
+    private AuthTypeEnum teacherAuthType;
+    /**
     * 审核人 
     */
     @ApiModelProperty("审核人 ")
@@ -198,6 +205,14 @@ public class TeacherAuthEntryRecord implements Serializable {
         this.teacherAuthStatus = teacherAuthStatus;
     }
 
+    public AuthTypeEnum getTeacherAuthType() {
+        return teacherAuthType;
+    }
+
+    public void setTeacherAuthType(AuthTypeEnum teacherAuthType) {
+        this.teacherAuthType = teacherAuthType;
+    }
+
     public Long getVerifyUserId() {
         return verifyUserId;
     }

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.biz.dal.enums.AuthTypeEnum;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -20,7 +21,7 @@ public class VideoLessonAuthRecord extends BaseEntity {
     private Long id;
 
     @TableField("video_group_id_")
-    @ApiModelProperty(value = "视频课组id")
+    @ApiModelProperty(value = "当前视频课组id")
     private Long videoGroupId;
 
     @TableField("audit_status_")
@@ -35,6 +36,10 @@ public class VideoLessonAuthRecord extends BaseEntity {
     @ApiModelProperty(value = "审批人id")
     private Long auditId;
 
+    @TableField("auth_type_")
+    @ApiModelProperty(value = "认证审核类型 ADD 新增 MODIFY 修改")
+    private AuthTypeEnum authType;
+
     @TableField("remarks")
     @ApiModelProperty(value = "备注")
     private String remarks;
@@ -46,6 +51,9 @@ public class VideoLessonAuthRecord extends BaseEntity {
     @TableField("update_time_")
     @ApiModelProperty(value = "修改时间")
     private Date updateTime;
+    
+    @TableField("version_")
+    private Long version;
 
     public Long getId() {
         return id;
@@ -110,4 +118,20 @@ public class VideoLessonAuthRecord extends BaseEntity {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public AuthTypeEnum getAuthType() {
+        return authType;
+    }
+
+    public void setAuthType(AuthTypeEnum authType) {
+        this.authType = authType;
+    }
+
+	public Long getVersion() {
+		return version;
+	}
+
+	public void setVersion(Long version) {
+		this.version = version;
+	}
 }

+ 12 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroup.java

@@ -1,21 +1,23 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.valid.AddGroup;
-import com.yonge.cooleshow.biz.dal.valid.UpdateGroup;
-import com.yonge.cooleshow.common.entity.BaseEntity;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+import java.util.Date;
+
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
-import java.math.BigDecimal;
-import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.valid.AddGroup;
+import com.yonge.cooleshow.biz.dal.valid.UpdateGroup;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 
 /**
  * 视频课基本信息表
@@ -121,7 +123,6 @@ public class VideoLessonGroup extends BaseEntity {
     @ApiModelProperty(value = "审批人id")
     private Integer auditId;
 
-
     @TableField("audit_version_")
     @ApiModelProperty(value = "是否审核时可见 (0:否  1:是)")
     private YesOrNoEnum auditVersion = YesOrNoEnum.NO;

+ 311 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroupLog.java

@@ -0,0 +1,311 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import java.util.List;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 对应数据库表(video_lesson_group_log):
+ */
+public class VideoLessonGroupLog {
+
+	@ApiModelProperty(value = "主键",required = false)
+	private Long id;
+	
+	private Long videoLessonGroupId;
+	
+	@ApiModelProperty(value = "课程名称",required = false)
+	private String lessonName;
+	
+	@ApiModelProperty(value = "课程声部",required = false)
+	private String lessonSubject;
+	
+	@ApiModelProperty(value = "课程介绍",required = false)
+	private String lessonDesc;
+	
+	@ApiModelProperty(value = "课程价格",required = false)
+	private java.math.BigDecimal lessonPrice;
+	
+	@ApiModelProperty(value = "课程封面图片URL",required = false)
+	private String lessonCoverUrl;
+	
+	@ApiModelProperty(value = "老师ID",required = false)
+	private Long teacherId;
+	
+	@ApiModelProperty(value = "课程节数",required = false)
+	private Integer lessonCount;
+	
+	@ApiModelProperty(value = "排序号",required = false)
+	private Integer sortNumber;
+	
+	@ApiModelProperty(value = "课程标签",required = false)
+	private String lessonTag;
+	
+	@ApiModelProperty(value = "是否置顶",required = false)
+	private boolean topFlag;
+	
+	@ApiModelProperty(value = "是否热门课程",required = false)
+	private boolean hotFlag;
+	
+	@ApiModelProperty(value = "是否上架 (0:否  1:是)",required = false)
+	private Integer shelvesFlag;
+	
+	@ApiModelProperty(value = "上下架时间",required = false)
+	private java.util.Date shelvesTime;
+	
+	@ApiModelProperty(value = "上下架原因",required = false)
+	private String shelvesReason;
+	
+	@ApiModelProperty(value = "上下架人",required = false)
+	private Long shelvesId;
+	
+	@ApiModelProperty(value = "修改人id",required = false)
+	private Long modifierId;
+	
+	@ApiModelProperty(value = "备注",required = false)
+	private String remarks;
+	
+	@ApiModelProperty(value = "是否审核时可见 (0:否  1:是)",required = false)
+	private Integer auditVersion;
+	
+	@ApiModelProperty(value = "创建时间",required = false)
+	private java.util.Date createTime;
+	
+	@ApiModelProperty(value = "更新时间",required = false)
+	private java.util.Date updateTime;
+	
+	private Long version;
+	
+	@ApiModelProperty(value = "视频课明细json串",required = false)
+	private String videoDetailJson;
+	
+    private List<VideoLessonGroupDetail> videoList;
+	
+	public VideoLessonGroupLog setId(Long id){
+		this.id = id;
+		return this;
+	}
+	
+	public Long getVideoLessonGroupId() {
+		return videoLessonGroupId;
+	}
+
+	public void setVideoLessonGroupId(Long videoLessonGroupId) {
+		this.videoLessonGroupId = videoLessonGroupId;
+	}
+
+	public Long getId(){
+		return this.id;
+	}
+			
+	public VideoLessonGroupLog setLessonName(String lessonName){
+		this.lessonName = lessonName;
+		return this;
+	}
+	
+	public String getLessonName(){
+		return this.lessonName;
+	}
+			
+	public VideoLessonGroupLog setLessonSubject(String lessonSubject){
+		this.lessonSubject = lessonSubject;
+		return this;
+	}
+	
+	public String getLessonSubject(){
+		return this.lessonSubject;
+	}
+			
+	public VideoLessonGroupLog setLessonDesc(String lessonDesc){
+		this.lessonDesc = lessonDesc;
+		return this;
+	}
+	
+	public String getLessonDesc(){
+		return this.lessonDesc;
+	}
+			
+	public VideoLessonGroupLog setLessonPrice(java.math.BigDecimal lessonPrice){
+		this.lessonPrice = lessonPrice;
+		return this;
+	}
+	
+	public java.math.BigDecimal getLessonPrice(){
+		return this.lessonPrice;
+	}
+			
+	public VideoLessonGroupLog setLessonCoverUrl(String lessonCoverUrl){
+		this.lessonCoverUrl = lessonCoverUrl;
+		return this;
+	}
+	
+	public String getLessonCoverUrl(){
+		return this.lessonCoverUrl;
+	}
+			
+	public VideoLessonGroupLog setTeacherId(Long teacherId){
+		this.teacherId = teacherId;
+		return this;
+	}
+	
+	public Long getTeacherId(){
+		return this.teacherId;
+	}
+			
+	public VideoLessonGroupLog setLessonCount(Integer lessonCount){
+		this.lessonCount = lessonCount;
+		return this;
+	}
+	
+	public Integer getLessonCount(){
+		return this.lessonCount;
+	}
+			
+	public VideoLessonGroupLog setSortNumber(Integer sortNumber){
+		this.sortNumber = sortNumber;
+		return this;
+	}
+	
+	public Integer getSortNumber(){
+		return this.sortNumber;
+	}
+			
+	public VideoLessonGroupLog setLessonTag(String lessonTag){
+		this.lessonTag = lessonTag;
+		return this;
+	}
+	
+	public String getLessonTag(){
+		return this.lessonTag;
+	}
+			
+	public VideoLessonGroupLog setTopFlag(boolean topFlag){
+		this.topFlag = topFlag;
+		return this;
+	}
+	
+	public boolean isTopFlag(){
+		return this.topFlag;
+	}
+			
+	public VideoLessonGroupLog setHotFlag(boolean hotFlag){
+		this.hotFlag = hotFlag;
+		return this;
+	}
+	
+	public boolean isHotFlag(){
+		return this.hotFlag;
+	}
+			
+	public VideoLessonGroupLog setShelvesFlag(Integer shelvesFlag){
+		this.shelvesFlag = shelvesFlag;
+		return this;
+	}
+	
+	public Integer getShelvesFlag(){
+		return this.shelvesFlag;
+	}
+			
+	public VideoLessonGroupLog setShelvesTime(java.util.Date shelvesTime){
+		this.shelvesTime = shelvesTime;
+		return this;
+	}
+	
+	public java.util.Date getShelvesTime(){
+		return this.shelvesTime;
+	}
+			
+	public VideoLessonGroupLog setShelvesReason(String shelvesReason){
+		this.shelvesReason = shelvesReason;
+		return this;
+	}
+	
+	public String getShelvesReason(){
+		return this.shelvesReason;
+	}
+			
+	public VideoLessonGroupLog setShelvesId(Long shelvesId){
+		this.shelvesId = shelvesId;
+		return this;
+	}
+	
+	public Long getShelvesId(){
+		return this.shelvesId;
+	}
+			
+	public Long getModifierId() {
+		return modifierId;
+	}
+
+	public void setModifierId(Long modifierId) {
+		this.modifierId = modifierId;
+	}
+
+	public VideoLessonGroupLog setRemarks(String remarks){
+		this.remarks = remarks;
+		return this;
+	}
+	
+	public String getRemarks(){
+		return this.remarks;
+	}
+			
+	public VideoLessonGroupLog setAuditVersion(Integer auditVersion){
+		this.auditVersion = auditVersion;
+		return this;
+	}
+	
+	public Integer getAuditVersion(){
+		return this.auditVersion;
+	}
+			
+	public VideoLessonGroupLog setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+		return this;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public VideoLessonGroupLog setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+		return this;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	public Long getVersion() {
+		return version;
+	}
+
+	public void setVersion(Long version) {
+		this.version = version;
+	}
+
+	public String getVideoDetailJson() {
+		return videoDetailJson;
+	}
+
+	public void setVideoDetailJson(String videoDetailJson) {
+		this.videoDetailJson = videoDetailJson;
+	}
+
+	public List<VideoLessonGroupDetail> getVideoList() {
+		return videoList;
+	}
+
+	public void setVideoList(List<VideoLessonGroupDetail> videoList) {
+		this.videoList = videoList;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

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

@@ -1,15 +1,16 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
-import com.yonge.cooleshow.common.entity.BaseEntity;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
 import java.util.Date;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+
 /**
  * 视频课购买记录表
  * @author yzp

+ 49 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -37,6 +38,14 @@ public class VipCardRecord implements Serializable {
 	@TableField(value = "vip_card_id_")
     private Long vipCardId;
 
+    @TableField(value = "times_")
+    @ApiModelProperty("添加时间数量")
+    private Integer times;
+
+    @TableField(value = "type_")
+    @ApiModelProperty("时间类型 DAY:天 MONTH:月 ,QUARTERLY : 季度 YEAR_HALF : 半年 YEAR:年")
+    private PeriodEnum type;
+
     @TableField(value = "client_type_")
     @ApiModelProperty("用户类型 学生:STUDENT 老师 :TEACHER")
     private ClientEnum clientType;
@@ -73,6 +82,46 @@ public class VipCardRecord implements Serializable {
     @TableField(value = "msg_status_")
     private Integer msgStatus;
 
+    @ApiModelProperty("创建人")
+    @TableField(value = "create_by_")
+    private Long createBy;
+
+    @ApiModelProperty("备注")
+    @TableField(value = "reason_")
+    private String reason;
+
+    public Long getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(Long createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public Integer getTimes() {
+        return times;
+    }
+
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+
+    public PeriodEnum getType() {
+        return type;
+    }
+
+    public void setType(PeriodEnum type) {
+        this.type = type;
+    }
+
     public SourceTypeEnum getSourceType() {
         return sourceType;
     }

+ 34 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuthTypeEnum.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 认证审核类型 ADD 新增 MODIFY 修改
+ *
+ * @Author: liweifan
+ * @Data: 2022/3/16 10:19
+ */
+public enum AuthTypeEnum implements BaseEnum<String, AuthTypeEnum> {
+    ADD("新增"),
+    MODIFY("修改"),
+
+    ;
+    @EnumValue
+    private String code;
+    private String name;
+
+    AuthTypeEnum(String name) {
+        this.code = this.name();
+        this.name = name;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -103,6 +103,9 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     PIANO_ROOM_ADJUST("琴房课调整"),
     PRACTICE_ADJUST("陪练课调整"),
     ACTIVITY_WIN("获奖消息"),
+    PLATFORM_ADD_VIP("会员赠送"),
+    SMS_STUDENT_LIVE_COMPLETION_FAIL("直播课成课失败"),
+    STUDENT_LIVE_COMPLETION_FAIL("直播课成课失败"),
 
     ;
 

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -66,7 +67,7 @@ public interface MemberPriceSettingsService extends IService<MemberPriceSettings
      * @param activityId 活动id
      * @return
      */
-    void activityReward(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId);
+    void activityReward(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId,String activityName);
 
     /**
      * 老师分享VIP 分润
@@ -76,5 +77,13 @@ public interface MemberPriceSettingsService extends IService<MemberPriceSettings
      * @return
      */
     ShareProfitVo shareVipProfit(SysUser sysUser, Long vipId);
-
+    /**
+     * 添加会员
+     *
+     * @param vipSubmitReq 会员信息
+     * @param client 类型
+     * @param sysUser
+     * @return
+     */
+    Boolean addVip(VipSubmitReq vipSubmitReq, ClientEnum client, SysUser sysUser);
 }

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

@@ -4,6 +4,8 @@ import com.yonge.cooleshow.biz.dal.dao.MusicSheetAccompanimentDao;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * MusicSheetAccompanimentService服务类
  * @author yzp
@@ -19,4 +21,6 @@ public interface MusicSheetAccompanimentService extends IService<MusicSheetAccom
      */
     void delByMusicSheetId(Long musicSheetId);
     MusicSheetAccompanimentDao getDao();
+
+    List<MusicSheetAccompaniment> getByMusicSheetId(Long musicSheetId);
 }

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

@@ -3,7 +3,6 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAuthRecord;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 
 /**
  * 曲目审核表 服务类
@@ -19,14 +18,15 @@ public interface MusicSheetAuthRecordService extends IService<MusicSheetAuthReco
      * @param userId 用户id
      * @return boolean
      */
-    boolean audit(TeacherMusicSheetAuditReq param, Long userId);
+    Long audit(TeacherMusicSheetAuditReq param, Long userId);
 
     /**
      * 设置曲目审核中状态
-     *
-     * @param musicSheetId 曲目id
+     *  @param musicSheetId 曲目id
+     * @param originalMusicSheetId
+     * @param lastMusicSheetId
      */
-    void setAuditDoing(Long musicSheetId);
+    void setAuditDoing(Long musicSheetId, Long originalMusicSheetId, Long lastMusicSheetId);
 
     /**
      * 获取当前曲目审核理由

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

@@ -41,9 +41,10 @@ public interface MusicSheetService extends IService<MusicSheet> {
      *
      * @param id 曲目id
      * @param reason
+     * @param client
      * @return boolean
      */
-    boolean state(Long id, String reason);
+    boolean state(Long id, String reason, ClientEnum client);
 
     /**
      * 获取专辑详情曲目信息
@@ -301,4 +302,19 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return
      */
     Boolean updateMusicImg(String musicImg, Long musicSheetId);
+
+    /**
+     *
+     * @param authMusicSheetId 曲目审核id
+     */
+    MusicSheetDetailVo auditDetail(Long authMusicSheetId);
+
+    /**
+     *
+     * 审核历史记录
+     *
+     * @param authMusicSheetId 曲目审核id
+     * @return
+     */
+    List<MusicSheetDetailVo> auditDetailList(Long authMusicSheetId);
 }

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

@@ -33,6 +33,9 @@ public interface TeacherAuthEntryRecordService extends IService<TeacherAuthEntry
  	 * @date 2022-03-18
      */
     IPage<TeacherAuthEntryRecordVo> selectPage(IPage<TeacherAuthEntryRecordVo> page, AuthEntryRecordSearch search);
+
+    IPage<TeacherAuthEntryRecordVo> historyPage(IPage<TeacherAuthEntryRecordVo> page, AuthEntryRecordSearch search);
+
     /***
      * 审核
      * @author liweifan
@@ -59,4 +62,5 @@ public interface TeacherAuthEntryRecordService extends IService<TeacherAuthEntry
      * @return: com.yonge.cooleshow.biz.dal.entity.TeacherAuthEntryRecord
      */
     TeacherAuthEntryRecordVo getLastRecordByUserId(Long userId);
+
 }

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

@@ -5,10 +5,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupDetailUpVo;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonPurchaseStudent;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 
 import java.util.List;
 
@@ -30,4 +27,5 @@ public interface VideoLessonGroupDetailService extends IService<VideoLessonGroup
     void deleteDetail(Long id);
 
     VideoLessonStudentVo selectVideoLesson(Long groupId,Long userId);
+
 }

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

@@ -0,0 +1,18 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupLog;
+import com.yonge.toolset.mybatis.service.BaseService;
+
+public interface VideoLessonGroupLogService extends BaseService<Long, VideoLessonGroupLog> {
+
+	Long queryMaxVersion(Long videoLessonGroupId);
+	
+	VideoLessonGroupLog queryByVideoLessonGroupId(Long videoLessonGroupId, Long version);
+	
+	/**
+	 * 查询最新上架信息
+	 * @param videoLessonGroupId
+	 * @return
+	 */
+	VideoLessonGroupLog queryLastestShelvesInfo(Long videoLessonGroupId);
+}

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

@@ -52,6 +52,10 @@ public interface VideoLessonGroupService extends IService<VideoLessonGroup> {
 
     IPage<VideoLessonAuthGroup> queryGroupList(IPage<VideoLessonAuthGroup> page, VideoGroupSearch query);
 
+    IPage<VideoLessonAuthGroup> queryGroupHistoryList(IPage<VideoLessonAuthGroup> page, VideoGroupSearch search);
+
+    VideoLessonAuthGroup authGroupDetil(Long videoGroupId);
+
     IPage<LessonGroupVo> selectLessonGroupById(IPage<LessonGroupVo> page, VideoLessonGroupSearch query);
 
     CountVideoGroupVo countVideoGroup();

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

@@ -2,16 +2,21 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
 
 /**
  * 购买会员卡记录表 服务类
@@ -52,7 +57,9 @@ public interface VipCardRecordService extends IService<VipCardRecord> {
      * @param activityId 活动id
      * @return
      */
-    VipCardRecord buildVipCardRecordByOrderDetail(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId);
+    VipCardRecord buildVipCardRecordByOrderDetail(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId,String activityName);
+
+    VipCardRecord getVipCardRecord(Long userId, ClientEnum client, String orderNo, String subOrderNo, String periodType, Long memberPriceSettingsId, Integer timeNum, SourceTypeEnum sourceType, Long createBy, String reason);
 
     /**
      * 分页查询
@@ -69,5 +76,11 @@ public interface VipCardRecordService extends IService<VipCardRecord> {
      */
     void pollExpireMsg();
 
-
+    /**
+     * 会员添加记录
+     *
+     * @param recordSearch
+     * @return
+     */
+    PageInfo<VipRecordVo> vipRecord(VipRecordSearch recordSearch);
 }

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

@@ -475,10 +475,11 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         Long activityId = saveOrUpdateRewardDto.getActivityId();
         List<ActivityPlanRewardDto> updateRewardDtoList = saveOrUpdateRewardDto.getUpdateRewardDtoList();
 
-        if(CollectionUtils.isEmpty(updateRewardDtoList)){
+		if(CollectionUtils.isEmpty(updateRewardDtoList)){
             updateRewardDtoList = new ArrayList<>();
         }
 
+
         for (ActivityPlanRewardDto rewardDto : updateRewardDtoList) {
             activityPlanRewardService.saveOrUpdateReward(rewardDto);
         }

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

@@ -202,7 +202,8 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
                     pianoRoomChangeRecord.setReason(activityPlan.getActivityName());
                     pianoRoomChangeRecordService.add(pianoRoomChangeRecord);
                 } else if (activityReward.getActivityReward().getRewardType().equals(RewardTypeEnum.VIP)) {
-                    memberPriceSettingsService.activityReward(userId, activityPlan.getActivityClient(), activityReward.getActivityReward(), activityId);
+                    memberPriceSettingsService.activityReward(userId, activityPlan.getActivityClient(),
+                                                              activityReward.getActivityReward(), activityId,activityPlan.getActivityName());
                 }
                 rewardNameList.add(activityReward.getActivityReward().getRewardName());
                 activityRewardIdList.add(activityReward.getActivityReward().getId());

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

@@ -97,6 +97,8 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Autowired
     private UserAccountService userAccountService;
 
+    @Autowired
+    private TeacherService teacherService;
 
     @Override
     public CourseGroupDao getDao() {
@@ -140,19 +142,25 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setMixStudentNum(group.getMixStudentNum());
         result.setImGroupId(group.getImGroupId());
         result.setAuditVersion(group.getAuditVersion());
-        SysUser teacher = getSysUser(group.getTeacherId());
-        if (teacher == null) {
+        SysUser teacherUser = getSysUser(group.getTeacherId());
+        if (teacherUser == null) {
             throw new BizException("用户不存在");
         }
-        if (sysUser.getId().equals(teacher.getId())) {
+        if (sysUser.getId().equals(teacherUser.getId())) {
             result.setMyself(true);
         } else {
             result.setMyself(false);
         }
+        Teacher teacher = teacherService.getById(teacherUser.getId());
+
+        if (teacher != null) {
+            result.setDegreeFlag(teacher.getDegreeFlag());
+            result.setTeacherFlag(teacher.getTeacherFlag());
 
-        result.setTeacherName(teacher.getRealName());
-        result.setUserName(teacher.getUsername());
-        result.setAvatar(teacher.getAvatar());
+        }
+        result.setTeacherName(teacherUser.getRealName());
+        result.setUserName(teacherUser.getUsername());
+        result.setAvatar(teacherUser.getAvatar());
         Optional.ofNullable(group.getSubjectId()).map(subjectService::get)
                 .ifPresent(subject -> result.setSubjectName(subject.getName()));
         //课程组计划
@@ -876,6 +884,14 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         //查询学生信息
         SysUser studentInfo = getSysUser(studentPayment.getUserId());
         try {
+
+            String payType = "";
+            if (studentPayment.getActualPrice().compareTo(BigDecimal.ZERO) >0) {
+                payType = "购买";
+            } else {
+                payType = "领取";
+            }
+
             //极光-消息推送-学生端-通知学生购买成功-跳转到APP
             MessageTypeEnum liveBuy = MessageTypeEnum.LIVE_BUY;
             //查询推送跳转的url
@@ -883,7 +899,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             Map<Long, String> studentReceivers = new HashMap<>();
             studentReceivers.put(studentInfo.getId(), studentInfo.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, liveBuy,
-                    studentReceivers, null, 0, liveBuyUrl, ClientEnum.STUDENT.getCode(),
+                    studentReceivers, null, 0, liveBuyUrl, ClientEnum.STUDENT.getCode(),payType,
                     teacherInfo.getUsername(), courseGroup.getName());
             log.info("buyLiveCourseSuccess buyLiveSendMessage LIVE_BUY ok");
 
@@ -894,7 +910,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             Map<Long, String> smsStudentReceivers = new HashMap<>();
             smsStudentReceivers.put(studentInfo.getId(), studentInfo.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, smsLiveBuy,
-                    smsStudentReceivers, null, 0, null, null,
+                    smsStudentReceivers, null, 0, null, null,payType,
                     teacherInfo.getUsername(), courseGroup.getName(), smsLiveBuyUrl);
             log.info("buyLiveCourseSuccess buyLiveSendMessage SMS_BUY_LIVE ok");
 
@@ -1114,14 +1130,15 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         }
         courseGroupList.forEach(courseGroup -> {
             try {
+                List<CourseScheduleStudentPayment> list = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                                           .eq(CourseScheduleStudentPayment::getCourseGroupId, courseGroup.getId()));
+                Set<Long> userIds = list.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toSet());
                 if (courseGroup.getPreStudentNum() >= courseGroup.getMixStudentNum() &&courseGroup.getStatus().equals(CourseGroupEnum.APPLY.getCode())) {
                     //人数达标则修改课程组为进行中状态
                     courseGroup.setStatus(CourseGroupEnum.ING.getCode());
                     //创建群聊 并添加人员到群中
                     String imGroupId = imGroupService.autoCreate(courseGroup.getId(), courseGroup.getType());
-                    List<CourseScheduleStudentPayment> list = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
-                            .eq(CourseScheduleStudentPayment::getCourseGroupId, courseGroup.getId()));
-                    Set<Long> userIds = list.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toSet());
+
                     imGroupMemberService.initGroupMembers(imGroupId, userIds, ImGroupMemberRoleType.STUDENT);
                     //添加老师进群
                     imGroupMemberService.initGroupMembers(imGroupId, Collections.singleton(courseGroup.getTeacherId()), ImGroupMemberRoleType.TEACHER);
@@ -1134,8 +1151,12 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                             .eq(CourseSchedule::getCourseGroupId, courseGroup.getId())
                             .set(CourseSchedule::getStatus, CourseScheduleEnum.CANCEL.getCode())
                     );
-                    //直播课成课失败发送消息
+                    // 老师直播课成课失败发送消息
                     this.sendMessage(courseGroup);
+
+                    // 学生直播课成课失败发送消息
+                    this.sendStudentMessage(userIds,courseGroup);
+
                     //退款
                     this.refund(courseGroup);
                 }
@@ -1148,6 +1169,32 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         });
     }
 
+    private void sendStudentMessage(Set<Long> userIds, CourseGroup courseGroup) {
+        for (Long userId : userIds) {
+
+                SysUser user = sysUserFeignService.queryUserById(userId);
+                // 发短信
+                try {
+                    Map<Long, String> receivers = new HashMap<>();
+                    receivers.put(user.getId(), user.getPhone());
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_STUDENT_LIVE_COMPLETION_FAIL,
+                                                       receivers, null, 0, null, null, courseGroup.getName());
+                } catch (Exception e) {
+                    log.warn("学生直播课成课失败短信发送失败,{}", e.getMessage());
+                }
+
+                // 发推送
+                try {
+                    Map<Long, String> receivers = new HashMap<>();
+                    receivers.put(user.getId(), user.getPhone());
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_LIVE_COMPLETION_FAIL,
+                                                       receivers, null, 0, null, ClientEnum.STUDENT.getCode(), courseGroup.getName());
+                } catch (Exception e) {
+                    log.warn("学生直播课成课失败推送发送失败,{}", e.getMessage());
+                }
+        }
+    }
+
     /**
      * 直播课成课失败退款
      *

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

@@ -2,12 +2,16 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
@@ -47,10 +51,10 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
     private VipCardRecordService vipCardRecordService;
     @Autowired
     private SysMessageService sysMessageService;
-    @Autowired
-    private PlatformCashAccountRecordService platformCashAccountRecordService;
 
     @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
     private SysConfigService sysConfigService;
     @Override
     public MemberPriceSettingsVo detail(Long id) {
@@ -98,9 +102,9 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
 
     @Override
-    public void activityReward(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId) {
+    public void activityReward(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId,String activityName) {
 
-        VipCardRecord vipCardRecord = vipCardRecordService.buildVipCardRecordByOrderDetail(userId,client,activityReward,activityId);
+        VipCardRecord vipCardRecord = vipCardRecordService.buildVipCardRecordByOrderDetail(userId,client,activityReward,activityId,activityName);
 
         getUserVipInfoVo(vipCardRecord);
     }
@@ -164,6 +168,37 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         return result;
     }
 
+    @Override
+    public Boolean addVip(VipSubmitReq vipSubmitReq, ClientEnum client, SysUser sysUser) {
+
+        VipCardRecord vipCardRecord = vipCardRecordService.getVipCardRecord(vipSubmitReq.getUserId(), client, null, null, vipSubmitReq.getType().toString(),
+                            null, vipSubmitReq.getTimes(),SourceTypeEnum.PLATFORM, sysUser.getId(), vipSubmitReq.getReason());
+
+        getUserVipInfoVo(vipCardRecord);
+
+        // 发消息
+        sendAddVipMessage(vipSubmitReq.getUserId(),client,vipSubmitReq.getTimes(),vipSubmitReq.getType(),vipSubmitReq.getReason());
+
+        return true;
+    }
+
+    private void sendAddVipMessage(Long userId, ClientEnum client, Integer times, PeriodEnum type, String reason) {
+        try {
+            SysUser user = sysUserFeignService.queryUserById(userId);
+
+            if (user == null) {
+                return;
+            }
+
+            Map<Long, String> receivers = new HashMap<>();
+            receivers.put(userId, user.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PLATFORM_ADD_VIP,
+                                               receivers, null, 0, null, client.getCode(), times,type.getMsg(),reason);
+        } catch (Exception e) {
+            log.error("会员赠送消息发送失败 : {}",e.getMessage());
+        }
+    }
+
     private UserVipInfoVo getVipInfo(ClientEnum userType, Long userId) {
 
         UserVipInfoVo userVipInfoVo = new UserVipInfoVo();

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

@@ -9,6 +9,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.List;
+
 /**
  * MusicSheetAccompanimentService服务实现类
  * @author yzp
@@ -29,6 +31,14 @@ public class MusicSheetAccompanimentServiceImpl extends ServiceImpl<MusicSheetAc
     }
 
     @Override
+    public List<MusicSheetAccompaniment> getByMusicSheetId(Long musicSheetId) {
+
+        return this.lambdaQuery()
+                .eq(MusicSheetAccompaniment::getMusicSheetId,musicSheetId)
+                .list();
+    }
+
+    @Override
     public void delByMusicSheetId(Long musicSheetId) {
         musicSheetAccompanimentDao.delByMusicSheetId(musicSheetId);
     }

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

@@ -6,7 +6,6 @@ import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAuthRecord;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetAuthRecordService;
-import com.yonge.toolset.base.exception.BizException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -21,25 +20,53 @@ public class MusicSheetAuthRecordServiceImpl extends ServiceImpl<MusicSheetAuthR
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean audit(TeacherMusicSheetAuditReq param, Long userId) {
+    public Long audit(TeacherMusicSheetAuditReq param, Long userId) {
 
-        // 删除审核中的状态
-        this.lambdaUpdate()
-                .eq(MusicSheetAuthRecord::getMusicSheetId,param.getMusicSheetId())
-                .eq(MusicSheetAuthRecord::getAuditState, AuthStatusEnum.DOING.getCode())
-                .remove();
+        // 查询到审核记录
+        List<MusicSheetAuthRecord> list = this.lambdaQuery()
+                                              .eq(MusicSheetAuthRecord::getMusicSheetId, param.getMusicSheetId())
+                                              .eq(MusicSheetAuthRecord::getAuditState, AuthStatusEnum.DOING.getCode())
+                                              .list();
 
         MusicSheetAuthRecord musicSheetAuthRecord = new MusicSheetAuthRecord();
+        if (!CollectionUtils.isEmpty(list)) {
+            musicSheetAuthRecord = list.get(0);
+        } else {
+            musicSheetAuthRecord.setCreateTime(new Date());
+        }
+
+        // 替换审核id
+        replaceAuthRecord(param, musicSheetAuthRecord);
         musicSheetAuthRecord.setMusicSheetId(param.getMusicSheetId());
-        musicSheetAuthRecord.setCreateTime(new Date());
+        if (param.getAuthStatus().equals(AuthStatusEnum.PASS)) {
+            musicSheetAuthRecord.setMusicSheetId(musicSheetAuthRecord.getOriginalMusicSheetId());
+        }
         musicSheetAuthRecord.setAuditState(param.getAuthStatus());
         musicSheetAuthRecord.setReason(param.getRemark());
         musicSheetAuthRecord.setVerifyUserId(userId);
-        return this.saveOrUpdate(musicSheetAuthRecord);
+        musicSheetAuthRecord.setUpdateTime(new Date());
+        this.saveOrUpdate(musicSheetAuthRecord);
+        return musicSheetAuthRecord.getOriginalMusicSheetId();
+    }
+
+    private void replaceAuthRecord(TeacherMusicSheetAuditReq param, MusicSheetAuthRecord musicSheetAuthRecord) {
+        if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && !musicSheetAuthRecord.getOriginalMusicSheetId().equals(
+                musicSheetAuthRecord.getMusicSheetId())) {
+            List<MusicSheetAuthRecord> musicSheetAuthRecords = this.lambdaQuery()
+                                                   .eq(MusicSheetAuthRecord::getMusicSheetId,
+                                                       musicSheetAuthRecord.getOriginalMusicSheetId())
+                                                   .list();
+            if (!CollectionUtils.isEmpty(musicSheetAuthRecords)) {
+                MusicSheetAuthRecord record = musicSheetAuthRecords.get(0);
+                record.setMusicSheetId(param.getMusicSheetId());
+                this.saveOrUpdate(record);
+            }
+
+        }
     }
 
     @Override
-    public void setAuditDoing(Long musicSheetId) {
+    public void setAuditDoing(Long musicSheetId, Long originalMusicSheetId, Long lastMusicSheetId) {
         List<MusicSheetAuthRecord> list = this.lambdaQuery()
                                               .eq(MusicSheetAuthRecord::getMusicSheetId, musicSheetId)
                                               .eq(MusicSheetAuthRecord::getAuditState, AuthStatusEnum.DOING.getCode())
@@ -50,6 +77,14 @@ public class MusicSheetAuthRecordServiceImpl extends ServiceImpl<MusicSheetAuthR
         MusicSheetAuthRecord musicSheetAuthRecord = new MusicSheetAuthRecord();
         musicSheetAuthRecord.setMusicSheetId(musicSheetId);
         musicSheetAuthRecord.setAuditState(AuthStatusEnum.DOING);
+        if (originalMusicSheetId == null) {
+            originalMusicSheetId = musicSheetId;
+            musicSheetAuthRecord.setFirstAuth(0);
+        } else {
+            musicSheetAuthRecord.setFirstAuth(1);
+        }
+        musicSheetAuthRecord.setCreateTime(new Date());
+        musicSheetAuthRecord.setOriginalMusicSheetId(originalMusicSheetId);
         this.saveOrUpdate(musicSheetAuthRecord);
     }
 

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.additional.update.impl.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -28,6 +29,7 @@ import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.easyexcel.ExcelException;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -37,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
@@ -112,7 +115,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public boolean saveMp3AndAccompaniment(MusicSheetDto musicSheetDto, Long userId) {
+    public boolean saveMp3AndAccompaniment(MusicSheetDto musicSheetDto, Long userId, Long originalMusicSheetId, Long lastMusicSheetId) {
         MusicSheet musicSheet = new MusicSheet();
         BeanUtils.copyProperties(musicSheetDto, musicSheet);
         //保存主表
@@ -122,7 +125,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         this.saveOrUpdate(musicSheet);
 
         if (musicSheet.getAuditStatus() == null || AuthStatusEnum.DOING.getCode().equals(musicSheet.getAuditStatus().getCode())) {
-            musicSheetAuthRecordService.setAuditDoing(musicSheet.getId());
+            musicSheetAuthRecordService.setAuditDoing(musicSheet.getId(), originalMusicSheetId, lastMusicSheetId);
         }
 
         Long sheetId = musicSheet.getId();
@@ -139,7 +142,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean state(Long id, String reason) {
+    public boolean state(Long id, String reason, ClientEnum client) {
         MusicSheet musicSheet = this.getById(id);
         if (musicSheet == null) {
             throw new BizException("未找到曲目信息");
@@ -151,7 +154,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             musicSheet.setTopFlag(YesOrNoEnum.NO);
 
             // 下架发送推送
-            sendOutSaleMessage(reason, musicSheet);
+            if (client.equals(ClientEnum.SYSTEM)) {
+                sendOutSaleMessage(reason, musicSheet);
+            }
 
         }
         musicSheet.setReason(reason);
@@ -315,6 +320,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
 
     @Override
     public IPage<MusicSheetVo> myMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
+        query.setDelFlag(null);
         return page.setRecords(baseMapper.selectMyMusicPage(page, query));
     }
 
@@ -369,25 +375,27 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             throw new BizException("曲目已经过审批");
         }
 
-        boolean flag = false;
-        if (musicSheetAuthRecordService.audit(param, userId)) {
-            musicSheet.setAuditStatus(param.getAuthStatus());
+        boolean flag;
+        Long originalMusicSheetId = musicSheetAuthRecordService.audit(param, userId);
+        musicSheet.setAuditStatus(param.getAuthStatus());
             if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && StringUtil.isEmpty(param.getMusicImg())) {
                 throw new BizException("曲目渲染失败");
             } else if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && !StringUtil.isEmpty(param.getMusicImg())) {
                 musicSheet.setMusicImg(param.getMusicImg());
             }
-            musicSheet.setUpdateBy(userId);
-            musicSheet.setUpdateTime(new Date());
-            if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
-                musicSheet.setState(YesOrNoEnum.YES);
+        musicSheet.setUpdateBy(userId);
+        musicSheet.setUpdateTime(new Date());
+        if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
+            musicSheet.setState(YesOrNoEnum.YES);
+            // 替换曲目id
+            replaceMusicSheet(param, musicSheet, originalMusicSheetId);
 
-                // 修改老师标签
-                teacherService.setTeacherTag(musicSheet.getUserId(), TeacherTagEnum.MUSIC);
+            // 修改老师标签
+            teacherService.setTeacherTag(musicSheet.getUserId(), TeacherTagEnum.MUSIC);
 
-            }
-            flag = this.updateById(musicSheet);
         }
+        flag = this.updateById(musicSheet);
+
 
         // 发送审核通知
         Map<Long, String> receivers = new HashMap<>();
@@ -402,6 +410,32 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         return flag;
     }
 
+    private void replaceMusicSheet(TeacherMusicSheetAuditReq param, MusicSheet musicSheet, Long originalMusicSheetId) {
+        if (!musicSheet.getId().equals(originalMusicSheetId)) {
+            musicSheet.setId(originalMusicSheetId);
+            MusicSheet originalMusicSheet = getById(originalMusicSheetId);
+            originalMusicSheet.setId(param.getMusicSheetId());
+            this.saveOrUpdate(originalMusicSheet);
+
+            // 替换 伴奏
+            List<MusicSheetAccompaniment> musicSheetAccompanimentList = musicSheetAccompanimentService.getByMusicSheetId(
+                                                                                                              musicSheet.getId()).stream()
+                                                                                                      .peek(musicSheetAccompaniment -> musicSheetAccompaniment.setMusicSheetId(
+                                                                                                              originalMusicSheetId))
+                                                                                                      .collect(Collectors.toList());
+            List<MusicSheetAccompaniment> originalMusicSheetAccompanimentList = musicSheetAccompanimentService.getByMusicSheetId(
+                                                                                                                      originalMusicSheetId).stream()
+                                                                                                              .peek(musicSheetAccompaniment -> musicSheetAccompaniment.setMusicSheetId(
+                                                                                                                      musicSheet.getId()))
+                                                                                                              .collect(Collectors.toList());
+            musicSheetAccompanimentList.addAll(originalMusicSheetAccompanimentList);
+            if (CollectionUtils.isEmpty(musicSheetAccompanimentList)) {
+                return;
+            }
+            musicSheetAccompanimentService.saveOrUpdateBatch(musicSheetAccompanimentList);
+        }
+    }
+
     // 发送曲目审核消息
     private void sendMusicSheetAuditMessage(TeacherMusicSheetAuditReq param, MusicSheet musicSheet, Map<Long, String> receivers) {
         if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
@@ -442,31 +476,30 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     public boolean saveMusicSheet(MusicSheetDto musicSheetDto, Long userId) {
 
         MusicSheet oldMusicSheet = null;
+        Long originalMusicSheetId = null;
+        Long lastMusicSheetId = musicSheetDto.getId();
         if (musicSheetDto.getId() != null) {
             oldMusicSheet = getById(musicSheetDto.getId());
         }
         // 保存审核拒绝的数据
         if (musicSheetDto.getId() != null && AuthStatusEnum.DOING.getCode().equals(musicSheetDto.getAuditStatus().getCode())) {
             // 保存删除的曲目
-            if (oldMusicSheet.getAuditStatus().equals(AuthStatusEnum.UNPASS)) {
-                oldMusicSheet.setId(null);
+            if (oldMusicSheet != null && !AuthStatusEnum.DOING.equals(oldMusicSheet.getAuditStatus())) {
                 oldMusicSheet.setDelFlag(true);
-                this.save(oldMusicSheet);
-                // 删除的曲目的伴奏
-                musicSheetAccompanimentService.lambdaUpdate()
-                                              .eq(MusicSheetAccompaniment::getMusicSheetId,musicSheetDto.getId())
-                                              .set(MusicSheetAccompaniment::getMusicSheetId,oldMusicSheet.getId())
-                                              .update();
-                // 审核拒绝的原因
-                musicSheetAuthRecordService.lambdaUpdate()
-                                           .eq(MusicSheetAuthRecord::getMusicSheetId,musicSheetDto.getId())
-                                           .set(MusicSheetAuthRecord::getMusicSheetId,oldMusicSheet.getId())
-                                           .update();
+                this.saveOrUpdate(oldMusicSheet);
+                List<MusicSheetAuthRecord> list = musicSheetAuthRecordService.lambdaQuery()
+                                                                             .eq(MusicSheetAuthRecord::getMusicSheetId,
+                                                                                 musicSheetDto.getId())
+                                                                             .list();
+                if (!CollectionUtils.isEmpty(list)) {
+                    originalMusicSheetId = list.get(0).getOriginalMusicSheetId();
+                }
+                musicSheetDto.setId(null);
             }
 
         }
 
-        if (musicSheetDto.getId() != null) {
+        if (musicSheetDto.getId() != null && musicSheetDto.getSourceType().equals(SourceTypeEnum.PLATFORM)) {
             musicSheetAccompanimentService.delByMusicSheetId(musicSheetDto.getId());
         }
 
@@ -485,7 +518,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             if (CollectionUtils.isEmpty(list)) {
                 throw new BizException("mp3音频文件对应的主音或者伴奏文件没有提供");
             }
-            return saveMp3AndAccompaniment(musicSheetDto, userId);
+            return saveMp3AndAccompaniment(musicSheetDto, userId,originalMusicSheetId,lastMusicSheetId);
         } else {
             MusicSheet musicSheet = new MusicSheet();
             BeanUtils.copyProperties(musicSheetDto, musicSheet);
@@ -494,7 +527,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             musicSheet.setState(YesOrNoEnum.NO);
             this.saveOrUpdate(musicSheet);
             if (musicSheet.getAuditStatus() == null || AuthStatusEnum.DOING.getCode().equals(musicSheet.getAuditStatus().getCode())) {
-                musicSheetAuthRecordService.setAuditDoing(musicSheet.getId());
+                musicSheetAuthRecordService.setAuditDoing(musicSheet.getId(),originalMusicSheetId,lastMusicSheetId);
             }
 
             return true;
@@ -984,10 +1017,15 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if (CollectionUtils.isEmpty(musicSheetList)) {
             return true;
         }
-        this.lambdaUpdate()
-            .in(MusicSheet::getId,musicSheetList.stream().map(MusicSheet::getId).collect(Collectors.toList()))
-            .set(MusicSheet::getState,reasonDto.getState())
-            .update();
+        LambdaUpdateChainWrapper<MusicSheet> wrapper = this.lambdaUpdate()
+                                                       .in(MusicSheet::getId, musicSheetList.stream()
+                                                                .map(MusicSheet::getId)
+                                                                .collect(Collectors.toList()))
+                                                       .set(MusicSheet::getState, reasonDto.getState());
+        if (reasonDto.getState().equals(YesOrNoEnum.NO)) {
+            wrapper.set(MusicSheet::getTopFlag,0);
+        }
+        wrapper.update();
 
         // 发送推送
         if (reasonDto.getState().equals(YesOrNoEnum.YES)){
@@ -1004,6 +1042,24 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Override
+    public MusicSheetDetailVo auditDetail(Long authMusicSheetId) {
+
+        MusicSheetAuthRecord musicSheetAuthRecord = musicSheetAuthRecordService.getById(authMusicSheetId);
+        MusicSheetDetailVo detail = detail(musicSheetAuthRecord.getMusicSheetId(), null, null);
+        List<MusicSheetDetailVo> musicSheetDetailVos = auditDetailList(authMusicSheetId);
+        if (!CollectionUtils.isEmpty(musicSheetDetailVos)) {
+            detail.setLastMusicSheet(musicSheetDetailVos.get(0));
+        }
+        return detail;
+    }
+
+    @Override
+    public List<MusicSheetDetailVo> auditDetailList(Long authMusicSheetId) {
+        MusicSheetAuthRecord musicSheetAuthRecord = musicSheetAuthRecordService.getById(authMusicSheetId);
+        return baseMapper.auditDetailList(musicSheetAuthRecord.getOriginalMusicSheetId(),authMusicSheetId);
+    }
+
+    @Override
     public Boolean updateMusicImg(String musicImg, Long musicSheetId) {
         MusicSheet musicSheet = new MusicSheet();
         musicSheet.setMusicImg(musicImg);
@@ -1013,7 +1069,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         return true;
     }
 
-    private SysUser getSysUser(Long userId) {
+	private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                 .map(sysUserFeignService::queryUserById)
                 .orElseThrow(() -> new BizException("用户不存在"));

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

@@ -31,6 +31,7 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
@@ -43,11 +44,11 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     private StudentTotalService totalService;
     @Autowired
     private ImUserFriendService imUserFriendService;
-    @Autowired
+    @Resource
     private UserBindingTeacherDao userBindingTeacherDao;
     @Autowired
     private StudentService studentService;
-    @Autowired
+    @Resource
     private TeacherDao teacherDao;
 
     @Override

+ 71 - 22
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java

@@ -12,12 +12,8 @@ import com.yonge.cooleshow.biz.dal.dto.req.TeacherApplyDetailReq;
 import com.yonge.cooleshow.biz.dal.dto.search.AuthEntryRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.SysMessageService;
-import com.yonge.cooleshow.biz.dal.service.TeacherStyleVideoService;
-import com.yonge.cooleshow.biz.dal.service.UserFirstTimeService;
+import com.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
@@ -35,11 +31,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.TeacherAuthEntryRecord;
 import com.yonge.cooleshow.biz.dal.dao.TeacherAuthEntryRecordDao;
-import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEntryRecordDao, TeacherAuthEntryRecord> implements TeacherAuthEntryRecordService {
@@ -55,9 +52,16 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
     @Resource
     private TeacherDao teacherDao;
 
+    @Autowired
+    private TeacherService teacherService;
+
     @Override
     public TeacherAuthEntryRecordVo detail(Long id) {
-        return baseMapper.detail(id);
+        TeacherAuthEntryRecordVo detail = baseMapper.detail(id);
+        //查询上一次的提交
+        TeacherAuthEntryRecordVo lastDetil = baseMapper.lastDetil(id, detail.getUserId());
+        detail.setLastDetil(lastDetil);
+        return detail;
     }
 
     @Override
@@ -66,6 +70,11 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
     }
 
     @Override
+    public IPage<TeacherAuthEntryRecordVo> historyPage(IPage<TeacherAuthEntryRecordVo> page, AuthEntryRecordSearch search) {
+        return page.setRecords(baseMapper.historyPage(page, search));
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser sysUser) throws Exception {
         Long[] ids = StringUtil.toLongArray(StringPool.COMMA, authOperaReq.getId());
@@ -85,26 +94,30 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
             if (null == teacher) {
                 continue;
             }
-            if (YesOrNoEnum.YES.equals(teacher.getEntryFlag())) {
+            /*if (YesOrNoEnum.YES.equals(teacher.getEntryFlag())) {
                 continue;
-            }
+            }*/
             if (authOperaReq.getPass()) {
                 teacher.setSubjectId(StringUtil.isEmpty(teacher.getSubjectId()) ? build.getSubjectId() : teacher.getSubjectId());
                 teacher.setIntroduction(StringUtil.isEmpty(teacher.getIntroduction()) ? build.getIntroduction() : teacher.getIntroduction());
                 teacher.setGraduateSchool(StringUtil.isEmpty(teacher.getGraduateSchool()) ? build.getGraduateSchool() : teacher.getGraduateSchool());
                 teacher.setSubject(StringUtil.isEmpty(teacher.getSubject()) ? build.getSubject() : teacher.getSubject());
-                teacher.setGradCertificate(StringUtil.isEmpty(teacher.getGradCertificate()) ? build.getGradCertificate() : teacher.getGradCertificate());
-                teacher.setDegreeCertificate(StringUtil.isEmpty(teacher.getDegreeCertificate()) ? build.getDegreeCertificate() : teacher.getDegreeCertificate());
-                teacher.setTeacherCertificate(StringUtil.isEmpty(teacher.getTeacherCertificate()) ? build.getTeacherCertificate() : teacher.getTeacherCertificate());
+                teacher.setGradCertificate( StringUtil.isEmpty(build.getGradCertificate())?"":build.getGradCertificate());
+                teacher.setDegreeCertificate(StringUtil.isEmpty( build.getDegreeCertificate())?"":build.getDegreeCertificate());
+                teacher.setTeacherCertificate( StringUtil.isEmpty(build.getTeacherCertificate())?"":build.getTeacherCertificate());
 
                 //老师风采视频
                 String styleVideoJson = build.getStyleVideoJson();
                 saveStyleVideo(styleVideoJson, build.getUserId(), sysUser.getId());
 
+                setTag(authOperaReq, build, teacher);
                 //记录达人认证时间
-                userFirstTimeService.recordTime(build.getUserId(),ClientEnum.TEACHER, UserFirstTimeTypeEnum.ENTRY);
+                userFirstTimeService.recordTime(build.getUserId(), ClientEnum.TEACHER, UserFirstTimeTypeEnum.ENTRY);
+
+            }
+            if (null == teacher.getEntryFlag() || YesOrNoEnum.NO.equals(teacher.getEntryFlag())) {
+                teacher.setEntryFlag(authOperaReq.getPass() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
             }
-            teacher.setEntryFlag(authOperaReq.getPass() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
             teacher.setEntryAuthDate(new Date());
             teacher.setUpdateTime(new Date());
 
@@ -119,6 +132,27 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
         return HttpResponseResult.succeed(true);
     }
 
+    private void setTag(AuthOperaReq authOperaReq, TeacherAuthEntryRecord build, TeacherVo teacher) {
+        if (authOperaReq.getPass()) {
+            if (!StringUtil.isEmpty(teacher.getTeacherCertificate())) {
+                teacher.setTeacherDate(new Date());
+                teacher.setTeacherFlag(YesOrNoEnum.YES);
+            } else {
+                teacher.setTeacherFlag(YesOrNoEnum.NO);
+                teacher.setTeacherDate(null);
+            }
+        }
+        if (authOperaReq.getPass()) {
+            if (!StringUtil.isEmpty(teacher.getDegreeCertificate()) && !StringUtil.isEmpty(teacher.getGradCertificate())) {
+                teacher.setDegreeFlag(YesOrNoEnum.YES);
+                teacher.setDegreeDate(new Date());
+            } else  {
+                teacher.setDegreeFlag(YesOrNoEnum.NO);
+                teacher.setDegreeDate(null);
+            }
+        }
+    }
+
     /**
      * 保存老师风采视频
      *
@@ -127,6 +161,17 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
      * @param verifyUserId
      */
     private void saveStyleVideo(String styleVideoJson, Long userId, Long verifyUserId) {
+
+        // 如果已经有认证审核的数据,就不在保存
+
+        Integer count = teacherStyleVideoService.lambdaQuery()
+                .eq(TeacherStyleVideo::getUserId,userId)
+                .eq(TeacherStyleVideo::getEntryFlag, YesOrNoEnum.YES)
+                .count();
+        if (count > 0) {
+            return;
+        }
+
         if (!StringUtil.isEmpty(styleVideoJson)) {
             JSONArray jsonArray = JSONObject.parseArray(styleVideoJson);
             List<TeacherStyleVideo> batchVideoList = new ArrayList<>();
@@ -142,7 +187,9 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
                 video.setEntryFlag(YesOrNoEnum.YES);
                 batchVideoList.add(video);
             }
-            teacherStyleVideoService.batchAddStyleVideo(batchVideoList);
+            if (!CollectionUtils.isEmpty(batchVideoList)) {
+                teacherStyleVideoService.batchAddStyleVideo(batchVideoList);
+            }
         }
     }
 
@@ -190,16 +237,18 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
         if (hasApply(sysUser.getId())) {
             return HttpResponseResult.failed("已经提交过申请");
         }
-        //判断用户是否已经通过申请
-        Teacher teacher = teacherDao.selectById(sysUser.getId());
-        if (YesOrNoEnum.YES.equals(teacher.getEntryFlag())) {
-            return HttpResponseResult.failed("已经通过审批");
-        }
+
         //新增申请记录
         TeacherAuthEntryRecord teacherAuthEntryRecord = new TeacherAuthEntryRecord();
         BeanUtils.copyProperties(teacherApplyDetailDto, teacherAuthEntryRecord);
         teacherAuthEntryRecord.setTeacherAuthStatus(AuthStatusEnum.DOING);
+        teacherAuthEntryRecord.setTeacherAuthType(AuthTypeEnum.MODIFY);
 
+        List<TeacherAuthEntryRecord> olds = baseMapper.selectList(Wrappers.<TeacherAuthEntryRecord>query().lambda()
+                .eq(TeacherAuthEntryRecord::getUserId, sysUser.getId()));
+        if (CollectionUtils.isEmpty(olds)) {
+            teacherAuthEntryRecord.setTeacherAuthType(AuthTypeEnum.ADD);
+        }
         return HttpResponseResult.status(baseMapper.insert(teacherAuthEntryRecord) > 0);
     }
 
@@ -223,7 +272,7 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
     private Boolean hasApply(Long userId) {
         TeacherAuthEntryRecord teacherAuthEntryRecord = baseMapper.selectOne(Wrappers.<TeacherAuthEntryRecord>query().lambda()
                 .eq(TeacherAuthEntryRecord::getUserId, userId)
-                .eq(TeacherAuthEntryRecord::getTeacherAuthStatus, 1));
+                .eq(TeacherAuthEntryRecord::getTeacherAuthStatus, AuthStatusEnum.DOING));
         return teacherAuthEntryRecord != null;
     }
 

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

@@ -118,6 +118,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         TeacherHomeVo teacherHomeVo = new TeacherHomeVo();
         BeanUtils.copyProperties(teacher, teacherHomeVo);
 
+        teacherHomeVo.setDegreeDate(teacher.getDegreeDate());
+        teacherHomeVo.setTeacherDate(teacher.getTeacherDate());
         //身份证号、手机号脱敏
         teacherHomeVo.setIdCardNo(ValueUtil.fuzzyIdCard(teacherHomeVo.getIdCardNo()));
         teacherHomeVo.setPhone(ValueUtil.fuzzyMobile(teacherHomeVo.getPhone()));

+ 50 - 20
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupDetailServiceImpl.java

@@ -1,35 +1,46 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDao;
+import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDetailDao;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonPurchaseRecordDao;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
-import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDetailDao;
-
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupLog;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonPurchaseRecord;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
-import com.yonge.cooleshow.biz.dal.vo.*;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.utils.obj.ObjectUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-import org.springframework.beans.factory.annotation.Autowired;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
+import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupLogService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupDetailUpVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupUpVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonPurchaseStudent;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentVo;
+import com.yonge.toolset.utils.json.JsonUtil;
 
 /**
  * VideoLessonGroupDetailService服务实现类
@@ -50,6 +61,12 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
     private VideoLessonPurchaseRecordDao videoLessonPurchaseRecordDao;
     @Autowired
     private UserOrderService orderService;
+    
+    @Autowired
+    private VideoLessonGroupLogService videoLessonGroupLogService;
+
+    @Autowired
+    private TeacherService teacherService;
 
     public VideoLessonGroupDetailDao getDao() {
         return videoLessonGroupDetailDao;
@@ -164,15 +181,28 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
         VideoLessonGroupSearch query = new VideoLessonGroupSearch();
         //筛选已审核的视频课
         query.setGroupId(groupId);
-        List<VideoLessonGroupVo> lessonGroup = videoLessonGroupDao.selectPage(null, query);
-        if (lessonGroup.isEmpty()){
-            return lessonStudentVo;
+
+        VideoLessonGroupVo videoLessonGroupVo = new VideoLessonGroupVo();
+        VideoLessonGroupLog videoLessonGroupLog = videoLessonGroupLogService.queryLastestShelvesInfo(groupId);
+        
+        BeanUtils.copyProperties(videoLessonGroupLog, videoLessonGroupVo);
+        
+        videoLessonGroupVo.setId(videoLessonGroupLog.getVideoLessonGroupId());
+        
+        List<VideoLessonPurchaseRecord> videoLessonPurchaseRecordList = videoLessonPurchaseRecordDao.queryByVideoLessonGroupId(videoLessonGroupLog.getVideoLessonGroupId(), OrderStatusEnum.PAID.getCode());
+        videoLessonGroupVo.setCountStudent(videoLessonPurchaseRecordList.size());
+
+        Teacher teacher = teacherService.getById(videoLessonGroupVo.getTeacherId());
+        if (teacher != null) {
+            lessonStudentVo.setTeacherFlag(teacher.getTeacherFlag());
+            lessonStudentVo.setDegreeFlag(teacher.getDegreeFlag());
         }
-        lessonStudentVo.setLessonGroup(lessonGroup.get(0));
+
+        lessonStudentVo.setLessonGroup(videoLessonGroupVo);
 
         VideoLessonSearch search = new VideoLessonSearch();
         search.setVideoLessonGroupId(groupId);
-        lessonStudentVo.setDetailList(videoLessonGroupDetailDao.selectPage(null, search));
+        lessonStudentVo.setDetailList(JsonUtil.parseArray(videoLessonGroupLog.getVideoDetailJson(), VideoLessonGroupDetail.class));
         return lessonStudentVo;
     }
 

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

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupLogDao;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupLog;
+import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupLogService;
+import com.yonge.toolset.mybatis.dal.BaseDAO;
+import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
+
+@Service
+public class VideoLessonGroupLogServiceImpl extends BaseServiceImpl<Long, VideoLessonGroupLog>  implements VideoLessonGroupLogService {
+	
+	@Autowired
+	private VideoLessonGroupLogDao videoLessonGroupLogDao;
+
+	@Override
+	public BaseDAO<Long, VideoLessonGroupLog> getDAO() {
+		return videoLessonGroupLogDao;
+	}
+
+	@Override
+	public Long queryMaxVersion(Long videoLessonGroupId) {
+		return videoLessonGroupLogDao.queryMaxVersion(videoLessonGroupId);
+	}
+
+	@Override
+	public VideoLessonGroupLog queryByVideoLessonGroupId(Long videoLessonGroupId, Long version) {
+		return videoLessonGroupLogDao.queryByVideoLessonGroupId(videoLessonGroupId, version);
+	}
+
+	@Override
+	public VideoLessonGroupLog queryLastestShelvesInfo(Long videoLessonGroupId) {
+		return videoLessonGroupLogDao.queryLastestShelvesInfo(videoLessonGroupId);
+	}
+	
+}

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

@@ -1,5 +1,20 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,35 +25,43 @@ import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonAuthRecordDao;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDao;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDetailDao;
-import com.yonge.cooleshow.biz.dal.dto.LiveSaleOutDto;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
-import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonAuthRecord;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupLog;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupLogService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
-import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.vo.CountVideoGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.LessonGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonAuthGroup;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonExamineVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupUpVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonPurchaseVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonShelvesVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonTeacherVo;
+import com.yonge.cooleshow.biz.dal.vo.VideoLessonVo;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.string.MessageFormatter;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
-import io.netty.util.internal.StringUtil;
-import org.apache.commons.collections.CollectionUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import java.util.stream.Collectors;
+import com.yonge.toolset.utils.json.JsonUtil;
 
 /**
  * VideoLessonGroupService服务实现类
@@ -70,6 +93,9 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
 
     @Autowired
     private SysConfigService sysConfigService;
+    
+    @Autowired
+    private VideoLessonGroupLogService videoLessonGroupLogService;
 
     public VideoLessonGroupDao getDao() {
         return videoLessonGroupDao;
@@ -82,14 +108,21 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      */
     @Override
     public IPage<VideoLessonGroupVo> selectPage(IPage<VideoLessonGroupVo> page, VideoLessonGroupSearch query) {
-        if(!StringUtil.isNullOrEmpty(query.getAuditStatus())){
-            if(query.getAuditStatus().equals("OUT_SALE")){
-                query.setAuditStatus(null);
-                query.setShelvesFlag(0);
-            }else{
-                query.setShelvesFlag(1);
-            }
-        }
+		if (org.apache.commons.lang3.StringUtils.isNotBlank(query.getAuditStatus())) {
+
+			if (query.getAuditStatus().equals(AuthStatusEnum.DOING.getCode())) {
+				query.setShelvesFlag(null);
+			} else if (query.getAuditStatus().equals(AuthStatusEnum.UNPASS.getCode())) {
+				query.setShelvesFlag(null);
+			} else {
+				if (query.getAuditStatus().equals(AuthStatusEnum.OUT_SALE.getCode())) {
+					query.setAuditStatus(AuthStatusEnum.PASS.getCode());
+					query.setShelvesFlag(0);
+				} else if (query.getAuditStatus().equals(AuthStatusEnum.PASS.getCode())) {
+					query.setShelvesFlag(1);
+				}
+			}
+		}
         return page.setRecords(baseMapper.selectPage(page, query));
     }
 
@@ -128,9 +161,13 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void updateGroup(VideoLessonExamineVo examineVo) {
+    	
+    	if (examineVo.getAuditStatus().equals("PASS")) {
+    		examineVo.setShelvesFlag(1);
+    	}
         //改主表
         videoLessonGroupDao.updateExamine(examineVo);
-
+        
         VideoLessonGroup lessonGroup = baseMapper.selectById(examineVo.getId());
         //插从表
         VideoLessonAuthRecord record = new VideoLessonAuthRecord();
@@ -139,6 +176,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         record.setAuditId(examineVo.getAuditId());
         record.setAuditName(examineVo.getAuditName());
         record.setRemarks(examineVo.getRemarks());
+        record.setVersion(videoLessonGroupLogService.queryMaxVersion(examineVo.getId()));
         recordDao.insert(record);
 
         //清状态
@@ -181,7 +219,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     public void updateShelves(VideoLessonShelvesVo shelvesVo) {
         //改主表
         videoLessonGroupDao.updateShelves(shelvesVo);
-        if(shelvesVo.getShelvesFlag() == 0){
+        if(shelvesVo.getShelvesFlag() == 0 && ClientEnum.SYSTEM.equals(shelvesVo.getClientType())){
             //发推送
             sendOutSaleMessage(shelvesVo);
         }
@@ -224,6 +262,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     public void add(VideoLessonVo lessonVo, SysUser sysUser) {
         VideoLessonGroup lessonGroup = lessonVo.getLessonGroup();
         List<VideoLessonGroupDetail> lessonList = lessonVo.getLessonList();
+        lessonGroup.setLessonCount(lessonList.size());
 
         //校验声部
         Long subjectId = Long.valueOf(lessonGroup.getLessonSubject());
@@ -232,6 +271,8 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         if (!longList.contains(subjectId)) {
             throw new BizException("该声部无法选择");
         }
+        
+        Date date = new Date();
 
         //添加组
         lessonGroup.setTeacherId(sysUser.getId());
@@ -252,10 +293,29 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         videoLessonGroupDao.updateGroup(groupUpVo);
 
         //记录video_lesson_auth_record
-        VideoLessonAuthRecord record = new VideoLessonAuthRecord();
+        /*VideoLessonAuthRecord record = new VideoLessonAuthRecord();
         record.setVideoGroupId(lessonGroup.getId());
+        record.setGroupId(lessonGroup.getId());
         record.setAuditStatus(AuthStatusEnum.DOING.getCode());
-        recordDao.insert(record);
+        record.setAuthType(AuthTypeEnum.ADD);
+        recordDao.insert(record);*/
+        
+        VideoLessonGroupLog  videoLessonGroupLog = new VideoLessonGroupLog();
+        
+        try {
+        	org.springframework.beans.BeanUtils.copyProperties(lessonGroup, videoLessonGroupLog);
+		} catch (Exception e) {
+			throw new BizException("属性复制失败");
+		}
+        videoLessonGroupLog.setId(null);
+        videoLessonGroupLog.setVideoLessonGroupId(lessonGroup.getId());
+        videoLessonGroupLog.setCreateTime(date);
+        videoLessonGroupLog.setUpdateTime(date);
+        videoLessonGroupLog.setModifierId(sysUser.getId());
+        videoLessonGroupLog.setVideoDetailJson(JsonUtil.toJSONString(lessonList));
+        videoLessonGroupLog.setVersion(videoLessonGroupLogService.queryMaxVersion(lessonGroup.getId()) + 1);
+        
+        videoLessonGroupLogService.insert(videoLessonGroupLog);
     }
 
     /**
@@ -300,6 +360,12 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         VideoLessonGroupVo videoLessonGroupVo = detail(groupId);
         if (videoLessonGroupVo == null) return lessonStudentVo;
 
+        Teacher teacher = teacherService.getById(videoLessonGroupVo.getTeacherId());
+        if (teacher != null) {
+            lessonStudentVo.setTeacherFlag(teacher.getTeacherFlag());
+            lessonStudentVo.setDegreeFlag(teacher.getDegreeFlag());
+        }
+
         lessonStudentVo.setLessonGroup(videoLessonGroupVo);
         VideoLessonSearch search = new VideoLessonSearch();
         search.setVideoLessonGroupId(groupId);
@@ -323,43 +389,78 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      * @Date: 2022/4/7
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void update(VideoLessonVo lessonVo, SysUser sysUser) {
         VideoLessonGroup lessonGroup = lessonVo.getLessonGroup();
         List<VideoLessonGroupDetail> lessonList = lessonVo.getLessonList();
-
-        //查询原评审信息
-        List<VideoLessonAuthRecord> recordList = recordDao.selectList(Wrappers.<VideoLessonAuthRecord>lambdaQuery().eq(VideoLessonAuthRecord::getVideoGroupId, lessonGroup.getId()));
-        List<Long> recoreIds = recordList.stream().map(VideoLessonAuthRecord::getId).collect(Collectors.toList());
-
-        //清除原有组&课
-        videoLessonGroupDao.deleteById(lessonGroup.getId());
-        videoLessonGroupDetailDao.deleteByGroupId(lessonGroup.getId());
-
-        //添加组
+        lessonGroup.setLessonCount(lessonList.size());
         lessonGroup.setTeacherId(sysUser.getId());
-        videoLessonGroupDao.insert(lessonGroup);
-
-        for (VideoLessonGroupDetail detail : lessonList) {
-            detail.setVideoLessonGroupId(lessonGroup.getId());
-            detail.setTeacherId(sysUser.getId());
+        //判断是否有正在审核中
+        QueryWrapper<VideoLessonAuthRecord> wrapper = new QueryWrapper<VideoLessonAuthRecord>();
+        wrapper.eq("video_group_id_", lessonGroup.getId()).eq("audit_status_", AuthStatusEnum.DOING.getCode());
+        
+        List<VideoLessonAuthRecord> videoLessonAuthRecords = recordDao.selectList(wrapper);
+        if(CollectionUtils.isNotEmpty(videoLessonAuthRecords)){
+        	throw new BizException("正在审核中,无法修改");
         }
 
-        //添加课程
-        videoLessonGroupDetailDao.insertVideoLesson(lessonList);
+        //校验声部
+        Long subjectId = Long.valueOf(lessonGroup.getLessonSubject());
+        List<Subject> subjectList = teacherDao.querySubject(sysUser.getId());
+        List<Long> longList = subjectList.stream().map(Subject::getId).collect(Collectors.toList());
+        if (!longList.contains(subjectId)) {
+            throw new BizException("该声部无法选择");
+        }
+        
+        Date date = new Date();
+
+        /*//创建新的评审记录
+        VideoLessonAuthRecord authRecord = new VideoLessonAuthRecord();
+        authRecord.setGroupId(lessonGroup.getId());
+        authRecord.setAuditStatus(AuthStatusEnum.DOING.getCode());
+        authRecord.setAuthType(AuthTypeEnum.MODIFY);
+        authRecord.setVideoGroupId(lessonGroup.getId());
+        //提交审核
+        recordDao.insert(authRecord);*/
+        
+        videoLessonGroupDetailDao.deleteByGroupId(lessonGroup.getId());
+		if (lessonList != null && lessonList.size() > 0) {
+			for (VideoLessonGroupDetail detail : lessonList) {
+				detail.setVideoLessonGroupId(lessonGroup.getId());
+				detail.setTeacherId(sysUser.getId());
+				detail.setUpdateBy(sysUser.getId());
+			}
+			// 添加课程
+			videoLessonGroupDetailDao.insertVideoLesson(lessonList);
+		}
+        
+        VideoLessonGroupLog  videoLessonGroupLog = new VideoLessonGroupLog();
+        
+        try {
+        	org.springframework.beans.BeanUtils.copyProperties(lessonGroup, videoLessonGroupLog);
+		} catch (Exception e) {
+			throw new BizException("属性复制失败");
+		}
+        videoLessonGroupLog.setId(null);
+        videoLessonGroupLog.setVideoLessonGroupId(lessonGroup.getId());
+        videoLessonGroupLog.setCreateTime(date);
+        videoLessonGroupLog.setUpdateTime(date);
+        videoLessonGroupLog.setModifierId(sysUser.getId());
+        videoLessonGroupLog.setVideoDetailJson(JsonUtil.toJSONString(lessonList));
+        videoLessonGroupLog.setVersion(videoLessonGroupLogService.queryMaxVersion(lessonGroup.getId()) + 1);
+        
+        videoLessonGroupLogService.insert(videoLessonGroupLog);
+
+        //修改课程组记录
+        lessonGroup.setAuditVersion(YesOrNoEnum.NO);
+        lessonGroup.setAuditStatus(AuthStatusEnum.DOING);
+        lessonGroup.setUpdateTime(date);
+        videoLessonGroupDao.updateById(lessonGroup);
 
         //刷新统计
         VideoLessonGroupUpVo groupUpVo = new VideoLessonGroupUpVo();
         groupUpVo.setId(lessonGroup.getId());
         videoLessonGroupDao.updateGroup(groupUpVo);
-
-        //更新历史记录的组id
-        recordDao.updateIds(recoreIds, lessonGroup.getId());
-
-        //重新提审
-        VideoLessonAuthRecord record = new VideoLessonAuthRecord();
-        record.setVideoGroupId(lessonGroup.getId());
-        record.setAuditStatus(AuthStatusEnum.DOING.getCode());
-        recordDao.insert(record);
     }
 
     /**
@@ -370,15 +471,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     @Override
     public IPage<LessonGroupVo> selectLessonGroup(IPage<LessonGroupVo> page, VideoLessonGroupSearch query) {
         query.setAuditStatus(AuthStatusEnum.PASS.getCode());
-
-        if(!StringUtil.isNullOrEmpty(query.getAuditStatus())){
-            if(query.getAuditStatus().equals("OUT_SALE")){
-                query.setAuditStatus(null);
-                query.setShelvesFlag(0);
-            }else{
-                query.setShelvesFlag(1);
-            }
-        }
+        query.setShelvesFlag(1);
         return page.setRecords(baseMapper.selectLessonGroup(page, query));
     }
 
@@ -389,9 +482,52 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      */
     @Override
     public IPage<VideoLessonAuthGroup> queryGroupList(IPage<VideoLessonAuthGroup> page, VideoGroupSearch query) {
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(query.getAuditStatus())){
+        	
+        	if(query.getAuditStatus().equals(AuthStatusEnum.DOING.getCode())){
+            	query.setShelvesFlag(null);
+        	}else if(query.getAuditStatus().equals(AuthStatusEnum.UNPASS.getCode())){
+            	query.setShelvesFlag(null);
+        	}else{
+        		if(query.getAuditStatus().equals(AuthStatusEnum.OUT_SALE.getCode())){
+                    query.setAuditStatus(AuthStatusEnum.PASS.getCode());
+                    query.setShelvesFlag(0);
+                }else if(query.getAuditStatus().equals(AuthStatusEnum.PASS.getCode())){
+                    query.setShelvesFlag(1);
+                }
+        	}
+        	
+        }
         return page.setRecords(baseMapper.queryGroupList(page, query));
     }
 
+    @Override
+    public IPage<VideoLessonAuthGroup> queryGroupHistoryList(IPage<VideoLessonAuthGroup> page, VideoGroupSearch query) {
+    	List<VideoLessonAuthGroup> list = baseMapper.queryGroupHistoryList(page, query);
+    	for(VideoLessonAuthGroup g : list){
+    		g.setVideoList(JsonUtil.parseArray(g.getVideoDetailJson(), VideoLessonGroupDetail.class));
+    	}
+        return page.setRecords(list);
+    }
+
+    @Override
+    public VideoLessonAuthGroup authGroupDetil(Long videoGroupId) {
+        VideoLessonAuthGroup videoLessonAuthGroup = baseMapper.authGroupDetil(videoGroupId);
+        
+        List<VideoLessonGroupDetail> details = videoLessonGroupDetailDao.queryByVideoLessonGroupId(videoGroupId);
+        videoLessonAuthGroup.setVideoList(details);
+
+        //查询上一次的提交
+        VideoLessonGroupLog lastDetil = videoLessonGroupLogService.queryByVideoLessonGroupId(videoGroupId, videoLessonAuthGroup.getVersion());
+        videoLessonAuthGroup.setLastVideoLessonGroupLog(lastDetil);
+        
+        if(lastDetil != null){
+        	lastDetil.setVideoList(JsonUtil.parseArray(lastDetil.getVideoDetailJson(), VideoLessonGroupDetail.class));
+        }
+        
+        return videoLessonAuthGroup;
+    }
+
     /**
      * @Description: 学生端-我的-我的课程-购买的视频课组
      * @Author: cy
@@ -399,7 +535,8 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      */
     @Override
     public IPage<LessonGroupVo> selectLessonGroupById(IPage<LessonGroupVo> page, VideoLessonGroupSearch query) {
-        return page.setRecords(baseMapper.selectLessonGroup(page, query));
+
+        return page.setRecords(baseMapper.queryMyLessonGroup(page, query));
     }
 
     /**

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

@@ -236,10 +236,18 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         }
 
         //学生端-购买视频课
+        String payType = "";
+        if (lesson.getLessonPrice().compareTo(BigDecimal.ZERO) >0) {
+            payType = "购买";
+        } else {
+            payType = "领取";
+        }
         try {
+
+
             String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIDEO_BUY.getCode(), lesson.getId());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIDEO_BUY,
-                    studentReceivers, null, 0, url, ClientEnum.STUDENT.getCode(),
+                    studentReceivers, null, 0, url, ClientEnum.STUDENT.getCode(),payType,
                     teacher.getUsername(), lesson.getLessonName());
             log.info("send success {}", MessageTypeEnum.VIDEO_BUY);
         } catch (Exception e) {
@@ -250,7 +258,7 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         //学生端-购买视频课(短信)
         try {
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIDEO_BUY,
-                    studentSMS, null, 0, null, null,
+                    studentSMS, null, 0, null, null,payType,
                     teacher.getUsername(), lesson.getLessonName());
             log.info("sms send success {}", MessageTypeEnum.SMS_VIDEO_BUY);
         } catch (Exception e) {

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.MemberPriceSettingsDao;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -11,6 +12,8 @@ import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -100,18 +103,19 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         }
 
         return getVipCardRecord(orderDetailVo.getUserId(),orderDetailVo.getOrderClient(),orderDetailVo.getOrderNo(),
-                                orderDetailVo.getSubOrderNo(),periodType,detail.getId(),timeNum,SourceTypeEnum.ORDER);
+                                orderDetailVo.getSubOrderNo(),periodType,detail.getId(),timeNum,SourceTypeEnum.ORDER,orderDetailVo.getUserId(),"会员购买");
     }
 
     @Override
-    public  VipCardRecord buildVipCardRecordByOrderDetail(Long userId,ClientEnum client, ActivityReward activityReward,Long activityId) {
+    public  VipCardRecord buildVipCardRecordByOrderDetail(Long userId,ClientEnum client, ActivityReward activityReward,Long activityId,String activityName) {
 
         return getVipCardRecord(userId,client,activityId.toString(),null,activityReward.getUnit().toString(),
-                                null,activityReward.getNum(),SourceTypeEnum.ACTIVITY);
+                                null,activityReward.getNum(),SourceTypeEnum.ACTIVITY,userId,activityName);
     }
 
-    private VipCardRecord getVipCardRecord(Long userId,ClientEnum client,String orderNo,String subOrderNo,
-                               String periodType,Long memberPriceSettingsId,Integer timeNum,SourceTypeEnum sourceType) {
+    @Override
+    public VipCardRecord getVipCardRecord(Long userId, ClientEnum client, String orderNo, String subOrderNo, String periodType,
+                                          Long memberPriceSettingsId, Integer timeNum, SourceTypeEnum sourceType, Long createBy, String reason) {
         //修改用户会员时长
         Date membershipEndTime = null;
         if (client.equals(ClientEnum.STUDENT)) {
@@ -138,6 +142,10 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         vipCardRecord.setMsgStatus(0);
         vipCardRecord.setSourceType(sourceType);
         vipCardRecord.setClientType(client);
+        vipCardRecord.setTimes(timeNum);
+        vipCardRecord.setType(PeriodEnum.valueOf(periodType));
+        vipCardRecord.setCreateBy(createBy);
+        vipCardRecord.setReason(reason);
 
         if (null == membershipEndTime || membershipEndTime.before(new Date())) {
             //没有会员、会员已过期 会员卡生效时间为当前时间
@@ -206,6 +214,13 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     }
 
+    @Override
+    public PageInfo<VipRecordVo> vipRecord(VipRecordSearch recordSearch) {
+        return PageUtil.pageInfo(baseMapper.selectVipRecord(PageUtil.getPage(recordSearch),recordSearch));
+
+
+    }
+
     // 发送会员到期3天消息推送
     private void temporary3DaysSend(Long userId, String phone) {
         Map<Long, String> receivers = new HashMap<>();

+ 30 - 15
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/EmployeeVo.java

@@ -1,15 +1,18 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.Employee;
-import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
-import com.yonge.cooleshow.common.enums.UserLockFlag;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import org.springframework.beans.BeanUtils;
 
 import java.util.List;
 
+import org.springframework.beans.BeanUtils;
+
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.Employee;
+import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.common.enums.UserStatusEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+
 /**
  * @Author: liweifan
  * @Data: 2022-04-06 16:04:57
@@ -25,13 +28,17 @@ public class EmployeeVo extends Employee {
     private String phone;
     @ApiModelProperty(value = "头像")
     private String avatar;
-    @ApiModelProperty(value = "0-正常,9-锁定")
-    private UserLockFlag lockFlag;
     @ApiModelProperty(value = "角色id列表")
     private List<Long> roleIds;
     @ApiModelProperty(value = "用户对象")
     private SysUser sysUser;
 
+    @ApiModelProperty(value = "是否注销 0否 1是")
+    private YesOrNoEnum delFlag;
+
+    @ApiModelProperty(value = "用户状态 NORMAL-正常   LOCKED-冻结  CLOSED-关闭")
+    private UserStatusEnum userStatus;
+
     public String getUsername() {
         return username;
     }
@@ -61,14 +68,6 @@ public class EmployeeVo extends Employee {
         this.phone = phone;
     }
 
-    public UserLockFlag getLockFlag() {
-        return lockFlag;
-    }
-
-    public void setLockFlag(UserLockFlag lockFlag) {
-        this.lockFlag = lockFlag;
-    }
-
     public List<Long> getRoleIds() {
         return roleIds;
     }
@@ -100,4 +99,20 @@ public class EmployeeVo extends Employee {
         BeanUtils.copyProperties(employee, this);
         return this;
     }
+
+	public YesOrNoEnum getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(YesOrNoEnum delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public UserStatusEnum getUserStatus() {
+		return userStatus;
+	}
+
+	public void setUserStatus(UserStatusEnum userStatus) {
+		this.userStatus = userStatus;
+	}
 }

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseInfoVo.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
@@ -29,6 +30,29 @@ public class LiveCourseInfoVo extends CourseGroupVo implements Serializable {
     @ApiModelProperty(value = "是否审核时可见 (0:否  1:是)")
     private YesOrNoEnum auditVersion = YesOrNoEnum.NO;
 
+    @ApiModelProperty("学位认证 0:未认证 1:已认证 ")
+    private YesOrNoEnum degreeFlag;
+
+
+    @ApiModelProperty("教师资格认证 0:未认证 1:已认证 ")
+    private YesOrNoEnum teacherFlag;
+
+    public YesOrNoEnum getDegreeFlag() {
+        return degreeFlag;
+    }
+
+    public void setDegreeFlag(YesOrNoEnum degreeFlag) {
+        this.degreeFlag = degreeFlag;
+    }
+
+    public YesOrNoEnum getTeacherFlag() {
+        return teacherFlag;
+    }
+
+    public void setTeacherFlag(YesOrNoEnum teacherFlag) {
+        this.teacherFlag = teacherFlag;
+    }
+
     public YesOrNoEnum getAuditVersion() {
         return auditVersion;
     }

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

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -49,6 +50,61 @@ public class MusicSheetDetailVo extends MusicSheet {
     @ApiModelProperty("审核理由")
     private String reason;
 
+    @ApiModelProperty("上一次审核的曲目信息")
+    private MusicSheetDetailVo lastMusicSheet;
+
+    @ApiModelProperty("真实姓名")
+    private String realName;
+
+    @ApiModelProperty("审核时间")
+    private Date auditTime;
+
+    @ApiModelProperty("审核人")
+    private String  auditName;
+
+    @ApiModelProperty("审核理由")
+    private String auditReason;
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public Date getAuditTime() {
+        return auditTime;
+    }
+
+    public void setAuditTime(Date auditTime) {
+        this.auditTime = auditTime;
+    }
+
+    public String getAuditName() {
+        return auditName;
+    }
+
+    public void setAuditName(String auditName) {
+        this.auditName = auditName;
+    }
+
+    public String getAuditReason() {
+        return auditReason;
+    }
+
+    public void setAuditReason(String auditReason) {
+        this.auditReason = auditReason;
+    }
+
+    public MusicSheetDetailVo getLastMusicSheet() {
+        return lastMusicSheet;
+    }
+
+    public void setLastMusicSheet(MusicSheetDetailVo lastMusicSheet) {
+        this.lastMusicSheet = lastMusicSheet;
+    }
+
     public Integer getAiDefaultFrequency() {
         return aiDefaultFrequency;
     }

+ 19 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java

@@ -1,15 +1,18 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.yonge.cooleshow.biz.dal.entity.Student;
-import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.common.enums.UserStatusEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+
 /**
  * @Author: liweifan
  * @Data: 2022/3/24 17:22
@@ -48,6 +51,9 @@ public class StudentVo extends Student {
     @ApiModelProperty(value = "是否注销 0否 1是")
     private YesOrNoEnum delFlag;
 
+    @ApiModelProperty(value = "用户状态 NORMAL-正常   LOCKED-冻结  CLOSED-关闭")
+    private UserStatusEnum userStatus;
+
     public YesOrNoEnum getDelFlag() {
         return delFlag;
     }
@@ -165,4 +171,12 @@ public class StudentVo extends Student {
     public void setUserType(String userType) {
         this.userType = userType;
     }
+
+	public UserStatusEnum getUserStatus() {
+		return userStatus;
+	}
+
+	public void setUserStatus(UserStatusEnum userStatus) {
+		this.userStatus = userStatus;
+	}
 }

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

@@ -34,6 +34,9 @@ public class TeacherAuthEntryRecordVo extends TeacherAuthEntryRecord {
     @ApiModelProperty("用户名")
     private String username;
 
+    @ApiModelProperty("上一次的审核对象")
+    private TeacherAuthEntryRecordVo lastDetil;
+
     public String getUsername() {
         return username;
     }
@@ -70,8 +73,6 @@ public class TeacherAuthEntryRecordVo extends TeacherAuthEntryRecord {
         }
     }
 
-    
-
     public String getPhone() {
         return phone;
     }
@@ -95,4 +96,12 @@ public class TeacherAuthEntryRecordVo extends TeacherAuthEntryRecord {
     public void setVerifyUser(String verifyUser) {
         this.verifyUser = verifyUser;
     }
+
+    public TeacherAuthEntryRecordVo getLastDetil() {
+        return lastDetil;
+    }
+
+    public void setLastDetil(TeacherAuthEntryRecordVo lastDetil) {
+        this.lastDetil = lastDetil;
+    }
 }

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherMusicSheetVo.java

@@ -15,6 +15,12 @@ import java.util.Date;
  */
 public class TeacherMusicSheetVo {
 
+    @ApiModelProperty("曲目审核id")
+    private Long authMusicSheetId;
+
+    @ApiModelProperty("0:新增,1:修改")
+    private Integer firstAuth;
+
     @ApiModelProperty("老师编号ID")
     private Long teacherId;
 
@@ -63,6 +69,22 @@ public class TeacherMusicSheetVo {
     @ApiModelProperty("审批人姓名")
     private String auditName;
 
+    public Integer getFirstAuth() {
+        return firstAuth;
+    }
+
+    public void setFirstAuth(Integer firstAuth) {
+        this.firstAuth = firstAuth;
+    }
+
+    public Long getAuthMusicSheetId() {
+        return authMusicSheetId;
+    }
+
+    public void setAuthMusicSheetId(Long authMusicSheetId) {
+        this.authMusicSheetId = authMusicSheetId;
+    }
+
     public AccompanimentTypeEnum getAccompanimentType() {
         return accompanimentType;
     }

+ 15 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java

@@ -4,11 +4,13 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
-
 import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.cooleshow.common.enums.UserStatusEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
@@ -45,7 +47,7 @@ public class TeacherVo extends Teacher {
     private Date birthdate;
     @ApiModelProperty(value = "审核人")
     private String verifyUser;
-    @ApiModelProperty(value = "0-正常,9-锁定")
+    @ApiModelProperty(value = "0-正常, 1-锁定")
     private UserLockFlag lockFlag;
     @ApiModelProperty(value = "声部名称(支持多个,用逗号分隔) ")
     private String subjectName;
@@ -63,6 +65,9 @@ public class TeacherVo extends Teacher {
     
     private String tag;
 
+    @ApiModelProperty(value = "用户状态 NORMAL-正常   LOCKED-冻结  CLOSED-关闭")
+    private UserStatusEnum userStatus;
+
     public YesOrNoEnum getDelFlag() {
         return delFlag;
     }
@@ -224,4 +229,12 @@ public class TeacherVo extends Teacher {
 	public void setTag(String tag) {
 		this.tag = tag;
 	}
+
+	public UserStatusEnum getUserStatus() {
+		return userStatus;
+	}
+
+	public void setUserStatus(UserStatusEnum userStatus) {
+		this.userStatus = userStatus;
+	}
 }

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

@@ -1,9 +1,14 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupLog;
+
 /**
  * @Author: cy
  * @Date: 2022/4/20
@@ -13,6 +18,9 @@ public class VideoLessonAuthGroup extends VideoLessonGroup {
     @ApiModelProperty(value = "老师姓名")
     private String teacherName;
 
+    @ApiModelProperty(value = "当前视频组id")
+    private Long videoGroupId;
+
     private String realName;
 
     @ApiModelProperty(value = "老师手机号")
@@ -24,6 +32,16 @@ public class VideoLessonAuthGroup extends VideoLessonGroup {
     @ApiModelProperty("审核理由")
     private String remarks;
 
+    @ApiModelProperty("视频集合")
+    private List<VideoLessonGroupDetail> videoList;
+
+    @ApiModelProperty("上一次的修改记录")
+    private VideoLessonGroupLog lastVideoLessonGroupLog;
+    
+    private String videoDetailJson;
+    
+    private Long version;
+
     public String getRemarks() {
         return remarks;
     }
@@ -63,4 +81,45 @@ public class VideoLessonAuthGroup extends VideoLessonGroup {
     public void setSubjectName(String subjectName) {
         this.subjectName = subjectName;
     }
+
+    public Long getVideoGroupId() {
+        return videoGroupId;
+    }
+
+    public void setVideoGroupId(Long videoGroupId) {
+        this.videoGroupId = videoGroupId;
+    }
+
+    public List<VideoLessonGroupDetail> getVideoList() {
+        return videoList;
+    }
+
+    public void setVideoList(List<VideoLessonGroupDetail> videoList) {
+        this.videoList = videoList;
+    }
+
+	public VideoLessonGroupLog getLastVideoLessonGroupLog() {
+		return lastVideoLessonGroupLog;
+	}
+
+	public void setLastVideoLessonGroupLog(VideoLessonGroupLog lastVideoLessonGroupLog) {
+		this.lastVideoLessonGroupLog = lastVideoLessonGroupLog;
+	}
+
+	public Long getVersion() {
+		return version;
+	}
+
+	public void setVersion(Long version) {
+		this.version = version;
+	}
+
+	public String getVideoDetailJson() {
+		return videoDetailJson;
+	}
+
+	public void setVideoDetailJson(String videoDetailJson) {
+		this.videoDetailJson = videoDetailJson;
+	}
+
 }

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.common.entity.BaseEntity;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -33,6 +34,8 @@ public class VideoLessonExamineVo extends BaseEntity {
     private Long auditId;
 
     private String auditName;
+    
+    private Integer shelvesFlag;
 
     public Long getAuditId() {
         return auditId;
@@ -65,4 +68,12 @@ public class VideoLessonExamineVo extends BaseEntity {
     public void setAuditStatus(String auditStatus) {
         this.auditStatus = auditStatus;
     }
+
+	public Integer getShelvesFlag() {
+		return shelvesFlag;
+	}
+
+	public void setShelvesFlag(Integer shelvesFlag) {
+		this.shelvesFlag = shelvesFlag;
+	}
 }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.valid.ListValue;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
@@ -33,6 +34,16 @@ public class VideoLessonShelvesVo extends BaseEntity {
     @ApiModelProperty(value = "上下架操作人", hidden = true)
     private Long shelvesId;
 
+    private ClientEnum clientType;
+
+    public ClientEnum getClientType() {
+        return clientType;
+    }
+
+    public void setClientType(ClientEnum clientType) {
+        this.clientType = clientType;
+    }
+
     public Long getId() {
         return id;
     }

+ 25 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentVo.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.common.entity.BaseEntity;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -23,6 +25,29 @@ public class VideoLessonStudentVo extends BaseEntity {
     @ApiModelProperty(value = "true 自己的课,false 其他老师的课程")
     private Boolean myself;
 
+    @ApiModelProperty("学位认证 0:未认证 1:已认证 ")
+    private YesOrNoEnum degreeFlag;
+
+
+    @ApiModelProperty("教师资格认证 0:未认证 1:已认证 ")
+    private YesOrNoEnum teacherFlag;
+
+    public YesOrNoEnum getDegreeFlag() {
+        return degreeFlag;
+    }
+
+    public void setDegreeFlag(YesOrNoEnum degreeFlag) {
+        this.degreeFlag = degreeFlag;
+    }
+
+    public YesOrNoEnum getTeacherFlag() {
+        return teacherFlag;
+    }
+
+    public void setTeacherFlag(YesOrNoEnum teacherFlag) {
+        this.teacherFlag = teacherFlag;
+    }
+
     public Boolean getMyself() {
         return myself;
     }

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

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-23
+ */
+@ApiModel("会员添加记录")
+public class VipRecordVo extends VipCardRecord {
+
+    @ApiModelProperty("操作人姓名")
+    private String operatorName;
+
+    public String getOperatorName() {
+        return operatorName;
+    }
+
+    public void setOperatorName(String operatorName) {
+        this.operatorName = operatorName;
+    }
+}

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

@@ -592,7 +592,7 @@
             WHERE order_status_='PAID' GROUP BY video_lesson_group_id_) p ON g.id_=p.video_lesson_group_id_
         LEFT JOIN (
             SELECT video_group_id_,create_time_ FROM video_lesson_auth_record
-            WHERE audit_status_='PASS') r ON g.id_=r.video_group_id_
+            WHERE audit_status_='PASS' order by version_ desc limit 1) r ON g.id_=r.video_group_id_
         <where>
             <if test="param.search != null and param.search != ''">
                 AND (

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

@@ -19,6 +19,7 @@
         <result column="introduction_" property="introduction"/>
         <result column="demission_date_" property="demissionDate"/>
         <result column="contact_address_" property="contactAddress"/>
+        <result column="lock_flag_" property="lockFlag" />
     </resultMap>
 
     <resultMap type="com.yonge.cooleshow.auth.api.entity.SysUser" id="SysUser">
@@ -58,11 +59,12 @@
         , t.introduction_ as "introduction"
         , t.demission_date_ as "demissionDate"
         , t.contact_address_ as "contactAddress"
-        </sql>
+    </sql>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.EmployeeVo">
         SELECT
             <include refid="baseColumns" />,
+            if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             username_ as username,
             phone_ as phone,
             gender_ as gender
@@ -74,14 +76,13 @@
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.EmployeeVo">
         SELECT
             <include refid="baseColumns" />,
+            if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             u.username_ as username,
             u.phone_ as phone,
-            u.gender_ as gender,
-            u.lock_flag_ as lockFlag
+            u.gender_ as gender
         FROM employee t
         left join sys_user u on t.user_id_ = u.id_
         <where>
-            u.del_flag_ = 0
             <if test="null != param.search and '' != param.search">
                 AND (
                 t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
@@ -92,15 +93,18 @@
             <if test="null != param.gender">
                 and u.gender_ = #{param.gender}
             </if>
-            <if test="null != param.lockFlag">
-                and u.lock_flag_ = #{param.lockFlag}
-            </if>
             <if test="param.startTime !=null">
                 <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
             </if>
             <if test="param.endTime !=null">
                 <![CDATA[AND t.create_time_ < #{param.endTime} ]]>
             </if>
+            <if test="null != param.lockFlag">
+                and t.lock_flag_ = #{param.lockFlag}
+            </if>
+            <if test="null != param.delFlag">
+                and u.del_flag_ = #{param.delFlag}
+            </if>
         </where>
     </select>
 
@@ -222,6 +226,9 @@
             <if test="contactAddress != null">
                 contact_address_ = #{contactAddress},
             </if>
+            <if test="lockFlag != null">
+                lock_flag_ = #{lockFlag},
+            </if>
         </set>
         WHERE user_id_ = #{userId}
     </update>

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

@@ -13,7 +13,7 @@
         	(select count(1) from music_sheet a
 				left join sys_user u on a.user_id_ = u.id_
 			 	where u.del_flag_ =0 and a.del_flag_ = 0 and a.audit_status_ = 'DOING') as musicNum,
-        	(select count(1) from video_lesson_auth_record where audit_status_ = 'DOING') as videoCourseNum,
+        	(select count(1) from video_lesson_group where audit_status_ = 'DOING') as videoCourseNum,
 			(select count(1) from teacher_style_video a
 				left join sys_user u on a.user_id_ = u.id_
 			 	where u.del_flag_ =0 and a.del_flag_ = 0 and a.auth_status_ = 'DOING') as styleNum

+ 70 - 9
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -158,6 +158,9 @@
                 and (t.id_ like concat('%',#{param.idAndName},'%') or
                 t.music_sheet_name_ like concat('%',#{param.idAndName},'%'))
             </if>
+            <if test="param.chargeType != null">
+                and t.charge_type_ = #{param.chargeType}
+            </if>
             <if test="param.musicTagIds != null and param.musicTagIds != ''">
                 and
                 <foreach collection="param.musicTagIdList" separator="or" item="item"  open="(" close=")" >
@@ -213,6 +216,7 @@
             ) as musicTagNames
             ,s2.name_ as subjectNames
             ,s2.code_ as code
+        ,su.real_name_ as realName
             ,s2.ai_default_frequency_ as aiDefaultFrequency
         FROM music_sheet t
         left join music_sheet_accompaniment msa on msa.music_sheet_id_ = t.id_
@@ -236,7 +240,7 @@
         <result column="canEvaluate" jdbcType="TINYINT" property="canEvaluate"/>
         <result column="showFingering" jdbcType="TINYINT" property="showFingering"/>
         <result column="chargeType" jdbcType="TINYINT" property="chargeType"/>
-        <result column="auditStatus" jdbcType="TINYINT" property="auditStatus"/>
+        <result column="auditStatus" property="auditStatus"/>
         <result column="state" jdbcType="TINYINT" property="state"/>
         <result column="sortNumber" jdbcType="INTEGER" property="sortNumber"/>
         <result column="topFlag" jdbcType="TINYINT" property="topFlag"/>
@@ -263,7 +267,11 @@
         <result column="reason" jdbcType="VARCHAR" property="reason"/>
         <result column="accompanimentType" jdbcType="VARCHAR" property="accompanimentType"/>
         <result column="notation" jdbcType="VARCHAR" property="notation"/>
-        <result column="musicImg" jdbcType="VARCHAR" property="musicImg"/>
+	<result column="musicImg" jdbcType="VARCHAR" property="musicImg"/>
+        <result column="realName" jdbcType="VARCHAR" property="realName"/>
+        <result column="auditTime" jdbcType="VARCHAR" property="auditTime"/>
+        <result column="auditName" jdbcType="VARCHAR" property="auditName"/>
+        <result column="auditReason" jdbcType="VARCHAR" property="auditReason"/>
         <result column="aiDefaultFrequency" jdbcType="VARCHAR" property="aiDefaultFrequency"/>
         <collection property="background" ofType="com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment">
             <id column="accompanimentId" jdbcType="BIGINT" property="id"/>
@@ -290,19 +298,19 @@
         where find_in_set(s.id_,t.music_subject_)  and s.del_flag_ = 0) as subjectNames
         <if test="param.studentId != null">
             ,if(mf.id_ is not null,1,0) as favorite
-            ,case when mspr.id_ is not null then 1
-                when t.charge_type_ = 'FREE' then 1
-                else 0 end as play
+<!--            ,case when mspr.id_ is not null then 1-->
+<!--                when t.charge_type_ = 'FREE' then 1-->
+<!--                else 0 end as play-->
         </if>
         from music_sheet t
         left join sys_user su on t.create_by_ = su.id_
         left join (select count(1) as num,mf.music_sheet_id_
             from music_favorite mf group by mf.music_sheet_id_) t2 on t2.music_sheet_id_ = t.id_
         <if test="param.studentId != null">
-            left join music_sheet_purchase_record mspr
-                on mspr.music_sheet_id_ = t.id_
-                and mspr.student_id_ = #{param.studentId}
-                and order_status_ = 'PAID'
+<!--            left join music_sheet_purchase_record mspr-->
+<!--                on mspr.music_sheet_id_ = t.id_-->
+<!--                and mspr.student_id_ = #{param.studentId}-->
+<!--                and order_status_ = 'PAID'-->
             left join music_favorite mf on t.id_ = mf.music_sheet_id_ and mf.user_id_ = #{param.studentId}
         </if>
         <where>
@@ -483,6 +491,7 @@
 
     <select id="selectAuditPage" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo">
         select
+        msar.id_ as authMusicSheetId,
         ms.create_by_ as teacherId
         ,ms.title_img_ as titleImg
         ,ms.accompaniment_type_ as accompanimentType
@@ -500,6 +509,7 @@
         ,ms.update_time_ as createTime
         ,if(msar.audit_state_ is null,ms.audit_status_,msar.audit_state_) as auditStatus
         ,su2.username_ as auditName
+        ,msar.first_auth_ as firstAuth
         from music_sheet_auth_record  msar
         left join  music_sheet ms on ms.id_ = msar.music_sheet_id_
         left join sys_user su on su.id_ = ms.create_by_
@@ -510,6 +520,7 @@
             <if test="param.idAndName != null and param.idAndName != ''">
                 and (su.id_ like concat('%',#{param.idAndName} ,'%')
                 or su.username_ like concat('%',#{param.idAndName},'%')
+                or ms.music_sheet_name_ like concat('%',#{param.idAndName},'%')
                 or su.phone_ like concat('%',#{param.idAndName},'%'))
             </if>
             <if test="param.auditName != null and param.auditName != ''">
@@ -527,6 +538,9 @@
             <if test="param.chargeType != null">
                 and ms.charge_type_ = #{param.chargeType}
             </if>
+            <if test="param.firstAuth != null">
+                and msar.first_auth_ = #{param.firstAuth}
+            </if>
         </where>
         order by field(ms.audit_status_,'DOING') desc,  ms.submit_audit_time_ desc
     </select>
@@ -633,4 +647,51 @@
             </if>
         </where>
     </select>
+
+    <select id="auditDetailList" resultMap="DetailResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        ,t.url_ as url
+        ,t.midi_url_ as midiUrl
+        ,t.metronome_url_ as metronomeUrl
+        ,msa.id_ as accompanimentId
+        ,msa.music_sheet_id_ as accompanimentMusicSheetId
+        ,msa.music_subject_ as accompanimentMusicSubject
+        ,msa.audio_file_url_ as accompanimentAudioFileUrl
+        ,msa.sort_number_ as accompanimentSortNumber
+        ,msa.create_time_ as accompanimentCreateTime
+        ,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  and mt.state_ = 1
+        ) as musicTagNames
+        ,s2.name_ as subjectNames
+        ,s2.code_ as code
+        ,s2.ai_default_frequency_ as aiDefaultFrequency
+
+        ,su.real_name_ as realName
+        ,msar.update_time_ as auditTime
+        ,su2.username_ as auditName
+        ,msar.reason_ as auditReason
+        from music_sheet_auth_record  msar
+        left join  music_sheet t on t.id_ = msar.music_sheet_id_
+        left join sys_user su on su.id_ = t.create_by_
+        left join sys_user su2 on msar.verify_user_id_ = su2.id_
+        left join music_sheet_accompaniment msa on msa.music_sheet_id_ = t.id_
+        left join subject s2 on t.music_subject_ = s2.id_
+        <where>
+            <if test="originalMusicSheetId != null">
+                and #{originalMusicSheetId} = msar.original_music_sheet_id_
+            </if>
+            <if test="authMusicSheetId != null">
+                and #{authMusicSheetId} &gt; msar.id_
+            </if>
+        </where>
+
+        order by msar.id_ desc
+    </select>
 </mapper>

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

@@ -9,6 +9,7 @@
         <result column="membership_end_time_" property="membershipEndTime"/>
         <result column="cloud_study_sequence_days_" property="cloudStudySequenceDays"/>
         <result column="cloud_study_use_last_day_" property="cloudStudyUseLastDay"/>
+        <result column="lock_flag_" property="lockFlag" />
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
     </resultMap>
@@ -33,6 +34,7 @@
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.StudentVo">
         SELECT
             <include refid="baseColumns"/>,
+            if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             u.avatar_ as avatar,
             u.real_name_ as realName,
             u.id_card_no_ as idCardNo,
@@ -54,6 +56,7 @@
     <select id="detailByPhone" resultType="com.yonge.cooleshow.biz.dal.vo.StudentVo">
         SELECT
             <include refid="baseColumns"/>,
+            if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             u.avatar_ as avatar,
             u.real_name_ as realName,
             u.id_card_no_ as idCardNo,
@@ -76,6 +79,7 @@
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.StudentVo">
         SELECT
             <include refid="baseColumns"/>,
+            if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             u.username_ as username,
             u.gender_ as gender,
             u.birthdate_ as birthdate,
@@ -119,6 +123,12 @@
             <if test="param.endTime !=null">
                 <![CDATA[AND t.create_time_ < #{param.endTime} ]]>
             </if>
+            <if test="null != param.lockFlag">
+                and t.lock_flag_ = #{param.lockFlag}
+            </if>
+            <if test="null != param.delFlag">
+                and u.del_flag_ = #{param.delFlag}
+            </if>
         </where>
     </select>
 

+ 99 - 20
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthEntryRecordMapper.xml

@@ -13,6 +13,7 @@
         <result column="teacher_certificate_" property="teacherCertificate"/>
         <result column="style_video_json_" property="styleVideoJson"/>
         <result column="teacher_auth_status_" property="teacherAuthStatus"/>
+        <result column="teacher_auth_type_" property="teacherAuthType"/>
         <result column="verify_user_id_" property="verifyUserId"/>
         <result column="reason_" property="reason"/>
         <result column="create_time_" property="createTime"/>
@@ -32,12 +33,53 @@
         , t.teacher_certificate_ as "teacherCertificate"
         , t.style_video_json_ as "styleVideoJson"
         , t.teacher_auth_status_ as "teacherAuthStatus"
+        , t.teacher_auth_type_ as "teacherAuthType"
         , t.verify_user_id_ as "verifyUserId"
         , t.reason_ as "reason"
         , t.create_time_ as "createTime"
         , t.update_time_ as "updateTime"
         </sql>
 
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo">
+        select
+            <include refid="baseColumns"/>,
+            ifnull(u.real_name_,u.username_) as realName,
+            u.id_card_no_ as idCardNo,
+            u.phone_ as phone,
+            u.username_ as username,
+            u.gender_ as gender,
+            (
+                SELECT GROUP_CONCAT(name_ ORDER by locate(id_,t.subject_id_)) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
+            ) as subjectName,
+            (
+                SELECT u.username_ FROM sys_user u WHERE u.id_ = t.verify_user_id_
+            ) as verifyUser
+        from teacher_auth_entry_record t
+        left join sys_user u on t.user_id_ = u.id_
+        where u.del_flag_ = 0 and t.id_ = #{id}
+    </select>
+
+    <select id="lastDetil" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo">
+        select
+            <include refid="baseColumns"/>,
+            ifnull(u.real_name_,u.username_) as realName,
+            u.id_card_no_ as idCardNo,
+            u.phone_ as phone,
+            u.username_ as username,
+            u.gender_ as gender,
+            (
+                SELECT GROUP_CONCAT(name_ ORDER by locate(id_,t.subject_id_)) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
+            ) as subjectName,
+            (
+                SELECT u.username_ FROM sys_user u WHERE u.id_ = t.verify_user_id_
+            ) as verifyUser
+        from teacher_auth_entry_record t
+        left join sys_user u on t.user_id_ = u.id_
+        where u.del_flag_ = 0 and t.user_id_ = #{userId}
+            and t.id_ != #{id}
+        order by t.create_time_ desc limit 1
+    </select>
+
     <!-- 分页查询 -->
     <select id="selectPage" resultType = "com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo">
         SELECT
@@ -51,52 +93,89 @@
             (
                 SELECT GROUP_CONCAT(name_ ORDER by locate(id_,t.subject_id_)) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
             ) as subjectName
-        FROM teacher_auth_entry_record t
+        FROM (
+            select user_id_,max(id_) as id_ from teacher_auth_entry_record group by user_id_
+        ) a
+        left join teacher_auth_entry_record t on a.id_ = t.id_
         left join sys_user u on t.user_id_ = u.id_
         left join sys_user v on t.verify_user_id_ = v.id_
         <where>
             u.del_flag_ = 0
             <if test="null != param.search and '' != param.search">
                 AND (
-                    t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
-                    u.real_name_ LIKE CONCAT('%', #{param.search}, '%') or
-                    u.phone_ LIKE CONCAT('%', #{param.search}, '%')
+                t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.real_name_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.phone_ LIKE CONCAT('%', #{param.search}, '%')
                 )
             </if>
+            <if test="null != param.userId">
+                AND t.user_id_ = #{param.userId}
+            </if>
             <if test="null != param.verifyUser and '' != param.verifyUser">
                 AND v.username_ LIKE CONCAT('%', #{param.verifyUser}, '%')
             </if>
-            <if test="param.startTime !=null">
+            <if test="param.startTime != null">
                 <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
             </if>
-            <if test="param.endTime !=null">
+            <if test="param.endTime != null">
                 <![CDATA[AND t.create_time_ < #{param.endTime} ]]>
             </if>
-            <if test="param.authStatus !=null">
+            <if test="param.authStatus != null">
                 AND t.teacher_auth_status_ = #{param.authStatus}
             </if>
+            <if test="param.teacherAuthType != null">
+                AND t.teacher_auth_type_ = #{param.teacherAuthType}
+            </if>
         </where>
         order by field(t.teacher_auth_status_,'DOING') desc, t.create_time_ desc
     </select>
 
-    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo">
-        select
-        	<include refid="baseColumns"/>,
+    <select id="historyPage" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo">
+        SELECT
+            <include refid="baseColumns"/>,
             ifnull(u.real_name_,u.username_) as realName,
-			u.id_card_no_ as idCardNo,
-			u.phone_ as phone,
+            u.id_card_no_ as idCardNo,
+            u.phone_ as phone,
             u.username_ as username,
-			u.gender_ as gender,
-			(
-                SELECT GROUP_CONCAT(name_ ORDER by locate(id_,t.subject_id_)) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
-            ) as subjectName,
+            u.gender_ as gender,
+            v.username_ as verifyUser,
             (
-                SELECT u.username_ FROM sys_user u WHERE u.id_ = t.verify_user_id_
-            ) as verifyUser
-        from teacher_auth_entry_record t
+                SELECT GROUP_CONCAT(name_ ORDER by locate(id_,t.subject_id_)) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
+            ) as subjectName
+        FROM teacher_auth_entry_record t
         left join sys_user u on t.user_id_ = u.id_
-        where u.del_flag_ = 0 and t.id_ = #{id}
+        left join sys_user v on t.verify_user_id_ = v.id_
+        <where>
+            u.del_flag_ = 0 and t.teacher_auth_status_ != 'DOING'
+            <if test="null != param.search and '' != param.search">
+                AND (
+                t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.real_name_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.phone_ LIKE CONCAT('%', #{param.search}, '%')
+                )
+            </if>
+            <if test="null != param.userId">
+                AND t.user_id_ = #{param.userId}
+            </if>
+            <if test="null != param.verifyUser and '' != param.verifyUser">
+                AND v.username_ LIKE CONCAT('%', #{param.verifyUser}, '%')
+            </if>
+            <if test="param.startTime != null">
+                <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
+            </if>
+            <if test="param.endTime != null">
+                <![CDATA[AND t.create_time_ < #{param.endTime} ]]>
+            </if>
+            <if test="param.authStatus != null">
+                AND t.teacher_auth_status_ = #{param.authStatus}
+            </if>
+            <if test="param.teacherAuthType != null">
+                AND t.teacher_auth_type_ = #{param.teacherAuthType}
+            </if>
+        </where>
+        order by field(t.teacher_auth_status_,'DOING') desc, t.create_time_ desc
     </select>
+
     <select id="getLastRecordByUserId" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo">
         select
             <include refid="baseColumns"/>,

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

@@ -25,8 +25,13 @@
         <result column="music_date_" property="musicDate" />
         <result column="video_date_" property="videoDate" />
         <result column="style_date_" property="styleDate" />
+        <result column="degree_date_" property="degreeDate" />
+        <result column="teacher_date_" property="teacherDate" />
+        <result column="degree_flag_" property="degreeFlag" />
+        <result column="teacher_flag_" property="teacherFlag" />
         <result column="browse_" property="browse" />
         <result column="memo_" property="memo" />
+        <result column="lock_flag_" property="lockFlag" />
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
     </resultMap>
@@ -52,6 +57,10 @@
         , t.music_date_ as "musicDate"
         , t.video_date_ as "videoDate"
         , t.style_date_ as "styleDate"
+        , t.degree_date_ as "degreeDate"
+        , t.teacher_date_ as "teacherDate"
+        , t.degree_flag_ as "degreeFlag"
+        , t.teacher_flag_ as "teacherFlag"
         , t.member_rank_setting_id_ as "memberRankSettingId"
         , t.membership_start_time_ as "membershipStartTime"
         , t.membership_end_time_ as "membershipEndTime"
@@ -66,12 +75,12 @@
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherVo" >
         SELECT
             <include refid="baseColumns"/>,
+            if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             u.username_ as username,
             u.phone_ as phone,
             u.real_name_ as realName,
             (case when t.membership_end_time_ &gt;= now() then 1 else 0 end) isVip,
 <!--            t.tag_ tag,-->
-            u.lock_flag_ as lockFlag,
             u.del_flag_ as delFlag,
             (case when isnull(u.id_card_no_) then 0 else 1 end) as isReal,
             (case when isnull(b.user_id_) then 0 else 1 end) as isBank
@@ -114,6 +123,12 @@
             <if test="param.tag != null">
             	and find_in_set(#{param.tag},t.tag_)
             </if>
+            <if test="null != param.lockFlag">
+                and t.lock_flag_ = #{param.lockFlag}
+            </if>
+            <if test="null != param.delFlag">
+                and u.del_flag_ = #{param.delFlag}
+            </if>
         </where>
     </select>
 
@@ -139,16 +154,16 @@
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherVo">
         SELECT
             <include refid="baseColumns"/>,
+            if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             u.avatar_ as avatar,
             u.username_ as username,
             u.gender_ as `gender`,
             u.birthdate_ as birthdate,
             u.phone_ as phone,
             (case when isnull(u.id_card_no_) then 0 else 1 end) as isReal,
-        (!isnull(membership_end_time_) and membership_end_time_ > now()) as isVip,
+            (!isnull(membership_end_time_) and membership_end_time_ > now()) as isVip,
             u.real_name_ as realName,
             u.id_card_no_ as idCardNo,
-            u.lock_flag_ as lockFlag,
             (case when isnull(b.user_id_) then 0 else 1 end) as isBank,
             (
                 SELECT GROUP_CONCAT(name_ ORDER by locate(id_,t.subject_id_)) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff