Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java
24282 1 vuosi sitten
vanhempi
commit
b26fb901f4
18 muutettua tiedostoa jossa 294 lisäystä ja 136 poistoa
  1. 0 5
      sd-business/src/main/java/com/sd/business/entity/excel/po/ExcelGenerateLog.java
  2. 5 0
      sd-business/src/main/java/com/sd/business/entity/inventory/po/InventoryBackup.java
  3. 12 0
      sd-business/src/main/java/com/sd/business/entity/order/dto/OrderSkuProductionCostDto.java
  4. 57 0
      sd-business/src/main/java/com/sd/business/entity/order/po/OrderSkuProductionCost.java
  5. 12 0
      sd-business/src/main/java/com/sd/business/entity/order/vo/OrderSkuProductionCostVo.java
  6. 0 12
      sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionCostDto.java
  7. 2 3
      sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionExceedReceiveDto.java
  8. 0 37
      sd-business/src/main/java/com/sd/business/entity/production/po/ProductionCost.java
  9. 0 12
      sd-business/src/main/java/com/sd/business/entity/production/vo/ProductionCostVo.java
  10. 15 0
      sd-business/src/main/java/com/sd/business/mapper/order/OrderSkuProductionCostMapper.java
  11. 0 15
      sd-business/src/main/java/com/sd/business/mapper/production/ProductionCostMapper.java
  12. 15 0
      sd-business/src/main/java/com/sd/business/service/order/OrderSkuProductionCostService.java
  13. 115 0
      sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java
  14. 19 0
      sd-business/src/main/java/com/sd/business/service/order/impl/OrderSkuProductionCostServiceImpl.java
  15. 0 15
      sd-business/src/main/java/com/sd/business/service/production/ProductionCostService.java
  16. 0 19
      sd-business/src/main/java/com/sd/business/service/production/impl/ProductionCostServiceImpl.java
  17. 41 17
      sd-business/src/main/java/com/sd/business/service/production/impl/ProductionOrderServiceImpl.java
  18. 1 1
      sd-business/src/main/resources/mapper/lend/OrderSkuProductionCostMapper.xml

+ 0 - 5
sd-business/src/main/java/com/sd/business/entity/excel/po/ExcelGenerateLog.java

