浏览代码

缴费修改

zouxuan 3 年之前
父节点
当前提交
878fb179b7

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

@@ -119,5 +119,5 @@ public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long
     * @author zx
     * @date 2021/12/30 15:16
     */
-    void addCalenderDetail(StudentPaymentOrder studentPaymentOrder, StudentRegistration studentRegistration);
+    void addCalenderDetail(StudentPaymentOrder studentPaymentOrder,StudentRegistration studentRegistration);
 }

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

@@ -6,7 +6,6 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;

+ 11 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java

@@ -1,8 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.MusicalListDetailDto;
-import com.ym.mec.biz.dal.entity.Goods;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.BaseService;
@@ -111,4 +110,14 @@ public interface StudentPaymentOrderDetailService extends BaseService<Long, Stud
     * @date 2021/12/30 15:13
     */
     List<StudentPaymentOrderDetail> queryOrderDetail(Long orderId);
+
+    /**
+    * @description: 处理乐团缴费完成后,课程、会员、乐保等数据的录入
+     * @param studentPaymentOrder
+     * @param musicGroup
+    * @return void
+    * @author zx
+    * @date 2021/12/30 17:00
+    */
+    void addOrderDetailTo(StudentPaymentOrder studentPaymentOrder, MusicGroup musicGroup, StudentRegistration studentRegistration);
 }

+ 4 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -1,19 +1,13 @@
 package com.ym.mec.biz.service;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
-import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.enums.PayStatus;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
@@ -23,6 +17,10 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
 public interface StudentPaymentOrderService extends BaseService<Long, StudentPaymentOrder> {
 
     StudentPaymentOrder findByUserAndActive(Integer userId, Integer activeRemark, String remark,String status);

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

@@ -133,8 +133,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
     @Autowired
-    private SellOrderService sellOrderService;
-    @Autowired
     private PayService payService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
@@ -151,8 +149,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
     @Autowired
-    private MusicGroupSubjectPlanService musicGroupSubjectPlanService;
-    @Autowired
     private StudentRegistrationService studentRegistrationService;
     @Autowired
     private SporadicChargeInfoDao sporadicChargeInfoDao;
@@ -163,8 +159,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private ClassGroupStudentMapperService classGroupStudentMapperService;
     @Autowired
-    private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
-    @Autowired
     private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
     @Autowired
     private ImGroupMemberService imGroupMemberService;
@@ -190,37 +184,20 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private SysUserCashAccountDao sysUserCashAccountDao;
     @Autowired
     private ContractService contractService;
-
     @Autowired
     private StudentPreRegistrationDao studentPreRegistrationDao;
     @Autowired
-    private ActivityUserMapperService activityUserMapperService;
-
-    @Autowired
     private GroupEventSource groupEventSource;
-
     @Autowired
     private StudentInstrumentDao studentInstrumentDao;
-
     @Autowired
     private SysUserCashAccountLogDao sysUserCashAccountLogDao;
-
-    @Autowired
-    private CloudTeacherOrderService cloudTeacherOrderService;
-
     @Autowired
     private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
-
     @Autowired
     private MusicGroupSchoolTermStudentCourseDetailDao musicGroupSchoolTermStudentCourseDetailDao;
-    
-    @Autowired
-    private StudentService studentService;
-
     @Autowired
     private SysCouponCodeService sysCouponCodeService;
-    @Autowired
-    private StudentInstrumentService studentInstrumentService;
 
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
@@ -3052,6 +3029,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
     }
 
+
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean renewForCallback(StudentPaymentOrder studentPaymentOrder) throws IOException {
@@ -3088,62 +3066,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 groupEventSource.musicGroupStudentChangeEvent(studentRegistration.getMusicGroupId(), StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(userId)));
             }
 
