Browse Source

缴费项目外部订单导入

zouxuan 2 years ago
parent
commit
5271c19e4f

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRegistration.java

@@ -112,7 +112,7 @@ public class StudentRegistration extends BaseEntity {
     @ApiModelProperty(value = "是否是插班生0不是,1是", required = true)
     private int transferStudent;
 
-    private BigDecimal surplusCourseFee;
+    private BigDecimal surplusCourseFee = BigDecimal.ZERO;
 
     private BigDecimal expectSurplusCourseFee;
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java

@@ -154,5 +154,8 @@ public interface StudentPaymentOrderDetailService extends BaseService<Long, Stud
      */
     void addOrderDetailTo(StudentPaymentOrder studentPaymentOrder, MusicGroup musicGroup, StudentRegistration studentRegistration);
 
+    void addOrderDetailTo1(StudentPaymentOrder studentPaymentOrder, MusicGroup musicGroup,
+                           StudentRegistration studentRegistration, List<StudentPaymentOrderDetail> allDetails);
+
     List<StudentPaymentOrderDetail> findByOrderId(Long paymentOrderId);
 }

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

@@ -99,7 +99,7 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
     StudentPaymentOrder addOrder(StudentRegistration studentRegistration,
                                  StudentPaymentOrder studentPaymentOrder, MusicGroupApplyGoodsDto goodsDto, RegisterPayDto registerPayDto, CouponPayParam couponPayParam) throws Exception;
 
