소스 검색

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

yonge 4 년 전
부모
커밋
745532198c
20개의 변경된 파일111개의 추가작업 그리고 189개의 파일을 삭제
  1. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  3. 0 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupOrganizationCourseSettingsDetailDao.java
  4. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  5. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java
  6. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  7. 8 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  8. 7 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  9. 1 121
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  10. 12 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  11. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  12. 18 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  13. 1 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  14. 9 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  15. 5 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  16. 0 8
      mec-biz/src/main/resources/config/mybatis/MusicGroupOrganizationCourseSettingsDetailMapper.xml
  17. 5 1
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  18. 0 2
      mec-im/src/main/java/com/ym/controller/RoomController.java
  19. 3 3
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  20. 1 2
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

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

@@ -1680,4 +1680,13 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<Long> findNoStudentCourseIds(@Param("courseIds") List<Long> courseIds);
+
+    /**
+     *
+     * 根据班级编号获取未开始的主课
+     * @author zouxuan
+     * @param classGroupIds
+     * @return
+     */
+    int findNoStartMasterCourseNum(@Param("classGroupIds") List<Integer> classGroupIds);
 }

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

@@ -428,4 +428,14 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @return
      */
     List<CourseScheduleStudentPayment> queryByIdsAndStudentId(@Param("studentPaymentIds") List<Long> studentPaymentIds, @Param("studentId") Integer studentId, @Param("courseType") String courseType);
+
+    /**
+     * @describe 统计课程组已经开始的课程的应缴费用
+     * @author qnc99
+     * @date 2020/12/8 0008
+     * @param groupId:
+     * @param groupType:
+     * @return java.math.BigDecimal
+     */
+    BigDecimal countFinishCoursePriceWithMusicGroup(@Param("groupId") String groupId, @Param("groupType") GroupType groupType);
 }

+ 0 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupOrganizationCourseSettingsDetailDao.java

@@ -13,13 +13,4 @@ public interface MusicGroupOrganizationCourseSettingsDetailDao extends BaseDAO<I
     int deleteBySettingId(@Param("settingId") Integer settingId);
     
     List<MusicGroupOrganizationCourseSettingsDetail> queryByMusicGroupOrganizationCourseSettingsId(Integer musicGroupOrganizationCourseSettingsId);
