|
@@ -2,7 +2,6 @@ package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -11,6 +10,7 @@ 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.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
|
|
@@ -24,7 +24,6 @@ import com.ym.mec.biz.dal.entity.SysUserCashAccount;
|
|
|
import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
|
|
|
import com.ym.mec.biz.dal.enums.DealStatusEnum;
|
|
|
import com.ym.mec.biz.dal.enums.GroupType;
|
|
|
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
|
|
|
import com.ym.mec.biz.dal.enums.OrderTypeEnum;
|
|
|
import com.ym.mec.biz.dal.enums.PeriodEnum;
|
|
|
import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
|
|
@@ -38,7 +37,7 @@ import com.ym.mec.biz.service.SysUserCashAccountService;
|
|
|
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.thirdparty.message.MessageSenderPluginContext;
|
|
|
+import com.ym.mec.util.date.DateUtil;
|
|
|
|
|
|
@Service
|
|
|
public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting> implements MemberRankSettingService {
|
|
@@ -59,14 +58,14 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
|
|
|
@Autowired
|
|
|
private SysUserCashAccountService sysUserCashAccountService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private SysUserCashAccountDetailService sysUserCashAccountDetailService;
|
|
|
|
|
|
- @Autowired
|
|
|
- private ContractService contractService;
|
|
|
+ @Autowired
|
|
|
+ private SysUserCashAccountDetailService sysUserCashAccountDetailService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ContractService contractService;
|
|
|
|
|
|
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Integer, MemberRankSetting> getDAO() {
|
|
@@ -112,6 +111,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
|
|
public Map buy(Integer userId, Integer memberRankId, PeriodEnum periodEnum, BigDecimal amount, boolean isUseBalance) throws Exception {
|
|
|
Student student = studentService.get(userId);
|
|
|
if (student == null) {
|
|
@@ -123,6 +123,11 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
throw new BizException("学生没有分部编号");
|
|
|
}
|
|
|
|
|
|
+ MemberRankSetting memberRankSetting = memberRankSettingDao.get(memberRankId);
|
|
|
+ if (memberRankSetting == null) {
|
|
|
+ throw new BizException("会员等级错误");
|
|
|
+ }
|
|
|
+
|
|
|
MemberFeeSetting memberFeeSetting = memberFeeSettingService.findByRankIdAndOrganId(organId, memberRankId);
|
|
|
|
|
|
if (memberFeeSetting == null) {
|
|
@@ -171,8 +176,9 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
studentPaymentOrder.setGroupType(GroupType.MEMBER);
|
|
|
studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
|
|
|
studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
|
|
|
- studentPaymentOrder.setMemo("会员购买");
|
|
|
+ studentPaymentOrder.setMemo(memberRankSetting.getName());
|
|
|
studentPaymentOrder.setPaymentChannel("BALANCE");
|
|
|
+ studentPaymentOrder.setMusicGroupId(memberRankId + "");
|
|
|
|
|
|
if (isUseBalance) {
|
|
|
SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
|
|
@@ -185,9 +191,11 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
studentPaymentOrder.setBalancePaymentAmount(amount);
|
|
|
studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
|
|
|
sysUserCashAccountService.updateBalance(userId, amount.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "购买会员");
|
|
|
+
|
|
|
+ orderCallback(studentPaymentOrder);
|
|
|
} else {
|
|
|
if (userCashAccount.getBalance().doubleValue() > 0) {
|
|
|
- sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "乐团续费");
|
|
|
+ sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "购买会员");
|
|
|
studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
|
|
|
studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().subtract(userCashAccount.getBalance()));
|
|
|
}
|
|
@@ -198,72 +206,92 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, 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();
|
|
|
-
|
|
|
- if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
|
|
|
-
|
|
|
- if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "购买会员支付失败");
|
|
|
- }
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- //支付成功
|
|
|
- if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
|
|
|
-
|
|
|
- //添加会员有效时长
|
|
|
-
|
|
|
- //插入交易明细
|
|
|
- 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("购买会员");
|
|
|
- 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;
|
|
|
+ // 更新订单信息
|
|
|
+ studentPaymentOrder.setUpdateTime(nowDate);
|
|
|
+ int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
|
|
|
+ if (updateCount <= 0) {
|
|
|
+ throw new BizException("订单更新失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer userId = studentPaymentOrder.getUserId();
|
|
|
+
|
|
|
+ if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
|
|
|
+
|
|
|
+ if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(),
|
|
|
+ PlatformCashAccountDetailTypeEnum.REFUNDS, "购买会员支付失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 支付成功
|
|
|
+ if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
|
|
|
+
|
|
|
+ // 添加会员有效时长
|
|
|
+ Student student = studentService.get(userId);
|
|
|
+ if (student == null) {
|
|
|
+ throw new BizException("学员信息不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ student.setMemberRankSettingId(Integer.parseInt(studentPaymentOrder.getMusicGroupId()));
|
|
|
+ if (student.getMemberRankSettingId() == null) {
|
|
|
+ student.setMembershipEndTime(DateUtil.addMonths(nowDate, 6));
|
|
|
+ student.setMembershipStartTime(nowDate);
|
|
|
+ } else {
|
|
|
+ if (nowDate.after(student.getMembershipEndTime())) {
|
|
|
+ student.setMembershipEndTime(DateUtil.addMonths(nowDate, 6));
|
|
|
+ } else {
|
|
|
+ student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), 6));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ student.setUpdateTime(nowDate);
|
|
|
+ studentService.update(student);
|
|
|
+
|
|
|
+ // 插入交易明细
|
|
|
+ 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("购买会员");
|
|
|
+ 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;
|
|
|
}
|
|
|
}
|