-    void addOrder1(StudentPaymentOrder studentPaymentOrder,
+    List<StudentPaymentOrderDetail> addOrder1(StudentPaymentOrder studentPaymentOrder,
                    MusicGroupPaymentCalender calender,
                    List<MusicGroupPaymentCalenderCourseSettings> newCourses,
                    MusicGroupPaymentCalenderMember calenderMember,

+ 51 - 47
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -50,7 +50,7 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-import static com.ym.mec.biz.dal.enums.OrderTypeEnum.OUTORDER;
+import static com.ym.mec.biz.dal.enums.OrderTypeEnum.*;
 import static com.ym.mec.common.controller.BaseController.succeed;
 
 @Service
@@ -1889,7 +1889,7 @@ public class ExportServiceImpl implements ExportService {
         long i = 1;
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
         List<Integer> cooperationOrganIds = studentPaymentOrderExportDtos.stream()
-                .filter(e -> OUTORDER == e.getType() || GroupType.OUTORDER == e.getGroupType())
+                .filter(e -> OUTORDER == e.getType() || GroupType.OUTORDER == e.getGroupType() && (e.getType() != RENEW && e.getType() != APPLY))
                 .filter(e -> e.getMusicGroupId() != null)
                 .map(e -> Integer.valueOf(e.getMusicGroupId()))
                 .distinct()
@@ -2204,55 +2204,57 @@ public class ExportServiceImpl implements ExportService {
                     } else if (row.getGroupType().equals(OrderTypeEnum.REPAIR)) {
                         row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                     } else if (row.getGroupType() == GroupType.OUTORDER) {
-                        //销售收入
-                        BigDecimal add = feeByType.getMusicalFee().add(row.getTeachingFee()).add(row.getMaintenanceProductFee()).add(feeByType.getOtherFee());
-                        //服务收入
-                        BigDecimal subtract = feeByType.getActualAmount().subtract(add);
-                        //如果是淘器微信那么就是零售
-                        if (Objects.equals("淘器微信", row.getMerNos()) && add.compareTo(BigDecimal.ZERO) > 0) {
-                            //如果有服务收入那么是课程学校采买
-                            row.setMusicalFee(BigDecimal.ZERO);
-                            row.setTeachingFee(BigDecimal.ZERO);
-                            row.setMaintenanceProductFee(BigDecimal.ZERO);
-                            row.setOtherFee(subtract);
-                            row.setRetailGoodsFee(add);
-                            row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RETAIL_GOODS.getMsg());
-                        } else {
-                            //拆分导入订单
-                            if (row.getType() == OrderTypeEnum.OUTORDER || row.getType() == OrderTypeEnum.SCHOOL) {
-                                if (row.getType() == OrderTypeEnum.SCHOOL) {
-                                    row.setMusicalFee(BigDecimal.ZERO);
-                                    row.setTeachingFee(BigDecimal.ZERO);
-                                    row.setMaintenanceProductFee(BigDecimal.ZERO);
-                                    row.setOtherFee(BigDecimal.ZERO);
-                                    row.setLargeMusicalFee(add);
-                                }
+                        if (row.getType() != RENEW && row.getType() != APPLY) {
+                            //销售收入
+                            BigDecimal add = feeByType.getMusicalFee().add(row.getTeachingFee()).add(row.getMaintenanceProductFee()).add(feeByType.getOtherFee());
+                            //服务收入
+                            BigDecimal subtract = feeByType.getActualAmount().subtract(add);
+                            //如果是淘器微信那么就是零售
+                            if (Objects.equals("淘器微信", row.getMerNos()) && add.compareTo(BigDecimal.ZERO) > 0) {
                                 //如果有服务收入那么是课程学校采买
-                                if (subtract.compareTo(BigDecimal.ZERO) == 0) {
-                                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.LARGE_MUSICAL.getMsg());
-                                } else {
-                                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.COURSE_SCHOOL_BUY.getMsg());
-                                }
-                                row.setCourseSchoolBuyAmount(subtract);
-                            } else if (row.getType() == OrderTypeEnum.OTHER) {
-                                row.setOtherFee(row.getOtherFee().add(subtract));
-                            } else {
                                 row.setMusicalFee(BigDecimal.ZERO);
                                 row.setTeachingFee(BigDecimal.ZERO);
                                 row.setMaintenanceProductFee(BigDecimal.ZERO);
-                                row.setOtherFee(BigDecimal.ZERO);
+                                row.setOtherFee(subtract);
                                 row.setRetailGoodsFee(add);
-                                row.setMusicGroupCourseFee(subtract);
-                                //如果有服务收入那么是课程学校采买
-                                if (subtract.compareTo(BigDecimal.ZERO) == 0) {
-                                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RETAIL_GOODS.getMsg());
+                                row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RETAIL_GOODS.getMsg());
+                            } else {
+                                //拆分导入订单
+                                if (row.getType() == OrderTypeEnum.OUTORDER || row.getType() == OrderTypeEnum.SCHOOL) {
+                                    if (row.getType() == OrderTypeEnum.SCHOOL) {
+                                        row.setMusicalFee(BigDecimal.ZERO);
+                                        row.setTeachingFee(BigDecimal.ZERO);
+                                        row.setMaintenanceProductFee(BigDecimal.ZERO);
+                                        row.setOtherFee(BigDecimal.ZERO);
+                                        row.setLargeMusicalFee(add);
+                                    }
+                                    //如果有服务收入那么是课程学校采买
+                                    if (subtract.compareTo(BigDecimal.ZERO) == 0) {
+                                        row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.LARGE_MUSICAL.getMsg());
+                                    } else {
+                                        row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.COURSE_SCHOOL_BUY.getMsg());
+                                    }
+                                    row.setCourseSchoolBuyAmount(subtract);
+                                } else if (row.getType() == OrderTypeEnum.OTHER) {
+                                    row.setOtherFee(row.getOtherFee().add(subtract));
                                 } else {
-                                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.COURSE_STUDENT_BUY.getMsg());
+                                    row.setMusicalFee(BigDecimal.ZERO);
+                                    row.setTeachingFee(BigDecimal.ZERO);
+                                    row.setMaintenanceProductFee(BigDecimal.ZERO);
+                                    row.setOtherFee(BigDecimal.ZERO);
+                                    row.setRetailGoodsFee(add);
+                                    row.setMusicGroupCourseFee(subtract);
+                                    //如果有服务收入那么是课程学校采买
+                                    if (subtract.compareTo(BigDecimal.ZERO) == 0) {
+                                        row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RETAIL_GOODS.getMsg());
+                                    } else {
+                                        row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.COURSE_STUDENT_BUY.getMsg());
+                                    }
                                 }
                             }
+                            row.setTransferFee(BigDecimal.ZERO);
+                            row.setPlatformFee(BigDecimal.ZERO);
                         }
