支付优化
This commit is contained in:
@ -26,4 +26,9 @@ public interface DeductionService {
|
||||
* 退款
|
||||
*/
|
||||
void refund(Long userId,BigDecimal money,DishOrderDO dishOrderDO);
|
||||
|
||||
/**
|
||||
* 减免
|
||||
*/
|
||||
void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount);
|
||||
}
|
||||
|
@ -321,5 +321,38 @@ public class DeductionServiceImpl implements DeductionService {
|
||||
|
||||
cardService.insertOne(cardDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount) {
|
||||
|
||||
BigDecimal NewMoney;
|
||||
BigDecimal giftNewAmount;
|
||||
BigDecimal cashNewAmount;
|
||||
BigDecimal wxNewAmount;
|
||||
|
||||
synchronized (userId) {
|
||||
MemberUserDO user = userService.getUser(userId);
|
||||
user.setMoney(user.getMoney().add(money));
|
||||
user.setCashAmount(user.getCashAmount().add(cashAmount));
|
||||
user.setGiftAmount(user.getGiftAmount().add(giftAmount));
|
||||
user.setWxAmount(user.getWxAmount().add(wxAmount));
|
||||
userService.updateById(user);
|
||||
|
||||
NewMoney = user.getMoney();
|
||||
wxNewAmount = user.getWxAmount();
|
||||
giftNewAmount = user.getGiftAmount();
|
||||
cashNewAmount = user.getCashAmount();
|
||||
}
|
||||
CardDO cardDO = new CardDO();
|
||||
cardDO.setUserId(userId);
|
||||
cardDO.setFlag(CardDO.ADD);
|
||||
cardDO.setChangeMoney(money);
|
||||
cardDO.setType(CostTypeEnum.REFUND.getCode());
|
||||
cardDO.setMoney(NewMoney);
|
||||
cardDO.setWxAmount(wxNewAmount);
|
||||
cardDO.setCashAmount(cashNewAmount);
|
||||
cardDO.setGiftAmount(giftNewAmount);
|
||||
cardService.insertOne(cardDO);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,7 @@ import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
|
||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
||||
import cn.iocoder.yudao.module.member.service.amount.DeductionService;
|
||||
import cn.iocoder.yudao.module.member.service.business.BusinessService;
|
||||
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
|
||||
import cn.iocoder.yudao.module.member.service.refund.RefundService;
|
||||
@ -85,6 +86,8 @@ public class OrderServiceImpl implements OrderService {
|
||||
private RefundService refundService;
|
||||
@Resource
|
||||
private BusinessService businessService;
|
||||
@Resource
|
||||
private DeductionService deductionService;
|
||||
|
||||
@Override
|
||||
public Long createOrder(AppOrderSaveReqVO createReqVO) {
|
||||
@ -456,31 +459,7 @@ public class OrderServiceImpl implements OrderService {
|
||||
}
|
||||
|
||||
//退款
|
||||
CardDO lastCardDO = cardMapper.selectOne(Wrappers.<CardDO>lambdaQuery()
|
||||
.eq(CardDO::getUserId, dishOrderDO.getUserId())
|
||||
.orderByDesc(CardDO::getCreateTime)
|
||||
.orderByDesc(CardDO::getId)
|
||||
.last(MemberConstants.LIMIT_ONE));
|
||||
CardDO cardDO = new CardDO();
|
||||
cardDO.setUserId(dishOrderDO.getUserId());
|
||||
cardDO.setFlag(CardDO.ADD);
|
||||
cardDO.setChangeMoney(money);
|
||||
cardDO.setType(CostTypeEnum.REFUND.getCode());
|
||||
|
||||
BigDecimal oldMoney = BigDecimal.ZERO;
|
||||
if (ObjectUtil.isNotEmpty(lastCardDO) && lastCardDO.getMoney() != null) {
|
||||
oldMoney = lastCardDO.getMoney();
|
||||
}
|
||||
cardDO.setMoney(oldMoney.add(money).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||
|
||||
BigDecimal oldWxAmount = lastCardDO.getWxAmount();
|
||||
BigDecimal oldCashAmount = lastCardDO.getCashAmount();
|
||||
BigDecimal oldGiftAmount = lastCardDO.getGiftAmount();
|
||||
|
||||
cardDO.setWxAmount(oldWxAmount.add(wxAmount));
|
||||
cardDO.setCashAmount(oldCashAmount.add(cashAmount));
|
||||
cardDO.setGiftAmount(oldGiftAmount.add(giftAmount));
|
||||
cardMapper.insert(cardDO);
|
||||
deductionService.reduction(dishOrderDO.getUserId(),money,giftAmount,cashAmount,wxAmount);
|
||||
|
||||
//更新营业数据
|
||||
if(dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)){
|
||||
|
Reference in New Issue
Block a user