浏览代码

Merge remote-tracking branch 'origin/master'

周箭河 4 年之前
父节点
当前提交
f19101acdf

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

@@ -29,7 +29,7 @@ public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, M
      * @param studentIds:
      * @return java.util.List<com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail>
      */
-    List<MusicGroupPaymentStudentCourseDetail> getUnUseWithStudents(@Param("studentIds") List<Integer> studentIds);
+    List<MusicGroupPaymentStudentCourseDetail> getUnUseWithStudents(@Param("musicGroupId") String musicGroupId, @Param("studentIds") List<Integer> studentIds);
 
 	int batchInsert(List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList);
 

+ 41 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -220,6 +220,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private SysConfigService sysConfigService;
     @Autowired
     private StudentDao studentDao;
+    @Autowired
+    private MusicGroupPaymentCalenderCourseSettingsService musicGroupPaymentCalenderCourseSettingsService;
 
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -1717,11 +1719,24 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //5、插入班级排课信息
         LocalDateTime now = LocalDate.parse(classGroup4MixDtos.get(0).getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
 
+        Map<String, Integer> courseTypeMinutesMap = musicGroupPaymentCalenderCourseSettingsService.getMusicCourseSettingsWithStudents(musicGroupId, studentIdList);
+
         //计算每节课的课酬
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
 
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
         for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
+            if(!courseTypeMinutesMap.containsKey(classGroup4MixDto.getCourseType().getCode())){
+                throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
+            }
+            Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
+            long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
+                    LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
+                    .toMinutes();
+            classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
+
             int times = 0;
 
             Set<String> holidayDays = new HashSet<>();
@@ -1732,7 +1747,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
                 }
             }
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
             WhileNode:
             while (true) {
@@ -2008,18 +2022,32 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             classGroupTeacherMapperService.classGroupTeachersInsert(newClassGroupTeacherMapperList);
         }
 
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
         //2、获取班级学生
         List<StudentRegistration> studentList = classGroupStudentMapperDao.findClassStudentList(classGroup.getId(), ClassGroupStudentStatusEnum.NORMAL);
 