-                        row.setTransferFee(BigDecimal.ZERO);
-                        row.setPlatformFee(BigDecimal.ZERO);
                     }
                 }
                 if (row.getTypeDesc() == null) {
@@ -2272,11 +2274,13 @@ public class ExportServiceImpl implements ExportService {
                 }
             }
             if ((row.getType() == OUTORDER || row.getGroupType() == GroupType.OUTORDER) && StringUtils.isNotEmpty(row.getMusicGroupId())) {
-                if (cooperationOrganMap.containsKey(Integer.valueOf(row.getMusicGroupId()))) {
-                    row.setCooperationOrganName(cooperationOrganMap.get(Integer.valueOf(row.getMusicGroupId())));
-                    CooperationOrgan cooperationOrganEduTeacher = musicGroupDao.findCooperationOrganEduTeacher(Integer.valueOf(row.getMusicGroupId()));
-                    if (cooperationOrganEduTeacher != null) {
-                        row.setEduTeacher(cooperationOrganEduTeacher.getLinkman());
+                if (row.getType() != RENEW && row.getType() != APPLY) {
+                    if (cooperationOrganMap.containsKey(Integer.valueOf(row.getMusicGroupId()))) {
+                        row.setCooperationOrganName(cooperationOrganMap.get(Integer.valueOf(row.getMusicGroupId())));
+                        CooperationOrgan cooperationOrganEduTeacher = musicGroupDao.findCooperationOrganEduTeacher(Integer.valueOf(row.getMusicGroupId()));
+                        if (cooperationOrganEduTeacher != null) {
+                            row.setEduTeacher(cooperationOrganEduTeacher.getLinkman());
+                        }
                     }
                 }
             }

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

@@ -76,10 +76,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private MusicGroupDao musicGroupDao;
     @Autowired
     private TeacherDao teacherDao;
-    
+
     @Autowired
     private MusicGroupDeliveryRecordDao musicGroupDeliveryRecordDao;
-    
+
     @Autowired
     private StudentService studentService;
     @Autowired
@@ -504,7 +504,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 				sysUser.setUpdateTime(now);
 				teacherDao.addSysUser(sysUser);
 				si.setUserId(sysUser.getId());
-            }
+            }else {
+				si.setUserId(userDto.getUserId());
+			}
 			Integer userId = si.getUserId();
 			if(!existPhones.contains(si.getPhone())){
 				student = new Student(userId, subjectMap.get(si.getSubjectName()) + "");
@@ -516,7 +518,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(userId, musicGroupId);
 			if(studentRegistration == null){
 				studentRegistration = new StudentRegistration();
-				String studentGrade = studentService.getStudentGrade(organization.getGradeType(), student.getCurrentGradeNum());
+				String studentGrade = studentService.getStudentGrade(organization.getGradeType(), SixPlusGradeEnum.get(si.getGrade()).getCode());
 				studentRegistration.setCurrentGrade(studentGrade);
 				studentRegistration.setActualSubjectId(subjectMap.get(si.getSubjectName()));
 				studentRegistration.setIsAllowAdjust(YesOrNoEnum.YES);
@@ -524,7 +526,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 				studentRegistration.setUserId(userId);
 				studentRegistration.setParentsPhone(si.getPhone());
 				studentRegistration.setName(si.getStudentName());
-				studentRegistration.setGender(sysUser.getGender());
+				studentRegistration.setGender(si.getGender().equals("男") ? 1 : 0);
 				studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
 				studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
 				studentRegistration.setTemporaryCourseFee(BigDecimal.ZERO);
@@ -564,9 +566,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			studentPaymentOrder.setMerNos(si.getMerNos());
 			studentPaymentOrder.setTransNo(si.getTransNo());
 			studentPaymentOrder.setPayTime(si.getPayTime());
+			studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
+			studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
 			studentPaymentOrderService.insert(studentPaymentOrder);
-			studentRegistrationService.addOrder1(studentPaymentOrder,calender,courseSettings, calenderMember, calenderRepair, calenderActivities);
+			List<StudentPaymentOrderDetail> orderDetails = studentRegistrationService.addOrder1(studentPaymentOrder, calender, courseSettings, calenderMember, calenderRepair, calenderActivities);
 			studentPaymentRouteOrderService.addRouteOrder(orderNo, calender.getOrganId(), calender.getCurrentTotalAmount());
+			studentPaymentOrderDetailService.addOrderDetailTo1(studentPaymentOrder, musicGroup, studentRegistration,orderDetails);
 		}
 		if (CollectionUtils.isNotEmpty(insertList)) {
 			studentRegistrationService.batchInsert(insertList);
@@ -608,28 +613,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			}
 			calender.setUpdateTime(now);
 			musicGroupPaymentCalenderDao.update(calender);
-
-			MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
-			List<MusicGroupPaymentCalenderDetail> insertMusicGroupPaymentCalenderDetailList = new ArrayList<>();
-			for (MusicGroupPaymentImportDto si : importDtos) {
-				musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
-				musicGroupPaymentCalenderDetail.setTenantId(calender.getTenantId());
-				musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(calender.getId());
-				musicGroupPaymentCalenderDetail.setUserId(si.getUserId());
-				musicGroupPaymentCalenderDetail.setResponsibleUserId(calender.getOperator());
-				musicGroupPaymentCalenderDetail.setPaymentStatus(PAID_COMPLETED);
-				musicGroupPaymentCalenderDetail.setPayTime(now);
-				musicGroupPaymentCalenderDetail.setPaymentOrderId(null);
-				musicGroupPaymentCalenderDetail.setUseInCourse(0);
-				musicGroupPaymentCalenderDetail.setOpen(1);
-				musicGroupPaymentCalenderDetail.setUserStatus(null);
-				musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(calender.getDeadlinePaymentDate());
-				musicGroupPaymentCalenderDetail.setStartPaymentDate(calender.getStartPaymentDate());
-				insertMusicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
-			}
-			if (insertMusicGroupPaymentCalenderDetailList.size() > 0) {
-				musicGroupPaymentCalenderDetailDao.batchInsert(insertMusicGroupPaymentCalenderDetailList);
-			}
 		}
 	}
 
