Преглед изворни кода

feat:进行中乐团加入学员/乐团班级学员调整不重复生成course schedule student payment记录

Joburgess пре 4 година
родитељ
комит
dece6af499

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

@@ -515,4 +515,8 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     List<CourseScheduleStudentPayment> getWithClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds,
                                                             @Param("studentId") Integer studentId);
+
+    List<CourseScheduleStudentPayment> getWithGroup(@Param("groupId") String groupId,
+                                                            @Param("groupType") GroupType groupType,
+                                                            @Param("studentIds") List<Integer> studentIds);
 }

+ 35 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -391,6 +391,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				cssp.setOriginalPrice(courseOriginalPrice);
 				cssp.setExpectPrice(courseCurrentPrice);
 				cssp.setActualPrice(BigDecimal.ZERO);
+				cssp.setBeMerged(false);
 				newCourseScheduleStudentPayments.add(cssp);
 				if(courseSchedules.size() - 1 == i){
 					CourseScheduleStudentPayment scheduleStudentPayment = newCourseScheduleStudentPayments.get(0);
@@ -419,16 +420,34 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	@Override
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds) {
-		Map<CourseSchedule.CourseScheduleType, Integer> courseTypeCourseDurationMap = new HashMap<>();
+		Map<CourseSchedule.CourseScheduleType, Map<Integer, Integer>> courseTypeCourseDurationMap = new HashMap<>();
 		Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
+
+		List<CourseScheduleStudentPayment> css = courseScheduleStudentPaymentDao.getWithGroup(musicGroupId, GroupType.MUSIC, studentIds);
+		Map<Integer, Set<Long>> studentCourseIdsMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(css)){
+			studentCourseIdsMap = css.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getUserId, Collectors.mapping(CourseScheduleStudentPayment::getCourseScheduleId, Collectors.toSet())));
+		}
+
 		for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
-			int totalCourseDuration = 0;
-			for (CourseSchedule courseSchedule : typeCoursesEntry.getValue()) {
-				//课程时长
-				int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
-				totalCourseDuration += courseDuration;
+			Map<Integer, Integer> sdMap = new HashMap<>();
+			for (Integer studentId : studentIds) {
+				Set<Long> existCourseIds = new HashSet<>();
+				if(studentCourseIdsMap.containsKey(studentId)){
+					existCourseIds = studentCourseIdsMap.get(studentId);
+				}
+				int totalCourseDuration = 0;
+				for (CourseSchedule courseSchedule : typeCoursesEntry.getValue()) {
+					if(existCourseIds.contains(courseSchedule.getId())){
+						continue;
+					}
+					//课程时长
+					int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+					totalCourseDuration += courseDuration;
+				}
+				sdMap.put(studentId, totalCourseDuration);
 			}
-			courseTypeCourseDurationMap.put(typeCoursesEntry.getKey(), totalCourseDuration);
+			courseTypeCourseDurationMap.put(typeCoursesEntry.getKey(), sdMap);
 		}
 
 		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
@@ -436,9 +455,13 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 		List<String> allBatchNos = new ArrayList<>();
 
 		for (Integer studentId : studentIds) {
+			Set<Long> existCourseIds = new HashSet<>();
+			if(studentCourseIdsMap.containsKey(studentId)){
+				existCourseIds = studentCourseIdsMap.get(studentId);
+			}
 			for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> courseScheduleTypeListEntry : typeCourseMap.entrySet()) {
 				//当前课程类型总课程时长
-				Integer typeCourseDuration = courseTypeCourseDurationMap.get(courseScheduleTypeListEntry.getKey());
+				Integer typeCourseDuration = courseTypeCourseDurationMap.get(courseScheduleTypeListEntry.getKey()).get(studentId);
 
 				String batchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, studentId, courseScheduleTypeListEntry.getKey(),null);
 
@@ -480,6 +503,9 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				courseScheduleTypeListEntry.getValue().sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 				BigDecimal typeCourseTotalOriginalPrice = new BigDecimal("0"), typeCourseTotalCurrentPrice = new BigDecimal("0");
 				for (CourseSchedule courseSchedule : courseScheduleTypeListEntry.getValue()) {
+					if(existCourseIds.contains(courseSchedule.getId())){
+						continue;
+					}
 					//课程时长
 					int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
 
@@ -501,6 +527,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 					cssp.setOriginalPrice(courseOriginalPrice);
 					cssp.setExpectPrice(courseCurrentPrice);
 					cssp.setActualPrice(BigDecimal.ZERO);
+					cssp.setBeMerged(false);
 					typeCourseStudentPayments.add(cssp);
 				}
 

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

@@ -730,7 +730,7 @@
 		GROUP BY course_schedule_id_
 	</select>
 
-	<select id="getWithClassGroupIds" resultType="com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment">
+	<select id="getWithClassGroupIds" resultMap="CourseScheduleStudentPayment">
 		SELECT * FROM course_schedule_student_payment WHERE class_group_id_ IN
 		<foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
 			#{classGroupId}
@@ -739,4 +739,15 @@
 			AND user_id_ = #{studentId}
 		</if>
 	</select>
+
+	<select id="getWithGroup" resultMap="CourseScheduleStudentPayment">
+		SELECT * FROM course_schedule_student_payment
+		WHERE music_group_id_ = #{groupId} AND group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		<if test="studentIds!=null and studentIds.size()>0">
+			AND user_id_ IN
+			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+				#{studentId}
+			</foreach>
+		</if>
+	</select>
 </mapper>