From c14c261181c9afb2e0d07c714e06c81a6417c8cd Mon Sep 17 00:00:00 2001 From: 野心家 <1051256694@qq.com> Date: 星期四, 05 六月 2025 16:10:51 +0800 Subject: [PATCH] 对接mes物料信息 --- src/main/java/com/zy/common/web/WcsController.java | 221 +++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 175 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java index ef90880..ee11139 100644 --- a/src/main/java/com/zy/common/web/WcsController.java +++ b/src/main/java/com/zy/common/web/WcsController.java @@ -1,5 +1,7 @@ package com.zy.common.web; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.common.Cools; @@ -7,19 +9,23 @@ import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.EmptyPlateOutParam; +import com.zy.asrs.entity.param.StatusParam; import com.zy.asrs.service.*; import com.zy.common.CodeRes; import com.zy.common.model.LocTypeDto; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; +import com.zy.common.utils.HttpHandler; import com.zy.common.web.param.SearchLocParam; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @@ -44,74 +50,98 @@ @Autowired private WaitPakinService waitPakinService; @Autowired - private LocDetlService locDetlService; + private LocDetlService locDetlService; @Autowired private RowLastnoService rowLastnoService; @Autowired private WorkService workService; + @Autowired + private ApiLogService apiLogService; + @Value("${wcs-slave.url}") + private String url; + @Value("${wcs-slave.loc}") + private String loc; - @PostMapping("/pakin/loc/v1") + @PostMapping("/fromwcs/inware-task") @ResponseBody - public synchronized R getLocNo(@RequestBody SearchLocParam param) { + public synchronized Re getLocNo(@RequestBody SearchLocParam param) { log.info("鏀跺埌WCS鍏ュ簱鎺ュ彛璇锋眰====>>鍏ュ弬:{}", param); - if (Cools.isEmpty(param.getIoType())) { - return R.error("鍏ュ嚭搴撶被鍨嬩笉鑳戒负绌�"); + if (Cools.isEmpty(param.getCargoHeight())) { + return Re.error("鍏ュ嚭搴撶被鍨嬩笉鑳戒负绌�"); } - if (Cools.isEmpty(param.getSourceStaNo())) { - return R.error("婧愮珯缂栧彿涓嶈兘涓虹┖"); + if (Cools.isEmpty(param.getFromPort())) { + return Re.error("婧愮珯缂栧彿涓嶈兘涓虹┖"); } List<WaitPakin> waitPakins = null; - if (param.getIoType() == 1) { - if (Cools.isEmpty(param.getBarcode())) { - return R.error("鏉$爜涓嶈兘涓虹┖"); + if (param.getFromPort().equals("100")) { + + //鏈夌┖鏉垮嚭搴撴椂绂佹鍏ュ簱 + int wrkCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type",110).eq("sta_no",100).notIn("wrk_sts",7)); + if(wrkCount > 0){ + return Re.error("鏈夌┖鏉垮嚭搴撳埌100绔欐椂鏃剁姝㈠叆搴�"); } - waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode())); + + if (Cools.isEmpty(param.getBarCode())) { + return Re.error("鏉$爜涓嶈兘涓虹┖"); + } + waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarCode())); if (Cools.isEmpty(waitPakins)) { - WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode()); + WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarCode()); if (wrkMast != null && wrkMast.getIoType() == 103) { - return R.parse(CodeRes.PICK_600); + return Re.parse(CodeRes.PICK_600); } - return R.parse(CodeRes.NO_COMB_700); + return Re.parse(CodeRes.NO_COMB_700); } - int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); - int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); + int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarCode())); + int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarCode())); if (countLoc > 0 || countWrk > 0) { - return R.error(CodeRes.EXIST_500); + return Re.error(CodeRes.EXIST_500); + } + }else { + //鏈夋弧鏉垮嚭搴撴椂绂佹绌烘澘鍏ュ簱 + int wrkCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("sta_no",200).andNew().eq("io_type",101).or().eq("io_type",110)); + if(wrkCount > 0){ + return Re.error("鏈夋弧鏉垮嚭搴撴椂绂佹绌烘澘鍏ュ簱"); + } + + int countLoc = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 10)); + if (countLoc > 0 ) { + return Re.error("宸叉湁绌烘澘鍏ュ簱浠诲姟绂佹鍦ㄥ叆绌烘澘"); } } - if (Cools.isEmpty(param.getLocType1())){ - return R.error("楂樹綆妫�娴嬩俊鍙蜂笉鑳戒负绌�"); + if (Cools.isEmpty(param.getCargoHeight())) { + return Re.error("楂樹綆妫�娴嬩俊鍙蜂笉鑳戒负绌�"); } // 婧愮珯鐐圭姸鎬佹娴� - BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true); - sourceStaNo.setLocType1(param.getLocType1()); + BasDevp sourceStaNo = basDevpService.checkSiteStatus(Integer.valueOf(param.getFromPort()), true); + sourceStaNo.setLocType1(param.getCargoHeight().shortValue()); LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); StartupDto dto = null; - switch (param.getIoType()) { - case 1://婊℃墭鐩樺叆搴� + switch (param.getFromPort()) { + case "100"://婊℃墭鐩樺叆搴� assert waitPakins != null; - dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins); + dto = startupFullPutStore(Integer.valueOf(param.getFromPort()), param.getBarCode(), locTypeDto, waitPakins); break; - case 10://绌烘墭鐩樺叆搴� - dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto, param.getBarcode()); + case "200"://绌烘墭鐩樺叆搴� + dto = emptyPlateIn(Integer.valueOf(param.getFromPort()), locTypeDto, param.getBarCode()); break; default: break; } - log.info("WCS鍏ュ簱鎺ュ彛杩斿弬:{},鎵樼洏鐮�:{}", dto, param.getBarcode()); - return R.ok().add(dto); + log.info("WCS鍏ュ簱鎺ュ彛杩斿弬:{},鎵樼洏鐮�:{}", dto, param.getBarCode()); + return Re.ok(); } @PostMapping("/auto/emptyIn/v1") @ResponseBody - public R autoEmptyIn(@RequestBody LocTypeDto locTypeDto){ + public R autoEmptyIn(@RequestBody LocTypeDto locTypeDto) { // 婧愮珯鐐圭姸鎬佹娴� BasDevp sourceStaNo = basDevpService.checkSiteStatus(12, true); // 妫�绱㈠簱浣� - StartupDto dto = commonService.getLocNo(rowLastnoService.selectNextWhsType(), 10, 12, null,null,null,0, locTypeDto,0); + StartupDto dto = commonService.getLocNo(10, 12, null, null, null, locTypeDto); Date now = new Date(); // 鐢熸垚宸ヤ綔妗� WrkMast wrkMast = new WrkMast(); @@ -134,12 +164,12 @@ wrkMast.setAppeTime(now); wrkMast.setModiTime(now); wrkMast.setMemo("鑷姩绌烘墭鍏ュ簱"); - return wrkMastService.insert(wrkMast) ? R.ok("鑷姩绌烘墭鍏ュ簱鎴愬姛,宸ヤ綔鍙�:"+wrkMast.getWrkNo()) : R.error("鐢熸垚鑷姩绌烘墭鍏ュ簱澶辫触"); + return wrkMastService.insert(wrkMast) ? R.ok("鑷姩绌烘墭鍏ュ簱鎴愬姛,宸ヤ綔鍙�:" + wrkMast.getWrkNo()) : R.error("鐢熸垚鑷姩绌烘墭鍏ュ簱澶辫触"); } @PostMapping("auto/emptyOut/v1") @ResponseBody - public R autoEmptyOut(){ + public R autoEmptyOut() { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "D")); if (Cools.isEmpty(locMast)) { @@ -147,9 +177,11 @@ } EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam(); emptyPlateOutParam.setOutSite(12); - emptyPlateOutParam.setLocNos(new ArrayList<String>(){{add(locMast.getLocNo()+"");}}); + emptyPlateOutParam.setLocNos(new ArrayList<String>() {{ + add(locMast.getLocNo() + ""); + }}); WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam); - return R.ok(!Cools.isEmpty(wrkMast)? R.ok("鑷姩绌烘墭鍑哄簱鎴愬姛,宸ヤ綔鍙�:" + wrkMast.getWrkNo()) : R.error("鐢熸垚鑷姩绌烘墭鍑哄簱澶辫触")); + return R.ok(!Cools.isEmpty(wrkMast) ? R.ok("鑷姩绌烘墭鍑哄簱鎴愬姛,宸ヤ綔鍙�:" + wrkMast.getWrkNo()) : R.error("鐢熸垚鑷姩绌烘墭鍑哄簱澶辫触")); } /** @@ -162,14 +194,14 @@ // 妫�绱㈠簱浣� List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList()); - StartupDto dto = commonService.getLocNo(1, 1, devpNo, matnrs.get(0),batchs.get(0),null,0, locTypeDto,0); + StartupDto dto = commonService.getLocNo(1, devpNo, matnrs.get(0), batchs.get(0), null, locTypeDto); int workNo = dto.getWorkNo(); Date now = new Date(); // 鐢熸垚宸ヤ綔妗� WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(new Date()); - wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID + wrkMast.setWrkSts(0L); // 宸ヤ綔鐘舵�侊細0.寰呮帴鏀� wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 wrkMast.setIoPri(13D); // 浼樺厛绾� wrkMast.setCrnNo(dto.getCrnNo()); @@ -183,6 +215,8 @@ wrkMast.setEmptyMk("N"); // 绌烘澘 wrkMast.setLinkMis("Y"); wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷 + wrkMast.setMk("N");//鏄惁瀹屾垚涓婃姤wcs + wrkMast.setFullPlt("N");//鍑哄簱绌烘澘娑堥櫎鏍囪 // 鎿嶄綔浜哄憳鏁版嵁 wrkMast.setAppeTime(now); wrkMast.setModiTime(now); @@ -215,19 +249,19 @@ // 鏇存柊婧愮珯鐐逛俊鎭� sourceStaNo.setWrkNo(workNo); sourceStaNo.setModiTime(now); - if (!basDevpService.updateById(sourceStaNo)){ + if (!basDevpService.updateById(sourceStaNo)) { throw new CoolException("鏇存柊婧愮珯澶辫触"); } // 鏇存柊鐩爣搴撲綅鐘舵�� LocMast locMast = locMastService.selectById(dto.getLocNo()); - if (locMast.getLocSts().equals("O")){ + if (locMast.getLocSts().equals("O")) { locMast.setLocSts("S"); // S.鍏ュ簱棰勭害 locMast.setModiTime(now); - if (!locMastService.updateById(locMast)){ + if (!locMastService.updateById(locMast)) { throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�"); } } else { - throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤"); + throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤"); } return dto; } @@ -237,13 +271,13 @@ // 婧愮珯鐐圭姸鎬佹娴� BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); // 妫�绱㈠簱浣� - StartupDto dto = commonService.getLocNo(1, 10, devpNo, null,null,null,0, locTypeDto,0); + StartupDto dto = commonService.getLocNo(10, devpNo, null, null, null, locTypeDto); int workNo = dto.getWorkNo(); // 鐢熸垚宸ヤ綔妗� WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(new Date()); - wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID + wrkMast.setWrkSts(0L); // 宸ヤ綔鐘舵�侊細0.寰呮帴鏀� wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱 wrkMast.setIoPri(13D); // 浼樺厛绾� wrkMast.setCrnNo(dto.getCrnNo()); @@ -267,21 +301,116 @@ // 鏇存柊婧愮珯鐐逛俊鎭� sourceStaNo.setWrkNo(workNo); sourceStaNo.setModiTime(new Date()); - if (!basDevpService.updateById(sourceStaNo)){ + if (!basDevpService.updateById(sourceStaNo)) { throw new CoolException("鏇存柊婧愮珯澶辫触"); } // 鏇存柊鐩爣搴撲綅鐘舵�� LocMast locMast = locMastService.selectById(dto.getLocNo()); - if (locMast.getLocSts().equals("O")){ + if (locMast.getLocSts().equals("O")) { locMast.setLocSts("S"); // S.鍏ュ簱棰勭害 locMast.setModiTime(new Date()); - if (!locMastService.updateById(locMast)){ + if (!locMastService.updateById(locMast)) { throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�"); } } else { - throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤"); + throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤"); } return dto; } + @PostMapping("/fromwcs/task") + @ResponseBody + public Re status(@RequestBody StatusParam statusParam) { + String[] wrkNo=statusParam.getTaskId().split("-",2); + WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", Integer.parseInt(wrkNo[0]))); + if(Cools.isEmpty(wrkMast)&&statusParam.getTaskStatus()!=8){ + return Re.error("娌℃湁鎵惧埌:"+statusParam.getTaskId()+"杩欐潯浠诲姟"); + }else if(Cools.isEmpty(wrkMast)&&statusParam.getTaskStatus()==8){ + return Re.ok(); + }else if(!Cools.isEmpty(wrkMast)&&statusParam.getTaskStatus()==8&&wrkMast.getIoType()==110){ + return Re.ok(); + } + /** + * 浠诲姟鐘舵�� + * 鎵ц杩囩▼涓� + * 鐨勭姸鎬併�� 0- 宸� 鎺� + * 鏀� , 1- 浠� 鍔� 寮� + * 濮�,2-鍙栬揣瀹屾垚,3- + * 浠诲姟涓柇,4-鏀捐揣 + * 瀹屾垚,8-浠诲姟缁撴潫 + */ + if (statusParam.getTaskStatus()==0){ + wrkMast.setWrkSts(1L);//1.宸叉帴鏀� + }else if (statusParam.getTaskStatus()==1){ + wrkMast.setWrkSts(2L);//2.浠诲姟寮�濮� + }else if (statusParam.getTaskStatus()==2){ + wrkMast.setWrkSts(3L);//3.鍙栬揣瀹屾垚 + }else if (statusParam.getTaskStatus()==3){ + wrkMast.setWrkSts(6L);//6.浠诲姟涓柇 + } else if (statusParam.getTaskStatus()==4 || statusParam.getTaskStatus()==8){ +// wrkMast.setWrkSts(7L);//6.鏀捐揣瀹屾垚 + if(wrkMast.getIoType()==1 || wrkMast.getIoType() == 10 || wrkMast.getIoType() == 11){ + wrkMast.setWrkSts(4L);//4.鍏ュ簱瀹屾垚 + }else if (wrkMast.getIoType()==101 || wrkMast.getIoType()==110){ + wrkMast.setWrkSts(14L);//14.宸插嚭搴撴湭纭 + } + } + wrkMastService.updateById(wrkMast); + return Re.ok(); + } + + @GetMapping("loc") + public void loc(){ + List<LocMast> locMasts=locMastService.selectList(new EntityWrapper<LocMast>()); + List<HashMap<String,Object>> mapList=new ArrayList<>(); + for (LocMast locMast : locMasts) { + if (locMast.getLev1()!=4){ + HashMap<String,Object> map=new HashMap<>(); + map.put("warehouse","wzzy"); + map.put("posiX",locMast.getRow1()); + map.put("posiY",locMast.getBay1()); + map.put("posiZ",locMast.getLev1()); + map.put("cargoNo",locMast.getLocNo()); + map.put("type","0"); + mapList.add(map); + } + } + if(mapList.size()>0){ + String response = ""; + boolean success = false; + try { + response = new HttpHandler.Builder() + .setUri(url) + .setPath(loc) + .setJson(JSON.toJSONString(mapList)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("returnStatus").equals(0)) { + success = true; + } else { + log.error("wms鍚屾wcs搴撲綅澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url+"/"+loc, JSON.toJSONString(mapList), response); + throw new CoolException("wms涓嬪彂浠诲姟缁檞cs澶辫触"); + } + } catch (Exception e) { + log.error("fail", e); +// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + throw new CoolException("wms涓嬪彂浠诲姟缁檞cs澶辫触"); + } finally { + try { + // 淇濆瓨鎺ュ彛鏃ュ織 + apiLogService.save( + "wms鍚屾wcs搴撲綅澶辫触", + url+"/"+loc, + null, + "127.0.0.1", + JSON.toJSONString(mapList), + response, + success + ); + } catch (Exception e) { log.error("", e); } + } + } + } + } -- Gitblit v1.9.1