支付优化
This commit is contained in:
@ -26,4 +26,9 @@ public interface DeductionService {
|
|||||||
* 退款
|
* 退款
|
||||||
*/
|
*/
|
||||||
void refund(Long userId,BigDecimal money,DishOrderDO dishOrderDO);
|
void refund(Long userId,BigDecimal money,DishOrderDO dishOrderDO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 减免
|
||||||
|
*/
|
||||||
|
void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount);
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
private BusinessService businessService;
|
private BusinessService businessService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deduction(DishOrderDO dishOrderDO) {
|
public void deduction(DishOrderDO dishOrderDO) {
|
||||||
Long userId = dishOrderDO.getUserId();
|
Long userId = dishOrderDO.getUserId();
|
||||||
|
|
||||||
BigDecimal newMoney;
|
BigDecimal newMoney;
|
||||||
@ -73,10 +73,10 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
if (total.compareTo(BigDecimal.ZERO) > 0) {
|
if (total.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
reductionAmount = userService.getReductionAmount(userId, total, dishOrderDO.getCreateTime());
|
reductionAmount = userService.getReductionAmount(userId, total, dishOrderDO.getCreateTime());
|
||||||
}
|
}
|
||||||
if(dishOrderDO.getReductionAmount().compareTo(BigDecimal.ZERO) > 0){
|
if (dishOrderDO.getReductionAmount().compareTo(BigDecimal.ZERO) > 0) {
|
||||||
reductionAmount = reductionAmount.add(dishOrderDO.getReductionAmount());
|
reductionAmount = reductionAmount.add(dishOrderDO.getReductionAmount());
|
||||||
dishOrderDO.setReductionAmount(reductionAmount);
|
dishOrderDO.setReductionAmount(reductionAmount);
|
||||||
}else {
|
} else {
|
||||||
dishOrderDO.setReductionAmount(reductionAmount);
|
dishOrderDO.setReductionAmount(reductionAmount);
|
||||||
}
|
}
|
||||||
dishOrderDO.setReductionState(reductionAmount.compareTo(BigDecimal.ZERO) > 0 ? "1" : "0");
|
dishOrderDO.setReductionState(reductionAmount.compareTo(BigDecimal.ZERO) > 0 ? "1" : "0");
|
||||||
@ -165,7 +165,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
deductionRedisTemplate.delete(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId());
|
deductionRedisTemplate.delete(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId());
|
||||||
|
|
||||||
//更新营业数据
|
//更新营业数据
|
||||||
if(dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)){
|
if (dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)) {
|
||||||
StatisticsVo statisticsVo = new StatisticsVo();
|
StatisticsVo statisticsVo = new StatisticsVo();
|
||||||
statisticsVo.setCarteenId(dishOrderDO.getStoreId());
|
statisticsVo.setCarteenId(dishOrderDO.getStoreId());
|
||||||
statisticsVo.setTotalMoney(dishOrderDO.getTotalMoney());
|
statisticsVo.setTotalMoney(dishOrderDO.getTotalMoney());
|
||||||
@ -186,7 +186,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
BigDecimal giftNewMoney;
|
BigDecimal giftNewMoney;
|
||||||
BigDecimal cashNewAmount;
|
BigDecimal cashNewAmount;
|
||||||
|
|
||||||
synchronized (userId){
|
synchronized (userId) {
|
||||||
MemberUserDO user = userService.getUser(userId);
|
MemberUserDO user = userService.getUser(userId);
|
||||||
if (ObjectUtil.isEmpty(user) || user.getCashAmount().compareTo(BigDecimal.ZERO) < 1
|
if (ObjectUtil.isEmpty(user) || user.getCashAmount().compareTo(BigDecimal.ZERO) < 1
|
||||||
|| money.compareTo(user.getCashAmount()) > 0) {
|
|| money.compareTo(user.getCashAmount()) > 0) {
|
||||||
@ -222,7 +222,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
BigDecimal cashNewAmount;
|
BigDecimal cashNewAmount;
|
||||||
BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100"));
|
BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100"));
|
||||||
|
|
||||||
synchronized (userId){
|
synchronized (userId) {
|
||||||
MemberUserDO user = userService.getUser(userId);
|
MemberUserDO user = userService.getUser(userId);
|
||||||
user.setWxAmount(user.getWxAmount().subtract(changeMoney));
|
user.setWxAmount(user.getWxAmount().subtract(changeMoney));
|
||||||
user.setMoney(user.getMoney().subtract(changeMoney));
|
user.setMoney(user.getMoney().subtract(changeMoney));
|
||||||
@ -256,7 +256,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
BigDecimal giftNewMoney;
|
BigDecimal giftNewMoney;
|
||||||
BigDecimal cashNewAmount;
|
BigDecimal cashNewAmount;
|
||||||
|
|
||||||
synchronized (userId){
|
synchronized (userId) {
|
||||||
MemberUserDO user = userService.getUser(userId);
|
MemberUserDO user = userService.getUser(userId);
|
||||||
BigDecimal oldMoney = user.getMoney();
|
BigDecimal oldMoney = user.getMoney();
|
||||||
|
|
||||||
@ -271,7 +271,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount();
|
BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount();
|
||||||
|
|
||||||
BigDecimal newMoney = money;
|
BigDecimal newMoney = money;
|
||||||
if(oldMoney.compareTo(BigDecimal.ZERO)<0){
|
if (oldMoney.compareTo(BigDecimal.ZERO) < 0) {
|
||||||
newMoney = user.getMoney();
|
newMoney = user.getMoney();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,5 +321,38 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
|
|
||||||
cardService.insertOne(cardDO);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.dal.mysql.user.MemberUserMapper;
|
||||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||||
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
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.business.BusinessService;
|
||||||
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
|
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
|
||||||
import cn.iocoder.yudao.module.member.service.refund.RefundService;
|
import cn.iocoder.yudao.module.member.service.refund.RefundService;
|
||||||
@ -85,6 +86,8 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
private RefundService refundService;
|
private RefundService refundService;
|
||||||
@Resource
|
@Resource
|
||||||
private BusinessService businessService;
|
private BusinessService businessService;
|
||||||
|
@Resource
|
||||||
|
private DeductionService deductionService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createOrder(AppOrderSaveReqVO createReqVO) {
|
public Long createOrder(AppOrderSaveReqVO createReqVO) {
|
||||||
@ -456,31 +459,7 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//退款
|
//退款
|
||||||
CardDO lastCardDO = cardMapper.selectOne(Wrappers.<CardDO>lambdaQuery()
|
deductionService.reduction(dishOrderDO.getUserId(),money,giftAmount,cashAmount,wxAmount);
|
||||||
.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);
|
|
||||||
|
|
||||||
//更新营业数据
|
//更新营业数据
|
||||||
if(dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)){
|
if(dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)){
|
||||||
|
Reference in New Issue
Block a user