优化支付
This commit is contained in:
@ -9,5 +9,5 @@ public interface AmountService {
|
||||
|
||||
BigDecimal getAmount(Long userId);
|
||||
|
||||
|
||||
BigDecimal getCashAmount(Long userId);
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -21,4 +21,9 @@ public interface DeductionService {
|
||||
* 微信提现
|
||||
*/
|
||||
void wxDraw(Integer amount, Long userId);
|
||||
|
||||
/**
|
||||
* 退款
|
||||
*/
|
||||
void refund(Long userId,BigDecimal money,DishOrderDO dishOrderDO);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user