From 5e74f078f45800dd341b9a825c9436a4a0357e48 Mon Sep 17 00:00:00 2001 From: zt Date: Thu, 2 Jan 2025 14:45:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E6=A0=B8=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storeorder/AppStoreOrderController.java | 8 +++ .../service/amount/DeductionService.java | 4 ++ .../service/amount/DeductionServiceImpl.java | 59 +++++++++++++++++++ .../service/storeorder/StoreOrderService.java | 2 + .../storeorder/StoreOrderServiceImpl.java | 27 +++++++++ 5 files changed, 100 insertions(+) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storeorder/AppStoreOrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storeorder/AppStoreOrderController.java index 3c76275d..f9586650 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storeorder/AppStoreOrderController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storeorder/AppStoreOrderController.java @@ -159,4 +159,12 @@ public class AppStoreOrderController { } } + + @GetMapping("/complete") + @Operation(summary = "离线核销") + public CommonResult complete(@RequestBody List orderIds) { + storeOrderService.completeList(orderIds); + return success(true); + } + } \ No newline at end of file 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 7d52a074..b7e8ecac 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 @@ -41,5 +41,9 @@ public interface DeductionService { */ void deduct(Long userId, BigDecimal money,String type,Long storeId); + /** + * 超市离线扣款 + */ + void storeOfflineDeduction(BigDecimal total, Long userId,Long storeId); } 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 c671acf3..545ab10b 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 @@ -521,5 +521,64 @@ public class DeductionServiceImpl implements DeductionService { updateRedis(userId, name, wxNewMoney); } + @Override + public void storeOfflineDeduction(BigDecimal total, Long userId, Long storeId) { + BigDecimal wxNewMoney; + BigDecimal giftNewMoney; + BigDecimal cashNewMoney; + String name; + synchronized (getUserLock(userId)) { + MemberUserDO user = userService.getUser(userId); + MoneyDO moneyDO = moneyService.getMoney(userId, storeId); + + BigDecimal wxAmount = user.getWxAmount(); + BigDecimal giftAmount = user.getGiftAmount(); + BigDecimal cashAmount = moneyDO.getCashAmount(); + + //计算金额 + if (total.compareTo(cashAmount) <= 0) { + moneyDO.setCashAmount(cashAmount.subtract(total)); + } else { + moneyDO.setCashAmount(BigDecimal.ZERO); + BigDecimal total1 = total.subtract(cashAmount); + if (total1.compareTo(giftAmount) <= 0) { + user.setGiftAmount(giftAmount.subtract(total1)); + } else { + user.setGiftAmount(BigDecimal.ZERO); + BigDecimal total2 = total1.subtract(giftAmount); + + if(total2.compareTo(wxAmount) <= 0) { + user.setWxAmount(wxAmount.subtract(total2)); + }else { + user.setWxAmount(BigDecimal.ZERO); + moneyDO.setDebtAmount(wxAmount.subtract(total2).add(moneyDO.getDebtAmount())); + } + } + } + userService.updateById(user); + moneyService.updateById(moneyDO); + + wxNewMoney = user.getWxAmount(); + giftNewMoney = user.getGiftAmount(); + cashNewMoney = moneyDO.getCashAmount(); + name = user.getNickname(); + } + + CardDO cardDO = new CardDO(); + cardDO.setUserId(userId); + cardDO.setChangeMoney(total); + cardDO.setFlag(CardDO.MINUS); + cardDO.setType(CostTypeEnum.SHOPPING.getCode()); + cardDO.setWxAmount(wxNewMoney); + cardDO.setCashAmount(cashNewMoney); + cardDO.setGiftAmount(giftNewMoney); + cardDO.setCarteenId(storeId); + cardService.insertOne(cardDO); + + + //更新redis + updateRedis(userId, name, wxNewMoney); + + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java index 06d15579..42fa808e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java @@ -96,4 +96,6 @@ public interface StoreOrderService { List selectPayOrder(); AddReqVO refundAdmin(Integer orderId); + + void completeList(List orderIds); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java index af5eb859..79a6a688 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java @@ -651,6 +651,33 @@ public class StoreOrderServiceImpl implements StoreOrderService { return addReqVO; } + @Override + public void completeList(List orderIds) { + for (Integer orderId : orderIds){ + StoreOrderDO storeOrderDO = storeOrderMapper.selectById(orderId); + if(ObjectUtil.isEmpty(storeOrderDO)){ + continue; + } + if(storeOrderDO.getStatus().equals(StoreOrderStatusEnum.PAY.getCode())){ + storeOrderDO.setStatus(StoreOrderStatusEnum.COMPLETE.getCode()); + storeOrderMapper.updateById(storeOrderDO); + }else { + //扣款 + deductionService.storeDeduction(BigDecimal.valueOf(storeOrderDO.getTotalPrice()), storeOrderDO.getUserId(),storeOrderDO.getCarteenId()); + //营业数据 + StatisticsVo statisticsVo = new StatisticsVo(); + statisticsVo.setCarteenId(storeOrderDO.getCarteenId()); + statisticsVo.setTotalMoney(BigDecimal.valueOf(storeOrderDO.getTotalPrice())); + statisticsVo.setOrderSum(1); + statisticsVo.setTime(storeOrderDO.getCreateTime()); + statisticsVo.setOrderId(storeOrderDO.getOrderId().longValue()); + storeBusinessService.updateStatistics(statisticsVo); + } + + + } + } + public void test() { //计算金额 //if (total.compareTo(wxAmount) <= 0) {