-            //缴费项目详情
-            musicGroupPaymentCalenderDetailService.addCalenderDetail(studentPaymentOrder, studentRegistration);
-
-            List<StudentPaymentOrderDetail> allDetails = studentPaymentOrderDetailService.getOrderGoodsDetail(studentPaymentOrder.getId());
-            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)
-                    && !(o.getType() == ACCESSORIES))
-                    .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
-
-            //销售订单详情
-            if (allDetails.size() > 0) {
-                BigDecimal couponRemitFee = studentPaymentOrder.getCouponRemitFee();
-                if(couponRemitFee.compareTo(BigDecimal.ZERO) > 0){
-                    BigDecimal musicFee = allDetails.stream().filter(o -> o.getType()==MUSICAL
-                            || o.getType()==ACCESSORIES || o.getType()==TEACHING)
-                            .map(o -> o.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
-                    BigDecimal expectAmount = studentPaymentOrder.getExpectAmount();
-                    //获取比例
-                    BigDecimal ratioAmount = musicFee.divide(expectAmount, 6, BigDecimal.ROUND_HALF_UP);
-                    //获取分配的减免金额
-                    couponRemitFee = couponRemitFee.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
-                }
-                sellOrderService.addOrderDetail2SellOrder(allDetails, studentPaymentOrder, musicGroup,couponRemitFee);
-            }
-
-            //活动小课包处理
-            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);
-            }
-
-            //学生乐器与月保处理
-            StudentPaymentOrderDetail repair = allDetails.stream().filter(o -> o.getType()==MAINTENANCE).findFirst().get();
-            if(repair != null){
-                BigDecimal repairFee = allDetails.stream() .filter(o -> o.getType()==MAINTENANCE)
-                        .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
-                        .reduce(BigDecimal.ZERO, BigDecimal::add);
-                StudentPaymentOrderDetail musical = allDetails.stream().filter(o -> o.getType()==MUSICAL).findFirst().get();
-                Long studentInstrumentId = studentInstrumentService.addOrderDetail2Instrument(studentPaymentOrder, repairFee, Integer.valueOf(musical.getGoodsIdList()));
-                repair.setStudentInstrumentId(studentInstrumentId);
-                studentPaymentOrderDetailDao.update(repair);
-            }
-
-            //学生云教练处理
-            StudentPaymentOrderDetail cloudTeacher = allDetails.stream().filter(o -> o.getType()==CLOUD_TEACHER).findFirst().get();
-            if(cloudTeacher != null){
-                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);
-            }
+            //支付成功后处理课程、云教练、活动等数据
+            studentPaymentOrderDetailService.addOrderDetailTo(studentPaymentOrder,musicGroup,studentRegistration);
 
             //插入交易明细
             SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
@@ -3177,8 +3101,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             paymentDetail.setChannel(studentPaymentOrder.getPaymentChannel());
             sysUserCashAccountDetailService.insert(paymentDetail);
 
