xuhy
2024-09-21 88e1ae77be3fd4bb803fe68b3d04b2478edac550
修改接口
21个文件已修改
237 ■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataGeneratorController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderMealController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderSaleController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderStockController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/TimeRangeQueryBody.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderSale.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderStockGoods.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/TOrderStockDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TDataGeneratorMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleGoodsMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TOrderSaleQuery.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TOrderStockQuery.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderStockService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TDataGeneratorMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TOrderSaleGoodsMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TOrderStockGoodsMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TOrderStockMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>