From 9fe1ec3afe8696c628d076d1f76686c4efc3012e Mon Sep 17 00:00:00 2001
From: zc <zyzc>
Date: 星期二, 21 十月 2025 10:49:55 +0800
Subject: [PATCH] 容器初始化功能优化
---
rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 252 insertions(+), 16 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
index b9668dc..9a56570 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
@@ -1,16 +1,14 @@
package com.vincent.rsf.server.api.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.vincent.rsf.framework.common.Arith;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.SpringUtils;
import com.vincent.rsf.framework.exception.CoolException;
-import com.vincent.rsf.server.api.controller.params.TaskInParam;
import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
import com.vincent.rsf.server.api.entity.dto.LocTypeDto;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.LocStsType;
-import com.vincent.rsf.server.manager.enums.TaskType;
+import com.vincent.rsf.server.manager.enums.TaskStsType;
import com.vincent.rsf.server.manager.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -19,8 +17,6 @@
import javax.annotation.PostConstruct;
-import javax.annotation.RegEx;
-import javax.annotation.Resource;
import java.util.List;
@Component
@@ -45,11 +41,11 @@
/**
* 鑾峰彇 娴呭簱浣嶅搴旂殑娣卞簱浣嶅彿
*/
- public static String getDeepLoc(SlaveProperties slaveProperties, String shallowLoc) {
+ public static String getDeepLoc(String shallowLoc) {
LocService locService = SpringUtils.getBean(LocService.class);
Loc shaLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc));
int row = shaLoc.getRow()-1;
- boolean contains = slaveProperties.getDoubleLocs().contains(row);
+ boolean contains = doubleLocs.contains(row);
Loc deepLoc = null;
if (contains) {
deepLoc = locService.getOne(new LambdaQueryWrapper<Loc>()
@@ -72,7 +68,7 @@
/**
* 鑾峰彇 娣卞簱浣嶅搴旂殑娴呭簱浣嶅彿
*/
- public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) {
+ public static String getShallowLoc(String deepLoc) {
LocService locService = SpringUtils.getBean(LocService.class);
Loc depLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, deepLoc));
int row;
@@ -81,7 +77,7 @@
} else {
row = depLoc.getRow();
}
- boolean contains = slaveProperties.getDoubleLocs().contains(row);
+ boolean contains = doubleLocs.contains(row);
Loc shallowLoc = null;
if (!contains) {
shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>()
@@ -104,23 +100,23 @@
/**
* 鍒ゆ柇鏄惁涓烘祬搴撲綅
*/
- public static boolean isShallowLoc(SlaveProperties slaveProperties, String locNo) {
- if (slaveProperties.isDoubleDeep()) {
+ public static boolean isShallowLoc(String locNo) {
+ if (isDoubleDeep) {
int row = getRow(locNo);
- return !slaveProperties.getDoubleLocs().contains(row);
+ return !doubleLocs.contains(row);
} else {
return false;
}
}
//鑾峰彇绔欑偣瀵瑰簲鐨勫簱绫诲瀷
- public static Long getAreaType(Integer sourceStaNo) {
+ public static Long getAreaType(String sourceStaNo) {
DeviceBindService rowLastnoService = SpringUtils.getBean(DeviceBindService.class);
List<DeviceBind> deviceBinds = rowLastnoService.list(new LambdaQueryWrapper<DeviceBind>());
for (DeviceBind deviceBind : deviceBinds) {
String[] staNoList = deviceBind.getStaList().split(";");
for (String staNo : staNoList) {
- if (staNo.equals(sourceStaNo.toString())) {
+ if (staNo.equals(sourceStaNo)) {
return deviceBind.getId();
}
}
@@ -213,8 +209,8 @@
}
public static String getCrnLoc() {
- SlaveProperties bean = SpringUtils.getBean(SlaveProperties.class);
- System.out.println(bean.getDoubleLocs());
+// SlaveProperties bean = SpringUtils.getBean(SlaveProperties.class);
+ System.out.println(doubleLocs);
return null;
}
@@ -233,4 +229,244 @@
return msgBuilder.toString();
}
}
+
+ /**
+ * 鑾峰彇鍫嗗灈鏈哄簱浣嶄俊鎭�
+ * @param deviceBind
+ * @param area
+ * @param sourceStaNo
+ * @param matnr
+ * @param batch
+ * @param locTypeDto
+ * @param times
+ * @param ioType 浣滀笟绫诲瀷锛�*蹇呬紶鍙傛暟锛�
+ * @return
+ */
+ public static InTaskMsgDto getLocNoCrn(DeviceBind deviceBind, Long area, String sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
+ DeviceBindService deviceBindService = SpringUtils.getBean(DeviceBindService.class);
+ DeviceSiteService deviceSiteService = SpringUtils.getBean(DeviceSiteService.class);
+ LocService locService = SpringUtils.getBean(LocService.class);
+ LocItemService locItemService = SpringUtils.getBean(LocItemService.class);
+
+ if (Cools.isEmpty(matnr)) { //鐗╂枡鍙�
+ matnr = "";
+ }
+ if (Cools.isEmpty(batch)) { //鎵规
+ batch = "";
+ }
+ // 鍒濆鍖栧弬鏁�
+ int channel = 0; //鍫嗗灈鏈哄彿
+ int nearRow = 0; //鏈�娴呭簱浣嶆帓
+ int curRow = 0; //鏈�娣卞簱浣嶆帓
+ int rowCount = 0; //杞杞
+ Loc loc = null; // 鐩爣搴撲綅
+
+ InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
+
+ int sRow = deviceBind.getStartRow();
+ int eRow = deviceBind.getEndRow();
+ int deviceQty = deviceBind.getDeviceQty();
+
+ // ===============>>>> 寮�濮嬫墽琛�
+ curRow = deviceBind.getCurrentRow();
+
+ //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
+ for (int i = times; i <= deviceQty * 2; i++) {
+ int[] locNecessaryParameters = LocUtils.LocNecessaryParameters(deviceBind, curRow, deviceQty);
+ curRow = locNecessaryParameters[1];
+ channel = locNecessaryParameters[2];
+ rowCount = locNecessaryParameters[0];
+ nearRow = locNecessaryParameters[3];
+ break;
+ }
+ if (nearRow == 0) {
+ throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
+ }
+ //鍏ュ簱闈犺繎鎽嗘斁
+ if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr)) {
+ if (nearRow != curRow) {
+ List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr));
+ for (LocItem locItem : locItems) {
+ Loc loc1 = locService.getById(locItem.getLocId());
+ if (LocUtils.isShallowLoc(loc1.getCode())) {
+ continue;
+ }
+ String shallowLocNo = LocUtils.getShallowLoc(loc1.getCode());
+ // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
+ Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo));
+ if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+ if (LocUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
+ loc = shallowLoc;
+ channel = shallowLoc.getChannel();
+ break;
+ }
+ }
+ }
+ }
+ }
+
+// // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
+// if (ioType == 10 && deviceBind.getEmptySimilar().equals("1")) {
+// List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+// .eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow).eq("whs_type", rowLastnoType.getType().longValue()));
+// if (!locMasts.isEmpty()) {
+// for (LocMast loc : locMasts) {
+// if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
+// continue;
+// }
+// String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
+// // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
+// LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+// if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
+// if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
+// if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
+// locMast = shallowLoc;
+// crnNo = locMast.getCrnNo();
+// break;
+// }
+// }
+// }
+// }
+// }
+// }
+ //鏌ユ壘璺緞
+ DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+ .eq(DeviceSite::getType, ioType)
+ .eq(DeviceSite::getSite, sourceStaNo)
+ .eq(DeviceSite::getChannel, channel)
+ );
+ if (Cools.isEmpty(deviceSite)) {
+ channel = 0;
+ } else {
+ inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
+ }
+
+ //鏇存柊褰撳墠鎺�
+ deviceBind.setCurrentRow(curRow);
+ deviceBindService.updateById(deviceBind);
+
+ // 寮�濮嬫煡鎵惧簱浣� ==============================>>
+
+ // 1.鎸夎鍒欐煡鎵惧簱浣�
+ if (Cools.isEmpty(loc) && channel != 0) {
+ List<Loc> locMasts = null;
+ locMasts = locService.list(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getRow, nearRow)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getType, locTypeDto.getLocType1())
+ .eq(Loc::getAreaId, area)
+ .orderByAsc(Loc::getLev)
+ .orderByAsc(Loc::getCol)
+ );
+ for (Loc locMast1 : locMasts) {
+ if (!LocUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
+ continue;
+ }
+ String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode());
+ if ((ioType == TaskStsType.GENERATE_IN.id && deviceBind.getBeSimilar().equals("1"))) {
+ //鐩镐技鐗╂枡鎵撳紑锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾病璐у氨鏀炬繁搴撲綅锛屾湁璐у氨涓嶆搷浣�
+ Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getCode, shallowLoc)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
+ );
+ if (!Cools.isEmpty(locMast2)) {
+ loc = locMast2;
+ break;
+ }
+ } else {
+ //鐩镐技鐗╂枡鍏抽棴锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾湁璐у氨鏀炬祬搴撲綅锛屾棤璐у氨涓嶆搷浣�
+ Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getCode, shallowLoc)
+ .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_F.type)
+ .eq(Loc::getAreaId, area)
+ );
+ if (!Cools.isEmpty(locMast2)) {
+ loc = locMast1;
+ break;
+ } else {
+ locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getCode, shallowLoc)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
+ );
+ if (!Cools.isEmpty(locMast2)) {
+ loc = locMast2;
+ break;
+ }
+ }
+ }
+ }
+ if (Cools.isEmpty(loc) && deviceBind.getBeSimilar().equals("1")) {
+ for (Loc locMast1 : locMasts) {
+ if (!LocUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
+ continue;
+ }
+ if (deviceBind.getBeSimilar().equals("1")) {
+ String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode());
+ Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getCode, shallowLoc)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
+ );
+ if (!Cools.isEmpty(locMast2)) {
+ loc = locMast2;
+ break;
+ } else {
+ locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getCode, shallowLoc)
+ .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_D.type)
+ .eq(Loc::getAreaId, area)
+ );
+ if (!Cools.isEmpty(locMast2)) {
+ loc = locMast1;
+ break;
+ }
+ }
+ } else {
+ if (!Cools.isEmpty(locMast1)) {
+ loc = locMast1;
+ break;
+ }
+ }
+ }
+ }
+ }
+ //鏌ヨ褰撳墠搴撲綅绫诲瀷绌哄簱浣� 灏忎簬5涓垯locmast = null
+ List<Loc> locTypeLocMasts = locService.list(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getChannel, channel)
+ .eq(Loc::getType, locTypeDto.getLocType1())
+ .eq(Loc::getAreaId, area)
+ );
+ if (null != locTypeLocMasts && locTypeLocMasts.size() <= 5) {
+ loc = null;
+ }
+ // 閫掑綊鏌ヨ
+ if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+ // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
+ if (times < rowCount * 2) {
+ times = times + 1;
+ return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType);
+
+ }
+ // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
+ if (locTypeDto.getLocType1() < 3) {
+ int i = locTypeDto.getLocType1() + 1;
+ locTypeDto.setLocType1(i);
+ return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType);
+ }
+ throw new CoolException("娌℃湁绌哄簱浣�");
+ }
+ String locNo = loc.getCode();
+
+ // 杩斿洖dto
+ inTaskMsgDto.setDeviceNo(channel);
+ inTaskMsgDto.setSourceStaNo(sourceStaNo);
+// inTaskMsgDto.setStaNo();
+ inTaskMsgDto.setLocNo(locNo);
+ return inTaskMsgDto;
+ }
+
+
}
--
Gitblit v1.9.1