优化支付

This commit is contained in:
seesaw
2024-10-21 09:33:15 +08:00
parent 4a789a967f
commit f624a147d0
4 changed files with 95 additions and 1 deletions

View File

@ -9,5 +9,5 @@ public interface AmountService {
BigDecimal getAmount(Long userId);
BigDecimal getCashAmount(Long userId);
}

View File

@ -27,6 +27,9 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_NOT_EXISTS;
/**
* 金额操作 Service 实现类
@ -66,7 +69,18 @@ public class AmountServiceImpl implements AmountService {
@Override
public BigDecimal getAmount(Long userId) {
MemberUserDO memberUserDO = userMapper.selectById(userId);
if (memberUserDO == null) {
throw exception(USER_NOT_EXISTS);
}
return memberUserDO.getMoney();
}
@Override
public BigDecimal getCashAmount(Long userId) {
MemberUserDO memberUserDO = userMapper.selectById(userId);
if (memberUserDO == null) {
throw exception(USER_NOT_EXISTS);
}
return memberUserDO.getCashAmount();
}
}

View File

@ -21,4 +21,9 @@ public interface DeductionService {
* 微信提现
*/
void wxDraw(Integer amount, Long userId);
/**
* 退款
*/
void refund(Long userId,BigDecimal money,DishOrderDO dishOrderDO);
}

View File

@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
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;
@ -247,5 +248,79 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setCashAmount(cashNewAmount);
cardService.insertOne(cardDO);
}
@Override
public void refund(Long userId, BigDecimal money, DishOrderDO dishOrderDO) {
//获取最新余额
BigDecimal newMoney2;
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewAmount;
synchronized (userId){
MemberUserDO user = userService.getUser(userId);
BigDecimal oldMoney = user.getMoney();
user.setMoney(oldMoney.add(money));
BigDecimal wxAmount = user.getWxAmount();
BigDecimal cashAmount = user.getCashAmount();
BigDecimal giftAmount = user.getGiftAmount();
BigDecimal dishWxAmount = dishOrderDO.getWxAmount();
BigDecimal dishCashAmount = dishOrderDO.getCashAmount();
BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount();
BigDecimal newMoney = money;
if(oldMoney.compareTo(BigDecimal.ZERO)<0){
newMoney = user.getMoney();
}
if (user.getMoney().compareTo(BigDecimal.ZERO) <= 0) {
user.setWxAmount(BigDecimal.ZERO);
user.setGiftAmount(BigDecimal.ZERO);
user.setCashAmount(BigDecimal.ZERO);
} else {
if (newMoney.compareTo(dishGiftAmount) <= 0) {
user.setGiftAmount(giftAmount.add(newMoney));
} else {
user.setGiftAmount(giftAmount.add(dishGiftAmount));
BigDecimal money1 = newMoney.subtract(dishGiftAmount);
if (money1.compareTo(dishCashAmount) <= 0) {
user.setCashAmount(cashAmount.add(money1));
} else {
user.setCashAmount(cashAmount.add(dishCashAmount));
BigDecimal money2 = money1.subtract(dishCashAmount);
if (money2.compareTo(dishWxAmount) <= 0) {
user.setWxAmount(wxAmount.add(money2));
} else {
user.setWxAmount(wxAmount.add(dishWxAmount));
}
}
}
}
userService.updateById(user);
newMoney2 = user.getMoney();
wxNewMoney = user.getWxAmount();
giftNewMoney = 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.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney);
cardDO.setMoney(newMoney2);
cardDO.setCashAmount(cashNewAmount);
cardService.insertOne(cardDO);
}
}