Bladeren bron

Merge branch 'master' of http://git.dayaedu.com/yonge/mec into master_teacherSalary_2020-12-11

zouxuan 4 jaren geleden
bovenliggende
commit
4fb7fa2935
19 gewijzigde bestanden met toevoegingen van 239 en 178 verwijderingen
  1. 11 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java
  2. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherCourseSalaryDetail4WebDto.java
  3. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleTeacherSalary.java
  4. 18 30
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  5. 6 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  6. 14 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  7. 21 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  8. 26 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  10. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  11. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  12. 87 86
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  13. 6 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  14. 4 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  15. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  16. 6 8
      mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java
  17. 5 2
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  18. 1 1
      mec-web/src/main/resources/columnMapper.ini
  19. BIN
      mec-web/src/main/resources/excelTemplate/财务管理导入模板.xls

+ 11 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java

@@ -122,18 +122,25 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
     List<StudentPaymentOrderDetail> getOrderGoodies(@Param("orderIds") List<Long> orderIds);
 
     /**
-     * @describe 获取用户指定类型的订单
-     * @author qnc99
-     * @date 2020/12/7 0007
      * @param userId:
      * @param orderType:
      * @return java.util.List<com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail>
+     * @describe 获取用户指定类型的订单
+     * @author qnc99
+     * @date 2020/12/7 0007
      */
     List<StudentPaymentOrderDetail> getWithUserAndOrderType(@Param("userId") Integer userId,
-                                                            @Param("orderType")OrderTypeEnum orderType);
+                                                            @Param("orderType") OrderTypeEnum orderType);
 
     List<StudentPaymentOrderDetail> getWithIds(@Param("paymentOrderIds") List<Long> paymentOrderIds);
 
 
     List<StudentPaymentOrderDetail> getOrderDetailByType(@Param("orderId") Long orderId, @Param("orderDetailTypes") List<OrderDetailTypeEnum> orderDetailTypes);
+
+    /**
+     * 根据订单号获取订单详情
+     * @param orderId
+     * @return
+     */
+    List<StudentPaymentOrderDetail> getOrderDetailByOrderId(@Param("orderId") Long orderId);
 }

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

@@ -61,6 +61,16 @@ public class TeacherCourseSalaryDetail4WebDto {
 
     private String memo;
 
+    private String deductionReason;
+
+    public String getDeductionReason() {
+        return deductionReason;
+    }
+
+    public void setDeductionReason(String deductionReason) {
+        this.deductionReason = deductionReason;
+    }
+
     public BigDecimal getActualReceipts() {
         return actualReceipts;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleTeacherSalary.java

@@ -65,6 +65,8 @@ public class CourseScheduleTeacherSalary {
 
 	private String memo;
 
+	private String deductionReason;
+
 	public BigDecimal getTeacherActualSalary() {
 		return teacherActualSalary;
 	}
@@ -97,6 +99,14 @@ public class CourseScheduleTeacherSalary {
 		this.classGroupId = classGroupId;
 	}
 
+	public String getDeductionReason() {
+		return deductionReason;
+	}
+
+	public void setDeductionReason(String deductionReason) {
+		this.deductionReason = deductionReason;
+	}
+
 	public BigDecimal getReduceSalary() {
 		return reduceSalary;
 	}

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

@@ -1791,9 +1791,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             //5、插入班级排课信息
             LocalDateTime now = LocalDate.parse(classGroup4MixDto.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
 
-            long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
-                    LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
-                    .toMinutes();
+            long totalCourseDuration = 0;
 
             if(!courseTypeMinutesMap.containsKey(classGroup4MixDto.getCourseType().getCode())){
                 throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
@@ -1805,8 +1803,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 throw new BizException("{}课程类型剩余课程时长不足", classGroup4MixDto.getCourseType().getMsg());
             }
 
-            int times = 0;
-
             Set<String> holidayDays = new HashSet<>();
 
             if (classGroup4MixDto.getHoliday()) {
@@ -1834,6 +1830,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                             LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + courseTimeDto.getEndClassTime() + ":00", formatter))
                             .toMinutes();
 
+                    totalCourseDuration += classCourseDuration;
+
+                    if (totalCourseDuration>totalMinutes) {
+                        break WhileNode;
+                    }
 
                     Date classDate = DateConvertor.toDate(now);
                     String startClassTime = DateUtil.getDate(classDate) + " " + courseTimeDto.getStartClassTime() + ":00";
@@ -1865,8 +1866,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     courseScheduleDao.insert(courseSchedule);
                     courseScheduleList.add(courseSchedule);
 
-                    times++;
-
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
                         List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
                         BigDecimal salary = new BigDecimal("0");
@@ -1960,9 +1959,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         courseScheduleTeacherSalary.setUpdateTime(date);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                     }
-                    if (classGroup4MixDto.getCourseTimes().equals(times)) {
-                        break WhileNode;
-                    }
                 }
                 now = now.plusDays(1);
             }
@@ -2470,16 +2466,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
             }
             Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
-            long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
-                    LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
-                    .toMinutes();
+            long totalCourseDuration = 0;
 //            classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
 
             if(classGroup4MixDto.getCourseTimes()<=0){
                 throw new BizException("{}课程类型剩余课程时长不足", classGroup4MixDto.getCourseType().getMsg());
             }
 
