From c65db22f67af8018ae7105ea00d8743e42835e13 Mon Sep 17 00:00:00 2001 From: ZY <zc857179121@qq.com> Date: 星期六, 29 三月 2025 15:52:09 +0800 Subject: [PATCH] 1 --- src/main/java/com/zy/common/service/AgvCommonService.java | 482 +++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 413 insertions(+), 69 deletions(-) diff --git a/src/main/java/com/zy/common/service/AgvCommonService.java b/src/main/java/com/zy/common/service/AgvCommonService.java index f8c55c2..aba0aae 100644 --- a/src/main/java/com/zy/common/service/AgvCommonService.java +++ b/src/main/java/com/zy/common/service/AgvCommonService.java @@ -5,10 +5,14 @@ import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; +import com.zy.asrs.utils.LocUtils; +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 java.util.ArrayList; import java.util.List; /** @@ -34,6 +38,12 @@ @Autowired AgvBasDevpService agvBasDevpService; + @Autowired + private ConfigService configService; + + @Autowired + private LocUtils locUtils; + public int getWorkNo(Integer wrkMk) { AgvWrkLastno wrkLastno = agvWrkLastnoService.selectById(wrkMk); if (Cools.isEmpty(wrkLastno)) { @@ -45,24 +55,24 @@ int sNo = wrkLastno.getSNo(); int eNo = wrkLastno.getENo(); - workNo = workNo>=eNo ? sNo : workNo+1; + workNo = workNo >= eNo ? sNo : workNo + 1; while (true) { AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); if (null != wrkMast) { - workNo = workNo>=eNo ? sNo : workNo+1; + workNo = workNo >= eNo ? sNo : workNo + 1; } else { break; } } - if (workNo > 0){ + if (workNo > 0) { wrkLastno.setWrkNo(workNo); agvWrkLastnoService.updateById(wrkLastno); } if (workNo == 0) { throw new CoolException("鐢熸垚宸ヤ綔鍙峰け璐ワ紝璇疯仈绯荤鐞嗗憳"); } else { - if (agvWrkMastService.selectById(workNo)!=null) { + if (agvWrkMastService.selectById(workNo) != null) { throw new CoolException("鐢熸垚宸ヤ綔鍙�" + workNo + "鍦ㄥ伐浣滄。涓凡瀛樺湪"); } } @@ -71,9 +81,10 @@ /** * 妫�绱㈠簱浣嶅彿 + * * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿 */ - public AgvLocMast getLocNo(int type, int floor) { + public AgvLocMast getLocNo(int type, int floor, boolean isEmpty, boolean isCurrLev) { // 鐩爣搴撲綅 AgvLocMast locMast = null; // if(Cools.isEmpty(agvWaitPakinList)){ @@ -111,48 +122,229 @@ // } - // 寮�濮嬫煡鎵惧簱浣� ==============================>> - locMast = getLocNoRule(type,floor); - if (locMast != null) { - return locMast; + try { + // 寮�濮嬫煡鎵惧簱浣� ==============================>> + // 绠卞3鍏ュ簱 +// if (type == 3 && factory != null) { +// //浼樺厛鍏ュ簱鍚稿1妤硷紝鍦�2妤� +// locMast = locUtils.getLocNoRuleByFactory(type, isEmpty, factory); +// } else if (type == 6) { +// //鍗婃垚鍝佺澹冲叆搴擄紝鍏ュ埌鍚稿2妤肩殑370涓簱浣嶉噷 +// locMast = locUtils.getLocNoRuleByFloor(type, floor, isEmpty, 2); +// } else { +// //涓嶅姩杩欎釜閫昏緫 + if (type == 6) { + locMast = locUtils.getLocNoRuleByFloor(type, floor); + } else { + locMast = getLocNoRule(type, floor, isEmpty, isCurrLev); + } +// } + if (locMast != null) { + return locMast; + } + } catch (Exception e) { + throw new CoolException(floor + "妤硷紱璇ユゼ灞傛病鏈夌┖搴撲綅===>" + e.getMessage()); } //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父 - throw new CoolException("璇ユゼ灞傛病鏈夌┖搴撲綅"); + throw new CoolException(floor + "妤硷紱璇ユゼ灞傛病鏈夌┖搴撲綅"); + } + + /** + * 搴撲綅瑙勫垯鏌ユ壘锛屼細棰勭暀20涓簱浣� + */ + public synchronized AgvLocMast getLocByLocRule20(int type, int floor, String factory, boolean flag) { + + try { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + List<AgvLocMast> agvLocMasts = new ArrayList<>(); + //涓嶆槸绌烘澘浼樺厛鎵�2灞� + if (Cools.isEmpty(factory)) { + wrapper.eq("floor", floor).orderBy("lev1", true); + } else { + //B鏄簩鍘傦紝G鏄笁鍘� + if (factory.equals("B")) { + wrapper.eq("floor", floor).orderBy("lev1", false).orderBy("row1", flag); + + } else { + wrapper.eq("floor", floor).orderBy("lev1", true); + + } + } + int num = 20; + Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM")); + if (config != null && !Cools.isEmpty(config.getValue())) { + num = Integer.parseInt(config.getValue()); + } + agvLocMasts = agvLocMastService.selectList(wrapper); + int er = 0; + for (AgvLocMast agvLocMast : agvLocMasts) { + if (agvLocMast.getLev1() == 2) { + er++; + } + } + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + if (agvLocMast1.getLev1() == 2) { + if (er > num) { + return agvLocMast1; + } + } else { + return agvLocMast1; + } + + } + } + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } catch (Exception e) { + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } + + + } + + /** + * 搴撲綅瑙勫垯鏌ユ壘 + */ + public synchronized AgvLocMast getLocByLocRule(int type, int floor, String factory, boolean flag) { + + try { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + List<AgvLocMast> agvLocMasts = new ArrayList<>(); + //涓嶆槸绌烘澘浼樺厛鎵�2灞� + if (Cools.isEmpty(factory)) { + wrapper.eq("floor", floor).orderBy("lev1", true); + } else { + //B鏄簩鍘傦紝G鏄笁鍘� + switch (factory) { + case "B": + wrapper.eq("floor", floor).orderBy("lev1", false).orderBy("row1", flag); + break; + case "G": + wrapper.eq("floor", floor).orderBy("lev1", true); + break; + default: + wrapper.eq("floor", floor).orderBy("lev1", true); + break; + } + } + + agvLocMasts = agvLocMastService.selectList(wrapper); + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + return agvLocMast1; + } + } + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } catch (Exception e) { + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } + + + } + + /** + * 搴撲綅瑙勫垯鏌ユ壘 + */ + public AgvLocMast getLocByLocRule(int type, int floor, int lev1) { + + try { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + wrapper.eq("floor", floor).eq("lev1", lev1).orderBy("bay1", false); + List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + return agvLocMast1; + } + } + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } catch (Exception e) { + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } + } + + /** + * 搴撲綅瑙勫垯鏌ユ壘 + */ + public AgvLocMast getLocByLocRule2(int type, int floor, int lev1) { + + try { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + wrapper.eq("floor", floor).eq("lev1", lev1); + List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); + if (lev1 == 2) { + int num = 20; + Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM")); + if (config != null && !Cools.isEmpty(config.getValue())) { + num = Integer.parseInt(config.getValue()); + } + int er = agvLocMasts.size(); + if (er < num) { + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�20"); + } + } + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + return agvLocMast1; + } + } + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } catch (Exception e) { + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } } /* - 搴撲綅瑙勫垯鏌ユ壘 - */ - private AgvLocMast getLocByLocRule(AgvWaitPakin agvWaitPakin, int floor) { - List<AgvLocRule> agvLocRules = null; - agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>() - .eq("matnr", agvWaitPakin.getMatnr()) - .eq("batch", agvWaitPakin.getModel()) - .eq("floor", floor)); - if(Cools.isEmpty(agvLocRules)){ - agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>() - .eq("matnr", agvWaitPakin.getMatnr()) - .eq("floor", floor)); + 搴撲綅瑙勫垯鏌ユ壘 + */ + public AgvLocMast getLocByFloorAndLev1(int type, int floor, int lev1) { + + try { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + wrapper.eq("floor", floor).eq("lev1", lev1); + + List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + return agvLocMast1; + } + } + return null; + } catch (Exception e) { + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); } - if(Cools.isEmpty(agvLocRules)){ + } + + /* +搴撲綅瑙勫垯鏌ユ壘 + */ + public AgvLocMast getLocByFloor(int type, int floor) { + try { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + wrapper.eq("floor", floor).orderBy("lev1", false); + + List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + return agvLocMast1; + } + } + return null; + } catch (Exception e) { return null; } - - for (AgvLocRule agvLocRule : agvLocRules) { - EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); - wrapper.between("row1",agvLocRule.getRowBeg(),agvLocRule.getRowEnd()) - .between("bay1",agvLocRule.getBayBeg(),agvLocRule.getBayEnd()) - .between("lev1",agvLocRule.getLevBeg(),agvLocRule.getLevEnd()) - .eq("floor",floor) - .eq("loc_sts","O"); - AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper); - if(!Cools.isEmpty(agvLocMast)){ - return agvLocMast; - } - } - - return null; } /* @@ -189,7 +381,7 @@ /* 闈犺繎鎽嗘斁瑙勫垯 */ - private AgvLocMast getLocByProximityRule(){ + private AgvLocMast getLocByProximityRule() { //to do return null; } @@ -197,30 +389,30 @@ /* 鏍规嵁鐗╂枡棰戠巼鏌ユ壘 */ - private AgvLocMast getLocByFre(int fre, int floor){ - if(floor == 1){ - if(fre == 1){ + private AgvLocMast getLocByFre(int fre, int floor) { + if (floor == 1) { + if (fre == 1) { return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() - .eq("floor",floor) - .eq("loc_sts","O") - .orderBy("bay1",false)); - }else{ + .eq("floor", floor) + .eq("loc_sts", "O") + .orderBy("bay1", false)); + } else { return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() - .eq("floor",floor) - .eq("loc_sts","O") + .eq("floor", floor) + .eq("loc_sts", "O") .orderBy("bay1")); } } - if(floor == 3){ - if(fre == 1){ + if (floor == 3) { + if (fre == 1) { return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() - .eq("floor",floor) - .eq("loc_sts","O") - .orderBy("row1",false)); - }else{ + .eq("floor", floor) + .eq("loc_sts", "O") + .orderBy("row1", false)); + } else { return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() - .eq("floor",floor) - .eq("loc_sts","O") + .eq("floor", floor) + .eq("loc_sts", "O") .orderBy("row1")); } } @@ -228,15 +420,108 @@ throw new CoolException("鎼滅储搴撲綅鏃讹紝妤煎眰鍑洪敊銆�"); } - //闅忔満鍙栦竴涓揣浣� - private AgvLocMast getLocNoRule(int type,int floor){ - return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() - .eq("loc_sts","O") - .eq("floor",floor) - .eq("loc_type1",type)); + public AgvLocMast getLocNoOnXiSuer(int type, int floor) { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + wrapper.eq("floor", floor).orderBy("lev1", false); + List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); + if (Cools.isEmpty(agvLocMasts)) { + return null; + } else { + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + return agvLocMast1; + } + } + } + return null; } + + public AgvLocMast getLocNoOnXiSuer20(int type, int floor) { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + wrapper.eq("floor", floor).eq("lev1", 2); + List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); + if (Cools.isEmpty(agvLocMasts)) { + return null; + } else { + int num = 15; + Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_6_NUM")); + if (config != null && !Cools.isEmpty(config.getValue())) { + num = Integer.parseInt(config.getValue()); + } + if (agvLocMasts.size() > num) { + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + return agvLocMast1; + } + } + } + } + return null; + } + + + //闅忔満鍙栦竴涓揣浣� + private AgvLocMast getLocNoRule(int type, int floor, boolean isEmpty, boolean isCurrLev) { + Boolean orderBy = false; + int levCount = 0; + int times = 1; + if (floor == 1 || floor >= 4) { + if (floor >= 4) { + floor = 1; + } + orderBy = true; + levCount = 2; + } else { + orderBy = false; + levCount = 1; + } + try { + EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); + wrapper.eq("loc_sts", "O").eq("loc_type1", type); + List<AgvLocMast> agvLocMasts = new ArrayList<>(); + //涓嶆槸绌烘澘浼樺厛鎵�2灞� + if (isEmpty) { + wrapper.eq("floor", floor).eq("lev1", 1); + } else { + if (isCurrLev) { + wrapper.eq("floor", floor).eq("lev1", 1); + } else { + wrapper.eq("floor", floor).orderBy("lev1", !orderBy); + } + } + + + //褰撶洰鏍囧簱浣嶆槸1妤� + if (floor == 1) { + wrapper.orderBy("loc_no", false); + } + agvLocMasts = agvLocMastService.selectList(wrapper); + //鏄惁褰撳墠灞� + if (Cools.isEmpty(agvLocMasts) && !isCurrLev) { + if (times < levCount) { + times++; + return getLocNoRule(type, floor, isEmpty, isCurrLev); + } + } + for (AgvLocMast agvLocMast : agvLocMasts) { + AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); + if (agvLocMast1.getLocSts().equals("O")) { + return agvLocMast1; + } + } + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } catch (Exception e) { + throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�"); + } + } + /** * 妫�绱㈠簱浣嶅彿 + * * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿 */ public AgvBasDevp getDevpNo(int type, int floor) { @@ -244,22 +529,81 @@ AgvBasDevp basDevp = null; // 寮�濮嬫煡鎵惧簱浣� ==============================>> - basDevp = getDevpNoRule(type,floor); + basDevp = getDevpNoRule(type, floor); if (basDevp != null) { return basDevp; } //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父 - throw new CoolException("璇ユゼ灞傛病鏈夌┖鎺ラ┏浣�"); + throw new CoolException("妤煎眰鍙凤細" + floor + "锛涜妤煎眰娌℃湁绌烘帴椹充綅"); + } + + + /** + * 妫�绱㈠簱浣嶅彿 + * + * @return locNo 妫�绱㈣嚜鍔ㄦ帴椹充綅 + */ + public AgvBasDevp getDevpNo(int type, int floor, String auto) { + // 鐩爣搴撲綅 + AgvBasDevp basDevp = null; + + // 寮�濮嬫煡鎵惧簱浣� ==============================>> + basDevp = getDevpNoAuto(type, floor, auto); + if (basDevp != null) { + return basDevp; + } + + //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父 + throw new CoolException("妤煎眰鍙凤細" + floor + "锛涜妤煎眰娌℃湁绌烘帴椹充綅"); + } + + /** + * 妫�绱㈠簱浣嶅彿 + * + * @return locNo 妫�绱㈠彲鍏ユ帴椹充綅 + */ + public AgvBasDevp getDevpNo(int type, int floor, String auto, String inEable) { + // 鐩爣搴撲綅 + AgvBasDevp basDevp = null; + + // 寮�濮嬫煡鎵惧簱浣� ==============================>> + basDevp = getDevpNoInEable(type, floor, inEable); + if (basDevp != null) { + return basDevp; + } + + //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父 + return basDevp; } //闅忔満鍙栦竴涓揣浣� - private AgvBasDevp getDevpNoRule(int type,int floor){ + private AgvBasDevp getDevpNoRule(int type, int floor) { return agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() - .eq("loc_sts","O") - .eq("floor",floor) - .eq("loc_type1",type) - .like("dev_no","DB")); + .eq("loc_sts", "O") + .eq("floor", floor) + .eq("loc_type1", type) + .like("dev_no", "DB")); + } + + //闅忔満鍙栦竴涓揣浣� + private AgvBasDevp getDevpNoAuto(int type, int floor, String auto) { + return agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() + .eq("loc_sts", "O") + .eq("floor", floor) + .eq("loc_type1", type) + .eq("autoing", auto) + .like("dev_no", "DB")); + } + + //闅忔満鍙栦竴涓揣浣� + private AgvBasDevp getDevpNoInEable(int type, int floor, String inEable) { + return agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() + .eq("loc_sts", "O") + .eq("floor", floor) + .eq("loc_type1", type) + .eq("in_enable", inEable) + .like("dev_no", "DB")); } } -- Gitblit v1.9.1