From 2d81e5e2ff8de4e97633e86b5605b6c787660cd5 Mon Sep 17 00:00:00 2001 From: lty <876263681@qq.com> Date: 星期五, 20 六月 2025 12:58:22 +0800 Subject: [PATCH] #工作档手动完成 --- src/main/java/com/zy/asrs/task/handler/GhjtHandler.java | 335 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 321 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java index a3f5e4b..c54c985 100644 --- a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java @@ -4,16 +4,19 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; -import com.zy.asrs.entity.LocDetl; -import com.zy.asrs.entity.LocMast; -import com.zy.asrs.entity.WrkDetl; -import com.zy.asrs.entity.WrkMast; +import com.zy.asrs.entity.*; import com.zy.asrs.mapper.*; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.WorkService; import com.zy.asrs.service.WrkDetlService; +import com.zy.asrs.utils.Utils; import com.zy.common.constant.MesConstant; +import com.zy.common.model.StartupDto; +import com.zy.common.properties.SlaveProperties; +import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; +import com.zy.system.entity.Config; +import com.zy.system.mapper.ConfigMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,6 +33,7 @@ */ @Slf4j @Service +@Transactional public class GhjtHandler { @Resource @@ -56,7 +60,21 @@ @Resource private WorkService workService; - @Transactional + @Resource + private ConfigMapper configMapper; + + @Autowired + private SlaveProperties slaveProperties; + + @Resource + private CommonService commonService; + + // 鍫嗗灈鏈哄搴斾竴妤煎嚭搴撶珯鐐� + private static final int[] oneFloorOutSite = new int[]{0,3002,3003,3006,3008,3009,3012}; + + // 鍫嗗灈鏈哄搴斾竴妤煎叆搴撶珯鐐� + private static final int[] oneFloorInSite = new int[]{0,3001,3004,3005,3007,3010,3011}; + public void startCkrwPushGwcs(WrkMast wrkMast) { // 鑾峰彇璇锋眰澶� @@ -92,6 +110,10 @@ } else if (wrkMast.getIoType() == 3) { // 淇敼宸ヤ綔涓绘。鐘舵�� wrkMast.setWrkSts(15L); + wrkMast.setModiTime(new Date()); + } else if(wrkMast.getIoType() == 12) { // 璺ㄥ贩閬撹浆绉� + wrkMast.setWrkSts(1L); // 鐘舵�佹敼涓�1.鐢熸垚鍏ュ簱id + wrkMast.setCrnNo(Arrays.binarySearch(oneFloorInSite,wrkMast.getStaNo()));// 鍫嗗灈鏈鸿浆鎹负鍏ュ簱鐨勫爢鍨涙満 wrkMast.setModiTime(new Date()); } wrkMastMapper.updateById(wrkMast); @@ -156,11 +178,6 @@ } else if (wrkMast.getIoType() == 103 && (wrkMast.getStaNo() == 3077 || wrkMast.getStaNo() == 3106)) { // 涓ょ鍑轰竴绠憋紝闇�妗佹灦鐞嗚揣 // 閮借鍏堝幓鐞嗚揣 flag = 2; -// if (wrkDetls.size() == 1) { // 涓�鍗疯创鏍囧嚭搴� -// flag = 4; -// } else { // 澶氬嵎鐩存帴鍑哄簱 -// -// } } return flag; } @@ -195,7 +212,7 @@ String staLocNo = null; Integer wrkCount = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i)); if(wrkCount > 0) { - log.warn("{}鍙峰爢鍨涙満宸插瓨鍦ㄤ换鍔�",i); +// log.warn("{}鍙峰爢鍨涙満宸插瓨鍦ㄤ换鍔�",i); continue; } // 鏍规嵁鍫嗗灈鏈哄彿鏌ヨ鍒板搴旂殑娣卞簱浣嶅拰娴呭簱浣� 娣卞簱浣�4*n-3鍜�4*n 娴呭簱浣�4*n-2鍜�4*n-1 @@ -224,16 +241,16 @@ } // 娌℃湁鎵惧埌婧愬簱浣� if (sourceLocNo == null) { - log.warn("娌℃湁鎵惧埌婧愬簱浣�,鍫嗗灈鏈猴細{}",i); +// log.warn("娌℃湁鎵惧埌婧愬簱浣�,鍫嗗灈鏈猴細{}",i); continue; } // 瀵绘壘涓�涓璐х殑鐩爣搴撲綅锛屽厛娣卞悗娴� List<LocMast> locMasts1 = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", i).in("row1", s1, s2) - .le("bay1", columnNum)); + .le("bay1", columnNum).orderBy("lev1,bay1,row1")); if (locMasts1.isEmpty()) { // 娣卞簱浣嶄负绌轰簡锛屽彇娴呭簱浣� List<LocMast> locMasts2 = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", i).in("row1", q1, q2) - .le("bay1", columnNum)); + .le("bay1", columnNum).orderBy("lev1,bay1,row1")); if (!locMasts2.isEmpty()) { staLocNo = locMasts2.get(0).getLocNo(); } @@ -257,4 +274,294 @@ } } + + public void autoMoveLoc(List<OrderDetl> orderDetlList) { + + // 鍒ゆ柇鏄惁宸茬粡鏈夋墽琛岀殑绉诲簱浠诲姟 + Integer count = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().in("io_type", 11, 12)); + if (count > 0) { + return; + } + + OrderDetl detl = null; // 瑕佺Щ搴撶殑鏄庣粏 + String staLoc = null; // 绉诲簱鐩爣搴撲綅 + + // 浠庡緟绉诲簱浣嶅垪琛ㄤ腑鍏堟祬鍚庢繁鑾峰彇涓�涓緟绉诲簱浣� + Optional<OrderDetl> any = orderDetlList.stream().filter(orderDetl -> Utils.isShallowLoc(slaveProperties,orderDetl.getSpecs())).findAny(); + + if (any.isPresent()){ + detl = any.get(); + } + // 鍓╀笅鐨勫簲璇ラ兘鏄繁搴撲綅锛岃幏鍙栫涓�涓� + if (detl == null) { + detl = orderDetlList.get(0); + // 瀵瑰簲娴呭簱浣嶆湁璐э紝鍦ㄥ爢鍨涙満鍑哄簱鐨勬椂鍊欎細妫�娴嬪埌锛屽湪閭i噷鐢熸垚绉诲簱浠诲姟 + } + + // 鑾峰彇澶囪揣鍖洪厤缃� + Config config = configMapper.selectConfigByCode("auto_stock_up"); + if (config == null) { + return; + } + // 澶囪揣鍙栨槸鍓嶅嚑鍒� + int bay1 = Integer.parseInt(config.getValue()); + // 鎸囧畾鐨勭洰鏍囧簱浣� + String model = detl.getModel(); + + // 鎸囧畾鐩爣搴撲綅 + if (!Cools.isEmpty(model)) { + // 鐩爣搴撲綅鏄繁搴撲綅 + if (Utils.isDeepLoc(slaveProperties,model)) { + // 鐩爣搴撲綅 + LocMast locMast2 = locMastMapper.selectById(model); + if (locMast2 == null || !locMast2.getLocSts().equals("O")) { + log.error("鎸囧畾鐨勭洰鏍囧簱浣嶃�恵}銆戠姸涓嶄负绌�", model); + return; + } + // 鑾峰彇鍒板搴旀祬搴撲綅 + String shallowLoc = Utils.getShallowLoc(slaveProperties, model); + LocMast locMast = locMastMapper.selectById(shallowLoc); + // 娴呭簱浣嶆湁璐� + if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { + log.error("閫夋嫨鐨勬繁搴撲綅銆恵}銆戯紝浣嗘槸娴呭簱浣嶃�恵}銆戞湁璐�", model, locMast.getLocNo()); + return; + } + // 閬垮紑澶囪揣鍖� + if (Utils.getBay(model) <= bay1) { + log.error("鎸囧畾鐨勭洰鏍囧簱浣嶃�恵}銆戝湪澶囪揣鍖猴紝涓嶈兘杞Щ", model); + return; + } + } + // 娣卞簱浣嶆娴嬮�氳繃锛屾垨鑰呮槸娴呭簱浣� + staLoc = model; + } else if ( detl.getBeBatch() != null) { // 鎸囧畾鐩爣宸烽亾 + // 鐩爣宸烽亾 + Integer beBatch = detl.getBeBatch(); + // 浠庡贩閬撻噷闈㈠厛娣卞悗娴呭彇涓�涓┖搴撲綅锛屼笉瑕佸崰鐢ㄥ璐у尯 + List<LocMast> locMasts = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("crn_no", beBatch).eq("loc_sts", "O").gt("bay1", bay1)); + if (locMasts.isEmpty()) { + log.error("鎸囧畾宸烽亾銆恵}銆戞病鏈夎兘绉诲簱鐨勭┖搴撲綅浜�",beBatch); + return; + } + // 鍏堣繃婊ゅ嚭娣卞簱浣� + Optional<LocMast> a = locMasts.stream().filter(locMast -> Utils.isDeepLoc(slaveProperties,locMast.getLocNo())).findAny(); + if (a.isPresent()){ + staLoc = a.get().getLocNo(); + // 鑾峰彇鍒板搴旀祬搴撲綅 + String shallowLoc = Utils.getShallowLoc(slaveProperties, staLoc); + LocMast locMast = locMastMapper.selectById(shallowLoc); + // 娴呭簱浣嶆湁璐� + if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { + log.error("鎸囧畾鐨勭洰鏍囧贩閬撴繁搴撲綅銆恵}銆戯紝浣嗘槸娴呭簱浣嶃�恵}銆戞湁璐�",staLoc,locMast.getLocNo()); + return; + } + } + // 娣卞簱浣嶆病鏈夊垯鍙栨祬搴撲綅 + if (staLoc == null) { + staLoc = locMasts.get(0).getLocNo(); + } + } else { + log.error("鐩爣搴撲綅鎴栫洰鏍囧贩閬撴湁璇細{}",detl); + return; + } + + // 鐢熸垚璺ㄥ贩閬撶Щ搴撲换鍔� + workService.autoLocMove(detl.getOrderNo(),detl.getSpecs(),staLoc,29L); + + // 鏇存柊鍗曟嵁鏄庣粏绉诲簱鐘舵�佷负绉诲簱涓� + detl.setDanger(1); + if (detl.getBeBatch() != null) { + detl.setModel(staLoc); // 琛ュ厖鐩爣搴撲綅 + } + orderDetlMapper.updateById(detl); + // 鏇存柊鍗曟嵁鐘舵�佷负2澶勭悊涓� + orderMapper.updatePendingSettleByOrderNo(detl.getOrderNo(),2L); + } + + /** + * 缁欐寚瀹氭鏋剁敓鎴愮悊璐т换鍔�,鎸夎鍒欏鎵惧埌鑳界悊璐х殑涓や釜搴撲綅 + * 1.鑳界悊璐х殑閮芥槸涓�绠变竴鍗风殑 + * 2.瑙勫垯锛氭湪绠卞瀷鍙风浉鍚�-绠¤姱绫诲瀷鐩稿悓-瀹炴祴瀹藉箙鐩稿悓-鐢熺當鍘氬害鐩稿悓-鍒嗗垏涓嬫枡鏃堕棿鐩歌繎 + */ + public void autoTallyGoods(int flag) { + + // 鑾峰彇澶囪揣鍖洪厤缃� + Config config = configMapper.selectConfigByCode("auto_stock_up"); + if (config == null) { + throw new CoolException("鐞嗚揣鑾峰彇澶囪揣鍖洪厤缃敊璇紒锛侊紒"); + } + // 鍓嶅嚑鍒楁槸澶囪揣鍖� + int columnNum = Integer.parseInt(config.getValue()); + + // 瀵绘壘涓�绠变竴鍗风殑锛屾病鏈夌悊璐х殑锛屼笉鍦ㄥ璐у尯鐨勭墿鏂欐槑缁� + List<LocDetl> tallyGoosList = locDetlMapper.selectTallyGoosList(columnNum); + + // 杩囨护鎺夋湪绠辫鏍煎搴﹀ぇ浜�600鐨�(澶т簬600涓�涓墭鐩樺彧鑳芥斁涓�绠�) + tallyGoosList = tallyGoosList.stream().filter(locDetl -> { + String[] split = locDetl.getColor().split("\\*"); + if (split.length == 3) { // 楂樺害涔熻浣庝簬614鎵嶈兘鐞嗚揣 + return Integer.parseInt(split[1]) <= 600 && Integer.parseInt(split[2]) <= 614; + } else { + return false; + } + }).collect(Collectors.toList()); + + // 瀵绘壘婊¤冻鐞嗚揣鏉′欢鐨勪袱涓湪绠� + LocDetl leftLocDetl = null; + LocDetl rightLocDetl = null; + for (int i = 0; i < tallyGoosList.size(); i++) { + leftLocDetl = tallyGoosList.get(i); + for (int j = i + 1; j < tallyGoosList.size(); j++) { + LocDetl tempLocDetl = tallyGoosList.get(j); + if (leftLocDetl.getColor().equals(tempLocDetl.getColor()) && leftLocDetl.getManu().equals(tempLocDetl.getManu()) && + leftLocDetl.getSku().equals(tempLocDetl.getSku()) && leftLocDetl.getItemNum().equals(tempLocDetl.getItemNum())) { + rightLocDetl = tempLocDetl; + break; + } + } + if (rightLocDetl != null) { + break; + } + } + + if (leftLocDetl == null || rightLocDetl == null) { +// log.warn("娌℃湁鎵惧埌涓や釜鑳界悊璐х殑鏈ㄧ"); + return; + } + + // 鎵惧埌鐨勪袱涓湪绠卞垰濂藉湪涓�涓墭鐩樹笂锛岀洿鎺ユ洿鏀圭悊璐х姸鎬佷负2 + if (leftLocDetl.getLocNo().equals(rightLocDetl.getLocNo())) { + locDetlMapper.updateLhStsByLocNo(leftLocDetl.getLocNo(), 2); + } else { + + // 鍒ゆ柇鏄幓鍝妗佹灦鐨勫摢涓珯鐐� t0缁勭洏鐐�,t1宸︽崲鐩樼偣,t2鍙虫崲鐩樼偣 + int t0 = 3046, t1 = 3045, t2 = 3044; + if (flag == 2) { + t0 = 3042; + t1 = 3041; + t2 = 3040; + } + + // 鐢熸垚绌洪棽鐞嗚揣浠诲姟 + WrkDetl wrkDetl1 = tallyGoodsGenerate(t1, leftLocDetl); + WrkDetl wrkDetl2 = tallyGoodsGenerate(t2, rightLocDetl); + + Date now = new Date(); + + // 瀵绘壘涓�涓┖搴撲綅 + StartupDto dto = commonService.getLocNo(1, t0, null, 0); + // 鐢熸垚缁勭洏鍏ュ簱浠诲姟 + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(dto.getWorkNo()); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�� + wrkMast.setIoType(1); // 鍏ュ嚭搴撶被鍨� + wrkMast.setIoPri(13D); // 浼樺厛绾э細13 + wrkMast.setCrnNo(dto.getCrnNo()); + wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯 + wrkMast.setStaNo(dto.getStaNo()); // 鐩爣绔� + wrkMast.setSourceLocNo(""); // 婧愬簱浣� + wrkMast.setLocNo(dto.getLocNo()); + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("N"); + wrkMast.setBarcode(""); // zwcs鎵ц鍏ュ簱鏃舵洿鏂版墭鐩樼爜 + wrkMast.setAppeUser(29L); // 鎿嶄綔浜哄憳 root + wrkMast.setAppeTime(now); + wrkMast.setModiUser(29L); + wrkMast.setModiTime(now); + if (wrkMastMapper.insert(wrkMast) != 1) { + throw new CoolException("绌洪棽鐞嗚揣缁勭洏淇濆瓨宸ヤ綔妗eけ璐ワ紝璇︽儏锛�" + wrkMast); + } + + // 鐢熸垚宸ヤ綔鏄庣粏 + wrkDetl1.setWrkNo(wrkMast.getWrkNo()); + wrkDetl1.setOrigin("宸�"); // 鍥哄畾鎷嗗埌宸﹁竟 + wrkDetl1.setDeadWarn(2); // 宸茬悊璐ф爣璇� + wrkDetl2.setWrkNo(wrkMast.getWrkNo()); + wrkDetl2.setOrigin("鍙�"); + wrkDetl2.setDeadWarn(2); + wrkDetlService.insert(wrkDetl1); // 鍏ュ簱瀹屾垚鏃舵洿鏂版墭鐩樼爜 + wrkDetlService.insert(wrkDetl2); + + // 鏇存柊鐩爣搴撲綅鐘舵�� + LocMast locMast = locMastMapper.selectById(dto.getLocNo()); + locMast.setLocSts("S"); + locMastMapper.updateById(locMast); // 鍏ュ簱瀹屾垚鏃舵洿鏂版墭鐩樼爜 + } + } + + /** + * 鐢熸垚绌洪棽鐞嗚揣鍒版崲鐩樻鏋剁殑浠诲姟 + * + * @param site 鎹㈢洏鐐� + * @param locDetl 搴撳瓨鏄庣粏 + */ + private WrkDetl tallyGoodsGenerate(int site, LocDetl locDetl) { + + // 鍒ゆ柇搴撲綅鐘舵�� + LocMast locMast = locMastMapper.selectById(locDetl.getLocNo()); + if (!locMast.getLocSts().equals("F")) { + throw new CoolException("鐞嗚揣搴撲綅鐘舵�佹湁璇紝涓嶄负F锛屽簱浣嶅彿锛�" + locMast.getLocNo()); + } + + Date now = new Date(); + + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + // 鑾峰彇宸ヤ綔鍙� + int workNo = commonService.getWorkNo(5); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID + wrkMast.setIoType(109); // 鍏ュ嚭搴撶姸鎬� 109.绌洪棽鐞嗚揣 + wrkMast.setIoPri(13D); // 浼樺厛绾э細13 + wrkMast.setCrnNo(locMast.getCrnNo()); + wrkMast.setSourceStaNo(oneFloorOutSite[locMast.getCrnNo()]); // 婧愮珯 + wrkMast.setStaNo(site); // 鐩爣绔� + wrkMast.setSourceLocNo(locDetl.getLocNo()); // 婧愬簱浣� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("N"); + wrkMast.setSheetNo("0"); + wrkMast.setBarcode(locDetl.getZpallet()); + wrkMast.setAppeUser(29L); // 鎿嶄綔浜哄憳 root + wrkMast.setAppeTime(now); + wrkMast.setModiUser(29L); + wrkMast.setModiTime(now); + if (wrkMastMapper.insert(wrkMast) != 1) { + throw new CoolException("绌洪棽鐞嗚揣淇濆瓨宸ヤ綔妗eけ璐ワ紝璇︽儏锛�" + wrkMast); + } + + // 鐢熸垚宸ヤ綔鏄庣粏 + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.sync(locDetl); + wrkDetl.setWrkNo(workNo); + wrkDetl.setIoTime(now); + wrkDetl.setAppeTime(now); + wrkDetl.setAppeUser(29L); + wrkDetl.setModiTime(now); + wrkDetl.setModiUser(29L); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("绌洪棽鐞嗚揣淇濆瓨宸ヤ綔妗f槑缁嗗け璐�,璇︽儏锛�" + wrkDetl); + } + + // 淇敼鍑哄簱鐘舵�� + locMast.setLocSts("R"); + locMast.setModiUser(29L); + locMast.setModiTime(now); + if (locMastMapper.updateById(locMast) != 1) { + throw new CoolException("绌洪棽鐞嗚揣棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + locMast.getLocNo()); + } + + // 鏇存柊搴撳瓨鏄庣粏涓虹悊璐т腑 + locDetlMapper.updateLhStsByLocNo(locDetl.getLocNo(), 1); + + return wrkDetl; + } + } -- Gitblit v1.9.1