-            int times = 0;
             Set<String> holidayDays = new HashSet<>();
             if (classGroup4MixDto.getHoliday()) {
                 SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
@@ -2506,6 +2499,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                             LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + courseTimeDto.getEndClassTime() + ":00", formatter))
                             .toMinutes();
 
+                    totalCourseDuration += classCourseDuration;
+
+                    if (totalCourseDuration>totalMinutes) {
+                        break WhileNode;
+                    }
 
                     Date classDate = DateConvertor.toDate(now);
                     String startClassTime = DateUtil.getDate(classDate) + " " + courseTimeDto.getStartClassTime() + ":00";
@@ -2535,7 +2533,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     courseSchedule.setClassGroupType(classGroup.getType().getCode());
                     courseScheduleDao.insert(courseSchedule);
                     courseScheduleList.add(courseSchedule);
-                    times++;
 
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : newClassGroupTeacherMapperList) {
                         List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
@@ -2631,15 +2628,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         courseScheduleTeacherSalary.setUpdateTime(date);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                     }
-                    if (classGroup4MixDto.getCourseTimes().equals(times)) {
-                        break WhileNode;
-                    }
                 }
 
                 now = now.plusDays(1);
-                if (classGroup4MixDto.getCourseTimes().equals(times)) {
-                    break;
-                }
             }
         }
 
@@ -2772,16 +2763,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
             }
             Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
-            long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
-                    LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
-                    .toMinutes();
+            long totalCourseDuration = 0;
 //            classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
 
             if(classGroup4MixDto.getCourseTimes()<=0){
                 throw new BizException("{}课程类型剩余课程时长不足", classGroup4MixDto.getCourseType().getMsg());
             }
 
-            int times = 0;
             Set<String> holidayDays = new HashSet<>();
             if (classGroup4MixDto.getHoliday()) {
                 SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
@@ -2809,6 +2797,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                             LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + courseTimeDto.getEndClassTime() + ":00", formatter))
                             .toMinutes();
 
+                    totalCourseDuration += classCourseDuration;
+
+                    if (totalCourseDuration>totalMinutes) {
+                        break WhileNode;
+                    }
 
                     Date classDate = DateConvertor.toDate(now);
                     String startClassTime = DateUtil.getDate(classDate) + " " + courseTimeDto.getStartClassTime() + ":00";
@@ -2840,8 +2833,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
                     courseScheduleDao.insert(courseSchedule);
 
-                    times++;
-
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
                         List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
                         BigDecimal salary = new BigDecimal("0");
@@ -2929,9 +2920,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         courseScheduleTeacherSalary.setUpdateTime(date);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                     }
-                    if (classGroup4MixDto.getCourseTimes().equals(times)) {
-                        break WhileNode;
-                    }
                 }
 
                 now = now.plusDays(1);

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

@@ -386,15 +386,15 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				cssp.setClassGroupId(courseSchedule.getClassGroupId());
 				cssp.setBatchNo(batchNo);
 				cssp.setUserId(studentId);
+				cssp.setOriginalPrice(courseOriginalPrice);
+				cssp.setExpectPrice(courseCurrentPrice);
 				cssp.setActualPrice(BigDecimal.ZERO);
+				courseScheduleStudentPayments.add(cssp);
 				if(courseSchedules.size() - 1 == i){
-					cssp.setOriginalPrice(courseOriginalPrice.add(courseSetting.getCourseOriginalPrice().subtract(typeCourseTotalOriginalPrice)));
-					cssp.setExpectPrice(courseCurrentPrice.add(courseSetting.getCourseCurrentPrice().subtract(typeCourseTotalCurrentPrice)));
-				}else {
-					cssp.setOriginalPrice(courseOriginalPrice);
-					cssp.setExpectPrice(courseCurrentPrice);
+					CourseScheduleStudentPayment scheduleStudentPayment = courseScheduleStudentPayments.get(0);
+					scheduleStudentPayment.setOriginalPrice(scheduleStudentPayment.getOriginalPrice().add(courseSetting.getCourseOriginalPrice().subtract(typeCourseTotalOriginalPrice)));
+					scheduleStudentPayment.setExpectPrice(scheduleStudentPayment.getExpectPrice().add(courseSetting.getCourseCurrentPrice().subtract(typeCourseTotalCurrentPrice)));
 				}
-				courseScheduleStudentPayments.add(cssp);
 				//获取课程类型默认排课时长
 				int typeCourseDuration = Integer.parseInt(jsonObject.get(courseSchedule.getType().getCode()).toString());
 				for (MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail : musicGroupPaymentStudentCourseDetails) {

+ 14 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -302,14 +302,15 @@ 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);
+
+        vipGroupService.updateHistoryTeacherSalaryOfOnline(startDate, endDate);
+
         //获取教师未结算课程记录
         List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findSomeDayAgoTeacherCourseSalaryNoSettlement(startDate,endDate);
         if (CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
             LOGGER.info("未获取到未结算课酬记录!");
             return;
         }
-
-        vipGroupService.updateHistoryTeacherSalaryOfOnline(startDate, endDate);
         //获取未结算课程编号列表
         List<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
 
@@ -617,6 +618,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
             //扣除费用
             BigDecimal deductCost = BigDecimal.ZERO;
