From 88e1ae77be3fd4bb803fe68b3d04b2478edac550 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期六, 21 九月 2024 14:15:51 +0800
Subject: [PATCH] 修改接口

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java |   86 +++++++++++++++++++++++++++++++-----------
 1 files changed, 63 insertions(+), 23 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java
index eb36fce..df04761 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java
@@ -235,8 +235,25 @@
             long end = System.currentTimeMillis() - start;
             System.err.println("相差时间========="+end);
         }else {
-            this.removeById(dataGenerator);
-            throw new ServiceException("数据生成不在营业额范围内");
+            // 生成失败 进行重试
+            String key = dto.getShopId()+"_fail";
+            if(redisCache.hasKey(key)){
+                Object cacheObject = redisCache.getCacheObject(key);
+                int i = Integer.parseInt(cacheObject.toString());
+                if(i == 10){
+                    this.removeById(dataGenerator);
+                    redisCache.deleteObject(key);
+                    throw new ServiceException("多次匹配数据不成功,请调整营业额范围");
+                }else {
+                    this.removeById(dataGenerator);
+                    redisCache.setCacheObject(key,i+1);
+                    this.mealDataGenerator(dto);
+                }
+            }else {
+                this.removeById(dataGenerator);
+                redisCache.setCacheObject(key,1);
+                this.mealDataGenerator(dto);
+            }
         }
 
     }
@@ -276,6 +293,7 @@
         orderSales.forEach(e->{
             e.setGeneratorId(dataGenerator.getId());
             e.setOrderNum(OrderNumConstants.SALE + CodeGenerateUtils.generateVolumeSn());
+            e.setIsCover(0);
         });
         List<TOrderSaleGoods> orderSaleGoods = orderSales.stream().map(TOrderSale::getOrderSaleGoods).flatMap(Collection::stream).collect(Collectors.toList());
 
@@ -288,8 +306,9 @@
             if(i==stockDataSets.size()-1){
                 // 最后一次
                 LocalDate endTime = LocalDate.now();
-                List<Long> saleIds = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) <= 0).map(TOrderSale::getId).collect(Collectors.toList());
-                List<TOrderSaleGoods> orderSaleGoodsList = orderSaleGoods.stream().filter(e -> saleIds.contains(e.getOrderId())).collect(Collectors.toList());
+                List<TOrderSale> collect = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) <= 0).collect(Collectors.toList());
+                List<TOrderSaleGoods> orderSaleGoodsList = new ArrayList<>();
+                collect.forEach(e->orderSaleGoodsList.addAll(e.getOrderSaleGoods()));
                 // 根据商品新生成一条数据
                 TOrderStock orderStock = new TOrderStock();
                 orderStock.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn());
@@ -306,10 +325,13 @@
                     tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum());
                     tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice());
                     tOrderStockGoods.setSalePrice(v.get(0).getGoodsSalePrice());
-                    tOrderStockGoods.setThisSalePrice(v.get(0).getThisSalePrice());
+//                    tOrderStockGoods.setThisCostPrice(v.get(0).getThisSalePrice());
                     tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture());
                     tOrderStockGoods.setGoodsId(v.get(0).getGoodsId());
-                    tOrderStockGoods.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum());
+                    int sum = v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum();
+                    BigDecimal rate = start.getLossRate().divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal bigDecimal = new BigDecimal(sum).divide(rate).setScale(0, BigDecimal.ROUND_HALF_UP);
+                    tOrderStockGoods.setStockCount(Integer.parseInt(bigDecimal.toString().split("\\.")[0]));
                     orderStockGoods.add(tOrderStockGoods);
                 });
                 orderStock.setOrderStockGoods(orderStockGoods);
