소스 검색

Merge remote-tracking branch 'origin/master'

周箭河 4 년 전
부모
커밋
64c22ce8a2

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupOrganizationCourseSettingsDetail.java

@@ -31,6 +31,12 @@ public class MusicGroupOrganizationCourseSettingsDetail {
     private BigDecimal unitPrice = BigDecimal.ZERO;
 
     /**
+    * 总排课次数
+    */
+    @ApiModelProperty(value="总排课次数")
+    private Integer courseTotalNum;
+
+    /**
     * 课程原价
     */
     @ApiModelProperty(value="课程原价")
@@ -54,6 +60,14 @@ public class MusicGroupOrganizationCourseSettingsDetail {
     @ApiModelProperty(value="")
     private Date updateTime;
 
+    public Integer getCourseTotalNum() {
+        return courseTotalNum;
+    }
+
+    public void setCourseTotalNum(Integer courseTotalNum) {
+        this.courseTotalNum = courseTotalNum;
+    }
+
     public Integer getId() {
         return id;
     }

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

@@ -281,10 +281,10 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
 
     /**
      * 合班拆班新建班级
-     * @param classGroup4MixDto
+     * @param classGroup4MixDtos
      * @return
      */
-    ClassGroup classGroupAdjust2(ClassGroup4MixDto classGroup4MixDto);
+    ClassGroup classGroupAdjust2(ClassGroup4MixDto classGroup4MixDtos);
 
     /**
      * 班级调整(修改班级)

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

@@ -34,6 +34,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
      */
     public static final String ATTENDANCE_RANGE = "attendance_range";
 
+    String ATTENDANCE_RANGE_VIP = "attendance_range_vip";
+
     /**
      * 学生允许请假的时间,为开课前{}小时
      */

+ 31 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1784,7 +1784,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
 
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        String classCourseMinute = null;
         for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
             if(classGroup4MixDto.getCourseTimeDtoList() == null || classGroup4MixDto.getCourseTimeDtoList().size() == 0){
                 break;
@@ -1986,7 +1985,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public List<CourseSchedule> getCourseSchedules(ClassGroup4MixDto classGroup4MixDto){
+    public List<CourseSchedule> getCourseSchedules(ClassGroup4MixDto classGroup4MixDto,List<CourseSchedule> courseScheduleList){
         Date date = new Date();
         String musicGroupId = classGroup4MixDto.getMusicGroupId();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
@@ -2038,7 +2037,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
         }
         ClassGroup classGroup = classGroup4MixDto.getClassGroup();
-        List<CourseSchedule> courseScheduleList = new ArrayList<>();
+        courseScheduleList.clear();
         int times = 0;
         WhileNode:
         while (true) {
@@ -2133,7 +2132,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             Date stringToDate = DateUtil.stringToDate(classGroup4MixDto.getStartDate(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
             classGroup4MixDto.setStartDate(DateUtil.format(DateUtil.addDays(stringToDate, 7),DateUtil.ISO_EXPANDED_DATE_FORMAT));
             //再次尝试排课
-            courseScheduleList = getCourseSchedules(classGroup4MixDto);
+            courseScheduleList = getCourseSchedules(classGroup4MixDto,courseScheduleList);
             autoAdjust(classGroup4MixDto,courseScheduleList);
         }
         return courseScheduleList;
@@ -2161,27 +2160,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroup4MixDto.getClassGroupTeacherMapperList();
 
-        Set<Integer> noRepeatTeacherIds = classGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toSet());
-        if(noRepeatTeacherIds.size()!=classGroupTeacherMapperList.size()){
-            throw new BizException("主教与助教存在冲突");
-        }
-
         //获取默认的排课时长
         String courseDefaultMinutes = sysConfigDao.findConfigValue("music_course_default_minutes");
         JSONObject jsonObject = JSON.parseObject(courseDefaultMinutes);
         long classCourseDuration = Integer.parseInt(jsonObject.get(classGroup4MixDto.getCourseType().getCode()).toString());
-
-        //建班
-        ClassGroup classGroup = createClassGroup(classGroup4MixDto);
-        //排课
-        classGroup4MixDto.setClassGroup(classGroup);
-        List<CourseSchedule> courseScheduleList = getCourseSchedules(classGroup4MixDto);
-
-        //自动排课,校验冲突
-        if(courseScheduleList.size() > 0){
-            //冲突校验
-            courseScheduleList = autoAdjust(classGroup4MixDto,courseScheduleList);
-
+        ClassGroup classGroup = classGroup4MixDto.getClassGroup();
+        if(classGroup == null){
+            //建班
+            classGroup = createClassGroup(classGroup4MixDto);
+            classGroup4MixDto.setClassGroup(classGroup);
             //2、将学生加入新班级(学生注册表,关联表
             List<ClassGroupStudentMapper> classGroupStudentMapperList = new ArrayList<>();
             List<Integer> userIds = new ArrayList<>(); //用户ids
@@ -2214,6 +2201,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             classGroupTeacherMapperDao.classGroupTeachersInsert(classGroupTeacherMapperList);
             //创建IM群组
             addImGroup(classGroup, userIds);
+        }
+        //排课
+        List<CourseSchedule> courseScheduleList = new ArrayList<>();
+        getCourseSchedules(classGroup4MixDto,courseScheduleList);
+
+        //自动排课,校验冲突
+        if(courseScheduleList.size() > 0){
+            //冲突校验
+            courseScheduleList = autoAdjust(classGroup4MixDto,courseScheduleList);
 
             List<Integer> allTeacherIds = classGroupTeacherMapperList.stream()
                     .map(ClassGroupTeacherMapper::getUserId)
@@ -2294,7 +2290,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     //线上小班课
                     if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)||classGroup4MixDto.getCourseType().equals(CourseScheduleType.HIGH)) {
                         teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
-                        Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
+                        Integer classGroupId = classGroupTeacherMapper.getClassGroupId();
+                        if(classGroupId == null){
+                            classGroupId = classGroup.getId();
+                        }
+                        Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupId);
                         if(studentNum>5){
                             studentNum=5;
                         }
@@ -3620,6 +3620,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 if(unitPrice == null){
                     throw new BizException("分部默认课程类型单价不存在,请设置");
                 }
+                settingsDetail.setCourseTotalNum(subNum.intValue());
                 settingsDetail.setCourseType(CourseScheduleType.valueOf(courseType));
                 settingsDetail.setCourseTotalMinuties(Integer.parseInt(jsonObject.get(courseType).toString()) * subNum.intValue());
                 settingsDetail.setCourseCurrentPrice(unitPrice.multiply(new BigDecimal(settingsDetail.getCourseTotalMinuties())));
@@ -3715,10 +3716,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //如果缴费项目不需要审核,那么生成班级以及课表
         if(status == null || status != AUDITING){
             //每种课程类型单独进行排课
+            ClassGroup classGroup = null;
             for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
+                classGroup4MixDto.setClassGroup(classGroup);
                 classGroup4MixDto.setMusicGroupStudentClassAdjustId(musicGroupStudentClassAdjust.getId());
                 classGroup4MixDto.setClassCourseMinute(musicGroupStudentClassAdjust.getClassCourseMinute());
-                classGroupService.classGroupAdjust2(classGroup4MixDto);
+                classGroup = classGroupService.classGroupAdjust2(classGroup4MixDto);
             }
             //排课完成后删除所选课程
             courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds,studentIds);
@@ -3733,7 +3736,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
             List<Long> delCourseIds = courseScheduleDao.findNoStudentCourseIds(courseIds);
             if(delCourseIds != null && delCourseIds.size() > 0){
+                //删除课程
                 courseScheduleDao.deleteCourseSchedulesByClassGroupIds(delCourseIds);
+                //删除教师考勤
+                teacherAttendanceDao.batchDeleteByCourseSchedules(delCourseIds);
+                //删除教师课酬
+                courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds);
             }
             return "学员班级调整完成";
         }else {

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

@@ -972,7 +972,12 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		//获取没有学员的课程列表
 		List<Long> delCourseIds = courseScheduleDao.findNoStudentCourseIds(courseIds);
 		if(delCourseIds != null && delCourseIds.size() > 0){
+			//删除课程
 			courseScheduleDao.deleteCourseSchedulesByClassGroupIds(delCourseIds);
+			//删除教师考勤
+			teacherAttendanceDao.batchDeleteByCourseSchedules(delCourseIds);
+			//删除教师课酬
+			courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds);
 		}
 	}
 

+ 6 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1612,9 +1612,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 price = new BigDecimal(0);
             }
             subtractAmount = subtractAmount.subtract(price);