+            List<String> deductReasons = new ArrayList<>();
             List<TeacherAttendance> courseTeacherAttendances = teacherCourseAttendanceMap.get(org.apache.commons.lang3.StringUtils.joinWith(":", courseScheduleTeacherSalary.getCourseScheduleId(), courseScheduleTeacherSalary.getUserId()));
 
             boolean isCallName = false;
@@ -631,31 +633,39 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             if(CollectionUtils.isEmpty(courseTeacherAttendances)){
                 //无签到记录扣除全部课酬
                 deductCost = deductCost.add(teacherSalary);
+                deductReasons.add("无签到记录扣除全部课酬");
             }else{
                 TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
                 if(Objects.isNull(teacherAttendance.getSignInStatus())){
                     //未签到扣除全部课酬
                     deductCost = deductCost.add(teacherSalary);
+                    deductReasons.add("未签到扣除全部课酬");
                 }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
-                    int signCourseTimeBetween = DateUtil.minutesBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
+                    int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
+                    int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
                     if(signCourseTimeBetween>=0&&signCourseTimeBetween<20){
                         //未提前20分钟打卡扣除50元
                         deductCost = deductCost.add(new BigDecimal(50));
+                        deductReasons.add("未提前20分钟打卡扣除50元");
                     }else if(signCourseTimeBetween<0&&signCourseTimeBetween>-30){
                         //迟到30分钟内扣除一半课酬
                         deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)));
+                        deductReasons.add("迟到30分钟内扣除一半课酬");
                     }else if(signCourseTimeBetween<=-30){
                         //迟到30分钟及以上扣除全部课酬
                         deductCost = deductCost.add(teacherSalary);
+                        deductReasons.add("迟到30分钟及以上扣除全部课酬");
                     }
                 }
 
                 if(!isCallName){
                     //未点名扣除一半课酬
                     deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)));
+                    deductReasons.add("未点名扣除一半课酬");
                 }else if((Objects.isNull(teacherAttendance.getSignOutStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus()))&&isCallName){
                     //异常签退或者未签退,但是正常点名扣除50元课酬
                     deductCost = deductCost.add(new BigDecimal(50));
+                    deductReasons.add("异常签退或者未签退,但是正常点名扣除50元课酬");
                 }
 
 
@@ -666,6 +676,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             //更新教师结算信息
             courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
             courseScheduleTeacherSalary.setSettlementTime(now);
+            courseScheduleTeacherSalary.setDeductionReason(org.apache.commons.lang3.StringUtils.join(deductReasons, ";"));
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
         }
     }

+ 21 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -117,6 +117,8 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             degreeRegistration.setMoney(BigDecimal.ZERO);
         }
 
+        List<String> courseInfos = new ArrayList<>();
+
         if(StringUtils.isNotBlank(degreeRegistration.getTheoryLevel())){
             degreeRegistration.setOrderNo(orderNo);
             BigDecimal theoryMoney = BigDecimal.ZERO;
@@ -233,13 +235,19 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 BigDecimal courseTime = new BigDecimal(courseScheduleTypeIntegerEntry.getValue());
                 switch (courseScheduleTypeIntegerEntry.getKey()){
                     case VIP:
-                        additionCoursePrice = additionCoursePrice.add(vipUnitPrice.multiply(courseTime));
+                        BigDecimal vipPrice = vipUnitPrice.multiply(courseTime);
+                        additionCoursePrice = additionCoursePrice.add(vipPrice);
+                        courseInfos.add((courseTime.multiply(new BigDecimal(12)))+"节VIP-1V1课程费用:" + vipPrice);
                         break;
                     case PRACTICE:
-                        additionCoursePrice = additionCoursePrice.add(practiceUnitPrice.multiply(courseTime));
+                        BigDecimal practicePrice = practiceUnitPrice.multiply(courseTime);
+                        additionCoursePrice = additionCoursePrice.add(practicePrice);
+                        courseInfos.add((courseTime.multiply(new BigDecimal(12)))+"节1V1网管课课程费用:" + practicePrice);
                         break;
                     case HIGH:
-                        additionCoursePrice = additionCoursePrice.add(highUnitPrice.multiply(courseTime));
+                        BigDecimal highPrice = highUnitPrice.multiply(courseTime);
+                        additionCoursePrice = additionCoursePrice.add(highPrice);
+                        courseInfos.add((courseTime.multiply(new BigDecimal(10)))+"节乐理课程费用:" + highPrice);
                         break;
                 }
             }
@@ -271,9 +279,13 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         }
         studentPaymentOrder.setOrganId(degreeRegistration.getOrganId());
         studentPaymentOrder.setRoutingOrganId(degreeRegistration.getOrganId());
-        if (degreeRegistration.getTheoryMoney().compareTo(BigDecimal.ZERO) > 0) {
-            studentPaymentOrder.setMemo("乐理" + degreeRegistration.getTheoryLevel() + ",费用:" + degreeRegistration.getTheoryMoney());
+        if(Objects.nonNull(degreeRegistration.getSporadicId())){
+            courseInfos.add("乐器" + degreeRegistration.getLevel() + ",费用:" + degreeRegistration.getMoney());
+        }
+        if (StringUtils.isNotBlank(degreeRegistration.getTheoryLevel())) {
+            courseInfos.add("乐理" + degreeRegistration.getTheoryLevel() + ",费用:" + degreeRegistration.getTheoryMoney());
         }
+        studentPaymentOrder.setMemo(StringUtils.join(courseInfos, ","));
         studentPaymentOrderService.insert(studentPaymentOrder);
         studentPaymentOrder.setVersion(0);
 
@@ -333,6 +345,10 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             throw new BizException("订单更新失败");
         }
 
