From abcbc1657792026dbb9db86689141544e8d86b77 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期四, 19 十月 2023 11:42:48 +0800
Subject: [PATCH] 补货单流程更新
---
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 265 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 249 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index faa8d95..1ed3d71 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -6,13 +6,13 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
+import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDto;
import com.zy.common.model.OrderDto;
import com.zy.common.model.StartupDto;
import com.zy.common.model.TaskDto;
-import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.AgvCommonService;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
@@ -21,7 +21,9 @@
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
+import java.util.Iterator;
import java.util.List;
+import java.util.UUID;
/**
* Created by vincent on 2020/6/11
@@ -55,6 +57,12 @@
private OrderService orderService;
@Autowired
private OrderDetlService orderDetlService;
+ @Autowired
+ private AdjDetlService adjDetlService;
+ @Autowired
+ private AgvWrkMastLogService agvWrkMastLogService;
+ @Autowired
+ private AgvWrkDetlLogService agvWrkDetlLogService;
/*
@@ -74,7 +82,7 @@
throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁璐т綅鐘舵�佷笉涓篎.鍦ㄥ簱鐨勭珯鐐癸紝璇烽噸鏂伴�夋嫨");
}
- List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("zpallet", agvBasDevp.getBarcode()));
+ List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode()));
//妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor());
@@ -84,7 +92,7 @@
//鐢熸垚宸ヤ綔妗f槑缁�
//createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId);
agvWaitPakinList.forEach(wp -> {
- createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getZpallet(),now,userId);
+ createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime());
});
//鏇存柊婧愮珯鐐逛俊鎭�
updateAgvBasDevp(agvBasDevp,"R");
@@ -114,18 +122,21 @@
long wrkSts = 21L;
String sourceLocNo = taskDto.getLocNo();
String targetLocNo = taskDto.getAgvStaNo();
- String barcode = agvLocDetl.getZpallet();
+ String barcode = agvLocDetl.getSuppCode();
//鏄庣粏妗f墍闇�鍙傛暟
String mantr = taskDto.getLocDtos().get(0).getMatnr();
String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
String batch = taskDto.getLocDtos().get(0).getBatch();
+
+ String csocode = agvLocDetl.getThreeCode();
+ String isoseq = agvLocDetl.getDeadTime();
//鍒ゆ柇鏄惁鍏ㄦ澘鍑哄簱
int ioType = isPakOut(sourceLocNo,anfme) ? 101 : 103;
//鐢熸垚宸ヤ綔妗�
AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,barcode,now,userId);
//鐢熸垚宸ヤ綔妗f槑缁�
- createWrkDetlReWrite(mantr,wrkMast.getWrkNo(),orderNo,batch,anfme,barcode,now,userId);
+ createWrkDetlReWrite(mantr,wrkMast.getWrkNo(),orderNo,batch,anfme,barcode,now,userId,csocode,isoseq);
//淇敼璁㈠崟淇℃伅
modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
//鏇存柊婧愮珯鐐逛俊鎭�
@@ -201,9 +212,9 @@
Date now = new Date();
//鐢熸垚宸ヤ綔鍏�
- AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getZpallet(), now, userId);
+ AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getSuppCode(), now, userId);
//鐢熸垚宸ヤ綔鏄庣粏妗�
- createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId);
+ createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId,agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime());
//淇敼搴撲綅淇℃伅
updateAgvLocMast(agvLocMast,"P");
//淇敼绔欑偣淇℃伅
@@ -231,9 +242,9 @@
Date now = new Date();
//鐢熸垚绉诲簱宸ヤ綔妗�
- AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getZpallet(), now, userId);
+ AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId);
//鐢熸垚宸ヤ綔鍏氭槑缁�
- createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId);
+ createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime());
//淇敼鐩爣搴撲綅鐘舵��
updateAgvLocMast(targetLocMast,"S");
//淇敼鍘熷簱浣嶇姸鎬�
@@ -293,6 +304,218 @@
});
}
+ @Transactional
+ public void adjustLocDetl(LocDetlAdjustParam param, Long userId) {
+ param.integrate();
+ AgvLocMast locMast = agvLocMastService.selectById(param.getLocNo());
+ if (Cools.isEmpty(locMast)) {
+ throw new CoolException("搴撲綅涓嶅瓨鍦�");
+ }
+ if (!(locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O"))) {
+ throw new CoolException("褰撳墠搴撲綅涓嶅彲璋冩暣锛佸簱浣嶇姸鎬侊細" + locMast.getLocSts$());
+ }
+
+ Date now = new Date();
+ List<AgvLocDetl> locDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", param.getLocNo()));
+
+ List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList();
+
+ // 淇敼鏁伴噺
+ Iterator<AgvLocDetl> iterator = locDetls.iterator();
+ while (iterator.hasNext()) {
+ AgvLocDetl locDetl = iterator.next();
+
+ Iterator<LocDetlAdjustParam.LocDetlAdjust> iterator1 = list.iterator();
+ while (iterator1.hasNext()) {
+ LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
+ if (adjust.getCount() == 0) { continue; }
+ if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
+ if (!locDetl.getAnfme().equals(adjust.getCount())) {
+ // todo 鐩樼偣璁板綍
+ // 淇敼搴撳瓨
+ if (!agvLocDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
+ throw new CoolException(locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佷慨鏀规暟閲忓け璐�");
+ }
+ // 淇濆瓨璋冩暣璁板綍
+ AdjDetl adjDetl = new AdjDetl();
+ adjDetl.setLocNo(locDetl.getLocNo());
+ adjDetl.setMatnr(locDetl.getMatnr());
+ adjDetl.setBatch(locDetl.getBatch());
+ adjDetl.setOriQty(locDetl.getAnfme());
+ adjDetl.setAdjQty(adjust.getCount());
+ adjDetl.setModiTime(now);
+ adjDetl.setModiUser(userId);
+ adjDetl.setAppeTime(now);
+ adjDetl.setAppeUser(userId);
+
+ UUID uuid = UUID.randomUUID();
+ adjDetl.setOrderNo(uuid.toString());
+ adjDetl.setCsocode(locDetl.getThreeCode());
+ adjDetl.setIsoseq(locDetl.getDeadTime());
+
+ adjDetlService.save(adjDetl, userId);
+ }
+ iterator.remove();
+ iterator1.remove();
+ }
+ }
+ }
+
+ // 鍒犻櫎搴撳瓨
+ for (AgvLocDetl locDetl : locDetls) {
+ // todo 鐩樼偣璁板綍
+ if (!agvLocDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
+ throw new CoolException("鍒犻櫎" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�");
+ }
+ // 淇濆瓨璋冩暣璁板綍
+ AdjDetl adjDetl = new AdjDetl();
+ adjDetl.setLocNo(locDetl.getLocNo());
+ adjDetl.setMatnr(locDetl.getMatnr());
+ adjDetl.setBatch(locDetl.getBatch());
+ adjDetl.setOriQty(locDetl.getAnfme());
+ adjDetl.setAdjQty(0.0D);
+ adjDetl.setModiTime(now);
+ adjDetl.setModiUser(userId);
+ adjDetl.setAppeTime(now);
+ adjDetl.setAppeUser(userId);
+
+ adjDetlService.save(adjDetl, userId);
+ }
+
+ // 娣诲姞搴撳瓨
+ for (LocDetlAdjustParam.LocDetlAdjust adjust : list) {
+ if (adjust.getCount() == 0.0D) { continue; }
+ Mat mat = matService.selectByMatnr(adjust.getMatnr());
+ AgvLocDetl locDetl = new AgvLocDetl();
+ locDetl.sync(mat);
+ locDetl.setBatch(adjust.getBatch());
+ locDetl.setLocNo(locMast.getLocNo());
+ locDetl.setAnfme(adjust.getCount()); // 鏁伴噺
+ locDetl.setModiUser(userId); // 鎿嶄綔浜哄憳淇℃伅
+ locDetl.setModiTime(now);
+ locDetl.setAppeUser(userId);
+ locDetl.setAppeTime(now);
+ locDetl.setThreeCode(adjust.getThreeCode());
+ locDetl.setDeadTime(adjust.getDeadTime());
+ if (!agvLocDetlService.insert(locDetl)) {
+ throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�");
+ }
+ // 淇濆瓨璋冩暣璁板綍
+ AdjDetl adjDetl = new AdjDetl();
+ adjDetl.setLocNo(locMast.getLocNo());
+ adjDetl.setMatnr(adjust.getMatnr());
+ adjDetl.setBatch(adjust.getBatch());
+ adjDetl.setOriQty(0.0D);
+ adjDetl.setAdjQty(adjust.getCount());
+ adjDetl.setModiTime(now);
+ adjDetl.setModiUser(userId);
+ adjDetl.setAppeTime(now);
+ adjDetl.setAppeUser(userId);
+
+ UUID uuid = UUID.randomUUID();
+ adjDetl.setOrderNo(uuid.toString());
+ adjDetl.setCsocode(locDetl.getThreeCode());
+ adjDetl.setIsoseq(locDetl.getDeadTime());
+
+ adjDetlService.save(adjDetl, userId);
+ }
+ // 淇敼搴撲綅鐘舵��
+ int count = agvLocDetlService.selectCount(new EntityWrapper<AgvLocDetl>().eq("loc_no", locMast.getLocNo()));
+ if (locMast.getLocSts().equals("F")) {
+ if (count == 0) {
+ locMast.setLocSts("D");
+ }
+ }
+ if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O")) {
+ if (count > 0) {
+ locMast.setLocSts("F");
+ }
+ }
+ locMast.setModiUser(userId);
+ locMast.setModiTime(new Date());
+ if (!agvLocMastService.updateById(locMast)) {
+ throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+ }
+ }
+
+ @Override
+ @Transactional
+ public void completeWrkMast(String workNo, Long userId) {
+ AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
+ if (Cools.isEmpty(wrkMast)){
+ throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+ }
+
+ if(wrkMast.getWrkSts() > 202){
+ //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚
+ agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205);
+
+ //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱 || 107.鐩樼偣鍑哄簱
+ if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107){
+ //淇敼鍑哄簱绔欑偣鐘舵��
+ agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode());
+ }
+ //鍑哄簱浠诲姟 110.绌烘澘鍑哄簱
+ if(wrkMast.getIoType() == 110){
+ agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode());
+ }
+ }
+
+ }
+
+ @Transactional
+ public void cancelWrkMast(String workNo, Long userId) {
+ AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
+ if (Cools.isEmpty(wrkMast)){
+ throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+ }
+ //鎷f枡鍏ュ簱 鐩樼偣鍏ュ簱涓嶅彲鍙栨秷
+ if(wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){
+ throw new CoolException("褰撳墠浠诲姟涓嶅彲鍙栨秷");
+ }
+
+ //AGV鏈哄櫒浜烘湭鍙栬揣鍓嶅彇娑�
+ if(wrkMast.getWrkSts() < 203){
+ //鍏ュ簱鍙栨秷
+ if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10){
+ //婧愮珯鐐�
+ String devNo = wrkMast.getSourceLocNo();
+ //鐩爣搴撲綅
+ String locNo = wrkMast.getLocNo();
+ agvLocMastService.updateLocStsByLocNo(locNo,"O");
+ agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode());
+
+ //鍑哄簱鍙栨秷
+ }else {
+ //婧愬簱浣�
+ String locNo = wrkMast.getSourceLocNo();
+ //鐩爣绔欑偣
+ String devNo = wrkMast.getLocNo();
+ agvLocMastService.updateLocStsByLocNo(locNo,"F");
+ agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O","");
+ }
+
+ }
+
+ //璁㈠崟鍥炴粴
+ AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo()).get(0);
+ if(!Cools.isEmpty(agvWrkDetl.getOrderNo())){
+ OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMatnr(agvWrkDetl.getOrderNo(),agvWrkDetl.getMatnr(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime());
+ orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme());
+ orderDetlService.updateById(orderDetl);
+ }
+
+ //淇濆瓨宸ヤ綔妗d互鍙婃槑缁�
+ agvWrkMastLogService.save(wrkMast);
+ agvWrkDetlLogService.save(wrkMast.getWrkNo());
+
+ //鍒犻櫎宸ヤ綔妗d互鍙婃槑缁�
+ if(!agvWrkMastService.deleteByWrkNo(wrkMast.getWrkNo()) || !agvWrkDetlService.deleteByWrkNo(wrkMast.getWrkNo())){
+ throw new CoolException("鍒犻櫎澶辫触锛岃鑱旂郴绠$悊鍛�");
+ }
+
+ }
+
/*
鏇存柊鐩爣搴撲綅淇℃伅
*/
@@ -312,7 +535,7 @@
/*
鐢熸垚宸ヤ綔妗f槑缁�
*/
- private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId){
+ private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId, String csocode, String isoseq){
Mat mat = matService.selectByMatnr(matnr);
if (Cools.isEmpty(mat)) {
throw new CoolException(matnr + "鍟嗗搧缁存姢澶辫触");
@@ -324,11 +547,14 @@
wrkDetl.setIoTime(now);
wrkDetl.setBatch(batch);
wrkDetl.setAnfme(anfme); // 鏁伴噺
- wrkDetl.setZpallet(zpallet); // 鎵樼洏鏉$爜
+ wrkDetl.setSuppCode(zpallet); // 鎵樼洏鏉$爜
wrkDetl.setAppeUser(userId);
wrkDetl.setAppeTime(now);
wrkDetl.setModiUser(userId);
wrkDetl.setModiTime(now);
+
+ wrkDetl.setThreeCode(csocode);
+ wrkDetl.setDeadTime(isoseq);
if (!agvWrkDetlService.insert(wrkDetl)) {
throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
}
@@ -369,8 +595,8 @@
private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId){
AgvWrkMast wrkMast = new AgvWrkMast();
//鐢熸垚宸ヤ綔鍙�
- int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
- wrkMast.setWrkNo(workNo);
+// int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+// wrkMast.setWrkNo();
//宸ヤ綔鐘舵��
wrkMast.setWrkSts(wrkSts);
//鍏ュ嚭搴撶被鍨�
@@ -397,9 +623,16 @@
wrkMast.setAppeTime(now);
wrkMast.setModiUser(userId);
wrkMast.setModiTime(now);
- if (!agvWrkMastService.insert(wrkMast)) {
+
+ if (!agvWrkMastService.insertByIncrease(wrkMast)) {
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
}
+
+ int i = agvWrkMastService.selectCount(new EntityWrapper<AgvWrkMast>());
+ log.info(i + "");
+
+
+ wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no",sourceLocNo));
return wrkMast;
}
@@ -411,8 +644,8 @@
private AgvWrkMast createWrkMast(AgvBasDevp agvBasDevp,AgvLocMast agvLocMast, Date now, Long userId){
AgvWrkMast wrkMast = new AgvWrkMast();
//鐢熸垚宸ヤ綔鍙�
- int workNo = agvCommonService.getWorkNo(0);
- wrkMast.setWrkNo(workNo);
+ //int workNo = agvCommonService.getWorkNo(0);
+ //wrkMast.setWrkNo(workNo);
wrkMast.setIoTime(new Date());
// 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID
wrkMast.setWrkSts(201L);
--
Gitblit v1.9.1