From 984039880e1f6ccc4cb61c35e0004147aa46d5bc Mon Sep 17 00:00:00 2001
From: whycq <913841844@qq.com>
Date: 星期六, 21 九月 2024 11:20:39 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java | 678 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 654 insertions(+), 24 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 55e753c..7ac7ed3 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,18 @@
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.asrs.utils.CodeDetectionUtil;
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;
@@ -42,6 +46,18 @@
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;
/*
@@ -53,20 +69,29 @@
if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
throw new CoolException(BaseRes.PARAM);
}
-
- //妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鐨勬墭鐩樻潯鐮侊紝瀛樺湪鍒欐姏鍑哄紓甯�
- if (agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().eq("supp_code", param.getBarcode())) > 0) {
- throw new CoolException(param.getBarcode() + "鏂欐兂鐮佸凡瀛樺湪AGV鍏ュ簱閫氱煡妗d腑");
+ if (!CodeDetectionUtil.barcodeDetection(param.getBarcode())){
+ throw new CoolException(param.getBarcode() + "璐ф灦鐮佹湁璇紝璇锋纭壂鐮侊紒锛侊紒");
}
+ param.setContainerType(Short.valueOf(param.getBarcode().substring(0,2)));
- //妫�鏌ュ簱瀛樻槸鍚︽湁鐩稿悓鏂欑锛屽瓨鍦ㄥ垯鎶涘嚭寮傚父
+// //妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鐨勮揣鏋舵潯鐮侊紝瀛樺湪鍒欐姏鍑哄紓甯�
+// 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搴撳瓨鏄庣粏涓�");
+ throw new CoolException(param.getBarcode() + "璐ф灦鐮佸凡瀛樺湪AGV搴撳瓨鏄庣粏涓�");
}
- //鏌ョ湅宸ヤ綔妗f槸鍚︽湁鐩稿悓鏂欑锛屽瓨鍦ㄥ垯鎶涘嚭寮傚父
+ //妫�鏌ュ簱瀛樻槸鍚︽湁鐩稿悓璐ф灦锛屽瓨鍦ㄥ垯鎶涘嚭寮傚父
+ 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腑");
+ throw new CoolException(param.getBarcode() + "璐ф灦鐮佸凡瀛樺湪AGV宸ヤ綔妗d腑");
}
if (Cools.isEmpty(param.getOrderNo())) {
@@ -80,10 +105,86 @@
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()));
+
+ AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("wrk_no", pickParams.getWrkNo()));
+
+ if (Cools.isEmpty(agvWrkMast)){
+ return "澶辫触锛屾湭鏌ュ埌宸ヤ綔涓绘。锛屽伐浣滃彿锛�"+pickParams.getWrkNo();
+ }
+ 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(agvWrkMast.getIoTime());
+ 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);
+ agvWrkDetl.setModiTime(new Date());
+ 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.setIoType(101);
+ agvWrkMast.setModiTime(new Date());
+ agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", pickParams.getWrkNo()));
+ }
+
+
+ return "缁勬墭鎴愬姛锛岀粦瀹氱珯鐐规垚鍔�";
}
/*
@@ -92,12 +193,14 @@
private void NoOrderComb(CombParam param, Long userId){
List<DetlDto> detlDtos = mappingDetlDtoByCombMat(param,null);
- //鐢ㄤ簬缁熶竴涓�涓墭鐩樹笅鐨勫叆搴撻�氱煡妗g殑鐢熸垚鏃堕棿
+ //鐢ㄤ簬缁熶竴涓�涓揣鏋朵笅鐨勫叆搴撻�氱煡妗g殑鐢熸垚鏃堕棿
Date now = new Date();
detlDtos.forEach(detlDto -> {
syncWaitPakin(detlDto,"",param.getBarcode(),userId,now);
});
}
+
+
/*
AGV鏈夊崟缁勬墭
@@ -114,7 +217,7 @@
}
// 鐢ㄤ簬鐢熸垚鍏ュ簱閫氱煡妗f墍闇�鍙傛暟
List<DetlDto> detlDtos = mappingDetlDtoByCombMat(param,order);
- //鐢ㄤ簬缁熶竴涓�涓墭鐩樹笅鐨勫叆搴撻�氱煡妗g殑鐢熸垚鏃堕棿
+ //鐢ㄤ簬缁熶竴涓�涓揣鏋朵笅鐨勫叆搴撻�氱煡妗g殑鐢熸垚鏃堕棿
Date now = new Date();
for (DetlDto detlDto : detlDtos) {
//鍚屾鐢熸垚鍏ュ簱閫氱煡妗�
@@ -136,10 +239,10 @@
checkOrderQty(order,combMat);
}
- DetlDto detlDto = new DetlDto(combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme(), combMat.getCsocode(), combMat.getIsoseq(),combMat.getContainerCode(),param.getLocType());
- //鍚屼竴鎵樼洏涓嬬浉鍚岀墿鏂欎俊鎭拰鎵瑰彿杞负涓�涓叆搴撻�氱煡妗�
+ DetlDto detlDto = new DetlDto(combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme(), combMat.getCsocode(), combMat.getIsoseq(),combMat.getContainerCode(),param.getLocType(),combMat.getProcessSts());
+ //鍚屼竴璐ф灦涓嬬浉鍚岀墿鏂欎俊鎭拰鎵瑰彿杞负涓�涓叆搴撻�氱煡妗�
if (DetlDto.has(detlDtos, detlDto)) {
- DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(), detlDto.getCsocode(), detlDto.getIsoseq(),null);
+ 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 {
@@ -180,8 +283,8 @@
waitPakin.sync(mat);
waitPakin.setOrderNo(orderNo); // 鍗曟嵁缂栧彿
waitPakin.setBatch(detlDto.getBatch()); // 搴忓垪鐮�
- //waitPakin.setZpallet(zpallet); // 鎵樼洏鐮�
- waitPakin.setSuppCode(zpallet); // 鎵樼洏鐮�
+ //waitPakin.setZpallet(zpallet); // 璐ф灦鐮�
+ waitPakin.setSuppCode(zpallet); // 璐ф灦鐮�
waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵��
waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺
waitPakin.setStatus("Y"); // 鐘舵��
@@ -192,6 +295,8 @@
waitPakin.setDeadTime(detlDto.getIsoseq());
waitPakin.setLocType(detlDto.getLocType());
+
+ waitPakin.setProcessSts(detlDto.getProcessSts());
waitPakin.setAppeUser(userId);
@@ -217,19 +322,24 @@
}
@Override
- public void combBinding(String barcode, String stationCode) {
+ public void combBinding(String barcode, String stationCode, Short containerType) {
- if(Cools.isEmpty(agvWaitPakinService.selectByContainerCode(barcode))){
- throw new CoolException("璇ユ枡绠辨湭缁勬墭锛屾棤娉曠粦瀹氱珯鐐�");
+ AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no", stationCode));
+
+ if(Cools.eq(agvBasDevp.getBarcode(),barcode)){
+ return;
}
- AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("barcode", barcode));
+ if(Cools.isEmpty(agvWaitPakinService.selectByContainerCode(barcode))){
+ throw new CoolException("璇ヨ揣鏋舵湭缁勬墭锛屾棤娉曠粦瀹氱珯鐐�");
+ }
- if(!Cools.isEmpty(agvBasDevp)){
+ AgvBasDevp agvBasDevp1 = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("barcode", barcode));
+
+ if(!Cools.isEmpty(agvBasDevp1)){
throw new CoolException(barcode + "宸茬粡缁戝畾鍦�"+ agvBasDevp.getDevNo() +"绔欑偣");
}
- agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no",stationCode));
if(agvBasDevp == null){
throw new CoolException(stationCode + "绔欑偣淇℃伅閿欒");
}
@@ -243,6 +353,7 @@
agvBasDevp.setBarcode(barcode);
agvBasDevp.setLocSts("F");
+ agvBasDevp.setLocType2(containerType);
agvBasDevpService.update(agvBasDevp,(new EntityWrapper<AgvBasDevp>().eq("dev_no",stationCode)));
}
@@ -255,4 +366,523 @@
}).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));
+ switch (param.getFloor()) {
+ case "1F01":
+ floor = 1;
+ break;
+ case "1F02":
+ floor = 4;
+ break;
+ case "2F":
+ floor = 2;
+ break;
+ case "3F":
+ floor = 3;
+ break;
+ }
+ 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 (agvLocMast.getFloor() == 1 && (floor == 2 || floor == 3)) {
+ throw new CoolException("褰撳墠搴撲綅璇烽�夋嫨璋冩嫧鍗曡皟鎷紒");
+ } else {
+ ioType = 12;
+ }
+ } else {
+ if (agvLocMast.getFloor() == 1) {
+ if (agvLocMast.getLev1() == 1 && floor == 1) {
+ ioType = 11;
+ } 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 = null;
+ if (floor == 1) {
+ locMast = agvCommonService.getLocNo(agvLocMast.getLocType1(),floor,true,false);
+ } else {
+ locMast = agvCommonService.getLocNo(agvLocMast.getLocType1(),floor,false,false);
+ }
+
+ // 鐩爣妤煎眰鍘� 鍚稿2妤�
+ if (floor == 4) {
+ if (locMast.getLev1() == 1) {
+ throw new CoolException("鍚稿涓�妤兼病鏈夌┖搴撲綅鍙互绉诲簱锛�");
+ }
+
+ }
+
+ 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);
+ mast.setLogErrMemo("handControlLocMove");
+ 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 && floor != 4 && agvLocMast.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("source", 33));
+ if (Cools.isEmpty(orderDetl)) {
+ throw new CoolException("褰撳墠鐗╂枡鐨勮皟鎷ㄥ崟涓嶅瓨鍦紒");
+ }
+ 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();
+ if(Cools.isEmpty(param.getBarcode())) {
+ throw new CoolException("璇疯緭鍏ヨ揣鏋剁爜");
+ }
+ AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", param.getDevNo()));
+ Integer oldWrkNo = agvWrkMast.getWrkNo();
+ if (Cools.isEmpty(agvWrkMast)) {
+ throw new CoolException("宸ヤ綔妗d腑娌℃湁姝ょ珯鐐逛换鍔�");
+ }
+ if (!agvWrkMast.getBarcode().equals(param.getBarcode())) {
+ throw new CoolException("褰撳墠璐ф灦鐮佷笌浠诲姟涓嶅尮閰�");
+ }
+ if (!agvWrkMast.getWrkSts().equals(207L) && !agvWrkMast.getWrkSts().equals(205L)) {
+ throw new CoolException("褰撳墠宸ヤ綔鐘舵��:" + agvWrkMast.getWrkSts$() +"涓嶇鍚堢鍦烘潯浠�");
+ }
+ if (agvWrkMast.getWrkSts().equals(205L)) {
+ // 搴撲綅 -- 鎺ラ┏浣� / 搴撲綅
+ if (agvWrkMast.getLocNo().substring(0,2).equals("DB")) {
+ agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
+ // 鎺ラ┏浣� -- 搴撲綅
+ } else {
+ agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
+ }
+
+ // 鎺ラ┏浣� -- 搴撲綅
+ if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) {
+ agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0);
+ // 搴撲綅 -- 鎺ラ┏浣� / 搴撲綅
+ } else {
+ //淇敼婧愬簱浣嶇姸鎬佷负O
+ agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0);
+ //鏇存柊鐩爣搴撲綅鏄庣粏 101.鍑哄簱 鍒犻櫎婧愬簱浣嶅簱瀛樻槑缁�
+ agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
+ }
+ }
+
+ //鐢熸垚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 (Cools.isEmpty(agvWrkMast)) {
+ throw new CoolException("鏆傛棤褰撳墠璐ф灦鐮佺殑浠诲姟");
+ }
+ if (agvWrkMast.getIoType() != 111) {
+ throw new CoolException("闈炴墜鍔ㄨ皟鎷ㄤ换鍔★紝涓嶆敮鎸佹鍔熻兘");
+ }
+ if (!Cools.isEmpty(agvWrkMast.getSourceLocNo())) {
+ 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,false,true);
+ //宸ヤ綔鐘舵��
+ 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();
+ if (Cools.isEmpty(param.getBarcode())) {
+ throw new CoolException("璇疯緭鍏ヨ揣鏋剁爜");
+ }
+ 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腑娌℃湁姝ょ珯鐐逛换鍔�");
+ }
+ if (!agvWrkMast.getBarcode().equals(param.getBarcode())) {
+ throw new CoolException("褰撳墠璐ф灦鐮佷笌浠诲姟涓嶅尮閰�");
+ }
+ agvWrkMast.setModiTime(new Date());
+ 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腑娌℃湁姝ょ珯鐐逛换鍔�");
+ }
+ if (agvWrkMast.getIoType() != 113) {
+ throw new CoolException("褰撳墠宸ヤ綔绫诲瀷涓嶈兘绌烘灦杩涘満");
+ }
+ if (agvWrkMast.getWrkSts() != 213) {
+ throw new CoolException("褰撳墠宸ヤ綔绫诲瀷涓嶈兘绌烘灦杩涘満");
+ }
+ agvWrkMast.setWrkSts(214L);
+ agvWrkMast.setModiTime(new Date());
+ 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 processed(AgvMobileStartPakin param, Long userId) {
+ Date now = new Date();
+ AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode", param.getBarcode()).eq("loc_no", param.getDevNo()));
+ if (Cools.isEmpty(agvWrkMast)) {
+ throw new CoolException("鏆傛棤褰撳墠璐ф灦鐨勫伐浣滄。");
+ }
+ if (agvWrkMast.getWrkSts() != 205) {
+ throw new CoolException("褰撳墠浠诲姟鏈畬鎴愶紝璇风‘璁�");
+ }
+ //鐢熸垚AGV宸ヤ綔鍘嗗彶妗� + 鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗�
+ agvWrkMastLogService.save(agvWrkMast);
+ agvWrkDetlLogService.save(agvWrkMast.getWrkNo());
+ String sourceLocNo = agvWrkMast.getSourceLocNo();
+ AgvLocMast newLocMast = agvCommonService.getLocNo(3, 1,false,false);
+ agvWrkMast.setSourceLocNo(agvWrkMast.getLocNo());
+ agvWrkMast.setLocNo(newLocMast.getLocNo());
+ agvWrkMast.setIoType(57);
+ agvWrkMast.setWrkSts(201L);
+ agvWrkMast.setModiUser(userId);
+ agvWrkMast.setModiTime(now);
+
+
+
+ if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) {
+ throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+ }
+
+ // 鏇存柊婧愮珯鐐� + 鐩爣搴撲綅鐘舵�� + 鍘嗗彶婧愬簱浣�
+ agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"R",param.getBarcode(),agvWrkMast.getWhsType().shortValue());
+ agvLocMastService.updateLocStsByLocNo(newLocMast.getLocNo(),"S",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
+ agvLocMastService.updateLocStsByLocNo(sourceLocNo,"O","",(short)30);
+ agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",sourceLocNo));
+
+ List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code",param.getBarcode()));
+ agvWrkDetls.forEach(agvWrkDetl -> {
+ for (AgvWrkDetl wrkDetl : param.getWrkDetls()) {
+ if (wrkDetl.getMatnr().equals(agvWrkDetl.getMatnr()) && wrkDetl.getThreeCode().equals(agvWrkDetl.getThreeCode())) {
+ agvWrkDetl.setAnfme(wrkDetl.getAnfme());
+ break;
+ }
+ }
+ agvWrkDetl.setProcessSts(2);
+ agvWrkDetl.setOrderNo(agvWrkDetl.getOrderNo().substring(2));
+ agvWrkDetl.setModiUser(userId);
+ agvWrkDetl.setModiTime(now);
+ if (!agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>()
+ .eq("matnr",agvWrkDetl.getMatnr())
+ .eq("three_code",agvWrkDetl.getThreeCode())
+ .eq("supp_code",param.getBarcode()))) {
+ throw new CoolException("鏇存柊宸ヤ綔鏄庣粏澶辫触");
+ }
+ });
+ return "ok";
+ }
+
+
+
+ /*
+ * 绔欑偣鍥為��
+ */
+ @Override
+ @Transactional
+ public String doBack(AgvMobileStartPakin param, Long userId) {
+ if (Cools.isEmpty(param.getBarcode()) || !CodeDetectionUtil.barcodeDetection(param.getBarcode())){
+ throw new CoolException(param.getBarcode() + "璐ф灦鐮佹湁璇紝璇锋纭壂鐮侊紒锛侊紒");
+ }
+ if (Cools.isEmpty(param.getDevNo()) || !CodeDetectionUtil.carCodeDetection(param.getDevNo())){
+ throw new CoolException(param.getDevNo() + "灏忚溅鍦扮爜鏈夎锛岃姝g‘鎵爜锛侊紒锛�");
+ }
+ 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);
+ wrkMast.setLogErrMemo("doBack");
+ 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