|
@@ -12,8 +12,11 @@ import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.page.PageInfo;
|
|
|
import com.ym.mec.common.service.IdGeneratorService;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
|
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -50,6 +53,16 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
|
|
|
@Autowired
|
|
|
private PayService payService;
|
|
|
@Autowired
|
|
|
+ private SysUserCashAccountDetailService sysUserCashAccountDetailService;
|
|
|
+ @Autowired
|
|
|
+ private ContractService contractService;
|
|
|
+ @Autowired
|
|
|
+ private SysUserCashAccountService sysUserCashAccountService;
|
|
|
+ @Autowired
|
|
|
+ private SysMessageService sysMessageService;
|
|
|
+
|
|
|
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
+ @Autowired
|
|
|
private StudentRegistrationService studentRegistrationService;
|
|
|
|
|
|
@Override
|
|
@@ -211,44 +224,55 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
|
|
|
ChildrenDayReserve userReserve = this.getUserReserve(degreePayDto.getUserId());
|
|
|
|
|
|
if (userReserve == null) {
|
|
|
- this.addReserve(degreePayDto.getUser(), YesOrNoEnum.NO);
|
|
|
+ userReserve = this.addReserve(degreePayDto.getUser(), YesOrNoEnum.NO);
|
|
|
}
|
|
|
+ degreePayDto.setReserveId(userReserve.getId());
|
|
|
|
|
|
//获取课程的价格
|
|
|
OrganizationDegreeCourseFee courseFee = organizationDegreeCourseFeeDao.getByOrganId(degreePayDto.getOrganId());
|
|
|
+
|
|
|
+ if (courseFee == null) {
|
|
|
+ throw new BizException("刚前分部不参与,谢谢关注");
|
|
|
+ }
|
|
|
+
|
|
|
List<DegreeLevelFee> degreeLevelFees = degreeLevelFeeDao.getAll();
|
|
|
|
|
|
//订单总金额
|
|
|
BigDecimal orderAmount = BigDecimal.ZERO;
|
|
|
|
|
|
//器乐考级费用
|
|
|
+ BigDecimal gradeFee = BigDecimal.ZERO;
|
|
|
if (degreePayDto.getMusicGradeLevel() != null) {
|
|
|
- BigDecimal gradeFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).map(DegreeLevelFee::getGrade).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ gradeFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).map(DegreeLevelFee::getGrade).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
orderAmount = orderAmount.add(gradeFee);
|
|
|
}
|
|
|
|
|
|
//乐理考级费用
|
|
|
+ BigDecimal theoryLevelFee = BigDecimal.ZERO;
|
|
|
if (degreePayDto.getTheoryLevel() != null) {
|
|
|
- BigDecimal theoryLevelFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getTheoryLevel())).map(DegreeLevelFee::getTheory).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ theoryLevelFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getTheoryLevel())).map(DegreeLevelFee::getTheory).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
orderAmount = orderAmount.add(theoryLevelFee);
|
|
|
}
|
|
|
|
|
|
//VIP 1v1 1v2费用
|
|
|
+ BigDecimal vip1v1Fee = BigDecimal.ZERO;
|
|
|
if (degreePayDto.getVip1v1()) {
|
|
|
- BigDecimal vip1v1Fee = courseFee.getVip1v1();
|
|
|
+ vip1v1Fee = courseFee.getVip1v1();
|
|
|
orderAmount = orderAmount.add(vip1v1Fee);
|
|
|
}
|
|
|
|
|
|
//VIP 1v2费用
|
|
|
+ BigDecimal vip1v2Fee = BigDecimal.ZERO;
|
|
|
if (degreePayDto.getVip1v2()) {
|
|
|
- BigDecimal vip1v2Fee = courseFee.getVip1v2();
|
|
|
+ vip1v2Fee = courseFee.getVip1v2();
|
|
|
orderAmount = orderAmount.add(vip1v2Fee);
|
|
|
}
|
|
|
|
|
|
- //VIP 乐理课费用
|
|
|
+ //乐理课费用
|
|
|
+ BigDecimal theoryCourseFee = BigDecimal.ZERO;
|
|
|
if (degreePayDto.getTheoryCourse()) {
|
|
|
- BigDecimal theoryFee = courseFee.getTheory();
|
|
|
- orderAmount = orderAmount.add(theoryFee);
|
|
|
+ theoryCourseFee = courseFee.getTheory();
|
|
|
+ orderAmount = orderAmount.add(theoryCourseFee);
|
|
|
}
|
|
|
|
|
|
if (orderAmount.compareTo(degreePayDto.getAmount()) != 0) {
|
|
@@ -281,6 +305,11 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
|
|
|
studentPaymentOrder.setUpdateTime(nowDate);
|
|
|
studentPaymentOrderService.insert(studentPaymentOrder);
|
|
|
|
|
|
+ //添加购买详情
|
|
|
+ degreePayDto.setOrderId(studentPaymentOrder.getId());
|
|
|
+ childrenDayDegreeDetailService.addOrderDetails(degreePayDto, gradeFee, theoryLevelFee, vip1v1Fee, vip1v2Fee, theoryCourseFee);
|
|
|
+ childrenDayDegreeDetailService.addDegreeDetails(degreePayDto, gradeFee, theoryLevelFee, vip1v1Fee, vip1v2Fee, theoryCourseFee);
|
|
|
+
|
|
|
studentPaymentOrder.setVersion(0);
|
|
|
if (orderAmount.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
studentPaymentRouteOrderService.addRouteOrder(orderNo, degreePayDto.getOrganId(), balance);
|
|
@@ -317,4 +346,86 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
|
|
|
studentPaymentOrderService.update(studentPaymentOrder);
|
|
|
return payMap;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
|
|
|
+ Date nowDate = new Date();
|
|
|
+ //更新订单信息
|
|
|
+ studentPaymentOrder.setUpdateTime(nowDate);
|
|
|
+ int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
|
|
|
+ if (updateCount <= 0) {
|
|
|
+ throw new BizException("订单更新失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer userId = studentPaymentOrder.getUserId();
|
|
|
+
|
|
|
+ Map<Integer, String> map = new HashMap<>();
|
|
|
+ map.put(userId, userId.toString());
|
|
|
+
|
|
|
+ //支付成功
|
|
|
+ if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
|
|
|
+ if (childrenDayDegreeDetailService.updateStatus(studentPaymentOrder.getId(), 2) <= 0) {
|
|
|
+ throw new BizException("购买详情,更新失败");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //插入交易明细
|
|
|
+ BigDecimal amount = studentPaymentOrder.getActualAmount();
|
|
|
+ if (amount.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
|
|
|
+ //充值
|
|
|
+ SysUserCashAccountDetail rechargeDetail = new SysUserCashAccountDetail();
|
|
|
+ rechargeDetail.setAmount(amount);
|
|
|
+ rechargeDetail.setBalance(cashAccount.getBalance().add(amount));
|
|
|
+ rechargeDetail.setComment("缴费前充值");
|
|
|
+ rechargeDetail.setCreateTime(nowDate);
|
|
|
+ rechargeDetail.setStatus(DealStatusEnum.SUCCESS);
|
|
|
+ rechargeDetail.setTransNo(studentPaymentOrder.getTransNo());
|
|
|
+ rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
|
|
|
+ rechargeDetail.setUpdateTime(nowDate);
|
|
|
+ rechargeDetail.setUserId(userId);
|
|
|
+ rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
|
|
|
+ rechargeDetail.setComAmount(studentPaymentOrder.getComAmount());
|
|
|
+ rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount());
|
|
|
+ sysUserCashAccountDetailService.insert(rechargeDetail);
|
|
|
+
|
|
|
+ //缴费
|
|
|
+ SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
|
|
|
+ paymentDetail.setAmount(amount.negate());
|
|
|
+ paymentDetail.setBalance(cashAccount.getBalance());
|
|
|
+ paymentDetail.setComment("6.1考级活动");
|
|
|
+ paymentDetail.setCreateTime(nowDate);
|
|
|
+ paymentDetail.setStatus(DealStatusEnum.SUCCESS);
|
|
|
+ paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
|
|
|
+ paymentDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
|
|
|
+ paymentDetail.setUpdateTime(nowDate);
|
|
|
+ paymentDetail.setUserId(userId);
|
|
|
+ rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
|
|
|
+ sysUserCashAccountDetailService.insert(paymentDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ contractService.transferProduceContract(userId, null);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("产品协议生成失败", e);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
|
|
|
+ if (childrenDayDegreeDetailService.updateStatus(studentPaymentOrder.getId(), 3) <= 0) {
|
|
|
+ throw new BizException("购买详情,更新失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "6.1考级支付失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
|
|
|
+ studentPaymentOrder.getActualAmount(), "6.1考级活动");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|