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 | 143 +++++++++++++++++++++++++++++++++++------------ 1 files changed, 106 insertions(+), 37 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 837f187..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 @@ -90,11 +90,22 @@ this.save(dataGenerator); long start = System.currentTimeMillis(); // 查询所有的人数用餐标准 - List<TFoundationConfigVO> foundationConfigs = foundationConfigService.getList(); + List<TFoundationConfigVO> foundationConfigs = foundationConfigService.getList(dto.getShopId()); + if(CollectionUtils.isEmpty(foundationConfigs)){ + throw new ServiceException("请先添加该店铺用餐标准"); + } // 查询所有桌子 - List<TBoard> boards = boardService.list(); + List<TBoard> boards = boardService.list(Wrappers.lambdaQuery(TBoard.class) + .eq(TBoard::getShopId,dto.getShopId())); + if(CollectionUtils.isEmpty(boards)){ + throw new ServiceException("请先添加该店铺桌台信息"); + } // 查询所有菜品 - List<TGoods> goods = goodsService.list(); + List<TGoods> goods = goodsService.list(Wrappers.lambdaQuery(TGoods.class) + .eq(TGoods::getShopId,dto.getShopId())); + if(CollectionUtils.isEmpty(goods)){ + throw new ServiceException("请先添加该店铺菜品信息"); + } // 循环待生成订单列表,添加到集合中,批量插入 List<OrderMealGeneratorCountDTO> orderMealGeneratorCountDTOS = dto.getOrderMealGeneratorCountDTOS(); List<TOrderMeal> orderMeals = new ArrayList<>(); @@ -136,18 +147,21 @@ tOrderMealGoods.setGoodsSalePrice(typeGood.getSalePrice()); tOrderMealGoods.setGoodsCount(1); tOrderMealGoods.setTypeId(typeGood.getTypeId()); + tOrderMealGoods.setGoodsId(typeGood.getId()); orderMealGoods.add(tOrderMealGoods); } } }); - orderMeal.setMealOrderGoods(orderMealGoods); - orderMeal.setOrderMoney(orderMealGoods.stream().map(TOrderMealGoods::getGoodsSalePrice).reduce(BigDecimal::add).get()); - orderMeal.setPayMoney(orderMealGoods.stream().map(TOrderMealGoods::getGoodsSalePrice).reduce(BigDecimal::add).get()); - orderMeals.add(orderMeal); + if(!CollectionUtils.isEmpty(orderMealGoods)){ + orderMeal.setMealOrderGoods(orderMealGoods); + orderMeal.setOrderMoney(orderMealGoods.stream().map(good->good.getGoodsSalePrice().multiply(new BigDecimal(good.getGoodsCount()))).reduce(BigDecimal::add).get()); + orderMeal.setPayMoney(orderMealGoods.stream().map(good->good.getGoodsSalePrice().multiply(new BigDecimal(good.getGoodsCount()))).reduce(BigDecimal::add).get()); + orderMeals.add(orderMeal); + } } } BigDecimal sumMoney = orderMeals.stream().map(TOrderMeal::getPayMoney).reduce(BigDecimal::add).get(); - if(sumMoney.compareTo(dto.getMinMoney()) >= 0 || sumMoney.compareTo(dto.getMaxMoney()) <= 0){ + if(sumMoney.compareTo(dto.getMinMoney()) >= 0 && sumMoney.compareTo(dto.getMaxMoney()) <= 0){ int weiXin = getRandomPayType(orderMeals.size(), dto.getWeiXinProportion()); int ali = getRandomPayType(orderMeals.size(), dto.getAliProportion()); int card = getRandomPayType(orderMeals.size(), dto.getCardProportion()); @@ -221,7 +235,25 @@ long end = System.currentTimeMillis() - start; System.err.println("相差时间========="+end); }else { - 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); + } } } @@ -261,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()); @@ -273,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()); @@ -291,9 +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.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum()); + tOrderStockGoods.setGoodsId(v.get(0).getGoodsId()); + 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); @@ -302,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()); @@ -327,9 +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.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum()); + tOrderStockGoods.setGoodsId(v.get(0).getGoodsId()); + 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); @@ -338,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()); @@ -356,9 +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.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum()); + tOrderStockGoods.setGoodsId(v.get(0).getGoodsId()); + 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); @@ -367,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()); @@ -385,9 +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.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum()); + tOrderStockGoods.setGoodsId(v.get(0).getGoodsId()); + 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); @@ -415,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())); @@ -439,13 +492,15 @@ List<TOrderMeal> orderMeals = orderMealService.list(Wrappers.lambdaQuery(TOrderMeal.class) .in(TOrderMeal::getGeneratorId, ids)); List<Long> mealIds = orderMeals.stream().map(TOrderMeal::getId).collect(Collectors.toList()); - List<TOrderMealGoods> mealGoods = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class) - .in(TOrderMealGoods::getOrderId, mealIds)); - for (TDataGeneratorVO tDataGeneratorVO : list) { - List<Long> collect = orderMeals.stream().filter(e -> e.getGeneratorId().equals(tDataGeneratorVO.getId())).map(TOrderMeal::getId).collect(Collectors.toList()); - BigDecimal money = mealGoods.stream().filter(e -> collect.contains(e.getOrderId())) - .reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getGoodsSalePrice().multiply(new BigDecimal(y.getGoodsCount()))), BigDecimal::add); - tDataGeneratorVO.setTotalRevenue(money); + if(!CollectionUtils.isEmpty(mealIds)){ + List<TOrderMealGoods> mealGoods = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class) + .in(TOrderMealGoods::getOrderId, mealIds)); + for (TDataGeneratorVO tDataGeneratorVO : list) { + List<Long> collect = orderMeals.stream().filter(e -> e.getGeneratorId().equals(tDataGeneratorVO.getId())).map(TOrderMeal::getId).collect(Collectors.toList()); + BigDecimal money = mealGoods.stream().filter(e -> collect.contains(e.getOrderId())) + .reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getGoodsSalePrice().multiply(new BigDecimal(y.getGoodsCount()))), BigDecimal::add); + tDataGeneratorVO.setTotalRevenue(money); + } } }else { List<TOrderSale> orderSales = orderSaleService.list(Wrappers.lambdaQuery(TOrderSale.class) @@ -457,8 +512,10 @@ // List<Long> collect = orderSales.stream().filter(e -> e.getGeneratorId().equals(tDataGeneratorVO.getId())).map(TOrderSale::getId).collect(Collectors.toList()); // BigDecimal money = orderSaleGoods.stream().filter(e -> collect.contains(e.getOrderId())) // .reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getGoodsCostPrice().multiply(new BigDecimal(y.getGoodsCount()))), BigDecimal::add); - BigDecimal money = orderSales.stream().map(TOrderSale::getPayMoney).reduce(BigDecimal::add).get(); - tDataGeneratorVO.setTotalRevenue(money); + if(!CollectionUtils.isEmpty(orderSales)){ + BigDecimal money = orderSales.stream().map(TOrderSale::getPayMoney).reduce(BigDecimal::add).get(); + tDataGeneratorVO.setTotalRevenue(money); + } } } pageInfo.setRecords(list); @@ -472,14 +529,26 @@ if(dataGenerator.getOrderType() == 1){ // 删除时间段的数据 orderMealService.remove(Wrappers.lambdaQuery(TOrderMeal.class) - .gt(TOrderMeal::getCreateTime, dataGenerator.getStartTime()) - .lt(TOrderMeal::getCreateTime, 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) + .ge(TOrderStock::getStockTime, dataGenerator.getStartTime()) + .le(TOrderStock::getStockTime, dataGenerator.getEndTime())); // 修改覆盖类型为已覆盖 orderStockService.update(Wrappers.lambdaUpdate(TOrderStock.class).set(TOrderStock::getIsCover, 1).eq(TOrderStock::getGeneratorId, id)); } + dataGenerator.setStatus(3); + this.updateById(dataGenerator); } @Override -- Gitblit v1.7.1