-
-    /**
-     * 获取当前班级对应课程类型的价格
-     * @author zouxuan
-     * @param classGroupId
-     * @param courseType
-     * @return
-     */
-    MusicGroupOrganizationCourseSettingsDetail getClassLastSetting(@Param("classGroupId") Integer classGroupId, @Param("courseType") String courseType);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -79,6 +79,16 @@ public class StudentManageListDto {
     
     private String subjectIdList;
 
+    private Integer isNewUser;
+
+    public Integer getIsNewUser() {
+        return isNewUser;
+    }
+
+    public void setIsNewUser(Integer isNewUser) {
+        this.isNewUser = isNewUser;
+    }
+
     public BigDecimal getBalance() {
         return balance;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java

@@ -38,6 +38,16 @@ public class StudentManageQueryInfo extends QueryInfo {
     
     private Integer teacherId;
 
+    private Integer isNewUser;
+
+    public Integer getIsNewUser() {
+        return isNewUser;
+    }
+
+    public void setIsNewUser(Integer isNewUser) {
+        this.isNewUser = isNewUser;
+    }
+
     public Integer getServiceTag() {
         return serviceTag;
     }

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

@@ -481,7 +481,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param mergeClassSplitClassAffirmDto
      * @return
      */
-    void mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) throws InvocationTargetException, IllegalAccessException, Exception;
+    String mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) throws InvocationTargetException, IllegalAccessException, Exception;
 
     /**
      * 进行中乐团-修改-班级详情-学员班级调整-合并结果确认-获取新班级的可排课时长

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

@@ -3606,7 +3606,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             for (String courseType : courseTypes) {
                 Long currentNum = subCourseNumMap.get(courseType);
                 if(currentNum == null){
-                    throw new BizException("所选班级课程类型不一致,请重新选择");
+                    currentNum = 0l;
                 }
                 Long maxNum = map.get(courseType);
                 //如果当前课程类型不需要新增缴费项目
@@ -3615,7 +3615,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 }
                 Long subNum = maxNum - currentNum;
                 //生成缴费项目
-//                MusicGroupOrganizationCourseSettingsDetail settingsDetail = musicGroupOrganizationCourseSettingsDetailDao.getClassLastSetting(classGroupId,courseType);
                 MusicGroupOrganizationCourseSettingsDetail settingsDetail = new MusicGroupOrganizationCourseSettingsDetail();
                 BigDecimal unitPrice = unitPriceMap.get(courseType);
                 if(unitPrice == null){
@@ -3634,7 +3633,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto){
+    public String mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto){
         List<Integer> classGroupIds = mergeClassSplitClassAffirmDto.getClassGroupIds();
         if(classGroupIds == null || classGroupIds.size() == 0){
             throw new BizException("参数校验失败");
@@ -3746,11 +3745,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             if(delCourseIds != null && delCourseIds.size() > 0){
                 courseScheduleDao.deleteCourseSchedulesByClassGroupIds(delCourseIds);
             }
+            return "学员班级调整完成";
         }else {
             //冻结班级
             classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds,1);
             //冻结所选班级的课程
             courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds,1);
+            return "学员班级调整申请已提交,缴费项目审核中";
         }
     }
 
@@ -3777,11 +3778,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if(lockClassGroupIds != null && lockClassGroupIds.size() > 0){
             throw new BizException("所选班级包含审核中的学员班级调整申请");
         }
-        for (Integer classGroupId : classGroupIds) {
-            List<CourseSchedule> courseSchedules = courseScheduleDao.findCoursesByClassGroupId(classGroupId,CourseStatusEnum.NOT_START);
-            if(courseSchedules != null && courseSchedules.size() > 0){
-                throw new BizException("所选班级不能有未开始的临时合并课程");
-            }
+        //所选班级不能有未开始的临时合并课程
+        int courseNum = courseScheduleDao.findNoStartMasterCourseNum(classGroupIds);
+        if(courseNum > 0){
+            throw new BizException("所选班级不能有未开始的临时合并课程");
         }
         List<Integer> allTeacherIds = classGroupTeacherMapperList.stream()
                 .map(ClassGroupTeacherMapper::getUserId)

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

@@ -328,6 +328,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 		JSONObject jsonObject = JSON.parseObject(courseDefaultMinutes);
 
 		for (Integer studentId : studentIds) {
+			List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = null;
 			for (int i = 0; i < courseSchedules.size(); i++) {
 				CourseSchedule courseSchedule = courseSchedules.get(i);
 				//优先处理之前的剩余课程
@@ -353,7 +354,9 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 					}
 				}
 				//处理缴费的排课信息
-				List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudentAndCourseTypeAndCourseMinutes(batchNo, studentId,courseSchedule.getType());
+				if(musicGroupPaymentStudentCourseDetails == null){
+					musicGroupPaymentStudentCourseDetails = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudentAndCourseTypeAndCourseMinutes(batchNo, studentId,courseSchedule.getType());
+				}
 				if(musicGroupPaymentStudentCourseDetails == null || musicGroupPaymentStudentCourseDetails.size() == 0){
 					throw new BizException("学员缴费详情获取失败");
 				}
@@ -388,9 +391,11 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 					if(typeCourseDuration > musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes()){
 						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes());
 					}else{
-						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(typeCourseDuration);
+						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getUsedCourseMinutes() + typeCourseDuration);
 					}
 				}
+			}
+			if(musicGroupPaymentStudentCourseDetails != null && musicGroupPaymentStudentCourseDetails.size() > 0){
 				musicGroupPaymentStudentCourseDetailDao.batchUpdate(musicGroupPaymentStudentCourseDetails);
 			}
 		}

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

@@ -511,9 +511,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         Date date = DateUtil.addMonths(now, -1);
         String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
         String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
-        Integer settlementClassMinutes = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_CLASS_MINUTES).getParanValue());
-        Integer singleClassTime = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_SINGLE_CLASS_MINUTES).getParanValue());
-        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(),"yyyy-MM-dd");
+
         //获取上个月的课程计划
         List<CourseSchedule> yesterdayCourseSchedules = courseScheduleDao.findCourseScheduleWithDate(startDate,endDate);
         //课程编号列表
@@ -560,100 +558,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     .collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId, Collectors.counting()));
         }
 
-        //课程对应乐团结算方式集合
-        List<Map<String, String>> musicGroupSettlementTypeByCourse = courseScheduleTeacherSalaryDao.findMusicGroupSettlementTypeByCourse(courseScheduleIds);
-        Map<String, String> musicGroupSettlementsMap = MapUtil.convertMybatisMap(musicGroupSettlementTypeByCourse);
-
-        //教师对应课程列表集合
-        Map<Integer, List<CourseScheduleTeacherSalary>> teacherSalarysByTeacher = courseScheduleTeacherSalaries.stream()
-                .collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getUserId));
-
         //所有老师编号
         List<Integer> allTeacherIds = courseScheduleTeacherSalaries.stream()
                 .map(CourseScheduleTeacherSalary::getUserId)
                 .collect(Collectors.toList());
 
-        //所有教师列表
-        List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
-        Map<Integer, Teacher> teacherMap = teachers.stream()
-                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
-
         //所有老师默认乐团课酬
         List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(allTeacherIds);
         Map<CourseSchedule.CourseScheduleType, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByCourseType = teacherDefaultMusicGroupSalaries.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getCourseScheduleType));
 
-
-        //教师对应的每个教学点的总课时
-        Map<Integer, Map<Integer, Map<Date, Integer>>> teacherClassMinutesMap = new HashMap<>();
-        //计算老师对应的总课时
-        teacherSalarysByTeacher.forEach((teacherId, teacherSalarys) -> {
-            //当前老师所在课程的编号列表
-            List<Long> currentTeacherCourscheduleIds = teacherSalarys.stream()
-                    .map(CourseScheduleTeacherSalary::getCourseScheduleId)
-                    .collect(Collectors.toList());
-            //当前老师的课程列表
-            List<CourseSchedule> currentTeacherCourseSchedules = yesterdayCourseSchedules.stream()
-                    .filter(courseSchedule -> currentTeacherCourscheduleIds.contains(courseSchedule.getId()))
-                    .collect(Collectors.toList());
-            //根据教学点将当前老师的课程分组
-            Map<Integer, List<CourseSchedule>> schoolCourseSchedules = currentTeacherCourseSchedules.stream()
-                    .filter(courseSchedule -> Objects.nonNull(courseSchedule.getSchoolId()))
-                    .collect(Collectors.groupingBy(CourseSchedule::getSchoolId));
-            Map<Integer, Map<Date,Integer>> schoolClassMinutesMap = new HashMap<>();
-            for (Integer schoolId : schoolCourseSchedules.keySet()) {
-                //当前教学点的课程
-                List<CourseSchedule> currentSchoolCourseSchedules = schoolCourseSchedules.get(schoolId);
-                Map<Date, List<CourseSchedule>> courseScheduleWithDate = currentSchoolCourseSchedules.stream()
-                        .collect(Collectors.groupingBy(CourseSchedule::getClassDate));
-                Map<Date,Integer> dataClassMinutesMpa = new HashMap<>();
-                for (Date classDate:courseScheduleWithDate.keySet()){
-                    Integer classMinutes = 0;
-                    List<CourseSchedule> classCourses = courseScheduleWithDate.get(classDate);
-                    for (CourseSchedule courseSchedule : classCourses) {
-                        //如果课程为单机课或者为合奏课,则算入总课时长
-                        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.SINGLE)
-                                || courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MIX)) {
-                            classMinutes += DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
-                        }
-                    }
-                    dataClassMinutesMpa.put(classDate, classMinutes);
-                }
-                schoolClassMinutesMap.put(schoolId, dataClassMinutesMpa);
-            }
-            teacherClassMinutesMap.put(teacherId, schoolClassMinutesMap);
-        });
         //计算课酬
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
-            boolean durationIsChange = false;
             //当前课酬对应的课程信息
             CourseSchedule courseSchedule = courseScheduleIdMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-            Map<Integer, Map<Date,Integer>> schoolClassMinutesMap = teacherClassMinutesMap.get(courseScheduleTeacherSalary.getUserId());
-            Map<Date,Integer> classDateMinutes = schoolClassMinutesMap.get(courseSchedule.getSchoolId());
-
-            //结算方式
-            String settlementType = musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-            if(StringUtils.isEmpty(settlementType)){
-                LOGGER.error("未指定课酬结算方式[{}]", courseScheduleTeacherSalary.getId());
-            }
-            Teacher teacher=teacherMap.get(courseScheduleTeacherSalary.getUserId());
-            //如果当前教师是在指定日期之后入职的,则按照3.0的方式结算
-            if(Objects.nonNull(teacher.getEntryDate())
-                    &&(teacher.getEntryDate().after(entryDate)||teacher.getEntryDate().getTime()==entryDate.getTime())){
-                settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
-            }
-
-            //当前课程的时长
-            int duration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
-            //如果是单技课或者合奏课并且结算方式为3.0
-            if (Objects.nonNull(classDateMinutes)&&settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY.getCode())
-                    &&(courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.SINGLE)
-                    || courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MIX))) {
-                Integer schoolClassMinutes = classDateMinutes.get(courseSchedule.getClassDate());
-                if (schoolClassMinutes >= settlementClassMinutes && duration < singleClassTime) {
-                    duration = singleClassTime;
-                    durationIsChange = true;
-                }
-            }
 
             if(CourseSchedule.CourseScheduleType.HIGH.equals(courseSchedule.getType())){
                 courseSchedule.setType(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
@@ -688,43 +605,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 if(Objects.isNull(teacherSalary)){
                     teacherSalary = BigDecimal.ZERO;
                 }
-            }else if(durationIsChange&&!UNIT_PRICE_COURSE_TYPES.contains(courseSchedule.getType())){
-                //根据课程类型获取对应的默认课酬设置列表
-                List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
-                if (CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)) {
-                    LOGGER.error("存在未指定结算方式的课程类型[{}]", courseScheduleTeacherSalary.getId());
-                }
-
-                //根据教师编号将对应结算方式下的默认课酬设置分组
-                Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
-
-                //课程时长与结算单位时长占比
-                BigDecimal classTimeDuty = new BigDecimal(duration);
-                BigDecimal teacherDefaultSalary = new BigDecimal(0);
-
-                //如果结算方式是教师默认课酬
-                if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
-                    classTimeDuty = classTimeDuty.divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                    if(Objects.nonNull(teacherDefaultMusicGroupSalaryWithTeacherId)){
-                        teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-                    }
-                } else if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY.getCode())) {
-                    classTimeDuty = classTimeDuty.divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                    if(Objects.nonNull(teacherDefaultMusicGroupSalaryWithTeacherId)){
-                        teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
-                    }
-                }
-
-                if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                } else if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
-                    teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
-                }
-
-                teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
             }else{
                 teacherSalary=courseScheduleTeacherSalary.getExpectSalary();
             }

+ 12 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -148,24 +148,15 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 throw new BizException("您已报考过选择的考级项目");
             } else {
                 if (!degreeRegistration.getIsRepay() && degree.getStatus().equals(1)) {
-                    List<StudentPaymentOrder> orders = studentPaymentOrderDao.findPaymentOrderByGroupType(degreeRegistration.getUserId(), degreeRegistration.getSporadicId(), "SPORADIC", DealStatusEnum.ING);
-                    if (orders != null && orders.size() > 0) {
-                        List<StudentPaymentOrderDetail> studentPaymentOrderDetails = studentPaymentOrderDetailDao.getOrderDetail(orders.get(0).getId());
-                        Map<String, Object> result = new HashMap<>();
-                        result.put("degree", degree);
-                        if(!CollectionUtils.isEmpty(studentPaymentOrderDetails)){
-                            result.put("additionCourseInfo", studentPaymentOrderDetails.get(0).getGoodsIdList());
-                        }
-                        return BaseController.failed(HttpStatus.CONTINUE, result, "");
-                    }
+                    return BaseController.failed(HttpStatus.CONTINUE, "");
                 }
-                degreeRegistration.setMoney(degree.getMoney());
-                degreeRegistration.setTheoryMoney(degree.getTheoryMoney());
-                degreeRegistration.setId(degree.getId());
+                degree.setStatus(0);
+                degreeRegistrationDao.update(degree);
+
                 degreeRegistration.setStatus(1);
                 degreeRegistration.setCreateTime(nowDate);
                 degreeRegistration.setUpdateTime(nowDate);
-                degreeRegistrationDao.update(degreeRegistration);
+                degreeRegistrationDao.insert(degreeRegistration);
             }
         }
 
@@ -201,6 +192,10 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
 
             BigDecimal practiceUnitPrice = practiceGroupSellPrice.getOnceOriginalPrice(),
                     vipUnitPrice = practiceGroupSellPrice.getVipOneStudentTwelveCourseActivityPriceWithNewUser(), highUnitPrice;
+
+            if(additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.HIGH)){
+                historyHighNum = historyHighNum + additionCourseInfo.get(CourseSchedule.CourseScheduleType.HIGH);
+            }
             if(student.getIsNewUser()){
                 highUnitPrice = practiceGroupSellPrice.getHighOnlineTenCourseOriginalPriceWithNewUser();
                 if(additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.VIP)){
@@ -209,9 +204,6 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 if(historyVipNum<=0){
                     additionCourseInfo.remove(CourseSchedule.CourseScheduleType.PRACTICE);
                 }
-                if(additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.HIGH)){
-                    historyHighNum = historyHighNum + additionCourseInfo.get(CourseSchedule.CourseScheduleType.HIGH);
-                }
                 boolean vipMoreThan2 = historyVipNum>=2;
                 if(vipMoreThan2){
                     if(FREE_PRICE_LEVEL.contains(degreeRegistration.getLevel())){
@@ -334,7 +326,9 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             throw new BizException("订单更新失败");
         }
 
-        if (degree == null || degree.getStatus().equals(2)) {
+        if (degree == null || !degree.getStatus().equals(1)) {
+            studentPaymentOrder.setMemo("订单状态已变更");
+            studentPaymentOrderService.update(studentPaymentOrder);
             return true;
         }
         degree.setOrderNo(studentPaymentOrder.getOrderNo());

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

@@ -1050,7 +1050,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		//如果是报名,并且所有的报名都审核通过,需要修改乐团状态
 		if (calender.getPaymentType() == MUSIC_APPLY) {
 			MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
-			musicGroup.setStatus(MusicGroupStatusEnum.DRAFT);
+			musicGroup.setStatus(MusicGroupStatusEnum.AUDIT_FAILED);
 			musicGroup.setUpdateTime(date);
 			musicGroupDao.update(musicGroup);
 			//记录操作日志

+ 18 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -6,15 +6,7 @@ import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
@@ -1613,8 +1605,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             
             //操作人
             SysUser operator = sysUserFeignService.queryUserInfo();
+
+            BigDecimal price = courseScheduleStudentPaymentDao.countFinishCoursePriceWithMusicGroup(musicGroupId, GroupType.MUSIC);
+            BigDecimal subtractAmount = studentRegistration.getSurplusCourseFee();
+            if(Objects.isNull(price)){
+                price = new BigDecimal(0);
+            }
+            subtractAmount = subtractAmount.subtract(price);
             
-            studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, studentRegistration.getSurplusCourseFee().negate(), reason, operator.getId());
+            studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
             
             
             //更新服务指标、运营指标
@@ -1756,8 +1755,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         
         //操作人
         SysUser operator = sysUserFeignService.queryUserInfo();
-        
-        studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, studentRegistration.getSurplusCourseFee().negate(), reason, operator.getId());
+
+        BigDecimal price = courseScheduleStudentPaymentDao.countFinishCoursePriceWithMusicGroup(musicGroupId, GroupType.MUSIC);
+        BigDecimal subtractAmount = studentRegistration.getSurplusCourseFee();
+        if(Objects.isNull(price)){
+            price = new BigDecimal(0);
+        }
+        subtractAmount = subtractAmount.subtract(price);
+
+        studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
         
         //更新服务指标、运营指标
         int remainCourseNum = courseScheduleStudentPaymentDao.countStudentNotStartCourseNumWithCourseType(userId, null);

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

@@ -1076,7 +1076,7 @@
           #{classGroupId}
       </foreach>
       <if test="lockFlag != null">
-          lock_flag_ = #{lockFlag}
+          AND lock_flag_ = #{lockFlag}
       </if>
     </select>
 

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

@@ -3425,6 +3425,15 @@
         </foreach>
         GROUP BY cssp.course_schedule_id_,cs.id_  HAVING COUNT(cssp.id_) = 0
     </select>
+    <select id="findNoStartMasterCourseNum" resultType="int">
+        SELECT count(new_course_id_) FROM course_schedule
+        WHERE new_course_id_ IN (SELECT id_ FROM course_schedule
+        WHERE class_group_id_ IN
+        <foreach collection="classGroupIds" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
+        AND CONCAT(class_date_,' ',start_class_time_) > NOW())
+    </select>
     <select id="getLock" resultMap="CourseSchedule">
         SELECT * FROM course_schedule WHERE id_ = #{courseId} FOR UPDATE
     </select>

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -669,4 +669,9 @@
 		</foreach>
 		AND cssp.user_id_ = #{studentId} AND cs.type_ = #{courseType}
 	</select>
+
+	<select id="countFinishCoursePriceWithMusicGroup" resultType="java.math.BigDecimal">
+		SELECT SUM(expect_price_)-SUM(actual_price_) FROM course_schedule_student_payment
+		WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+	</select>
 </mapper>

+ 0 - 8
mec-biz/src/main/resources/config/mybatis/MusicGroupOrganizationCourseSettingsDetailMapper.xml

@@ -117,12 +117,4 @@
         SELECT * FROM music_group_organization_course_settings_detail
         where music_group_organization_course_settings_id_ = #{musicGroupOrganizationCourseSettingsId}
     </select>
-    <select id="getClassLastSetting" resultMap="MusicGroupOrganizationCourseSettingsDetail">
-        SELECT cssp.original_price_ course_original_price_,cssp.expect_price_ course_current_price_
-		FROM course_schedule cs
-		LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
-		WHERE cs.class_group_id_ = #{classGroupId} AND cs.type_ = #{courseType} AND cssp.original_price_ IS NOT NULL
-		ORDER BY cs.class_date_,cs.start_class_time_ DESC
-		LIMIT 1
-    </select>
 </mapper>

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

@@ -62,6 +62,7 @@
         <result property="teacherName" column="teacher_name_"/>
         <result property="teacherId" column="teacher_id_"/>
         <result property="subjectIdList" column="subject_id_list_"/>
+        <result property="isNewUser" column="is_new_user_"/>
     </resultMap>
 
     <sql id="queryCondition">
@@ -150,7 +151,7 @@
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
         SELECT o.`name_` organ_name_,s.`user_id_` ,su.`username_` ,su.`phone_` parents_phone_,su.`real_name_` ,su.`gender_` , su.organ_id_,
 		tu.`real_name_` teacher_name_,IF(s.service_tag_=2,0,s.service_tag_) service_tag_ ,s.`operating_tag_` , suca.`course_balance_` ,sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,
-		case when su.password_ is null then false else true end isActive_
+		case when su.password_ is null then false else true end isActive_,s.is_new_user_
 		FROM `student` s LEFT JOIN `sys_user` su on s.`user_id_` = su.`id_`
 		LEFT JOIN `organization` o on o.`id_` = su.`organ_id_`
 		LEFT JOIN `sys_user` tu on tu.`id_` = s.`teacher_id_` 
@@ -184,6 +185,9 @@
             <if test="teacherId != null">
                 AND s.teacher_id_ = #{teacherId}
             </if>
+            <if test="isNewUser != null">
+                AND s.is_new_user_ = #{isNewUser}
+            </if>
         </where>
     </sql>
 

+ 0 - 2
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -22,8 +22,6 @@ public class RoomController{
     RoomService roomService;
     @Autowired
     MessageService messageService;
-    @Autowired
-    private RedisTemplate<String,String> redisTemplate;
 
     @RequestMapping(value = "/join", method = RequestMethod.POST)
     public Object joinRoom(@RequestBody ReqUserData data) throws Exception {

+ 3 - 3
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -157,7 +157,7 @@ public class RoomServiceImpl implements RoomService {
         }else {
             roomId = "S" + roomId;
         }
-        redisTemplate.opsForValue().set(roomId + userId,courseSchedule.getId().toString());
+        redisTemplate.opsForValue().setIfAbsent(roomId + userId,courseSchedule.getId().toString());
         log.info("joinRoom current: roomId={}, userId={}", roomId, userId);
         Date curTime = DateTimeUtils.currentUTC();
 
@@ -279,7 +279,7 @@ public class RoomServiceImpl implements RoomService {
         if(redisTemplate.hasKey(leaveSuccessKey)){
             redisTemplate.delete(leaveSuccessKey);
         }
-        redisTemplate.opsForValue().set(joinSuccessKey,roomId,2l,TimeUnit.SECONDS);
+        redisTemplate.opsForValue().setIfAbsent(joinSuccessKey,roomId,2l,TimeUnit.SECONDS);
         log.info("joinRoomSuccess : roomId={}, userId={}", roomId, userId);
 
         RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
@@ -412,7 +412,7 @@ public class RoomServiceImpl implements RoomService {
         if(redisTemplate.hasKey(joinSuccessKey)){
             redisTemplate.delete(joinSuccessKey);
         }
-        redisTemplate.opsForValue().set(leaveSuccessKey,roomId,2,TimeUnit.SECONDS);
+        redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey,roomId,2,TimeUnit.SECONDS);
         //记录
         log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
         RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());

+ 1 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -354,8 +354,7 @@ public class ClassGroupController extends BaseController {
     @PostMapping("/mergeClassSplitClassAffirm")
     @PreAuthorize("@pcs.hasPermissions('classGroup/mergeClassSplitClassAffirm')")
     public HttpResponseResult mergeClassSplitClassAffirm(@RequestBody MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) throws Exception {
-        classGroupService.mergeClassSplitClassAffirm(mergeClassSplitClassAffirmDto);
-        return succeed();
+        return succeed(classGroupService.mergeClassSplitClassAffirm(mergeClassSplitClassAffirmDto));
     }
 
     @ApiOperation(value = "进行中乐团-修改-班级详情-学员班级调整-合并结果确认-获取新班级可排课时长")