From 508f3e225df87e0da974424981e7782fc5ce875c Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期一, 19 五月 2025 14:21:39 +0800
Subject: [PATCH] 修改

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java |  256 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 224 insertions(+), 32 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java
index 4aa239d..c51cb1b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java
@@ -3,23 +3,28 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.constant.OrderNumConstants;
 import com.ruoyi.common.utils.CodeGenerateUtils;
-import com.ruoyi.system.domain.TOrderSaleGoods;
-import com.ruoyi.system.domain.TOrderStock;
-import com.ruoyi.system.domain.TOrderStockGoods;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.*;
 import com.ruoyi.system.dto.TOrderSaleDTO;
 import com.ruoyi.system.dto.TOrderStockDTO;
-import com.ruoyi.system.mapper.TOrderStockMapper;
+import com.ruoyi.system.mapper.*;
+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;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -35,54 +40,186 @@
 
     @Autowired
     private TOrderStockGoodsService tOrderStockGoodsService;
+    @Autowired
+    private TOrderSaleMapper orderSaleMapper;
+    @Autowired
+    private TOrderSaleGoodsService orderSaleGoodsService;
+    @Autowired
+    private TStockDataSetService stockDataSetService;
+    @Autowired
+    private TDataGeneratorMapper dataGeneratorMapper;
+    @Autowired
+    private TGoodsService goodsService;
     @Override
     public void add(TOrderStockDTO dto) {
         // 进货单号
-        dto.setStockNum("JH" + CodeGenerateUtils.generateOrderSn());
+        dto.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn());
         List<TOrderStockGoods> orderStockGoods = dto.getOrderStockGoods();
-        BigDecimal sum = orderStockGoods.stream().map(TOrderStockGoods::getStockPrice).reduce(BigDecimal::add).get();
-        dto.setStockTotalPrice(sum);
+//        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 -> orderSaleGoods1.setOrderId(dto.getId()));
+        List<TGoods> goods = goodsService.list(Wrappers.lambdaQuery(TGoods.class).eq(TGoods::getShopId,dto.getShopId()));
+        List<TGoods> goodsUpdateList = new ArrayList<>();
+                // 添加商品
+        orderStockGoods.forEach(orderSaleGoods1 -> {
+            orderSaleGoods1.setId(null);
+            orderSaleGoods1.setOrderId(dto.getId());
+            for (TGoods good : goods) {
+                if(good.getGoodsNum().equals(orderSaleGoods1.getGoodsNum())){
+                    good.setInventory(orderSaleGoods1.getStockCount()+good.getInventory());
+                    goodsUpdateList.add(good);
+                }
+            }
+        });
+        goodsService.updateBatchById(goodsUpdateList);
         tOrderStockGoodsService.saveBatch(orderStockGoods);
     }
 
     @Override
     public void edit(TOrderStockDTO dto) {
         List<TOrderStockGoods> orderStockGoods = dto.getOrderStockGoods();
-        BigDecimal sum = orderStockGoods.stream().map(TOrderStockGoods::getStockPrice).reduce(BigDecimal::add).get();
-        dto.setStockTotalPrice(sum);
+//        BigDecimal sum = orderStockGoods.stream().map(TOrderStockGoods::getStockPrice).reduce(BigDecimal::add).get();
+//        dto.setStockTotalPrice(sum);
         this.updateById(dto);
         // 刪除原有商品
         tOrderStockGoodsService.remove(Wrappers.lambdaQuery(TOrderStockGoods.class)
                 .eq(TOrderStockGoods::getOrderId,dto.getId()));
         // 添加商品
-        orderStockGoods.forEach(orderSaleGoods1 -> orderSaleGoods1.setOrderId(dto.getId()));
+        orderStockGoods.forEach(orderSaleGoods1 -> {
+            orderSaleGoods1.setId(null);
+            orderSaleGoods1.setOrderId(dto.getId());
+        });
         tOrderStockGoodsService.saveBatch(orderStockGoods);
     }
 
     @Override
     public PageInfo<TOrderStockVO> pageList(TOrderStockQuery query) {
-
-        // 判断时间
-        if (query.getType() != null) {
-            if (query.getType() == 1) {
-                query.setStartTime(LocalDateTime.now());
-                query.setEndTime(LocalDateTime.now());
-            } else if (query.getType() == 2) {
-                query.setStartTime(LocalDateTime.now().minusDays(1));
-                query.setEndTime(LocalDateTime.now().minusDays(1));
-            } else if (query.getType() == 3) {
-                query.setStartTime(LocalDateTime.now().minusDays(7));
-                query.setEndTime(LocalDateTime.now());
-            }else {
-                query.setStartTime(LocalDateTime.now().minusDays(30));
-                query.setEndTime(LocalDateTime.now());
+        if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
+            // 判断时间
+            if(Objects.nonNull(query.getTimeType())){
+                LocalDateTime startTime = null;
+                LocalDateTime endTime = null;
+                switch (query.getTimeType()){
+                    case 1:
+                        // 今日
+                        startTime = DateUtils.getDayStart(LocalDateTime.now());
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                    case 2:
+                        // 昨日
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1));
+                        break;
+                    case 3:
+                        // 近7天
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                    case 4:
+                        // 近30天
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                }
+                query.setStartTime(DateUtils.localDateTimeToDate(startTime));
+                query.setEndTime(DateUtils.localDateTimeToDate(endTime));
             }
         }
         PageInfo<TOrderStockVO> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize());
         List<TOrderStockVO> list = this.baseMapper.pageList(query,pageInfo);