+        if(Objects.isNull(studentPaymentOrder.getClassGroupId())){
+            return true;
+        }
+
         if (degree == null || !degree.getStatus().equals(1)) {
             studentPaymentOrder.setMemo("订单状态已变更");
             studentPaymentOrder.setVersion(studentPaymentOrder.getVersion()+1);

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

@@ -1603,19 +1603,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
             studentRegistrationDao.update(studentRegistration);
             
-            //操作人
-            SysUser operator = sysUserFeignService.queryUserInfo();
-
-            BigDecimal price = courseScheduleStudentPaymentDao.countFinishCoursePriceWithMusicGroup(musicGroupId, GroupType.MUSIC, userId);
-            BigDecimal subtractAmount = studentRegistration.getSurplusCourseFee();
-            if(Objects.isNull(price)){
-                price = new BigDecimal(0);
-            }
-            subtractAmount = subtractAmount.subtract(price);
-            if(BigDecimal.ZERO.compareTo(subtractAmount)<0){
-                studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
-            }
-            
             //更新服务指标、运营指标
             int remainCourseNum = courseScheduleStudentPaymentDao.countStudentNotStartCourseNumWithCourseType(userId, null);
             if(remainCourseNum == 0){
@@ -1633,6 +1620,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //删除用户购买的课程记录
             musicGroupPaymentStudentCourseDetailDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
 
+            //操作人
+            SysUser operator = sysUserFeignService.queryUserInfo();
+
+            BigDecimal price = courseScheduleStudentPaymentDao.countFinishCoursePriceWithMusicGroup(musicGroupId, GroupType.MUSIC, userId);
+            BigDecimal subtractAmount = studentRegistration.getSurplusCourseFee();
+            if(Objects.isNull(price)){
+                price = new BigDecimal(0);
+            }
+            subtractAmount = subtractAmount.subtract(price);
+            if(BigDecimal.ZERO.compareTo(subtractAmount)<0){
+                studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
+            }
+
             BigDecimal amount = new BigDecimal(0);
 
             // 判断乐器是否是租赁
@@ -1753,19 +1753,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         studentRegistrationDao.update(studentRegistration);
         
-        //操作人
-        SysUser operator = sysUserFeignService.queryUserInfo();
-
-        BigDecimal price = courseScheduleStudentPaymentDao.countFinishCoursePriceWithMusicGroup(musicGroupId, GroupType.MUSIC, userId);
-        BigDecimal subtractAmount = studentRegistration.getSurplusCourseFee();
-        if(Objects.isNull(price)){
-            price = new BigDecimal(0);
-        }
-        subtractAmount = subtractAmount.subtract(price);
-        if(BigDecimal.ZERO.compareTo(subtractAmount)<0){
-            studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
-        }
-        
         //更新服务指标、运营指标
         int remainCourseNum = courseScheduleStudentPaymentDao.countStudentNotStartCourseNumWithCourseType(userId, null);
         if(remainCourseNum == 0){
@@ -1784,6 +1771,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //删除用户购买的课程记录
         musicGroupPaymentStudentCourseDetailDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
 
+        //操作人
+        SysUser operator = sysUserFeignService.queryUserInfo();
+
+        BigDecimal price = courseScheduleStudentPaymentDao.countFinishCoursePriceWithMusicGroup(musicGroupId, GroupType.MUSIC, userId);
+        BigDecimal subtractAmount = studentRegistration.getSurplusCourseFee();
+        if(Objects.isNull(price)){
+            price = new BigDecimal(0);
+        }
+        subtractAmount = subtractAmount.subtract(price);
+        if(BigDecimal.ZERO.compareTo(subtractAmount)<0){
+            studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, subtractAmount.negate(), reason, operator.getId());
+        }
+
         BigDecimal amount = new BigDecimal(0);
 
         // 判断乐器是否是租赁

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

@@ -232,7 +232,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         teacherAttendance.setSignOutTime(courseSchedule.getEndClassTime());
         teacherAttendance.setSignOutStatus(isInScore?YesOrNoEnum.YES:YesOrNoEnum.NO);
         teacherAttendance.setCurrentClassTimes(classTimes + 1);
-        teacherAttendance.setRemark(teacherAttendanceMemo);
+        teacherAttendance.setRemark(studentAttendanceInfos.getRemark());
         if (Objects.nonNull(teacherAttendance.getId())) {
             teacherAttendanceDao.update(teacherAttendance);
         } else {

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

@@ -6,6 +6,7 @@ import java.util.stream.Collectors;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
 import com.ym.mec.biz.service.SysConfigService;
 import org.apache.commons.lang3.StringUtils;
@@ -103,6 +104,8 @@ public class StudentManageServiceImpl implements StudentManageService {
     private SysConfigService sysConfigService;
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -625,6 +628,7 @@ public class StudentManageServiceImpl implements StudentManageService {
 
     @Override
     public Map<String, Integer> sumStudentAttendance(Integer courseScheduleId) {
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
         Map<String, Integer> sum = new HashMap<>(5);
         Integer studentNum = scheduleStudentPaymentDao.countStudentNum(courseScheduleId);
         sum.put("studentNum", studentNum);
@@ -635,7 +639,11 @@ public class StudentManageServiceImpl implements StudentManageService {
         studentNum = studentNum == null ? 0 : studentNum;
         signInNum = signInNum == null ? 0 : signInNum;
         leaveNum = leaveNum == null ? 0 : leaveNum;
-        sum.put("truantNum", studentNum - signInNum - leaveNum);
+        if(Objects.nonNull(courseSchedule)&& !CourseStatusEnum.NOT_START.equals(courseSchedule.getStatus())){
+            sum.put("truantNum", studentNum - signInNum - leaveNum);
+        }else{
+            sum.put("truantNum", 0);
+        }
         sum.put("homeworkNum", studentManageDao.countHomeworkNum(courseScheduleId));
         sum.put("repliedNum", studentManageDao.countRepliedNum(courseScheduleId));
         return sum;

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java

@@ -371,7 +371,7 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
                 throw new BizException("导入数据错误  重复的交易流水号:{}", list.get(0));
             }
 
-            List<Object> calenderIds = sheet.stream().map(m -> m.get("学校缴费项id")).collect(Collectors.toList());
+            List<Object> calenderIds = sheet.stream().map(m -> m.get("缴费单号")).collect(Collectors.toList());
             List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.getPaymentCalenderWithCalenderIdsAndPayUserType(calenderIds, MusicGroupPaymentCalender.PayUserType.SCHOOL);
             Map<String, Long> schoolCalender = calenders.stream().collect(Collectors.toMap(m -> m.getId().toString(), MusicGroupPaymentCalender::getId));
 
@@ -462,7 +462,7 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
                     }
                     if (columnValue.equals("calenderId")) {
                         if (StringUtils.isNotBlank(row.get(s).toString()) && !schoolCalender.containsKey(row.get(s).toString())) {
-                            sb.append("第" + rowNum).append("行数据导入失败:学校缴费项id不存在;");
+                            sb.append("第" + rowNum).append("行数据导入失败:学校缴费单号不存在;");
                             continue valueIsNull;
                         } else {
                             objectMap.put("calenderId", row.get(s));
@@ -517,7 +517,7 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
                 studentPaymentRouteOrder.setRouteAmount(studentPaymentRouteOrder.getSaleAmount().add(studentPaymentRouteOrder.getServiceAmount()));
                 studentPaymentRouteOrder.setCreateBy(sysUser.getId());
                 studentPaymentRouteOrder.setUpdateBy(sysUser.getId());
-                studentPaymentRouteOrder.setUserId(sysUser.getId());
+                //studentPaymentRouteOrder.setUserId(sysUser.getId());
                 studentPaymentRouteOrders.add(studentPaymentRouteOrder);
             }
         }

+ 87 - 86
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -275,16 +275,16 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional(rollbackFor = Exception.class)
     public StudentRegistration addStudent(StudentRegistration studentRegistration) throws Exception {
-    	Integer userId = studentRegistration.getUserId();
+        Integer userId = studentRegistration.getUserId();
 
-    	Student student = studentDao.getLocked(userId);
-    	if (student == null) {
-        	throw new BizException("查询学生信息失败");
+        Student student = studentDao.getLocked(userId);
+        if (student == null) {
+            throw new BizException("查询学生信息失败");
         }
 
         StudentRegistration hasReg = getByPhoneAndMusicGroupId(studentRegistration.getMusicGroupId(), studentRegistration.getParentsPhone());
         if (hasReg != null) {
-        	throw new BizException("该乐团您已报名");
+            throw new BizException("该乐团您已报名");
         }
 
         Date date = new Date();
@@ -925,8 +925,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
             List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getOrderDetail(studentPaymentOrder.getId());
 
-			BigDecimal courseFee = orderDetails.stream().filter(o -> o.getType().getCode().equals("COURSE")).map(o -> o.getPrice().subtract(o.getRemitFee()))
-					.reduce(BigDecimal.ZERO, BigDecimal::add);
+            List<StudentPaymentOrderDetail> allDetails = studentPaymentOrderDetailDao.getOrderDetailByOrderId(studentPaymentOrder.getId());
+            BigDecimal courseFee = allDetails.stream().filter(o -> !o.getType().getCode().equals("MUSICAL")).filter(o -> !o.getType().getCode().equals("ACCESSORIES")).map(o -> o.getPrice().subtract(o.getRemitFee()==null?BigDecimal.ZERO:o.getRemitFee()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
 
             //累加充值金额
             studentRegistration.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(courseFee));
@@ -1071,41 +1072,41 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         musicGroupStudentFee.setIsLock(0);
         musicGroupStudentFee.setMusicGroupId(studentRegistration.getMusicGroupId());
         musicGroupStudentFee.setUserId(studentRegistration.getUserId());
-        
+
         String currentMusicGroupId = studentRegistration.getMusicGroupId();
 
         //缴费详情 calender detail
         MusicGroupPaymentCalender musicGroupRegCalender = musicGroupPaymentCalenderService.findByMusicGroupRegCalender(currentMusicGroupId);
-        
+
         String batchNo = musicGroupRegCalender.getBatchNo();
         Long currentPaymentCalenderId = musicGroupRegCalender.getId();
 
         List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
-        
+
         if (musicGroupRegCalender.getIsGiveMusicNetwork() != null && musicGroupRegCalender.getIsGiveMusicNetwork()) {
             //赠送网管课
             musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + musicGroupPaymentCalenderList.size());
         }
         musicGroupStudentFeeDao.insert(musicGroupStudentFee);
-        
-		for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList) {
-			if (currentPaymentCalenderId.longValue() == musicGroupPaymentCalender.getId()) {
-				// 更新实际缴费人数
-				if (musicGroupPaymentCalender.getActualNum() == null) {
-					musicGroupPaymentCalender.setActualNum(1);
-				} else {
-					musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + 1);
-				}
-			}
-			if (musicGroupPaymentCalender.getExpectNum() == null) {
-				musicGroupPaymentCalender.setExpectNum(1);
-			} else {
-				musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + 1);
-			}
-			musicGroupPaymentCalender.setUpdateTime(nowDate);
-		}
-        if(musicGroupPaymentCalenderList.size() > 0){
-        	musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenderList);
+
+        for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList) {
+            if (currentPaymentCalenderId.longValue() == musicGroupPaymentCalender.getId()) {
+                // 更新实际缴费人数
+                if (musicGroupPaymentCalender.getActualNum() == null) {
+                    musicGroupPaymentCalender.setActualNum(1);
+                } else {
+                    musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + 1);
+                }
+            }
+            if (musicGroupPaymentCalender.getExpectNum() == null) {
+                musicGroupPaymentCalender.setExpectNum(1);
+            } else {
+                musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + 1);
+            }
+            musicGroupPaymentCalender.setUpdateTime(nowDate);
+        }
+        if (musicGroupPaymentCalenderList.size() > 0) {
+            musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenderList);
         }
 
         List<String> orderDetailTypes = studentPaymentOrderDetailDao.getOrderDetailType(studentPaymentOrder.getId());
