Selaa lähdekoodia

feat:课表列表新增调整

Joburgess 4 vuotta sitten
vanhempi
commit
12edda92e7

+ 102 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -10,21 +10,8 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeSet;
+import java.time.LocalTime;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -2832,10 +2819,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		//未更新课程列表
 		List<CourseSchedule> oldCourses = courseScheduleDao.findByCourseScheduleIds(courseAdjustInfo.getCourseScheduleIds());
 
+		//需要变更课酬的教师类型
+		Set<TeachTypeEnum> changeSalaryTeachTypes = new HashSet<>();
+
 		if(courseAdjustInfo.getChangeMainTeacher()){
+			changeSalaryTeachTypes.add(TeachTypeEnum.BISHOP);
 			courseScheduleTeacherSalaryDao.deleteWithCourseAndTeachRole(courseAdjustInfo.getCourseScheduleIds(), TeachTypeEnum.BISHOP);
 		}
-		if(courseAdjustInfo.getChangeMainTeacher()){
+		if(courseAdjustInfo.getChangeTeachingTeacher()){
+			changeSalaryTeachTypes.add(TeachTypeEnum.TEACHING);
 			courseScheduleTeacherSalaryDao.deleteWithCourseAndTeachRole(courseAdjustInfo.getCourseScheduleIds(), TeachTypeEnum.TEACHING);
 		}
 
@@ -2848,8 +2840,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			}
 		}
 
