Răsfoiți Sursa

备料提交

24282 1 an în urmă
părinte
comite
8f620dd8d4

+ 10 - 0
sd-business/src/main/java/com/sd/business/entity/department/constant/DepartmentConstant.java

@@ -0,0 +1,10 @@
+package com.sd.business.entity.department.constant;
+
+public interface DepartmentConstant {
+
+    /**
+     * 胜德体育
+     */
+    Long SD_SPORTS = 0L;
+
+}

+ 18 - 0
sd-business/src/main/java/com/sd/business/entity/warehouse/constant/WarehouseConstant.java

@@ -0,0 +1,18 @@
+package com.sd.business.entity.warehouse.constant;
+
+/**
+ * 仓库id
+ */
+public interface WarehouseConstant {
+
+    /**
+     * 半成品仓
+     */
+    Long SEMI_FINISHED_PRODUCT = 1684037244354052098L;
+
+    /**
+     * 包材仓
+     */
+    Long PACKAGING_MATERIAL = 1684037201379213314L;
+
+}

+ 1 - 1
sd-business/src/main/java/com/sd/business/mapper/sku/SkuSpecMapper.java

@@ -30,6 +30,6 @@ public interface SkuSpecMapper extends BaseMapper<SkuSpec> {
     /**
      * 根据sku规格id获取bomId和bom规格id
      */
-    List<BomSpecBo> getBomBoList(@Param("ew") QueryWrapper<Object> in);
+    List<BomSpecBo> getBomSpecBoList(@Param("ew") QueryWrapper<Object> in);
 
 }

+ 95 - 26
sd-business/src/main/java/com/sd/business/service/production/impl/StockPreparationServiceImpl.java

@@ -1,23 +1,35 @@
 package com.sd.business.service.production.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.constant.StatusConstant;
 import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.bom.po.BomSpec;
+import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.department.po.Department;
+import com.sd.business.entity.in.dto.InOutStorageDto;
+import com.sd.business.entity.in.emums.InOutTypeEnum;
+import com.sd.business.entity.in.emums.OutDetailTypeEnum;
+import com.sd.business.entity.in.po.InOutStorageBom;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.entity.order.po.OrderSkuBom;
 import com.sd.business.entity.production.dto.StockPreparationDto;
 import com.sd.business.entity.production.po.ProductionTask;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
 import com.sd.business.entity.production.vo.StockPreparationVo;
 import com.sd.business.entity.sku.po.Sku;
 import com.sd.business.entity.sku.po.SkuSpec;
+import com.sd.business.entity.warehouse.constant.WarehouseConstant;
 import com.sd.business.mapper.production.StockPreparationMapper;
+import com.sd.business.service.in.InOutStorageService;
 import com.sd.business.service.order.OrderService;
+import com.sd.business.service.order.OrderSkuBomService;
 import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.production.ProductionTaskService;
 import com.sd.business.service.production.ProductionWorkOrderService;
