From 534f548b031d42ccf20506f1810d57838cd94972 Mon Sep 17 00:00:00 2001 From: ytfl <ytfl@qq.com> Date: 星期六, 30 八月 2025 16:12:41 +0800 Subject: [PATCH] # --- src/main/java/com/zy/common/service/CommonService.java | 329 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 253 insertions(+), 76 deletions(-) diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java index 87de7d8..8a4732b 100644 --- a/src/main/java/com/zy/common/service/CommonService.java +++ b/src/main/java/com/zy/common/service/CommonService.java @@ -3,27 +3,23 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; -import com.core.common.Arith; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.result.FindLocNoAttributeVo; -import com.zy.asrs.entity.result.KeyValueVo; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.asrs.utils.VersionUtils; import com.zy.common.model.LocTypeDto; -import com.zy.common.model.Shelves; import com.zy.common.model.StartupDto; import com.zy.common.properties.SlaveProperties; +import com.zy.system.entity.Config; +import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; @@ -57,6 +53,8 @@ private SlaveProperties slaveProperties; @Autowired private WrkDetlService wrkDetlService; + @Autowired + private ConfigService configService; /** * 鐢熸垚宸ヤ綔鍙� @@ -125,34 +123,82 @@ */ @Transactional public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto) { - try { - Integer whsType = Utils.GetWhsType(sourceStaNo); - RowLastno rowLastno = rowLastnoService.selectById(whsType); - RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId()); - /** - * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱 2: 骞冲簱 3: 绌挎鏉� 4: 鍥涘悜杞� 5: AGV 0: 鏈煡 - */ - switch (rowLastnoType.getType()) { - case 1: - return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0); - case 2: - log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo); - break; - case 3: - log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo); - break; - case 4: - return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0); - case 5: - return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0); - default: - log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo); - break; - } + // try { + Integer whsType = Utils.GetWhsType(sourceStaNo); + RowLastno rowLastno = rowLastnoService.selectById(whsType); + RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId()); + /** + * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱 2: 骞冲簱 3: 绌挎鏉� 4: 鍥涘悜杞� 5: AGV 0: 鏈煡 + */ + switch (rowLastnoType.getType()) { + case 1: + Config crnSearchDetectTaskCountConfig = configService.selectConfigByCode("crnSearchDetectTaskCount"); + int crnSearchDetectTaskCount = Integer.parseInt(crnSearchDetectTaskCountConfig.getValue()); - } catch (Exception e) { - log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo); + Config applyInTaskTotalCountConfig = configService.selectConfigByCode("applyInTaskTotalCount"); + int applyInTaskTotalCount = Integer.parseInt(applyInTaskTotalCountConfig.getValue()); + int crnNo = 6; + boolean flag = true; + List<String> data = new ArrayList<>(); + while (crnNo > 0) { + List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() + .eq("loc_sts", "O") + .eq("crn_no", crnNo) + .eq("whs_type", rowLastnoType.getType().longValue()) + .eq("loc_type1", locTypeDto.getLocType1()) + .eq("loc_type2", locTypeDto.getLocType2()) + ); + if (locMasts.size() <= 15) { + log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}", JSON.toJSONString(locTypeDto)); + data.add(crnNo + "鍙锋病鏈夌┖搴撲綅;"); + } else { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo) + .in("io_type", 1, 10, 53, 57) + ); + if (wrkMasts.size() > crnSearchDetectTaskCount) { + log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒锛侊紒 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMasts.size(), crnSearchDetectTaskCount); + data.add(crnNo + "鍙峰叆搴撴帶鍒朵笂闄�;"); + continue; + } + List<WrkMast> wrkMastsList = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo) + .in("io_type", 1, 10, 53, 57, 101, 103, 107, 110) + ); + if (wrkMastsList.size() > applyInTaskTotalCount) { + log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒扮敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�(鍏ュ簱銆佸嚭搴�)锛侊紒锛� 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMastsList.size(), applyInTaskTotalCount); + data.add(crnNo + "鍙风敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�;"); + continue; + } + flag = false; + break; + } + crnNo--; + } + if (!flag) { + return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0); + } else { + log.info("鏁版嵁锛歿}", data); + throw new CoolException(data.toString()); + } + case 2: + log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo); + break; + case 3: + log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo); + break; + case 4: + return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0); + case 5: + return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0); + default: + log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo); + break; } + +// } catch (Exception e) { +// log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒欙紝{}", sourceStaNo, e.getMessage()); +// } return null; } @@ -204,18 +250,46 @@ } } + + Config crnSearchDetectTaskCountConfig = configService.selectConfigByCode("crnSearchDetectTaskCount"); + int crnSearchDetectTaskCount = Integer.parseInt(crnSearchDetectTaskCountConfig.getValue()); + + Config applyInTaskTotalCountConfig = configService.selectConfigByCode("applyInTaskTotalCount"); + int applyInTaskTotalCount = Integer.parseInt(applyInTaskTotalCountConfig.getValue()); + + Config crnSearchListConfig = configService.selectConfigByCode("123CrnSearchList"); + int crnSearchList = Integer.parseInt(crnSearchListConfig.getValue()); + //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿 for (int i = times; i < crnNumber * 2; i++) { int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber); curRow = locNecessaryParameters[1]; crnNo = locNecessaryParameters[2]; if (basCrnpService.checkSiteError(crnNo, true)) { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo) + .in("io_type", 1, 10, 53, 57) + ); + if (wrkMasts.size() > crnSearchDetectTaskCount) { + log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒锛侊紒 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMasts.size(), crnSearchDetectTaskCount); + continue; + } + + List<WrkMast> wrkMastsList = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo) + .in("io_type", 1, 10, 53, 57, 101, 103, 107, 110) + ); + if (wrkMastsList.size() > applyInTaskTotalCount) { + log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒扮敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�(鍏ュ簱銆佸嚭搴�)锛侊紒锛� 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMastsList.size(), applyInTaskTotalCount); + continue; + } + rowCount = locNecessaryParameters[0]; nearRow = locNecessaryParameters[3]; List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() .eq("row1", nearRow).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())); - int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100)); - if (locMasts.size() - crnCountO <= 2) { + int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).eq("io_type", 1)); + if (locMasts.size() - crnCountO <= 15) { log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times); nearRow = 0; times++; @@ -226,26 +300,106 @@ times++; } } + + //浼樺寲绯荤粺锛屾彁楂樻悳绱�1鍙峰爢鍨涙満娆℃暟 + if (crnNo == 2 || crnNo == 3) { + if (crnSearchList >= 2) { + if (basCrnpService.checkSiteError(1, true)) { + boolean flag = true; + //灏濊瘯鎵�1鍙峰集杞ㄥ爢鍨涙満搴撲綅 + crnNo = 1; + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo) + .in("io_type", 1, 10, 53, 57) + ); + if (wrkMasts.size() > crnSearchDetectTaskCount) { + log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒锛侊紒 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMasts.size(), crnSearchDetectTaskCount); + flag = false; + } + + List<WrkMast> wrkMastsList = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo) + .in("io_type", 1, 10, 53, 57, 101, 103, 107, 110) + ); + if (wrkMastsList.size() > applyInTaskTotalCount) { + log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒扮敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�(鍏ュ簱銆佸嚭搴�)锛侊紒锛� 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMastsList.size(), applyInTaskTotalCount); + flag = false; + } + + if (flag) { + List<Integer> nearRowList = new ArrayList<Integer>() {{ + add(4); + add(6); + add(3); + add(1); + }}; + for (Integer near : nearRowList) { + List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() + .eq("row1", near) + .eq("loc_sts", "O") + .eq("whs_type", rowLastnoType.getType().longValue()) + .eq("loc_type1", locTypeDto.getLocType1()) + .eq("loc_type2", locTypeDto.getLocType2()) + ); + int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).eq("io_type", 1)); + if (locMasts.size() - crnCountO <= 15) { + log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times); + } else { + nearRow = near; + break; + } + } + } + } + } + } + if (nearRow == 0) { if (locTypeDto.getLocType2() == 2) { //灏濊瘯鎵�1鍙峰集杞ㄥ爢鍨涙満搴撲綅 crnNo = 1; if (basCrnpService.checkSiteError(crnNo, true)) { - List<Integer> nearRowList = new ArrayList<Integer>(){{add(4);add(6);add(3);add(1);}}; - for (Integer near : nearRowList) { - List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() - .eq("row1", near) - .eq("loc_sts", "O") - .eq("whs_type", rowLastnoType.getType().longValue()) - .eq("loc_type1", locTypeDto.getLocType1()) - .eq("loc_type2", locTypeDto.getLocType2()) - ); - int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100)); - if (locMasts.size() - crnCountO <= 2) { - log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times); - }else { - nearRow = near; - break; + boolean flag = true; + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo) + .in("io_type", 1, 10, 53, 57) + ); + if (wrkMasts.size() > crnSearchDetectTaskCount) { + log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒锛侊紒 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMasts.size(), crnSearchDetectTaskCount); + flag = false; + } + + List<WrkMast> wrkMastsList = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo) + .in("io_type", 1, 10, 53, 57, 101, 103, 107, 110) + ); + if (wrkMastsList.size() > applyInTaskTotalCount) { + log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒扮敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�(鍏ュ簱銆佸嚭搴�)锛侊紒锛� 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMastsList.size(), applyInTaskTotalCount); + flag = false; + } + + if (flag) { + List<Integer> nearRowList = new ArrayList<Integer>() {{ + add(4); + add(6); + add(3); + add(1); + }}; + for (Integer near : nearRowList) { + List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() + .eq("row1", near) + .eq("loc_sts", "O") + .eq("whs_type", rowLastnoType.getType().longValue()) + .eq("loc_type1", locTypeDto.getLocType1()) + .eq("loc_type2", locTypeDto.getLocType2()) + ); + int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).eq("io_type", 1)); + if (locMasts.size() - crnCountO <= 15) { + log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times); + } else { + nearRow = near; + break; + } } } } @@ -253,9 +407,10 @@ if (nearRow == 0) { throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満"); } - }else { - throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満"); } +// else { +// throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満"); +// } } boolean signRule1 = false; @@ -317,7 +472,7 @@ .eq("loc_no", shallowLoc) .eq("loc_sts", "O") ); - if(shallowLocMast != null) { + if (shallowLocMast != null) { locMast = shallowLocMast; break; } @@ -403,40 +558,22 @@ StaDesc staDesc = null; BasDevp staNo = null; + if (Utils.BooleanWhsTypeSta(rowLastno, staDescId)) { - // 鑾峰彇鐩爣绔� - wrapper = new EntityWrapper<StaDesc>() - .eq("type_no", staDescId) - .eq("stn_no", sourceStaNo) - .eq("crn_no", crnNo); - staDesc = staDescService.selectOne(wrapper); - if (Cools.isEmpty(staDesc)) { - log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo); -// throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�"); - crnNo = 0; - } else { - staNo = basDevpService.selectById(staDesc.getCrnStn()); - if (!staNo.getAutoing().equals("Y")) { - log.error("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�"); -// throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�"); - crnNo = 0; - } - startupDto.setStaNo(staNo.getDevNo()); - } + // 鏇存柊搴撲綅鎺掑彿 if (Cools.isEmpty(locMast)) { rowLastno.setCurrentRow(curRow); rowLastnoService.updateById(rowLastno); } } - // 寮�濮嬫煡鎵惧簱浣� ==============================>> // 1.鎸夎鍒欐煡鎵惧簱浣� if (Cools.isEmpty(locMast) && crnNo != 0) { List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() .eq("row1", nearRow) - .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()) + .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()).ne("inv_wh", 1) .orderBy("lev1", true).orderBy("bay1", true)); for (LocMast locMast1 : locMasts) { if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { @@ -512,16 +649,54 @@ // locTypeDto.setLocType1((short)i); // return getLocNo(1, staDescId, sourceStaNo, matnr,batch,grade, locTypeDto, 0); // } - log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times); + log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿},{}", JSON.toJSONString(locTypeDto), times, moveCrnNo); throw new CoolException("娌℃湁绌哄簱浣�"); } - String locNo = locMast.getLocNo(); + if (crnNo == 2 || crnNo == 3) { + crnSearchList++; + configService.updateValue("123CrnSearchList", String.valueOf(crnSearchList)); + } + + if (crnNo == 1) { + configService.updateValue("123CrnSearchList", String.valueOf(0)); + } + //閽堝1鍙峰爢鍨涙満鎵撶殑琛ヤ竵锛岄槻姝㈡壘鍒板簱浣嶆椂锛屾壘鍒版渶娴呭簱浣� + String deepLoc2 = Utils.getDeepLoc2(slaveProperties, locMast.getLocNo()); + if (!Cools.isEmpty(deepLoc2)) { + LocMast locMastNew = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", locMast.getCrnNo()) + .eq("loc_no", deepLoc2).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())); + if (!Cools.isEmpty(locMastNew)) { + locMast = locMastNew; + } + } + + + // 鑾峰彇鐩爣绔� + wrapper = new EntityWrapper<StaDesc>() + .eq("type_no", staDescId) + .eq("stn_no", sourceStaNo) + .eq("crn_no", locMast.getCrnNo()); + staDesc = staDescService.selectOne(wrapper); + if (Cools.isEmpty(staDesc)) { + log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo); +// throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�"); + crnNo = 0; + } else { + staNo = basDevpService.selectById(staDesc.getCrnStn()); + if (!staNo.getAutoing().equals("Y")) { + log.error("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�"); +// throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�"); + crnNo = 0; + } + startupDto.setStaNo(staNo.getDevNo()); + } + String locNo = locMast.getLocNo(); // 鐢熸垚宸ヤ綔鍙� int workNo = getWorkNo(0); // 杩斿洖dto startupDto.setWorkNo(workNo); - startupDto.setCrnNo(crnNo); + startupDto.setCrnNo(locMast.getCrnNo()); startupDto.setSourceStaNo(sourceStaNo); startupDto.setLocNo(locNo); return startupDto; @@ -903,6 +1078,8 @@ .eq("row1", nearRow) .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()) .orderBy("lev1", true).orderBy("bay1", true));//鏈�娴呭簱浣� + //System.out.println(nearRow); + //System.out.println(curRow); for (LocMast locMast1 : locMasts) { if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { continue; -- Gitblit v1.9.1