@@ -318,8 +340,9 @@
             }else if(i==0 && Objects.nonNull(stockDataSet)){
                 // 第一次 第一次的进货时间为上一次的结束时间  开始时间为上一次的开始时间
                 LocalDate startTime1 = stockDataSet.getStockDate();
-                List<Long> saleIds = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) < 0).map(TOrderSale::getId).collect(Collectors.toList());
-                List<TOrderSaleGoods> orderSaleGoodsList = orderSaleGoods.stream().filter(e -> saleIds.contains(e.getOrderId())).collect(Collectors.toList());
+                List<TOrderSale> collect = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) < 0).collect(Collectors.toList());
+                List<TOrderSaleGoods> orderSaleGoodsList = new ArrayList<>();
+                collect.forEach(e->orderSaleGoodsList.addAll(e.getOrderSaleGoods()));
                 // 查询上一次开始之后的订单数据
                 List<TOrderSale> orderSales1 = orderSaleService.list(new LambdaQueryWrapper<TOrderSale>().gt(TOrderSale::getOrderTime, startTime1));
                 List<Long> saleIds1 = orderSales1.stream().map(TOrderSale::getId).collect(Collectors.toList());
@@ -343,10 +366,13 @@
                     tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum());
                     tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice());
                     tOrderStockGoods.setSalePrice(v.get(0).getGoodsSalePrice());
-                    tOrderStockGoods.setThisSalePrice(v.get(0).getThisSalePrice());
+//                    tOrderStockGoods.setThisCostPrice(v.get(0).getThisSalePrice());
                     tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture());
                     tOrderStockGoods.setGoodsId(v.get(0).getGoodsId());
-                    tOrderStockGoods.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum());
+                    int sum = v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum();
+                    BigDecimal rate = start.getLossRate().divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal bigDecimal = new BigDecimal(sum).divide(rate).setScale(0, BigDecimal.ROUND_HALF_UP);
+                    tOrderStockGoods.setStockCount(Integer.parseInt(bigDecimal.toString().split("\\.")[0]));
                     orderStockGoods.add(tOrderStockGoods);
                 });
                 orderStock.setOrderStockGoods(orderStockGoods);
@@ -355,8 +381,9 @@
                 // 处理第一次到下一次的数据
                 TStockDataSet end = stockDataSets.get(i + 1);
                 LocalDate endTime = end.getStockDate();
-                List<Long> saleIds2 = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) < 0).map(TOrderSale::getId).collect(Collectors.toList());
-                List<TOrderSaleGoods> orderSaleGoodsList2 = orderSaleGoods.stream().filter(e -> saleIds2.contains(e.getOrderId())).collect(Collectors.toList());
+                List<TOrderSale> collect1 = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) < 0).collect(Collectors.toList());
+                List<TOrderSaleGoods> orderSaleGoodsList2 = new ArrayList<>();
+                collect1.forEach(e->orderSaleGoodsList2.addAll(e.getOrderSaleGoods()));
                 // 根据商品新生成一条数据
                 TOrderStock orderStock1 = new TOrderStock();
                 orderStock1.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn());
@@ -373,10 +400,13 @@
                     tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum());
                     tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice());
                     tOrderStockGoods.setSalePrice(v.get(0).getGoodsSalePrice());
-                    tOrderStockGoods.setThisSalePrice(v.get(0).getThisSalePrice());
+//                    tOrderStockGoods.setThisCostPrice(v.get(0).getThisSalePrice());
                     tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture());
                     tOrderStockGoods.setGoodsId(v.get(0).getGoodsId());
-                    tOrderStockGoods.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum());
+                    int sum = v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum();
+                    BigDecimal rate = start.getLossRate().divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal bigDecimal = new BigDecimal(sum).divide(rate).setScale(0, BigDecimal.ROUND_HALF_UP);
+                    tOrderStockGoods.setStockCount(Integer.parseInt(bigDecimal.toString().split("\\.")[0]));
                     orderStockGoods1.add(tOrderStockGoods);
                 });
                 orderStock1.setOrderStockGoods(orderStockGoods1);
@@ -385,8 +415,9 @@
             }else {
                 TStockDataSet end = stockDataSets.get(i + 1);
                 LocalDate endTime = end.getStockDate();
-                List<Long> saleIds = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) < 0).map(TOrderSale::getId).collect(Collectors.toList());
-                List<TOrderSaleGoods> orderSaleGoodsList = orderSaleGoods.stream().filter(e -> saleIds.contains(e.getOrderId())).collect(Collectors.toList());
+                List<TOrderSale> collect = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) < 0).collect(Collectors.toList());
+                List<TOrderSaleGoods> orderSaleGoodsList = new ArrayList<>();
+                collect.forEach(e->orderSaleGoodsList.addAll(e.getOrderSaleGoods()));
                 // 根据商品新生成一条数据
                 TOrderStock orderStock = new TOrderStock();
                 orderStock.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn());
