Browse Source

Merge branch 'zx_saas_2023_03' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 2 years ago
parent
commit
d7c5f35a28

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1964,4 +1964,21 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<String> queryStartedCourseMusicGroupIdList(String groupType);
 
     void batchUpdateDelFlag(@Param("courseIds") String courseIds);
+
+    /**
+    * @description: 标记当月的乐团课为已结算
+     * @param currentMonth
+    * @return void
+    * @author zx
+    * @date 2023/3/29 14:51
+    */
+    void makeSettlementReport(@Param("currentMonth") String currentMonth);
+
+
+    /**
+     * @describe 判断指定课程是否已经结算
+     * @param courseScheduleId: 课程编号
+     * @return boolean
+     */
+    int checkCourseIsSettlementReport(@Param("courseScheduleId") Long courseScheduleId);
 }

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

@@ -303,6 +303,8 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 */
 	boolean checkSingleCourseConflict(CourseSchedule courseSchedule, List<CourseSchedule> adjustCourses, Map<String, List<CourseSchedule>> result);
 
+	void checkCourseIsSettlement(CourseSchedule courseSchedule);
+
 	/**
 	 * @describe 课程时间校正,将冲突课程的时间校正到当天空闲时间段
 	 * @author Joburgess

+ 49 - 57
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -39,7 +39,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -58,11 +57,8 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType.MIX;
 import static com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType.MUSIC_NETWORK;
-import static com.ym.mec.biz.dal.enums.ClassGroupTypeEnum.HIGH_ONLINE;
 import static com.ym.mec.biz.dal.enums.GroupType.*;
-import static com.ym.mec.biz.dal.enums.MusicGroupStatusEnum.PROGRESS;
 import static com.ym.mec.biz.dal.enums.PracticeGroupType.FREE;
 import static com.ym.mec.biz.dal.enums.PracticeGroupType.TRIAL;
 import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.ORGAN_MANAGER;
@@ -1670,30 +1666,22 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					CourseSchedule currentCourseSchedule = courseSchedules.get(courseStartDates.size() - 1);
 					int singleClassMinutes = DateUtil.minutesBetween(currentCourseSchedule.getStartClassTime(), currentCourseSchedule.getEndClassTime());
 					Date courseEndTime = DateUtil.addMinutes(courseStartTime, singleClassMinutes);
-					int settlementNum = courseScheduleTeacherSalaryDao.checkCourseIsSettlement(courseSchedules.get(courseStartDates.size() - 1).getId().intValue());
-					if (settlementNum > 0) {
-						throw new BizException("{}[{}]{}-{}课程已结算",
-								courseSchedules.get(courseStartDates.size() - 1).getName(),
-								courseSchedules.get(courseStartDates.size() - 1).getId(),
-								DateUtil.dateToString(courseSchedules.get(courseStartDates.size() - 1).getStartClassTime(),
-										DateUtil.ISO_EXPANDED_DATE_TIME_FORMAT),
-								DateUtil.dateToString(courseSchedules.get(courseStartDates.size() - 1).getEndClassTime(),
-										DateUtil.ISO_EXPANDED_DATE_TIME_FORMAT));
-					}
-					int num = studentAttendanceDao.countStudentAttendenceNum(courseSchedules.get(courseStartDates.size() - 1).getId().intValue());
+					//校验课程是否结算
+					this.checkCourseIsSettlement(currentCourseSchedule);
+					int num = studentAttendanceDao.countStudentAttendenceNum(currentCourseSchedule.getId().intValue());
 					if (num > 0) {
 						throw new BizException("{}[{}]{}-{}课程已点名",
-								courseSchedules.get(courseStartDates.size() - 1).getName(),
-								courseSchedules.get(courseStartDates.size() - 1).getId(),
-								DateUtil.dateToString(courseSchedules.get(courseStartDates.size() - 1).getStartClassTime(),
+								currentCourseSchedule.getName(),
+								currentCourseSchedule.getId(),
+								DateUtil.dateToString(currentCourseSchedule.getStartClassTime(),
 										DateUtil.EXPANDED_DATE_TIME_FORMAT),
-								DateUtil.dateToString(courseSchedules.get(courseStartDates.size() - 1).getEndClassTime(),
+								DateUtil.dateToString(currentCourseSchedule.getEndClassTime(),
 										DateUtil.EXPANDED_DATE_TIME_FORMAT));
 					}
-					courseSchedules.get(courseStartDates.size() - 1).setStatus(CourseStatusEnum.NOT_START);
-					courseSchedules.get(courseStartDates.size() - 1).setClassDate(courseStartTime);
-					courseSchedules.get(courseStartDates.size() - 1).setStartClassTime(courseStartTime);
-					courseSchedules.get(courseStartDates.size() - 1).setEndClassTime(courseEndTime);
+					currentCourseSchedule.setStatus(CourseStatusEnum.NOT_START);
+					currentCourseSchedule.setClassDate(courseStartTime);
+					currentCourseSchedule.setStartClassTime(courseStartTime);
+					currentCourseSchedule.setEndClassTime(courseEndTime);
 				}
 				if (courseStartDates.size() == adjustCourseScheduleIds.size()) {
 					break;
@@ -1714,6 +1702,23 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
+	public void checkCourseIsSettlement(CourseSchedule courseSchedule) {
+		int settlementNum = courseScheduleTeacherSalaryDao.checkCourseIsSettlement(courseSchedule.getId().intValue());
+		if(settlementNum <= 0){
+			settlementNum = courseScheduleDao.checkCourseIsSettlementReport(courseSchedule.getId());
+		}
+		if (settlementNum > 0) {
+			throw new BizException("{}[{}]{}-{}课程已结算",
+					courseSchedule.getName(),
+					courseSchedule.getId(),
+					DateUtil.dateToString(courseSchedule.getStartClassTime(),
+							DateUtil.ISO_EXPANDED_DATE_TIME_FORMAT),
+					DateUtil.dateToString(courseSchedule.getEndClassTime(),
+							DateUtil.ISO_EXPANDED_DATE_TIME_FORMAT));
+		}
+	}
+
+	@Override
 	public boolean courseTimeRevise(CourseSchedule courseSchedule, List<CourseSchedule> sameDayCourses) {
 		int singleClassMinutes = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
 		sameDayCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
@@ -2443,30 +2448,23 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                         throw new BizException("单节课时不允许跨天");
                     }
                     courseStartDates.add(DateUtil.stringToDate(dateYmdStr, DateUtil.EXPANDED_DATE_TIME_FORMAT));
-                    int settlementNum = courseScheduleTeacherSalaryDao.checkCourseIsSettlement(courseSchedules.get(courseStartDates.size() - 1).getId().intValue());
-                    if (settlementNum > 0) {
-                        throw new BizException("{}[{}]{}-{}课程已结算",
-                                courseSchedules.get(courseStartDates.size() - 1).getName(),
-                                courseSchedules.get(courseStartDates.size() - 1).getId(),
-                                DateUtil.dateToString(courseSchedules.get(courseStartDates.size() - 1).getStartClassTime(),
-                                        DateUtil.ISO_EXPANDED_DATE_TIME_FORMAT),
-                                DateUtil.dateToString(courseSchedules.get(courseStartDates.size() - 1).getEndClassTime(),
-                                        DateUtil.ISO_EXPANDED_DATE_TIME_FORMAT));
-                    }
-                    int num = studentAttendanceDao.countStudentAttendenceNum(courseSchedules.get(courseStartDates.size() - 1).getId().intValue());
+					CourseSchedule courseSchedule = courseSchedules.get(courseStartDates.size() - 1);
+					//校验课程是否结算
+					this.checkCourseIsSettlement(courseSchedule);
+                    int num = studentAttendanceDao.countStudentAttendenceNum(courseSchedule.getId().intValue());
                     if (num > 0) {
                         throw new BizException("{}[{}]{}-{}课程已点名",
-                                courseSchedules.get(courseStartDates.size() - 1).getName(),
-                                courseSchedules.get(courseStartDates.size() - 1).getId(),
-                                DateUtil.dateToString(courseSchedules.get(courseStartDates.size() - 1).getStartClassTime(),
+								courseSchedule.getName(),
+								courseSchedule.getId(),
+                                DateUtil.dateToString(courseSchedule.getStartClassTime(),
                                         DateUtil.EXPANDED_DATE_TIME_FORMAT),
-                                DateUtil.dateToString(courseSchedules.get(courseStartDates.size() - 1).getEndClassTime(),
+                                DateUtil.dateToString(courseSchedule.getEndClassTime(),
                                         DateUtil.EXPANDED_DATE_TIME_FORMAT));
                     }
-                    courseSchedules.get(courseStartDates.size() - 1).setStatus(CourseStatusEnum.NOT_START);
-                    courseSchedules.get(courseStartDates.size() - 1).setClassDate(courseStartTime);
-                    courseSchedules.get(courseStartDates.size() - 1).setStartClassTime(courseStartTime);
-                    courseSchedules.get(courseStartDates.size() - 1).setEndClassTime(courseEndTime);
+                    courseSchedule.setStatus(CourseStatusEnum.NOT_START);
+                    courseSchedule.setClassDate(courseStartTime);
+                    courseSchedule.setStartClassTime(courseStartTime);
+                    courseSchedule.setEndClassTime(courseEndTime);
 
 					Integer allowOnlineToOffline = 0;
 					if(Objects.nonNull(vipGroupActivity)){
@@ -2480,9 +2478,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					}
 
 					if (Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode())) {
-                    	boolean onlineToOffline = courseSchedules.get(courseStartDates.size() - 1).getTeachMode().equals(TeachModeEnum.ONLINE)
+                    	boolean onlineToOffline = courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)
 								&&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE);
-						boolean offlineToOnline = courseSchedules.get(courseStartDates.size() - 1).getTeachMode().equals(TeachModeEnum.OFFLINE)
+						boolean offlineToOnline = courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)
 								&&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.ONLINE);
                         if(onlineToOffline && Objects.nonNull(vipGroupActivity) && (allowOnlineToOffline == 0 || allowOnlineToOffline == 3)){
                             throw new BizException("此VIP课活动不支持线上课调整为线下课");
@@ -2493,13 +2491,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						if(onlineToOffline&&Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId())){
 							throw new BizException("请选择教学点");
 						}
-                        courseSchedules.get(courseStartDates.size() - 1).setTeachMode(vipGroupCourseAdjustInfo.getTeachMode());
+						courseSchedule.setTeachMode(vipGroupCourseAdjustInfo.getTeachMode());
                         if (vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
                             if(Objects.nonNull(vipGroupCourseAdjustInfo.getSchoolId())){
-                                courseSchedules.get(courseStartDates.size() - 1).setSchoolId(vipGroupCourseAdjustInfo.getSchoolId());
+								courseSchedule.setSchoolId(vipGroupCourseAdjustInfo.getSchoolId());
                             }
                         } else {
-                            courseSchedules.get(courseStartDates.size() - 1).setSchoolId(null);
+							courseSchedule.setSchoolId(null);
                         }
                     }
                 }
@@ -3111,16 +3109,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			newCourseSchedule.setValidStartTime(oldCourseSchedule.getValidStartTime());
 
             //课程是否已结算
-            int settlementNum = courseScheduleTeacherSalaryDao.checkCourseIsSettlement(oldCourseSchedule.getId().intValue());
-            if (settlementNum > 0) {
-                throw new BizException("{}[{}]{}-{}课程已结算",
-                        oldCourseSchedule.getName(),
-                        oldCourseSchedule.getId(),
-                        DateUtil.dateToString(oldCourseSchedule.getStartClassTime(),
-                                DateUtil.EXPANDED_DATE_TIME_FORMAT),
-                        DateUtil.dateToString(oldCourseSchedule.getEndClassTime(),
-                                DateUtil.EXPANDED_DATE_TIME_FORMAT));
-            }
+			this.checkCourseIsSettlement(oldCourseSchedule);
 
 			if (newCourseSchedule.getGroupType() != GroupType.COMM) {
 				// 学生已点名不能调整(请假可以调整)
@@ -4010,6 +3999,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
 
         int settlementTimes = courseScheduleTeacherSalaryDao.checkCourseIsSettlement(courseScheduleComplaints.getCourseScheduleId().intValue());
+		if(settlementTimes <= 0){
+			settlementTimes = courseScheduleDao.checkCourseIsSettlementReport(courseScheduleComplaints.getCourseScheduleId());
+		}
         if (settlementTimes > 0) {
             throw new BizException("该课程已结算");
         }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportNewServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.OperatingReportCloudDao;
 import com.ym.mec.biz.dal.dao.OperatingReportNewDao;
 import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
@@ -30,6 +31,8 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 	private VipGroupCategoryDao vipGroupCategoryDao;
 	@Autowired
 	private OperatingReportCloudDao operatingReportCloudDao;
+	@Autowired
+	private CourseScheduleDao courseScheduleDao;
 
 	@Override
 	public BaseDAO<Integer, OperatingReportNew> getDAO() {
@@ -193,6 +196,8 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 			operatingReportNew.setQuasiDiscretionaryProfit(operatingReportNew.getTotalIncome().subtract(operatingReportNew.getTotalCost()));
 		}
 		operatingReportNewDao.batchInsert(operatingList);
+		//将本月乐团课标记为已结算
+		courseScheduleDao.makeSettlementReport(currentMonth);
 	}
 	private BigDecimal getAmount(BigDecimal amount){
 		if(amount == null){

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -3222,6 +3222,9 @@
     <update id="batchUpdateDelFlag">
         UPDATE course_schedule SET del_flag_ = 0,update_time_ = NOW() WHERE FIND_IN_SET(id_,#{courseIds})
     </update>
+    <update id="makeSettlementReport">
+        update course_schedule set settlement_report_flag_ = 1 where DATE_FORMAT(class_date_,'%Y-%m') = #{currentMonth}
+    </update>
 
     <select id="getStudentCourseScheduleNum" resultMap="com.ym.mec.biz.dal.dao.PracticeGroupDao.courseGroupExport">
         SELECT COUNT(*) total_class_times_,cssp.user_id_ student_id_
@@ -4122,4 +4125,8 @@
     <select id="queryStartedCourseMusicGroupIdList" resultType="java.lang.String">
 		select distinct cs.music_group_id_ from course_schedule cs where cs.group_type_ = #{groupType} and cs.status_ = 'OVER'
     </select>
+
+    <select id="checkCourseIsSettlementReport" resultType="int">
+        SELECT COUNT(*) course_schedule where settlement_report_flag_ = 1 and id_ = #{courseScheduleId}
+    </select>
 </mapper>