From c22edcc5e29212dfa3e7b629c45ba00c30f310f8 Mon Sep 17 00:00:00 2001 From: lsh <lsh@163.com> Date: 星期五, 31 五月 2024 16:01:34 +0800 Subject: [PATCH] #1 --- src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java | 730 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 633 insertions(+), 97 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java index 0a5fcc4..825a213 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java @@ -1,14 +1,17 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; +import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.*; -import com.zy.asrs.entity.param.CombParam; -import com.zy.asrs.entity.param.MobileAdjustParam; +import com.zy.asrs.entity.param.*; import com.zy.asrs.service.*; import com.zy.common.model.DetlDto; +import com.zy.common.service.AgvCommonService; +import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -18,6 +21,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * 绉诲姩绔湇鍔℃牳蹇冪被 @@ -37,116 +41,260 @@ private OrderDetlService orderDetlService; @Autowired private AgvBasDevpService agvBasDevpService; + @Autowired + private AgvLocDetlService agvLocDetlService; + @Autowired + private AgvWrkMastService agvWrkMastService; + @Autowired + private AgvWorkService agvWorkService; + @Autowired + private AgvWrkDetlService agvWrkDetlService; + @Autowired + private AgvLocMastService agvLocMastService; + @Autowired + private AgvCommonService agvCommonService; + @Autowired + private AgvWrkMastLogService agvWrkMastLogService; + @Autowired + private AgvWrkDetlLogService agvWrkDetlLogService; + /* + 缁勬墭 + 缁戝畾鏆傚瓨浣� + */ @Override @Transactional public String comb(CombParam param, Long userId) { if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { throw new CoolException(BaseRes.PARAM); } + param.setContainerType(Short.valueOf(param.getBarcode().substring(0,2))); - if (agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>(). - eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { - throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱"); +// //妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鐨勮揣鏋舵潯鐮侊紝瀛樺湪鍒欐姏鍑哄紓甯� +// if (agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().eq("supp_code", param.getBarcode())) > 0) { +// throw new CoolException(param.getBarcode() + "鏂欐兂鐮佸凡瀛樺湪AGV鍏ュ簱閫氱煡妗d腑"); +// } + + //妫�鏌ュ簱瀛樻槸鍚︽湁鐩稿悓璐ф灦锛屽瓨鍦ㄥ垯鎶涘嚭寮傚父 + if(!Cools.isEmpty(agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("supp_code",param.getBarcode())))){ + throw new CoolException(param.getBarcode() + "璐ф灦鐮佸凡瀛樺湪AGV搴撳瓨鏄庣粏涓�"); } - Date now = new Date(); - //鏃犲崟缁勬墭 + //妫�鏌ュ簱瀛樻槸鍚︽湁鐩稿悓璐ф灦锛屽瓨鍦ㄥ垯鎶涘嚭寮傚父 + if(!Cools.isEmpty(agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode",param.getBarcode())))){ + throw new CoolException(param.getBarcode() + "璐ф灦鐮佸凡瀛樺湪AGV搴撳瓨涓绘。涓�"); + } + + //鏌ョ湅宸ヤ綔妗f槸鍚︽湁鐩稿悓璐ф灦锛屽瓨鍦ㄥ垯鎶涘嚭寮傚父 + if(!Cools.isEmpty(agvWrkMastService.selectByContainerCode(param.getBarcode()))){ + throw new CoolException(param.getBarcode() + "璐ф灦鐮佸凡瀛樺湪AGV宸ヤ綔妗d腑"); + } + if (Cools.isEmpty(param.getOrderNo())) { - List<DetlDto> detlDtos = new ArrayList<>(); - param.getCombMats().forEach(elem -> { - DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); - if (DetlDto.has(detlDtos, detlDto)) { - DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); - assert one != null; - one.setAnfme(one.getAnfme() + detlDto.getAnfme()); - } else { - detlDtos.add(detlDto); - } - }); - - detlDtos.forEach(detlDto -> { - Mat mat = matService.selectByMatnr(detlDto.getMatnr()); - if (Cools.isEmpty(mat)) { - throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); - } - AgvWaitPakin waitPakin = new AgvWaitPakin(); - waitPakin.sync(mat); - waitPakin.setBatch(detlDto.getBatch()); - waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮� - waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵�� - waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺 - waitPakin.setStatus("Y"); // 鐘舵�� - waitPakin.setAppeUser(userId); - waitPakin.setAppeTime(now); - waitPakin.setModiUser(userId); - waitPakin.setModiTime(now); - if (!agvWaitPakinService.insert(waitPakin)) { - throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�"); - } - }); + //鏃犲崟缁勬墭 + NoOrderComb(param,userId); }else { - //鍏宠仈缁勬墭 - Order order = orderService.selectByNo(param.getOrderNo()); - if (order.getSettle() > 2) { - throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�"); - } - // 鐢熸垚鍏ュ簱閫氱煡妗� - List<DetlDto> detlDtos = new ArrayList<>(); - param.getCombMats().forEach(elem -> { - - // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙 - OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); - if (elem.getAnfme() > orderDetl.getEnableQty()) { - throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�"); - } - // 淇敼璁㈠崟鏄庣粏鏁伴噺 - if (!orderDetlService.increase(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { - throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触"); - } - - DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); - if (DetlDto.has(detlDtos, detlDto)) { - DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); - assert one != null; - one.setAnfme(one.getAnfme() + detlDto.getAnfme()); - } else { - detlDtos.add(detlDto); - } - }); - for (DetlDto detlDto : detlDtos) { - Mat mat = matService.selectByMatnr(detlDto.getMatnr()); - if (Cools.isEmpty(mat)) { - throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); - } - AgvWaitPakin waitPakin = new AgvWaitPakin(); - waitPakin.sync(mat); - waitPakin.setOrderNo(order.getOrderNo()); // 鍗曟嵁缂栧彿 - waitPakin.setBatch(detlDto.getBatch()); // 搴忓垪鐮� - waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮� - waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵�� - waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺 - waitPakin.setStatus("Y"); // 鐘舵�� - waitPakin.setAppeUser(userId); - waitPakin.setAppeTime(now); - waitPakin.setModiUser(userId); - waitPakin.setModiTime(now); - if (!agvWaitPakinService.insert(waitPakin)) { - throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�"); - } - } - orderService.updateSettle(order.getId(), 2L, userId); + //鏈夊崟缁勬墭 + OrderComb(param,userId); } if(StringUtils.isEmpty(param.getLocno())){ return "缁勬墭鎴愬姛"; }else { - combBinding(param.getBarcode(),param.getLocno()); + combBinding(param.getBarcode(),param.getLocno(),param.getContainerType()); return "缁勬墭鎴愬姛锛岀粦瀹氱珯鐐规垚鍔�"; } } + + /* + 鍐嶆鎷f枡 + */ + @Override + @Transactional + public String pickAgain(PickParam pickParams, Long userId) { + Date now = new Date(); + List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", pickParams.getLocNo())); + + for (PickParam.Pick pick : pickParams.getPicks()) { + if (pick.getCount().equals(0D)) continue; + Double count = 0.0D; + AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("matnr", pick.getMatnr()).eq("three_code", pick.getThreeCode()).eq("supp_code",pick.getSuppCode())); + if (Cools.isEmpty(agvWrkDetl)) { + AgvWrkDetl wrkDetl = new AgvWrkDetl(); + Mat mat = matService.selectByMatnr(pick.getMatnr()); + if (Cools.isEmpty(mat)) { + throw new CoolException(pick.getMatnr() + "鍟嗗搧涓嶅瓨鍦�"); + } + wrkDetl.sync(mat); + wrkDetl.setWrkNo(pickParams.getWrkNo()); + wrkDetl.setOrderNo(pick.getOrderNo()); + wrkDetl.setIoTime(now); + wrkDetl.setAnfme(pick.getCount()); // 鏁伴噺 + wrkDetl.setSuppCode(pick.getSuppCode()); // 璐ф灦鏉$爜 + wrkDetl.setAppeUser(userId); + wrkDetl.setAppeTime(now); + wrkDetl.setModiUser(userId); + wrkDetl.setModiTime(now); + wrkDetl.setThreeCode(pick.getThreeCode()); + agvWrkDetlService.insert(wrkDetl); + } else { + Double anfme = agvWrkDetl.getAnfme() + pick.getCount(); + agvWrkDetl.setAnfme(anfme); + agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("matnr",agvWrkDetl.getMatnr()).eq("three_code",agvWrkDetl.getThreeCode()).eq("supp_code",pick.getSuppCode())); + + } + + + // 鏇存柊璁㈠崟 + OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", pick.getOrderNo()).eq("matnr", pick.getMatnr()).eq("three_code",pick.getThreeCode())); + orderDetl.setQty(orderDetl.getQty() + pick.getCount()); + if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no", pick.getOrderNo()).eq("matnr", pick.getMatnr()).eq("three_code",pick.getThreeCode()))){ + throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�"+pick.getOrderNo()+pick.getMatnr()); + } + } + // 纭鏄惁鍏ㄩ儴鍑哄簱 + int sameNumber = 0; + List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", pickParams.getWrkNo())); + for (AgvLocDetl agvLocDetl : agvLocDetls) { + for (AgvWrkDetl agvWrkDetl : agvWrkDetls) { + if (agvLocDetl.getMatnr().equals(agvWrkDetl.getMatnr()) + && agvLocDetl.getThreeCode().equals(agvWrkDetl.getThreeCode()) + && agvLocDetl.getSuppCode().equals(agvWrkDetl.getSuppCode()) + && agvLocDetl.getAnfme().equals(agvWrkDetl.getAnfme())) { + sameNumber++; + } + } + } + if (agvLocDetls.size() == sameNumber) { + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("wrk_no", pickParams.getWrkNo())); + agvWrkMast.setIoType(101); + agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", pickParams.getWrkNo())); + } + + + return "缁勬墭鎴愬姛锛岀粦瀹氱珯鐐规垚鍔�"; + } + + /* + AGV鏃犲崟缁勬墭 + */ + private void NoOrderComb(CombParam param, Long userId){ + List<DetlDto> detlDtos = mappingDetlDtoByCombMat(param,null); + + //鐢ㄤ簬缁熶竴涓�涓揣鏋朵笅鐨勫叆搴撻�氱煡妗g殑鐢熸垚鏃堕棿 + Date now = new Date(); + detlDtos.forEach(detlDto -> { + syncWaitPakin(detlDto,"",param.getBarcode(),userId,now); + }); + } + + + + /* + AGV鏈夊崟缁勬墭 + */ + private void OrderComb(CombParam param, Long userId){ + //鍏宠仈缁勬墭 + Order order = orderService.selectByNo(param.getOrderNo()); + if(Cools.isEmpty(order)){ + throw new CoolException("鍗曟嵁缂栧彿涓嶅瓨鍦�"); + } + //璁㈠崟鐘舵��2浠ヤ笂涓哄畬鎴愭垨鑰呭彇娑堢殑璁㈠崟 + if (order.getSettle() > 2) { + throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�"); + } + // 鐢ㄤ簬鐢熸垚鍏ュ簱閫氱煡妗f墍闇�鍙傛暟 + List<DetlDto> detlDtos = mappingDetlDtoByCombMat(param,order); + //鐢ㄤ簬缁熶竴涓�涓揣鏋朵笅鐨勫叆搴撻�氱煡妗g殑鐢熸垚鏃堕棿 + Date now = new Date(); + for (DetlDto detlDto : detlDtos) { + //鍚屾鐢熸垚鍏ュ簱閫氱煡妗� + syncWaitPakin(detlDto,order.getOrderNo(),param.getBarcode(),userId,now); + } + //淇敼鍗曟嵁鐘舵�佷负2.浣滀笟涓� + orderService.updateSettle(order.getId(), 2L, userId); + } + + /* + 鏍规嵁PDA鎵爜鎵�浼犵殑鐗╂枡淇℃伅鍙傛暟鏄犲皠涓篋etlDto + */ + private List<DetlDto> mappingDetlDtoByCombMat(CombParam param, Order order){ + List<DetlDto> detlDtos = new ArrayList<>(); + param.getCombMats().forEach(combMat -> { + + if(!Cools.isEmpty(order)){ + //妫�鏌ュ叆搴撴暟閲� + checkOrderQty(order,combMat); + } + + DetlDto detlDto = new DetlDto(combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme(), combMat.getCsocode(), combMat.getIsoseq(),combMat.getContainerCode(),param.getLocType()); + //鍚屼竴璐ф灦涓嬬浉鍚岀墿鏂欎俊鎭拰鎵瑰彿杞负涓�涓叆搴撻�氱煡妗� + if (DetlDto.has(detlDtos, detlDto)) { + DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(), detlDto.getCsocode(), detlDto.getIsoseq(),detlDto.getContainerCode()); + assert one != null; + one.setAnfme(one.getAnfme() + detlDto.getAnfme()); + } else { + detlDtos.add(detlDto); + } + }); + + return detlDtos; + } + + /* + 妫�鏌ュ叆搴撴暟閲忔槸鍚﹀皬浜庣瓑浜庡崟鎹暟閲忥紝鍚堢悊鍒欎慨鏀筄rderDetl浣滀笟鏁伴噺淇℃伅锛屽惁鍒欐姏鍑哄紓甯� + */ + private void checkOrderQty(Order order, CombParam.CombMat combMat){ + // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙锛屽鏋滀綔涓氭暟閲忓ぇ浜庡崟鎹暟閲忓垯鎶涘嚭寮傚父 + OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), combMat.getMatnr(), combMat.getBatch(), combMat.getCsocode(),combMat.getIsoseq()); + if(Cools.isEmpty(orderDetl)){ + throw new CoolException("鏈尮閰嶅埌璇ュ崟鎹笅鐨勭墿鏂�"); + } + if (combMat.getAnfme() > orderDetl.getEnableQty()) { + throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�"); + } + // 淇敼璁㈠崟鏄庣粏鏁伴噺 + if (!orderDetlService.increase(order.getId(), combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme(), combMat.getCsocode(),combMat.getIsoseq())) { + throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触"); + } + } + + /* + 鍚屾鐢熸垚AGV鍏ュ簱閫氱煡妗f暟鎹� + */ + private void syncWaitPakin(DetlDto detlDto, String orderNo, String zpallet, Long userId, Date now ){ + Mat mat = matService.selectByMatnr(detlDto.getMatnr()); + if (Cools.isEmpty(mat)) { + throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); + } + AgvWaitPakin waitPakin = new AgvWaitPakin(); + waitPakin.sync(mat); + waitPakin.setOrderNo(orderNo); // 鍗曟嵁缂栧彿 + waitPakin.setBatch(detlDto.getBatch()); // 搴忓垪鐮� + //waitPakin.setZpallet(zpallet); // 璐ф灦鐮� + waitPakin.setSuppCode(zpallet); // 璐ф灦鐮� + waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵�� + waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺 + waitPakin.setStatus("Y"); // 鐘舵�� + + ////閿�鍞鍗曞彿 + waitPakin.setThreeCode(detlDto.getCsocode()); + //閿�鍞鍗曡鍙� + waitPakin.setDeadTime(detlDto.getIsoseq()); + + waitPakin.setLocType(detlDto.getLocType()); + + + waitPakin.setAppeUser(userId); + waitPakin.setAppeTime(now); + waitPakin.setModiUser(userId); + waitPakin.setModiTime(now); + if (!agvWaitPakinService.insert(waitPakin)) { + throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�"); + } + } + @Override @Transactional @@ -161,26 +309,414 @@ } @Override - public void combBinding(String barcode, String stationCode) { - EntityWrapper<AgvBasDevp> wrapper = new EntityWrapper<>(); - wrapper.eq("dev_no",stationCode); - AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(wrapper); + public void combBinding(String barcode, String stationCode, Short containerType) { + + AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no", stationCode)); + + if(Cools.eq(agvBasDevp.getBarcode(),barcode)){ + return; + } + + if(Cools.isEmpty(agvWaitPakinService.selectByContainerCode(barcode))){ + throw new CoolException("璇ヨ揣鏋舵湭缁勬墭锛屾棤娉曠粦瀹氱珯鐐�"); + } + + AgvBasDevp agvBasDevp1 = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("barcode", barcode)); + + if(!Cools.isEmpty(agvBasDevp1)){ + throw new CoolException(barcode + "宸茬粡缁戝畾鍦�"+ agvBasDevp.getDevNo() +"绔欑偣"); + } + if(agvBasDevp == null){ throw new CoolException(stationCode + "绔欑偣淇℃伅閿欒"); } if(!"O".equals(agvBasDevp.getLocSts())){ throw new CoolException(stationCode + "璇ョ珯鐐硅揣浣嶇姸鎬侀潪绌�"); } + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvBasDevp.getDevNo())); + if(!Cools.isEmpty(agvWrkMast)){ + throw new CoolException(stationCode + "璇ョ珯鐐瑰凡琚伐浣滃彿涓�" + agvWrkMast.getWrkNo() + "鍗犵敤锛屾棤娉曠粦瀹�"); + } agvBasDevp.setBarcode(barcode); agvBasDevp.setLocSts("F"); - agvBasDevpService.update(agvBasDevp,wrapper); + agvBasDevp.setLocType2(containerType); + agvBasDevpService.update(agvBasDevp,(new EntityWrapper<AgvBasDevp>().eq("dev_no",stationCode))); } public List<AgvBasDevp> getAgvBasDevpByFloor(int floor) { EntityWrapper<AgvBasDevp> wrapper = new EntityWrapper<>(); - wrapper.eq("floor",floor).eq("cache_shelves","Y"); - return agvBasDevpService.selectList(wrapper); + wrapper.eq("floor",floor).eq("cache_shelves","Y").eq("loc_sts","F"); + List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(wrapper); + return agvBasDevpList.stream().filter(agvBasDevp -> { + return !Cools.isEmpty(agvWaitPakinService.selectByContainerCode(agvBasDevp.getBarcode())); + }).collect(Collectors.toList()); + } + + @Override + public void pakinEmpty(String devNo, boolean pakin) { + //褰撳墠绔欑偣淇℃伅 + AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo); + //瀵绘壘鐩稿悓绫诲瀷鐨勫簱浣� + + //鐢熸垚绌虹洏宸ヤ綔妗� + + //鏇存敼搴撲綅鐘舵�佷互鍙婄珯鐐圭姸鎬� + } + + @Override + public void pakoutEmpty(String devNo) { + + } + + /* + 鎵嬪姩绉诲簱 + */ + @Override + @Transactional + public String handControlLocMove(LocMoveParam param, Long userId) { + String fl = String.valueOf(param.getFloor()); + short floor =(short)Integer.parseInt(fl.substring(0, 1)); + Integer ioType = 0; + AgvLocMast agvLocMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", param.getLocNo())); + if (Cools.isEmpty(agvLocMast)) { + throw new CoolException("褰撳墠搴撲綅涓虹┖锛岃妫�鏌ュ簱浣嶏紒"); + } +// if (agvLocMast.getLocSts() == "F") { +// return R.error("褰撳墠搴撲綅涓嶄负鍦ㄥ簱锛屾垨鑰呯┖璐ф灦锛屼笉鏀寔绉诲簱"); + + // 鏍¢獙妤煎眰 + if (agvLocMast.getLocType1() != 3) { // 涓嶄负绠卞3鍖哄煙 + if (agvLocMast.getFloor() != floor) { + throw new CoolException("褰撳墠搴撲綅涓嶆敮鎸佽法妤煎眰杞Щ"); + } else { + ioType = 11; + } + } else { + if (agvLocMast.getFloor() != floor) { + if (floor==1 && agvLocMast.getFloor()!=1){ + ioType = 121; + }else { + if (agvLocMast.getFloor() == 1) { + throw new CoolException("褰撳墠搴撲綅璇烽�夋嫨璋冩嫧鍗曡皟鎷紒"); + } else { + ioType = 12; + } + } + } else { + ioType = 11; + } + } + Date now = new Date(); + //鏌ヨ宸ヤ綔妗� + AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode()); + if(!Cools.isEmpty(agvWrkMast)){ + throw new CoolException("褰撳墠"+agvLocMast.getBarcode()+"璐ф灦鐮佸凡鍦ㄥ伐浣滄。涓�"); + } + //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅 + AgvLocMast locMast = agvCommonService.getLocNo(agvLocMast.getLocType1(),floor); + if (Cools.isEmpty(locMast)) { + throw new CoolException("褰撳墠妤煎眰娌℃湁绌哄簱浣�"); + } + //鐢熸垚宸ヤ綔妗� + AgvWrkMast mast = new AgvWrkMast(); + //宸ヤ綔鐘舵�� + if (ioType==121) { + mast.setWrkSts(11L); + }else { + mast.setWrkSts(201L); + } + //鍏ュ嚭搴撶被鍨� + mast.setIoType(ioType); + mast.setIoTime(now); + //浼樺厛绾� + mast.setIoPri(300.0); + //婧愮珯鐐� + mast.setSourceLocNo(agvLocMast.getLocNo()); + //鐩爣绔欑偣 + mast.setLocNo(locMast.getLocNo()); + //璐ф灦缂栫爜 + mast.setBarcode(agvLocMast.getBarcode()); + //璐ф灦绫诲瀷 + mast.setWhsType(30); + + mast.setAppeUser(userId); + mast.setAppeTime(now); + mast.setModiUser(userId); + mast.setModiTime(now); + if (!agvWrkMastService.insertByIncrease(mast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + if (agvLocMast.getLocSts().equals("F")) { + AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locMast.getLocNo()).eq("source_loc_no",agvLocMast.getLocNo())); + //鐢熸垚宸ヤ綔妗f槑缁� + List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo())); + agvLocDetls.forEach(agvLocDetl -> { + AgvWrkDetl wrkDetl = new AgvWrkDetl(); + wrkDetl.setWrkNo(mast1.getWrkNo()); + wrkDetl.sync(agvLocDetl); + wrkDetl.setSuppCode(agvLocDetl.getSuppCode()); + wrkDetl.setIoTime(now); + wrkDetl.setAppeUser(9527L); + wrkDetl.setAppeTime(now); + wrkDetl.setModiUser(9527L); + wrkDetl.setModiTime(now); + if (!agvWrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + }); + } + + // 濡傛灉褰撳墠浠诲姟鏄澹充簩涓夋ゼ鍥為��涓�妤肩殑 鍥炴粴璋冩嫧鍗� + if (ioType == 12 && locMast.getFloor() == 1) { + List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo())); + for (AgvLocDetl agvLocDetl : agvLocDetls) { + OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvLocDetl.getThreeCode()).eq("matnr", agvLocDetl.getMatnr()).eq("order_no", "DB" + agvLocDetl.getOrderNo())); + orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme()); + if (!orderDetlService.updateById(orderDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + } + } + //鏇存柊鐩爣搴撲綅鐘舵�� + updateAgvLocMast(agvLocMast,"P"); + updateAgvLocMast(locMast,"Q"); + return "ok"; + } + + /* + 璋冩嫧绂诲満 + */ + @Override + @Transactional + @Synchronized + public String allocationOut(AgvMobileStartPakin param, Long userId) { + Date now = new Date(); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", param.getDevNo())); + Integer oldWrkNo = agvWrkMast.getWrkNo(); + if (Cools.isEmpty(agvWrkMast)) { + throw new CoolException("宸ヤ綔妗d腑娌℃湁姝ょ珯鐐逛换鍔�"); + } + + //鐢熸垚AGV宸ヤ綔鍘嗗彶妗� + 鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗� + agvWrkMastLogService.save(agvWrkMast); + agvWrkDetlLogService.save(agvWrkMast.getWrkNo()); + //鍒犻櫎AGV宸ヤ綔妗� + agvWrkMastService.deleteById(agvWrkMast); + //鐢熸垚宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(111, 210L, "", "", agvWrkMast.getBarcode(), now, userId, 30, agvWrkMast.getCrnNo()); + // 鏇存柊宸ヤ綔鏄庣粏 + List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code", agvWrkMast.getBarcode())); + for (AgvWrkDetl agvWrkDetl : agvWrkDetls) { + agvWrkDetl.setWrkNo(wrkMast.getWrkNo()); + // 淇濇寔宸ヤ綔妗f槑缁� + agvWrkDetl.setWrkNo(wrkMast.getWrkNo()); + agvWrkDetl.setModiUser(userId); + agvWrkDetl.setModiTime(now); + if (!agvWrkDetlService.insert(agvWrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + } + // 鏇存柊绔欑偣鐘舵�� + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); + // 鏇存柊婧愬簱浣嶇姸鎬� + agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); + + //鍒犻櫎AGV宸ヤ綔鏄庣粏妗� + agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",oldWrkNo)); + return "ok"; + } + /* + 璋冩嫧杩涘満 + */ + @Override + @Transactional + public String allocationIn(AgvMobileStartPakin param, Long userId) { + Date now = new Date(); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode", param.getBarcode())); + if (agvWrkMast.getIoType() != 111) { + throw new CoolException("闈炴墜鍔ㄨ皟鎷ㄤ换鍔★紝涓嶆敮鎸佹鍔熻兘"); + } + AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(param.getDevNo()); + if (Cools.isEmpty(agvWrkMast)) { + throw new CoolException("宸ヤ綔妗d腑娌℃湁姝よ揣鏋朵换鍔�"); + } + if (agvWrkMast.getCrnNo() != agvBasDevp.getFloor()) { + throw new CoolException("璇风Щ鍔ㄥ埌->" + agvWrkMast.getCrnNo() + "妤煎叆搴撶偣鍏ュ簱"); + } + AgvLocMast locNo = agvCommonService.getLocNo(3, 1); + //宸ヤ綔鐘舵�� + agvWrkMast.setWrkSts(211L); + //鍏ュ嚭搴撶被鍨� + agvWrkMast.setIoType(112); + agvWrkMast.setSourceLocNo(param.getDevNo()); + agvWrkMast.setModiUser(userId); + agvWrkMast.setModiTime(now); + if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) { + throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); + } + // + agvLocMastService.updateLocStsByLocNo(locNo.getLocNo(),"S",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); + // 鏇存柊婧愬簱浣嶇姸鎬� + agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"R",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); + //鍒犻櫎AGV宸ヤ綔妗� + return "ok"; + } + /* + 绌烘灦绂诲満 + */ + @Override + @Transactional + @Synchronized + public String empOut(AgvMobileStartPakin param, Long userId) { + Date now = new Date(); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", param.getDevNo())); + Integer oldWrkNo = agvWrkMast.getWrkNo(); + if (Cools.isEmpty(agvWrkMast)) { + throw new CoolException("宸ヤ綔妗d腑娌℃湁姝ょ珯鐐逛换鍔�"); + } + agvWrkMast.setWrkSts(213L); + agvWrkMast.setSourceLocNo(""); + if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) { + throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); + } + // 鏇存柊婧愬簱浣嶇姸鎬� + agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"O","",agvWrkMast.getWhsType().shortValue()); + return "ok"; + } + /* + 绌烘灦杩涘満 + */ + @Override + @Transactional + @Synchronized + public String empIn(AgvMobileStartPakin param, Long userId) { + Date now = new Date(); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode", param.getBarcode())); + if (Cools.isEmpty(agvWrkMast)) { + throw new CoolException("宸ヤ綔妗d腑娌℃湁姝ょ珯鐐逛换鍔�"); + } + agvWrkMast.setWrkSts(214L); + agvWrkMast.setSourceLocNo(param.getDevNo()); + if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) { + throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); + } + // 鏇存柊婧愬簱浣嶇姸鎬� + agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"F",param.getBarcode(),agvWrkMast.getWhsType().shortValue()); + return "ok"; + } + /* + * 绔欑偣鍥為�� + */ + @Override + @Transactional + public String handBack(AgvMobileStartPakin param, Long userId) { + Date now = new Date(); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", param.getDevNo())); + agvWrkMast.setIoType(113); + agvWrkMast.setModiUser(userId); + agvWrkMast.setModiTime(now); + if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) { + throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); + } + return "ok"; + } + + /* + * 绔欑偣鍥為�� + */ + @Override + @Transactional + public String doBack(AgvMobileStartPakin param, Long userId) { + Date now = new Date(); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", param.getDevNo())); + AgvWrkMast agvWrkMastSource = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", param.getDevNo())); + if (!Cools.isEmpty(agvWrkMastSource)) { + throw new CoolException("褰撳墠绔欑偣宸叉湁閫�搴撲换鍔�"); + } + Integer oldWrkNo = agvWrkMast.getWrkNo(); + if (!agvWrkMast.getBarcode().equals(param.getBarcode())) { + throw new CoolException("鍥為��浠诲姟鐨勮揣鏋剁爜涓庡綋鍓嶈揣鏋剁爜涓嶄竴鑷�!"); + } + if (agvWrkMast.getWrkSts() != 205) { + throw new CoolException("鍑哄簱浠诲姟鏈畬鎴�!"); + } + // 鏂板缓鍥為��宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(58, 201L, agvWrkMast.getLocNo(), agvWrkMast.getSourceLocNo(), agvWrkMast.getBarcode(), now, userId, agvWrkMast.getWhsType(), 0); + // 鏇存柊鎺ラ┏浣嶏紝鏇存柊搴撲綅鐘舵�� + agvLocMastService.updateLocStsByLocNo(wrkMast.getLocNo(),"S",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue()); + agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getSourceLocNo(),"R",wrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); + // 鏇存柊宸ヤ綔鏄庣粏 + List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code", agvWrkMast.getBarcode())); + for (AgvWrkDetl agvWrkDetl : agvWrkDetls) { + agvWrkDetl.setWrkNo(wrkMast.getWrkNo()); + // 淇濇寔宸ヤ綔妗f槑缁� + agvWrkDetl.setWrkNo(wrkMast.getWrkNo()); + agvWrkDetl.setModiUser(userId); + agvWrkDetl.setModiTime(now); + if (!agvWrkDetlService.insert(agvWrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + // 鍚屾璁㈠崟鏁伴噺 + OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("matnr", agvWrkDetl.getMatnr()).eq("three_code",agvWrkDetl.getThreeCode()).in("source",18,31,34)); + orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme()); + if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no",orderDetl.getOrderNo()).eq("matnr", orderDetl.getMatnr()).eq("three_code",orderDetl.getThreeCode()))){ + throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�"+orderDetl.getOrderNo()+orderDetl.getMatnr()); + } + } + + //鐢熸垚AGV宸ヤ綔鍘嗗彶妗� + 鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗� + agvWrkMastLogService.save(agvWrkMast); + agvWrkDetlLogService.save(agvWrkMast.getWrkNo()); + //鍒犻櫎AGV宸ヤ綔妗� + agvWrkMastService.deleteById(agvWrkMast); + //鍒犻櫎AGV宸ヤ綔鏄庣粏妗� + agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",oldWrkNo)); + return "ok"; + } + /* + 鏇存柊鐩爣搴撲綅淇℃伅 + */ + private void updateAgvLocMast(AgvLocMast locMast, String locSts){ + locMast.setLocSts(locSts); + agvLocMastService.updateById(locMast); + } + + /* + 鐢熸垚宸ヤ綔妗� + */ + private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId, int containerType,int floor){ + AgvWrkMast wrkMast = new AgvWrkMast(); + //宸ヤ綔鐘舵�� + wrkMast.setWrkSts(wrkSts); + //鍏ュ嚭搴撶被鍨� + wrkMast.setIoType(ioType); + wrkMast.setIoTime(now); + //浼樺厛绾� + wrkMast.setIoPri(300.0); + //婧愮珯鐐� + wrkMast.setSourceLocNo(sourceLocNo); + //鐩爣绔欑偣 + wrkMast.setLocNo(locNo); + //璐ф灦缂栫爜 + wrkMast.setBarcode(barcode); + //璐ф灦绫诲瀷 + wrkMast.setWhsType(containerType); + // 鐩爣妤煎眰 + wrkMast.setCrnNo(floor); + + wrkMast.setAppeUser(userId); + wrkMast.setAppeTime(now); + wrkMast.setModiUser(userId); + wrkMast.setModiTime(now); + + if (!agvWrkMastService.insertByIncrease(wrkMast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + + wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no",sourceLocNo).eq("barcode",barcode).orderBy("modi_time",false)); + + return wrkMast; } } -- Gitblit v1.9.1