24282 1 year ago
parent
commit
7bd480aa3e

+ 92 - 0
sd-business/src/main/java/com/sd/business/service/order/impl/OrderInfoServiceImpl.java

@@ -379,7 +379,99 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
     @Override
     public void edit(OrderInfoDto dto) {
+        // 订单为委外订单时,订单分类为委外订单
+        if (Objects.equals(dto.getType(), 2)) {
+            dto.setClassify(OrderClassifyEnum.OUTSOURCE_ORDER.getKey());
+        } else if (Objects.equals(dto.getType(), 1)) {
+            // 拥有采购角色的账号创建的自主订单为采购订单
+            Long userId = dto.getCreateUser();
+            Set<String> roleKeys = roleService.selectRolePermissionByUserId(userId);
+            if (!Collections.disjoint(roleKeys, Arrays.asList("sypurchasing", "purchasingOfficer", "bzpurchasing"))) {
+                dto.setClassify(OrderClassifyEnum.PURCHASE_ORDER.getKey());
+            }
+        }
+
+        // 更新订单
         updateById(dto);
+
+        // 更新订单产品
+        List<OrderSkuDto> orderSkuList = dto.getOrderSkuList();
+        List<OrderSku> tempOrderSkuList = orderSkuList.stream()
+                .peek(item -> item.setOrderId(dto.getId()))
+                .peek(item -> item.setStockPreparationStatus(StatusConstant.NO))
+                .map(item -> (OrderSku) item)
+                .collect(Collectors.toList());
+        orderSkuService.editLinked(tempOrderSkuList, OrderSku::getOrderId, dto.getId());
+
+        // 更新订单产品包材配件
+        List<OrderSkuBom> orderSkuBomList = orderSkuList.stream()
+                .flatMap(orderSku -> orderSku.getOrderSkuBomList().stream()
+                        .peek(orderSkuBom -> orderSkuBom.setOrderId(dto.getId()))
+                        .peek(orderSkuBom -> orderSkuBom.setOrderSkuId(orderSku.getId())))
+                .collect(Collectors.toList());
+        orderSkuBomService.editLinked(orderSkuBomList, OrderSkuBom::getOrderId, dto.getId());
+
+        // 新增订单产品生产成本
+        Map<Long, List<OrderSkuBom>> orderSkuBomMap = orderSkuBomList.stream().collect(Collectors.groupingBy(OrderSkuBom::getOrderSkuId));
+        List<OrderSkuProductionCost> orderSkuProductionCostList = tempOrderSkuList.stream().map(item -> {
+            OrderSkuProductionCost orderSkuProductionCost = new OrderSkuProductionCost();
+            orderSkuProductionCost.setOrderId(item.getOrderId());
+            orderSkuProductionCost.setOrderSkuId(item.getId());
+            // 材料成本
+            orderSkuProductionCost.setMaterialCost(item.getUnitPrice().multiply(item.getQuantity()));
+            // 辅料成本暂时没有默认为零
+            orderSkuProductionCost.setAuxiliaryMaterialCost(BigDecimal.ZERO);
+            // 产品包材成本
+            List<OrderSkuBom> bomList = orderSkuBomMap.get(item.getId());
+            if (bomList == null) {
+                bomList = new ArrayList<>();
+            }
+            BigDecimal productPackagingMaterialCost = bomList.stream()
+                    .map(orderSkuBom -> orderSkuBom.getQuantity()
+                            .multiply(orderSkuBom.getUnitPrice())
+                            .multiply(item.getQuantity()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            orderSkuProductionCost.setProductPackagingMaterialCost(productPackagingMaterialCost);
+            // 物流包材成本
+            orderSkuProductionCost.setLogisticsPackagingMaterialCost(item.getDeliveryMaterialsFee()
+                    .multiply(item.getQuantity()));
+            orderSkuProductionCost.setTotalAmount(
+                    orderSkuProductionCost.getMaterialCost()
+                            .add(orderSkuProductionCost.getAuxiliaryMaterialCost())
+                            .add(orderSkuProductionCost.getProductPackagingMaterialCost())
+                            .add(orderSkuProductionCost.getLogisticsPackagingMaterialCost()));
+            return orderSkuProductionCost;
+        }).collect(Collectors.toList());
+        orderSkuProductionCostService.editLinked(orderSkuProductionCostList, OrderSkuProductionCost::getOrderId, dto.getId());
+
+        // 是委外订单并且没有包材时,修改订单状态为生产中,并生成生产任务和工单
+        if (ObjectUtil.equals(dto.getStatus(), OrderStatusEnum.STOCK_PREPARATION.getKey())
+                && ObjectUtil.equals(dto.getType(), 2)
+                && ObjectUtil.isEmpty(orderSkuBomList)) {
+            dto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
+            // 生成工单
+            productionWorkOrderService.addByOrderId(dto.getId());
+            update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
+        }
+
+        // 更新订单产品包装信息
+        List<OrderPackageBomDto> tempOrderPackageBomList = dto.getOrderPackageBomList();
+        if (tempOrderPackageBomList == null) {
+            tempOrderPackageBomList = new ArrayList<>();
+        }
+        List<OrderPackageBom> orderPackageBomList = tempOrderPackageBomList.stream()
+                .peek(item -> item.setOrderId(dto.getId()))
+                .map(item -> (OrderPackageBom) item)
+                .collect(Collectors.toList());
+        orderPackageBomService.editLinked(orderPackageBomList, OrderPackageBom::getOrderId, dto.getId());
+
+        // 更新订单产品不干胶图稿
+        for (OrderSkuDto item : orderSkuList) {
+            ObsFileUtil.editFile(item.getSelfAdhesiveStickerFile(), item.getId());
+        }
+
+        // 更新订单附件
+        ObsFileUtil.editFile(dto.getFileList(), dto.getId());
     }
 
     @Override