-            studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, courseFee, "乐团续费", userId);
-
             try {
                 contractService.transferProduceContract(userId, musicGroupId, null);
             } catch (Exception e) {

+ 108 - 35
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -1,44 +1,28 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import com.ym.mec.biz.dal.entity.*;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.SubjectChangeDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.MusicalListDetailDto;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
-import com.ym.mec.biz.service.GoodsService;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
-import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.*;
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 
 @Service
 public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long, StudentPaymentOrderDetail> implements StudentPaymentOrderDetailService {
@@ -56,20 +40,25 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
     @Autowired
     private MusicGroupPurchaseListDao musicGroupPurchaseListDao;
     @Autowired
-    private StudentPaymentOrderDao studentPaymentOrderDao;
-    @Autowired
     private StudentRegistrationDao studentRegistrationDao;
     @Autowired
     private SubjectDao subjectDao;
     @Autowired
     private SubjectChangeDao subjectChangeDao;
     @Autowired
-    private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
+    private StudentCourseFeeDetailDao studentCourseFeeDetailDao;
     @Autowired
-    private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
-
+    private SellOrderService sellOrderService;
+    @Autowired
+    private ActivityUserMapperService activityUserMapperService;
+    @Autowired
+    private StudentInstrumentService studentInstrumentService;
+    @Autowired
+    private CloudTeacherOrderService cloudTeacherOrderService;
     @Autowired
     private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+    private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrderDetail> getDAO() {
@@ -534,4 +523,88 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
     public List<StudentPaymentOrderDetail> queryOrderDetail(Long orderId) {
         return studentPaymentOrderDetailDao.findApplyOrderGoods(orderId);
     }
+
+    public void addOrderDetailTo(StudentPaymentOrder studentPaymentOrder,MusicGroup musicGroup,StudentRegistration studentRegistration){
+        //SurplusCourseFee
+        List<StudentPaymentOrderDetail> allDetails = getOrderGoodsDetail(studentPaymentOrder.getId());
+        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)
+                && !(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(new BigDecimal(0));
+        }
+        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(studentPaymentOrder.getTenantId());
+            studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
+            studentCourseFeeDetail.setAmount(courseFee);
+            studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee());
+            studentCourseFeeDetail.setMemo("乐团缴费充值");
+            studentCourseFeeDetail.setOperator(studentPaymentOrder.getUserId());
+            studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+        }
+        studentRegistrationDao.update(studentRegistration);
+
+
+        //缴费项目详情
+        musicGroupPaymentCalenderDetailService.addCalenderDetail(studentPaymentOrder, studentRegistration);
+
+        List<OrderDetailTypeEnum> detailTypeEnums = allDetails.stream().map(e -> e.getType()).collect(Collectors.toList());
+        //销售订单详情
+        if (allDetails.size() > 0 && (detailTypeEnums.contains(MUSICAL) ||detailTypeEnums.contains(ACCESSORIES) ||detailTypeEnums.contains(TEACHING))) {
+            BigDecimal couponRemitFee = studentPaymentOrder.getCouponRemitFee();
+            if(couponRemitFee.compareTo(BigDecimal.ZERO) > 0){
+                BigDecimal musicFee = allDetails.stream().filter(o -> o.getType()==MUSICAL
+                        || o.getType()==ACCESSORIES || o.getType()==TEACHING)
+                        .map(o -> o.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal expectAmount = studentPaymentOrder.getExpectAmount();
+                //获取比例
+                BigDecimal ratioAmount = musicFee.divide(expectAmount, 6, BigDecimal.ROUND_HALF_UP);
+                //获取分配的减免金额
+                couponRemitFee = couponRemitFee.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+            }
+            sellOrderService.addOrderDetail2SellOrder(allDetails, studentPaymentOrder, musicGroup,couponRemitFee);
+        }
+
+        //活动小课包处理
+        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(MAINTENANCE)){
+            StudentPaymentOrderDetail repair = allDetails.stream().filter(o -> o.getType()==MAINTENANCE).findFirst().get();
+            BigDecimal repairFee = allDetails.stream() .filter(o -> o.getType()==MAINTENANCE)
+                    .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            StudentPaymentOrderDetail musical = allDetails.stream().filter(o -> o.getType()==MUSICAL).findFirst().get();
+            Long studentInstrumentId = studentInstrumentService.addOrderDetail2Instrument(studentPaymentOrder, repairFee, Integer.valueOf(musical.getGoodsIdList()));
+            repair.setStudentInstrumentId(studentInstrumentId);
+            studentPaymentOrderDetailDao.update(repair);
+        }
+
+        //学生云教练处理
+        if(detailTypeEnums.contains(CLOUD_TEACHER)){
+            StudentPaymentOrderDetail cloudTeacher = allDetails.stream().filter(o -> o.getType()==CLOUD_TEACHER).findFirst().get();
+            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);
+        }
+    }
 }

+ 19 - 34
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -1,43 +1,19 @@
 package com.ym.mec.biz.service.impl;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.*;
