From 11a590bda370ddad398b2c3ae68a218ee8d5a5d2 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 10 十一月 2025 15:41:55 +0800
Subject: [PATCH] 项目wms功能初始化
---
src/main/java/com/zy/common/service/CommonService.java | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 101 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 65775b0..cdc6420 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -18,7 +18,8 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* 璐ф灦鏍稿績鍔熻兘
@@ -50,6 +51,9 @@
private SlaveProperties slaveProperties;
@Autowired
private WrkDetlService wrkDetlService;
+
+ // 娣卞簱浣嶆帓
+ private static final List<Integer> deepLocRowList = Arrays.asList(1,4,5,8,9,12,13,16,17,20,21,24,25,28,29,32);
/**
* 鐢熸垚宸ヤ綔鍙�
@@ -91,6 +95,102 @@
return workNo;
}
+ /**
+ * 鑾峰彇搴撲綅---灞变笢瀹滃拰绾虹粐
+ *
+ * @param sourceSiteNo 鍏ュ簱婧愮珯鐐�
+ */
+ public StartupDto getLocNoBySdyhfz(Integer sourceSiteNo,int ioType) {
+
+ // 鑾峰彇鍙敤锛屽彲鍏ワ紝鏃犳姤璀﹀爢鍨涙満
+ List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("crn_err", 0).eq("in_enable", "Y"));
+ if (basCrnps.size() == 0) {
+ log.error(sourceSiteNo + "鍏ュ簱璇锋眰搴撲綅澶辫触:鍫嗗灈鏈烘姤璀�/鏃犲彲鐢�/鏃犲彲鍏�");
+ throw new CoolException(sourceSiteNo + "鍏ュ簱璇锋眰搴撲綅澶辫触:鍫嗗灈鏈烘姤璀�/鏃犲彲鐢�/鏃犲彲鍏�");
+ }
+
+ // 璁$畻璐熻浇鍧囪
+ List<CraneLoadInfo> craneInfos = new ArrayList<>();
+ // 璐熻浇鍧囪 鏉冮噸锛堝彲璋冩暣锛変换鍔″皯锛屽簱浣嶅崰鐢ㄥ皯鐨勫厛鍒嗛厤
+ double w1 = 0.6; // 浠诲姟鏁版潈閲�
+ double w2 = 0.4; // 浠撲綅鏉冮噸
+ for (BasCrnp basCrnp : basCrnps) {
+ // 鎸傝浇浠诲姟鏁�
+ int taskCount = locMastService.selectCount(new EntityWrapper<LocMast>().eq("crn_no", basCrnp.getCrnNo()).in("loc_sts", "S", "R"));
+ // 绌哄簱浣嶆暟閲�
+ int emptyCount = locMastService.selectCount(new EntityWrapper<LocMast>().eq("crn_no", basCrnp.getCrnNo()).eq("loc_sts", "O"));
+ // 搴撲綅鍗犵敤鐜�
+ double emptyLocOccupancy = (double) (800 - emptyCount) / 800;
+ CraneLoadInfo craneLoadInfo = new CraneLoadInfo();
+ craneLoadInfo.setCrnNo(basCrnp.getCrnNo());
+ craneLoadInfo.setTaskCount(taskCount);
+ craneLoadInfo.setOccupancy(emptyLocOccupancy);
+ craneInfos.add(craneLoadInfo);
+ }
+ // 鑾峰彇鏈�鍊�
+ int taskMax = craneInfos.stream().mapToInt(CraneLoadInfo::getTaskCount).max().orElse(0);
+ int taskMin = craneInfos.stream().mapToInt(CraneLoadInfo::getTaskCount).min().orElse(0);
+ double occMax = craneInfos.stream().mapToDouble(CraneLoadInfo::getOccupancy).max().orElse(0);
+ double occMin = craneInfos.stream().mapToDouble(CraneLoadInfo::getOccupancy).min().orElse(0);
+
+ // 閬垮厤鍒嗘瘝涓�0鐨勬儏鍐�
+ double taskRange = (taskMax - taskMin) == 0 ? 1 : (taskMax - taskMin);
+ double occRange = (occMax - occMin) == 0 ? 1 : (occMax - occMin);
+
+ // 璁$畻 伪
+ for (CraneLoadInfo info : craneInfos) {
+ double taskNorm = (info.getTaskCount() - taskMin) / taskRange;
+ double occNorm = (info.getOccupancy() - occMin) / occRange;
+ double alpha = w1 * taskNorm + w2 * occNorm;
+ info.setAlpha(alpha);
+ }
+
+ // 鎺掑簭锛毼� 瓒婂皬瓒婄┖闂�
+ craneInfos.sort(Comparator.comparingDouble(CraneLoadInfo::getAlpha));
+
+ // 瀵绘壘搴撲綅
+ LocMast locMast = null;
+ // 鏍规嵁鍏ュ簱绫诲瀷鍜屾簮绔欑偣鑾峰彇宸ヤ綔璺緞
+ StaDesc staDesc = null;
+
+ for (CraneLoadInfo craneLoadInfo : craneInfos) {
+ List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", craneLoadInfo.getCrnNo()).eq("loc_sts", "O").orderBy("lev1").orderBy("bay1").orderBy("row1"));
+ if (locMastList.size() <= 4) {
+ continue;
+ }
+ // 鍏堝彇娣卞簱浣�
+ Optional<LocMast> first = locMastList.stream().filter(o -> deepLocRowList.contains(o.getRow1())).findFirst();
+ // 娣卞簱浣嶉噷闈㈡病鏈変粠娴呭簱浣嶉噷闈㈠彇
+ locMast = first.orElseGet(() -> locMastList.get(0));
+
+ if (locMast != null) {
+ staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", ioType).eq("crn_no", locMast.getCrnNo()).eq("stn_no", sourceSiteNo));
+ if (staDesc == null) {
+ log.error("鑾峰彇宸ヤ綔璺緞寮傚父,绫诲瀷:{},鍫嗗灈鏈�:{},婧愮珯:{}", ioType, locMast.getCrnNo(), sourceSiteNo);
+ throw new CoolException("鑾峰彇宸ヤ綔璺緞寮傚父,绫诲瀷:" + ioType + ",鍫嗗灈鏈�:" + locMast.getCrnNo() + ",婧愮珯:" + sourceSiteNo);
+ }
+ break;
+ }
+ }
+
+ if (locMast == null) {
+ log.error("鍫嗗灈鏈哄墿浣欏簱浣嶄笉瓒筹細{}", craneInfos);
+ throw new CoolException("鍫嗗灈鏈轰笉鍙敤/搴撲綅涓嶈冻锛岃妫�鏌�");
+ }
+
+ // 鐢熸垚宸ヤ綔鍙�
+ int workNo = getWorkNo(0);
+ // 杩斿洖dto
+ StartupDto startupDto = new StartupDto();
+ startupDto.setWorkNo(workNo);
+ startupDto.setCrnNo(locMast.getCrnNo());
+ startupDto.setSourceStaNo(sourceSiteNo);
+ startupDto.setStaNo(staDesc.getCrnStn());
+ startupDto.setLocNo(locMast.getLocNo());
+
+ return startupDto;
+ }
+
//鎷嗙洏鏈哄绌烘澘鎵爜锛岄┍鍔ㄦ墭鐩樺悜鐮佸灈浣嶏紝涓嶅叆搴�
@Transactional
public StartupDto getScanBarcodeEmptyBoard() {
--
Gitblit v1.9.1