+        List<Integer> studentIds = studentList.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
+
         //3、插入班级排课信息
         LocalDateTime now = LocalDate.parse(classGroup4MixDtos.get(0).getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
 
+        Map<String, Integer> courseTypeMinutesMap = musicGroupPaymentCalenderCourseSettingsService.getMusicCourseSettingsWithStudents(musicGroupId, studentIds);
+
         //计算每节课的课酬
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
 
         for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
+            if(!courseTypeMinutesMap.containsKey(classGroup4MixDto.getCourseType().getCode())){
+                throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
+            }
+            Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
+            long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
+                    LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
+                    .toMinutes();
+            classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
+
             int times = 0;
             Set<String> holidayDays = new HashSet<>();
             if (classGroup4MixDto.getHoliday()) {
@@ -2028,7 +2056,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
                 }
             }
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
             WhileNode:
             while (true) {
@@ -2191,7 +2218,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         if (!CollectionUtils.isEmpty(studentList)) {
-            List<Integer> studentIds = studentList.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
             studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
 
             //学生结算表
@@ -2291,11 +2317,23 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //5、插入班级排课信息
         LocalDateTime now = LocalDate.parse(classGroup4MixDtos.get(0).getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
 
+        Map<String, Integer> courseTypeMinutesMap = musicGroupPaymentCalenderCourseSettingsService.getMusicCourseSettingsWithStudents(musicGroupId, studentIdList);
+
         //计算每节课的课酬
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
         for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
+            if(!courseTypeMinutesMap.containsKey(classGroup4MixDto.getCourseType().getCode())){
+                throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
+            }
+            Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
+            long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
+                    LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
+                    .toMinutes();
+            classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
+
             int times = 0;
             Set<String> holidayDays = new HashSet<>();
             if (classGroup4MixDto.getHoliday()) {
@@ -2304,7 +2342,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
                 }
             }
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
             WhileNode:
             while (true) {

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

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.alibaba.fastjson.JSON;
@@ -356,6 +357,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public void updateClassGroupStudents(Long classGroupId, Set<Integer> studentIds) {
         ClassGroup classGroup = classGroupService.get(classGroupId.intValue());
         if(Objects.isNull(classGroup)){

+ 4 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -287,7 +287,6 @@ 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) {
-		List<CourseScheduleStudentPayment> baseCourseScheduleStudentPayments = new ArrayList<>();
 		Map<CourseSchedule.CourseScheduleType, Integer> courseTypeCourseDurationMap = new HashMap<>();
 		Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
 		for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
@@ -307,7 +306,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				//当前课程类型总课程时长
 				Integer typeCourseDuration = courseTypeCourseDurationMap.get(courseScheduleTypeListEntry.getKey());
 				MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudentAndCourseTypeAndCourseMinutes(studentId, courseScheduleTypeListEntry.getKey(), typeCourseDuration);
-				if(Objects.isNull(musicGroupPaymentStudentCourseDetail)){
+				if(Objects.isNull(musicGroupPaymentStudentCourseDetail)||musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes().compareTo(typeCourseDuration)<0){
 					SysUser user = teacherDao.getUser(studentId);
 					throw new BizException("{}在{}课程类型上的课程时长不足", user.getUsername(), courseScheduleTypeListEntry.getKey().getMsg());
 				}
@@ -318,7 +317,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				}
 
 				MusicGroupPaymentCalenderCourseSettings musicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalenderAndCourseType(musicGroupPaymentStudentCourseDetail.getMusicGroupPaymentCalenderId(), courseScheduleTypeListEntry.getKey());
-				if(Objects.isNull(musicGroupPaymentCalenderCourseSettings)){
+				if(Objects.isNull(musicGroupPaymentCalenderCourseSettings)||musicGroupPaymentCalenderCourseSettings.getCourseTotalMinuties().compareTo(musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes())!=0){
 					throw new BizException("缴费设置异常");
 				}
 
@@ -348,17 +347,15 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 					cssp.setCourseScheduleId(courseSchedule.getId());
 					cssp.setClassGroupId(courseSchedule.getClassGroupId());
 					cssp.setBatchNo(musicGroupPaymentCalender.getBatchNo());
+					cssp.setUserId(studentId);
 					cssp.setOriginalPrice(courseOriginalPrice);
 					cssp.setExpectPrice(courseCurrentPrice);
 					cssp.setActualPrice(BigDecimal.ZERO);
 					typeCourseStudentPayments.add(cssp);
 				}
-				if(musicGroupPaymentCalenderCourseSettings.getCourseCurrentPrice().compareTo(typeCourseTotalCurrentPrice)<0){
-					throw new BizException("{}课程类型时长不足", courseScheduleTypeListEntry.getKey().getMsg());
-				}
 				typeCourseStudentPayments.get(0).setOriginalPrice(typeCourseStudentPayments.get(0).getOriginalPrice().add(musicGroupPaymentCalenderCourseSettings.getCourseOriginalPrice().subtract(typeCourseTotalOriginalPrice)));
 				typeCourseStudentPayments.get(0).setExpectPrice(typeCourseStudentPayments.get(0).getExpectPrice().add(musicGroupPaymentCalenderCourseSettings.getCourseCurrentPrice().subtract(typeCourseTotalCurrentPrice)));
-				baseCourseScheduleStudentPayments.addAll(typeCourseStudentPayments);
+				courseScheduleStudentPayments.addAll(typeCourseStudentPayments);
 				musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(typeCourseDuration);
 				musicGroupPaymentStudentCourseDetailDao.update(musicGroupPaymentStudentCourseDetail);
 			}

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

@@ -29,7 +29,7 @@ public class MusicGroupPaymentCalenderCourseSettingsServiceImpl extends BaseServ
 
 	@Override
 	public Map<String, Integer> getMusicCourseSettingsWithStudents(String musicGroupId, List<Integer> studentIds) {
-		List<MusicGroupPaymentStudentCourseDetail> mgpscds = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudents(studentIds);
+		List<MusicGroupPaymentStudentCourseDetail> mgpscds = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudents(musicGroupId, studentIds);
 		if(CollectionUtils.isEmpty(mgpscds)){
 			return Collections.emptyMap();
 		}

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

@@ -109,13 +109,15 @@
 		SELECT * FROM music_group_payment_student_course_detail
 		WHERE user_id_=#{studentId}
 		AND course_type_=#{courseType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-		AND total_course_minutes &gt; #{courseMinutes}
+		AND total_course_minutes_ &gt; #{courseMinutes}
 		AND used_course_minutes_ &lt;= 0
 		ORDER BY id_ DESC LIMIT 1;
 	</select>
     <select id="getUnUseWithStudents" resultMap="MusicGroupPaymentStudentCourseDetail">
-		SELECT * FROM music_group_payment_student_course_detail WHERE
-		used_course_minutes_ &lt;= 0
+		SELECT * FROM music_group_payment_student_course_detail mgpscd
+		LEFT JOIN music_group_payment_calender mgpc ON mgpscd.music_group_payment_calender_id_ = mgpc.id_
+		WHERE used_course_minutes_ &lt;= 0
+		AND mgpc.music_group_id_ = #{musicGroupId}
 		AND user_id_ IN
 		<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
 			#{studentId}