-import com.ym.mec.biz.service.*;
-
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.tenant.TenantContextHolder;
-import com.ym.mec.util.excel.POIUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.alibaba.fastjson.JSON;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
+import com.ym.mec.biz.service.*;
+import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.IdGeneratorService;
@@ -50,6 +26,19 @@ import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
 import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, StudentPaymentOrder> implements StudentPaymentOrderService {
@@ -81,10 +70,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private DegreeRegistrationService degreeRegistrationService;
     @Autowired
     private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
-
     @Autowired
     private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
-
     @Autowired
     private IdGeneratorService idGeneratorService;
     @Autowired
@@ -97,14 +84,12 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private ReplacementInstrumentActivityService replacementInstrumentActivityService;
     @Autowired
     private ChildrenDayReserveService childrenDayReserveService;
-
     @Autowired
     private MemberRankSettingService memberRankSettingService;
     @Autowired
     private PayService payService;
     @Autowired
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
-
     @Autowired
     private CloudTeacherOrderService cloudTeacherOrderService;
     @Autowired

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

@@ -1,64 +1,16 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
-import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.*;
-import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import javax.annotation.Resource;
-
-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.page.*;
-import com.ym.mec.biz.service.*;
-import com.ym.mec.common.constant.CommonConstants;
-import com.ym.mec.common.tenant.TenantContextHolder;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.auth.api.enums.CertificateTypeEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GoodsType;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+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.*;
+import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.ImResult;
@@ -66,11 +18,32 @@ import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.*;
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 
 @Service
 public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, StudentRegistration> implements StudentRegistrationService {
@@ -130,8 +103,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
-    private SellOrderService sellOrderService;
-    @Autowired
     private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
     @Autowired
     private SubjectChangeDao subjectChangeDao;
@@ -140,20 +111,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Autowired
     private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
     @Autowired
-    private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
-    @Autowired
     private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
     @Autowired
     private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
     @Autowired
-    private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
-    @Autowired
     private StudentCourseFeeDetailDao studentCourseFeeDetailDao;
     @Autowired
     private CourseScheduleDao courseScheduleDao;
     @Autowired
-    private StudentInstrumentService studentInstrumentService;
-    @Autowired
     private OrganizationDao organizationDao;
     @Autowired
     private StudentService studentService;
@@ -172,8 +137,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Autowired
     private SysUserCashAccountLogService sysUserCashAccountLogService;
     @Autowired
-    private ActivityUserMapperService activityUserMapperService;
-    @Autowired
     private MusicGroupPaymentCalenderActivityService musicGroupPaymentCalenderActivityService;
     @Autowired
     private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
@@ -1102,43 +1065,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {
             MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
-
-            if (studentRegistration.getTemporaryCourseFee() != null) {
-                studentRegistration.setTemporaryCourseFee(new BigDecimal(0));
-            }
-            studentRegistration.setPaymentStatus(YES);
-            studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
-            
-            if (studentPaymentOrder.getClassGroupId() == null || !studentPaymentOrder.getClassGroupId().equals(206)) {
-                studentRegistration.setPayingStatus(0);
-            }
-
-            List<Long> orderIdList = new ArrayList<>();
-            orderIdList.add(studentPaymentOrder.getId());
-            List<StudentPaymentOrderDetail> allDetails = studentPaymentOrderDetailDao.getOrderDetailByOrderId(orderIdList);
-            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)
-                    && !(o.getType() == ACCESSORIES))
-                    .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
-            
-            //累加充值金额
-            studentRegistration.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(courseFee));
-            studentRegistrationDao.update(studentRegistration);
-
-            //添加日志
-            StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
-            studentCourseFeeDetail.setTenantId(tenantId);
-            studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
-            studentCourseFeeDetail.setAmount(courseFee);
-            studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee());
-            studentCourseFeeDetail.setMemo("充值");
-            studentCourseFeeDetail.setOperator(studentPaymentOrder.getUserId());
-            studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+            //支付成功后处理课程、云教练、活动等数据
+            studentPaymentOrderDetailService.addOrderDetailTo(studentPaymentOrder,musicGroup,studentRegistration);
 
             //插入交易明细
             BigDecimal amount = studentPaymentOrder.getActualAmount();
