|
@@ -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;
|
|
|
}
|