@@ -836,7 +819,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         //记录操作日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroup.getId(), "预报名完成(预报名 -> 报名缴费中)", sysUser.getId(), ""));
-        
+
         studentRegistrationDao.musicGroupOpenPay(musicGroupId, PaymentStatusEnum.OPEN);
         MusicGroupPaymentCalender regCalender = musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId);
         if (regCalender != null && regCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.STUDENT)) {
@@ -1150,6 +1133,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 throw new BizException("缴费项目批次{}不存在",batchNo);
             }
 			MusicGroupPaymentCalender calender = byBatchNo.get(0);
+			if(calender.getPayUserType() == SCHOOL){
+				throw new BizException("不支持学校缴费导入");
+			}
 			if(calender.getPaymentType() != MUSIC_RENEW && calender.getPaymentType() != ADD_COURSE && calender.getPaymentType() != MUSIC_APPLY){
 				throw new BizException("不支持类型 {} 的缴费项目导入",calender.getPaymentType().getDesc());
 			}
@@ -1169,6 +1155,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 						throw new BizException("学员{}已缴费,请勿重复录入",userDto.getUserId());
 					}
 				}
+				MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
+				MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
+				MusicGroupPaymentCalenderRepair calenderRepair = musicGroupPaymentCalenderRepairDao.findByCalenderId(calenderId);
+				List<MusicGroupPaymentCalenderActivity> calenderActivities = musicGroupPaymentCalenderActivityDao.findByCalenderId(calenderId);
+				List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettings(calenderId);
 				for (MusicGroupPaymentImportDto userDto : userDtoList) {
 					String orderNo = idGeneratorService.generatorId("payment") + "";
 					StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
@@ -1193,13 +1184,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 					studentPaymentOrder.setTransNo(userDto.getTransNo());
 					studentPaymentOrder.setPayTime(userDto.getPayTime());
 					studentPaymentOrderDao.insert(studentPaymentOrder);
-					studentPaymentRouteOrderService.addRouteOrder(orderNo, calender.getOrganId(), calender.getCurrentTotalAmount());
-					Integer userId = studentPaymentOrder.getUserId();
-					String musicGroupId = studentPaymentOrder.getMusicGroupId();
-					StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
-					MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+					StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentPaymentOrder.getUserId(), calender.getMusicGroupId());
 					//支付成功后处理课程、云教练、活动等数据
-					studentPaymentOrderDetailService.addOrderDetailTo(studentPaymentOrder, musicGroup, studentRegistration);
+					List<StudentPaymentOrderDetail> orderDetails = studentRegistrationService.addOrder1(studentPaymentOrder, calender, courseSettings, calenderMember, calenderRepair, calenderActivities);
+					studentPaymentRouteOrderService.addRouteOrder(orderNo, calender.getOrganId(), calender.getCurrentTotalAmount());
+					studentPaymentOrderDetailService.addOrderDetailTo1(studentPaymentOrder, musicGroup, studentRegistration,orderDetails);
 				}
 			}
         }
