|
@@ -1,15 +1,34 @@
|
|
|
package com.sd.business.service.production.impl;
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
+import com.sd.business.entity.order.po.OrderInfo;
|
|
|
+import com.sd.business.entity.order.po.OrderSku;
|
|
|
+import com.sd.business.entity.production.dto.ProductionTaskDto;
|
|
|
import com.sd.business.entity.production.dto.ProductionTaskSelectDto;
|
|
|
import com.sd.business.entity.production.po.ProductionTask;
|
|
|
+import com.sd.business.entity.production.po.ProductionWorkOrder;
|
|
|
import com.sd.business.entity.production.vo.ProductionTaskVo;
|
|
|
+import com.sd.business.entity.sku.po.Sku;
|
|
|
+import com.sd.business.entity.sku.po.SkuSpec;
|
|
|
import com.sd.business.mapper.production.ProductionTaskMapper;
|
|
|
+import com.sd.business.service.order.OrderService;
|
|
|
+import com.sd.business.service.order.OrderSkuService;
|
|
|
import com.sd.business.service.production.ProductionTaskService;
|
|
|
+import com.sd.business.service.production.ProductionWorkOrderService;
|
|
|
+import com.sd.business.service.sku.SkuService;
|
|
|
+import com.sd.business.service.sku.SkuSpecService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -22,6 +41,21 @@ import org.springframework.stereotype.Service;
|
|
|
@Service
|
|
|
public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper, ProductionTask> implements ProductionTaskService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ProductionWorkOrderService productionWorkOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderService orderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderSkuService orderSkuService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SkuService skuService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SkuSpecService skuSpecService;
|
|
|
+
|
|
|
@Override
|
|
|
public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
|
|
|
IWrapper<ProductionTask> wrapper = getWrapper();
|
|
@@ -30,4 +64,104 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
|
|
|
return page;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void addTaskAndWorkOrder(Long orderId) {
|
|
|
+ OrderInfo orderInfo = orderService.getById(orderId);
|
|
|
+ if (orderInfo == null) {
|
|
|
+ throw new ServiceException("未知订单");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ProductionTask> productionTaskList = new ArrayList<>();
|
|
|
+ List<ProductionWorkOrder> productionWorkOrderList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderId));
|
|
|
+
|
|
|
+ Map<String, ProductionTask> skuSpecIdProductionTaskMap = new HashMap<>();
|
|
|
+
|
|
|
+ int num = 1;
|
|
|
+
|
|
|
+ for (OrderSku orderSku : orderSkuList) {
|
|
|
+
|
|
|
+ Long skuSpecId = orderSku.getSkuSpecId();
|
|
|
+ Long bomSpecId = orderSku.getBomSpecId();
|
|
|
+ Integer printType = orderSku.getPrintType();
|
|
|
+ BigDecimal quantity = orderSku.getQuantity();
|
|
|
+
|
|
|
+ ProductionTask productionTask = skuSpecIdProductionTaskMap.computeIfAbsent(
|
|
|
+ skuSpecId + ":" + bomSpecId + ":" + printType,
|
|
|
+ item -> {
|
|
|
+ SkuSpec skuSpec = skuSpecService.getById(skuSpecId);
|
|
|
+ Sku sku = skuService.getById(skuSpec.getSkuId());
|
|
|
+
|
|
|
+ ProductionTask tempProductionTask = new ProductionTask();
|
|
|
+ tempProductionTask.setId(IdWorker.getId());
|
|
|
+ tempProductionTask.setOrderId(orderId);
|
|
|
+ tempProductionTask.setSkuSpecId(skuSpecId);
|
|
|
+ tempProductionTask.setBomSpecId(bomSpecId);
|
|
|
+ tempProductionTask.setCraftProductionLineId(sku.getCraftProductionLineId());
|
|
|
+ tempProductionTask.setMachinedPanel(skuSpec.getMachinedPanel());
|
|
|
+ tempProductionTask.setPrintType(printType);
|
|
|
+ tempProductionTask.setProductionQuantity(BigDecimal.ZERO);
|
|
|
+ tempProductionTask.setCompleteQuantity(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ productionTaskList.add(tempProductionTask);
|
|
|
+
|
|
|
+ return tempProductionTask;
|
|
|
+ });
|
|
|
+
|
|
|
+ productionTask.setProductionQuantity(productionTask.getProductionQuantity().add(quantity));
|
|
|
+
|
|
|
+ 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.setStatus(0);
|
|
|
+ productionWorkOrderList.add(productionWorkOrder);
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (productionTaskList.size() > 0) {
|
|
|
+ this.saveBatch(productionTaskList);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (productionWorkOrderList.size() > 0) {
|
|
|
+ productionWorkOrderService.saveBatch(productionWorkOrderList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void completeTask(Long orderId, Date completeTime) {
|
|
|
+ List<ProductionTask> list = this.list(q -> q.eq(ProductionTask::getOrderId, orderId));
|
|
|
+ if (ObjectUtil.isEmpty(list)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<ProductionTask> productionTaskList = list.stream().peek(item -> {
|
|
|
+ item.setCompleteQuantity(item.getProductionQuantity());
|
|
|
+ item.setCompleteTime(completeTime);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ // 更新生产任务
|
|
|
+ this.updateBatchById(productionTaskList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void completeTaskBatch(List<ProductionTaskDto> productionTaskDtoList) {
|
|
|
+ List<ProductionTask> productionTaskList = new ArrayList<>();
|
|
|
+ for (ProductionTaskDto dto : productionTaskDtoList) {
|
|
|
+ List<ProductionTask> list = this.list(q -> q.eq(ProductionTask::getOrderId, dto.getOrderId()));
|
|
|
+ if (ObjectUtil.isEmpty(list)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<ProductionTask> taskList = list.stream().peek(item -> {
|
|
|
+ item.setCompleteQuantity(item.getProductionQuantity());
|
|
|
+ item.setCompleteTime(dto.getCompleteTime());
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ productionTaskList.addAll(taskList);
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isEmpty(productionTaskList)) {
|
|
|
+ // 更新生产任务
|
|
|
+ this.updateBatchById(productionTaskList);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|