@@ -1179,53 +1107,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             paymentDetail.setTenantId(tenantId);
             sysUserCashAccountDetailService.insert(paymentDetail);
 
-            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getOrderGoodsDetail(studentPaymentOrder.getId());
-            //销售订单详情
-            if (orderDetails.size() > 0) {
-                BigDecimal couponRemitFee = studentPaymentOrder.getCouponRemitFee();
-                if(couponRemitFee.compareTo(BigDecimal.ZERO) > 0){
-                    BigDecimal musicFee = orderDetails.stream().filter(o -> o.getType()==MUSICAL
-                            || o.getType()==ACCESSORIES || o.getType()==TEACHING)
-                            .map(o -> o.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
-                    BigDecimal expectAmount = studentPaymentOrder.getExpectAmount();
-                    //获取比例
-                    BigDecimal ratioAmount = musicFee.divide(expectAmount, 6, BigDecimal.ROUND_HALF_UP);
-                    //获取分配的减免金额
-                    couponRemitFee = couponRemitFee.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
-                }
-                sellOrderService.addOrderDetail2SellOrder(orderDetails, studentPaymentOrder, musicGroup,couponRemitFee);
-            }
-
-            //课程处理
-            musicGroupPaymentCalenderDetailService.addCalenderDetail(studentPaymentOrder, studentRegistration);
-
-            //活动小课包处理
-            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);
-            }
-
-            //学生乐器与月保处理
-            StudentPaymentOrderDetail repair = allDetails.stream().filter(o -> o.getType()==MAINTENANCE).findFirst().get();
-            if(repair != null){
-                BigDecimal repairFee = allDetails.stream() .filter(o -> o.getType()==MAINTENANCE)
-                        .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
-                        .reduce(BigDecimal.ZERO, BigDecimal::add);
-                StudentPaymentOrderDetail musical = allDetails.stream().filter(o -> o.getType()==MUSICAL).findFirst().get();
-                Long studentInstrumentId = studentInstrumentService.addOrderDetail2Instrument(studentPaymentOrder, repairFee, Integer.valueOf(musical.getGoodsIdList()));
-                repair.setStudentInstrumentId(studentInstrumentId);
-                studentPaymentOrderDetailDao.update(repair);
-            }
-
-            //学生云教练处理
-            StudentPaymentOrderDetail cloudTeacher = allDetails.stream().filter(o -> o.getType()==CLOUD_TEACHER).findFirst().get();
-            if(cloudTeacher != null){
-                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);
-            }
-
             //合并学员处理
             if (studentRegistration.getIsMerge().equals(1) && studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) <= 0) {
                 return studentPaymentOrder;
@@ -1579,7 +1460,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    @Transactional(rollbackFor = Exception.class)
     public BigDecimal updateUserSurplusCourseFee(Integer userId, String musicGroupId, BigDecimal amount, String memo, Integer operatorId) {
         StudentRegistration studentRegistration = studentRegistrationDao.lockWithUserAndMusic(userId, musicGroupId);
         if (Objects.isNull(studentRegistration)) {

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

@@ -74,7 +74,7 @@
             (#{item.musicGroupPaymentCalenderId},#{item.userId},#{item.expectAmount},
             #{item.actualAmount},#{item.paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.userStatus},#{item.payTime},
             #{item.updateTime},#{item.createTime},#{item.startPaymentDate},#{item.deadlinePaymentDate},
-             #{item.paymentOrderId},#{item.useInCourse},#{item.responsibleUserId},#{item.responsibleRecord},#{item.expectMemberAmount},#{item.tenantid})
+             #{item.paymentOrderId},#{item.useInCourse},#{item.responsibleUserId},#{item.responsibleRecord},#{item.expectMemberAmount},#{item.tenantId})
         </foreach>
     </insert>