@@ -1328,10 +1317,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult pay(RegisterPayDto registerPayDto) throws Exception {
-    	
+
     	Integer userId = registerPayDto.getUserId();
     	String musicGroupId = registerPayDto.getMusicGroupId();
-    	
+
         //判断用户是否已存在订单
         List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, DealStatusEnum.ING);
         if (CollectionUtils.isNotEmpty(applyOrderList)) {
@@ -1353,7 +1342,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup == null) {
             throw new BizException("查询乐团信息失败");
         }
-        
+
         SubjectChange subjectChange = subjectChangeDao.getStudentLastChange(userId, musicGroupId);
         if(subjectChange != null){
         	throw new BizException("您已做过声部更换操作,不能继续缴费");
@@ -1562,19 +1551,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         		throw new BizException("分部信息查询失败");
         	}
         	BigDecimal maxProfits = organ.getMaxMusicalInstrumentsProfits();
-        	
+
             for (MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup : subFeeSettingDto.getMusicGroupSubjectGoodsGroups()) {
                 if (musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT) && (musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson() == null
                         || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().isEmpty()
                         || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().equals("{}"))) {
                     throw new BizException(musicGroupSubjectGoodsGroup.getName() + " 请选择提供方式");
                 }
-                
+
                 //判断分润是否超过最大值
                 if(musicGroupSubjectGoodsGroup.getOrganShareProfit() != null && maxProfits.compareTo(musicGroupSubjectGoodsGroup.getOrganShareProfit()) < 0){
                 	throw new BizException("超过了分润最大金额[{}],请重新设置分润金额", maxProfits.doubleValue());
                 }
-                
+
                 if (musicGroupSubjectGoodsGroup.getGroupRemissionCourseFee() == null) {
                     musicGroupSubjectGoodsGroup.setGroupRemissionCourseFee(0);
                 }
@@ -1685,12 +1674,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("用户信息获取失败");
         }
         Date date = new Date();
-        
+
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团信息不存在");
         }
-        
+
         if (musicGroup.getStatus() != MusicGroupStatusEnum.DRAFT && musicGroup.getStatus() != MusicGroupStatusEnum.AUDIT_FAILED) {
             throw new BizException("当前乐团状态不支持此操作");
         }
@@ -1704,23 +1693,23 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroup.setStatus(MusicGroupStatusEnum.AUDIT);
         musicGroup.setUpdateTime(date);
         musicGroupDao.update(musicGroup);
-        
+
         List<PaymentCalenderStatusEnum> statusList = new ArrayList<MusicGroupPaymentCalender.PaymentCalenderStatusEnum>();
         statusList.add(PaymentCalenderStatusEnum.DRAFT);
         //修改乐团报名缴费项目状态
         List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.queryByPaymentStatus(musicGroupId, statusList, null);
-        
+
         if(musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0) {
         	throw new BizException("请先创建缴费项目");
         }
-        
+
         musicGroupPaymentCalenderList.forEach(t -> {
         	t.setStatus(PaymentCalenderStatusEnum.AUDITING);
         	t.setUpdateTime(date);
         });
-        
+
         musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenderList);
-        
+
         sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(), new SysUserRoleEnum[]{ORGAN_MANAGER},
                 null, null, MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, sysUser.getRealName(), musicGroup.getName());
     }
@@ -1742,9 +1731,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup.getStatus() != MusicGroupStatusEnum.AUDIT) {
             throw new BizException("当前乐团状态不支持此操作");
         }
-        
+
         Date date = new Date();
-        
+
         //记录操作日志
         if (musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT){
         	musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "乐团审核失败(审核中 -> 审核失败)", sysUser.getId(), memo));
@@ -1752,40 +1741,40 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroup.setMemo(memo);
             musicGroup.setUpdateTime(date);
             musicGroupDao.update(musicGroup);
-            
+
             List<PaymentCalenderStatusEnum> statusList = new ArrayList<MusicGroupPaymentCalender.PaymentCalenderStatusEnum>();
             statusList.add(PaymentCalenderStatusEnum.AUDITING);
             //修改乐团报名缴费项目状态
             List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.queryByPaymentStatus(musicGroupId, statusList, null);
-            
+
             musicGroupPaymentCalenderList.forEach(t -> {
             	t.setStatus(PaymentCalenderStatusEnum.DRAFT);
             	t.setUpdateTime(date);
             });
-            
+
             musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenderList);
