|  | @@ -2919,6 +2919,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | +    public List<ClassGroupTeachersDto> queryClassGroupPage(ClassGroupQueryInfo queryInfo) {
 | 
	
		
			
				|  |  | +        return null;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  |      public Boolean addImGroup(ClassGroup classGroup, List<Integer> userIds) {
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
 | 
	
		
			
				|  |  |          List<Integer> userIdList = new ArrayList<>();
 | 
	
	
		
			
				|  | @@ -3527,19 +3532,39 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    public Object queryStudentPaymentCalenders(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
 | 
	
		
			
				|  |  | -        ArrayList masterClassGroupId = new ArrayList();
 | 
	
		
			
				|  |  | -        masterClassGroupId.add(mergeClassSplitClassAffirmDto.getMasterClassGroupId());
 | 
	
		
			
				|  |  | +    public Map<Integer, List<StudentPaymentCalenderDto>> queryStudentPaymentCalenders(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
 | 
	
		
			
				|  |  |          //获取主班剩余时长
 | 
	
		
			
				|  |  | -        Map<String, Long> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.findClassMaxCourseNumMap(masterClassGroupId));
 | 
	
		
			
				|  |  | -        //获取其他班级剩余时长
 | 
	
		
			
				|  |  | -        Map<String, Long> subMap = MapUtil.convertIntegerMap(courseScheduleDao.findClassMaxCourseNumMap(mergeClassSplitClassAffirmDto.getClassGroupIds()));
 | 
	
		
			
				|  |  | +        Map<String, Long> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseNumMap(mergeClassSplitClassAffirmDto.getMasterClassGroupId()));
 | 
	
		
			
				|  |  | +        if(masterMap.size() <= 0){
 | 
	
		
			
				|  |  | +            throw new BizException("所选主班没有剩余课程,请重新选择");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //获取学员列表
 | 
	
		
			
				|  |  | +        Map<Integer, String> userNames = MapUtil.convertMybatisMap(teacherDao.queryUsernameByIds(mergeClassSplitClassAffirmDto.getStudentIds()));
 | 
	
		
			
				|  |  | +        Map<Integer, String> phoneMaps = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(StringUtils.join(mergeClassSplitClassAffirmDto.getStudentIds(),",")));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<Integer, Integer> studentCLassMap = new HashMap<>();
 | 
	
		
			
				|  |  | +        List<Map<Integer, BigDecimal>> surplusCourseFeeMapList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        List<Map<Integer, String>> classGroupStudents = mergeClassSplitClassAffirmDto.getClassGroupStudents();
 | 
	
		
			
				|  |  | +        for (Map<Integer, String> classGroupStudent : classGroupStudents) {
 | 
	
		
			
				|  |  | +            for (Integer integer : classGroupStudent.keySet()) {
 | 
	
		
			
				|  |  | +                //获取学员剩余课程费用
 | 
	
		
			
				|  |  | +                surplusCourseFeeMapList.addAll(studentRegistrationDao.querySurplusCourseFeeByClassGroupId(integer,classGroupStudent.get(integer)));
 | 
	
		
			
				|  |  | +                String[] s = classGroupStudent.get(integer).split(",");
 | 
	
		
			
				|  |  | +                for (String s1 : s) {
 | 
	
		
			
				|  |  | +                    studentCLassMap.put(Integer.parseInt(s1),integer);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //学员剩余课程费用
 | 
	
		
			
				|  |  | +        Map<Integer, BigDecimal> surplusCourseFeeMap = MapUtil.convertIntegerMap(surplusCourseFeeMapList);
 | 
	
		
			
				|  |  |          //获取分布默认的课程类型单价
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupDao.findByClassGroupId(mergeClassSplitClassAffirmDto.getMasterClassGroupId());
 | 
	
		
			
				|  |  |          Map<String, BigDecimal> unitPriceMap = MapUtil.convertIntegerMap(organizationCourseUnitPriceSettingsDao.queryMapByOrganIdAndChargeTypeId(musicGroup.getChargeTypeId(), musicGroup.getOrganId()));
 | 
	
		
			
				|  |  |          Set<String> masterKeySet = masterMap.keySet();
 | 
	
		
			
				|  |  |          //计算主班课程类型剩余价值
 | 
	
		
			
				|  |  |          Map<String, BigDecimal> masterTotalPriceMap = new HashMap<>(masterKeySet.size());
 | 
	
		
			
				|  |  | +        //学员缴费项目列表
 | 
	
		
			
				|  |  | +        List<StudentPaymentCalenderDto> studentPaymentCalenderDtos = new ArrayList<>();
 | 
	
		
			
				|  |  |          for (String s : masterKeySet) {
 | 
	
		
			
				|  |  |              BigDecimal unitPrice = unitPriceMap.get(s);
 | 
	
		
			
				|  |  |              if (unitPrice == null) {
 | 
	
	
		
			
				|  | @@ -3551,13 +3576,46 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |                  masterTotalPriceMap.put(s,BigDecimal.ZERO);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              //总价四舍五入取整
 | 
	
		
			
				|  |  | -            masterTotalPriceMap.put(s,unitPrice.multiply(new BigDecimal(courseTime)).setScale(0, BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | +            BigDecimal totalPrice = unitPrice.multiply(new BigDecimal(courseTime)).setScale(0, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | +            masterTotalPriceMap.put(s,totalPrice);
 | 
	
		
			
				|  |  | +            //课程余额转移
 | 
	
		
			
				|  |  | +            for (Integer studentId : studentCLassMap.keySet()) {
 | 
	
		
			
				|  |  | +                //学员剩余课程余额
 | 
	
		
			
				|  |  | +                BigDecimal bigDecimal = surplusCourseFeeMap.get(studentId);
 | 
	
		
			
				|  |  | +                //创建学员缴费项目
 | 
	
		
			
				|  |  | +                StudentPaymentCalenderDto calenderDto = new StudentPaymentCalenderDto();
 | 
	
		
			
				|  |  | +                calenderDto.setClassGroupId(studentCLassMap.get(studentId));
 | 
	
		
			
				|  |  | +                //如果剩余课程余额小于等于0
 | 
	
		
			
				|  |  | +                if(bigDecimal.doubleValue() <= 0d){
 | 
	
		
			
				|  |  | +                    calenderDto.setCourseCurrentPrice(totalPrice);
 | 
	
		
			
				|  |  | +                    calenderDto.setCourseOriginalPrice(totalPrice);
 | 
	
		
			
				|  |  | +                }else {
 | 
	
		
			
				|  |  | +                    //如果剩余课程余额大于等于总价值,那么补交0元
 | 
	
		
			
				|  |  | +                    if(bigDecimal.doubleValue() >= totalPrice.doubleValue()){
 | 
	
		
			
				|  |  | +                        calenderDto.setCourseCurrentPrice(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                        calenderDto.setCourseOriginalPrice(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                    }else {
 | 
	
		
			
				|  |  | +                        calenderDto.setCourseCurrentPrice(totalPrice.subtract(bigDecimal));
 | 
	
		
			
				|  |  | +                        calenderDto.setCourseOriginalPrice(totalPrice.subtract(bigDecimal));
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    //剩余课程余额减去主班对应课程类型总的课程价值,负数就是需要补交的金额
 | 
	
		
			
				|  |  | +//                    bigDecimal = bigDecimal.subtract(totalPrice);
 | 
	
		
			
				|  |  | +                    surplusCourseFeeMap.put(studentId,bigDecimal.subtract(totalPrice));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                calenderDto.setCourseTime(courseTime);
 | 
	
		
			
				|  |  | +                calenderDto.setCourseType(s);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                calenderDto.setPhone(phoneMaps.get(studentId));
 | 
	
		
			
				|  |  | +                calenderDto.setUserId(studentId);
 | 
	
		
			
				|  |  | +                calenderDto.setUsername(userNames.get(studentId));
 | 
	
		
			
				|  |  | +                studentPaymentCalenderDtos.add(calenderDto);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        return null;
 | 
	
		
			
				|  |  | +        return studentPaymentCalenderDtos.stream().collect(Collectors.groupingBy(e -> e.getClassGroupId()));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    public Map<String, Long> querySubCourseTime(List<Integer> classGroupIds) {
 | 
	
		
			
				|  |  | -        return MapUtil.convertIntegerMap(courseScheduleDao.findClassMaxCourseNumMap(classGroupIds));
 | 
	
		
			
				|  |  | +    public Map<String, Long> querySubCourseTime(Integer classGroupId) {
 | 
	
		
			
				|  |  | +        return MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseNumMap(classGroupId));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |