|
|
@@ -1,13 +1,25 @@
|
|
|
package beilv.vipCardLog.service.impl;
|
|
|
|
|
|
+import beilv.carinformation.domain.CarInformation;
|
|
|
+import beilv.carinformation.service.ICarInformationService;
|
|
|
+import beilv.common.core.domain.AjaxResult;
|
|
|
import beilv.common.core.text.Convert;
|
|
|
+import beilv.common.utils.DateUtils;
|
|
|
import beilv.common.utils.uuid.IdUtils;
|
|
|
+import beilv.competition.domain.Competition;
|
|
|
+import beilv.competition.service.ICompetitionService;
|
|
|
+import beilv.usermembershipcard.domain.UserMembershipCard;
|
|
|
+import beilv.usermembershipcard.service.IUserMembershipCardService;
|
|
|
+import beilv.vipCard.domain.VipCard;
|
|
|
+import beilv.vipCard.service.IVipCardService;
|
|
|
import beilv.vipCardLog.domain.VipCardLog;
|
|
|
import beilv.vipCardLog.mapper.VipCardLogMapper;
|
|
|
import beilv.vipCardLog.service.IVipCardLogService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
@@ -21,6 +33,18 @@ public class VipCardLogServiceImpl implements IVipCardLogService {
|
|
|
@Autowired
|
|
|
private VipCardLogMapper vipCardLogMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IVipCardService vipCardService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ICompetitionService competitionService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IUserMembershipCardService userMembershipCardService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ICarInformationService carInformationService;
|
|
|
+
|
|
|
/**
|
|
|
* 查询充值记录
|
|
|
*
|
|
|
@@ -97,4 +121,105 @@ public class VipCardLogServiceImpl implements IVipCardLogService {
|
|
|
public int getRegistrantsNumber(VipCardLog vipCardLog) {
|
|
|
return vipCardLogMapper.getRegistrantsNumber(vipCardLog);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AjaxResult refundById(VipCardLog vipCardLog) {
|
|
|
+ //拉去订单信息
|
|
|
+ VipCardLog orderInfo = vipCardLogMapper.selectVipCardLogById(vipCardLog.getId());
|
|
|
+
|
|
|
+ if("payment_status_to_be_paid".equals(orderInfo.getPaymentStatus())){
|
|
|
+ return AjaxResult.error("订单未支付, 无需退款!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if("payment_status_cancelled".equals(orderInfo.getPaymentStatus())){
|
|
|
+ return AjaxResult.error("订单已取消, 无需退款!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if("payment_status_refunded".equals(orderInfo.getPaymentStatus())){
|
|
|
+ return AjaxResult.error("订单已退款, 无需重复操作!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if("payment_status_verification".equals(orderInfo.getPaymentStatus())){
|
|
|
+ return AjaxResult.error("订单已核销, 无法退款!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //退款金额
|
|
|
+ BigDecimal refundPrice = BigDecimal.valueOf(0);
|
|
|
+
|
|
|
+ int refundSum = 0;
|
|
|
+
|
|
|
+ if("yueqiu".equals(orderInfo.getOrderType())){
|
|
|
+
|
|
|
+ if("numCard".equals(orderInfo.getPaymentType())){
|
|
|
+ refundSum++;
|
|
|
+ }else{
|
|
|
+ refundPrice = refundPrice.add(orderInfo.getPracticalMoney());
|
|
|
+ }
|
|
|
+
|
|
|
+ }else if("gouka".equals(orderInfo.getOrderType())){
|
|
|
+
|
|
|
+ //拿到次卡信息, 得到剩余使用次数
|
|
|
+ UserMembershipCard userMembershipCard = userMembershipCardService.selectUserMembershipCardRecordId(orderInfo.getId());
|
|
|
+ //获取原价信息
|
|
|
+ CarInformation carInformation = carInformationService.selectCarInformationById(Long.valueOf(orderInfo.getBusId()));
|
|
|
+
|
|
|
+ //计算已使用次数
|
|
|
+ BigDecimal useSum = BigDecimal.valueOf(carInformation.getTotalNumber()-userMembershipCard.getRemainingNumber());
|
|
|
+
|
|
|
+ //计算需要支付的金额
|
|
|
+ BigDecimal userPrice = useSum.multiply(carInformation.getOriginalPrice());
|
|
|
+
|
|
|
+ //实际支付的金额 - 需要支付的金额 = 退款金额
|
|
|
+ BigDecimal refundMoner = orderInfo.getMemberPrice().subtract(userPrice);
|
|
|
+
|
|
|
+ //判断如果退款金额 不大于0, 则设置退款金额为0
|
|
|
+ refundMoner = refundMoner.compareTo(BigDecimal.ZERO) > 0 ? refundMoner : BigDecimal.ZERO;
|
|
|
+
|
|
|
+ //计算退款金额
|
|
|
+ refundPrice = refundPrice.add(refundMoner);
|
|
|
+
|
|
|
+ }else if("cansai".equals(orderInfo.getOrderType()) || "menpiao".equals(orderInfo.getOrderType())){
|
|
|
+
|
|
|
+ //验证赛事状态, 已经开始/已经结束/已经关闭 无法退款
|
|
|
+ Competition competition = competitionService.selectCompetitionById(Integer.valueOf(orderInfo.getBusId()));
|
|
|
+ if("competiton_state_5".equals(competition.getCompetitionState())){
|
|
|
+ return AjaxResult.error("赛事已开始, 无法退票!");
|
|
|
+ }
|
|
|
+ if("competiton_state_6".equals(competition.getCompetitionState())){
|
|
|
+ return AjaxResult.error("赛事已结束, 无法退票!");
|
|
|
+ }
|
|
|
+ if("competiton_state_3".equals(competition.getCompetitionState())){
|
|
|
+ return AjaxResult.error("报名已结束, 无法退票!");
|
|
|
+ }
|
|
|
+ if("competiton_state_4".equals(competition.getCompetitionState())){
|
|
|
+ return AjaxResult.error("赛事已关闭, 无法退票!");
|
|
|
+ }
|
|
|
+ //计算退款金额
|
|
|
+ refundPrice = refundPrice.add(orderInfo.getPracticalMoney());
|
|
|
+ }
|
|
|
+
|
|
|
+ if("vipCard".equals(orderInfo.getPaymentType())){
|
|
|
+ //查询会员卡信息
|
|
|
+ VipCard vipCard = vipCardService.selectVipCardById(orderInfo.getPaymentId());
|
|
|
+ vipCard.setBalance(vipCard.getBalance().add(refundPrice));
|
|
|
+ vipCardService.updateVipCard(vipCard);
|
|
|
+ }else if("weChart".equals(orderInfo.getPaymentType())){
|
|
|
+ //微信支付, 退款到微信
|
|
|
+
|
|
|
+
|
|
|
+ }else if("numCard".equals(orderInfo.getPaymentType())){
|
|
|
+ //查询次卡信息
|
|
|
+ UserMembershipCard userMembershipCard = userMembershipCardService.selectUserMembershipCardById(Long.valueOf(orderInfo.getPaymentId()));
|
|
|
+ //剩余使用次数+1
|
|
|
+ userMembershipCard.setRemainingNumber(userMembershipCard.getRemainingNumber() + refundSum);
|
|
|
+ //更新次卡信息
|
|
|
+ userMembershipCardService.updateUserMembershipCard(userMembershipCard);
|
|
|
+ }
|
|
|
+
|
|
|
+ vipCardLog.setRefundTime(DateUtils.getNowDate());
|
|
|
+ vipCardLog.setPaymentStatus("payment_status_refunded");
|
|
|
+ vipCardLogMapper.updateVipCardLog(vipCardLog);
|
|
|
+ return AjaxResult.success("退款成功!");
|
|
|
+
|
|
|
+ }
|
|
|
}
|