浏览代码

小小训练营调整

zouxuan 2 年之前
父节点
当前提交
64d6a65a5c

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.page.StudentCourseConsumerQueryInfo;
+import com.ym.mec.biz.dal.vo.TempCampUserTrainingSequenceVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
@@ -358,5 +359,7 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     //统计重复购买人数
     List<Map<Integer,Long>> getAgainBuyNum(@Param("organIds") List<Integer> organIds);
 
-    List<Map> getStudentCloudStudySequenceDays(@Param("studentIds") List<Integer> studentIds);
+    List<TempCampUserTrainingSequenceVo> getStudentCloudStudySequenceDays(@Param("studentIds") List<Integer> studentIds,
+                                                                          @Param("startTime") String startTime,
+                                                                          @Param("endTime") String endTime);
 }

+ 2 - 182
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempLittleArtistTrainingCamp.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -17,6 +18,7 @@ import java.util.Date;
  * @since 2022-05-17 20:56:22
  */
 @ApiModel(value = "temp_little_artist_training_camp-小小艺术家训练营活动")
+@Data
 public class TempLittleArtistTrainingCamp implements Serializable {
     //未开始-未到报名时间
     public static final String NOT_START = "NOT_START";
@@ -114,187 +116,5 @@ public class TempLittleArtistTrainingCamp implements Serializable {
 
     @TableField(exist = false)
     private String status;
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public Boolean getEnableFlag() {
-        return enableFlag;
-    }
-
-    public void setEnableFlag(Boolean enableFlag) {
-        this.enableFlag = enableFlag;
-    }
-
-    public String getOrganIds() {
-        return organIds;
-    }
-
-    public void setOrganIds(String organIds) {
-        this.organIds = organIds;
-    }
-
-    public String getMusicGroupIds() {
-        return musicGroupIds;
-    }
-
-    public void setMusicGroupIds(String musicGroupIds) {
-        this.musicGroupIds = musicGroupIds;
-    }
-
-    public Integer getSignStandard() {
-        return signStandard;
-    }
-
-    public void setSignStandard(Integer signStandard) {
-        this.signStandard = signStandard;
-    }
-
-    public Integer getStandardDays() {
-        return standardDays;
-    }
-
-    public void setStandardDays(Integer standardDays) {
-        this.standardDays = standardDays;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Integer getNum() {
-        return num;
-    }
-
-    public void setNum(Integer num) {
-        this.num = num;
-    }
-
-    public Date getApplyStartDate() {
-        return applyStartDate;
-    }
-
-    public void setApplyStartDate(Date applyStartDate) {
-        this.applyStartDate = applyStartDate;
-    }
-
-    public Date getApplyEndDate() {
-        return applyEndDate;
-    }
-
-    public void setApplyEndDate(Date applyEndDate) {
-        this.applyEndDate = applyEndDate;
-    }
-
-    public Date getTrainStartDate() {
-        return trainStartDate;
-    }
-
-    public void setTrainStartDate(Date trainStartDate) {
-        this.trainStartDate = trainStartDate;
-    }
-
-    public Date getTrainEndDate() {
-        return trainEndDate;
-    }
-
-    public void setTrainEndDate(Date trainEndDate) {
-        this.trainEndDate = trainEndDate;
-    }
-
-    /**
-     * 未开始 NOT_START,报名中 APPLY,筹备中 READY,进行中 ING,已结束 END
-     */
-    public String getState() {
-        return state;
-    }
-
-    /**
-     * 未开始 NOT_START,报名中 APPLY,筹备中 READY,进行中 ING,已结束 END
-     */
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    public String getImGroupIds() {
-        return imGroupIds;
-    }
-
-    public void setImGroupIds(String imGroupIds) {
-        this.imGroupIds = imGroupIds;
-    }
-
-    public String getPicUrl() {
-        return picUrl;
-    }
-
-    public void setPicUrl(String picUrl) {
-        this.picUrl = picUrl;
-    }
-
-    public Integer getDelFlag() {
-        return delFlag;
-    }
-
-    public void setDelFlag(Integer delFlag) {
-        this.delFlag = delFlag;
-    }
-
-    public Integer getCreateBy() {
-        return createBy;
-    }
-
-    public void setCreateBy(Integer createBy) {
-        this.createBy = createBy;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Integer getUpdateBy() {
-        return updateBy;
-    }
-
-    public void setUpdateBy(Integer updateBy) {
-        this.updateBy = updateBy;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public Integer getUserCount() {
-        return userCount;
-    }
-
-    public void setUserCount(Integer userCount) {
-        this.userCount = userCount;
-    }
 }
 

+ 3 - 77
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/TempCampUserTrainingDetailVo.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.vo;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -9,6 +10,7 @@ import java.math.RoundingMode;
 import java.util.Objects;
 
 @ApiModel(value = "训练营详情")
+@Data
 public class TempCampUserTrainingDetailVo implements Serializable {
     @ApiModelProperty(value = "用户id")
     private Integer id;
@@ -29,83 +31,7 @@ public class TempCampUserTrainingDetailVo implements Serializable {
     @ApiModelProperty(value = "乐团")
     private String musicGroupName;
     @ApiModelProperty(value = "连续打卡天数")
-    private Integer cloudStudySequenceDays;
-
-    public Integer getCloudStudySequenceDays() {
-        return cloudStudySequenceDays;
-    }
-
-    public void setCloudStudySequenceDays(Integer cloudStudySequenceDays) {
-        this.cloudStudySequenceDays = cloudStudySequenceDays;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
-
-    public Boolean getStandardFlag() {
-        return standardFlag;
-    }
-
-    public void setStandardFlag(Boolean standardFlag) {
-        this.standardFlag = standardFlag;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getImGroupName() {
-        return imGroupName;
-    }
-
-    public void setImGroupName(String imGroupName) {
-        this.imGroupName = imGroupName;
-    }
-
-    public Integer getPlayDay() {
-        return playDay;
-    }
-
-    public void setPlayDay(Integer playDay) {
-        this.playDay = playDay;
-    }
-
-    public Integer getPlayTime() {
-        return playTime;
-    }
+    private Long cloudStudySequenceDays = 0l;
 
     /**
      * 传入秒钟换算成分钟

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/TempCampUserTrainingSequenceVo.java

@@ -0,0 +1,12 @@
+package com.ym.mec.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "学员指定时间连续打卡天数")
+@Data
+public class TempCampUserTrainingSequenceVo{
+    private Integer userId;
+
+    private Long dayNum;
+}

+ 45 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampServiceImpl.java

@@ -291,19 +291,59 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
             List<Integer> studentIds = records.stream().map(e -> e.getId()).collect(Collectors.toList());
             Map<Integer,String> subjectMap = MapUtil.convertIntegerMap(studentDao.getStudentSubjectMapList(studentIds));
             Map<Integer,String> groupNameMap = MapUtil.convertMybatisMap(musicGroupDao.queryNormalGroupName(studentIds));
-            List<Map> map = studentDao.getStudentCloudStudySequenceDays(studentIds);
-            Map<Integer, Integer> studyMap = map.stream().collect(Collectors.toMap(e -> Integer.parseInt(e.get("key").toString()), v -> Integer.parseInt(v.get("value").toString())));
+            List<TempCampUserTrainingSequenceVo> sequenceDays = studentDao.getStudentCloudStudySequenceDays(studentIds,
+                    param.get("startTime").toString(),param.get("endTime").toString());
+            Map<Integer, List<Long>> listMap = sequenceDays.stream().collect(Collectors.groupingBy(e -> e.getUserId(),
+                    Collectors.collectingAndThen(Collectors.toList(),v->v.stream().map(e->e.getDayNum()).collect(Collectors.toList()))));
             Integer standardDays = Integer.parseInt(param.get("standardDays").toString());
             for (TempCampUserTrainingDetailVo record : records) {
                 record.setSubjectName(subjectMap.get(record.getId()));
                 record.setMusicGroupName(groupNameMap.get(record.getId()));
                 record.setStandardFlag(record.getPlayDay() >= standardDays);
-                record.setCloudStudySequenceDays(studyMap.get(record.getId()));
+                List<Long> sequenceVos = listMap.get(record.getId());
+                if(CollectionUtils.isNotEmpty(sequenceVos)){
+                    record.setCloudStudySequenceDays(getLongDay(sequenceVos));
+                }
             }
         }
         return PageUtil.pageInfo(vos);
     }
 
+    private static long getLongDay(List<Long> list) {
+        List<Long> list2 = new ArrayList<>();// 存放中断元素的位置
+        List<Long> list3 = new ArrayList<>();
+        //先获取连续中断的位置,放在list2中
+        for (Integer i = 0; i < list.size(); i++ ) {
+            if (i == list.size() - 1) {
+                break;
+            } else if (list.get(i + 1) - list.get(i) != 1) {
+                list2.add(i.longValue());
+            }
+        }
+        //通过判断获取连续的个数,在list3中取最大值即可。
+        if (0 == list2.size()) {
+            // 没有中断 返回原集合长度
+            return list.size();
+        } else {
+            for (int i = 0; i < list2.size(); i++ ) {
+                if (1 == list2.size()) {
+                    list3.add(list2.get(0) + 1);// 中断前的天数
+                    list3.add(list.size() - 1 - list2.get(i));// 剩余的天数
+                } else {
+                    if (i == 0) {
+                        list3.add(list2.get(0) + 1);
+                        list3.add(list2.get(i + 1) - list2.get(i));
+                    } else if (i == list2.size() - 1) {
+                        list3.add(list.size() - 1 - list2.get(i));
+                    } else {
+                        list3.add(list2.get(i + 1) - list2.get(i));
+                    }
+                }
+            }
+            return Collections.max(list3);
+        }
+    }
+
     /**
      * 训练营详情-查询条件时间设置
      */
@@ -312,8 +352,8 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
         TempLittleArtistTrainingCamp camp = this.getOne(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
                 .eq(TempLittleArtistTrainingCamp::getId, campId)
                 .eq(TempLittleArtistTrainingCamp::getDelFlag, 0));
-        param.put("startTime", camp.getTrainStartDate());
-        param.put("endTime", camp.getTrainEndDate());
+        param.put("startTime", DateUtil.format(camp.getTrainStartDate(),DateUtil.DEFAULT_PATTERN));
+        param.put("endTime", DateUtil.format(camp.getTrainEndDate(),DateUtil.DEFAULT_PATTERN));
         param.put("signStandard", camp.getSignStandard() * 60);
         param.put("standardDays", camp.getStandardDays());
         param.put("state", TempLittleArtistTrainingCampUserRelation.APPLY);

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1263,11 +1263,15 @@
         </if>
         group by mg.organ_id_
     </select>
-    <select id="getStudentCloudStudySequenceDays" resultType="java.util.Map">
-        select user_id_ 'key',cloud_study_sequence_days_ 'value' from student where user_id_ IN
+    <select id="getStudentCloudStudySequenceDays" resultType="com.ym.mec.biz.dal.vo.TempCampUserTrainingSequenceVo">
+        select user_id_ userId,TO_DAYS(DATE_FORMAT(create_time_,'%Y-%m-%d')) dayNum
+        from sys_music_compare_record
+        where DATE_FORMAT(create_time_,'%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
+        and user_id_ IN
         <foreach collection="studentIds" open="(" close=")" item="userId" separator=",">
             #{userId}
         </foreach>
+        group by user_id_,DATE_FORMAT(create_time_,'%Y-%m-%d')
     </select>
     <sql id="queryStudentBasicInfoSql">
         <where>