|
@@ -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);
|
|
|
|