Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

Joburgess 4 gadi atpakaļ
vecāks
revīzija
2f879df11d

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

@@ -53,6 +53,8 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     private BigDecimal maintenanceFee = BigDecimal.ZERO;
     //商品乐保
     private BigDecimal maintenanceProductFee = BigDecimal.ZERO;
+    //云教练费用
+    private BigDecimal cloudTeacherFee = BigDecimal.ZERO;
 
     private String organName;
     private String schoolName;
@@ -339,4 +341,12 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     public void setEduTeacher(String eduTeacher) {
         this.eduTeacher = eduTeacher;
     }
+
+    public BigDecimal getCloudTeacherFee() {
+        return cloudTeacherFee;
+    }
+
+    public void setCloudTeacherFee(BigDecimal cloudTeacherFee) {
+        this.cloudTeacherFee = cloudTeacherFee;
+    }
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java

@@ -84,6 +84,12 @@ public class CloudTeacherOrder {
     private String remark = "";
 
     /**
+     * 备注
+     */
+    @ApiModelProperty(value = "版本")
+    private Integer version = 0;
+
+    /**
      * 创建时间
      */
     @ApiModelProperty(value = "创建时间")

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -167,10 +167,11 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @param isRefundInstrumentFee 是否退还乐器费用
 	 * @param isRefundTeachingAssistantsFee 是否退还教辅费用
 	 * @param maintenanceFee
+	 * @param cloudTeacherAmount
 	 * @return
 	 */
 	boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-								  boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee);
