瀏覽代碼

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
Joburgess 5 年之前
父節點
當前提交
1799be6297

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Param;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseScheduleStudentPayment> {
 
@@ -120,4 +121,13 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @return
      */
     int deleteByMusicGroupId(@Param("musicGroupId")String musicGroupId, @Param("groupType")GroupType groupType);
+
+    /**
+     * 根据乐团编号,和groupTYpe获取学员剩余课程数
+     * @param musicGroupIds
+     * @param userId
+     * @param groupType
+     * @return
+     */
+    List<Map<String, Integer>> findStudentCourseNum(@Param("musicGroupIds") Set<String> musicGroupIds, @Param("userId")Integer userId, @Param("groupType")String groupType);
 }

+ 25 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseListDto.java

@@ -9,9 +9,15 @@ public class CourseListDto {
     @ApiModelProperty(value = "班级类型", required = true)
     private ClassGroupTypeEnum type;
 
-    @ApiModelProperty(value = "乐团、vip编号",required = true)
+    @ApiModelProperty(value = "乐团、vip编号",required = true)
     private String musicGroupId;
 
+    @ApiModelProperty(value = "乐团编号",required = true)
+    private String musicId;
+
+    @ApiModelProperty(value = "vip课编号",required = true)
+    private String vipId;
+
     @ApiModelProperty(value = "班级编号",required = true)
     private Integer classGroupId;
 
@@ -59,6 +65,24 @@ public class CourseListDto {
 
     private Integer isApply;
 
+    public String getMusicId() {
+        return musicId;
+    }
+
+    public void setMusicId(String musicId) {
+        this.musicId = musicId;
+        this.musicGroupId = musicId;
+    }
+
+    public String getVipId() {
+        return vipId;
+    }
+
+    public void setVipId(String vipId) {
+        this.vipId = vipId;
+        this.musicGroupId = vipId;
+    }
+
     public Integer getIsApply() {
         return isApply;
     }

+ 24 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -571,7 +571,18 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         Set<String> vipIds = vipCourses.stream().map(CourseListDto::getMusicGroupId).collect(Collectors.toSet());
         Map<String, String> vipStuNames = MapUtil.convertIntegerMap(classGroupDao.findVipStuNames(StringUtils.join(vipIds, ",")));
         //获取学员的乐团列表详情
-        courseListDtos.addAll(classGroupDao.queryStudentMusicGroupCourses(StringUtils.join(musicGroupIds, ","), userId));
+        List<CourseListDto> musicCourse = classGroupDao.queryStudentMusicGroupCourses(StringUtils.join(musicGroupIds, ","), userId);
+        Set<String> musicGroupId = musicCourse.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+        Set<String> vipGroupId = vipCourses.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+        Map<String,Long> musicCourseNumMap = new HashMap<>();
+        if(musicGroupId != null && musicGroupId.size() > 0){
+            musicCourseNumMap = MapUtil.convertIntegerMap(courseScheduleStudentPaymentDao.findStudentCourseNum(musicGroupId,userId,"MUSIC"));
+        }
+        Map<String,Long> vipCourseNumMap = new HashMap<>();
+        if(vipGroupId != null && vipGroupId.size() > 0){
+            vipCourseNumMap = MapUtil.convertIntegerMap(courseScheduleStudentPaymentDao.findStudentCourseNum(vipGroupId,userId,"VIP"));
+        }
+        courseListDtos.addAll(musicCourse);
         courseListDtos.addAll(vipCourses);
         //检测对应乐团是否已申请退费
         List<Map<String, Integer>> isApplyMaps;
@@ -585,7 +596,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         Set<Integer> schoolIds = courseListDtos.stream().map(CourseListDto::getTeacherSchoolId).collect(Collectors.toSet());
         Map<Integer, String> schoolNames = MapUtil.convertMybatisMap(schoolDao.queryNameByIds(StringUtils.join(schoolIds, ",")));
 
-        courseListDtos.forEach(e -> {
+        Long classTimes = null;
+        for (CourseListDto e:courseListDtos) {
+            if(StringUtils.isEmpty(e.getMusicId())){
+                classTimes = vipCourseNumMap.get(e.getVipId());
+                e.setTotalClassTimes(classTimes == null?0:classTimes.intValue());
+                e.setCurrentClassTimes(0);
+            }else {
+                classTimes = musicCourseNumMap.get(e.getMusicId());
+                e.setTotalClassTimes(classTimes == null?0:classTimes.intValue());
+                e.setCurrentClassTimes(0);
+            }
             e.setAddress(schoolNames.get(e.getTeacherSchoolId()));
             e.setIsApply(isApplyMap.get(e.getMusicGroupId()));
             if (ClassGroupTypeEnum.VIP == e.getType()) {
@@ -600,7 +621,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     e.setClassMode(1);
                 }
             }
-        });
+        }
         pageInfo.setRows(courseListDtos);
         return pageInfo;
     }