@@ -1113,56 +1114,56 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         BigDecimal courseTotalPrice = courseSettings.stream().filter(e -> orderDetailTypes.contains(e.getCourseType().getCode())).map(MusicGroupPaymentCalenderCourseSettings::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 
         List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = new ArrayList<>();
-        
-		for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList) {
-			MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
-			musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
-			musicGroupPaymentCalenderDetail.setUserId(studentPaymentOrder.getUserId());
-			musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
-
-			if (currentPaymentCalenderId.longValue() == musicGroupPaymentCalender.getId()) {
-				musicGroupPaymentCalenderDetail.setExpectAmount(courseTotalPrice);
-				musicGroupPaymentCalenderDetail.setActualAmount(courseTotalPrice);
-				musicGroupPaymentCalenderDetail.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
-				musicGroupPaymentCalenderDetail.setPayTime(nowDate);
-				musicGroupPaymentCalenderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-				musicGroupPaymentCalenderDetail.setUseInCourse(0);
-				musicGroupPaymentCalenderDetail.setOpen(1);
-			} else {
-				musicGroupPaymentCalenderDetail.setExpectAmount(musicGroupPaymentCalender.getPaymentAmount());
-				musicGroupPaymentCalenderDetail.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.NON_PAYMENT);
-			}
-			musicGroupPaymentCalenderDetail.setUserStatus(null);
-			musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
-			musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
-			musicGroupPaymentCalenderDetail.setCreateTime(nowDate);
-			musicGroupPaymentCalenderDetail.setUpdateTime(nowDate);
-
-			musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail);
-
-			List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao
-					.getWithPaymentCalender(musicGroupPaymentCalender.getId());
-			for (MusicGroupPaymentCalenderCourseSettings courseSetting : courseSettingsList) {
-				if (musicGroupRegCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.STUDENT)
-						&& !orderDetailTypes.contains(courseSetting.getCourseType().getCode())){
-					continue;
-				}
-				if(courseSetting.getCourseTotalMinuties() == null || courseSetting.getCourseTotalMinuties() == 0){
-					continue;
-				}
-				MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
-				musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
-				musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetail.getId());
-				musicGroupPaymentStudentCourseDetail.setUserId(studentPaymentOrder.getUserId());
-				musicGroupPaymentStudentCourseDetail.setCourseType(courseSetting.getCourseType());
-				musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSetting.getCourseTotalMinuties());
-				musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
-				musicGroupPaymentStudentCourseDetail.setCreateTime(nowDate);
-				musicGroupPaymentStudentCourseDetail.setUpdateTime(nowDate);
-
-				musicGroupPaymentStudentCourseDetails.add(musicGroupPaymentStudentCourseDetail);
-			}
-		}
+
+        for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList) {
+            MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
+            musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
+            musicGroupPaymentCalenderDetail.setUserId(studentPaymentOrder.getUserId());
+            musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
+
+            if (currentPaymentCalenderId.longValue() == musicGroupPaymentCalender.getId()) {
+                musicGroupPaymentCalenderDetail.setExpectAmount(courseTotalPrice);
+                musicGroupPaymentCalenderDetail.setActualAmount(courseTotalPrice);
+                musicGroupPaymentCalenderDetail.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
+                musicGroupPaymentCalenderDetail.setPayTime(nowDate);
+                musicGroupPaymentCalenderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+                musicGroupPaymentCalenderDetail.setUseInCourse(0);
+                musicGroupPaymentCalenderDetail.setOpen(1);
+            } else {
+                musicGroupPaymentCalenderDetail.setExpectAmount(musicGroupPaymentCalender.getPaymentAmount());
+                musicGroupPaymentCalenderDetail.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.NON_PAYMENT);
+            }
+            musicGroupPaymentCalenderDetail.setUserStatus(null);
+            musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
+            musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
+            musicGroupPaymentCalenderDetail.setCreateTime(nowDate);
+            musicGroupPaymentCalenderDetail.setUpdateTime(nowDate);
+
+            musicGroupPaymentCalenderDetailDao.insert(musicGroupPaymentCalenderDetail);
+
+            List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao
+                    .getWithPaymentCalender(musicGroupPaymentCalender.getId());
+            for (MusicGroupPaymentCalenderCourseSettings courseSetting : courseSettingsList) {
+                if (musicGroupRegCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.STUDENT)
+                        && !orderDetailTypes.contains(courseSetting.getCourseType().getCode())) {
+                    continue;
+                }
+                if (courseSetting.getCourseTotalMinuties() == null || courseSetting.getCourseTotalMinuties() == 0) {
+                    continue;
+                }
+                MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
+                musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
+                musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetail.getId());
+                musicGroupPaymentStudentCourseDetail.setUserId(studentPaymentOrder.getUserId());
+                musicGroupPaymentStudentCourseDetail.setCourseType(courseSetting.getCourseType());
+                musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSetting.getCourseTotalMinuties());
+                musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
+                musicGroupPaymentStudentCourseDetail.setCreateTime(nowDate);
+                musicGroupPaymentStudentCourseDetail.setUpdateTime(nowDate);
+
+                musicGroupPaymentStudentCourseDetails.add(musicGroupPaymentStudentCourseDetail);
+            }
+        }
 
         if (musicGroupPaymentStudentCourseDetails.size() > 0) {
             musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetails);
