From be4886585c027f4ecefbd835127722d5fd362ce9 Mon Sep 17 00:00:00 2001 From: seesaw Date: Mon, 21 Oct 2024 17:42:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/amount/DeductionService.java | 5 ++ .../service/amount/DeductionServiceImpl.java | 49 ++++++++++++++++--- .../service/order/OrderServiceImpl.java | 29 ++--------- 3 files changed, 50 insertions(+), 33 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java index 74db7108..7fce51ca 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java @@ -26,4 +26,9 @@ public interface DeductionService { * 退款 */ void refund(Long userId,BigDecimal money,DishOrderDO dishOrderDO); + + /** + * 减免 + */ + void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java index 9bea3296..fa2426ce 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java @@ -51,7 +51,7 @@ public class DeductionServiceImpl implements DeductionService { private BusinessService businessService; @Override - public void deduction(DishOrderDO dishOrderDO) { + public void deduction(DishOrderDO dishOrderDO) { Long userId = dishOrderDO.getUserId(); BigDecimal newMoney; @@ -73,10 +73,10 @@ public class DeductionServiceImpl implements DeductionService { if (total.compareTo(BigDecimal.ZERO) > 0) { 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()); dishOrderDO.setReductionAmount(reductionAmount); - }else { + } else { dishOrderDO.setReductionAmount(reductionAmount); } dishOrderDO.setReductionState(reductionAmount.compareTo(BigDecimal.ZERO) > 0 ? "1" : "0"); @@ -165,7 +165,7 @@ public class DeductionServiceImpl implements DeductionService { deductionRedisTemplate.delete(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId()); //更新营业数据 - if(dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)){ + if (dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)) { StatisticsVo statisticsVo = new StatisticsVo(); statisticsVo.setCarteenId(dishOrderDO.getStoreId()); statisticsVo.setTotalMoney(dishOrderDO.getTotalMoney()); @@ -186,7 +186,7 @@ public class DeductionServiceImpl implements DeductionService { BigDecimal giftNewMoney; BigDecimal cashNewAmount; - synchronized (userId){ + synchronized (userId) { MemberUserDO user = userService.getUser(userId); if (ObjectUtil.isEmpty(user) || user.getCashAmount().compareTo(BigDecimal.ZERO) < 1 || money.compareTo(user.getCashAmount()) > 0) { @@ -222,7 +222,7 @@ public class DeductionServiceImpl implements DeductionService { BigDecimal cashNewAmount; BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100")); - synchronized (userId){ + synchronized (userId) { MemberUserDO user = userService.getUser(userId); user.setWxAmount(user.getWxAmount().subtract(changeMoney)); user.setMoney(user.getMoney().subtract(changeMoney)); @@ -256,7 +256,7 @@ public class DeductionServiceImpl implements DeductionService { BigDecimal giftNewMoney; BigDecimal cashNewAmount; - synchronized (userId){ + synchronized (userId) { MemberUserDO user = userService.getUser(userId); BigDecimal oldMoney = user.getMoney(); @@ -271,7 +271,7 @@ public class DeductionServiceImpl implements DeductionService { BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount(); BigDecimal newMoney = money; - if(oldMoney.compareTo(BigDecimal.ZERO)<0){ + if (oldMoney.compareTo(BigDecimal.ZERO) < 0) { newMoney = user.getMoney(); } @@ -321,5 +321,38 @@ public class DeductionServiceImpl implements DeductionService { 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); + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java index c8a79055..f3401c8e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java @@ -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.enums.CostTypeEnum; 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.orderdetail.OrderDetailService; import cn.iocoder.yudao.module.member.service.refund.RefundService; @@ -85,6 +86,8 @@ public class OrderServiceImpl implements OrderService { private RefundService refundService; @Resource private BusinessService businessService; + @Resource + private DeductionService deductionService; @Override public Long createOrder(AppOrderSaveReqVO createReqVO) { @@ -456,31 +459,7 @@ public class OrderServiceImpl implements OrderService { } //退款 - CardDO lastCardDO = cardMapper.selectOne(Wrappers.lambdaQuery() - .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); + deductionService.reduction(dishOrderDO.getUserId(),money,giftAmount,cashAmount,wxAmount); //更新营业数据 if(dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)){