@@ -31,11 +31,6 @@ public class ExcelGenerateLog extends BasePo {
     private Integer status;
 
     /**
-     * 对账单订单分类 1-万里牛订单,2-采购订单,3-委外订单,4-售后订单,5-无理由订单
-     */
-    private Integer orderClassify;
-
-    /**
      * excel文件名称
      */
     private String excelName;

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/po/InventoryBackup.java

@@ -47,6 +47,11 @@ public class InventoryBackup extends BasePo {
     private BigDecimal quantity;
 
     /**
+     * 锁定库存
+     */
+    private BigDecimal lockQuantity;
+
+    /**
      * 事业部id
      */
     private Long departmentId;

+ 12 - 0
sd-business/src/main/java/com/sd/business/entity/order/dto/OrderSkuProductionCostDto.java

@@ -0,0 +1,12 @@
+package com.sd.business.entity.order.dto;
+
+import com.sd.business.entity.order.po.OrderSkuProductionCost;
+
+/**
+ * 订单sku生产成本新增编辑入参实体
+ *
+ * @author
+ * @since 2023-10-05
+ */
+public class OrderSkuProductionCostDto extends OrderSkuProductionCost {
+}

+ 57 - 0
sd-business/src/main/java/com/sd/business/entity/order/po/OrderSkuProductionCost.java

@@ -0,0 +1,57 @@
+package com.sd.business.entity.order.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 订单sku生产成本
+ * </p>
+ *
+ * @author
+ * @since 2023-10-05
+ */
+@Getter
+@Setter
+@TableName("order_sku_production_cost")
+public class OrderSkuProductionCost extends BasePo {
+
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+    /**
+     * 订单sku id
+     */
+    private Long orderSkuId;
+
+    /**
+     * 材料成本
+     */
+    private BigDecimal materialCost;
+
+    /**
+     * 辅料成本
+     */
+    private BigDecimal auxiliaryMaterialCost;
+
+    /**
+     * 产品包材成本
+     */
+    private BigDecimal productPackagingMaterialCost;
+
+    /**
+     * 物流包材成本
+     */
+    private BigDecimal logisticsPackagingMaterialCost;
+
+    /**
+     * 成本总金额
+     */
+    private BigDecimal totalAmount;
+}

+ 12 - 0
sd-business/src/main/java/com/sd/business/entity/order/vo/OrderSkuProductionCostVo.java

@@ -0,0 +1,12 @@
+package com.sd.business.entity.order.vo;
+
+import com.sd.business.entity.order.po.OrderSkuProductionCost;
+
+/**
+ * 订单sku生产成本查询返回值实体
+ *
+ * @author
+ * @since 2023-10-05
+ */
+public class OrderSkuProductionCostVo extends OrderSkuProductionCost {
+}

+ 0 - 12
sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionCostDto.java

@@ -1,12 +0,0 @@
-package com.sd.business.entity.production.dto;
-
-import com.sd.business.entity.production.po.ProductionCost;
-
-/**
- * 生产成本新增编辑入参实体
- *
- * @author
- * @since 2023-10-05
- */
-public class ProductionCostDto extends ProductionCost {
-}

+ 2 - 3
sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionExceedReceiveDto.java

@@ -1,9 +1,9 @@
 package com.sd.business.entity.production.dto;
 
+import com.sd.business.entity.order.dto.OrderSkuDto;
 import lombok.Getter;
 import lombok.Setter;
 
-import javax.validation.Valid;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.List;
@@ -26,7 +26,6 @@ public class ProductionExceedReceiveDto {
     /**
      * 订单sku超领明细
      */
-    @Valid
     @NotEmpty(message = "订单sku超领明细列表不能为空")
-    private List<ProductionCostDto> productionCostList;
+    private List<OrderSkuDto> productionCostList;
 }

+ 0 - 37
sd-business/src/main/java/com/sd/business/entity/production/po/ProductionCost.java

@@ -1,37 +0,0 @@
-package com.sd.business.entity.production.po;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.ruoyi.common.core.domain.BasePo;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.math.BigDecimal;
-
-/**
- * <p>
- * 生产任务
- * </p>
- *
- * @author
- * @since 2023-10-05
- */
-@Getter
-@Setter
-@TableName("production_cost")
-public class ProductionCost extends BasePo {
-
-    /**
-     * 订单id
-     */
-    private Long orderId;
-
-    /**
-     * bom规格id
-     */
-    private Long bomSpecId;
-
-    /**
-     * 数量
-     */
-    private BigDecimal quantity;
-}

+ 0 - 12
sd-business/src/main/java/com/sd/business/entity/production/vo/ProductionCostVo.java

@@ -1,12 +0,0 @@
-package com.sd.business.entity.production.vo;
-
-import com.sd.business.entity.production.po.ProductionCost;
-
-/**
- * 生产成本查询返回值实体
- *
- * @author
- * @since 2023-10-05
- */
-public class ProductionCostVo extends ProductionCost {
-}

+ 15 - 0
sd-business/src/main/java/com/sd/business/mapper/order/OrderSkuProductionCostMapper.java

@@ -0,0 +1,15 @@
+package com.sd.business.mapper.order;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sd.business.entity.order.po.OrderSkuProductionCost;
+
+/**
+ * <p>
+ * 订单sku生产成本 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-10-05
+ */
+public interface OrderSkuProductionCostMapper extends BaseMapper<OrderSkuProductionCost> {
+}

+ 0 - 15
sd-business/src/main/java/com/sd/business/mapper/production/ProductionCostMapper.java

@@ -1,15 +0,0 @@
-package com.sd.business.mapper.production;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.sd.business.entity.production.po.ProductionCost;
-
-/**
- * <p>
- * 生产成本 Mapper 接口
- * </p>
- *
- * @author
- * @since 2023-10-05
- */
-public interface ProductionCostMapper extends BaseMapper<ProductionCost> {
-}

+ 15 - 0
sd-business/src/main/java/com/sd/business/service/order/OrderSkuProductionCostService.java

@@ -0,0 +1,15 @@
+package com.sd.business.service.order;
+
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.order.po.OrderSkuProductionCost;
+
+/**
+ * <p>
+ * 订单sku生产成本 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-10-05
+ */
+public interface OrderSkuProductionCostService extends BaseService<OrderSkuProductionCost> {
+}

+ 115 - 0
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -124,6 +124,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     private ISysRoleService roleService;
 
     @Autowired
+    private OrderSkuProductionCostService orderSkuProductionCostService;
+
+    @Autowired
     private InventoryFinishedService inventoryFinishedService;
 
     @Override
@@ -310,6 +313,36 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                 .collect(Collectors.toList());
         orderSkuBomService.saveBatch(orderSkuBomList);
 
+        // 新增订单产品生产成本
+        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());
+            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.saveBatch(orderSkuProductionCostList);
+
         // 是委外订单并且没有包材时,修改订单状态为生产中,并生成生产任务和工单
         if (ObjectUtil.notEqual(orderDto.getStatus(), OrderStatusEnum.DRAFT.getKey())
                 && ObjectUtil.equal(orderDto.getFlowStatus(), FlowStatusEnum.PASS.getKey())
@@ -383,6 +416,36 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                 .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());
+            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)
@@ -469,6 +532,56 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                 .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());
+            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());
+            // 生成生产任务和工单
+            productionTaskService.addTaskAndWorkOrder(dto.getId());
+            this.update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
+        }
+
+        // 更新订单产品包装信息
+        if (ObjectUtil.isNotEmpty(dto.getOrderPackageBomList())) {
+            List<OrderPackageBomDto> tempOrderPackageBomList = dto.getOrderPackageBomList();
+            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.saveFile(item.getSelfAdhesiveStickerFile(), item.getId());
@@ -897,6 +1010,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         orderSkuService.remove(q -> q.eq(OrderSku::getOrderId, id));
         orderSkuBomService.remove(q -> q.eq(OrderSkuBom::getOrderId, id));
         orderPackageBomService.remove(q -> q.eq(OrderPackageBom::getOrderId, id));
+        orderSkuProductionCostService.remove(q -> q.eq(OrderSkuProductionCost::getOrderId, id));
+
         ObsFileUtil.removeFile(id);
     }
 

