Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 4 năm trước cách đây
mục cha
commit
1447c92db5

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderStudentDetail.java

@@ -26,6 +26,12 @@ public class MusicGroupPaymentCalenderStudentDetail {
 	/** 现价 */
 	private java.math.BigDecimal courseCurrentPrice;
 
+	/** 可扣减的课程余额 */
+	private java.math.BigDecimal subCourseAmount;
+
+	/** 主班剩余课程价值 */
+	private java.math.BigDecimal masterSubCoursePrice;
+
 	/** 学员需要扣减的课程余额 */
 	private java.math.BigDecimal cutAmount = BigDecimal.ZERO;
 	
@@ -47,6 +53,22 @@ public class MusicGroupPaymentCalenderStudentDetail {
 	/**  */
 	private java.util.Date updateTime;
 
+	public BigDecimal getSubCourseAmount() {
+		return subCourseAmount;
+	}
+
+	public void setSubCourseAmount(BigDecimal subCourseAmount) {
+		this.subCourseAmount = subCourseAmount;
+	}
+
+	public BigDecimal getMasterSubCoursePrice() {
+		return masterSubCoursePrice;
+	}
+
+	public void setMasterSubCoursePrice(BigDecimal masterSubCoursePrice) {
+		this.masterSubCoursePrice = masterSubCoursePrice;
+	}
+
 	public BigDecimal getCutAmount() {
 		return cutAmount;
 	}

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

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

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

@@ -471,6 +471,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		}else {
 			imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC);
 		}
+
 		return batchNo;
 	}