24282 преди 1 година
родител
ревизия
9b805bd95c

+ 2 - 2
sd-business/src/main/java/com/sd/business/controller/production/StockPreparationController.java

@@ -47,8 +47,8 @@ public class StockPreparationController {
      * 提交备料
      */
     @PostMapping("/submit")
-    public void submit(@Valid @NotEmpty(message = "订单skuId不能为空") @RequestBody List<Long> orderSkuIdList) {
-        stockPreparationService.submit(orderSkuIdList);
+    public void submit(@RequestBody StockPreparationDto dto) {
+        stockPreparationService.submit(dto);
     }
 
     /**

+ 10 - 0
sd-business/src/main/java/com/sd/business/entity/production/dto/StockPreparationDto.java

@@ -53,4 +53,14 @@ public class StockPreparationDto extends BaseSelectDto {
      */
     private String width;
 
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 申请人
+     */
+    private String applicant;
+
 }

+ 9 - 4
sd-business/src/main/java/com/sd/business/entity/production/vo/StockPreparationVo.java

@@ -15,6 +15,11 @@ public class StockPreparationVo {
     private Long orderId;
 
     /**
+     * 订单号
+     */
+    private String orderCode;
+
+    /**
      * sku规格id
      */
     private Long skuSpecId;
@@ -80,13 +85,13 @@ public class StockPreparationVo {
     private BigDecimal quantity;
 
     /**
-     * 订单号
+     * 万里牛订单号
      */
-    private String orderCode;
+    private String orderWlnCode;
 
     /**
-     * 万里牛订单号
+     * 打印类型
      */
-    private String orderWlnCode;
+    private Integer printType;
 
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/production/StockPreparationService.java

@@ -24,7 +24,7 @@ public interface StockPreparationService {
     /**
      * 提交备料
      */
-    void submit(List<Long> orderSkuIdList);
+    void submit(StockPreparationDto dto);
 
     /**
      * 获取包材列表

+ 62 - 70
sd-business/src/main/java/com/sd/business/service/production/impl/StockPreparationServiceImpl.java

@@ -5,11 +5,9 @@ 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;
@@ -168,51 +166,47 @@ public class StockPreparationServiceImpl implements StockPreparationService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public synchronized void submit(List<Long> orderSkuIdList) {
+    public synchronized void submit(StockPreparationDto dto) {
 
-        // 更爱状态为已备料
-        List<OrderSku> orderSkuList = orderSkuService.list(q -> q
-                .eq(OrderSku::getStockPreparationStatus, StatusConstant.NO)
-                .in(BaseIdPo::getId, orderSkuIdList));
+        Long outDepartmentId = dto.getOutDepartmentId();
+        Assert.notNull(outDepartmentId, "出库事业部id不能为空");
 
-        if (orderSkuList.size() == 0) {
+        List<StockPreparationVo> list = stockPreparationMapper.uncompletedList(getWrapper(dto));
+        if (list.size() == 0) {
             return;
         }
 
-        // 订单sku出库
         Date stockPreparationTime = new Date();
-        orderSkuList.forEach(item -> {
-            item.setStockPreparationTime(stockPreparationTime);
-            item.setStockPreparationStatus(StatusConstant.YES);
-        });
-        orderSkuService.updateBatchById(orderSkuList);
+        List<Long> orderIdList = list.stream().map(StockPreparationVo::getOrderId).distinct().collect(Collectors.toList());
+        List<Long> orderSkuIdList = list.stream().map(StockPreparationVo::getOrderSkuId).collect(Collectors.toList());
 
-        // 订单id列表
-        List<Long> orderIdList = orderSkuList.stream().map(OrderSku::getOrderId).distinct().collect(Collectors.toList());
+        // 订单状态改为生产中
+        orderService.update(q -> q
+                .in(BaseIdPo::getId, orderIdList)
+                .set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey())
+        );
+
+        // 订单sku出库
+        orderSkuService.update(q -> q
+                .in(BaseIdPo::getId, orderSkuIdList)
+                .set(OrderSku::getStockPreparationTime, stockPreparationTime)
+                .set(OrderSku::getStockPreparationStatus, StatusConstant.YES));
 
         // 订单出库
-        orderDelivery(orderIdList, orderSkuList);
+        orderDelivery(orderIdList, list, dto);
 
-        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) -> {
-            // 订单状态改为 生产中
-            addOrderInfo(orderId, orderInfoList);
-            // 添加 生产任务、工单
-            addTaskAndWorkOrder(orderId, itemOrderSkuList, productionTaskList, productionWorkOrderList);
-        });
+        Map<Long, List<StockPreparationVo>> map = list.stream().collect(Collectors.groupingBy(StockPreparationVo::getOrderId));
+        map.forEach((orderId, stockPreparationVoList) ->
+                addTaskAndWorkOrder(stockPreparationVoList, productionTaskList, productionWorkOrderList));
 
-        // 保存数据
-        if (orderInfoList.size() > 0) {
-            orderService.updateBatchById(orderInfoList);
-        }
         if (productionTaskList.size() > 0) {
             productionTaskService.saveBatch(productionTaskList);
         }
+
         if (productionWorkOrderList.size() > 0) {
             productionWorkOrderService.saveBatch(productionWorkOrderList);
         }
@@ -377,33 +371,28 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     }
 
     /**
-     * 订单状态改为 生产中
-     */
-    private void addOrderInfo(Long orderId, List<OrderInfo> orderInfoList) {
-        OrderInfo orderInfo = new OrderInfo();
-        orderInfo.setId(orderId);
-        orderInfo.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
-        orderInfoList.add(orderInfo);
-    }
-
-    /**
      * 添加 生产任务、工单
      */
-    private void addTaskAndWorkOrder(Long orderId,
-                                     List<OrderSku> orderSkuList,
+    private void addTaskAndWorkOrder(List<StockPreparationVo> stockPreparationVoList,
                                      List<ProductionTask> productionTaskList,
                                      List<ProductionWorkOrder> productionWorkOrderList) {
 
-        OrderInfo orderInfo = orderService.getById(orderId);
+        if (stockPreparationVoList.size() == 0) {
+            return;
+        }
+
+        Long orderId = stockPreparationVoList.get(0).getOrderId();
+        String orderCode = stockPreparationVoList.get(0).getOrderCode();
+
         Map<String, ProductionTask> skuSpecIdProductionTaskMap = new HashMap<>();
         int num = 1;
 
-        for (OrderSku orderSku : orderSkuList) {
+        for (StockPreparationVo preparationVo : stockPreparationVoList) {
 
-            Long skuSpecId = orderSku.getSkuSpecId();
-            Long bomSpecId = orderSku.getBomSpecId();
-            Integer printType = orderSku.getPrintType();
-            BigDecimal quantity = orderSku.getQuantity();
+            Long skuSpecId = preparationVo.getSkuSpecId();
+            Long bomSpecId = preparationVo.getBomSpecId();
+            Integer printType = preparationVo.getPrintType();
+            BigDecimal quantity = preparationVo.getQuantity();
 
             ProductionTask productionTask = skuSpecIdProductionTaskMap.computeIfAbsent(
                     skuSpecId + ":" + bomSpecId + ":" + printType,
@@ -413,7 +402,7 @@ public class StockPreparationServiceImpl implements StockPreparationService {
 
                         ProductionTask tempProductionTask = new ProductionTask();
                         tempProductionTask.setId(IdWorker.getId());
-                        tempProductionTask.setOrderId(orderSku.getOrderId());
+                        tempProductionTask.setOrderId(orderId);
                         tempProductionTask.setSkuSpecId(skuSpecId);
                         tempProductionTask.setBomSpecId(bomSpecId);
                         tempProductionTask.setCraftProductionLineId(sku.getCraftProductionLineId());
@@ -432,7 +421,7 @@ public class StockPreparationServiceImpl implements StockPreparationService {
             for (int i = 0; i < quantity.intValue(); i++) {
                 ProductionWorkOrder productionWorkOrder = new ProductionWorkOrder();
                 productionWorkOrder.setProductionTaskId(productionTask.getId());
-                productionWorkOrder.setCode(orderInfo.getCode() + String.format("-%05d", num));
+                productionWorkOrder.setCode(orderCode + String.format("-%05d", num));
                 productionWorkOrder.setStatus(0);
                 productionWorkOrderList.add(productionWorkOrder);
                 num++;
@@ -444,14 +433,14 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     /**
      * 订单出库
      */
-    private void orderDelivery(List<Long> orderIdList, List<OrderSku> orderSkuList) {
+    private void orderDelivery(List<Long> orderIdList, List<StockPreparationVo> stockPreparationVoList, StockPreparationDto dto) {
 
         List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderId, orderIdList));
 
         // 合并sku主材和包材
         List<InOutStorageBom> list = new ArrayList<>(
                 Stream.concat(
-                                orderSkuList.stream().map(item -> {
+                                stockPreparationVoList.stream().map(item -> {
                                     InOutStorageBom inOutStorageBom = new InOutStorageBom();
                                     inOutStorageBom.setBomSpecId(item.getBomSpecId());
                                     inOutStorageBom.setQuantity(item.getQuantity());
@@ -465,25 +454,18 @@ public class StockPreparationServiceImpl implements StockPreparationService {
                                 })
                         )
                         .collect(Collectors.toMap(
-                                        InOutStorageBom::getBomSpecId,
-                                        Function.identity(),
-                                        (v1, v2) -> {
-                                            v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
-                                            return v1;
-                                        }
-                                )
+                                InOutStorageBom::getBomSpecId,
+                                Function.identity(),
+                                (v1, v2) -> {
+                                    v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
+                                    return v1;
+                                })
                         ).values());
 
         List<Long> bomSpecIdList = list.stream().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 = list.stream().filter(item -> {
             BomSpecBo tempBomSpecBo = bomSpecBo.get(item.getBomSpecId());
             if (tempBomSpecBo == null) {
@@ -491,16 +473,18 @@ public class StockPreparationServiceImpl implements StockPreparationService {
             }
             return ObjectUtil.equal(tempBomSpecBo.getClassifyParentId(), 1L);
         }).collect(Collectors.toList());
+
+        InOutStorageDto semiFinishedProduct = new InOutStorageDto();
+        semiFinishedProduct.setType(InOutTypeEnum.OUT.getKey());
+        semiFinishedProduct.setDetailType(OutDetailTypeEnum.PRODUCTION.getKey());
+        semiFinishedProduct.setWarehouseId(WarehouseConstant.SEMI_FINISHED_PRODUCT);
+        semiFinishedProduct.setDepartmentId(dto.getOutDepartmentId());
+        semiFinishedProduct.setApplicant(dto.getApplicant());
+        semiFinishedProduct.setRemark(dto.getRemark());
         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 = list.stream().filter(item -> {
             BomSpecBo tempBomSpecBo = bomSpecBo.get(item.getBomSpecId());
             if (tempBomSpecBo == null) {
@@ -508,6 +492,14 @@ public class StockPreparationServiceImpl implements StockPreparationService {
             }
             return ObjectUtil.notEqual(tempBomSpecBo.getClassifyParentId(), 1L);
         }).collect(Collectors.toList());
+
+        InOutStorageDto packagingMaterial = new InOutStorageDto();
+        packagingMaterial.setType(InOutTypeEnum.OUT.getKey());
+        packagingMaterial.setDetailType(OutDetailTypeEnum.PRODUCTION.getKey());
+        packagingMaterial.setWarehouseId(WarehouseConstant.PACKAGING_MATERIAL);
+        packagingMaterial.setDepartmentId(dto.getOutDepartmentId());
+        packagingMaterial.setApplicant(dto.getApplicant());
+        packagingMaterial.setRemark(dto.getRemark());
         packagingMaterial.setInOutStorageBomList(packagingMaterialInOutStorageBomList);
         inOutStorageService.add(packagingMaterial);
 

+ 10 - 7
sd-business/src/main/resources/mapper/production/StockPreparationMapper.xml

@@ -3,14 +3,17 @@
 <mapper namespace="com.sd.business.mapper.production.StockPreparationMapper">
 
     <select id="uncompletedList" resultType="com.sd.business.entity.production.vo.StockPreparationVo">
-        select bs.id   bomSpecId,
-               bs.code bomSpecCode,
-               bs.name bomSpecName,
-               ss.id   skuSpecId,
-               ss.code skuSpecCode,
-               ss.name skuSpecName,
+        select bs.id         bomSpecId,
+               bs.code       bomSpecCode,
+               bs.name       bomSpecName,
+               ss.id         skuSpecId,
+               ss.code       skuSpecCode,
+               ss.name       skuSpecName,
                os.quantity,
-               os.id   orderSkuId
+               os.id         orderSkuId,
+               oi.id         orderId,
+               oi.code       orderCode,
+               os.print_type printType
         from order_info oi
                  inner join order_sku os on oi.id = os.order_id
                  inner join sku_spec ss on os.sku_spec_id = ss.id