@@ -1286,7 +1287,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
         Map<CourseSchedule.CourseScheduleType, Integer> courseTypeCourseDurationMap = new HashMap<>();
         Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = new HashMap<>();
-        if(Objects.nonNull(classGroupId)){
+        if (Objects.nonNull(classGroupId)) {
             List<CourseSchedule> classGroupNotStartCourse = courseScheduleDao.findCoursesByClassGroupId(classGroupId.intValue(), CourseStatusEnum.NOT_START);
             typeCourseMap = classGroupNotStartCourse.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
             for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
@@ -1311,18 +1312,18 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 //当前课程类型总课程时长
                 Integer typeCourseDuration = courseTypeCourseDurationMap.get(courseScheduleTypeListEntry.getKey());
 
-                String batchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, student.getUserId(), courseScheduleTypeListEntry.getKey(),null);
+                String batchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, student.getUserId(), courseScheduleTypeListEntry.getKey(), null);
 
                 List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudentAndCourseTypeAndCourseMinutes(batchNo, student.getUserId(), courseScheduleTypeListEntry.getKey());
                 int totalCourseMinutes = musicGroupPaymentStudentCourseDetails.stream().mapToInt(MusicGroupPaymentStudentCourseDetail::getTotalCourseMinutes).reduce(0, Integer::sum);