@@ -32,6 +44,7 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class StockPreparationServiceImpl implements StockPreparationService {
@@ -40,10 +53,13 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     private StockPreparationMapper stockPreparationMapper;
 
     @Autowired
+    private OrderService orderService;
+
+    @Autowired
     private OrderSkuService orderSkuService;
 
     @Autowired
-    private OrderService orderService;
+    private OrderSkuBomService orderSkuBomService;
 
     @Autowired
     private ProductionTaskService productionTaskService;
@@ -52,10 +68,13 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     private ProductionWorkOrderService productionWorkOrderService;
 
     @Autowired
+    private SkuService skuService;
+
+    @Autowired
     private SkuSpecService skuSpecService;
 
     @Autowired
-    private SkuService skuService;
+    private InOutStorageService inOutStorageService;
 
     @Override
     public List<StockPreparationVo> uncompletedList(StockPreparationDto dto) {
@@ -80,7 +99,6 @@ public class StockPreparationServiceImpl implements StockPreparationService {
 
         // 更爱状态为已备料
         List<OrderSku> orderSkuList = orderSkuService.list(q -> q
-                .select(BaseIdPo::getId, OrderSku::getStockPreparationStatus, OrderSku::getOrderId)
                 .eq(OrderSku::getStockPreparationStatus, StatusConstant.NO)
                 .in(BaseIdPo::getId, orderSkuIdList));
 
@@ -88,45 +106,34 @@ public class StockPreparationServiceImpl implements StockPreparationService {
             return;
         }
 
+        // 订单sku出库
         Date stockPreparationTime = new Date();
-        for (OrderSku orderSku : orderSkuList) {
-            orderSku.setStockPreparationTime(stockPreparationTime);
-            orderSku.setStockPreparationStatus(StatusConstant.YES);
-        }
+        orderSkuList.forEach(item -> {
+            item.setStockPreparationTime(stockPreparationTime);
+            item.setStockPreparationStatus(StatusConstant.YES);
+        });
         orderSkuService.updateBatchById(orderSkuList);
 
+        // 订单id列表
         List<Long> orderIdList = orderSkuList.stream().map(OrderSku::getOrderId).distinct().collect(Collectors.toList());
-        List<OrderSku> list = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIdList));
-        Map<Long, List<OrderSku>> map = list.stream().collect(Collectors.groupingBy(OrderSku::getOrderId));
+
+        // 订单出库
+        orderDelivery(orderIdList, orderSkuList);
 
         List<OrderInfo> orderInfoList = new ArrayList<>();
         List<ProductionTask> productionTaskList = new ArrayList<>();
         List<ProductionWorkOrder> productionWorkOrderList = new ArrayList<>();
 
+        // 生产任务、生产工单
+        Map<Long, List<OrderSku>> map = orderSkuList.stream().collect(Collectors.groupingBy(OrderSku::getOrderId));
         map.forEach((orderId, itemOrderSkuList) -> {
-
-            // 订单中未备料数量
-            long count = itemOrderSkuList.stream()
-                    .map(OrderSku::getStockPreparationStatus)
-                    .filter(StatusConstant.NO::equals)
-                    .count();
-
-            // 存在未备料的订单sku,不执行以下逻辑
-            if (count > 0) {
-                return;
-            }
-
             // 订单状态改为 生产中
             addOrderInfo(orderId, orderInfoList);
-
             // 添加 生产任务、工单
             addTaskAndWorkOrder(orderId, itemOrderSkuList, productionTaskList, productionWorkOrderList);
-
-            // 出库
-
-
         });
 
+        // 保存数据
         if (orderInfoList.size() > 0) {
             orderService.updateBatchById(orderInfoList);
         }
@@ -223,4 +230,66 @@ public class StockPreparationServiceImpl implements StockPreparationService {
         }
     }
 
