From 0f769b47d8d71bd419ddf1733b0b2f21c82e86b1 Mon Sep 17 00:00:00 2001 From: pang.jiabao <pang_jiabao@163.com> Date: 星期一, 07 十月 2024 10:33:30 +0800 Subject: [PATCH] 跨巷道移库 --- src/main/java/com/zy/asrs/task/handler/GhjtHandler.java | 274 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 221 insertions(+), 53 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 d8243c6..3d61ebe 100644 --- a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java @@ -4,25 +4,24 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; -import com.zy.asrs.entity.Order; -import com.zy.asrs.entity.WrkDetl; -import com.zy.asrs.entity.WrkMast; -import com.zy.asrs.mapper.OrderMapper; -import com.zy.asrs.mapper.WrkMastMapper; +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.properties.SlaveProperties; 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; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -45,6 +44,24 @@ @Resource private WrkDetlService wrkDetlService; + + @Resource + private OrderDetlMapper orderDetlMapper; + + @Resource + private LocDetlMapper locDetlMapper; + + @Resource + private LocMastMapper locMastMapper; + + @Resource + private WorkService workService; + + @Resource + private ConfigMapper configMapper; + + @Autowired + private SlaveProperties slaveProperties; @Transactional public void startCkrwPushGwcs(WrkMast wrkMast) { @@ -82,6 +99,9 @@ } else if (wrkMast.getIoType() == 3) { // 淇敼宸ヤ綔涓绘。鐘舵�� wrkMast.setWrkSts(15L); + wrkMast.setModiTime(new Date()); + } else if(wrkMast.getIoType() == 12) { // 璺ㄥ贩閬撹浆绉� + wrkMast.setWrkSts(1L); // 鐘舵�佹敼涓�1.鐢熸垚鍏ュ簱id wrkMast.setModiTime(new Date()); } wrkMastMapper.updateById(wrkMast); @@ -155,54 +175,202 @@ return flag; } + /** + * 鑷姩澶囪揣澶勭悊 + */ @Transactional - public void OutBoundCompleteReport(Order order) { + public void autoStockUpHandler(List<String> list,int columnNum) { - // 鑾峰彇璇锋眰澶� - Map<String, Object> headers = new HashMap<>(); - headers.put("Content-Type", "application/json;charset=UTF-8"); - - // 鏋勯�犺姹備綋 - JSONObject jsonObject = new JSONObject(); - jsonObject.put("orderNo", order.getOrderNo()); - jsonObject.put("complete", 1); // 璁㈠崟瀹屾垚涓�1锛屽叾浠�... - String body = jsonObject.toJSONString(); - - boolean success = false; - String response = ""; - try { - response = new HttpHandler.Builder() - .setUri(MesConstant.URL) - .setPath(MesConstant.PAKIN_URL) - .setHeaders(headers) - .setJson(body) - .build() - .doPost(); - if (!Cools.isEmpty(response)) { - order.setSettle(6L); - orderMapper.updateById(order); - success = true; + // 鏍规嵁鍖呰缁勫彿鑾峰彇鎵�鍦ㄥ簱浣� + List<LocDetl> locDetls = locDetlMapper.selectLocNoByGroupNo(list); + if (locDetls.isEmpty()) { + return; + } + // 鐩稿悓鍒欏悎骞讹紝涓�涓簱浣嶄袱涓寘瑁呯粍鍙� + Map<String,List<String>> map = new HashMap<>(); + for(LocDetl locDetl : locDetls) { + List<String> brand = map.get(locDetl.getLocNo()); + if (brand == null) { + map.put(locDetl.getLocNo(),new ArrayList<String>(){{add(locDetl.getBrand());}}); } else { - log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL + MesConstant.PAKIN_URL, body, response); - throw new CoolException("涓嬪彂鍑哄簱浠诲姟缁橤WCS(浠庡嚭搴撶爜澶村埌鍑哄簱鍙�)澶辫触"); - } - } catch (Exception e) { - log.error("鍑哄簱璁㈠崟瀹屾垚涓婃姤MES寮傚父锛屽伐浣滃彿锛歿}锛寋}", order.getOrderNo(), e.getMessage()); - } finally { - try { - // 淇濆瓨鎺ュ彛鏃ュ織 - apiLogService.save( - "鍑哄簱璁㈠崟瀹屾垚涓婃姤MES", - MesConstant.URL + MesConstant.PAKIN_URL, - null, - "127.0.0.1", - jsonObject.toJSONString(), - response, - success - ); - } catch (Exception e) { - log.error("鎺ュ彛鏃ュ織淇濆瓨寮傚父", e); + brand.add(locDetl.getBrand()); + map.put(locDetl.getLocNo(),brand); } } + + // 閬嶅巻鍫嗗灈鏈哄苟涓斿垽鏂槸鍚﹀瓨鍦ㄤ换鍔� + for (int i = 1; i <= 6; i++) { + // 瑕佸璐х殑搴撲綅 + String sourceLocNo = null; + // 澶囪揣鐩爣搴撲綅 + String staLocNo = null; + Integer wrkCount = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i)); + if(wrkCount > 0) { + log.warn("{}鍙峰爢鍨涙満宸插瓨鍦ㄤ换鍔�",i); + continue; + } + // 鏍规嵁鍫嗗灈鏈哄彿鏌ヨ鍒板搴旂殑娣卞簱浣嶅拰娴呭簱浣� 娣卞簱浣�4*n-3鍜�4*n 娴呭簱浣�4*n-2鍜�4*n-1 + int s1 = 4*i-3; + int s2 = 4*i; + int q1 = 4 * i - 2; + int q2 = 4 * i -1; + + // 鏍规嵁鍫嗗灈鏈哄彿鑾峰彇涓�涓祬搴撲綅 + for(String key : map.keySet()) { + int row = Integer.parseInt(key.substring(0, 2)); + if (row == q1 || row == q2) { + sourceLocNo = key; + break; + } + } + // 娴呭簱浣嶆病鏈夊垯鎵句竴涓繁搴撲綅 + if (sourceLocNo == null) { + for(String key : map.keySet()) { + int row = Integer.parseInt(key.substring(0, 2)); + if (row == s1 || row == s2) { + sourceLocNo = key; + break; + } + } + } + // 娌℃湁鎵惧埌婧愬簱浣� + if (sourceLocNo == null) { + 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)); + 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)); + if (!locMasts2.isEmpty()) { + staLocNo = locMasts2.get(0).getLocNo(); + } + } else { + staLocNo = locMasts1.get(0).getLocNo(); + } + + if(staLocNo == null) { + log.warn("{}鍙峰爢鍨涙満澶囪揣鍖烘弧浜�",i); + continue; + } + + // 澶囪揣鐨勬簮搴撲綅锛岀洰鏍囧簱浣嶉兘鑾峰彇鍒颁簡,鐢熸垚绉诲簱浠诲姟 + workService.locMove(sourceLocNo,staLocNo,29L); + + // 璁㈠崟鏄庣粏鏀规垚澶囪揣涓紝鍦ㄤ换鍔″畬鎴愭椂鍊欐敼鎴愬璐у畬鎴愶紝骞跺垽鏂暣涓鍗曟槸鍚﹀畬鎴� + orderDetlMapper.updateOrderDetlStatusByPackageNo(map.get(sourceLocNo), 1); + + // 绉婚櫎宸茬敓鎴愬璐у簱浣� + map.remove(sourceLocNo); + } + } + + @Transactional + 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); + } + } -- Gitblit v1.9.1