| 
					
				 | 
			
			
				@@ -3672,10 +3672,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<Integer, Integer> studentCLassMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Map<Integer, BigDecimal>> surplusCourseFeeMapList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Map<String,String>> classGroupStudents = (List<Map<String,String>>)JSON.parse(classGroupStudentMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Integer,Map<String, BigDecimal>> classGroupUnitPriceMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Integer,Map<String, BigDecimal>> classSubCoursePriceMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (Map<String, String> classGroupStudent : classGroupStudents) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (String integer : classGroupStudent.keySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //获取学员剩余课程费用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 surplusCourseFeeMapList.addAll(studentRegistrationDao.querySurplusCourseFeeByClassGroupId(Integer.parseInt(integer),classGroupStudent.get(integer))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MusicGroup byClassId = musicGroupDao.findByClassId(Integer.parseInt(integer)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //学员可能来自不同的分部,获取对应的课程单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                classGroupUnitPriceMap.put(Integer.parseInt(integer),MapUtil.convertIntegerMap(organizationCourseUnitPriceSettingsDao.queryMapByOrganIdAndChargeTypeId(byClassId.getChargeTypeId(), byClassId.getOrganId()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //获取班级剩余课程时长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                classSubCoursePriceMap.put(Integer.parseInt(integer),MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseTimeMap(masterClassGroupId))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 String[] s = classGroupStudent.get(integer).split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (String s1 : s) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     studentCLassMap.put(Integer.parseInt(s1),Integer.parseInt(integer)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3686,22 +3693,26 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<Integer, BigDecimal> surplusCourseFeeMap = MapUtil.convertIntegerMap(surplusCourseFeeMapList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取分布默认的课程类型单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(masterClassGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<String, BigDecimal> unitPriceMap = MapUtil.convertIntegerMap(organizationCourseUnitPriceSettingsDao.queryMapByOrganIdAndChargeTypeId(musicGroup.getChargeTypeId(), musicGroup.getOrganId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, BigDecimal> masterUnitPriceMap = MapUtil.convertIntegerMap(organizationCourseUnitPriceSettingsDao.queryMapByOrganIdAndChargeTypeId(musicGroup.getChargeTypeId(), musicGroup.getOrganId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Set<String> masterKeySet = masterMap.keySet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //计算主班课程类型剩余价值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<String, BigDecimal> masterTotalPriceMap = new HashMap<>(masterKeySet.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        Map<String, BigDecimal> masterTotalPriceMap = new HashMap<>(masterKeySet.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //计算从班课程类型剩余价值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String,Map<Integer, BigDecimal>> studentTotalPriceMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //学员缴费项目列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<MusicGroupPaymentCalenderStudentDetail> musicGroupPaymentCalenderStudentDetails = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (String s : masterKeySet) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            BigDecimal unitPrice = unitPriceMap.get(s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (unitPrice == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal masterUnitPrice = masterUnitPriceMap.get(s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (masterUnitPrice == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 throw new BizException("分部默认课程类型单价不存在,请设置"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            BigDecimal courseTime = masterMap.get(s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal masterCourseTime = masterMap.get(s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //获取主班剩余课程价值,按分部默认单价计算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //总价四舍五入取整 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            BigDecimal totalPrice = unitPrice.multiply(courseTime).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            masterTotalPriceMap.put(s,totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal masterTotalPrice = masterUnitPrice.multiply(masterCourseTime).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            masterTotalPriceMap.put(s,masterTotalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //获取学员剩余课程价值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Integer, BigDecimal> totalPriceMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //课程余额转移 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (Integer studentId : studentCLassMap.keySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //学员剩余课程余额 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3709,24 +3720,37 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //创建学员缴费项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 MusicGroupPaymentCalenderStudentDetail calenderDto = new MusicGroupPaymentCalenderStudentDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 calenderDto.setClassGroupId(studentCLassMap.get(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //学员班级剩余课程价值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<String, BigDecimal> subCoursePriceMap = classSubCoursePriceMap.get(calenderDto.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<String, BigDecimal> unitPriceMap = classGroupUnitPriceMap.get(calenderDto.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal courseTime = subCoursePriceMap.get(s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal unitPrice = unitPriceMap.get(s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (unitPrice == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new BizException("分部默认课程类型单价不存在,请设置"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal totalPrice = unitPrice.multiply(courseTime).setScale(0, BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                totalPriceMap.put(studentId,totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                calenderDto.setMasterSubCoursePrice(masterTotalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal subCourseAmount = new BigDecimal(Math.min(Math.min(masterTotalPrice.doubleValue(), totalPrice.doubleValue()), bigDecimal.doubleValue())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                calenderDto.setSubCourseAmount(subCourseAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //如果剩余课程余额小于等于0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(bigDecimal.doubleValue() <= 0d){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    calenderDto.setCourseCurrentPrice(totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    calenderDto.setCourseOriginalPrice(totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(subCourseAmount.doubleValue() <= 0d){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    calenderDto.setCourseCurrentPrice(masterTotalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    calenderDto.setCourseOriginalPrice(masterTotalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //如果剩余课程余额大于等于总价值,那么补交0元 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if(bigDecimal.doubleValue() >= totalPrice.doubleValue()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        calenderDto.setCutAmount(totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(subCourseAmount.doubleValue() >= masterTotalPrice.doubleValue()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        calenderDto.setCutAmount(masterTotalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         calenderDto.setCourseCurrentPrice(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         calenderDto.setCourseOriginalPrice(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        calenderDto.setCourseCurrentPrice(totalPrice.subtract(bigDecimal)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        calenderDto.setCutAmount(bigDecimal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        calenderDto.setCourseOriginalPrice(totalPrice.subtract(bigDecimal)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        calenderDto.setCourseCurrentPrice(masterTotalPrice.subtract(subCourseAmount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        calenderDto.setCutAmount(subCourseAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        calenderDto.setCourseOriginalPrice(masterTotalPrice.subtract(subCourseAmount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //剩余课程余额减去主班对应课程类型总的课程价值,负数就是需要补交的金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //                    bigDecimal = bigDecimal.subtract(totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    surplusCourseFeeMap.put(studentId,bigDecimal.subtract(totalPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    surplusCourseFeeMap.put(studentId,bigDecimal.subtract(masterTotalPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 calenderDto.setCourseTime(courseTime.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 calenderDto.setCourseType(s); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3736,6 +3760,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 calenderDto.setUsername(userNames.get(studentId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 musicGroupPaymentCalenderStudentDetails.add(calenderDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            studentTotalPriceMap.put(s,totalPriceMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return musicGroupPaymentCalenderStudentDetails; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 |