+ 19 - 0
sd-business/src/main/java/com/sd/business/service/order/impl/OrderSkuProductionCostServiceImpl.java

@@ -0,0 +1,19 @@
+package com.sd.business.service.order.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sd.business.entity.order.po.OrderSkuProductionCost;
+import com.sd.business.mapper.order.OrderSkuProductionCostMapper;
+import com.sd.business.service.order.OrderSkuProductionCostService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 订单sku生产成本 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-10-05
+ */
+@Service
+public class OrderSkuProductionCostServiceImpl extends ServiceImpl<OrderSkuProductionCostMapper, OrderSkuProductionCost> implements OrderSkuProductionCostService {
+}

+ 0 - 15
sd-business/src/main/java/com/sd/business/service/production/ProductionCostService.java

@@ -1,15 +0,0 @@
-package com.sd.business.service.production;
-
-import com.ruoyi.common.core.service.BaseService;
-import com.sd.business.entity.production.po.ProductionCost;
-
-/**
- * <p>
- * 生产成本 服务类
- * </p>
- *
- * @author
- * @since 2023-10-05
- */
-public interface ProductionCostService extends BaseService<ProductionCost> {
-}

+ 0 - 19
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionCostServiceImpl.java

@@ -1,19 +0,0 @@
-package com.sd.business.service.production.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.sd.business.entity.production.po.ProductionCost;
-import com.sd.business.mapper.production.ProductionCostMapper;
-import com.sd.business.service.production.ProductionCostService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 生产成本 服务实现类
- * </p>
- *
- * @author
- * @since 2023-10-05
- */
-@Service
-public class ProductionCostServiceImpl extends ServiceImpl<ProductionCostMapper, ProductionCost> implements ProductionCostService {
-}

+ 41 - 17
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionOrderServiceImpl.java

@@ -1,6 +1,8 @@
 package com.sd.business.service.production.impl;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.constant.StatusConstant;
 import com.ruoyi.common.core.domain.BaseIdPo;
@@ -9,18 +11,20 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.in.dto.InOutStorageDto;
 import com.sd.business.entity.in.emums.InDetailTypeEnum;
 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.dto.OrderSkuDto;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderPackageBom;
 import com.sd.business.entity.order.po.OrderSku;
 import com.sd.business.entity.production.dto.*;
-import com.sd.business.entity.production.po.ProductionCost;
+import com.sd.business.entity.order.po.OrderSkuProductionCost;
 import com.sd.business.entity.production.po.ProductionTask;
 import com.sd.business.entity.production.vo.ProductionOrderDetailVo;
 import com.sd.business.entity.production.vo.ProductionOrderScheduleVo;
@@ -35,7 +39,7 @@ import com.sd.business.service.inventory.InventoryService;
 import com.sd.business.service.order.OrderPackageBomService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuService;
-import com.sd.business.service.production.ProductionCostService;
+import com.sd.business.service.order.OrderSkuProductionCostService;
 import com.sd.business.service.production.ProductionOrderService;
 import com.sd.business.service.production.ProductionTaskService;
 import com.sd.business.service.sku.SkuService;
@@ -88,7 +92,7 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
     private InOutStorageService inOutStorageService;
 
     @Autowired
-    private ProductionCostService productionCostService;
+    private OrderSkuProductionCostService orderSkuProductionCostService;
 
     @Autowired
     private InventoryFinishedService inventoryFinishedService;
@@ -213,13 +217,17 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
         if (!Objects.equals(orderInfo.getStatus(), OrderStatusEnum.IN_PRODUCTION.getKey())) {
             throw new ServiceException("操作失败,请选择生产中的订单");
         }
