支付优化

This commit is contained in:
seesaw
2024-10-21 17:42:58 +08:00
parent 2a97de0389
commit be4886585c
3 changed files with 50 additions and 33 deletions

View File

@ -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);
}

View File

@ -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);
}
}

View File

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