|
@@ -1,6 +1,8 @@
|
|
package com.sd.business.service.production.impl;
|
|
package com.sd.business.service.production.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
import com.alibaba.fastjson2.JSON;
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.ruoyi.common.constant.StatusConstant;
|
|
import com.ruoyi.common.constant.StatusConstant;
|
|
import com.ruoyi.common.core.domain.BaseIdPo;
|
|
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.exception.ServiceException;
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
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.department.constant.DepartmentConstant;
|
|
import com.sd.business.entity.in.dto.InOutStorageDto;
|
|
import com.sd.business.entity.in.dto.InOutStorageDto;
|
|
import com.sd.business.entity.in.emums.InDetailTypeEnum;
|
|
import com.sd.business.entity.in.emums.InDetailTypeEnum;
|
|
import com.sd.business.entity.in.emums.InOutTypeEnum;
|
|
import com.sd.business.entity.in.emums.InOutTypeEnum;
|
|
import com.sd.business.entity.in.emums.OutDetailTypeEnum;
|
|
import com.sd.business.entity.in.emums.OutDetailTypeEnum;
|
|
import com.sd.business.entity.in.po.InOutStorageBom;
|
|
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.enums.OrderStatusEnum;
|
|
import com.sd.business.entity.order.po.OrderInfo;
|
|
import com.sd.business.entity.order.po.OrderInfo;
|
|
import com.sd.business.entity.order.po.OrderPackageBom;
|
|
import com.sd.business.entity.order.po.OrderPackageBom;
|
|
import com.sd.business.entity.order.po.OrderSku;
|
|
import com.sd.business.entity.order.po.OrderSku;
|
|
import com.sd.business.entity.production.dto.*;
|
|
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.po.ProductionTask;
|
|
import com.sd.business.entity.production.vo.ProductionOrderDetailVo;
|
|
import com.sd.business.entity.production.vo.ProductionOrderDetailVo;
|
|
import com.sd.business.entity.production.vo.ProductionOrderScheduleVo;
|
|
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.OrderPackageBomService;
|
|
import com.sd.business.service.order.OrderService;
|
|
import com.sd.business.service.order.OrderService;
|
|
import com.sd.business.service.order.OrderSkuService;
|
|
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.ProductionOrderService;
|
|
import com.sd.business.service.production.ProductionTaskService;
|
|
import com.sd.business.service.production.ProductionTaskService;
|
|
import com.sd.business.service.sku.SkuService;
|
|
import com.sd.business.service.sku.SkuService;
|
|
@@ -88,7 +92,7 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
|
|
private InOutStorageService inOutStorageService;
|
|
private InOutStorageService inOutStorageService;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
- private ProductionCostService productionCostService;
|
|
|
|
|
|
+ private OrderSkuProductionCostService orderSkuProductionCostService;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private InventoryFinishedService inventoryFinishedService;
|
|
private InventoryFinishedService inventoryFinishedService;
|
|
@@ -213,13 +217,17 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
|
|
if (!Objects.equals(orderInfo.getStatus(), OrderStatusEnum.IN_PRODUCTION.getKey())) {
|
|
if (!Objects.equals(orderInfo.getStatus(), OrderStatusEnum.IN_PRODUCTION.getKey())) {
|
|
throw new ServiceException("操作失败,请选择生产中的订单");
|
|
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
|
|
.filter(item -> item.getQuantity() != null
|
|
&& item.getQuantity().compareTo(BigDecimal.ZERO) > 0)
|
|
&& 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
|
|
BigDecimal::add
|
|
));
|
|
));
|
|
boolean result = inventoryService.lockStorage(map, WarehouseConstant.SEMI_FINISHED_PRODUCT);
|
|
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.setWarehouseId(WarehouseConstant.SEMI_FINISHED_PRODUCT);
|
|
lockPurchaseDefective.setDepartmentId(DepartmentConstant.SD_SPORTS);
|
|
lockPurchaseDefective.setDepartmentId(DepartmentConstant.SD_SPORTS);
|
|
lockPurchaseDefective.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
|
|
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.setLockStorage(StatusConstant.YES);
|
|
lockPurchaseDefective.setInOutStorageBomList(JSON.parseArray(JSON.toJSONString(inOutStorageBomList), InOutStorageBom.class));
|
|
lockPurchaseDefective.setInOutStorageBomList(JSON.parseArray(JSON.toJSONString(inOutStorageBomList), InOutStorageBom.class));
|
|
inOutStorageService.add(lockPurchaseDefective);
|
|
inOutStorageService.add(lockPurchaseDefective);
|
|
@@ -256,17 +266,31 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
|
|
}
|
|
}
|
|
inStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
|
|
inStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
|
|
inStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
|
|
inStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
|
|
- inStorageDto.setRemark("订单超领报废入库");
|
|
|
|
|
|
+ inStorageDto.setRemark("订单:" + orderInfo.getCode()
|
|
|
|
+ + (StrUtil.isBlank(orderInfo.getWlnCode()) ? StringPool.EMPTY : "(" + orderInfo.getWlnCode() + ")")
|
|
|
|
+ +"超领报废入库");
|
|
inStorageDto.setInOutStorageBomList(inOutStorageBomList);
|
|
inStorageDto.setInOutStorageBomList(inOutStorageBomList);
|
|
inOutStorageService.add(inStorageDto);
|
|
inOutStorageService.add(inStorageDto);
|
|
- // 人为损坏, 新增生产成本表
|
|
|
|
|
|
+ // 人为损坏, 新增订单生产成本的材料成本
|
|
if (Objects.equals(dto.getExceedReceiveReason(), 1)) {
|
|
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()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|