-            
-            studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
-            
+            if(BigDecimal.ZERO.compareTo(subtractAmount)<0){
+                studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
+            }
             
             //更新服务指标、运营指标
             int remainCourseNum = courseScheduleStudentPaymentDao.countStudentNotStartCourseNumWithCourseType(userId, null);
@@ -1762,8 +1762,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             price = new BigDecimal(0);
         }
         subtractAmount = subtractAmount.subtract(price);
-
-        studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
+        if(BigDecimal.ZERO.compareTo(subtractAmount)<0){
+            studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
+        }
         
         //更新服务指标、运营指标
         int remainCourseNum = courseScheduleStudentPaymentDao.countStudentNotStartCourseNumWithCourseType(userId, null);

+ 6 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -186,6 +186,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 
         //是否在范围内
         boolean isInScore = true;
+        String teacherAttendanceMemo = null;
         if (Objects.nonNull(school)) {
             if (StringUtils.isBlank(school.getLongitudeLatitude())) {
                 if (studentAttendanceInfos.getUpdate().equals(YesOrNoEnum.YES.getCode())) {
@@ -193,12 +194,13 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                     schoolDao.update(school);
                 }
             } else {
-                SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
+                SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE_VIP);
                 double attendanceRange = Double.valueOf(sysConfig.getParanValue());
                 double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
                         school.getLongitudeLatitude());
                 if (distance > attendanceRange) {
                     isInScore = false;
+                    teacherAttendanceMemo = "打卡地点距离教学点" + distance + "米";
                 }
             }
         }