+								  boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee, BigDecimal cloudTeacherAmount);
 
 	/**
 	 * 一键退团

+ 24 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -89,7 +89,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
                 endTime = DateUtil.addYears(startTime, cloudTeacherOrder.getTime());
             }
             cloudTeacher.setStudentId(cloudTeacherOrder.getStudentId());
-            cloudTeacher.setLevel(cloudTeacher.getLevel());
+            cloudTeacher.setLevel(cloudTeacherOrder.getLevel());
             cloudTeacher.setStartTime(startTime);
             cloudTeacher.setEndTime(endTime);
             cloudTeacherDao.insert(cloudTeacher);
@@ -110,12 +110,16 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             cloudTeacher.setStartTime(startTime);
             cloudTeacher.setEndTime(endTime);
             cloudTeacher.setUpdateTime(nowDate);
-            cloudTeacherDao.update(cloudTeacher);
+            if (cloudTeacherDao.update(cloudTeacher) <= 0) {
+                throw new BizException("云教练有效期更新失败");
+            }
         }
         cloudTeacherOrder.setStartTime(endBaseTime);
         cloudTeacherOrder.setEndTime(endTime);
         cloudTeacherOrder.setStatus(2);
-        cloudTeacherOrderDao.update(cloudTeacherOrder);
+        if (cloudTeacherOrderDao.update(cloudTeacherOrder) <= 0) {
+            throw new BizException("云教练生效处理失败");
+        }
         return cloudTeacher;
     }
 
@@ -130,6 +134,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean quitCloudTeacherOrder(CloudTeacherOrder cloudOrder, BigDecimal refundAmount) {
         Date nowDate = new Date();
         if (cloudOrder.getStatus().equals(3)) {
@@ -138,10 +143,25 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         if (cloudOrder.getStatus().equals(2) && cloudOrder.getEndTime().compareTo(nowDate) <= 0) {
             throw new BizException("云教练已过服务期,不可退费");
         }
+        Integer oldStatus = cloudOrder.getStatus();
         cloudOrder.setStatus(3);
         cloudOrder.setRefundAmount(refundAmount);
-        //cloudOrder.setUpdateTime();
+        cloudOrder.setUpdateTime(nowDate);
+        if (cloudTeacherOrderDao.update(cloudOrder) <= 0) {
+            throw new BizException("云教练退费处理失败,请重试");
+        }
 
+        if (oldStatus.equals(1)) {
+            return true;
+        }
+        int days = DateUtil.daysBetween(DateUtil.trunc(nowDate), cloudOrder.getEndTime());
+        CloudTeacher cloudTeacher = cloudTeacherDao.getByStudentId(cloudOrder.getStudentId());
+        Date endDate = DateUtil.addDays(cloudOrder.getEndTime(), -days);
+        cloudTeacher.setEndTime(endDate);
+        cloudTeacher.setUpdateTime(nowDate);
+        if (cloudTeacherDao.update(cloudTeacher) <= 0) {
+            throw new BizException("云教练服务有效期更新失败,请重试");
+        }
         return true;
     }
 }

+ 33 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -137,12 +137,21 @@ public class ExportServiceImpl implements ExportService {
                             break;
                         case OTHER:
                             row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
+                            break;
                         case MAINTENANCE:
                             BigDecimal repairFee = BigDecimal.ZERO;
                             if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
                                 repairFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
                             }
                             row.setMaintenanceFee(repairFee);
+                            break;
+                        case CLOUD_TEACHER:
+                            BigDecimal cloudTeacherFee = BigDecimal.ZERO;
+                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                cloudTeacherFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                            }
+                            row.setCloudTeacherFee(cloudTeacherFee);
+                            break;
                         default:
                             break;
                     }
@@ -235,7 +244,7 @@ public class ExportServiceImpl implements ExportService {
                         row.setCooperationOrganName(studentRegistration.getRemark());
                         row.setEduTeacher(studentRegistration.getName());
                     }
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()));
+                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
                     row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
@@ -284,9 +293,9 @@ public class ExportServiceImpl implements ExportService {
 
         HSSFWorkbook workbook = null;
         try {
-            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "押金", "乐器", "教辅费用", "其它", "手续费", "到账时间",
+            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用","云教练","押金", "乐器", "教辅费用", "其它", "手续费", "到账时间",
                     "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"};
-            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "leaseFee", "musicalFee", "teachingFee", "otherFee", "transferFee", "payTime", "musicGroupId",
+            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee","cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "otherFee", "transferFee", "payTime", "musicGroupId",
                     "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"};
             workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
             workbook.write(fileOutputStream);
@@ -389,12 +398,21 @@ public class ExportServiceImpl implements ExportService {
                             break;
                         case OTHER:
                             row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
+                            break;
                         case MAINTENANCE:
                             BigDecimal maintenanceFee = BigDecimal.ZERO;
                             if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
                                 maintenanceFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
                             }
                             row.setMaintenanceFee(maintenanceFee);
+                            break;
+                        case CLOUD_TEACHER:
+                            BigDecimal cloudTeacherFee = BigDecimal.ZERO;
+                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                cloudTeacherFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                            }
+                            row.setCloudTeacherFee(cloudTeacherFee);
+                            break;
                         default:
                             break;
                     }
@@ -487,7 +505,7 @@ public class ExportServiceImpl implements ExportService {
                         row.setCooperationOrganName(studentRegistration.getRemark());
                         row.setEduTeacher(studentRegistration.getName());
                     }
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()));
+                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
                     row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
@@ -543,6 +561,7 @@ public class ExportServiceImpl implements ExportService {
             BigDecimal routeMusicalFee = BigDecimal.ZERO;
             BigDecimal routeTeachingFee = BigDecimal.ZERO;
             BigDecimal routeOtherFee = BigDecimal.ZERO;
+            BigDecimal routeCloudTeacherFee = BigDecimal.ZERO;
             for (StudentPaymentOrderExportDto order : orders) {
                 Date endDate = DateUtil.stringToDate("2021-04-01", "yyyy-MM-dd");
                 if (order.getPayTime() == null || order.getPayTime().compareTo(endDate) < 0) {
@@ -554,10 +573,12 @@ public class ExportServiceImpl implements ExportService {
                     order.setPracticeCourseFee(BigDecimal.ZERO);
                     order.setTheoryCourseFee(BigDecimal.ZERO);
                     order.setDegreeFee(BigDecimal.ZERO);
+                    order.setCloudTeacherFee(BigDecimal.ZERO);
                     order.setRepairFee(order.getMaintenanceProductFee());
                     continue;
                 } else if (order.getSaleAmount().compareTo(BigDecimal.ZERO) == 0 && order.getServiceAmount().compareTo(BigDecimal.ZERO) > 0) {
                     order.setRepairFee(order.getRepairFee().add(order.getMaintenanceFee()));
+                    order.setCloudTeacherFee(order.getCloudTeacherFee());
                     order.setMusicalFee(BigDecimal.ZERO);
                     order.setTeachingFee(BigDecimal.ZERO);
                     order.setOtherFee(BigDecimal.ZERO);
@@ -576,6 +597,7 @@ public class ExportServiceImpl implements ExportService {
                 BigDecimal musicalFee = BigDecimal.ZERO;
                 BigDecimal teachingFee = BigDecimal.ZERO;
                 BigDecimal otherFee = BigDecimal.ZERO;
+                BigDecimal cloudTeacherFee = BigDecimal.ZERO;
 
                 if (order.getActualAmount() != null && order.getActualAmount().compareTo(BigDecimal.ZERO) > 0) {
                     musicGroupCourseFee = order.getMusicGroupCourseFee().multiply(order.getRouteAmount()).divide(order.getActualAmount(), 2, BigDecimal.ROUND_DOWN);
@@ -590,6 +612,7 @@ public class ExportServiceImpl implements ExportService {
                     musicalFee = order.getMusicalFee().multiply(order.getRouteAmount()).divide(order.getActualAmount(), 2, BigDecimal.ROUND_DOWN);
                     teachingFee = order.getTeachingFee().multiply(order.getRouteAmount()).divide(order.getActualAmount(), 2, BigDecimal.ROUND_DOWN);
                     otherFee = order.getOtherFee().multiply(order.getRouteAmount()).divide(order.getActualAmount(), 2, BigDecimal.ROUND_DOWN);
+                    cloudTeacherFee = order.getCloudTeacherFee().multiply(order.getRouteAmount()).divide(order.getActualAmount(), 2, BigDecimal.ROUND_DOWN);
                 }
 
                 if (order.getGroupType().equals(GroupType.VIP)) {
@@ -611,7 +634,7 @@ public class ExportServiceImpl implements ExportService {
                     practiceCourseFee = order.getRouteAmount();
                 } else {
                     if (order.getGroupType().equals(GroupType.MUSIC)) {
-                        musicGroupCourseFee = order.getRouteAmount().subtract(musicalFee).subtract(teachingFee).subtract(maintenanceFee).subtract(maintenanceProductFee).subtract(otherFee).subtract(leaseFee);
+                        musicGroupCourseFee = order.getRouteAmount().subtract(musicalFee).subtract(teachingFee).subtract(maintenanceFee).subtract(maintenanceProductFee).subtract(otherFee).subtract(leaseFee).subtract(cloudTeacherFee);
                     } else if (order.getType().equals(OrderTypeEnum.REPAIR)) {
                         repairFee = order.getRouteAmount().subtract(musicalFee).subtract(teachingFee).subtract(otherFee);
                     } else if (order.getType().equals(OrderTypeEnum.OUTORDER)) {
@@ -632,6 +655,7 @@ public class ExportServiceImpl implements ExportService {
                     musicalFee = order.getMusicalFee().subtract(routeMusicalFee);
                     teachingFee = order.getTeachingFee().subtract(routeTeachingFee);
                     otherFee = order.getOtherFee().subtract(routeOtherFee);
+                    cloudTeacherFee = order.getCloudTeacherFee().subtract(routeCloudTeacherFee);
                 }
                 j++;
 
@@ -647,6 +671,7 @@ public class ExportServiceImpl implements ExportService {
                 routeMusicalFee = routeMusicalFee.add(musicalFee);
                 routeTeachingFee = routeTeachingFee.add(teachingFee);
                 routeOtherFee = routeOtherFee.add(otherFee);
+                routeCloudTeacherFee = routeCloudTeacherFee.add(cloudTeacherFee);
 
                 order.setMusicGroupCourseFee(musicGroupCourseFee);
                 order.setVipCourseFee(vipCourseFee);
@@ -660,6 +685,7 @@ public class ExportServiceImpl implements ExportService {
                 order.setMusicalFee(musicalFee);
                 order.setTeachingFee(teachingFee);
                 order.setOtherFee(otherFee);
+                order.setCloudTeacherFee(cloudTeacherFee);
             }
         });
         String[] organIdArr = params.get("oldOrganId").toString().split(",");
@@ -672,9 +698,9 @@ public class ExportServiceImpl implements ExportService {
 
         HSSFWorkbook workbook = null;
         try {
-            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分润余额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "押金", "乐器", "教辅费用", "其它", "手续费", "到账时间",
+            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分润余额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用","云教练", "押金", "乐器", "教辅费用", "其它", "手续费", "到账时间",
                     "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"};
-            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance", "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "leaseFee", "musicalFee", "teachingFee", "otherFee", "transferFee", "payTime", "musicGroupId",
+            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance", "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee","cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "otherFee", "transferFee", "payTime", "musicGroupId",
                     "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"};
             workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
             workbook.write(fileOutputStream);

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

@@ -1662,7 +1662,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-                                         boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee) {
+                                         boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee, BigDecimal cloudTeacherAmount) {
 
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(id);
         if (musicGroupQuit == null) {
@@ -1770,9 +1770,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
             BigDecimal orderExpectAmount = studentPaymentOrder == null ? BigDecimal.ZERO : studentPaymentOrder.getExpectAmount();
 
+            boolean hasPaid = studentRegistration.getMusicGroupStatus().equals(StudentMusicGroupStatusEnum.NORMAL);
             // 缴费人数更新
             MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
-            if (musicGroupSubjectPlan != null && (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.COURSE_lIST) || orderExpectAmount.compareTo(BigDecimal.ZERO) > 0)) {
+            if (hasPaid && musicGroupSubjectPlan != null && (!musicGroup.getCourseViewType().equals(CourseViewTypeEnum.CLOUD_TEACHER) || orderExpectAmount.compareTo(BigDecimal.ZERO) > 0)) {
                 musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
                 musicGroupSubjectPlan.setUpdateTime(date);
                 musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
@@ -1838,12 +1839,30 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     }
                 }
                 amount = amount.add(maintenanceFee);
-                if (studentMaintenance != null) {
+                if (maintenanceFee.compareTo(BigDecimal.ZERO) > 0 && studentMaintenance != null) {
                     studentMaintenance.setDelFlag(1);
                     studentInstrumentDao.update(studentMaintenance);
                 }
             }
 
+            //退云教练费用
+            if (cloudTeacherAmount != null) {
+                Date nowDate = new Date();
+                CloudTeacherOrder studentCloudTeacherOrder = cloudTeacherOrderService.getStudentCloudTeacherOrder(userId, musicGroupId);
+                if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0) {
+                    if (studentCloudTeacherOrder == null || (studentCloudTeacherOrder.getEndTime() != null && studentCloudTeacherOrder.getEndTime().compareTo(nowDate) <= 0)) {
+                        throw new BizException("学生云教练已过有效期,不能退费");
+                    }
+                    if (cloudTeacherAmount.compareTo(studentCloudTeacherOrder.getAmount()) > 0) {
+                        throw new BizException("云教练退费金额不能大于原始订单金额");
+                    }
+                }
+                amount = amount.add(cloudTeacherAmount);
+                if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0 && studentCloudTeacherOrder != null) {
+                    cloudTeacherOrderService.quitCloudTeacherOrder(studentCloudTeacherOrder, cloudTeacherAmount);
+                }
+            }
+
             if (amount.doubleValue() > 0) {
                 // 增加交易流水
                 sysUserCashAccountDetailService.addCashAccountDetail(userId, amount, SysUserCashAccountDetailService.MUSIC_GROUP + musicGroupId, "",
@@ -1884,6 +1903,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (studentRegistration == null) {
             throw new BizException("用户注册信息不存在");
         }
+        boolean hasPaid = studentRegistration.getMusicGroupStatus().equals(StudentMusicGroupStatusEnum.NORMAL);
 
         Date date = new Date();
 
@@ -1977,7 +1997,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         // 判断乐器是否是租赁
         MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
-        if (musicGroupSubjectPlan != null && (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.COURSE_lIST) || orderExpectAmount.compareTo(BigDecimal.ZERO) > 0)) {
+        if (hasPaid && musicGroupSubjectPlan != null && (!musicGroup.getCourseViewType().equals(CourseViewTypeEnum.CLOUD_TEACHER) || orderExpectAmount.compareTo(BigDecimal.ZERO) > 0)) {
             musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
             musicGroupSubjectPlan.setUpdateTime(date);
             musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
@@ -2043,7 +2063,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 }
             }
             amount = amount.add(maintenanceFee);
-            if (studentMaintenance != null) {
+            if (maintenanceFee.compareTo(BigDecimal.ZERO) > 0 && studentMaintenance != null) {
                 studentMaintenance.setDelFlag(1);
                 studentInstrumentDao.update(studentMaintenance);
             }
@@ -2062,7 +2082,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 }
             }
             amount = amount.add(cloudTeacherAmount);
-            if (studentCloudTeacherOrder != null) {
+            if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0 && studentCloudTeacherOrder != null) {
                 cloudTeacherOrderService.quitCloudTeacherOrder(studentCloudTeacherOrder, cloudTeacherAmount);
             }
         }

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

@@ -1198,7 +1198,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {
             MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
             //减去缴费人数(器乐收费,0元时不减缴费人数)
-            if (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.COURSE_lIST) || studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+            if (!musicGroup.getCourseViewType().equals(CourseViewTypeEnum.CLOUD_TEACHER) || studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
                 musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
                 updateCount = musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
                 if (updateCount <= 0) {

+ 41 - 36
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectServiceImpl.java

@@ -1,16 +1,15 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.ym.mec.biz.dal.dao.ChargeTypeOrganizationFeeDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SubjectGoodsMapperDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.ConditionDto;
 import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
 import com.ym.mec.biz.dal.dto.SubjectApplyDetailDto;
 import com.ym.mec.biz.dal.entity.ChargeTypeOrganizationFee;
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.SubjectGoodsMapper;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.SubjectQueryInfo;
 import com.ym.mec.biz.service.SubjectService;
@@ -28,7 +27,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
-public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject>  implements SubjectService {
+public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject> implements SubjectService {
 
     @Autowired
     private SubjectDao subjectDao;
@@ -38,6 +37,8 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject>  imple
     private SubjectGoodsMapperDao subjectGoodsMapperDao;
     @Autowired
     private ChargeTypeOrganizationFeeDao chargeTypeOrganizationFeeDao;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
 
     @Override
     public BaseDAO<Integer, Subject> getDAO() {
@@ -52,19 +53,19 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject>  imple
     @Override
     public PageInfo<Subject> queryPageTree(SubjectQueryInfo queryInfo) {
         PageInfo<Subject> pageInfo = queryPage(queryInfo);
-        for (Subject subject:pageInfo.getRows()) {
-            subject = getTree(subject,queryInfo.getDelFlag(),queryInfo.getTenantId());
+        for (Subject subject : pageInfo.getRows()) {
+            subject = getTree(subject, queryInfo.getDelFlag(), queryInfo.getTenantId());
         }
         return pageInfo;
     }
 
     @Override
-    public List<Subject> findDefaultSubByChargeTypeId(Integer chargeTypeId,Integer organId,Integer number) {
+    public List<Subject> findDefaultSubByChargeTypeId(Integer chargeTypeId, Integer organId, Integer number) {
         List<Subject> subByChargeTypeId = subjectDao.findDefaultSubByChargeTypeId(chargeTypeId);
         ChargeTypeOrganizationFee byOrganId = chargeTypeOrganizationFeeDao.findByOrganId(chargeTypeId, organId);
-        if(byOrganId != null){
+        if (byOrganId != null) {
             BigDecimal bigDecimal = new BigDecimal(number);
-            subByChargeTypeId.forEach(e->{
+            subByChargeTypeId.forEach(e -> {
                 e.setFee(byOrganId.getCourseFee().multiply(bigDecimal));
             });
         }
@@ -74,41 +75,45 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject>  imple
     @Override
     public List<SubjectApplyDetailDto> findSubApplyDetail(String musicGroupId) {
         List<SubjectApplyDetailDto> subApplyDetail = subjectDao.findSubApplyDetail(musicGroupId);
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 //        //统计当前乐团不同声部的报名人数
-        Map<Integer,Integer> applyNum = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(studentRegistrationDao.countApplyNum(musicGroupId))),HashMap.class);
-        Map<Integer, Integer> payNumMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(studentRegistrationDao.countPayNum(musicGroupId))),HashMap.class);
-        subApplyDetail.forEach(detail ->{
+        Map<Integer, Integer> applyNum = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(studentRegistrationDao.countApplyNum(musicGroupId))), HashMap.class);
+        Map<Integer, Integer> payNumMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(studentRegistrationDao.countPayNum(musicGroupId))), HashMap.class);
+        subApplyDetail.forEach(detail -> {
             Integer num = payNumMap.get(detail.getSubjectId());
-            detail.setPayNum(num == null?0:num);
+            if (!musicGroup.getCourseViewType().equals(CourseViewTypeEnum.CLOUD_TEACHER)) {
+                detail.setPayNum(num == null ? 0 : num);
+            }
             num = applyNum.get(detail.getSubjectId());
-            detail.setApplyStudentNum(num == null?0:num);
+            detail.setApplyStudentNum(num == null ? 0 : num);
+
         });
         return subApplyDetail;
     }
 
     @Override
     public void upSetSubject(Subject subject) {
-        if(subject.getDelFlag() == YesOrNoEnum.YES){
+        if (subject.getDelFlag() == YesOrNoEnum.YES) {
             subjectDao.delete(subject.getId());
             return;
         }
         Integer parentId = upset(subject, null);
         List<Subject> subjects = subject.getSubjects();
-        if(subjects != null && subjects.size() > 0){
-            subjects.forEach(e->{
+        if (subjects != null && subjects.size() > 0) {
+            subjects.forEach(e -> {
                 upset(e, parentId);
             });
         }
     }
 
-    private Integer upset(Subject subject,Integer parentId){
-        if(parentId != null){
+    private Integer upset(Subject subject, Integer parentId) {
+        if (parentId != null) {
             subject.setParentSubjectId(parentId);
         }
-        if(subject.getId() != null){
+        if (subject.getId() != null) {
             subject.setUpdateTime(new Date());
             subjectDao.update(subject);
-        }else {
+        } else {
             subjectDao.insert(subject);
         }
         return subject.getId();
@@ -116,36 +121,36 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject>  imple
 
     @Override
     public void markGoods(List<SubjectGoodsMapper> subjectGoodsMappers) {
-        subjectGoodsMappers.forEach(e->{
+        subjectGoodsMappers.forEach(e -> {
             upsetGoods(e);
         });
     }
 
-    private void upsetGoods(SubjectGoodsMapper subjectGoodsMapper){
-        if(subjectGoodsMapper.getId() != null){
-            if(subjectGoodsMapper.getDelFlag()){
+    private void upsetGoods(SubjectGoodsMapper subjectGoodsMapper) {
+        if (subjectGoodsMapper.getId() != null) {
+            if (subjectGoodsMapper.getDelFlag()) {
                 subjectGoodsMapperDao.delete(subjectGoodsMapper.getId());
                 return;
             }
             subjectGoodsMapper.setUpdateTime(new Date());
             subjectGoodsMapperDao.update(subjectGoodsMapper);
-        }else {
+        } else {
             subjectGoodsMapperDao.insert(subjectGoodsMapper);
         }
     }
 
 
-    private Subject getTree(Subject sub,YesOrNoEnum yesOrNoEnum,Integer tenantId){
+    private Subject getTree(Subject sub, YesOrNoEnum yesOrNoEnum, Integer tenantId) {
         //得到根节点对象
         //获取子节点list
-        List<Subject> subjects = subjectDao.findByParentId(sub.getId(),yesOrNoEnum,tenantId);
+        List<Subject> subjects = subjectDao.findByParentId(sub.getId(), yesOrNoEnum, tenantId);
         //如果存在子节点
-        if(subjects != null && subjects.size() > 0) {
+        if (subjects != null && subjects.size() > 0) {
             //将子节点list放入父节点对象
             sub.setSubjects(subjects);
             //遍历子节点....
             for (Subject subject : subjects) {
-                getTree(subject,yesOrNoEnum,tenantId);
+                getTree(subject, yesOrNoEnum, tenantId);
             }
         }
         return sub;
@@ -163,15 +168,15 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject>  imple
 
     @Override
     public Map<Long, String> findSubjectMapBySubjectIdsList(List<String> subjectIdsList) {
-        if(CollectionUtils.isEmpty(subjectIdsList)){
+        if (CollectionUtils.isEmpty(subjectIdsList)) {
             return new HashMap<>();
         }
         String subjectIdsString = StringUtils.join(subjectIdsList, ",");
         String[] split = subjectIdsString.split(",");
-        List<String> subjectIds=new ArrayList<>(Arrays.asList(split));
+        List<String> subjectIds = new ArrayList<>(Arrays.asList(split));
         subjectIds = subjectIds.stream().distinct().collect(Collectors.toList());
-        List<Map<Long, String>> bySubjecIds = subjectDao.findBySubjecIds(StringUtils.join(subjectIds,","));
-        Map<Long,String> subjectIdAndName = MapUtil.convertMybatisMap(bySubjecIds);
+        List<Map<Long, String>> bySubjecIds = subjectDao.findBySubjecIds(StringUtils.join(subjectIds, ","));
+        Map<Long, String> subjectIdAndName = MapUtil.convertMybatisMap(bySubjecIds);
         return subjectIdAndName;
     }
 
@@ -182,7 +187,7 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject>  imple
 
     @Override
     public List<Subject> findBySubjectByIdList(List<Integer> subjectIdList) {
-        return subjectDao.findBySubjectByIdList(StringUtils.join(subjectIdList,","));
+        return subjectDao.findBySubjectByIdList(StringUtils.join(subjectIdList, ","));
     }
 
     @Override

+ 5 - 8
mec-biz/src/main/resources/config/mybatis/CloudTeacherMapper.xml

@@ -29,8 +29,7 @@
         <!--@mbg.generated-->
         insert into cloud_teacher (student_id_, level_, start_time_, end_time_, version_, create_time_,
         update_time_)
-        values (#{studentId}, #{level}, #{startTime}, #{endTime}, #{version}, #{createTime},
-        #{updateTime})
+        values (#{studentId}, #{level}, #{startTime}, #{endTime}, #{version}, NOW(),NOW())
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacher">
         <!--@mbg.generated-->
@@ -51,9 +50,7 @@
             <if test="createTime != null">
                 create_time_ = #{createTime},
             </if>
-            <if test="updateTime != null">
-                update_time_ = #{updateTime},
-            </if>
+            update_time_ = NOW(),
             version_ = version_+1
         </set>
         where id_ = #{id} AND version_ = #{version}
@@ -62,19 +59,19 @@
     <!-- 全查询 -->
     <select id="findAll" resultMap="CloudTeacher">
         SELECT *
-        FROM cloud_teacher_order
+        FROM cloud_teacher
     </select>
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="CloudTeacher" parameterType="map">
-        SELECT * FROM cloud_teacher_order
+        SELECT * FROM cloud_teacher
         <include refid="global.limit"/>
     </select>
 
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int">
         SELECT COUNT(*)
-        FROM cloud_teacher_order
+        FROM cloud_teacher
     </select>
 
     <select id="getByStudentId" resultMap="CloudTeacher">

+ 14 - 12
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -17,6 +17,7 @@
         <result column="end_time_" property="endTime"/>
         <result column="order_id_" property="orderId"/>
         <result column="remark_" property="remark"/>
+        <result column="version_" property="version"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
         <result column="music_group_id_" property="musicGroupId"/>
@@ -83,11 +84,10 @@
             <if test="createTime != null">
                 create_time_ = #{createTime},
             </if>
-            <if test="updateTime != null">
-                update_time_ = #{updateTime},
-            </if>
+            version_ = version_+1,
+            update_time_ = NOW(),
         </set>
-        where id_ = #{id}
+        where id_ = #{id} AND version_ = #{version}
     </update>
 
     <!-- 全查询 -->
@@ -140,15 +140,17 @@
     </select>
 
     <select id="getStudentCloudTeacherOrder" resultMap="CloudTeacherOrder">
-        SELECT * FROM cloud_teacher_order
+        SELECT *
+        FROM cloud_teacher_order
         WHERE order_id_ = (
-        SELECT MAX(id_)
-        FROM student_payment_order
-        WHERE type_ = 'APPLY'
-        AND music_group_id_ = #{musicGroupId}
-        AND status_ = 'SUCCESS'
-        AND user_id_ = #{studentId}
+            SELECT MAX(id_)
+            FROM student_payment_order
+            WHERE type_ = 'APPLY'
+              AND music_group_id_ = #{musicGroupId}
+              AND status_ = 'SUCCESS'
+              AND user_id_ = #{studentId}
         )
-        AND student_id_ = #{studentId} AND status_ IN (1,2)
+          AND student_id_ = #{studentId}
+          AND status_ IN (1, 2)
     </select>
 </mapper>

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

@@ -1071,6 +1071,7 @@
 		LEFT JOIN teacher t ON t.id_ = tcs.user_id_
 		LEFT JOIN sys_user su ON su.id_ = tcs.user_id_
 		WHERE su.lock_flag_ = 0 AND su.del_flag_ = 0 AND t.job_nature_ = 'FULL_TIME' AND t.demission_date_ IS NULL
+		AND t.is_settlement_salary_ = 1
 		AND DATE_FORMAT(tcs.month_,'%Y-%m') = #{monthStr} AND tcs.low_salary = 1
 		<if test="organIdsStr != null and organIdsStr != ''">
 			AND FIND_IN_SET(tcs.organ_id_,#{organIdsStr})

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

@@ -128,8 +128,8 @@ public class MusicGroupQuitController extends BaseController {
             @ApiImplicitParam(name = "maintenanceFee", value = "退乐保费用", required = true, dataType = "num")
     })
     public HttpResponseResult quitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-                                             boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee) throws Exception {
-        return succeed(musicGroupService.approveQuitMusicGroup(id, status, reason, isRefundCourseFee, isRefundInstrumentFee, isRefundTeachingAssistantsFee, maintenanceFee));
+                                             boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee,BigDecimal cloudTeacherAmount) throws Exception {
+        return succeed(musicGroupService.approveQuitMusicGroup(id, status, reason, isRefundCourseFee, isRefundInstrumentFee, isRefundTeachingAssistantsFee, maintenanceFee, cloudTeacherAmount));
     }
 
     @ApiOperation(value = "一键退团")

BIN
mec-web/src/main/resources/excelTemplate/商品导入模板.xls