-            
+
         }else if(musicGroup.getStatus() == MusicGroupStatusEnum.FEE_AUDIT){
         	musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "乐团审核失败(费用审核中 -> 费用审核失败)", sysUser.getId(), memo));
         	List<PaymentCalenderStatusEnum> statusList = new ArrayList<MusicGroupPaymentCalender.PaymentCalenderStatusEnum>();
             statusList.add(PaymentCalenderStatusEnum.AUDITING);
             //修改乐团报名缴费项目状态
             List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.queryByPaymentStatus(musicGroupId, statusList, null);
-            
+
             musicGroupPaymentCalenderList.forEach(t -> {
             	t.setStatus(PaymentCalenderStatusEnum.REJECT);
             	t.setUpdateTime(date);
             	t.setMemo(memo);
             });
-            
+
             musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenderList);
-            
+
             //修改乐团状态
             musicGroup.setStatus(MusicGroupStatusEnum.FEE_AUDIT_FAILED);
             musicGroup.setUpdateTime(date);
             musicGroupDao.update(musicGroup);
         }
-        
+
     }
 
     @Override
@@ -1805,9 +1794,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup.getStatus() != MusicGroupStatusEnum.AUDIT) {
             throw new BizException("当前乐团状态不支持此操作");
         }
-        
+
         Date date = new Date();
-        
+
         if(musicGroup.getStatus() == MusicGroupStatusEnum.AUDIT){
             //记录操作日志
             musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "审核通过(审核中 -> 费用审核中)", sysUser.getId(), ""));
@@ -1815,17 +1804,17 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }else if(musicGroup.getStatus() == MusicGroupStatusEnum.FEE_AUDIT){
             musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "审核通过(费用审核中 -> 预报名)", sysUser.getId(), ""));
             musicGroup.setStatus(MusicGroupStatusEnum.PRE_APPLY);
-            
+
 
             List<PaymentCalenderStatusEnum> statusList = new ArrayList<MusicGroupPaymentCalender.PaymentCalenderStatusEnum>();
             statusList.add(PaymentCalenderStatusEnum.AUDITING);
             //修改乐团报名缴费项目状态
             List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.queryByPaymentStatus(musicGroupId, statusList, null);
-            
+
             if(musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0){
             	throw new BizException("没有审核中的缴费项目");
             }
-            
+
             musicGroupPaymentCalenderList.forEach(t -> {
                 if (t.getPayUserType() == SCHOOL) {
                     if (t.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -1842,7 +1831,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 }
             	t.setUpdateTime(date);
             });
-            
+
             musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenderList);
         }
         musicGroup.setUpdateTime(date);
@@ -2178,7 +2167,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         MusicGroupPaymentCalender regCalender = musicGroupPaymentCalenderService.findByMusicGroupRegCalender(musicGroup.getId());
         if (regCalender != null && regCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.STUDENT)) {
             regCalender.setDeadlinePaymentDate(expireDate);
-            
+
             //regCalender.setStatus(MusicGroupPaymentCalender.PaymentCalenderStatusEnum.OPEN);
             regCalender.setUpdateTime(date);
             musicGroupPaymentCalenderService.update(regCalender);
@@ -2413,7 +2402,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         Date date = new Date();
-        
+
         Boolean hasRole = employeePositionService.getDao().hasRole("一键退团",reqMusicGroupQuit.getOperatorId(),reqMusicGroupQuit.getTenantId());
 
         //如果发起退团申请的是乐团主管
@@ -2423,7 +2412,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	            if (!StringUtils.equals(musicGroupQuit.getCurrentApproveRole(), SysUserRoleEnum.EDUCATION.ordinal() + 1 + "")) {
 	                throw new BizException("只有分部经理才能审核");
 	            }
-	
+
 	            if (status == ApprovalStatus.APPROVED) {
 	                throw new BizException("只能分部经理操作退团");
 	            }
@@ -3931,7 +3920,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("用户信息获取失败");
         }
         String musicGroupId = closeMusicGroupDto.getMusicGroupId();
-        
+
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团找不到");
@@ -3990,7 +3979,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (registrations.size() > 0 && studentRegistrationService.quitAllStudent(musicGroup.getId(), "退团(乐团关闭)") <= 0) {
             throw new BizException("处理学生退团失败,请重试");
         }*/
-        
+
         //清除剩余未排课时长
         musicGroupPaymentStudentCourseDetailService.clearRemainCourseMinutesByMusicGroupId(musicGroupId);
 
