liujunchi 3 years ago
parent
commit
6ac4fe310d
28 changed files with 626 additions and 25 deletions
  1. 11 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/SysUser.java
  2. 41 14
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  3. 5 1
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  4. 4 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  5. 9 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java
  6. 4 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherStyleVideoController.java
  7. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/HomeDao.java
  8. 15 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherApplyDetailReq.java
  9. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherStyleVideoSearch.java
  10. 14 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/StudentTime.java
  11. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Teacher.java
  12. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherAuthEntryRecord.java
  13. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherStyleVideo.java
  14. 64 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java
  15. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTimeServiceImpl.java
  16. 41 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java
  17. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  18. 55 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/SubjectHomeVo.java
  19. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TagTotalTeacher.java
  20. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/HomeTotalStudent.java
  21. 55 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/HomeTotalTeacher.java
  22. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  23. 103 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/HomeMapper.xml
  24. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthEntryRecordMapper.xml
  25. 6 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  26. 5 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherStyleVideoMapper.xml
  27. 11 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherAuthEntryRecordController.java
  28. 14 0
      toolset/utils/src/main/java/com/yonge/toolset/utils/date/DateUtil.java

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

@@ -98,6 +98,9 @@ public class SysUser implements Serializable{
 	@ApiModelProperty(value = "用户角色")
 	private List<Long> roles;
 
+	@ApiModelProperty(value = "最近一次修改用户名称时间")
+	private Date lastUsernameTime;
+
 	private String certificateType = "IDENTITY";
 
 	public String getCertificateType() {
@@ -303,6 +306,14 @@ public class SysUser implements Serializable{
 		this.roles = roles;
 	}
 
+	public Date getLastUsernameTime() {
+		return lastUsernameTime;
+	}
+
+	public void setLastUsernameTime(Date lastUsernameTime) {
+		this.lastUsernameTime = lastUsernameTime;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 41 - 14
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -1,17 +1,22 @@
 package com.yonge.cooleshow.auth.web.controller;
 
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 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;
@@ -66,12 +71,12 @@ public class UserController extends BaseController {
     @Autowired
     private IdGeneratorService smsCodeService;
 
-	@Autowired
-	private CustomTokenServices tokenService;
-	
+    @Autowired
+    private CustomTokenServices tokenService;
+
     @Value("${message.debugMode}")
     private boolean debugMode;
-    
+
     @Autowired
     private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
     @Autowired
@@ -181,7 +186,7 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        if(!StringUtil.isEmpty(username)){
+        if (!StringUtil.isEmpty(username)) {
             if (sysUser.getUserType().contains("SYSTEM")) {
                 sysUser.setRealName(username);
             }
@@ -213,7 +218,7 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        if (smsCodeService.verifyValidCode(mobile, authCode,"SMS_VERIFY_CODE_UPDATE_PSW")) {
+        if (smsCodeService.verifyValidCode(mobile, authCode, "SMS_VERIFY_CODE_UPDATE_PSW")) {
             String password = new BCryptPasswordEncoder().encode(newPassword);
             sysUser.setPassword(password);
             sysUser.setUpdateTime(new Date());
@@ -227,13 +232,13 @@ public class UserController extends BaseController {
     }
 
     private void loginOut(SysUser sysUser) {
-        if(sysUser.getUserType().contains("STUDENT")){
+        if (sysUser.getUserType().contains("STUDENT")) {
             tokenService.revokeToken("student", sysUser.getPhone());
         }
-        if(sysUser.getUserType().contains("TEACHER")){
+        if (sysUser.getUserType().contains("TEACHER")) {
             tokenService.revokeToken("teacher", sysUser.getPhone());
         }
-        if(sysUser.getUserType().contains("SYSTEM")){
+        if (sysUser.getUserType().contains("SYSTEM")) {
             tokenService.revokeToken("system", sysUser.getPhone());
         }
     }
@@ -275,7 +280,7 @@ public class UserController extends BaseController {
         if (newSysUser != null) {
             return failed("手机号被占用");
         }
-        if (smsCodeService.verifyValidCode(newPhone, authCode,"SMS_VERIFY_CODE_UPDATE_PHONE")) {
+        if (smsCodeService.verifyValidCode(newPhone, authCode, "SMS_VERIFY_CODE_UPDATE_PHONE")) {
             sysUser.setPhone(newPhone);
             sysUser.setUpdateTime(new Date());
             sysUserService.update(sysUser);
@@ -329,8 +334,8 @@ public class UserController extends BaseController {
             return failed("非法操作");
         }
         sysUser.setLockFlag(lockFlag);
-        
-        if(lockFlag == 1){
+
+        if (lockFlag == 1) {
             loginOut(sysUser);
         }
         sysUser.setUpdateTime(new Date());
@@ -465,7 +470,7 @@ public class UserController extends BaseController {
         if (user != null) {
             SysUser sysUser = sysUserService.get(user.getUserId());
             if (sysUser.getIsSuperAdmin()) {
-            	RoleQueryInfo queryInfo = new RoleQueryInfo();
+                RoleQueryInfo queryInfo = new RoleQueryInfo();
                 queryInfo.setRows(9999);
                 queryInfo.setIsEnable(true);
                 return succeed(sysRoleService.queryPage(queryInfo).getRows());
@@ -527,7 +532,7 @@ public class UserController extends BaseController {
             if (!verify) {
                 return failed("未通过实名认证");
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return failed("未通过实名认证");
         }
@@ -568,11 +573,33 @@ public class UserController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed("用户不存在");
         }
+
+        //判断用户昵称修改时间
+        if (StringUtils.isNotEmpty(setReq.getUsername())) {
+            checkLastUsernameTime(user, setReq.getUsername());
+        }
+
         //设置
         sysUserService.submitSetDetail(setReq, user.getId());
         return succeed(sysUserService.getSetDetail(user.getId()));
     }
 
+    private void checkLastUsernameTime(SysUser user, String username) {
+        if (StringUtils.isNotEmpty(username)) {
+            String configValue = sysConfigService.findConfigValue(SysConfigConstant.LAST_USERNAME_MONTH);
+
+            if (null != user.getLastUsernameTime()
+                    && StringUtils.isNotEmpty(configValue)) {
+                Long lastUsernameMonth = Long.parseLong(configValue);
+                Long monthDiff = DateUtil.getMonthDiff(new Date(), user.getLastUsernameTime());
+
+                if (monthDiff < lastUsernameMonth && lastUsernameMonth > 0) {
+                    throw new BizException("每隔" + lastUsernameMonth + "个月可修改一次");
+                }
+            }
+        }
+    }
+
     @PostMapping(value = "/bindOpenId")
     public HttpResponseResult<Boolean> bindOpenId(@RequestBody SysUser param) {
         AuthUser authUser = SecurityUtils.getUser();

+ 5 - 1
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -30,6 +30,7 @@
         <result column="wechat_id_" property="wechatId"/>
         <result column="is_super_admin_" property="isSuperAdmin"/>
         <result column="certificate_type_" property="certificateType"/>
+        <result column="last_username_time_" property="lastUsernameTime"/>
     </resultMap>
 
     <!-- 查询条件 -->
@@ -150,6 +151,9 @@
             <if test="certificateType != null">
                 certificate_type_ = #{certificateType},
             </if>
+            <if test="lastUsernameTime != null">
+                last_username_time_ = #{lastUsernameTime},
+            </if>
         </set>
         WHERE del_flag_ = 0 and id_ = #{id}
     </update>
@@ -251,7 +255,7 @@
             avatar_ = #{param.avatar},
         </if>
         <if test="param.username != null and param.username != ''">
-            username_ = #{param.username},
+            username_ = #{param.username},last_username_time_ = now(),
         </if>
         <if test="param.gender != null">
             gender_ = #{param.gender},

+ 4 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -241,7 +241,10 @@ public interface SysConfigConstant {
      * 敏感词-白名单
      */
     String WHITE_LIST = "white_list";
-
+    /**
+     * 修改用户名间隔天数
+     */
+    String LAST_USERNAME_MONTH = "last_username_month";
 
     /** 老师分享曲目二维码跳转链接 */
     String TEACHER_MUSIC_SHEET_SHARE_PROFIT_URL = "teacher_music_sheet_share_profit_url";

+ 9 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.biz.dal.service.HomeService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.HomeMusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.SubjectHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
@@ -68,4 +69,12 @@ public class HomeController extends BaseController {
         return succeed(homeService.queryCourseHomeData(param));
     }
 
+
+
+    @ApiOperation(value = "获取首页- 内容数据-声部数据")
+    @PostMapping("/subjectHome")
+    // @PreAuthorize("@pcs.hasPermissions('home/courseHome')")
+    public HttpResponseResult<SubjectHomeVo> subjectHome() {
+        return succeed();
+    }
 }

+ 4 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherStyleVideoController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.mybatis.support.PageUtil;
 
 import com.yonge.toolset.base.page.PageInfo;
@@ -45,6 +46,9 @@ public class TeacherStyleVideoController extends BaseController {
     @PostMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入teacherStyleVideoSearch")
     public HttpResponseResult<PageInfo<TeacherStyleVideoVo>> page(@RequestBody TeacherStyleVideoSearch query) {
+        //后端审核只查询非入驻审核视频
+        query.setEntryFlag(YesOrNoEnum.NO);
+
         IPage<TeacherStyleVideoVo> pages = teacherStyleVideoService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
     }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/HomeDao.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
+import com.yonge.cooleshow.biz.dal.vo.TagTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
@@ -31,6 +32,7 @@ public interface HomeDao {
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher>
      */
     List<HomeTotalTeacher> totalTeacher(@Param("timeType") String timeType, @Param("param") TotalReq param);
+
     /***
      * 统计查询学生信息
      * @author liweifan
@@ -40,4 +42,13 @@ public interface HomeDao {
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent>
      */
     List<HomeTotalStudent> totalStudent(@Param("timeType") String timeType, @Param("param") TotalReq param);
+
+    /**
+     * 点亮图标统计
+     *
+     * @param timeType
+     * @param query
+     * @return
+     */
+    List<TagTotalTeacher> tagTeacher(@Param("timeType") String timeType, @Param("param") TotalReq query);
 }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
 import io.swagger.annotations.ApiModel;
@@ -56,6 +57,10 @@ public class TeacherApplyDetailReq implements Serializable {
     @ApiModelProperty("教师资格证 ")
     private String teacherCertificate;
 
+    @ApiModelProperty("老师风采视频json 格式:[{'videoUrl':'视频地址','cover':'视频地址'},{'videoUrl':'视频地址','cover':'视频地址'}] ,将单引号替换为双引号")
+    @NotBlank(message = "至少要有一个老师风采视频")
+    private String styleVideoJson;
+
     public Long getUserId() {
         return userId;
     }
@@ -73,7 +78,8 @@ public class TeacherApplyDetailReq implements Serializable {
             this.gender = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
         }
     }
-/*
+
+    /*
     public void setGender(Object gender) {
         if(gender instanceof GenderEnum ){
             this.gender = (GenderEnum) gender;
@@ -82,7 +88,6 @@ public class TeacherApplyDetailReq implements Serializable {
         }
     }*/
 
-
     public Date getBirthdate() {
         return birthdate;
     }
@@ -162,4 +167,12 @@ public class TeacherApplyDetailReq implements Serializable {
     public void setIdCardNo(String idCardNo) {
         this.idCardNo = idCardNo;
     }
+
+    public String getStyleVideoJson() {
+        return styleVideoJson;
+    }
+
+    public void setStyleVideoJson(String styleVideoJson) {
+        this.styleVideoJson = styleVideoJson;
+    }
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherStyleVideoSearch.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.AuthStatusEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -31,6 +32,8 @@ public class TeacherStyleVideoSearch extends QueryInfo{
     private Date endTime;
     @ApiModelProperty(value = "审核状态  UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过")
     private AuthStatusEnum authStatus;
+    @ApiModelProperty(value = "入驻视频 0 否 1是 ",hidden = true)
+    private YesOrNoEnum entryFlag;
 
     public String getSearch() {
         return search;
@@ -71,4 +74,12 @@ public class TeacherStyleVideoSearch extends QueryInfo{
     public void setAuthStatus(AuthStatusEnum authStatus) {
         this.authStatus = authStatus;
     }
+
+    public YesOrNoEnum getEntryFlag() {
+        return entryFlag;
+    }
+
+    public void setEntryFlag(YesOrNoEnum entryFlag) {
+        this.entryFlag = entryFlag;
+    }
 }

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

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -52,6 +51,20 @@ public class StudentTime implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date firstMallTime;
 
+    @ApiModelProperty("第一次购买时间 ")
+    @TableField(value = "first_activity_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date firstPayTime;
+
+    public Date getFirstPayTime() {
+        return firstPayTime;
+    }
+
+    public void setFirstPayTime(Date firstPayTime) {
+        this.firstPayTime = firstPayTime;
+    }
+
     public Long getUserId() {
         return userId;
     }

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Teacher.java

@@ -131,6 +131,24 @@ public class Teacher implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date liveDate;
 
+    @ApiModelProperty("曲目点亮时间 ")
+    @TableField(value = "music_date_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date musicDate;
+
+    @ApiModelProperty("视频课图标点亮时间 ")
+    @TableField(value = "video_date_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date videoDate;
+
+    @ApiModelProperty("个人风采图标点亮时间 ")
+    @TableField(value = "style_date_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date styleDate;
+
     /**
      * 会员等级
      */
@@ -169,6 +187,31 @@ public class Teacher implements Serializable {
     @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;
     }

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherAuthEntryRecord.java

@@ -78,6 +78,12 @@ public class TeacherAuthEntryRecord implements Serializable {
 	@TableField(value = "teacher_certificate_")
     private String teacherCertificate;
 
+    @ApiModelProperty("老师风采视频json 格式:[{'videoUrl':'视频地址','cover':'视频地址'},{'videoUrl':'视频地址','cover':'视频地址'}] ,将单引号替换为双引号")
+    @TableField(value = "style_video_json_")
+    private String styleVideoJson;
+    /**
+     * 达人认证审核状态 UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过
+     */
     @ApiModelProperty("达人认证审核状态 UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过")
 	@TableField(value = "teacher_auth_status_")
     private AuthStatusEnum teacherAuthStatus;
@@ -176,6 +182,14 @@ public class TeacherAuthEntryRecord implements Serializable {
         this.teacherCertificate = teacherCertificate;
     }
 
+    public String getStyleVideoJson() {
+        return styleVideoJson;
+    }
+
+    public void setStyleVideoJson(String styleVideoJson) {
+        this.styleVideoJson = styleVideoJson;
+    }
+
     public AuthStatusEnum getTeacherAuthStatus() {
         return teacherAuthStatus;
     }

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

@@ -50,6 +50,9 @@ public class TeacherStyleVideo implements Serializable {
     @ApiModelProperty("审核理由 ")
     @TableField(value = "reason_")
     private String reason;
+    @ApiModelProperty("入驻审核视频 0 否 1 是 ")
+    @TableField(value = "entry_flag_")
+    private YesOrNoEnum entryFlag;
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@@ -142,6 +145,14 @@ public class TeacherStyleVideo implements Serializable {
         this.reason = reason;
     }
 
+    public YesOrNoEnum getEntryFlag() {
+        return entryFlag;
+    }
+
+    public void setEntryFlag(YesOrNoEnum entryFlag) {
+        this.entryFlag = entryFlag;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }

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

@@ -4,10 +4,12 @@ import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dao.HomeDao;
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.HomeService;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeVo;
+import com.yonge.cooleshow.biz.dal.vo.TagTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
@@ -48,26 +50,84 @@ public class HomeServiceImpl implements HomeService {
     public HttpResponseResult<HomeTotalTeacher> totalTeacher(TotalReq query) {
         //统计查询
         List<HomeTotalTeacher> totalList = baserMapper.totalTeacher(query.getTimeType().getCode(), query);
+
+        // 点亮图标
+        List<TagTotalTeacher> tagList = baserMapper.tagTeacher(query.getTimeType().getCode(), query);
+
+        Map<String, Map<String, List<TagTotalTeacher>>> tagTimeTypeGroup = tagList.stream()
+                                                                         .collect(Collectors.groupingBy(
+                                                                                 TagTotalTeacher::getTimeStr,
+                                                                                 Collectors.groupingBy(
+                                                                                         TagTotalTeacher::getTagType)));
+        Map<String, Map<Long, List<TagTotalTeacher>>> tagTimeUserGroup = tagList.stream()
+                                                                       .collect(Collectors.groupingBy(
+                                                                               TagTotalTeacher::getTimeStr,
+                                                                               Collectors.groupingBy(
+                                                                                       TagTotalTeacher::getUserId)));
+
         Integer registerNum = 0;
         Integer entryNum = 0;
         Integer liveNum = 0;
         Integer musicianNum = 0;
+        Integer tagNum  = 0 ;
+        Integer styleTagNum = 0;
+        Integer videoTagNum = 0;
+        Integer liveTagNum = 0;
+        Integer musicTagNum = 0;
         for (HomeTotalTeacher totalTeacher : totalList) {
             totalTeacher.setRegisterNum(null == totalTeacher.getRegisterNum() ? 0 : totalTeacher.getRegisterNum());
             totalTeacher.setEntryNum(null == totalTeacher.getEntryNum() ? 0 : totalTeacher.getEntryNum());
             totalTeacher.setLiveNum(null == totalTeacher.getLiveNum() ? 0 : totalTeacher.getLiveNum());
             totalTeacher.setMusicianNum(null == totalTeacher.getMusicianNum() ? 0 : totalTeacher.getMusicianNum());
 
+            Map<String, List<TagTotalTeacher>> typeGroup = tagTimeTypeGroup.get(totalTeacher.getTimeStr());
+            if (typeGroup != null) {
+                List<TagTotalTeacher> liveTagList = typeGroup.get(TeacherTagEnum.LIVE.getCode());
+                List<TagTotalTeacher> musicTagList = typeGroup.get(TeacherTagEnum.MUSIC.getCode());
+                List<TagTotalTeacher> styleTagList = typeGroup.get(TeacherTagEnum.STYLE.getCode());
+                List<TagTotalTeacher> videoTagList = typeGroup.get(TeacherTagEnum.VIDEO.getCode());
+                totalTeacher.setLiveTagNum(CollectionUtils.isEmpty(liveTagList) ? 0:liveTagList.size());
+                totalTeacher.setMusicTagNum(CollectionUtils.isEmpty(musicTagList) ? 0:musicTagList.size());
+                totalTeacher.setStyleTagNum(CollectionUtils.isEmpty(styleTagList) ? 0:styleTagList.size());
+                totalTeacher.setVideoTagNum(CollectionUtils.isEmpty(videoTagList) ? 0:videoTagList.size());
+            } else {
+                totalTeacher.setLiveTagNum(0);
+                totalTeacher.setMusicTagNum(0);
+                totalTeacher.setStyleTagNum(0);
+                totalTeacher.setVideoTagNum(0);
+            }
+
+
+            Map<Long, List<TagTotalTeacher>> userGroup = tagTimeUserGroup.get(totalTeacher.getTimeStr());
+
+            if (userGroup != null) {
+
+                totalTeacher.setTagNum(userGroup.size());
+            } else {
+                totalTeacher.setTagNum(0);
+            }
+
+
             registerNum += totalTeacher.getRegisterNum();
             entryNum += totalTeacher.getEntryNum();
             liveNum += totalTeacher.getLiveNum();
             musicianNum += totalTeacher.getMusicianNum();
+            tagNum += totalTeacher.getTagNum();
+            styleTagNum += totalTeacher.getStyleTagNum();
+            videoTagNum += totalTeacher.getVideoTagNum();
+            liveTagNum += totalTeacher.getLiveTagNum();
+            musicTagNum += totalTeacher.getMusicTagNum();
         }
         HomeTotalTeacher total = new HomeTotalTeacher();
         total.setRegisterNum(registerNum);
         total.setEntryNum(entryNum);
         total.setLiveNum(liveNum);
         total.setMusicianNum(musicianNum);
+        total.setTagNum(tagNum);
+        total.setStyleTagNum(styleTagNum);
+        total.setVideoTagNum(videoTagNum);
+        total.setLiveTagNum(liveTagNum);
+        total.setMusicTagNum(musicTagNum);
         total.setInfoList(totalList);
         return HttpResponseResult.succeed(total);
     }
@@ -82,6 +142,7 @@ public class HomeServiceImpl implements HomeService {
         Integer liveNum = 0;
         Integer musicNum = 0;
         Integer shoppingNum = 0;
+        Integer payStudentNum = 0;
 
         for (HomeTotalStudent totalStudent : totalList) {
             totalStudent.setRegisterNum(null == totalStudent.getRegisterNum() ? 0 : totalStudent.getRegisterNum());
@@ -91,6 +152,7 @@ public class HomeServiceImpl implements HomeService {
             totalStudent.setLiveNum(null == totalStudent.getLiveNum() ? 0 : totalStudent.getLiveNum());
             totalStudent.setMusicNum(null == totalStudent.getMusicNum() ? 0 : totalStudent.getMusicNum());
             totalStudent.setShoppingNum(null == totalStudent.getShoppingNum() ? 0 : totalStudent.getShoppingNum());
+            totalStudent.setPayStudentNum(null == totalStudent.getPayStudentNum() ? 0 : totalStudent.getPayStudentNum());
 
             registerNum += totalStudent.getRegisterNum();
             vipNum += totalStudent.getVipNum();
@@ -99,6 +161,7 @@ public class HomeServiceImpl implements HomeService {
             liveNum += totalStudent.getLiveNum();
             musicNum += totalStudent.getMusicNum();
             shoppingNum += totalStudent.getShoppingNum();
+            payStudentNum += totalStudent.getPayStudentNum();
         }
         HomeTotalStudent total = new HomeTotalStudent();
         total.setRegisterNum(registerNum);
@@ -108,6 +171,7 @@ public class HomeServiceImpl implements HomeService {
         total.setLiveNum(liveNum);
         total.setMusicNum(musicNum);
         total.setShoppingNum(shoppingNum);
+        total.setPayStudentNum(payStudentNum);
 
         total.setInfoList(totalList);
         return HttpResponseResult.succeed(total);

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

@@ -19,6 +19,7 @@ import com.yonge.cooleshow.biz.dal.dao.StudentTimeDao;
 import com.yonge.cooleshow.biz.dal.service.StudentTimeService;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -70,6 +71,9 @@ public class StudentTimeServiceImpl extends ServiceImpl<StudentTimeDao, StudentT
             List<UserOrderDetailVo> orderDetilListByOrderNo = orderDetailService.getOrderDetilListByOrderNo(userOrder.getOrderNo());
 
             for (UserOrderDetailVo detailVo : orderDetilListByOrderNo) {
+                if (detailVo.getActualPrice() != null && detailVo.getActualPrice().compareTo(BigDecimal.ZERO) > 0 && studentTime.getFirstPayTime() == null) {
+                    studentTime.setFirstPayTime(now);
+                }
                 if (null == studentTime.getFirstVipTime() && GoodTypeEnum.VIP.equals(detailVo.getGoodType())) {
                     studentTime.setFirstVipTime(now);
                 }
@@ -85,6 +89,9 @@ public class StudentTimeServiceImpl extends ServiceImpl<StudentTimeDao, StudentT
                 if (null == studentTime.getFirstMusicTime() && GoodTypeEnum.MUSIC.equals(detailVo.getGoodType())) {
                     studentTime.setFirstMusicTime(now);
                 }
+                if (null == studentTime.getFirstPayTime() && GoodTypeEnum.ACTI_REGIST.equals(detailVo.getGoodType())) {
+                    studentTime.setFirstPayTime(now);
+                }
             }
 
             StudentTime old = baseMapper.selectById(userOrder.getUserId());

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

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -9,10 +11,13 @@ import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
 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.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -31,9 +36,8 @@ import com.yonge.cooleshow.biz.dal.dao.TeacherAuthEntryRecordDao;
 import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.util.*;
 
 @Service
 public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEntryRecordDao, TeacherAuthEntryRecord> implements TeacherAuthEntryRecordService {
@@ -44,6 +48,9 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
     private SysMessageService sysMessageService;
 
     @Autowired
+    private TeacherStyleVideoService teacherStyleVideoService;
+
+    @Resource
     private TeacherDao teacherDao;
 
     @Override
@@ -87,6 +94,10 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
                 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());
+
+                //老师风采视频
+                String styleVideoJson = build.getStyleVideoJson();
+                saveStyleVideo(styleVideoJson, build.getUserId(), sysUser.getId());
             }
             teacher.setEntryFlag(authOperaReq.getPass() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
             teacher.setEntryAuthDate(new Date());
@@ -103,6 +114,33 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
         return HttpResponseResult.succeed(true);
     }
 
+    /**
+     * 保存老师风采视频
+     *
+     * @param styleVideoJson
+     * @param userId
+     * @param verifyUserId
+     */
+    private void saveStyleVideo(String styleVideoJson, Long userId, Long verifyUserId) {
+        if (!StringUtil.isEmpty(styleVideoJson)) {
+            JSONArray jsonArray = JSONObject.parseArray(styleVideoJson);
+            List<TeacherStyleVideo> batchVideoList = new ArrayList<>();
+
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                TeacherStyleVideo video = new TeacherStyleVideo();
+                video.setUserId(userId);
+                video.setCover(jsonObject.getString("cover"));
+                video.setVideoUrl(jsonObject.getString("videoUrl"));
+                video.setAuthStatus(AuthStatusEnum.PASS);
+                video.setVerifyUserId(verifyUserId);
+                video.setEntryFlag(YesOrNoEnum.YES);
+                batchVideoList.add(video);
+            }
+            teacherStyleVideoService.batchAddStyleVideo(batchVideoList);
+        }
+    }
+
     // 发送审核通知
     private void authSend(Long userId, String phone, Boolean isPass, String reason) {
         Map<Long, String> receivers = new HashMap<>();

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

@@ -417,6 +417,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         return HttpResponseResult.succeed(detail(teacherDto.getUserId()));
     }
 
+
+
+
     @Override
     public HttpResponseResult<Boolean> addHomeBrowse(Long userId) {
         Integer num = baseMapper.addHomeBrowse(userId);
@@ -472,13 +475,28 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
         if (StringUtil.isEmpty(teacherVo.getTag())) {
             teacherVo.setTag(teacherTagEnum.getCode());
+            setTagTime(teacherTagEnum, teacherVo);
         } else if (teacherVo.getTag().contains(teacherTagEnum.getCode())) {
             return;
         } else {
             teacherVo.setTag(teacherVo.getTag() + "," + teacherTagEnum.getCode());
+            setTagTime(teacherTagEnum, teacherVo);
         }
 
+
         this.updateById(teacherVo);
     }
 
+    private void setTagTime(TeacherTagEnum teacherTagEnum, TeacherVo teacherVo) {
+        if (teacherTagEnum.equals(TeacherTagEnum.LIVE)) {
+            teacherVo.setLiveDate(new Date());
+        } else if (teacherTagEnum.equals(TeacherTagEnum.MUSIC)) {
+            teacherVo.setLiveDate(new Date());
+        }else if (teacherTagEnum.equals(TeacherTagEnum.STYLE)) {
+            teacherVo.setLiveDate(new Date());
+        }else if (teacherTagEnum.equals(TeacherTagEnum.VIDEO)) {
+            teacherVo.setLiveDate(new Date());
+        }
+    }
+
 }

+ 55 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/SubjectHomeVo.java

@@ -0,0 +1,55 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-16
+ */
+@ApiModel("内容数据-声部")
+public class SubjectHomeVo {
+
+    @ApiModelProperty("声部id")
+    private Long subjectId;
+
+    @ApiModelProperty("声部名")
+    private String subjectName;
+
+    @ApiModelProperty("乐谱启用数")
+    private Integer enableMusicSheetNum;
+
+    @ApiModelProperty("乐谱数")
+    private Integer musicSheetNum;
+
+
+    @ApiModelProperty("平台乐谱启用数")
+    private Integer enablePlatformMusicSheetNum;
+
+    @ApiModelProperty("平台乐谱数")
+    private Integer musicPlatformSheetNum;
+
+
+    @ApiModelProperty("老师乐谱启用数")
+    private Integer enableTeacherMusicSheetNum;
+
+    @ApiModelProperty("老师乐谱数")
+    private Integer musicTeacherSheetNum;
+
+
+    @ApiModelProperty("陪练课程组")
+    private Integer practiceNum;
+
+    @ApiModelProperty("琴房课课程组")
+    private Integer pianoClassNum;
+
+    @ApiModelProperty("直播课程组")
+    private Integer liveNum;
+
+    @ApiModelProperty("视频课课程组")
+    private Integer videoNum;
+
+
+}

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TagTotalTeacher.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-16
+ */
+public class TagTotalTeacher {
+
+    private String timeStr;
+
+    private Long userId;
+
+    private String tagType;
+
+    public String getTimeStr() {
+        return timeStr;
+    }
+
+    public void setTimeStr(String timeStr) {
+        this.timeStr = timeStr;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getTagType() {
+        return tagType;
+    }
+
+    public void setTagType(String tagType) {
+        this.tagType = tagType;
+    }
+}

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

@@ -30,6 +30,17 @@ public class HomeTotalStudent {
     @ApiModelProperty("详情数据 ")
     private List<HomeTotalStudent> infoList;
 
+    @ApiModelProperty("付费学员数")
+    private Integer payStudentNum;
+
+    public Integer getPayStudentNum() {
+        return payStudentNum;
+    }
+
+    public void setPayStudentNum(Integer payStudentNum) {
+        this.payStudentNum = payStudentNum;
+    }
+
     public Integer getRegisterNum() {
         return registerNum;
     }

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

@@ -24,6 +24,61 @@ public class HomeTotalTeacher {
     @ApiModelProperty("详情数据 ")
     private List<HomeTotalTeacher> infoList;
 
+    @ApiModelProperty("点亮徽章")
+    private Integer tagNum;
+
+    @ApiModelProperty("个人风采人数")
+    private Integer styleTagNum;
+
+    @ApiModelProperty("视频课人数")
+    private Integer videoTagNum;
+
+    @ApiModelProperty("直播课人数")
+    private Integer liveTagNum;
+
+    @ApiModelProperty("曲目人数")
+    private Integer musicTagNum;
+
+    public Integer getStyleTagNum() {
+        return styleTagNum;
+    }
+
+    public void setStyleTagNum(Integer styleTagNum) {
+        this.styleTagNum = styleTagNum;
+    }
+
+    public Integer getVideoTagNum() {
+        return videoTagNum;
+    }
+
+    public void setVideoTagNum(Integer videoTagNum) {
+        this.videoTagNum = videoTagNum;
+    }
+
+    public Integer getLiveTagNum() {
+        return liveTagNum;
+    }
+
+    public void setLiveTagNum(Integer liveTagNum) {
+        this.liveTagNum = liveTagNum;
+    }
+
+    public Integer getMusicTagNum() {
+        return musicTagNum;
+    }
+
+    public void setMusicTagNum(Integer musicTagNum) {
+        this.musicTagNum = musicTagNum;
+    }
+
+    public Integer getTagNum() {
+        return tagNum;
+    }
+
+    public void setTagNum(Integer tagNum) {
+        this.tagNum = tagNum;
+    }
+
     public Integer getRegisterNum() {
         return registerNum;
     }

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

@@ -158,7 +158,7 @@
         from course_schedule as a
         left join course_group as b on a.course_group_id_ = b.id_
         left join subject as s on b.subject_id_ = s.id_
-        left join sys_user su on su.id_ = a.teacher_id_
+        left join sys_user su on a.teacher_id_ = su.id_
         where b.teacher_id_ = #{param.teacherId}
         AND a.lock_ = 0
         AND a.type_ = #{param.type}

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

@@ -127,6 +127,7 @@
 			sum(e.liveNum) as liveNum,
 			sum(f.musicNum) as musicNum,
 			sum(g.shoppingNum) as shoppingNum
+		,sum(h.payNum) as payStudentNum
 		from sys_day t
 		left join (
 			select
@@ -159,6 +160,21 @@
 			group by DATE_FORMAT(t.first_vip_time_,'%Y-%m-%d')
 		) b on t.sys_day_ymd_ = b.timeStr
 		left join (
+		select
+			DATE_FORMAT(t.first_pay_time_,'%Y-%m-%d') as timeStr,
+			count(1) as payNum
+		from student_time t
+			<where>
+				<if test="param.startTime !=null">
+					<![CDATA[AND t.first_pay_time_ >= #{param.startTime} ]]>
+				</if>
+				<if test="param.endTime !=null">
+					<![CDATA[AND t.first_pay_time_ < #{param.endTime} ]]>
+				</if>
+			</where>
+			group by DATE_FORMAT(t.first_pay_time_,'%Y-%m-%d')
+		) h on t.sys_day_ymd_ = h.timeStr
+		left join (
 			select
 				DATE_FORMAT(t.first_practice_time_,'%Y-%m-%d') as timeStr,
 				count(1) as practiceNum
@@ -249,4 +265,91 @@
 		</if>
 		order by t.sys_day_
 	</select>
+
+	<select id="tagTeacher" resultType="com.yonge.cooleshow.biz.dal.vo.TagTotalTeacher">
+		SELECT
+
+		<if test="timeType != null and timeType == 'MONTH'">
+			DATE_FORMAT(live_date_,'%Y-%m-%d') as timeStr,
+		</if>
+		<if test="timeType != null and timeType == 'YEAR'">
+			DATE_FORMAT(live_date_,'%Y-%m') as timeStr,
+		</if>
+			user_id_ ,
+			'LIVE' as tagType
+		FROM
+			teacher
+		<where>
+			<if test="param.startTime !=null">
+				<![CDATA[AND live_date_ >= #{param.startTime} ]]>
+			</if>
+			<if test="param.endTime !=null">
+				<![CDATA[AND live_date_ < #{param.endTime} ]]>
+			</if>
+		</where>
+		UNION all
+
+		SELECT
+		<if test="timeType != null and timeType == 'MONTH'">
+			DATE_FORMAT(style_date_,'%Y-%m-%d') as timeStr,
+		</if>
+		<if test="timeType != null and timeType == 'YEAR'">
+			DATE_FORMAT(style_date_,'%Y-%m') as timeStr,
+		</if>
+			user_id_ ,
+			'STYLE' as tagType
+		FROM
+			teacher
+		<where>
+			<if test="param.startTime !=null">
+				<![CDATA[AND style_date_ >= #{param.startTime} ]]>
+			</if>
+			<if test="param.endTime !=null">
+				<![CDATA[AND style_date_ < #{param.endTime} ]]>
+			</if>
+		</where>
+
+		UNION all
+
+		SELECT
+		<if test="timeType != null and timeType == 'MONTH'">
+			DATE_FORMAT(music_date_,'%Y-%m-%d') as timeStr,
+		</if>
+		<if test="timeType != null and timeType == 'YEAR'">
+			DATE_FORMAT(music_date_,'%Y-%m') as timeStr,
+		</if>
+			user_id_ ,
+			'MUSIC' as tagType
+		FROM
+			teacher
+		<where>
+			<if test="param.startTime !=null">
+				<![CDATA[AND music_date_ >= #{param.startTime} ]]>
+			</if>
+			<if test="param.endTime !=null">
+				<![CDATA[AND music_date_ < #{param.endTime} ]]>
+			</if>
+		</where>
+		UNION all
+
+		SELECT
+		<if test="timeType != null and timeType == 'MONTH'">
+			DATE_FORMAT(video_date_,'%Y-%m-%d') as timeStr,
+		</if>
+		<if test="timeType != null and timeType == 'YEAR'">
+			DATE_FORMAT(video_date_,'%Y-%m') as timeStr,
+		</if>
+			user_id_ ,
+			'VIDEO' as tagType
+		FROM
+			teacher
+		<where>
+			<if test="param.startTime !=null">
+				<![CDATA[AND video_date_ >= #{param.startTime} ]]>
+			</if>
+			<if test="param.endTime !=null">
+				<![CDATA[AND video_date_ < #{param.endTime} ]]>
+			</if>
+		</where>
+	</select>
 </mapper>

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

@@ -11,6 +11,7 @@
         <result column="grad_certificate_" property="gradCertificate"/>
         <result column="degree_certificate_" property="degreeCertificate"/>
         <result column="teacher_certificate_" property="teacherCertificate"/>
+        <result column="style_video_json_" property="styleVideoJson"/>
         <result column="teacher_auth_status_" property="teacherAuthStatus"/>
         <result column="verify_user_id_" property="verifyUserId"/>
         <result column="reason_" property="reason"/>
@@ -29,6 +30,7 @@
         , t.grad_certificate_ as "gradCertificate"
         , t.degree_certificate_ as "degreeCertificate"
         , t.teacher_certificate_ as "teacherCertificate"
+        , t.style_video_json_ as "styleVideoJson"
         , t.teacher_auth_status_ as "teacherAuthStatus"
         , t.verify_user_id_ as "verifyUserId"
         , t.reason_ as "reason"

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

@@ -22,6 +22,9 @@
         <result column="membership_end_time_" property="membershipEndTime"/>
         <result column="live_flag_" property="liveFlag" />
         <result column="live_date_" property="liveDate" />
+        <result column="music_date_" property="musicDate" />
+        <result column="video_date_" property="videoDate" />
+        <result column="style_date_" property="styleDate" />
         <result column="browse_" property="browse" />
         <result column="memo_" property="memo" />
         <result column="create_time_" property="createTime" />
@@ -46,7 +49,9 @@
         , t.musician_flag_ as "musicianFlag"
         , t.musician_date_ as "musicianDate"
         , t.live_flag_ as "liveFlag"
-        , t.live_date_ as "liveDate"
+        , t.music_date_ as "musicDate"
+        , t.video_date_ as "videoDate"
+        , t.style_date_ as "styleDate"
         , t.member_rank_setting_id_ as "memberRankSettingId"
         , t.membership_start_time_ as "membershipStartTime"
         , t.membership_end_time_ as "membershipEndTime"

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

@@ -12,6 +12,7 @@
 		<result column="auth_status_" property="authStatus" />
 		<result column="verify_user_id_" property="verifyUserId" />
 		<result column="reason_" property="reason" />
+		<result column="entry_flag_" property="entryFlag" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="del_flag_" property="delFlag" />
@@ -29,6 +30,7 @@
         , t.auth_status_ as authStatus
         , t.verify_user_id_ as verifyUserId
         , t.reason_ as reason
+		, t.entry_flag_ as entryFlag
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         , t.del_flag_ as delFlag
@@ -75,6 +77,9 @@
 		<if test="param.authStatus !=null">
 			AND t.auth_status_ = #{param.authStatus}
 		</if>
+		<if test="param.entryFlag !=null">
+			AND t.entry_flag_ = #{param.entryFlag}
+		</if>
 		order by field(t.auth_status_,'DOING') desc, t.create_time_ desc
 	</select>
 

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

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherApplyDetailReq;
@@ -13,11 +15,14 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
 
 @RestController
 @RequestMapping("/teacherAuthEntryRecord")
@@ -25,7 +30,7 @@ import javax.validation.Valid;
 public class TeacherAuthEntryRecordController extends BaseController {
     @Autowired
     private TeacherAuthEntryRecordService teacherAuthEntryRecordService;
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @GetMapping("/getLastRecordByUserId")
@@ -46,6 +51,11 @@ public class TeacherAuthEntryRecordController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
+        String styleVideoJson = teacherApplyDetailDto.getStyleVideoJson();
+        JSONArray jsonArray = JSONObject.parseArray(styleVideoJson);
+        if(CollectionUtils.isEmpty(jsonArray)){
+            return failed("至少要有一个老师风采视频");
+        }
         //处理老师申请逻辑
         return teacherAuthEntryRecordService.doApply(teacherApplyDetailDto, user);
     }

+ 14 - 0
toolset/utils/src/main/java/com/yonge/toolset/utils/date/DateUtil.java

@@ -6,8 +6,11 @@ import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.DayOfWeek;
+import java.time.LocalDate;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.Temporal;
 import java.time.temporal.WeekFields;
 import java.util.*;
 
@@ -573,6 +576,13 @@ public class DateUtil {
 		return ((c2.get(Calendar.YEAR) * 12) + c2.get(Calendar.MONTH)) - ((c1.get(Calendar.YEAR) * 12) + c1.get(Calendar.MONTH));
 	}
 
+	public static Long getMonthDiff(Date d1, Date d2) {
+		Temporal start = LocalDate.parse(format(d1, DEFAULT_PATTERN));
+		Temporal end = LocalDate.parse(format(d2, DEFAULT_PATTERN));
+
+		return ChronoUnit.MONTHS.between(start, end);
+	}
+
 	/**
 	 * 计算两个日期之间相差的年数。如果第一个日期在第二个日期之前,则返回正,反之返回负。
 	 *
@@ -1468,5 +1478,9 @@ public class DateUtil {
 		System.out.println(format(getLastDayOfMonth(new Date()),CHINESE_DATA_FORMAT));
 		System.out.println(monthsBetween(df1.parse("2020-01-18 12:00:00"),df1.parse("2020-04-19 12:00:00")));
 		System.out.println(getNextWeekMonday(new Date()));
+
+		System.out.println(getMonthDiff(
+				DateUtil.parse("2022-01-05",DEFAULT_PATTERN),
+				DateUtil.parse("2022-02-04",DEFAULT_PATTERN)));
 	}
 }