From 2191ece65c966aaf8f185d8315b1bc83103af173 Mon Sep 17 00:00:00 2001 From: xl <2132997227@qq.com> Date: Wed, 31 Jul 2024 11:21:08 +0800 Subject: [PATCH] =?UTF-8?q?fix-=E7=BB=8F=E8=90=A5=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CarReservationInfoServiceImpl.java | 38 +++++++++-- .../impl/CarReservationOrderServiceImpl.java | 2 +- .../ReservationOrderCashDeskServiceImpl.java | 64 ++++++++++++++----- 3 files changed, 82 insertions(+), 22 deletions(-) diff --git a/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationInfoServiceImpl.java b/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationInfoServiceImpl.java index 4890ca5c..bc169381 100644 --- a/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationInfoServiceImpl.java +++ b/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationInfoServiceImpl.java @@ -330,12 +330,38 @@ public class CarReservationInfoServiceImpl extends ServiceImpl items = reservationOrderCashDeskItemService.list(item); List orderIds = items.stream().map(ReservationOrderCashDeskItem::getOrderId).distinct().collect(Collectors.toList()); - QueryWrapper qw = new QueryWrapper<>(); - qw.select("IFNULL(SUM( CASE WHEN new_accessory_price IS NOT NULL AND new_accessory_price <> 0 THEN new_accessory_price ELSE accessory_price END " + - "),0) as new_accessory_price"); - qw.in("car_reservation_order_id", orderIds); - CarReservationInfo info = getOne(qw); - return info.getNewAccessoryPrice(); + //全部配件 + Map accList = accessoryService.getListAll(null, merId); + if (CollUtil.isEmpty(accList)) { + return BigDecimal.ZERO; + } + BigDecimal price = BigDecimal.ZERO; + //套餐材料 + List packageList = carReservationProjectPackageItemAccessoryService.getByOrderIds(orderIds, accList.keySet()); + for (CarReservationProjectPackageItemAccessory itemAcc : packageList) { + Accessory accessory = accList.get(itemAcc.getAccessoryId()); + if (ObjectUtil.isNull(accessory)) { + continue; + } + //套餐材料无法更换,且一次性领完 + price = price.add(accessory.getProcurePrice().multiply(new BigDecimal(itemAcc.getNum()))); + } + //非套餐材料 + List projectList = carReservationInfoProjectAccessoryService.getByOrderIds(orderIds, accList.keySet()); + for (CarReservationInfoProjectAccessory itemAcc : projectList) { + Integer accId = itemAcc.getAccessoryId(); + Integer num = itemAcc.getNum(); + if (itemAcc.getAccessoryPickId() != 0 && !itemAcc.getAccessoryPickId().equals(itemAcc.getAccessoryId())) { + accId = itemAcc.getAccessoryPickId(); + num = itemAcc.getPickingNum(); + } + Accessory accessory = accList.get(accId); + if (ObjectUtil.isNull(accessory)) { + continue; + } + price = price.add(accessory.getProcurePrice().multiply(new BigDecimal(num))); + } + return price; } private BigDecimal getTotalCost(String dateLimit, Integer merId, String type) { diff --git a/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationOrderServiceImpl.java b/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationOrderServiceImpl.java index 1f16c5bf..95a306f5 100644 --- a/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationOrderServiceImpl.java +++ b/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationOrderServiceImpl.java @@ -3599,7 +3599,7 @@ public class CarReservationOrderServiceImpl extends ServiceImpl current = calculatePrice(request, null); + CompletableFuture current = profitTask(request, null); //统计上年数据 - CompletableFuture year = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_YEAR); + CompletableFuture year = profitTask(request, DateConstants.SEARCH_DATE_PRE_YEAR); //统计上个月的数据 - CompletableFuture lastMonth = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_MONTH); + CompletableFuture lastMonth = profitTask(request, DateConstants.SEARCH_DATE_PRE_MONTH); try { CompletableFuture.allOf(current, year, lastMonth).join(); //同比 vo.setYearOnYear(LxkUtil.getRateBig(current.get(), year.get())); //环比 - vo.setLinkRelativeRatio(LxkUtil.getRateBig(current.get(), year.get())); + vo.setLinkRelativeRatio(LxkUtil.getRateBig(current.get(), lastMonth.get())); vo.setCurrentData(current.get()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); @@ -354,6 +358,10 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl profitTask(BusinessAnalysisRequest request, String dateOffset) { + return CompletableFuture.supplyAsync(() -> getTurnover(request.getDateLimit(), request.getMerId(), dateOffset), service); + } + private BigDecimal getTurnover(String dateLimit, Integer merId, String type) { //总营业额 LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); @@ -383,13 +391,39 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl items = reservationOrderCashDeskItemService.list(item); List orderIds = items.stream().map(ReservationOrderCashDeskItem::getOrderId).distinct().collect(Collectors.toList()); - QueryWrapper qw = new QueryWrapper<>(); - qw.select("IFNULL(SUM( CASE WHEN new_accessory_price IS NOT NULL AND new_accessory_price <> 0 THEN new_accessory_price ELSE accessory_price END " + - "),0) as new_accessory_price"); - qw.in("car_reservation_order_id", orderIds); - CarReservationInfo info = carReservationInfoService.getOne(qw); BigDecimal total = list.stream().map(ReservationOrderCashDesk::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add); - return total.subtract(info.getNewAccessoryPrice()); + //全部配件 + Map accList = accessoryService.getListAll(null, merId); + if (CollUtil.isEmpty(accList)) { + return BigDecimal.ZERO; + } + BigDecimal price = BigDecimal.ZERO; + //套餐材料 + List packageList = carReservationProjectPackageItemAccessoryService.getByOrderIds(orderIds, accList.keySet()); + for (CarReservationProjectPackageItemAccessory itemAcc : packageList) { + Accessory accessory = accList.get(itemAcc.getAccessoryId()); + if (ObjectUtil.isNull(accessory)) { + continue; + } + //套餐材料无法更换,且一次性领完 + price = price.add(accessory.getProcurePrice().multiply(new BigDecimal(itemAcc.getNum()))); + } + //非套餐材料 + List projectList = carReservationInfoProjectAccessoryService.getByOrderIds(orderIds, accList.keySet()); + for (CarReservationInfoProjectAccessory itemAcc : projectList) { + Integer accId = itemAcc.getAccessoryId(); + Integer num = itemAcc.getNum(); + if (itemAcc.getAccessoryPickId() != 0 && !itemAcc.getAccessoryPickId().equals(itemAcc.getAccessoryId())) { + accId = itemAcc.getAccessoryPickId(); + num = itemAcc.getPickingNum(); + } + Accessory accessory = accList.get(accId); + if (ObjectUtil.isNull(accessory)) { + continue; + } + price = price.add(accessory.getProcurePrice().multiply(new BigDecimal(num))); + } + return total.subtract(price); } private BigDecimal getPrice(String dateLimit, Integer merId, String type) {