@@ -403,10 +434,13 @@
                     tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum());
                     tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice());
                     tOrderStockGoods.setSalePrice(v.get(0).getGoodsSalePrice());
-                    tOrderStockGoods.setThisSalePrice(v.get(0).getThisSalePrice());
+//                    tOrderStockGoods.setThisCostPrice(v.get(0).getThisSalePrice());
                     tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture());
                     tOrderStockGoods.setGoodsId(v.get(0).getGoodsId());
-                    tOrderStockGoods.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum());
+                    int sum = v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum();
+                    BigDecimal rate = start.getLossRate().divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal bigDecimal = new BigDecimal(sum).divide(rate).setScale(0, BigDecimal.ROUND_HALF_UP);
+                    tOrderStockGoods.setStockCount(Integer.parseInt(bigDecimal.toString().split("\\.")[0]));
                     orderStockGoods.add(tOrderStockGoods);
                 });
                 orderStock.setOrderStockGoods(orderStockGoods);
@@ -434,10 +468,10 @@
 //        orderSaleGoods.forEach(e->e.setTypeName(list.stream().filter(m->m.getId().equals(e.getTypeId())).findFirst().get().getTypeName()));
         orderSaleGoods.forEach(e->{
             e.setId(null);
+            e.setGoodsCostPrice(null);
         });
         orderSaleGoodsService.saveBatch(orderSaleGoods);
         // 添加数据
-        stockList.forEach(e->e.setShopId(dataGenerator.getShopId()));
         orderStockService.saveBatch(stockList);
         for (TOrderStock stock : stockList) {
             stock.getOrderStockGoods().forEach(e->e.setOrderId(stock.getId()));
@@ -495,15 +529,21 @@
         if(dataGenerator.getOrderType() == 1){
             // 删除时间段的数据
             orderMealService.remove(Wrappers.lambdaQuery(TOrderMeal.class)
-                    .gt(TOrderMeal::getMealTime, dataGenerator.getStartTime())
-                    .lt(TOrderMeal::getMealTime, dataGenerator.getEndTime()));
+                    .ge(TOrderMeal::getMealTime, dataGenerator.getStartTime())
+                    .le(TOrderMeal::getMealTime, dataGenerator.getEndTime()));
             // 修改覆盖类型为已覆盖
             orderMealService.update(Wrappers.lambdaUpdate(TOrderMeal.class).set(TOrderMeal::getIsCover, 1).eq(TOrderMeal::getGeneratorId, id));
         }else {
             // 删除时间段的数据
+            orderSaleService.remove(Wrappers.lambdaQuery(TOrderSale.class)
+                    .ge(TOrderSale::getOrderTime, dataGenerator.getStartTime())
+                    .le(TOrderSale::getOrderTime, dataGenerator.getEndTime()));
+            // 修改覆盖类型为已覆盖
+            orderStockService.update(Wrappers.lambdaUpdate(TOrderStock.class).set(TOrderStock::getIsCover, 1).eq(TOrderStock::getGeneratorId, id));
+            // 删除时间段的数据
             orderStockService.remove(Wrappers.lambdaQuery(TOrderStock.class)
-                    .gt(TOrderStock::getStockTime, dataGenerator.getStartTime())
-                    .lt(TOrderStock::getStockTime, dataGenerator.getEndTime()));
+                    .ge(TOrderStock::getStockTime, dataGenerator.getStartTime())
+                    .le(TOrderStock::getStockTime, dataGenerator.getEndTime()));
             // 修改覆盖类型为已覆盖
             orderStockService.update(Wrappers.lambdaUpdate(TOrderStock.class).set(TOrderStock::getIsCover, 1).eq(TOrderStock::getGeneratorId, id));
         }

--
Gitblit v1.7.1