|
@@ -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)) {
|