ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataGeneratorController.java
@@ -142,6 +142,7 @@ BeanUtils.copyProperties(orderMealVO, tOrderMealExportExcel); tOrderMealExportExcel.setCreateStrTime(DateUtils.localDateToString(orderMealVO.getMealTime())); tOrderMealExportExcel.setGoodsList(orderMealVO.getGoodsList().stream().collect(Collectors.joining("\n"))); tOrderMealExportExcel.setPersonCount(orderMealVO.getMealPerson()); orderMeals.add(tOrderMealExportExcel); } Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TOrderMealExportExcel.class, orderMeals); ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderMealController.java
@@ -83,7 +83,11 @@ @PostMapping(value = "/amountSum") public AjaxResult<AmountSumVO> amountSum(@RequestBody TOrderMealQuery query) { query.setShopId(tokenService.getLoginUser().getObjectId()); return AjaxResult.success(orderMealService.amountSum(query)); AmountSumVO amountSumVO = orderMealService.amountSum(query); if(amountSumVO.getObligation().compareTo(BigDecimal.ZERO) < 0){ amountSumVO.setObligation(BigDecimal.ZERO); } return AjaxResult.success(amountSumVO); } @ApiOperation( value = "查询餐饮详情") ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderSaleController.java
@@ -68,6 +68,7 @@ @PostMapping(value = "/pageList") public AjaxResult<PageInfo<TOrderSaleVO>> pageList(@RequestBody TOrderSaleQuery query) { query.setShopId(tokenService.getLoginUser().getObjectId()); query.setIsCover(1); return AjaxResult.success(orderSaleService.pageList(query)); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderStockController.java
@@ -50,6 +50,7 @@ @PostMapping(value = "/pageList") public AjaxResult<PageInfo<TOrderStockVO>> pageList(@RequestBody TOrderStockQuery query) { query.setShopId(tokenService.getLoginUser().getObjectId()); query.setIsCover(1); return AjaxResult.success(orderStockService.pageList(query)); } @@ -75,6 +76,16 @@ } /** * 编辑进货单下单接口 */ @ApiOperation( value = "编辑生成进货单接口") @PostMapping(value = "/editGenerator") public AjaxResult<String> editGenerator(@RequestBody TOrderStockDTO dto) { orderStockService.editGenerator(dto); return AjaxResult.success(); } /** * 查看进货单详情 */ @ApiOperation( value = "查看进货单详情") ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/TimeRangeQueryBody.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.time.LocalDateTime; @@ -14,11 +15,11 @@ public class TimeRangeQueryBody extends BasePage { @ApiModelProperty("开始时间 格式 yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date startTime; @ApiModelProperty("结束时间 格式 yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd") private Date endTime; public String getStartTime() { ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderSale.java
@@ -67,6 +67,9 @@ @ApiModelProperty(value = "支付方式 1=现金 2=支付宝 3=微信 4=银行卡 5=其他") @TableField("payType") private Integer payType; @ApiModelProperty(value = "是否覆盖 1=是 0=否") @TableField("isCover") private Integer isCover; @ApiModelProperty(value = "销售订单商品") @TableField(exist = false) ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderStockGoods.java
@@ -55,8 +55,8 @@ @ApiModelProperty(value = "本次进货价格") @Excel(name = "进货价格",width = 15) @TableField("thisSalePrice") private BigDecimal thisSalePrice; @TableField("thisCostPrice") private BigDecimal thisCostPrice; @ApiModelProperty(value = "商品图") @TableField("goodsPicture") ruoyi-system/src/main/java/com/ruoyi/system/dto/TOrderStockDTO.java
@@ -4,6 +4,7 @@ import com.ruoyi.system.domain.TOrderSaleGoods; import com.ruoyi.system.domain.TOrderStock; import com.ruoyi.system.domain.TOrderStockGoods; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -14,4 +15,7 @@ @ApiModel(value = "进货订单DTO") public class TOrderStockDTO extends TOrderStock { @ApiModelProperty(value = "是否为数据生成的进货数据添加 1=商家 2=平台") private Integer isGenerator = 1; } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TDataGeneratorMapper.java
@@ -8,6 +8,7 @@ import com.ruoyi.system.query.TDataStatisticsQuery; import com.ruoyi.system.vo.SalesVolumeVO; import com.ruoyi.system.vo.TDataGeneratorVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -20,6 +21,7 @@ * @author xiaochen * @since 2024-08-27 */ @Mapper public interface TDataGeneratorMapper extends BaseMapper<TDataGenerator> { /** ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleGoodsMapper.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.domain.TOrderSaleGoods; import com.ruoyi.system.vo.SalesRankingVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; @@ -17,6 +18,7 @@ * @author xiaochen * @since 2024-08-14 */ @Mapper public interface TOrderSaleGoodsMapper extends BaseMapper<TOrderSaleGoods> { /** ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java
@@ -5,6 +5,7 @@ import com.ruoyi.system.domain.TOrderSale; import com.ruoyi.system.query.*; import com.ruoyi.system.vo.*; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; @@ -19,6 +20,7 @@ * @author xiaochen * @since 2024-08-14 */ @Mapper public interface TOrderSaleMapper extends BaseMapper<TOrderSale> { /** ruoyi-system/src/main/java/com/ruoyi/system/query/TOrderSaleQuery.java
@@ -22,4 +22,6 @@ private Integer timeType; @ApiModelProperty(value = "数据生成id") private Long generatorId; @ApiModelProperty(value = "是否覆盖") private Integer isCover; } ruoyi-system/src/main/java/com/ruoyi/system/query/TOrderStockQuery.java
@@ -19,4 +19,6 @@ private Long shopId; @ApiModelProperty(value = "数据生成id") private Long generatorId; @ApiModelProperty(value = "是否覆盖") private Integer isCover; } ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderStockService.java
@@ -55,4 +55,10 @@ * @return */ List<TOrderStockVO> stockGeneratorExport(TDataGeneratorStockQuery query); /** * 编辑生成进货单接口 * @param dto */ void editGenerator(TOrderStockDTO dto); } 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)); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java
@@ -6,17 +6,17 @@ import com.ruoyi.common.constant.OrderNumConstants; import com.ruoyi.common.utils.CodeGenerateUtils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.system.domain.TOrderSaleGoods; import com.ruoyi.system.domain.TOrderStock; import com.ruoyi.system.domain.TOrderStockGoods; import com.ruoyi.system.domain.*; import com.ruoyi.system.dto.TOrderSaleDTO; import com.ruoyi.system.dto.TOrderStockDTO; import com.ruoyi.system.mapper.TDataGeneratorMapper; import com.ruoyi.system.mapper.TOrderSaleGoodsMapper; import com.ruoyi.system.mapper.TOrderSaleMapper; import com.ruoyi.system.mapper.TOrderStockMapper; import com.ruoyi.system.query.TDataGeneratorQuery; import com.ruoyi.system.query.TDataGeneratorStockQuery; import com.ruoyi.system.query.TOrderStockQuery; import com.ruoyi.system.service.TOrderStockGoodsService; import com.ruoyi.system.service.TOrderStockService; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.TDataGeneratorVO; import com.ruoyi.system.vo.TOrderStockVO; import org.springframework.beans.factory.annotation.Autowired; @@ -24,10 +24,9 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.*; import java.util.stream.Collectors; /** @@ -43,6 +42,14 @@ @Autowired private TOrderStockGoodsService tOrderStockGoodsService; @Autowired private TOrderSaleMapper orderSaleMapper; @Autowired private TOrderSaleGoodsService orderSaleGoodsService; @Autowired private TStockDataSetService stockDataSetService; @Autowired private TDataGeneratorMapper dataGeneratorMapper; @Override public void add(TOrderStockDTO dto) { // 进货单号 @@ -50,6 +57,9 @@ List<TOrderStockGoods> orderStockGoods = dto.getOrderStockGoods(); // BigDecimal sum = orderStockGoods.stream().map(TOrderStockGoods::getStockPrice).reduce(BigDecimal::add).get(); // dto.setStockTotalPrice(sum); if(dto.getIsGenerator().equals(2)){ dto.setIsCover(0); } this.save(dto); // 添加商品 orderStockGoods.forEach(orderSaleGoods1 -> { @@ -174,4 +184,55 @@ }); return list; } @Override public void editGenerator(TOrderStockDTO dto) { TDataGenerator dataGenerator = dataGeneratorMapper.selectById(dto.getGeneratorId()); // 查询生成数据的配置 List<TStockDataSet> list = stockDataSetService.list(Wrappers.lambdaQuery(TStockDataSet.class) .eq(TStockDataSet::getGeneratorId, dto.getGeneratorId())); list = list.stream().sorted(Comparator.comparing(TStockDataSet::getStockDate)).collect(Collectors.toList()); String startTime = null; String endTime = null; Iterator<TStockDataSet> iterator = list.iterator(); while (iterator.hasNext()){ TStockDataSet next = iterator.next(); if(next.getStockDate().compareTo(dto.getStockTime()) == 0){ startTime = DateUtils.localDateToString(next.getStockDate()); } if(Objects.nonNull(startTime)){ endTime = DateUtils.localDateToString(next.getStockDate()); } if(Objects.nonNull(endTime)){ break; } } if(Objects.isNull(endTime)){ endTime = DateUtils.localDateToString(dataGenerator.getEndTime()); } // 查询该数据生成的销售单的数据 List<TOrderSale> orderSales = orderSaleMapper.selectList(Wrappers.lambdaQuery(TOrderSale.class) .eq(TOrderSale::getGeneratorId, dto.getGeneratorId()) .between(TOrderSale::getOrderTime, startTime + " 00:00:00", endTime + " 23:59:59")); List<Long> saleOrderIds = orderSales.stream().map(TOrderSale::getId).collect(Collectors.toList()); List<TOrderStockGoods> orderStockGoods = dto.getOrderStockGoods(); if(!CollectionUtils.isEmpty(saleOrderIds)){ List<TOrderSaleGoods> orderSaleGoods = orderSaleGoodsService.list(Wrappers.lambdaQuery(TOrderSaleGoods.class) .in(TOrderSaleGoods::getOrderId, saleOrderIds)); for (TOrderStockGoods orderStockGood : orderStockGoods) { orderSaleGoods.stream().filter(e->e.getGoodsName().equals(orderStockGood.getGoodsName())).forEach(e->e.setGoodsCostPrice(orderStockGood.getThisCostPrice())); } orderSaleGoodsService.updateBatchById(orderSaleGoods); } this.updateById(dto); // 刪除原有商品 tOrderStockGoodsService.remove(Wrappers.lambdaQuery(TOrderStockGoods.class) .eq(TOrderStockGoods::getOrderId,dto.getId())); // 添加商品 orderStockGoods.forEach(orderSaleGoods1 -> { orderSaleGoods1.setId(null); orderSaleGoods1.setOrderId(dto.getId()); }); tOrderStockGoodsService.saveBatch(orderStockGoods); } } ruoyi-system/src/main/resources/mapper/system/TDataGeneratorMapper.xml
@@ -42,7 +42,7 @@ and ts.shopName like concat('%', #{query.shopName}, '%') </if> <if test="query.userName != null and query.userName != ''"> and tdg.shopName like concat('%', #{query.userName}, '%') and tdg.userName like concat('%', #{query.userName}, '%') </if> <if test="query.status != null"> and tdg.status = #{query.status} ruoyi-system/src/main/resources/mapper/system/TOrderSaleGoodsMapper.xml
@@ -22,7 +22,7 @@ id, orderId, goodsNum, goodsName, goodsCostPrice, goodsSalePrice, goodsCount, thisSalePrice, goodsPicture,typeId,goodsId </sql> <select id="costTotal" resultType="java.math.BigDecimal"> select sum(goodsCostPrice) from t_order_meal_goods select sum(goodsCostPrice) from t_order_sale_goods <where> <if test="ids != null and ids.size()>0"> AND orderId IN ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml
@@ -19,14 +19,15 @@ <result column="shopId" property="shopId" /> <result column="generatorId" property="generatorId" /> <result column="payType" property="payType" /> <result column="isCover" property="isCover" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> id, orderTime, remark, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,orderMoney,payMoney,shopId,generatorId,payType id, orderTime, remark, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,orderMoney,payMoney,shopId,generatorId,payType,isCover </sql> <select id="pageList" resultType="com.ruoyi.system.vo.TOrderSaleVO"> select id, orderTime, remark, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,orderMoney,payMoney,shopId,generatorId,payType select id, orderTime, remark, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,orderMoney,payMoney,shopId,generatorId,payType,isCover from t_order_sale <where> <if test="query.orderNum != null and query.orderNum != ''"> @@ -40,6 +41,9 @@ </if> <if test="query.shopId != null"> and shopId = #{query.shopId} </if> <if test="query.isCover != null"> and isCover = #{query.isCover} </if> <if test="query.generatorId != null"> and generatorId = #{query.generatorId} @@ -75,6 +79,7 @@ AND (createTime BETWEEN #{query.startTime} AND #{query.endTime}) </if> AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} AND isCover = 1 </where> </select> <select id="salesVolume" resultType="com.ruoyi.system.vo.SalesVolumeVO"> @@ -93,6 +98,7 @@ AND (orderTime BETWEEN #{query.startTime} AND #{query.endTime}) </if> AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} AND isCover = 1 </where> </select> <select id="exportOrderSale" resultType="com.ruoyi.system.vo.TOrderSaleVO"> @@ -115,6 +121,7 @@ AND (createTime BETWEEN #{query.startTime} AND #{query.endTime}) </if> AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} AND isCover = 1 </where> ORDER BY orderTime DESC </select> @@ -131,6 +138,7 @@ AND (createTime BETWEEN #{query.startTime} AND #{query.endTime}) </if> AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} AND isCover = 1 </where> </select> <select id="getDataGeneratorSaleDetail" resultType="java.util.Map"> ruoyi-system/src/main/resources/mapper/system/TOrderStockGoodsMapper.xml
@@ -12,13 +12,13 @@ <result column="salePrice" property="salePrice" /> <result column="goodsPicture" property="goodsPicture" /> <result column="stockCount" property="stockCount" /> <result column="thisSalePrice" property="thisSalePrice" /> <result column="thisCostPrice" property="thisCostPrice" /> <result column="goodsId" property="goodsId" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> id, orderId, goodsNum, goodsName, costPrice, salePrice, goodsPicture, stockCount,thisSalePrice,goodsId id, orderId, goodsNum, goodsName, costPrice, salePrice, goodsPicture, stockCount,thisCostPrice,goodsId </sql> </mapper> ruoyi-system/src/main/resources/mapper/system/TOrderStockMapper.xml
@@ -35,6 +35,9 @@ <if test="query.generatorId != null"> AND generatorId = #{query.generatorId} </if> <if test="query.isCover != null"> AND isCover = #{query.isCover} </if> <if test="query.endTime != null and query.startTime != null"> AND (stockTime BETWEEN #{query.startTime} and #{query.endTime}) </if>