-		if(Objects.nonNull(courseAdjustInfo.getPauseDate())&&Objects.nonNull(courseAdjustInfo.getPauseDate())){
-			Set<String> holidayDays = new HashSet<>();
+		//上课日期变更
+		//间隔天数
+		int betweenDays = 0;
+		//节假日
+		Set<String> holidayDays = new HashSet<>();
+		if(Objects.nonNull(courseAdjustInfo.getPauseDate())&&Objects.nonNull(courseAdjustInfo.getRecoveryDate())){
 			if (courseAdjustInfo.getHoliday()) {
 				SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
 				if(Objects.nonNull(holidaySetting)&&StringUtils.isNotBlank(holidaySetting.getParanValue())){
@@ -2857,9 +2853,97 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 			}
 
+			LocalDate pauseDate = LocalDate.parse(courseAdjustInfo.getPauseDate(), DateUtil.dateFormatter);
+			LocalDate recoveryDate = LocalDate.parse(courseAdjustInfo.getRecoveryDate(), DateUtil.dateFormatter);
+
+			betweenDays = (int) (recoveryDate.toEpochDay()-pauseDate.toEpochDay());
+		}
 
+		//上课时间变更
+		LocalTime startTime = null;
+		if(Objects.nonNull(courseAdjustInfo.getStartTime())){
+			startTime = LocalTime.parse(courseAdjustInfo.getStartTime());
 		}
 
+		Date now = new Date();
+
+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
+
+		oldCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+		for (int i = 0; i < oldCourses.size(); i++) {
+			//上课日期变更
+			if(betweenDays>0){
+				LocalDate classDate = LocalDateTime.ofInstant(oldCourses.get(i).getClassDate().toInstant(), DateUtil.zoneId).toLocalDate();
+				classDate = classDate.plusDays(betweenDays);
+				if (courseAdjustInfo.getHoliday() && holidayDays.contains(classDate.toString())) {
+					betweenDays=betweenDays+7;
+					i=i-1;
+					continue;
+				}
+			}
+
+			//上课时间变更
+			if(Objects.nonNull(startTime)){
+				//课程时长
+				int minutes = DateUtil.minutesBetween(oldCourses.get(i).getStartClassTime(), oldCourses.get(i).getEndClassTime());
+				LocalTime endTime = startTime.plusMinutes(minutes);
+				String courseStartTimeStr = DateUtil.dateToString(oldCourses.get(i).getClassDate(), "yyyy-MM-dd") + " " + startTime.toString();
+				String courseEndTimeStr = DateUtil.dateToString(oldCourses.get(i).getClassDate(), "yyyy-MM-dd") + " " + endTime.toString();
+				oldCourses.get(i).setStartClassTime(DateUtil.stringToDate(courseStartTimeStr));
+				oldCourses.get(i).setEndClassTime(DateUtil.stringToDate(courseEndTimeStr));
+			}
+
+			if(Objects.nonNull(courseAdjustInfo.getTeachMode())&&!courseAdjustInfo.getTeachMode().equals(oldCourses.get(i).getTeachMode())){
+				oldCourses.get(i).setTeachMode(courseAdjustInfo.getTeachMode());
+				if(VIP.equals(oldCourses.get(i).getGroupType())){
+					changeSalaryTeachTypes.add(TeachTypeEnum.BISHOP);
+					courseScheduleTeacherSalaryDao.deleteWithCourseAndTeachRole(Arrays.asList(oldCourses.get(i).getId()), TeachTypeEnum.BISHOP);
+				}
+			}
+
+			//主教变更
+			if(Objects.nonNull(mainTeacherId)){
+				oldCourses.get(i).setActualTeacherId(mainTeacherId);
+			}
+
+			for (ClassGroupTeacherMapper classGroupTeacherMapper : courseAdjustInfo.getClassGroupTeacherMapperList()) {
+				if(!changeSalaryTeachTypes.contains(classGroupTeacherMapper.getTeacherRole())){
+					continue;
+				}
+				CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+				courseScheduleTeacherSalary.setCourseScheduleId(oldCourses.get(i).getId());
+				courseScheduleTeacherSalary.setGroupType(oldCourses.get(i).getGroupType());
+				courseScheduleTeacherSalary.setMusicGroupId(oldCourses.get(i).getMusicGroupId());
+				courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
+				courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
+				courseScheduleTeacherSalary.setClassGroupId(oldCourses.get(i).getClassGroupId());
+				courseScheduleTeacherSalary.setCreateTime(now);
+				courseScheduleTeacherSalary.setUpdateTime(now);
+				courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, oldCourses.get(i), courseScheduleTeacherSalary);
+				courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
+
+				if (courseAdjustInfo.getConfirmGenerate() && !courseAdjustInfo.getAllowZeroSalary() && BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getExpectSalary()) == 0) {
+					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+					return BaseController.failed(HttpStatus.MULTI_STATUS, "当前课程课酬预计为0,是否继续");
+				}
+			}
+		}
+
+		//老师结算表
+		if (courseScheduleTeacherSalaries.size() > 0) {
+			courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaries);
+		}
+
+		checkNewCourseSchedules(oldCourses, false, false);
+
+		if (!courseAdjustInfo.getConfirmGenerate()) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			oldCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+			return BaseController.failed(HttpStatus.PARTIAL_CONTENT, oldCourses, "");
+		}
+
+		courseScheduleDao.batchUpdate(oldCourses);
+
 		return BaseController.succeed();
 	}
 

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -382,6 +382,14 @@ public class CourseScheduleController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "课程调整-批量")
+    @PostMapping("/batchCourseAdjust")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchCourseAdjust')")
+    public Object batchCourseAdjust(BatchCourseAdjustDto batchCourseAdjustInfo){
+        courseScheduleService.batchCourseAdjust(batchCourseAdjustInfo);
+        return succeed();
+    }
+
     @ApiOperation(value = "课程顺延")
     @PostMapping("/coursePostpone")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/coursePostpone')")

+ 15 - 0
mec-web/src/main/java/com/ym/mec/web/controller/PracticeGroupManageController.java

@@ -138,6 +138,21 @@ public class PracticeGroupManageController extends BaseController {
     @GetMapping("studentBuys")
     @PreAuthorize("@pcs.hasPermissions('practiceGroupManage/studentBuys')")
     public Object studentBuys(StudentBuyPracticeQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+            return failed("用户所在分部异常");
+        } else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+                return failed("非法请求");
+            }
+        }
         return succeed(practiceGroupService.studentBuys(queryInfo));
     }
 }