@@ -214,10 +216,11 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         }
 
         teacherAttendance.setSignInTime(courseSchedule.getStartClassTime());
-        teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
+        teacherAttendance.setSignInStatus(isInScore?YesOrNoEnum.YES:YesOrNoEnum.NO);
         teacherAttendance.setSignOutTime(courseSchedule.getEndClassTime());
-        teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
+        teacherAttendance.setSignOutStatus(isInScore?YesOrNoEnum.YES:YesOrNoEnum.NO);
         teacherAttendance.setCurrentClassTimes(classTimes + 1);
+        teacherAttendance.setRemark(teacherAttendanceMemo);
         if (Objects.nonNull(teacherAttendance.getId())) {
             teacherAttendanceDao.update(teacherAttendance);
         } else {

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

@@ -295,7 +295,7 @@
 
     <!-- 查询班级某状态的所有学生 -->
     <select id="findClassStudentList" resultMap="com.ym.mec.biz.dal.dao.StudentRegistrationDao.StudentRegistration">
-        SELECT sr.*,s.name_ subject_name_,su.username_  FROM class_group_student_mapper cgsm
+        SELECT sr.*,s.name_ subject_name_,su.username_,su.gender_  FROM class_group_student_mapper cgsm
         LEFT JOIN student_registration sr ON (sr.user_id_ = cgsm.user_id_ AND sr.music_group_id_ = cgsm.music_group_id_)
         LEFT JOIN sys_user su on sr.user_id_ = su.id_
         LEFT JOIN subject s ON sr.subject_id_ = s.id_