From dbff3a3fdb1428319bd9320770fc6646229a1091 Mon Sep 17 00:00:00 2001 From: yvan Date: Wed, 30 Jul 2025 17:18:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=B1=E5=9C=B0=E5=8F=96=E8=B4=A7=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=BD=93=E5=89=8D=E8=BD=A6=E6=89=80=E5=9C=A8?= =?UTF-8?q?=E7=9A=84=E4=BD=8D=E7=BD=AE=EF=BC=8C=E5=B0=B1=E6=98=AF=E8=83=BD?= =?UTF-8?q?=E5=8F=96=E8=B4=A7=E7=9A=84=E4=BD=8D=E7=BD=AE=EF=BC=8C=E5=B0=B1?= =?UTF-8?q?=E4=B8=8D=E8=A6=81=E5=86=8D=E8=B7=91=E5=8E=BB=E5=88=AB=E7=9A=84?= =?UTF-8?q?=E5=9C=B0=E6=96=B9=E5=8F=96=E8=B4=A7=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/galaxis/rcs/plan/path/PtrPathPlanner.java | 30 +++++++++++--- .../yvan/workbench/controller/LccController.java | 48 ++++++++++++++++++++++ 2 files changed, 73 insertions(+), 5 deletions(-) diff --git a/servo/src/main/java/com/galaxis/rcs/plan/path/PtrPathPlanner.java b/servo/src/main/java/com/galaxis/rcs/plan/path/PtrPathPlanner.java index e66f127..72f99e3 100644 --- a/servo/src/main/java/com/galaxis/rcs/plan/path/PtrPathPlanner.java +++ b/servo/src/main/java/com/galaxis/rcs/plan/path/PtrPathPlanner.java @@ -9,6 +9,7 @@ import com.yvan.logisticsModel.StaticItem; import org.clever.core.Conv; import java.util.List; +import java.util.stream.Collectors; import static com.galaxis.rcs.plan.path.PathUtils.convertStoreDirection; @@ -77,7 +78,7 @@ public class PtrPathPlanner { // 取货点 String loadRackId = task.from().rackId(); int pickupBay = task.from().bay(); - List loadNodeDirectionList = findNodeForStore(plan, loadRackId, pickupBay); + List loadNodeDirectionList = findNodeForStore(plan, loadRackId, pickupBay, startNodeId, startDirection); if (loadNodeDirectionList.isEmpty()) { throw new RuntimeException("Pickup node not found for rackId=" + loadRackId + ", bay=" + pickupBay); } @@ -85,7 +86,7 @@ public class PtrPathPlanner { // 放货点 String unloadRackId = task.to().rackId(); int unloadBay = task.to().bay(); - List unloadNodeDirectionList = findNodeForStore(plan, unloadRackId, unloadBay); + List unloadNodeDirectionList = findNodeForStore(plan, unloadRackId, unloadBay, null, null); if (unloadNodeDirectionList.isEmpty()) { throw new RuntimeException("Drop node not found for rackId=" + unloadRackId + ", bay=" + unloadBay); } @@ -143,7 +144,7 @@ public class PtrPathPlanner { // 放货点 String unloadRackId = task.to().rackId(); int unloadBay = task.to().bay(); - var unloadNodeDirectionList = findNodeForStore(plan, unloadRackId, unloadBay); + var unloadNodeDirectionList = findNodeForStore(plan, unloadRackId, unloadBay, startNodeId, startDirection); if (unloadNodeDirectionList.isEmpty()) { throw new RuntimeException("Drop node not found for rackId=" + unloadRackId + ", bay=" + unloadBay); } @@ -190,7 +191,7 @@ public class PtrPathPlanner { // 放货点 String loadRackId = task.to().rackId(); int unloadBay = task.to().bay(); - var loadNodeDirectionList = findNodeForStore(plan, loadRackId, unloadBay); + var loadNodeDirectionList = findNodeForStore(plan, loadRackId, unloadBay, startNodeId, startDirection); if (loadNodeDirectionList.isEmpty()) { throw new RuntimeException("Drop node not found for rackId=" + loadRackId + ", bay=" + unloadBay); } @@ -230,9 +231,10 @@ public class PtrPathPlanner { plan.addFinish(); } - private List findNodeForStore(PlanTaskSequence plan, String storeId, int bay) { + private List findNodeForStore(PlanTaskSequence plan, String storeId, int bay, String startNodeId, LCCDirection startDirection) { List nodes = this.graph.getNodesForStore(storeId); List results = Lists.newArrayList(); + for (Node node : nodes) { for (StoreLink link : node.storeLinks()) { if (link.storeId().equals(storeId) && link.bay() == bay) { @@ -241,6 +243,24 @@ public class PtrPathPlanner { } } } + + // 就地取货逻辑,当前车所在的位置,就是能取货的位置,就不要再跑去别的地方取货了; + // 如果 startNodeId 和 startDirection 有值,并且 results 结果中包含 startNodeId/startDirection ,那么只保留 startNodeId/startDirection 的结果 + if (startNodeId != null && startDirection != null) { + boolean matchSelfOnly = false; + for (NodeDirection nd : results) { + if (nd.node().id().equals(startNodeId) && nd.direction() == startDirection) { + matchSelfOnly = true; + break; + } + } + + if (matchSelfOnly) { + return results.stream().filter(nd -> nd.node().id().equals(startNodeId) && nd.direction() == startDirection) + .collect(Collectors.toList()); + } + } + return results; } diff --git a/servo/src/main/java/com/yvan/workbench/controller/LccController.java b/servo/src/main/java/com/yvan/workbench/controller/LccController.java index 6b0acaa..5d67502 100644 --- a/servo/src/main/java/com/yvan/workbench/controller/LccController.java +++ b/servo/src/main/java/com/yvan/workbench/controller/LccController.java @@ -1,6 +1,8 @@ package com.yvan.workbench.controller; import com.galaxis.rcs.amr.AmrAgvItem; +import com.galaxis.rcs.amr.JacksonUtils; +import com.galaxis.rcs.common.entity.LccInvLpn; import com.galaxis.rcs.common.enums.LCCDirection; import com.galaxis.rcs.amr.PtrAgvItem; import com.google.common.base.Strings; @@ -11,12 +13,14 @@ import com.yvan.workbench.SpringContext; import com.yvan.workbench.service.LccMapService; import org.clever.core.Conv; import org.clever.core.json.JsonWrapper; +import org.clever.core.mapper.JacksonMapper; import org.clever.core.model.response.R; import org.clever.data.jdbc.DaoFactory; import org.clever.data.jdbc.QueryDSL; import org.clever.data.jdbc.querydsl.utils.QueryDslUtils; import org.clever.web.mvc.annotation.RequestBody; +import java.util.Date; import java.util.List; import java.util.Map; @@ -124,4 +128,48 @@ public class LccController { return R.success(list); } + + public static R addInvCommit(@RequestBody Map params) { + LccInvLpn inv = JacksonMapper.getInstance().getMapper().convertValue(params, LccInvLpn.class); + + if (inv.getQty() <= 0L) { + return R.fail("Qty must be greater than 0"); + } + if (inv.getQty() > 1L) { + return R.fail("Qty must be 1"); + } + if (Strings.isNullOrEmpty(inv.getLocCode())) { + return R.fail("LocCode Must not be empty"); + } + if (Strings.isNullOrEmpty(inv.getLpn())) { + return R.fail("Lpn Must not be empty"); + } + if (inv.getEnvId() == null || inv.getEnvId() <= 0) { + return R.fail("EnvId Must not be empty"); + } + + inv.setQtyIn(0); + inv.setQtyOut(0); + inv.setCreateAt(new Date()); + inv.setUpdateAt(new Date()); + inv.setCreateBy("system"); + inv.setUpdateBy("system"); + + QueryDSL queryDsl = DaoFactory.getQueryDSL(); + var rowEffect = queryDsl.insert(lccInvLpn) + .populate(inv); + + return R.success(true); + } + + public static R getLpnLocations(@RequestBody Map params) { + String lpn = Conv.asString(params.get("lpn")); + Long envId = Conv.asLong(params.get("envId")); + + if (Strings.isNullOrEmpty(lpn)) { + return R.fail("lpn Must not be empty"); + } + + return R.success(true); + } }