From e82330aa520ba84686a86cd1b28ca91f534ca705 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" <925258474@qq.com> Date: Mon, 13 May 2024 10:22:35 +0800 Subject: [PATCH] no message --- .../businessdata/rest/KMReSController.java | 4 +- .../businessdata/rest/MlsController.java | 6 +- .../service/impl/MlsServiceImpl.java | 254 ++++++++++++------ 3 files changed, 177 insertions(+), 87 deletions(-) diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java index 7d713c0..33f98b8 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java @@ -83,7 +83,7 @@ public class KMReSController { Task task = getFirstTask(agvTask.getId()); agvTaskService.agvTaskCallback(agvTask, task, missionStatus); - CompletableFuture returnMoFuture = CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { returnMo(task.getBillCode());// 回传MO信息 }); } @@ -96,7 +96,7 @@ public class KMReSController { Task task = getFirstTask(agvTask.getId()); agvTaskService.agvTaskCallback(agvTask, missionStatus, containerCode); - CompletableFuture returnIssueFuture = CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { returnIssue(task);// 叫料结果回传 }); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/MlsController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/MlsController.java index 72674ab..0ee02ac 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/MlsController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/MlsController.java @@ -2,7 +2,6 @@ package com.youchain.businessdata.rest; import com.youchain.annotation.AnonymousAccess; import com.youchain.annotation.Log; -import com.youchain.appupdate.inputJson.MissionStateCallback; import com.youchain.businessdata.inputJson.*; import com.youchain.businessdata.service.MlsService; import com.youchain.exception.handler.ApiResult; @@ -12,12 +11,15 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; + import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.OK; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java index 1242bf6..2cc0312 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; @Service @@ -146,14 +147,14 @@ public class MlsServiceImpl implements MlsService { } } - CompletableFuture orderFutureCreate = CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { //批量新增订单 if (!ordersToCreate.isEmpty()) { batchCreateOrUpdate.batchCreate(ordersToCreate); } }); - CompletableFuture orderFutureUpdate = CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { //批量更新订单 if (!ordersToUpdate.isEmpty()) { batchCreateOrUpdate.batchUpdate(ordersToUpdate); @@ -316,14 +317,14 @@ public class MlsServiceImpl implements MlsService { } } - CompletableFuture moFutureCreate = CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { //批量新增Mo票 if (!mosToCreate.isEmpty()) { batchCreateOrUpdate.batchCreate(mosToCreate); } }); - CompletableFuture moFutureUpdate = CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { //批量更新Mo票 if (!mosToUpdate.isEmpty()) { batchCreateOrUpdate.batchUpdate(mosToUpdate); @@ -400,106 +401,157 @@ public class MlsServiceImpl implements MlsService { } @Override + @Transactional(rollbackFor = Exception.class) public void getIssueInfo(IssueInfo issueInfo) { - String taskNumber = issueInfo.getTaskNumber();//任务号 - // 指定Set的类型 + if (issueInfo == null) { + throw new IllegalArgumentException("传入的 IssueInfo 对象为空"); + } + Set workOrderNameSet = issueInfo.getWorkOrderName(); - if (workOrderNameSet.isEmpty()) { + if (workOrderNameSet == null || workOrderNameSet.isEmpty()) { throw new IllegalArgumentException("没有获取到工单号!"); } - List inventoryList = inventoryService.findInvByBillCode(workOrderNameSet);//根据工单号查询库存信息 - if (inventoryList.isEmpty()) { + CompletableFuture> inventoryListFuture = CompletableFuture.supplyAsync(() -> { + + List inventoryList = inventoryService.findInvByBillCode(workOrderNameSet);//根据工单号查询库存信息 + + return inventoryList; + }); + + if (inventoryListFuture.join().isEmpty()) { throw new RuntimeException("无库存信息!"); } - //目标点 - Point endPoint = redisObjectUtils.getObjectFromCache("ckjbk", () -> pointService.findByCode(null, null, null, "出库接驳口", null), - "系统无此点位!"); + inventoryListFuture.thenAccept((result) -> { + //目标点 + Point endPoint = redisObjectUtils.getObjectFromCache("ckjbk", () -> pointService.findByCode(null, null, null, "出库接驳口", null), + "系统无此点位!"); + List inventoryToUpdate = new ArrayList<>(); + List pickDetailToCreate = new ArrayList<>(); + List agvTaskToCreate = new ArrayList<>(); + List taskToCreate = new ArrayList<>(); - List inventoryToUpdate = new ArrayList<>(); - List pickDetailToCreate = new ArrayList<>(); - List agvTaskToCreate = new ArrayList<>(); - List taskToCreate = new ArrayList<>(); + for (Inventory inv : result) { + //根据库存信息生成叫料任务 + Stock stock = inv.getStock();//容器 + Point startPoint = inv.getPoint();//起始点位 + ItemKey itemKey = inv.getItemKey(); + Item item = inv.getItemKey().getItem(); - for (Inventory inv : inventoryList) { - //根据库存信息生成叫料任务 - Stock stock = inv.getStock();//容器 - Point startPoint = inv.getPoint();//起始点位 - Item item = inv.getItemKey().getItem(); + //更新库存信息 + inventoryToUpdate.add(updateInventory(inv)); - //更新库存信息 - inventoryToUpdate.add(updateInventory(inv)); + //生成出库明细 + PickDetail pd = createPickDetail(item, inv.getBillCode(), itemKey.getPropC1(), inv.getQuantity()); + pickDetailToCreate.add(pd); - //生成出库明细 - PickDetail pd = new PickDetail(); - pd.setItem(item); - pd.setPo(inv.getBillCode()); - pd.setPropC1(inv.getItemKey().getPropC1()); - pd.setLineNo(1l); - pd.setOrderQty(inv.getQuantity()); - pd.setAllocatedQty(inv.getQuantity()); - pd.setStatus(BizStatus.ALLOCATE); - pd.setDept(item.getDept()); - pickDetailToCreate.add(pd); + //生成搬运任务 + AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE"); + agvTaskToCreate.add(agvTask); - //生成搬运任务 - AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE"); - agvTaskToCreate.add(agvTask); - - //生成Task - Task task = new Task(); - task.setItem(item); - task.setItemKey(inv.getItemKey()); - task.setPickDetail(pd); - task.setBillCode(taskNumber); - task.setSrcStock(stock); - task.setDstStock(stock); - task.setSrcPoint(startPoint); - task.setDstPoint(endPoint); - task.setSrcStockCode(stock.getCode()); - task.setSrcPointCode(startPoint.getCode()); - task.setDstPointCode(endPoint.getCode()); - task.setInvStatus(inv.getStatus()); - task.setTaskType(BizStatus.PICK); - task.setTaskStatus(BizStatus.OPEN); - task.setPlanQty(inv.getQuantity()); - task.setInvId(inv.getId()); - task.setDept(item.getDept()); - task.setAgvTask(agvTask); - taskToCreate.add(task); - } - - CompletableFuture inventoryFuture = CompletableFuture.runAsync(() -> { - //批量更新库存信息 - if (!inventoryToUpdate.isEmpty()) { - batchCreateOrUpdate.batchUpdate(inventoryToUpdate); + //生成Task + Task task = createTask(item, itemKey, pd, inv.getBillCode(), stock, startPoint, endPoint, agvTask, inv); + taskToCreate.add(task); } + + CompletableFuture inventoryFuture = CompletableFuture.runAsync(() -> { + //批量更新库存信息 + if (!inventoryToUpdate.isEmpty()) { + batchCreateOrUpdate.batchUpdate(inventoryToUpdate); + } + + }); + + + CompletableFuture pickDetailFuture = inventoryFuture.thenAccept(result2 -> { + //批量生成叫料明细 + if (!pickDetailToCreate.isEmpty()) { + batchCreateOrUpdate.batchCreate(pickDetailToCreate); + } + + }); + + CompletableFuture agvTaskFuture = pickDetailFuture.thenAccept(result3 -> { + // 批量生成agv任务 + if (!agvTaskToCreate.isEmpty()) { + batchCreateOrUpdate.batchCreate(agvTaskToCreate); + } + + }); + + CompletableFuture taskFuture = agvTaskFuture.thenAccept(result4 -> { + // 批量生成任务 + if (!taskToCreate.isEmpty()) { + batchCreateOrUpdate.batchCreate(taskToCreate); + } + + }); + + CompletableFuture.allOf(inventoryFuture, pickDetailFuture, agvTaskFuture, taskFuture).join(); + }); - CompletableFuture pickDetailFuture = inventoryFuture.thenRun(() -> { - //批量生成叫料明细 - if (!pickDetailToCreate.isEmpty()) { - batchCreateOrUpdate.batchCreate(pickDetailToCreate); - } - }); + } + + private void processInventory(Inventory inv, Point endPoint) { + Stock stock = inv.getStock(); + Point startPoint = inv.getPoint(); + Item item = inv.getItemKey().getItem(); + + // 更新库存信息 + Inventory updatedInv = updateInventory(inv); + + // 生成出库明细 + PickDetail pd = new PickDetail(); + pd.setItem(item); + pd.setPo(inv.getBillCode()); + pd.setPropC1(inv.getItemKey().getPropC1()); + pd.setLineNo(1L); + pd.setOrderQty(inv.getQuantity()); + pd.setAllocatedQty(inv.getQuantity()); + pd.setStatus(BizStatus.ALLOCATE); + pd.setDept(item.getDept()); + + // 生成搬运任务 + AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE"); + + // 生成Task + Task task = new Task(); + task.setItem(item); + task.setItemKey(inv.getItemKey()); + task.setPickDetail(pd); + task.setBillCode(inv.getBillCode()); + task.setSrcStock(stock); + task.setDstStock(stock); + task.setSrcPoint(startPoint); + task.setDstPoint(endPoint); + task.setSrcStockCode(stock.getCode()); + task.setSrcPointCode(startPoint.getCode()); + task.setDstPointCode(endPoint.getCode()); + task.setInvStatus(inv.getStatus()); + task.setTaskType(BizStatus.PICK); + task.setTaskStatus(BizStatus.OPEN); + task.setPlanQty(inv.getQuantity()); + task.setInvId(inv.getId()); + task.setDept(item.getDept()); + task.setAgvTask(agvTask); + + synchronized (this) { + // 批量更新库存信息 + batchCreateOrUpdate.batchUpdate(Collections.singletonList(updatedInv)); + + // 批量生成叫料明细 + batchCreateOrUpdate.batchCreate(Collections.singletonList(pd)); - CompletableFuture agvTaskFuture = pickDetailFuture.thenRun(() -> { // 批量生成agv任务 - if (!agvTaskToCreate.isEmpty()) { - batchCreateOrUpdate.batchCreate(agvTaskToCreate); - } - }); + batchCreateOrUpdate.batchCreate(Collections.singletonList(agvTask)); - CompletableFuture taskFuture = agvTaskFuture.thenRun(() -> { // 批量生成任务 - if (!taskToCreate.isEmpty()) { - batchCreateOrUpdate.batchCreate(taskToCreate); - } - }); - + batchCreateOrUpdate.batchCreate(Collections.singletonList(task)); + } } /** @@ -508,11 +560,47 @@ public class MlsServiceImpl implements MlsService { * @param inventory * @return */ - private Inventory updateInventory(Inventory inventory) { + public Inventory updateInventory(Inventory inventory) { inventory.setQueuedQty(inventory.getQuantity()); return inventory; } + public PickDetail createPickDetail(Item item, String po, String propC1, Double orderQty) { + PickDetail pickDetail = new PickDetail(); + pickDetail.setItem(item); + pickDetail.setPo(po); + pickDetail.setPropC1(propC1); + pickDetail.setLineNo(1L); + pickDetail.setOrderQty(orderQty); + pickDetail.setAllocatedQty(orderQty); + pickDetail.setStatus(BizStatus.ALLOCATE); + pickDetail.setDept(item.getDept()); + return pickDetail; + } + + public Task createTask(Item item, ItemKey itemKey, PickDetail pd, String taskNumber, Stock stock, Point startPoint, Point endPoint, AgvTask agvTask, Inventory inv) { + Task task = new Task(); + task.setItem(item); + task.setItemKey(itemKey); + task.setPickDetail(pd); + task.setBillCode(taskNumber); + task.setSrcStock(stock); + task.setDstStock(stock); + task.setSrcPoint(startPoint); + task.setDstPoint(endPoint); + task.setSrcStockCode(stock.getCode()); + task.setSrcPointCode(startPoint.getCode()); + task.setDstPointCode(endPoint.getCode()); + task.setInvStatus(inv.getStatus()); + task.setTaskType(BizStatus.PICK); + task.setTaskStatus(BizStatus.OPEN); + task.setPlanQty(inv.getQuantity()); + task.setInvId(inv.getId()); + task.setDept(item.getDept()); + task.setAgvTask(agvTask); + return task; + } + /** * Mo票回传