+    /**
+     * 订单出库
+     */
+    private void orderDelivery(List<Long> orderIdList, List<OrderSku> orderSkuList) {
+
+        List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderId, orderIdList));
+
+        Stream<InOutStorageBom> streamList = Stream.concat(
+                orderSkuList.stream().map(item -> {
+                    InOutStorageBom inOutStorageBom = new InOutStorageBom();
+                    inOutStorageBom.setBomSpecId(item.getBomSpecId());
+                    inOutStorageBom.setQuantity(item.getQuantity());
+                    return inOutStorageBom;
+                }),
+                orderSkuBomList.stream().map(item -> {
+                    InOutStorageBom inOutStorageBom = new InOutStorageBom();
+                    inOutStorageBom.setBomSpecId(item.getBomSpecId());
+                    inOutStorageBom.setQuantity(item.getQuantity());
+                    return inOutStorageBom;
+                })
+        );
+
+        List<Long> bomSpecIdList = streamList.map(InOutStorageBom::getBomSpecId).collect(Collectors.toList());
+        Map<Long, BomSpecBo> bomSpecBo = skuSpecService.getBomSpecBoByIdList(bomSpecIdList);
+
+
+        // 主材从半成品仓出库
+        InOutStorageDto semiFinishedProduct = new InOutStorageDto();
+        semiFinishedProduct.setType(InOutTypeEnum.OUT.getKey());
+        semiFinishedProduct.setDetailType(OutDetailTypeEnum.PRODUCTION.getKey());
+        semiFinishedProduct.setWarehouseId(WarehouseConstant.SEMI_FINISHED_PRODUCT);
+        semiFinishedProduct.setDepartmentId(DepartmentConstant.SD_SPORTS);
+        semiFinishedProduct.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
+        List<InOutStorageBom> semiFinishedProductInOutStorageBomList = streamList.filter(item -> {
+            BomSpecBo tempBomSpecBo = bomSpecBo.get(item.getBomSpecId());
+            if (tempBomSpecBo == null) {
+                return false;
+            }
+            return ObjectUtil.equal(tempBomSpecBo.getClassifyParentId(), 1L);
+        }).collect(Collectors.toList());
+        semiFinishedProduct.setInOutStorageBomList(semiFinishedProductInOutStorageBomList);
+        inOutStorageService.add(semiFinishedProduct);
+
+        // 包材从包材仓出库
+        InOutStorageDto packagingMaterial = new InOutStorageDto();
+        packagingMaterial.setType(InOutTypeEnum.OUT.getKey());
+        packagingMaterial.setDetailType(OutDetailTypeEnum.PRODUCTION.getKey());
+        packagingMaterial.setWarehouseId(WarehouseConstant.PACKAGING_MATERIAL);
+        packagingMaterial.setDepartmentId(DepartmentConstant.SD_SPORTS);
+        packagingMaterial.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
+        List<InOutStorageBom> packagingMaterialInOutStorageBomList = streamList.filter(item -> {
+            BomSpecBo tempBomSpecBo = bomSpecBo.get(item.getBomSpecId());
+            if (tempBomSpecBo == null) {
+                return true;
+            }
+            return ObjectUtil.notEqual(tempBomSpecBo.getClassifyParentId(), 1L);
+        }).collect(Collectors.toList());
+        packagingMaterial.setInOutStorageBomList(packagingMaterialInOutStorageBomList);
+        inOutStorageService.add(packagingMaterial);
+
+    }
+
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/sku/SkuSpecService.java

@@ -50,6 +50,6 @@ public interface SkuSpecService extends BaseService<SkuSpec> {
     /**
      * 根据sku规格id获取bomId和bom规格id
      */
-    Map<Long, BomSpecBo> getBomBoByIdList(List<Long> bomSpecIdList);
+    Map<Long, BomSpecBo> getBomSpecBoByIdList(List<Long> bomSpecIdList);
 
 }

+ 2 - 2
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecServiceImpl.java

@@ -64,7 +64,7 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
     }
 
     @Override
-    public Map<Long, BomSpecBo> getBomBoByIdList(List<Long> bomSpecIdList) {
+    public Map<Long, BomSpecBo> getBomSpecBoByIdList(List<Long> bomSpecIdList) {
 
         if (ObjectUtil.isEmpty(bomSpecIdList)) {
             return Collections.emptyMap();
@@ -76,7 +76,7 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
             return Collections.emptyMap();
         }
 
-        List<BomSpecBo> list = baseMapper.getBomBoList(Wrappers.query().in("bs.id", bomSpecIdList));
+        List<BomSpecBo> list = baseMapper.getBomSpecBoList(Wrappers.query().in("bs.id", bomSpecIdList));
 
         return list.stream().collect(Collectors.toMap(BomSpecBo::getBomSpecId, Function.identity()));
     }

+ 1 - 1
sd-business/src/main/resources/mapper/sku/SkuSpecMapper.xml

@@ -24,7 +24,7 @@
             ${ew.customSqlSegment}
     </select>
 
-    <select id="getBomBoList" resultType="com.sd.business.entity.bom.bo.BomSpecBo">
+    <select id="getBomSpecBoList" resultType="com.sd.business.entity.bom.bo.BomSpecBo">
         SELECT bs.id                                     bomSpecId,
                ifnull(bs.cost_price, '0.00')             costPrice,
                ifnull(bs.internal_selling_price, '0.00') internalSellingPrice,

+ 1 - 1
sd-wln/src/main/java/com/sd/wln/context/OrderContext.java

@@ -265,7 +265,7 @@ public class OrderContext {
                                     item.getOrDefault(2, Collections.emptyList()).stream()
                             )).map(SkuSpecLink::getBomSpecId))
                     .distinct().collect(Collectors.toList());
-            bomSpecBoMap = skuSpecService.getBomBoByIdList(bomSpecIdList);
+            bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIdList);
         }
         return bomSpecBoMap;
     }