支付优化
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
||||
//微信充值
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user