@@ -4068,7 +4057,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean confirmDelivery(Integer userId, MusicGroupDeliveryVo musicGroupDeliveryVo) {
-    	
+
     	String musicGroupId = musicGroupDeliveryVo.getMusicGroupId();
 
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
@@ -4077,24 +4066,24 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         Date date = new Date();
-        
+
         String deliveryBatchNo = idGeneratorService.generatorId("delivery") + "";
-        
+
         //更新订单的发货状态(包括声部更换)
         List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = studentPaymentOrderDetailDao.querySubjectChangeByMusicGroupId(musicGroupId);
         if(studentPaymentOrderDetailList == null){
         	studentPaymentOrderDetailList = new ArrayList<StudentPaymentOrderDetail>();
         }
-        
+
         List<StudentPaymentOrderDetail> studentPaymentOrderDetailList1 = studentPaymentOrderDetailDao.findApplyOrderSuccess(musicGroupId, DealStatusEnum.SUCCESS, 0);
         if(studentPaymentOrderDetailList1 != null && studentPaymentOrderDetailList1.size() > 0){
         	studentPaymentOrderDetailList.addAll(studentPaymentOrderDetailList1);
         }
-        
+
         if(studentPaymentOrderDetailList == null || studentPaymentOrderDetailList.size() == 0){
         	throw new BizException("没有商品信息,不能发货");
         }
-        
+
         studentPaymentOrderDetailList.forEach(t -> {
         	t.setDeliveryBatchNo(deliveryBatchNo);
         	t.setUpdateTime(date);
@@ -4102,7 +4091,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if(studentPaymentOrderDetailList.size() > 0){
         	studentPaymentOrderDetailDao.batchUpdate(studentPaymentOrderDetailList);
         }
-        
+
         List<SubjectChange> subjectChangeList = subjectChangeDao.queryWaitDeliveryList(musicGroupId);
         subjectChangeList.forEach(t -> {
         	t.setDeliveryBatchNo(deliveryBatchNo);
@@ -4119,7 +4108,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         	List<Long> instrumentIdList = maintenanceList.stream().map(t -> t.getStudentInstrumentId()).collect(Collectors.toList());
 
             List<StudentInstrument> studentInstrumentList = studentInstrumentDao.queryById(instrumentIdList);
-            
+
             MusicGroupPaymentCalenderRepair musicGroupPaymentCalenderRepair = musicGroupPaymentCalenderRepairDao.findByCalenderId(maintenanceList.get(0).getMusicGroupPaymentCalenderId());
 
             List<StudentInstrument> updateList = new ArrayList<StudentInstrument>();
@@ -4153,7 +4142,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         dr.setMusicGroupShippingAddressId(musicGroupDeliveryVo.getAddressId());
         dr.setOperatorUserId(userId);
         dr.setUpdateTime(date);
-        
+
         musicGroupDeliveryRecordDao.insert(dr);
 
         return true;

+ 99 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -754,6 +754,105 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addOrderDetailTo1(StudentPaymentOrder studentPaymentOrder, MusicGroup musicGroup,
+                                  StudentRegistration studentRegistration,List<StudentPaymentOrderDetail> allDetails) {
+        //SurplusCourseFee
+        Integer userId = studentPaymentOrder.getUserId();
+        Integer tenantId = studentPaymentOrder.getTenantId();
+        BigDecimal courseFee = allDetails.stream().filter(o -> !(o.getType() == MUSICAL)
+                        && !(o.getType() == VIP)
+                        && !(o.getType() == PRACTICE)
+                        && !(o.getType() == MAINTENANCE)
+                        && !(o.getType() == CLOUD_TEACHER)
+                        && !(o.getType() == CLOUD_TEACHER_PLUS)
+                        && !(o.getType() == ORGAN_SHARE_PROFIT)
+                        && !(o.getType() == ACCESSORIES))
+                .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        if (studentRegistration.getTemporaryCourseFee() != null) {
+            studentRegistration.setTemporaryCourseFee(BigDecimal.ZERO);
+        }
+        studentRegistration.setPaymentStatus(YES);
+        studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+        if (studentPaymentOrder.getClassGroupId() == null || !studentPaymentOrder.getClassGroupId().equals(206)) {
+            studentRegistration.setPayingStatus(0);
+        }
+        if (courseFee.compareTo(BigDecimal.ZERO) > 0) {
+            //累加充值金额
+            studentRegistration.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(courseFee));
+            //添加日志
+            StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
+            studentCourseFeeDetail.setTenantId(tenantId);
+            studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
+            studentCourseFeeDetail.setAmount(courseFee);
+            studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee());
+            studentCourseFeeDetail.setMemo("乐团缴费充值");
+            studentCourseFeeDetail.setOperator(userId);
+            studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+        }
+        List<OrderDetailTypeEnum> detailTypeEnums = allDetails.stream().map(StudentPaymentOrderDetail::getType).collect(Collectors.toList());
+        //学生云教练处理
+        if (detailTypeEnums.contains(CLOUD_TEACHER) && studentPaymentOrder.getType() == OrderTypeEnum.APPLY) {
+            studentRegistration.setHasCloudTeacher(1);
+        }
+        studentRegistrationDao.update(studentRegistration);
+
+        //缴费项目详情
+        MusicGroupPaymentCalenderDetail paymentCalenderDetail = musicGroupPaymentCalenderDetailService.addCalenderDetail(studentPaymentOrder);
+
+        //活动小课包处理
+        List<StudentPaymentOrderDetail> activity = allDetails.stream().filter(o -> o.getType() == PRACTICE || o.getType() == VIP).collect(Collectors.toList());
+        if (activity != null && activity.size() > 0) {
+            activityUserMapperService.addOrderDetail2Activity(studentPaymentOrder, activity);
+        }
+
+        //学生乐器与月保处理
+        if (detailTypeEnums.contains(MUSICAL)) {
+            StudentPaymentOrderDetail musical = allDetails.stream().filter(o -> o.getType() == MUSICAL).findFirst().get();
+            Long studentInstrumentId = studentInstrumentService.addOrderDetail2Instrument(studentPaymentOrder, Integer.valueOf(musical.getGoodsIdList()));
+            if (detailTypeEnums.contains(MAINTENANCE)) {
+                StudentPaymentOrderDetail repair = allDetails.stream().filter(o -> o.getType() == MAINTENANCE).findFirst().get();
+                repair.setStudentInstrumentId(studentInstrumentId);
+                studentPaymentOrderDetailDao.update(repair);
+            }
+        }
+
+        //学生云教练处理
+        if (detailTypeEnums.contains(CLOUD_TEACHER)) {
+            if(studentPaymentOrder.getType() == OrderTypeEnum.APPLY){
+                studentRegistration.setHasCloudTeacher(1);
+                //如果是报名订单,要处理云教练费用、以及溢出课费
+            }
+            if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
+                //获取云教练溢出费用
+                MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberDao.findByCalenderId(paymentCalenderDetail.getMusicGroupPaymentCalenderId());
+                BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
+                        calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
+                if(calenderMember.getActualAmount().compareTo(courseIncome) > 0){
+                    BigDecimal subtract = calenderMember.getActualAmount().subtract(courseIncome);
+                    //累加充值金额
+                    studentRegistrationDao.updateCourseFee(studentRegistration.getId(),subtract);
+                    //添加日志
+                    StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
+                    studentCourseFeeDetail.setTenantId(tenantId);
+                    studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
+                    studentCourseFeeDetail.setAmount(subtract);
+                    studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(subtract));
+                    studentCourseFeeDetail.setMemo("会员团,购买云教练赠送课费");
+                    studentCourseFeeDetail.setOperator(userId);
+                    studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+                }
+            }
+            BigDecimal cloudTeacherFee = allDetails.stream().filter(o -> o.getType() == CLOUD_TEACHER)
+                    .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            cloudTeacherOrderService.addOrderDetail2CloudTeacher(studentPaymentOrder, cloudTeacherFee);
+        }
+    }
+
+    @Override
     public List<StudentPaymentOrderDetail> findByOrderId(Long paymentOrderId) {
         List<StudentPaymentOrderDetail> paymentOrderDetails = studentPaymentOrderDetailDao.findByOrderId(paymentOrderId);
         for (StudentPaymentOrderDetail paymentOrderDetail : paymentOrderDetails) {

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

@@ -929,7 +929,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void addOrder1(StudentPaymentOrder studentPaymentOrder,
+    public List<StudentPaymentOrderDetail> addOrder1(StudentPaymentOrder studentPaymentOrder,
                           MusicGroupPaymentCalender calender,
                           List<MusicGroupPaymentCalenderCourseSettings> newCourses,
                           MusicGroupPaymentCalenderMember calenderMember,
@@ -1002,6 +1002,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
         //添加订单明细
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
+        return studentPaymentOrderDetailList;
     }
 
     /**