-                if(CollectionUtils.isEmpty(musicGroupPaymentStudentCourseDetails)||totalCourseMinutes<typeCourseDuration){
+                if (CollectionUtils.isEmpty(musicGroupPaymentStudentCourseDetails) || totalCourseMinutes < typeCourseDuration) {
                     iterator.remove();
                     courseMinutesNotEnough = true;
                     break;
                 }
             }
 
-            if(courseMinutesNotEnough){
+            if (courseMinutesNotEnough) {
                 continue;
             }
 
@@ -1429,17 +1430,17 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public BigDecimal updateUserSurplusCourseFee(Integer userId, String musicGroupId, BigDecimal amount, String memo, Integer operatorId) {
         StudentRegistration studentRegistration = studentRegistrationDao.lockWithUserAndMusic(userId, musicGroupId);
-        if(Objects.isNull(studentRegistration)){
+        if (Objects.isNull(studentRegistration)) {
             throw new BizException("学员注册信息不存在");
         }
 
-        if(BigDecimal.ZERO.compareTo(amount)>0&&amount.abs().compareTo(studentRegistration.getSurplusCourseFee())>0){
+        if (BigDecimal.ZERO.compareTo(amount) > 0 && amount.abs().compareTo(studentRegistration.getSurplusCourseFee()) > 0) {
             amount = studentRegistration.getSurplusCourseFee().negate();
         }
 
         studentRegistration.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(amount));
 
-        if(BigDecimal.ZERO.compareTo(amount)==0){
+        if (BigDecimal.ZERO.compareTo(amount) == 0) {
             return BigDecimal.ZERO;
         }
 

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

@@ -116,6 +116,9 @@
 			<if test="memo != null">
 				memo_ = #{memo},
 			</if>
+			<if test="deductionReason != null">
+				deduction_reason_ = #{deductionReason},
+			</if>
 		</set> WHERE id_ = #{id} 
 	</update>
 
@@ -784,6 +787,7 @@
 		<result property="reduceSalary" column="reduce_salary" />
 		<result property="confirmStatus" column="confirm_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result property="memo" column="memo_" />
+		<result property="deductionReason" column="deduction_reason_" />
 	</resultMap>
 
 	<sql id="queryCourseSalaryCondition">
@@ -850,7 +854,8 @@
 			csts.actual_salary_,
 			csts.reduce_salary,
 			csts.confirm_status_,
-			csts.memo_
+			csts.memo_,
+			csts.deduction_reason_
 		FROM
 			course_schedule_teacher_salary csts
 			LEFT JOIN course_schedule cs ON csts.course_schedule_id_=cs.id_

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml

@@ -281,4 +281,8 @@
         AND spod.type_ = #{orderType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         AND spo.status_='SUCCESS'
     </select>
+
+    <select id="getOrderDetailByOrderId" resultMap="StudentPaymentOrderDetail">
+        SELECT * FROM student_payment_order_detail WHERE payment_order_id_ = #{orderId}
+    </select>
 </mapper>

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

@@ -378,7 +378,7 @@
 		<include refid="global.limit" />
 	</select>
     <select id="sumAmountByCalenderId" resultType="java.math.BigDecimal">
-        SELECT IF(SUM(route_amount_) IS NULL,0, SUM(route_amount_))FROM student_payment_route_order WHERE calender_id_ = #{calenderId}
+        SELECT IF(SUM(route_amount_) IS NULL,0, SUM(route_amount_)) FROM student_payment_route_order WHERE calender_id_ = #{calenderId} AND audit_status_='PASS'
     </select>
 
 </mapper>

+ 6 - 8
mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java

@@ -450,7 +450,7 @@ public class POIUtil {
 			}
 
 			List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
-			rowIter = sheet.iterator();
+			rowIter = sheet.rowIterator();
 			while (rowIter.hasNext()) {
 				Map<String, Object> obj = null;
 				boolean hasVal = false;
@@ -460,7 +460,7 @@ public class POIUtil {
 					currentRowNum++;
 
 					if (currentRowNum == 1) {// 第一列表示英文名称对应表字段
-						cellIter = row.iterator();
+						cellIter = row.cellIterator();
 						// 列号清零
 						List<String> names = new ArrayList<String>();
 						while (cellIter.hasNext()) {
@@ -476,15 +476,13 @@ public class POIUtil {
 					}
 					// 实例化对象
 					obj = new HashMap<>();
-					cellIter = row.iterator();
 					// 列号清零
 					currentCellNum = 0;
-					while (cellIter.hasNext() && currentCellNum < fieldsName.length) {
-						cell = cellIter.next();
-						int columnIndex = cell.getColumnIndex();
-						cell.setCellType(Cell.CELL_TYPE_STRING);
+					while (currentCellNum < fieldsName.length) {
 						String fieldValue = "";
-						if (columnIndex == currentCellNum) {
+						cell = row.getCell(currentCellNum);
+						if (cell != null) {
+							cell.setCellType(Cell.CELL_TYPE_STRING);
 							fieldValue = cell.getStringCellValue();
 						}
 						if (StringUtils.isNotBlank(fieldValue)) {

+ 5 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -1162,6 +1162,7 @@ public class ExportController extends BaseController {
                     row.setRepairFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
                 } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
                     row.setCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                    row.setTransferFee(BigDecimal.ZERO);
                 }
             }
             String paymentChannel = "";
@@ -1689,9 +1690,10 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(
                     new String[]{"分部", "课程组类型", "课程编号", "时间", "课程名称", "老师编号", "老师姓名", "签到时间", "签退时间",
-                            "学员缴费", "应发课酬", "课酬扣款", "结算课酬", "状态", "备注"},
+                            "学员缴费", "应发课酬", "课酬扣款", "结算课酬", "状态", "备注", "扣款原因"},
                     new String[]{"organName", "groupType.desc", "courseScheduleId", "startClassTime", "courseName", "teacherId", "teacherName",
-                            "signInStatusStr", "signOutStatusStr", "actualReceipts", "actualSalary", "reduceSalary", "finalSalary", "confirmStatus.desc", "memo"}, rows);
+                            "signInStatusStr", "signOutStatusStr", "actualReceipts", "actualSalary", "reduceSalary", "finalSalary", "confirmStatus.desc",
+                            "memo", "deductionReason"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();
@@ -2242,6 +2244,7 @@ public class ExportController extends BaseController {
                     row.setRepairFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
                 } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
                     row.setCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                    row.setTransferFee(BigDecimal.ZERO);
                 }
             }
             String paymentChannel = "";

+ 1 - 1
mec-web/src/main/resources/columnMapper.ini

@@ -50,4 +50,4 @@
 商品编号 = goodsIds
 商品数量 = goodsNums
 备注 = memo
-学校缴费项id = calenderId
+缴费单号 = calenderId

BIN
mec-web/src/main/resources/excelTemplate/财务管理导入模板.xls