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