+ 11 - 20
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -358,17 +358,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if(CollectionUtils.isEmpty(courseSchedules)){
 			return;
 		}
-
-		List<String> classDates = courseSchedules.stream()
-				.map(courseSchedule -> DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy-MM-dd"))
+		List<String> classDates = courseSchedules.stream().map(courseSchedule -> DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy-MM-dd"))
 				.collect(Collectors.toList());
 
-
-		//获取第一节课和最后一节课所包含的时间段内已存在的课程
 		List<CourseSchedule> existCourseSchedules = courseScheduleDao.findByClassDate(classDates);
 
-		System.out.println(System.currentTimeMillis());
-
 		//只需要调整课程信息的课程编号列表
 		List<Long> updateCourseScheduleIds = courseSchedules
 				.stream()
@@ -423,31 +417,25 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		Map<Integer, IntegerAndIntegerListDto> classGroupTeachingTeacherMap = classGroupAndUserIdsMap.stream()
 				.collect(Collectors.toMap(IntegerAndIntegerListDto::getId, integerAndIntegerListDto -> integerAndIntegerListDto));
 
-		System.out.println(System.currentTimeMillis());
-
 		//将课程计划按照开课时间排序
 		allCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 		if(allCourseSchedules.size()>1){
 		    //记录连续冲突的次数
-		    Integer repeatTimes=1;
-			for (int i=0;i<allCourseSchedules.size();i++){
-				if(i==0){
-					continue;
-				}
-				for(int j=repeatTimes;j>0;j--){
+		    Integer repeatTimes=0;
+			for (int i=1;i<allCourseSchedules.size();i++){
+				for(int j=1;j<=repeatTimes+1&&j<=i;j++){
                     //当前课程
                     CourseSchedule preCourseSchedule = allCourseSchedules.get(i-j);
                     //后面一节课程
                     CourseSchedule backCourseSchedule = allCourseSchedules.get(i);
                     //判断前后两节课是否存在冲突
                     if(backCourseSchedule.getStartClassTime().before(preCourseSchedule.getEndClassTime())){
-                    	if(repeatTimes==j){
-							repeatTimes+=1;
-						}
-
 						if(!checkExistCourseSchedule
 								&&existCourseScheduleIds.contains(preCourseSchedule.getId())
 								&&existCourseScheduleIds.contains(backCourseSchedule.getId())){
+							if(j==repeatTimes){
+								repeatTimes+=1;
+							}
 							continue;
 						}
 
@@ -516,6 +504,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                         if(!CollectionUtils.isEmpty(repeatStudentIds)){
                             throw new BizException(courseCheckInfo(preCourseSchedule,backCourseSchedule,existCourseScheduleIds,3));
                         }
+                        if(j==repeatTimes){
+                            repeatTimes+=1;
+                        }
                     }else{
 						repeatTimes=j;
 						break;
@@ -841,7 +832,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
-	@Transactional(rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public void vipCourseAdjust(VipGroupCourseAdjustInfoDto vipGroupCourseAdjustInfo) {
 		if(Objects.isNull(vipGroupCourseAdjustInfo.getVipGroupId())){
 			throw new BizException("请指定小课");

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

@@ -611,7 +611,9 @@
         <result column="class_group_id_" property="classGroupId"/>
         <result column="music_group_name_" property="musicGroupName"/>
         <result column="real_name_" property="teacherName"/>
-        <result column="music_group_id_" property="musicGroupId"/>
+        <!--<result column="music_group_id_" property="musicGroupId"/>-->
+        <result column="music_id_" property="musicId"/>
+        <result column="vip_id_" property="vipId"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="total_class_times_" property="totalClassTimes"/>
         <!--<result column="teach_mode_" property="teachMode"/>-->
@@ -629,14 +631,14 @@
         cg.current_class_times_,cg.total_class_times_,vg.single_class_minutes_,
         IF(vg.online_classes_num_ IS NULL,0,vg.online_classes_num_) online_classes_num_,
         IF(vg.offline_classes_num_ IS NULL,0,vg.offline_classes_num_) offline_classes_num_,
-        vg.teacher_school_id_,vg.id_ music_group_id_,cg.type_
+        vg.teacher_school_id_,vg.id_ vip_id_,cg.type_
         FROM vip_group vg
         LEFT JOIN class_group cg ON cg.music_group_id_ = vg.id_
         LEFT JOIN sys_user su ON vg.user_id_ = su.id_
         WHERE cg.group_type_ = 'VIP' AND FIND_IN_SET(vg.id_,#{musicGroupIds})
     </select>
     <select id="queryStudentMusicGroupCourses" resultMap="CourseListDto">
-        SELECT mg.id_ music_group_id_,mg.name_ music_group_name_,mgsf.payment_status_,
+        SELECT mg.id_ music_id_,mg.name_ music_group_name_,mgsf.payment_status_,
         SUM(cg.current_class_times_) current_class_times_,
         SUM(cg.total_class_times_) total_class_times_,mg.school_id_ teacher_school_id_
         FROM music_group mg

+ 3 - 18
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1267,33 +1267,18 @@
     <select id="findByClassDate" resultMap="CourseSchedule">
       SELECT
             cs.id_,
-            cs.music_group_id_,
-            cs.group_type_,
             cs.class_group_id_,
-            cs.status_,
-            cs.subsidy_,
-            cs.class_date_,
             CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
             CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
-            cs.teacher_id_,
-            cs.actual_teacher_id_,
-            cs.create_time_,
-            cs.update_time_,
-            cs.teach_mode_,
-            cs.type_,
-            cs.name_,
-            cs.student_num_,
-            cs.leave_student_num_,
-            cs.schoole_id_,
-            cg.type_ class_group_type_
+            cs.actual_teacher_id_
         FROM
-            course_schedule cs left join class_group cg on cs.class_group_id_ = cg.id_
+            course_schedule cs
         WHERE (cs.class_date_ IN
               <foreach collection="classDates" item="classDate" open="(" close=")" separator=",">
                   #{classDate}
               </foreach>
               )
-            AND (cs.del_flag_ IS NULL OR cs.del_flag_=0) AND (cg.del_flag_ IS NULL OR cg.del_flag_=0)
+            AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
     </select>
 
 

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -179,6 +179,16 @@
 			AND cssp.expect_price_ IS NOT NULL
 		ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_) DESC LIMIT 1
 	</select>
+    <select id="findStudentCourseNum" resultType="java.util.Map">
+		SELECT COUNT(DISTINCT cssp.id_) 'value',cssp.music_group_id_ 'key' FROM course_schedule cs
+		LEFT JOIN course_schedule_student_payment cssp ON cs.music_group_id_ = cssp.music_group_id_
+		WHERE cs.music_group_id_ IN
+		<foreach collection="musicGroupIds" separator="," item="item" open="(" close=")">
+			#{item}
+		</foreach>
+		AND cs.group_type_ = #{groupType} AND cssp.user_id_ = #{userId} AND cs.status_ = 'NOT_START'
+		GROUP BY cssp.music_group_id_
+	</select>
 
     <delete id="deleteStudentCourseSchedule">
 		DELETE FROM course_schedule_student_payment WHERE user_id_ = #{userId} AND course_schedule_id_ IN