Browse Source

Merge remote-tracking branch 'origin/online1' into online1

Joburgess 3 years ago
parent
commit
be5ac5156c
22 changed files with 234 additions and 102 deletions
  1. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  2. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java
  3. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CountStudentTrainDataDto.java
  4. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  5. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  6. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicMemberDto.java
  7. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java
  8. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java
  9. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  10. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  11. 31 25
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  12. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  13. 3 0
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  14. 1 1
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  15. 27 28
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  16. 2 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  17. 23 1
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  18. 3 5
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  19. 5 6
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  20. 26 7
      mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  21. 17 10
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  22. 10 10
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

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

@@ -49,5 +49,5 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
      */
     CloudTeacherOrderDto queryOrderInfoByOrderId(Long orderId);
 
-    List<Map<Long, String>> queryNoStartByUserIds(@Param("userIds") Set<Integer> userIds);
+    List<Map<Long, String>> queryNoStartByUserIds(@Param("userIds") Set<Integer> userIds, @Param("isMusicMember") Boolean isMusicMember);
 }

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

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareRecord> {
 
@@ -72,5 +73,4 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
     int getOrganNewCloudStudyNum(@Param("organId") Integer organId);
     int getOrgansTotalNewCloudStudyNum(@Param("organIds") List<Integer> organIds);
     List<Map<Integer, Integer>> getOrgansNewCloudStudyNum(@Param("organIds") List<Integer> organIds);
-
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CountStudentTrainDataDto.java

@@ -21,6 +21,16 @@ public class CountStudentTrainDataDto {
     //评测次数
     private Integer recordNum;
 
+    private String musicGroupName;
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
     public Integer getRecordNum() {
         return recordNum;
     }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java

@@ -130,11 +130,20 @@ public class MusicGroupStudentsDto{
     private Integer experienceMembershipDay;
     private Integer membershipDay;
     private Integer musicMembershipDay;
+    private Integer musicMembershipDay1;
     //是否有未生效的云教练订单
     private Boolean hasNoStartCloudTeacher = false;
 
     private Integer memberRankSettingId;
 
+    public Integer getMusicMembershipDay1() {
+        return musicMembershipDay1;
+    }
+
+    public void setMusicMembershipDay1(Integer musicMembershipDay1) {
+        this.musicMembershipDay1 = musicMembershipDay1;
+    }
+
     public Integer getMemberRankSettingId() {
         return memberRankSettingId;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -117,6 +117,16 @@ public class StudentManageListDto {
     //是否有未生效的云教练订单
     private Boolean hasNoStartCloudTeacher = false;
 
+    private Integer recordUserId;
+
+    public Integer getRecordUserId() {
+        return recordUserId;
+    }
+
+    public void setRecordUserId(Integer recordUserId) {
+        this.recordUserId = recordUserId;
+    }
+
     public Boolean getHasNoStartCloudTeacher() {
         return hasNoStartCloudTeacher;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicMemberDto.java

@@ -23,8 +23,28 @@ public class MusicMemberDto {
 
 	private Date visitTime;
 
+	private Date membershipEndTime;
+
 	private Integer courseViewType;
 
+	private Boolean hasNoStartCloudTeacher;
+
+	public Boolean getHasNoStartCloudTeacher() {
+		return hasNoStartCloudTeacher;
+	}
+
+	public void setHasNoStartCloudTeacher(Boolean hasNoStartCloudTeacher) {
+		this.hasNoStartCloudTeacher = hasNoStartCloudTeacher;
+	}
+
+	public Date getMembershipEndTime() {
+		return membershipEndTime;
+	}
+
+	public void setMembershipEndTime(Date membershipEndTime) {
+		this.membershipEndTime = membershipEndTime;
+	}
+
 	public Integer getCourseViewType() {
 		return courseViewType;
 	}

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java

@@ -49,6 +49,28 @@ public class StudentManageQueryInfo extends QueryInfo {
     //是否有会员
     private Integer hasMember;
 
+    //是否有指导老师
+    private Integer hasTeacher;
+
+    //是否使用过云教练
+    private Integer isRecord;
+
+    public Integer getIsRecord() {
+        return isRecord;
+    }
+
+    public void setIsRecord(Integer isRecord) {
+        this.isRecord = isRecord;
+    }
+
+    public Integer getHasTeacher() {
+        return hasTeacher;
+    }
+
+    public void setHasTeacher(Integer hasTeacher) {
+        this.hasTeacher = hasTeacher;
+    }
+
     public Integer getHasMember() {
         return hasMember;
     }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java

@@ -86,5 +86,5 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      */
     CloudTeacherOrderDto queryOrderInfoByOrderId(Long orderId);
 
-    List<Map<Long, String>> queryNoStartByUserIds(Set<Integer> userIds);
+    List<Map<Long, String>> queryNoStartByUserIds(Set<Integer> userIds,Boolean isMusicMember);
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -245,7 +245,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
 	}
 
     @Override
-    public List<Map<Long, String>> queryNoStartByUserIds(Set<Integer> userIds) {
-        return cloudTeacherOrderDao.queryNoStartByUserIds(userIds);
+    public List<Map<Long, String>> queryNoStartByUserIds(Set<Integer> userIds,Boolean isMusicMember) {
+        return cloudTeacherOrderDao.queryNoStartByUserIds(userIds,isMusicMember);
     }
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -3677,7 +3677,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             List<CloudTeacherOrder> studentCloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrders(collect,musicGroupId);
             Map<Integer, List<CloudTeacherOrder>> studentCloudTeacherMap = studentCloudTeacherOrders.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
             Date date = new Date();
+            Map<Long,String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(new HashSet<>(collect),true));
             dataList.forEach(e->{
+                //如果会员已过期、是否有未生效的会员
+                if(e.getMembershipEndTime() == null || date.after(e.getMembershipEndTime())){
+                    String s = cloudMap.get(e.getUserId().longValue());
+                    if(StringUtils.isNotEmpty(s)){
+                        e.setHasNoStartCloudTeacher(true);
+                    }
+                }
                 if (studentCloudTeacherMap.containsKey(e.getUserId())) {
                     List<CloudTeacherOrder> cloudTeacherOrders = studentCloudTeacherMap.get(e.getUserId());
                     if(cloudTeacherOrders != null && cloudTeacherOrders.size() > 0){

+ 31 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
@@ -25,7 +24,6 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.web.WebFeignService;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -116,6 +114,11 @@ public class StudentManageServiceImpl implements StudentManageService {
 
         List<StudentManageListDto> dataList = null;
         int count = studentManageDao.countStudentByOrganId(params);
+        if (queryInfo.getIsExport()) {
+            if (count > 50000) {
+                throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
+            }
+        }
         if (count > 0) {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
@@ -141,10 +144,34 @@ public class StudentManageServiceImpl implements StudentManageService {
         if(!CollectionUtils.isEmpty(userAllContract)){
             userContractVersionMap = userAllContract.stream().collect(Collectors.groupingBy(SysUserContracts::getUserId, Collectors.mapping(SysUserContracts::getVersion, Collectors.toSet())));
         }
-        Map<Long,String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(userIds));
+        Map<Long,String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(userIds,null));
         //List<Subject> studentSubject = studentManageDao.getStudentSubject(userIds);
         StudentListCourseDto studentListCourseDto = null;
+        //获取所在乐团
+        Map<Integer, String> musicGroupNames = null;
+        //获取所在vip
+        Map<Integer, String> vipGroupNames = null;
+        //获取所在乐团状态
+        Map<Integer, String> musicGroupStatus = null;
+        //获取所在vip状态
+        Map<Integer, String> vipGroupStatus = null;
+        if (queryInfo.getIsExport()) {
+            //获取所在乐团
+            musicGroupNames = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicNames(userIds));
+            //获取所在vip
+            vipGroupNames = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipNames(userIds));
+            //获取所在乐团状态
+            musicGroupStatus = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicStatus(userIds));
+            //获取所在vip状态
+            vipGroupStatus = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipStatus(userIds));
+        }
         for (StudentManageListDto dto : dataList) {
+            if (queryInfo.getIsExport()) {
+                dto.setMusicGroupName(musicGroupNames.get(dto.getUserId()));
+                dto.setVipGroupName(vipGroupNames.get(dto.getUserId()));
+                dto.setMusicGroupStatus(musicGroupStatus.get(dto.getUserId()));
+                dto.setVipGroupStatus(vipGroupStatus.get(dto.getUserId()));
+            }
             studentListCourseDto = StudentListCourseDtoMap.get(dto.getUserId());
             if (studentListCourseDto != null) {
                 if (studentListCourseDto.getRemainCourseNum() > 0) {
@@ -186,27 +213,6 @@ public class StudentManageServiceImpl implements StudentManageService {
             //年级
             dto.setCurrentGrade(studentService.getStudentGrade(dto.getGradeType(),dto.getCurrentGradeNum()));
         }
-
-        if (queryInfo.getIsExport()) {
-            if (count > 50000) {
-                throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
-            }
-            //获取所在乐团
-            Map<Integer, String> musicGroupNames = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicNames(userIds));
-            //获取所在vip
-            Map<Integer, String> vipGroupNames = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipNames(userIds));
-            //获取所在乐团状态
-            Map<Integer, String> musicGroupStatus = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicStatus(userIds));
-            //获取所在vip状态
-            Map<Integer, String> vipGroupStatus = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipStatus(userIds));
-
-            dataList.forEach(e -> {
-                e.setMusicGroupName(musicGroupNames.get(e.getUserId()));
-                e.setVipGroupName(vipGroupNames.get(e.getUserId()));
-                e.setMusicGroupStatus(musicGroupStatus.get(e.getUserId()));
-                e.setVipGroupStatus(vipGroupStatus.get(e.getUserId()));
-            });
-        }
         pageInfo.setRows(dataList);
         return pageInfo;
     }
@@ -508,7 +514,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             List<CloudTeacherOrder> studentCloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrders(collect, queryInfo.getMusicGroupId());
             Map<Integer, List<CloudTeacherOrder>> studentCloudTeacherMap = studentCloudTeacherOrders.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
             Date nowDate = new Date();
-            Map<Long,String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(new HashSet<>(collect)));
+            Map<Long,String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(new HashSet<>(collect),null));
             dataList.forEach(e->{
                 //如果会员已过期、是否有未生效的会员
                 if(e.getMemberRankSettingId() == null){

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -400,6 +400,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if(StringUtils.isEmpty(studentIds)){
             throw new BizException("请选择学员");
         }
+        endTime = DateUtil.addSeconds(DateUtil.addDays(endTime,1),-1);
         //学员是否有会员
         List<Integer> studentIdList = Arrays.stream(studentIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
         List<Student> studentList = studentDao.findByStudentIds(studentIdList);
@@ -418,8 +419,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         String configValue = sysConfigDao.findConfigValue(SysConfigService.EXPERIENCE_MEMBERSHIP_END_TIME);
         if(StringUtils.isNotEmpty(configValue)){
             Date date = DateUtil.stringToDate(configValue, DateUtil.ISO_EXPANDED_DATE_FORMAT);
-            int i = DateUtil.daysBetween(date, endTime);
-            if(i > 0){
+            if(endTime.after(date)){
                 throw new BizException("操作失败:会员试用期不可超过{}",configValue);
             }
         }

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -203,6 +203,9 @@
                 #{userId}
             </foreach>
         </if>
+        <if test="isMusicMember = 'true'">
+            AND music_group_id_ IS NOT NULL
+        </if>
         GROUP BY student_id_
     </select>
 </mapper>

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -826,7 +826,7 @@
 		LEFT JOIN student_registration sr ON sr.music_group_id_ = mgpc.music_group_id_ AND mgpcd.user_id_ = sr.user_id_
 		WHERE
 		mg.status_ = 'PROGRESS'
-		AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (DATEDIFF(sr.membership_end_time_,NOW()) &lt; 0 OR sr.membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
+		AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (sr.membership_end_time_ &lt; NOW() OR sr.membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
 		<if test="noPaymentType==null or noPaymentType==0">
 			AND DATE_FORMAT(NOW(),'%Y-%m-%d') > DATE_FORMAT(mgpc.deadline_payment_date_,'%Y-%m-%d')
 		</if>

+ 27 - 28
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -872,26 +872,16 @@
         </if>
     </select>
     <select id="countMusicMemberList" resultType="java.lang.Integer">
-        SELECT COUNT(c.user_id_) FROM
-        (SELECT sr.user_id_ FROM student_registration sr
+        SELECT COUNT(DISTINCT sr.user_id_)
+        FROM student_registration sr
         LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
-        LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_ AND cto.status_ IN (1,2)
         LEFT JOIN sys_user su ON su.id_ = sr.user_id_
         LEFT JOIN organization o ON o.id_ = mg.organ_id_
         LEFT JOIN student_visit sv ON sv.student_id_ = sr.user_id_ AND sv.purpose_ = '会员续费'
-        <include refid="queryMusicMemberListSql"/>
-        GROUP BY sr.user_id_ HAVING (MAX(cto.id_) IS NULL OR MIN(cto.status_) > 1)
         <if test="hasMember != null">
-            <if test="hasMember == 0">
-                AND (MAX(cto.id_) IS NULL OR DATEDIFF(MAX(cto.end_time_),NOW()) &lt; 0)
-            </if>
-            <if test="hasMember == 1">
-                AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt;= #{memberEndAutoQuitMusic} AND DATEDIFF(MAX(cto.end_time_),NOW()) >= 0
-            </if>
+            LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_ AND cto.music_group_id_ IS NOT NULL AND cto.status_ = 1
         </if>
-        <if test="visitStartTime != null">
-            AND MAX(sv.visit_time_) BETWEEN #{visitStartTime} AND #{visitEndTime}
-        </if>) c
+        <include refid="queryMusicMemberListSql"/>
     </select>
     <resultMap id="MusicMemberDto" type="com.ym.mec.biz.dal.entity.MusicMemberDto">
         <result property="organName" column="organ_name_"/>
@@ -903,28 +893,22 @@
         <result property="visitTime" column="visit_time_"/>
         <result property="phone" column="phone_"/>
         <result property="courseViewType" column="course_view_type_"/>
+        <result property="membershipEndTime" column="membership_end_time_"/>
     </resultMap>
     <select id="queryMusicMemberList" resultMap="MusicMemberDto">
         SELECT sr.user_id_,su.username_,su.phone_,o.name_ organ_name_,mg.name_ music_group_name_,mg.course_view_type_,
-        DATEDIFF(MAX(cto.end_time_),NOW()) member_day_,sr.music_group_id_,MAX(sv.visit_time_) visit_time_ FROM student_registration sr
+        DATEDIFF(sr.membership_end_time_,NOW()) member_day_,sr.music_group_id_,MAX(sv.visit_time_) visit_time_,sr.membership_end_time_
+        FROM student_registration sr
         LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
-        LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_ AND cto.status_ IN (1,2)
         LEFT JOIN sys_user su ON su.id_ = sr.user_id_
         LEFT JOIN organization o ON o.id_ = mg.organ_id_
         LEFT JOIN student_visit sv ON sv.student_id_ = sr.user_id_ AND sv.purpose_ = '会员续费'
-        <include refid="queryMusicMemberListSql"/>
-        GROUP BY sr.user_id_ HAVING (MAX(cto.id_) IS NULL OR MIN(cto.status_) > 1)
         <if test="hasMember != null">
-            <if test="hasMember == 0">
-                AND (MAX(cto.id_) IS NULL OR DATEDIFF(MAX(cto.end_time_),NOW()) &lt; 0)
-            </if>
-            <if test="hasMember == 1">
-                AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt;= #{memberEndAutoQuitMusic} AND DATEDIFF(MAX(cto.end_time_),NOW()) >= 0
-            </if>
-        </if>
-        <if test="visitStartTime != null">
-            AND MAX(sv.visit_time_) BETWEEN #{visitStartTime} AND #{visitEndTime}
+            LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_ AND cto.music_group_id_ IS NOT NULL AND cto.status_ = 1
         </if>
+        <include refid="queryMusicMemberListSql"/>
+        GROUP BY sr.user_id_
+        ORDER BY member_day_
         <include refid="global.limit"/>
     </select>
     <sql id="queryMusicMemberListSql">
@@ -932,7 +916,8 @@
             sr.music_group_status_ = 'NORMAL' AND mg.course_view_type_ = 2
             AND mg.status_ = 'PROGRESS'
             <if test="search != null and search != ''">
-                AND (mg.name_ LIKE CONCAT('%',#{search},'%') OR mg.id_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ = #{search})
+                AND (mg.name_ LIKE CONCAT('%',#{search},'%') OR mg.id_ LIKE CONCAT('%',#{search},'%')
+                OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ = #{search})
             </if>
             <if test="organId != null and organId != ''">
                 AND FIND_IN_SET(mg.organ_id_,#{organId})
@@ -940,6 +925,20 @@
             <if test="educationUserId != null">
                 AND mg.educational_teacher_id_ = #{educationUserId}
             </if>
+            <if test="hasMember != null">
+                <if test="hasMember == 0">
+                    AND cto.id_ IS NULL AND (sr.membership_end_time_ IS NULL OR sr.membership_end_time_ &lt; NOW())
+                </if>
+                <if test="hasMember == 1">
+                    AND cto.id_ IS NULL AND DATEDIFF(sr.membership_end_time_,NOW()) &lt;= #{memberEndAutoQuitMusic} AND sr.membership_end_time_ > NOW()
+                </if>
+                <if test="hasMember == 2">
+                    AND cto.id_ IS NOT NULL
+                </if>
+            </if>
+            <if test="visitStartTime != null">
+                AND MAX(sv.visit_time_) BETWEEN #{visitStartTime} AND #{visitEndTime}
+            </if>
         </where>
     </sql>
     

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

@@ -403,7 +403,7 @@
 		LEFT JOIN student_registration sr ON sr.user_id_ = mgpcd.user_id_ AND sr.music_group_id_ = mgpc.music_group_id_
 		WHERE mgpc.batch_no_ IS NOT NULL AND mgpcd.payment_status_ = 'NON_PAYMENT' AND (mgpcd.expect_amount_ + mgpcd.expect_member_amount_) > 0
 		  AND mgpc.music_group_id_ = #{musicGroupId} AND mgpc.status_ IN ('OPEN','OVER','PAID') AND mgpc.pay_user_type_ = 'STUDENT'
-		  AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (DATEDIFF(sr.membership_end_time_,NOW()) &lt; 0 OR sr.membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
+		  AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (sr.membership_end_time_ &lt; NOW() OR sr.membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
 		GROUP BY mgpcd.user_id_
 	</select>
 
@@ -439,7 +439,7 @@
 	<sql id="queryArrearageStudentsCondition">
 		<where>
 			mg.status_ = 'PROGRESS'
-			AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (DATEDIFF(sr.membership_end_time_,NOW()) &lt; 0 OR sr.membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
+			AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (sr.membership_end_time_ &lt; NOW() OR sr.membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
 			<if test="noPaymentType==null or noPaymentType==0">
 				AND DATE_FORMAT(NOW(),'%Y-%m-%d') > DATE_FORMAT(mgpc.deadline_payment_date_,'%Y-%m-%d')
 			</if>

+ 23 - 1
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -77,6 +77,7 @@
         <result column="membership_day_" property="membershipDay"/>
         <result column="experience_membership_day_" property="experienceMembershipDay"/>
         <result column="experience_membership_end_time_" property="experienceMembershipEndTime"/>
+        <result column="record_user_id_" property="recordUserId"/>
     </resultMap>
 
     <sql id="queryCondition">
@@ -171,7 +172,8 @@
         CASE WHEN su.password_ IS NULL THEN FALSE ELSE TRUE END isActive_,s.is_new_user_,
         s.membership_end_time_,CASE WHEN sut.user_id_ IS NULL THEN 0 ELSE 1 END is_signed_contract_,
         s.cooperation_organ_id_,co.name_ cooperation_organ_name_,s.activity_course_detail_,s.experience_membership_end_time_,
-        DATEDIFF(s.experience_membership_end_time_,NOW()) experience_membership_day_,DATEDIFF(s.membership_end_time_,NOW()) membership_day_
+        DATEDIFF(s.experience_membership_end_time_,NOW()) experience_membership_day_,DATEDIFF(s.membership_end_time_,NOW()) membership_day_,
+        smcr.user_id_ record_user_id_
 		FROM `student` s LEFT JOIN `sys_user` su ON s.`user_id_` = su.`id_`
 		LEFT JOIN `organization` o ON o.`id_` = su.`organ_id_`
 		LEFT JOIN `sys_user` tu ON tu.`id_` = s.`teacher_id_`
@@ -179,6 +181,7 @@
 		LEFT JOIN `subject` sub ON sub.id_ = s.`subject_id_list_`
 		LEFT JOIN sys_user_tsign sut ON sut.user_id_ = s.user_id_
         LEFT JOIN cooperation_organ co ON s.cooperation_organ_id_=co.id_
+        LEFT JOIN (SELECT DISTINCT user_id_ FROM sys_music_compare_record) smcr ON smcr.user_id_ = s.user_id_
         <if test="hasMember != null">
             <if test="hasMember == 2">
                 LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_
@@ -197,6 +200,14 @@
                     #{organId}
                 </foreach>
             </if>
+            <if test="isRecord != null">
+                <if test="isRecord == 0">
+                    AND smcr.user_id_ IS NULL
+                </if>
+                <if test="isRecord == 1">
+                    AND smcr.user_id_ IS NOT NULL
+                </if>
+            </if>
             <if test="search != null and search != ''">
                 AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ LIKE CONCAT('%',#{search},'%'))
             </if>
@@ -217,6 +228,14 @@
                     AND s.service_tag_ = 1
                 </if>
             </if>
+            <if test="hasTeacher != null">
+                <if test="hasTeacher == 0">
+                    AND s.teacher_id_ IS NULL
+                </if>
+                <if test="hasTeacher == 1">
+                    AND s.teacher_id_ IS NOT NULL
+                </if>
+            </if>
             <if test="hasMember != null">
                 <if test="hasMember == 0">
                     AND s.member_rank_setting_id_ IS NULL
@@ -257,6 +276,9 @@
                 LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_
             </if>
         </if>
+        <if test="isRecord != null">
+            LEFT JOIN (SELECT DISTINCT user_id_ FROM sys_music_compare_record) smcr ON smcr.user_id_ = s.user_id_
+        </if>
        <include refid="findStudentsByOrganIdSql"/>
     </select>
     <select id="findStudentBaseInfoByUserID" resultMap="studentManageListDto">

+ 3 - 5
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1057,7 +1057,7 @@
             COUNT(DISTINCT smcr.behavior_id_) cloudStudyUseNum,
             SUM(CASE WHEN smcr.play_time_ IS NULL THEN 0 ELSE play_time_ END) cloudStudyUseTime,
             COUNT(DISTINCT DATE(smcr.create_time_)) cloudStudyUseDays,
-            DATE_FORMAT(stu.membership_end_time_, '%Y-%m-%d') membershipEndTime
+            stu.membership_end_time_ membershipEndTime
         FROM student stu
             LEFT JOIN sys_user su ON stu.user_id_=su.id_
             LEFT JOIN sys_user tea ON stu.teacher_id_=tea.id_
@@ -1162,12 +1162,10 @@
         </foreach>
     </update>
     <update id="cleanStudentMember">
-        UPDATE student SET member_rank_setting_id_ = NULL
-        WHERE DATEDIFF(NOW(),membership_end_time_) > 0
+        UPDATE student SET member_rank_setting_id_ = NULL WHERE NOW() > membership_end_time_
     </update>
     <update id="cleanExperienceStudentMember">
-        UPDATE student SET experience_member_rank_setting_id_ = NULL
-        WHERE DATEDIFF(NOW(),experience_membership_end_time_) > 0
+        UPDATE student SET experience_member_rank_setting_id_ = NULL WHERE NOW() > experience_membership_end_time_
     </update>
     <update id="cleanMember">
         UPDATE student SET member_rank_setting_id_ = NULL,membership_start_time_ = NULL,membership_end_time_ = NULL

+ 5 - 6
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -1570,22 +1570,21 @@
     <select id="queryMemberEndAutoQuitMusic" resultMap="StudentRegistration">
         SELECT sr.music_group_id_,sr.user_id_ FROM student_registration sr
         LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
-        LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_ AND cto.status_ IN (1,2)
-        WHERE sr.music_group_status_ = 'NORMAL' AND mg.course_view_type_ = 2
-        AND mg.status_ = 'PROGRESS'
+        LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_ AND cto.status_ = 1 AND cto.music_group_id_ IS NOT NULL
+        WHERE sr.music_group_status_ = 'NORMAL' AND mg.course_view_type_ = 2 AND mg.status_ = 'PROGRESS'
         <if test="educationUserId != null">
             AND mg.educational_teacher_id_ = #{educationUserId}
         </if>
         <if test="organIds != null and organIds != ''">
             AND FIND_IN_SET(mg.organ_id_,#{organIds})
         </if>
-        GROUP BY sr.user_id_ HAVING (MAX(cto.id_) IS NULL OR MIN(cto.status_) > 1)
         <if test="memberEndAutoQuitMusic != null">
-            AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt;= #{memberEndAutoQuitMusic} AND DATEDIFF(MAX(cto.end_time_),NOW()) >= 0
+            AND cto.id_ IS NULL AND DATEDIFF(sr.membership_end_time_,NOW()) &lt;= #{memberEndAutoQuitMusic} AND sr.membership_end_time_ > NOW()
         </if>
         <if test="memberEndAutoQuitMusic == null">
-            AND (MAX(cto.id_) IS NULL OR DATEDIFF(MAX(cto.end_time_),NOW()) &lt; 0)
+            AND cto.id_ IS NULL AND (sr.membership_end_time_ IS NULL OR sr.membership_end_time_ &lt; NOW())
         </if>
+        GROUP BY sr.user_id_
     </select>
 
     <select id="countStudentWithSubjectByMusicGroupId" resultMap="Mapper">

+ 26 - 7
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -106,8 +106,11 @@
 			<if test="featureType != null">
 				AND smcr.feature_ = #{featureType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 			</if>
-			<if test="startTime!=null and endTime!=null">
-				AND DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
+			<if test="startTime != null and startTime != ''">
+				AND DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') >= #{startTime}
+			</if>
+			<if test="endTime != null and endTime != ''">
+				AND DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') &lt;= #{endTime}
 			</if>
 		</where>
 	</sql>
@@ -240,10 +243,17 @@
 		SELECT COUNT(DISTINCT s.user_id_)
 		FROM teacher t
 				 LEFT JOIN student s ON t.id_ = s.teacher_id_
+				 LEFT JOIN sys_user su ON su.id_ = s.user_id_
 				 LEFT JOIN sys_music_compare_record mcr ON mcr.user_id_ = s.user_id_
-		WHERE s.teacher_id_ = #{teacherId}
 		<if test="startTime != null and startTime != ''">
-			AND (mcr.create_time_ BETWEEN #{startTime} AND #{endTime} OR mcr.id_ IS NULL)
+			AND (DATE_FORMAT(mcr.create_time_, '%Y-%m-%d') >= #{startTime} OR mcr.id_ IS NULL)
+		</if>
+		<if test="endTime != null and endTime != ''">
+			AND (DATE_FORMAT(mcr.create_time_, '%Y-%m-%d') &lt;= #{endTime} OR mcr.id_ IS NULL)
+		</if>
+		WHERE s.teacher_id_ = #{teacherId}
+		<if test="search != null and search != ''">
+			AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%'))
 		</if>
 	</select>
 	<resultMap id="CountStudentTrainDataDto" type="com.ym.mec.biz.dal.dto.CountStudentTrainDataDto">
@@ -255,19 +265,28 @@
 		<result property="phone" column="phone_"/>
 		<result property="totalPlayTime" column="total_play_time_"/>
 		<result property="trainDay" column="train_day_"/>
+		<result property="musicGroupName" column="music_group_name_"/>
 	</resultMap>
 	<select id="queryStudentTrain" resultMap="CountStudentTrainDataDto">
 		SELECT s.user_id_,su.avatar_,su.phone_,su.username_,ROUND(SUM(mcr.play_time_) / 60) total_play_time_,
 			   COUNT(DISTINCT DATE_FORMAT(mcr.create_time_,"%Y-%m-%d")) train_day_,
 			   COUNT(DISTINCT mcr.behavior_id_) train_num_,
-		COUNT(CASE WHEN mcr.feature_ = 'CLOUD_STUDY_EVALUATION' THEN mcr.behavior_id_ ELSE NULL END) record_num_
+		COUNT(CASE WHEN mcr.feature_ = 'CLOUD_STUDY_EVALUATION' THEN mcr.behavior_id_ ELSE NULL END) record_num_,GROUP_CONCAT(DISTINCT mg.name_) music_group_name_
 		FROM teacher t
 				 LEFT JOIN student s ON t.id_ = s.teacher_id_
+				 LEFT JOIN student_registration sr ON sr.user_id_ = s.user_id_ AND sr.music_group_status_ = 'NORMAL'
+				 LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_ AND mg.status_ = 'PROGRESS'
 				 LEFT JOIN sys_user su ON su.id_ = s.user_id_
 				 LEFT JOIN sys_music_compare_record mcr ON mcr.user_id_ = s.user_id_
-		WHERE s.teacher_id_ = #{teacherId}
 		<if test="startTime != null and startTime != ''">
-			AND (mcr.create_time_ BETWEEN #{startTime} AND #{endTime} OR mcr.id_ IS NULL)
+			AND (DATE_FORMAT(mcr.create_time_, '%Y-%m-%d') >= #{startTime} OR mcr.id_ IS NULL)
+		</if>
+		<if test="endTime != null and endTime != ''">
+			AND (DATE_FORMAT(mcr.create_time_, '%Y-%m-%d') &lt;= #{endTime} OR mcr.id_ IS NULL)
+		</if>
+		WHERE s.teacher_id_ = #{teacherId}
+		<if test="search != null and search != ''">
+			AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%'))
 		</if>
 		GROUP BY s.user_id_
 		ORDER BY total_play_time_ DESC

+ 17 - 10
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -972,10 +972,12 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
                     "家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)",
-                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议"}, new String[]{
+                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用云教练", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"}, new String[]{
                     "organName", "userId", "username", "gender.description", "parentsName", "parentsPhone",
                     "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName",
-                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'"}, rows);
+                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'",
+                    "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? \"未生效\" : \"未购买\" : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? \"未生效\" : \"会员已过期\"",
+                    "experienceMembershipEndTime","membershipEndTime == null ? \"未试用\" : membershipDay >= 0 ? membershipDay : \"已失效\""}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();
@@ -1433,19 +1435,24 @@ public class ExportController extends BaseController {
                 } else {
                     row.setActiveName("否");
                 }
-                if (row.getIsNewStudent().equals(1)) {
-                    row.setIsNewStudentStr("是");
-                } else {
-                    row.setIsNewStudentStr("否");
+                if (row.getMusicMembershipDay() != null && row.getMusicMembershipDay() < 0) {
+                    row.setMusicMembershipDay1(Math.abs(row.getMusicMembershipDay()));
                 }
                 if (row.getNextPaymentDate() != null) {
                     row.setNextPaymentDateStr(DateUtil.format(row.getNextPaymentDate(), DateUtil.DEFAULT_PATTERN));
                 }
             }
-            String[] header = {"学员编号", "学员姓名", "性别", "联系电话", "年级", "班级", "专业", "学员状态", "新增学员", "缴费金额",
-                    "下次缴费日期", "报名缴费状态", "是否激活", "是否有剩余VIP", "是否有剩余网管课", "欠费总额"};
-            String[] body = {"userId", "realName", "gender", "phone", "currentGrade", "currentClass", "subjectName", "studentStatus", "isNewStudentStr",
-                    "courseFee", "nextPaymentDateStr", "paymentStatus.desc", "activeName", "hasVip ? '是' : '否'", "hasPractice ? '是' : '否'", "noPaymentAmount"};
+            String[] header = {"学员编号", "学员姓名", "性别", "联系电话","入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活",
+                    "VIP/网管是否有课","关心包","加油包", "欠费金额(元)", "退团原因",
+                    "下次续费时间", "下次续费剩余天数", "会员截止时间", "会员剩余天数", "试用会员截止时间", "试用会员剩余天数"};
+            String[] body = {"userId", "realName", "gender", "phone","registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc"
+                    ,"courseFee", "activeName", "hasCourse ? '是' : '否'"
+                    ,"carePackage == null || carePackage == 0 ? \"不可用\" : carePackage == 1 ? \"可用\" : \"已使用\""
+                    ,"comeOnPackage == null || comeOnPackage == 0 ? \"不可用\" : comeOnPackage == 1 ? \"可用\" : \"已使用\""
+                    ,"noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason", "musicMembershipEndTime",
+                    "musicMembershipEndTime == null ? '' : musicMembershipDay >= 0 ? musicMembershipDay : '已欠费' + musicMembershipDay1 + '天'",
+                    "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? \"未生效\" : \"未购买\" : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? \"未生效\" : \"会员已过期\"",
+                    "experienceMembershipEndTime","experienceMembershipEndTime == null ? \"未试用\" : experienceMembershipDay >= 0 ? experienceMembershipDay : \"已失效\""};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, musicGroupStudentsDtoPageInfo.getRows());
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");

+ 10 - 10
mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

@@ -164,17 +164,17 @@ public class IndexController extends BaseController {
 		if (sysUser == null) {
 			return failed("用户信息获取失败");
 		}
-			Employee employee = employeeService.get(sysUser.getId());
-			if (StringUtils.isBlank(organId)) {
-				organId = employee.getOrganIdList();
-			}else if(StringUtils.isEmpty(employee.getOrganIdList())){
-				return failed("用户所在分部异常");
-			}else {
-				List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-				if(!list.containsAll(Arrays.asList(organId.split(",")))){
-					return failed("非法请求");
-				}
+		Employee employee = employeeService.get(sysUser.getId());
+		if (StringUtils.isBlank(organId)) {
+			organId = employee.getOrganIdList();
+		}else if(StringUtils.isEmpty(employee.getOrganIdList())){
+			return failed("用户所在分部异常");
+		}else {
+			List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+			if(!list.containsAll(Arrays.asList(organId.split(",")))){
+				return failed("非法请求");
 			}
+		}
 		return succeed(indexService.getIndexErrData(organId, errorType));
 	}