支付优化

This commit is contained in:
seesaw
2024-10-18 14:55:41 +08:00
parent 2937a271ac
commit 5d58bf03f2
3 changed files with 96 additions and 6 deletions

View File

@ -65,9 +65,8 @@ public class AmountServiceImpl implements AmountService {
@Override
public BigDecimal getAmount(Long userId) {
return null;
MemberUserDO memberUserDO = userMapper.selectById(userId);
return memberUserDO.getMoney();
}
//微信充值
}

View File

@ -7,5 +7,18 @@ import java.util.List;
public interface DeductionService {
void deduction(DishOrderDO dishOrderDO);
/**
* 餐盘扣减余额
*/
DishOrderDO deduction(DishOrderDO dishOrderDO);
/**
* 现金提现
*/
void cashDraw(Long userId, BigDecimal money);
/**
* 微信提现
*/
void wxDraw(Integer amount, Long userId);
}

View File

@ -1,18 +1,22 @@
package cn.iocoder.yudao.module.member.service.amount;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
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.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.business.BusinessService;
import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
import cn.iocoder.yudao.module.member.service.order.OrderService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import cn.iocoder.yudao.module.member.util.MemberConstants;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@ -22,6 +26,9 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.CASH_AMOUNT_NOT_ENOUGH;
/**
* 餐盘统一扣款 Service 实现类
@ -43,7 +50,7 @@ public class DeductionServiceImpl implements DeductionService {
private BusinessService businessService;
@Override
public void deduction(DishOrderDO dishOrderDO) {
public DishOrderDO deduction(DishOrderDO dishOrderDO) {
Long userId = dishOrderDO.getUserId();
BigDecimal newMoney;
@ -139,7 +146,7 @@ public class DeductionServiceImpl implements DeductionService {
}
//记录消费记录
CardDO cardDO = new CardDO();
cardDO.setType(TimePeriodEnum.getTimePeriod(dishOrderDO.getCreateTime()));
cardDO.setUserId(userId);
@ -167,7 +174,78 @@ public class DeductionServiceImpl implements DeductionService {
statisticsVo.setOrderId(dishOrderDO.getId());
businessService.updateStatistics(statisticsVo);
}
return dishOrderDO;
}
@Override
public void cashDraw(Long userId, BigDecimal money) {
BigDecimal newMoney;
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewAmount;
synchronized (userId){
MemberUserDO user = userService.getUser(userId);
if (ObjectUtil.isEmpty(user) || user.getCashAmount().compareTo(BigDecimal.ZERO) < 1
|| money.compareTo(user.getCashAmount()) > 0) {
throw exception(CASH_AMOUNT_NOT_ENOUGH);
}
user.setMoney(user.getMoney().subtract(money));
user.setCashAmount(user.getCashAmount().subtract(money));
userService.updateById(user);
newMoney = user.getMoney();
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewAmount = user.getCashAmount();
}
CardDO cardDO = new CardDO();
cardDO.setUserId(userId);
cardDO.setFlag(CardDO.MINUS);
cardDO.setChangeMoney(money);
cardDO.setType(CostTypeEnum.CASH_WITHDRAW.getCode());
cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney);
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewAmount);
cardService.insertOne(cardDO);
}
@Override
public void wxDraw(Integer amount, Long userId) {
BigDecimal newMoney;
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewAmount;
BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100"));
synchronized (userId){
MemberUserDO user = userService.getUser(userId);
user.setWxAmount(user.getWxAmount().subtract(changeMoney));
user.setMoney(user.getMoney().subtract(changeMoney));
userService.updateById(user);
newMoney = user.getMoney();
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewAmount = user.getCashAmount();
}
//获取最新余额
CardDO cardDO = new CardDO();
cardDO.setUserId(userId);
cardDO.setFlag(CardDO.MINUS);
cardDO.setChangeMoney(changeMoney);
cardDO.setType("7");
cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney);
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewAmount);
cardService.insertOne(cardDO);
}
}