Browse Source

就地取货逻辑,当前车所在的位置,就是能取货的位置,就不要再跑去别的地方取货了

jx-test
修宁 5 months ago
parent
commit
dbff3a3fdb
  1. 30
      servo/src/main/java/com/galaxis/rcs/plan/path/PtrPathPlanner.java
  2. 48
      servo/src/main/java/com/yvan/workbench/controller/LccController.java

30
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<NodeDirection> loadNodeDirectionList = findNodeForStore(plan, loadRackId, pickupBay);
List<NodeDirection> 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<NodeDirection> unloadNodeDirectionList = findNodeForStore(plan, unloadRackId, unloadBay);
List<NodeDirection> 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<NodeDirection> findNodeForStore(PlanTaskSequence plan, String storeId, int bay) {
private List<NodeDirection> findNodeForStore(PlanTaskSequence plan, String storeId, int bay, String startNodeId, LCCDirection startDirection) {
List<Node> nodes = this.graph.getNodesForStore(storeId);
List<NodeDirection> 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;
}

48
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<Boolean> addInvCommit(@RequestBody Map<String, Object> 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<Object> getLpnLocations(@RequestBody Map<String, Object> 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);
}
}

Loading…
Cancel
Save