-        List<ProductionCostDto> productionCostList = dto.getProductionCostList();
-        Map<Long, BigDecimal> map = productionCostList.stream()
+        List<OrderSkuDto> productionCostList = dto.getProductionCostList();
+        List<OrderSkuDto> exceedReceiveSkuList = productionCostList.stream()
                 .filter(item -> item.getQuantity() != null
                         && item.getQuantity().compareTo(BigDecimal.ZERO) > 0)
-                .collect(Collectors.toMap(
-                        ProductionCostDto::getBomSpecId,
-                        ProductionCostDto::getQuantity,
+                .collect(Collectors.toList());
+        if (exceedReceiveSkuList.isEmpty()) {
+            throw new ServiceException("操作失败,订单sku超领明细列表不能为空");
+        }
+        Map<Long, BigDecimal> map = exceedReceiveSkuList.stream().collect(Collectors.toMap(
+                        OrderSkuDto::getBomSpecId,
+                        OrderSkuDto::getQuantity,
                         BigDecimal::add
                 ));
         boolean result = inventoryService.lockStorage(map, WarehouseConstant.SEMI_FINISHED_PRODUCT);
@@ -240,7 +248,9 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
         lockPurchaseDefective.setWarehouseId(WarehouseConstant.SEMI_FINISHED_PRODUCT);
         lockPurchaseDefective.setDepartmentId(DepartmentConstant.SD_SPORTS);
         lockPurchaseDefective.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
-        lockPurchaseDefective.setRemark("订单超领出库");
+        lockPurchaseDefective.setRemark("订单:" + orderInfo.getCode()
+                + (StrUtil.isBlank(orderInfo.getWlnCode()) ? StringPool.EMPTY : "(" + orderInfo.getWlnCode() + ")")
+                + "超领出库");
         lockPurchaseDefective.setLockStorage(StatusConstant.YES);
         lockPurchaseDefective.setInOutStorageBomList(JSON.parseArray(JSON.toJSONString(inOutStorageBomList), InOutStorageBom.class));
         inOutStorageService.add(lockPurchaseDefective);
@@ -256,17 +266,31 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
         }
         inStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
         inStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
-        inStorageDto.setRemark("订单超领报废入库");
+        inStorageDto.setRemark("订单:" + orderInfo.getCode()
+                + (StrUtil.isBlank(orderInfo.getWlnCode()) ? StringPool.EMPTY : "(" + orderInfo.getWlnCode() + ")")
+                +"超领报废入库");
         inStorageDto.setInOutStorageBomList(inOutStorageBomList);
         inOutStorageService.add(inStorageDto);
-        // 人为损坏, 新增生产成本表
+        // 人为损坏, 新增订单生产成本的材料成本
         if (Objects.equals(dto.getExceedReceiveReason(), 1)) {
-            List<ProductionCost> tempProductionCostList = productionCostList.stream()
-                    .filter(item -> item.getQuantity() != null
-                            && item.getQuantity().compareTo(BigDecimal.ZERO) > 0)
-                    .map(item -> (ProductionCost) item)
-                    .collect(Collectors.toList());
-            productionCostService.saveBatch(tempProductionCostList);
+            List<Long> bomSpecIds = exceedReceiveSkuList.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
+            List<Long> orderSkuIds = exceedReceiveSkuList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+            Map<Long, BomSpec> bomSpecMap = bomSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, bomSpecIds));
+            Map<Long, OrderSkuProductionCost> orderSkuProductionCostMap = orderSkuProductionCostService.mapKEntity(
+                    OrderSkuProductionCost::getOrderSkuId,
+                    q -> q.eq(OrderSkuProductionCost::getOrderId, orderId)
+                    .in(OrderSkuProductionCost::getOrderSkuId, orderSkuIds)
+                );
+            for (OrderSkuDto orderSkuDto : exceedReceiveSkuList) {
+                BomSpec bomSpec = bomSpecMap.get(orderSkuDto.getBomSpecId());
+                OrderSkuProductionCost orderSkuProductionCost = orderSkuProductionCostMap.get(orderSkuDto.getId());
+                // 计算当前sku超领的材料成本
+                BigDecimal materialCost = orderSkuDto.getQuantity().multiply(bomSpec.getInternalSellingPrice());
+
+                orderSkuProductionCost.setMaterialCost(orderSkuProductionCost.getMaterialCost().add(materialCost));
+            }
+            // 更新订单生产成本的材料成本
+            orderSkuProductionCostService.updateBatchById(new ArrayList<>(orderSkuProductionCostMap.values()));
         }
     }
 

+ 1 - 1
sd-business/src/main/resources/mapper/production/ProductionCostMapper.xml → sd-business/src/main/resources/mapper/lend/OrderSkuProductionCostMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.sd.business.mapper.production.ProductionCostMapper">
+<mapper namespace="com.sd.business.mapper.order.OrderSkuProductionCostMapper">
 
 </mapper>