From 1815bcadb613f8951c02031176d2b54dcfa5a393 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期六, 17 一月 2026 11:09:57 +0800
Subject: [PATCH] agv出入库根据pda扫描库位识别入库站点
---
src/main/java/com/zy/common/properties/AgvProperties.java | 42 ++++++++
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java | 203 +++++++++++++++++++++++++++++++++++-----
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java | 20 +++
src/main/resources/application-dev.yml | 8 +
src/main/resources/application-prod.yml | 8 +
5 files changed, 252 insertions(+), 29 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 173cf0c..5076fd4 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -208,21 +208,33 @@
throw new CoolException(barcode+ "锛氭潯鐮佸瓨鍦╝gv鎼繍浠诲姟!");
}
- // 鏍规嵁whs_type閫夋嫨绔欑偣鍜屾満鍣ㄤ汉缁�
+ // 鏍规嵁whs_type鍜屽簱浣嶇紪鍙峰墠缂�閫夋嫨绔欑偣鍜屾満鍣ㄤ汉缁�
Long whsType = locCache.getWhsType();
+ String locNo = locCache.getLocNo();
List<String> targetStations;
String robotGroup;
+
+ // 鍒ゆ柇搴撲綅缂栧彿鍓嶇紑锛欳A寮�澶村彧鍋氬叆搴擄紝WA寮�澶存墠浼氳鍑哄簱鍒嗛厤缂撳瓨鍖猴紙浠庨厤缃鍙栵級
+ String inboundOnlyPrefix = agvProperties.getLocationPrefix().getInboundOnly();
+ String cacheAreaPrefix = agvProperties.getLocationPrefix().getCacheArea();
+ boolean isCA = locNo != null && locNo.startsWith(inboundOnlyPrefix);
+ boolean isWA = locNo != null && locNo.startsWith(cacheAreaPrefix);
if (whsType != null && whsType.equals(agvProperties.getWhsTypeMapping().getInboundArea())) {
// whs_type = 1: 鍏ュ簱鍖猴紝浣跨敤涓滀晶绔欑偣鍜孏roup-001
targetStations = agvProperties.getEastStations();
robotGroup = agvProperties.getRobotGroupEast();
- log.info("搴撲綅whs_type={}锛屼娇鐢ㄥ叆搴撳尯閰嶇疆锛堜笢渚х珯鐐瑰拰Group-001锛�", whsType);
+ log.info("搴撲綅whs_type={}锛屽簱浣嶇紪鍙�={}锛坽}锛夛紝浣跨敤鍏ュ簱鍖洪厤缃紙{}绔欑偣鍜寋}锛�",
+ whsType, locNo, isCA ? "CA" : (isWA ? "WA" : "鍏朵粬"),
+ agvProperties.getEastDisplayName(), robotGroup);
} else if (whsType != null && whsType.equals(agvProperties.getWhsTypeMapping().getCacheArea())) {
// whs_type = 2: 缂撳瓨鍖猴紝浣跨敤瑗夸晶绔欑偣鍜孏roup-002
+ // 娉ㄦ剰锛氬鏋滄湁CA寮�澶寸殑鍏ュ簱锛屼絾鏄爣璁板湪瑗夸晶鐨勶紙whs_type=2锛夛紝涔熶細鍒嗛厤鍒拌タ渚х殑绔欑偣鍏ュ簱
targetStations = agvProperties.getWestStations();
robotGroup = agvProperties.getRobotGroupWest();
- log.info("搴撲綅whs_type={}锛屼娇鐢ㄧ紦瀛樺尯閰嶇疆锛堣タ渚х珯鐐瑰拰Group-002锛�", whsType);
+ log.info("搴撲綅whs_type={}锛屽簱浣嶇紪鍙�={}锛坽}锛夛紝浣跨敤缂撳瓨鍖洪厤缃紙{}绔欑偣鍜寋}锛�",
+ whsType, locNo, isCA ? "CA" : (isWA ? "WA" : "鍏朵粬"),
+ agvProperties.getWestDisplayName(), robotGroup);
} else {
// whs_type涓虹┖鎴栧叾浠栧�硷紝鏍规嵁type鍒ゆ柇锛堝吋瀹规棫閫昏緫锛�
if (type == 1) {
@@ -316,7 +328,7 @@
} else {
// 娌℃湁鍙叆绔欑偣锛岃褰曟棩蹇椾絾涓嶉樆姝笅鍗曪紝绔欑偣鍒嗛厤灏嗗湪瀹氭椂浠诲姟涓鐞�
String groupName = (whsType != null && whsType.equals(agvProperties.getWhsTypeMapping().getInboundArea()))
- ? "涓滀晶" : "瑗夸晶";
+ ? agvProperties.getEastDisplayName() : agvProperties.getWestDisplayName();
log.warn("{}鍙敤绔欑偣锛坽}锛変腑娌℃湁鍙叆绔欑偣锛坕n_enable='Y'涓攃anining='Y'锛夛紝鏆備笉鍒嗛厤绔欑偣锛屽皢鍦ㄥ畾鏃朵换鍔′腑鍒嗛厤", groupName, canInSites);
}
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index bdba3e6..4a28523 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -5,6 +5,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.LocStsType;
+import com.zy.asrs.mapper.BasDevpMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.BasStationServiceImpl;
import com.zy.asrs.task.AbstractHandler;
@@ -19,11 +20,9 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@@ -72,6 +71,15 @@
@Autowired
private WrkMastLogService wrkMastLogService;
+
+ @Autowired
+ private BasDevpMapper basDevpMapper;
+
+ /**
+ * 绔欑偣杞璁℃暟鍣紝鐢ㄤ簬骞冲潎鍒嗛厤绔欑偣
+ * Key: 绔欑偣缁勬爣璇嗭紙濡� "east" 鎴� "west"锛夛紝Value: 褰撳墠杞绱㈠紩
+ */
+ private final Map<String, AtomicInteger> siteRoundRobinCounters = new ConcurrentHashMap<>();
public ReturnT<String> start(WrkMast wrkMast) {
// 4.鍏ュ簱瀹屾垚
@@ -730,20 +738,6 @@
log.info("鍑哄簱浠诲姟瀹屾垚锛岀敓鎴恵}浠诲姟锛屼换鍔D锛歿}锛屾墭鐩樼爜锛歿}", isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId(), outTask.getBarcode());
- // 鍒嗛厤缂撳瓨搴撲綅锛坵hs_type=2锛�
- LocCache cacheLoc = locCacheService.selectOne(new EntityWrapper<LocCache>()
- .eq("whs_type", agvProperties.getWhsTypeMapping().getCacheArea()) // whs_type=2 缂撳瓨鍖�
- .eq("frozen", 0)
- .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type) // O.闂茬疆
- .ne("full_plt", isEmptyPallet ? "Y" : "N") // 绌烘墭涓嶉�夋弧鏉垮簱浣嶏紝婊℃墭涓嶉�夌┖鏉垮簱浣�
- .orderAsc(Arrays.asList("row1", "bay1", "lev1"))
- .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
-
- if (cacheLoc == null) {
- log.warn("娌℃湁鍙敤鐨勭紦瀛樺簱浣嶏紝鏃犳硶鐢熸垚{}浠诲姟锛屼换鍔D锛歿}", isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId());
- return;
- }
-
// 鑾峰彇鍑哄簱绔欑偣锛堝嚭搴撲换鍔$殑staNo鏄嚭搴撶珯鐐癸紝灏嗕綔涓虹┖鎵�/婊℃墭鍑哄簱浠诲姟鐨勬簮绔欑偣锛�
String outboundStaNo = outTask.getStaNo();
if (outboundStaNo == null || outboundStaNo.isEmpty()) {
@@ -751,12 +745,55 @@
return;
}
- // 鏍规嵁缂撳瓨鍖洪厤缃�夋嫨绔欑偣鍜屾満鍣ㄤ汉缁勶紙瑗夸晶锛�
- List<String> cacheStations = agvProperties.getWestStations();
- String robotGroup = agvProperties.getRobotGroupWest();
+ // 鏍规嵁鍑哄簱绔欑偣鍒ゆ柇鏄笢渚ц繕鏄タ渚�
+ Set<String> eastStations = new HashSet<>(agvProperties.getEastStations());
+ Set<String> westStations = new HashSet<>(agvProperties.getWestStations());
+
+ List<String> cacheStations;
+ String robotGroup;
+ Long targetWhsType;
+ String sideName;
+
+ if (eastStations.contains(outboundStaNo)) {
+ // 涓滀晶鍑哄簱绔欑偣锛屾煡鎵句笢渚A搴撲綅锛坵hs_type=1锛�
+ cacheStations = agvProperties.getEastStations();
+ robotGroup = agvProperties.getRobotGroupEast();
+ targetWhsType = agvProperties.getWhsTypeMapping().getInboundArea(); // whs_type=1
+ sideName = agvProperties.getEastDisplayName(); // 浠庨厤缃鍙栨樉绀哄悕绉�
+ log.info("鍑哄簱绔欑偣{}鍦▄}锛屾煡鎵緖}WA搴撲綅锛坵hs_type={}锛�", outboundStaNo, sideName, sideName, targetWhsType);
+ } else if (westStations.contains(outboundStaNo)) {
+ // 瑗夸晶鍑哄簱绔欑偣锛屾煡鎵捐タ渚A搴撲綅锛坵hs_type=2锛�
+ cacheStations = agvProperties.getWestStations();
+ robotGroup = agvProperties.getRobotGroupWest();
+ targetWhsType = agvProperties.getWhsTypeMapping().getCacheArea(); // whs_type=2
+ sideName = agvProperties.getWestDisplayName(); // 浠庨厤缃鍙栨樉绀哄悕绉�
+ log.info("鍑哄簱绔欑偣{}鍦▄}锛屾煡鎵緖}WA搴撲綅锛坵hs_type={}锛�", outboundStaNo, sideName, sideName, targetWhsType);
+ } else {
+ log.warn("鍑哄簱绔欑偣{}涓嶅湪閰嶇疆鐨勭珯鐐瑰垪琛ㄤ腑锛屾棤娉曞垽鏂瓄}/{}锛屼换鍔D锛歿}",
+ outboundStaNo, agvProperties.getEastDisplayName(), agvProperties.getWestDisplayName(), outTask.getId());
+ return;
+ }
if (cacheStations.isEmpty()) {
- log.warn("缂撳瓨鍖烘病鏈夐厤缃珯鐐癸紝鏃犳硶鐢熸垚{}浠诲姟锛屼换鍔D锛歿}", isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId());
+ log.warn("{}渚ф病鏈夐厤缃珯鐐癸紝鏃犳硶鐢熸垚{}浠诲姟锛屼换鍔D锛歿}",
+ sideName, isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId());
+ return;
+ }
+
+ // 鍒嗛厤缂撳瓨搴撲綅锛氬彧鏌ユ壘WA寮�澶寸殑搴撲綅锛圕A寮�澶村彧鍋氬叆搴擄紝WA寮�澶存墠浼氳鍑哄簱鍒嗛厤缂撳瓨鍖猴級
+ String cacheAreaPrefix = agvProperties.getLocationPrefix().getCacheArea();
+ LocCache cacheLoc = locCacheService.selectOne(new EntityWrapper<LocCache>()
+ .eq("whs_type", targetWhsType) // 鏍规嵁鍑哄簱绔欑偣鍒ゆ柇鐨剋hs_type
+ .like("loc_no", cacheAreaPrefix + "%") // 鍙煡鎵網A寮�澶寸殑搴撲綅锛堜粠閰嶇疆璇诲彇锛�
+ .eq("frozen", 0)
+ .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type) // O.闂茬疆
+ .ne("full_plt", isEmptyPallet ? "Y" : "N") // 绌烘墭涓嶉�夋弧鏉垮簱浣嶏紝婊℃墭涓嶉�夌┖鏉垮簱浣�
+ .orderAsc(Arrays.asList("row1", "bay1", "lev1"))
+ .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+
+ if (cacheLoc == null) {
+ log.warn("{}渚ф病鏈夊彲鐢ㄧ殑{}缂撳瓨搴撲綅锛屼笉鐢熸垚{}AGV浠诲姟锛屼换鍔D锛歿}",
+ sideName, cacheAreaPrefix, isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId());
return;
}
@@ -814,8 +851,12 @@
outboundStaNo, transportingTasks.size(), outTask.getId());
}
- // 閫夋嫨缂撳瓨鍖虹洰鏍囩珯鐐癸紙浣跨敤绗竴涓彲鐢ㄧ珯鐐癸紝鎴栧彲浠ヤ紭鍖栦负閫夋嫨浠诲姟鏈�灏戠殑绔欑偣锛�
- String cacheStaNo = cacheStations.get(0);
+ // 閫夋嫨缂撳瓨鍖虹洰鏍囩珯鐐癸紙浣跨敤鍜屽叆搴撲竴鏍风殑鍒嗛厤绛栫暐锛氳疆璇€�佹渶灏戜换鍔℃暟锛�
+ String cacheStaNo = allocateCacheStation(cacheStations, ioType);
+ if (cacheStaNo == null) {
+ log.warn("鏃犳硶涓哄嚭搴撲换鍔D锛歿}鍒嗛厤缂撳瓨鍖虹珯鐐癸紝鎵�鏈夌珯鐐归兘鍦ㄤ娇鐢ㄤ腑", outTask.getId());
+ return;
+ }
// 鐢熸垚宸ヤ綔鍙�
int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
@@ -862,6 +903,118 @@
log.info("鎴愬姛鐢熸垚{}浠诲姟锛屼换鍔D锛歿}锛屽伐浣滃彿锛歿}锛屾簮绔欑偣锛歿}锛岀洰鏍囩珯鐐癸細{}锛岀紦瀛樺簱浣嶏細{}",
isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", cacheTask.getId(), workNo, outboundStaNo, cacheStaNo, cacheLoc.getLocNo());
}
+
+ /**
+ * 涓哄嚭搴撳埌缂撳瓨鍖虹殑浠诲姟鍒嗛厤绔欑偣锛堜娇鐢ㄥ拰鍏ュ簱涓�鏍风殑鍒嗛厤绛栫暐锛�
+ * @param cacheStations 缂撳瓨鍖虹珯鐐瑰垪琛�
+ * @param ioType 浠诲姟绫诲瀷锛�101=鍏ㄦ澘鍑哄簱锛�110=绌烘澘鍑哄簱锛�
+ * @return 鍒嗛厤鐨勭珯鐐圭紪鍙凤紝濡傛灉鏃犳硶鍒嗛厤鍒欒繑鍥瀗ull
+ */
+ private String allocateCacheStation(List<String> cacheStations, Integer ioType) {
+ if (cacheStations == null || cacheStations.isEmpty()) {
+ log.warn("缂撳瓨鍖虹珯鐐瑰垪琛ㄤ负绌猴紝鏃犳硶鍒嗛厤绔欑偣");
+ return null;
+ }
+
+ // 灏嗙珯鐐瑰瓧绗︿覆鍒楄〃杞崲涓烘暣鏁板垪琛�
+ List<Integer> siteIntList = cacheStations.stream()
+ .map(Integer::parseInt)
+ .collect(Collectors.toList());
+
+ // 鏌ヨ鎵�鏈夌紦瀛樺尯绔欑偣鐨勮澶囦俊鎭紙鍖呭惈浠诲姟鏁帮級
+ List<BasDevp> devList = basDevpMapper.selectList(new EntityWrapper<BasDevp>()
+ .in("dev_no", siteIntList)
+ );
+
+ if (devList.isEmpty()) {
+ log.warn("缂撳瓨鍖虹珯鐐箋}鍦ㄨ澶囪〃涓笉瀛樺湪", cacheStations);
+ return cacheStations.get(0); // 闄嶇骇锛氳繑鍥炵涓�涓珯鐐�
+ }
+
+ // 鎸夊叆搴撲换鍔℃暟鎺掑簭锛堝嚭搴撳埌缂撳瓨鍖轰篃浣跨敤in_qty瀛楁锛�
+ devList.sort(Comparator.comparing(BasDevp::getInQty));
+
+ // 鑾峰彇鏈�灏戜换鍔℃暟
+ int minInQty = devList.get(0).getInQty();
+
+ // 绛涢�夊嚭浠诲姟鏁版渶灏戠殑绔欑偣鍒楄〃
+ List<BasDevp> minTaskSites = devList.stream()
+ .filter(dev -> dev.getInQty() == minInQty)
+ .collect(Collectors.toList());
+
+ // 鏍规嵁閰嶇疆閫夋嫨鍒嗛厤绛栫暐
+ String strategy = agvProperties.getSiteAllocation().getStrategy();
+ boolean enableRoundRobin = agvProperties.getSiteAllocation().isEnableRoundRobin();
+
+ List<BasDevp> orderedSites = new ArrayList<>();
+ String groupKey = "west"; // 缂撳瓨鍖轰娇鐢ㄨタ渚�
+
+ if (minTaskSites.size() > 1 && enableRoundRobin && "round-robin".equals(strategy)) {
+ // 杞鍒嗛厤锛氬綋澶氫釜绔欑偣浠诲姟鏁扮浉鍚屾椂锛屼娇鐢ㄨ疆璇�
+ AtomicInteger counter = siteRoundRobinCounters.computeIfAbsent(groupKey, k -> new AtomicInteger(0));
+ int startIndex = counter.get() % minTaskSites.size();
+ // 灏嗚疆璇㈤�変腑鐨勭珯鐐规斁鍦ㄦ渶鍓嶉潰
+ orderedSites.addAll(minTaskSites.subList(startIndex, minTaskSites.size()));
+ orderedSites.addAll(minTaskSites.subList(0, startIndex));
+ // 娣诲姞鍏朵粬绔欑偣锛堜换鍔℃暟鏇村鐨勶級
+ orderedSites.addAll(devList.stream()
+ .filter(dev -> dev.getInQty() > minInQty)
+ .collect(Collectors.toList()));
+ log.debug("浣跨敤杞鍒嗛厤绛栫暐锛岀珯鐐圭粍锛歿}锛岃疆璇㈣捣濮嬬储寮曪細{}", groupKey, startIndex);
+ } else if (minTaskSites.size() > 1 && enableRoundRobin && "random".equals(strategy)) {
+ // 闅忔満鍒嗛厤锛氬厛闅忔満鎺掑簭浠诲姟鏁版渶灏戠殑绔欑偣
+ List<BasDevp> shuffledMinSites = new ArrayList<>(minTaskSites);
+ Collections.shuffle(shuffledMinSites);
+ orderedSites.addAll(shuffledMinSites);
+ // 娣诲姞鍏朵粬绔欑偣锛堜换鍔℃暟鏇村鐨勶級
+ orderedSites.addAll(devList.stream()
+ .filter(dev -> dev.getInQty() > minInQty)
+ .collect(Collectors.toList()));
+ log.debug("浣跨敤闅忔満鍒嗛厤绛栫暐");
+ } else {
+ // 榛樿锛氭寜鍏ュ簱浠诲姟鏁版帓搴忥紙宸茬粡鎺掑簭濂戒簡锛�
+ orderedSites = devList;
+ }
+
+ // 渚濇妫�鏌ユ瘡涓珯鐐规槸鍚﹀湪鎼繍锛屾壘鍒扮涓�涓┖闂茬珯鐐瑰氨鍒嗛厤
+ String selectedSite = null;
+ List<Integer> checkIoTypes = Arrays.asList(101, 110); // 鍑哄簱鍒扮紦瀛樺尯鐨勪换鍔$被鍨�
+
+ for (BasDevp dev : orderedSites) {
+ String staNo = String.valueOf(dev.getDevNo());
+
+ // 妫�鏌ヨ绔欑偣鏄惁鏈夋鍦ㄦ惉杩愮殑鍚岀被鍨嬩换鍔�
+ List<Task> transportingTasks = taskService.selectList(
+ new EntityWrapper<Task>()
+ .eq("sta_no", staNo)
+ .eq("task_type", "agv")
+ .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愮姸鎬佺殑浠诲姟
+ .in("io_type", checkIoTypes)
+ );
+
+ if (!transportingTasks.isEmpty()) {
+ log.debug("缂撳瓨鍖虹珯鐐箋}鏈墈}涓鍦ㄦ惉杩愮殑鍑哄簱AGV浠诲姟锛屾鏌ヤ笅涓�涓珯鐐�",
+ staNo, transportingTasks.size());
+ continue; // 璇ョ珯鐐规鍦ㄦ惉杩愶紝妫�鏌ヤ笅涓�涓珯鐐�
+ }
+
+ // 鎵惧埌绗竴涓┖闂茬珯鐐癸紝鍒嗛厤
+ selectedSite = staNo;
+ log.info("鍑哄簱鍒扮紦瀛樺尯浠诲姟鎸夎鍒欏簲鍒嗛厤鍒扮珯鐐箋}锛岃绔欑偣绌洪棽锛屽垎閰嶆垚鍔�", staNo);
+ break;
+ }
+
+ // 濡傛灉鎵�鏈夌珯鐐归兘鍦ㄦ惉杩愶紝鍒欎笉鍒嗛厤绔欑偣
+ if (selectedSite == null) {
+ log.warn("鎵�鏈夌紦瀛樺尯绔欑偣閮芥湁姝e湪鎼繍鐨勫嚭搴撲换鍔★紝鏆備笉鍒嗛厤绔欑偣锛岀瓑寰呯┖闂�");
+ return null;
+ }
+
+ // 鏇存柊绔欑偣浠诲姟鏁帮紙鍑哄簱鍒扮紦瀛樺尯涔熶娇鐢╥n_qty瀛楁锛�
+ basDevpMapper.incrementInQty(Integer.parseInt(selectedSite));
+
+ return selectedSite;
+ }
@Transactional(rollbackFor = Exception.class)
public ReturnT<String> agvDoIn(Task wrkMast) {
diff --git a/src/main/java/com/zy/common/properties/AgvProperties.java b/src/main/java/com/zy/common/properties/AgvProperties.java
index 6e41f35..49d2e30 100644
--- a/src/main/java/com/zy/common/properties/AgvProperties.java
+++ b/src/main/java/com/zy/common/properties/AgvProperties.java
@@ -44,6 +44,11 @@
private SiteAllocationStrategy siteAllocation = new SiteAllocationStrategy();
/**
+ * 搴撲綅鍓嶇紑閰嶇疆
+ */
+ private LocationPrefix locationPrefix = new LocationPrefix();
+
+ /**
* whs_type鏄犲皠閰嶇疆鍐呴儴绫�
*/
@Data
@@ -73,6 +78,11 @@
* 绔欑偣鍒楄〃
*/
private List<String> stations = new ArrayList<>();
+
+ /**
+ * 渚ц竟鏄剧ず鍚嶇О锛堢敤浜庢棩蹇楀拰鎻愮ず淇℃伅锛屽"涓滀晶"銆�"瑗夸晶"锛�
+ */
+ private String displayName = "";
}
/**
@@ -106,6 +116,22 @@
}
/**
+ * 鑾峰彇涓滀晶鏄剧ず鍚嶇О
+ */
+ public String getEastDisplayName() {
+ return east != null && east.getDisplayName() != null && !east.getDisplayName().isEmpty()
+ ? east.getDisplayName() : "涓滀晶";
+ }
+
+ /**
+ * 鑾峰彇瑗夸晶鏄剧ず鍚嶇О
+ */
+ public String getWestDisplayName() {
+ return west != null && west.getDisplayName() != null && !west.getDisplayName().isEmpty()
+ ? west.getDisplayName() : "瑗夸晶";
+ }
+
+ /**
* 绔欑偣鍒嗛厤绛栫暐閰嶇疆鍐呴儴绫�
*/
@Data
@@ -125,4 +151,20 @@
*/
private boolean enableRoundRobin = true;
}
+
+ /**
+ * 搴撲綅鍓嶇紑閰嶇疆鍐呴儴绫�
+ */
+ @Data
+ public static class LocationPrefix {
+ /**
+ * CA鍓嶇紑锛氬彧鍋氬叆搴撶殑搴撲綅鍓嶇紑锛堥粯璁�"CA"锛�
+ */
+ private String inboundOnly = "CA";
+
+ /**
+ * WA鍓嶇紑锛氫細琚嚭搴撳垎閰嶇紦瀛樺尯鐨勫簱浣嶅墠缂�锛堥粯璁�"WA"锛�
+ */
+ private String cacheArea = "WA";
+ }
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 6f0ec48..ee79ffd 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -71,6 +71,7 @@
# 涓滀晶閰嶇疆
east:
robotGroup: "Group-001"
+ displayName: "涓滀晶" # 渚ц竟鏄剧ず鍚嶇О锛堢敤浜庢棩蹇楀拰鎻愮ず淇℃伅锛�
stations:
- "1001"
- "1003"
@@ -79,6 +80,7 @@
# 瑗夸晶閰嶇疆
west:
robotGroup: "Group-002"
+ displayName: "瑗夸晶" # 渚ц竟鏄剧ず鍚嶇О锛堢敤浜庢棩蹇楀拰鎻愮ず淇℃伅锛�
stations:
- "1042"
- "1044"
@@ -96,6 +98,12 @@
strategy: round-robin
# 鏄惁鍚敤骞冲潎鍒嗛厤锛氬綋澶氫釜绔欑偣浠诲姟鏁扮浉鍚屾椂锛宼rue=浣跨敤杞鍒嗛厤锛宖alse=鎬绘槸閫夋嫨绗竴涓�
enableRoundRobin: true
+ # 搴撲綅鍓嶇紑閰嶇疆
+ locationPrefix:
+ # CA鍓嶇紑锛氬彧鍋氬叆搴撶殑搴撲綅鍓嶇紑
+ inboundOnly: "CA"
+ # WA鍓嶇紑锛氫細琚嚭搴撳垎閰嶇紦瀛樺尯鐨勫簱浣嶅墠缂�
+ cacheArea: "WA"
# 瓒婂簱閰嶇疆
cross-dock:
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 52bfcfa..6457ad2 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -71,6 +71,7 @@
# 涓滀晶閰嶇疆
east:
robotGroup: "Group-001"
+ displayName: "涓滀晶" # 渚ц竟鏄剧ず鍚嶇О锛堢敤浜庢棩蹇楀拰鎻愮ず淇℃伅锛�
stations:
- "1001"
- "1003"
@@ -79,6 +80,7 @@
# 瑗夸晶閰嶇疆
west:
robotGroup: "Group-002"
+ displayName: "瑗夸晶" # 渚ц竟鏄剧ず鍚嶇О锛堢敤浜庢棩蹇楀拰鎻愮ず淇℃伅锛�
stations:
- "1042"
- "1044"
@@ -96,6 +98,12 @@
strategy: round-robin
# 鏄惁鍚敤骞冲潎鍒嗛厤锛氬綋澶氫釜绔欑偣浠诲姟鏁扮浉鍚屾椂锛宼rue=浣跨敤杞鍒嗛厤锛宖alse=鎬绘槸閫夋嫨绗竴涓�
enableRoundRobin: true
+ # 搴撲綅鍓嶇紑閰嶇疆
+ locationPrefix:
+ # CA鍓嶇紑锛氬彧鍋氬叆搴撶殑搴撲綅鍓嶇紑
+ inboundOnly: "CA"
+ # WA鍓嶇紑锛氫細琚嚭搴撳垎閰嶇紦瀛樺尯鐨勫簱浣嶅墠缂�
+ cacheArea: "WA"
# 瓒婂簱閰嶇疆
cross-dock:
--
Gitblit v1.9.1