+        // 查询商品
+        List<Long> orderIds = list.stream().map(TOrderStockVO::getId).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(orderIds)){
+            List<TOrderStockGoods> orderStockGoods = tOrderStockGoodsService.list(Wrappers.lambdaQuery(TOrderStockGoods.class)
+                    .in(TOrderStockGoods::getOrderId, orderIds));
+            list.forEach(orderStockVO -> {
+                List<TOrderStockGoods> collect = orderStockGoods.stream().filter(orderSaleGoods -> orderSaleGoods.getOrderId().equals(orderStockVO.getId())).collect(Collectors.toList());
+                if(!CollectionUtils.isEmpty(collect)){
+                    orderStockVO.setOrderStockGoods(collect);
+                    int sum = collect.stream().mapToInt(TOrderStockGoods::getStockCount).sum();
+                    orderStockVO.setOrderStockCount(sum);
+                    BigDecimal money = BigDecimal.ZERO;
+                    for (TOrderStockGoods tOrderStockGoods : collect) {
+                        money = money.add(tOrderStockGoods.getThisCostPrice().multiply(new BigDecimal(tOrderStockGoods.getStockCount())));
+                    }
+                    orderStockVO.setTotalPrice(money);
+                }
+            });
+        }
+        pageInfo.setRecords(list);
+        return pageInfo;
+    }
+
+    @Override
+    public Map<String, Object> getDataGeneratorStockDetail(TDataGeneratorStockQuery query) {
+        if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
+            // 判断时间
+            if(Objects.nonNull(query.getTimeType())){
+                LocalDateTime startTime = null;
+                LocalDateTime endTime = null;
+                switch (query.getTimeType()){
+                    case 1:
+                        // 今日
+                        startTime = DateUtils.getDayStart(LocalDateTime.now());
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                    case 2:
+                        // 昨日
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1));
+                        break;
+                    case 3:
+                        // 近7天
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                    case 4:
+                        // 近30天
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                }
+                query.setStartTime(DateUtils.localDateTimeToDate(startTime));
+                query.setEndTime(DateUtils.localDateTimeToDate(endTime));
+            }
+        }
+        return this.baseMapper.getDataGeneratorStockDetail(query);
+    }
+
+    @Override
+    public List<TOrderStockVO> stockGeneratorExport(TDataGeneratorStockQuery query) {
+        if(Objects.nonNull(query.getTimeType())){
+            LocalDateTime startTime = null;
+            LocalDateTime endTime = null;
+            switch (query.getTimeType()){
+                case 1:
+                    // 今日
+                    startTime = DateUtils.getDayStart(LocalDateTime.now());
+                    endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                    break;
+                case 2:
+                    // 昨日
+                    startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1));
+                    endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1));
+                    break;
+                case 3:
+                    // 近7天
+                    startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7));
+                    endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                    break;
+                case 4:
+                    // 近30天
+                    startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30));
+                    endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                    break;
+            }
+            query.setStartTime(DateUtils.localDateTimeToDate(startTime));
+            query.setEndTime(DateUtils.localDateTimeToDate(endTime));
+        }
+        List<TOrderStockVO> list = this.baseMapper.stockGeneratorExport(query);
         // 查询商品
         List<Long> orderIds = list.stream().map(TOrderStockVO::getId).collect(Collectors.toList());
         List<TOrderStockGoods> orderStockGoods = tOrderStockGoodsService.list(Wrappers.lambdaQuery(TOrderStockGoods.class)
@@ -91,7 +228,62 @@
             List<TOrderStockGoods> collect = orderStockGoods.stream().filter(orderSaleGoods -> orderSaleGoods.getOrderId().equals(orderSale.getId())).collect(Collectors.toList());
             orderSale.setOrderStockGoods(collect);
         });
-        pageInfo.setRecords(list);
-        return pageInfo;
+        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);
+    }
+
+    @Override
+    public void deleteByShopId(Long shopId) {
+        this.baseMapper.deleteByShopId(shopId);
     }
 }

--
Gitblit v1.7.1