From a68f64232c3f3ad22d27f9b5c89fe761c8a56280 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期二, 28 四月 2026 13:16:13 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 191 ++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 171 insertions(+), 20 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 8870b81..904b3ff 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -2,10 +2,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
-import com.core.common.BaseRes;
-import com.core.common.Cools;
-import com.core.common.DateUtils;
-import com.core.common.SnowflakeIdWorker;
+import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
@@ -30,6 +27,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.util.*;
@@ -47,6 +45,7 @@
private static final int DEFAULT_WORK_NO_TYPE = 0;
// 搴撲綅鎺掑彿鍒嗛厤榛樿绫诲埆
private static final int DEFAULT_ROW_NO_TYPE = 1;
+ private static final String BACK_LOC_OPERATION_V2_SCENE = "璺ㄥ贩閬撳洖搴撳嚭搴�";
@Autowired
private MatService matService;
@@ -459,7 +458,7 @@
.eq("dev_no", basDevice.getType()).orderBy("order_no"));
if (Objects.isNull(binds)) {
- log.error("娌℃湁鍙敤鏈哄彴");
+ log.error(deviceNo+"---"+basDevice.getType()+"--娌℃湁鍙敤鏈哄彴");
return;
}
//
@@ -538,7 +537,8 @@
}
// 鐢熸垚宸ヤ綔妗f槑缁�
for (LocDto locDto : taskDto.getLocDtos()) {
- if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
+ //TODO鏄庣粏娑堝け鍘熷洜
+ if (locDto.getAnfme() == null || locDto.getAnfme() == 0.0D) {
continue;
}
// OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
@@ -952,8 +952,14 @@
throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
}
// 鍏ュ簱 + 搴撲綅杞Щ
- if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) {
+ if (wrkMast.getWrkSts() < 4 ) {
wrkMast.setWrkSts(4L);
+ WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", wrkMast.getBarcode()).eq("wrk_sts",15L));
+ if (!Cools.isEmpty(wrkMast) &&(wrkMast.getIoType()==1||wrkMast.getIoType()==11||wrkMast.getIoType()==10)) {
+ mast.setOveMk("Y");
+ wrkMast.setModiTime(new Date());
+ wrkMastService.updateById(mast);
+ }
// 鍑哄簱
} else if (wrkMast.getWrkSts() > 10) {
wrkMast.setWrkSts(14L);
@@ -1445,13 +1451,13 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public void backLocOperation(String workNo, Long userId) {
+ public R backLocOperation(String workNo, Long userId) {
WrkMast wrkMast = wrkMastService.selectById(workNo);
if (Cools.isEmpty(wrkMast)) {
- throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
+ return R.error(workNo+"宸ヤ綔妗d笉瀛樺湪");
}
if (wrkMast.getWrkSts() != 15) {
- throw new CoolException("褰撳墠浠诲姟鐘舵�佷笉鑳芥墽琛屾鎿嶄綔锛�");
+ return R.error("褰撳墠浠诲姟鐘舵�佷笉鑳芥墽琛屾鎿嶄綔锛�");
}
Integer ioType = wrkMast.getIoType() - 50;
@@ -1463,7 +1469,7 @@
// ioType = 10;
// }
if (Objects.isNull(wrkMast.getIsSuplus())) {
- throw new CoolException("鍥炲簱绫诲瀷涓嶈兘涓虹┖锛侊紒");
+ return R.error("鍥炲簱绫诲瀷涓嶈兘涓虹┖锛侊紒");
}
if (wrkMast.getIsSuplus() == 0) {
@@ -1481,12 +1487,12 @@
.eq("crn_no", locMast1.getCrnNo()); // 鍫嗗灈鏈哄彿
StaDesc staDesc = staDescService.selectOne(wrapper);
if (Cools.isEmpty(staDesc)) {
- throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+ return R.error("鍏ュ簱璺緞涓嶅瓨鍦�");
}
int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", wrkMast.getBarcode()));
if (count >= 2) {
- throw new CoolException("浠诲姟妗e凡鐢熸垚锛屼笉鍙互閲嶅鐢熸垚鐩稿悓鐨勫瓙浠诲姟锛侊紒");
+ return R.error("浠诲姟妗e凡鐢熸垚锛屼笉鍙互閲嶅鐢熸垚鐩稿悓鐨勫瓙浠诲姟锛侊紒");
}
WrkDetl detl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
@@ -1500,6 +1506,11 @@
LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
StartupDto locNo = commonService.getLocNo1(locMast1.getCrnNo());
+ if(Cools.isEmpty(locNo)) {
+ return R.error("娌℃湁绌哄簱浣�");
+ }
+// if()
+
Date now = new Date();
// 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
Integer staNo = staDesc.getCrnStn();
@@ -1507,20 +1518,21 @@
BeanUtils.copyProperties(wrkMast, mast);
mast.setWrkNo(wokNo);
// 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
- mast.setIoType(ioType); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
- mast.setWrkSts(1L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+ mast.setIoType(ioType); // 1浣欐枡鍥炲簱锛�10绌鸿酱鍥炲簱
+ mast.setWrkSts(1L); // 鐢熸垚鍥炲簱id
mast.setSourceStaNo(""); // 婧愮珯
mast.setStaNo(""); // 鐩爣绔�
mast.setSourceLocNo(wrkMast.getLocNo());
mast.setLocNo(locNo.getLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
mast.setModiTime(now);
+ mast.setWrkCode(workNo);
mast.setModiUser(userId);
if (!wrkMastService.insert(mast)) {
- throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+ return R.error("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
}
List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
if (Cools.isEmpty(wrkDetls)) {
- throw new CoolException("鏁版嵁閿欒锛屼换鍔℃。鏄庣粏涓嶅瓨鍦� 锛侊紒");
+ return R.error("鏁版嵁閿欒锛屼换鍔℃。鏄庣粏涓嶅瓨鍦� 锛侊紒");
}
// 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
@@ -1529,14 +1541,14 @@
inLoc.setModiTime(now);
inLoc.setModiUser(userId);
if (!locMastService.updateById(inLoc)) {
- throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+ return R.error("淇敼搴撲綅鐘舵�佸け璐�");
}
LocAroundBind aroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", mast.getSourceLocNo()));
if (!Objects.isNull(aroundBind)) {
aroundBind.setLocType(LocStsType.LOC_STS_TYPE_R.type);
if (!locAroundBindService.updateById(aroundBind)) {
- throw new CoolException("宸ヤ綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ return R.error("宸ヤ綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
}
@@ -1559,7 +1571,7 @@
locMast.setModiTime(now);
locMast.setModiUser(userId);
if (!locMastService.updateById(locMast)) {
- throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+ return R.error("淇敼搴撲綅鐘舵�佸け璐�");
}
// wrkMast.setWrkCode(null);
@@ -1567,6 +1579,145 @@
// if (!wrkMastService.updateById(wrkMast)) {
// throw new CoolException("浠诲姟妗f洿鏂板け璐ワ紒锛�");
// }
+ if (Cools.isEmpty(mast)) {
+ return R.error("娌℃湁鐢熸垚浠诲姟");
+ }
+ return R.ok("鐢熸垚鍥炲簱浠诲姟鎴愬姛锛侊紒");
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R backLocOperationV2(String workNo, Long userId) {
+ final String scene = BACK_LOC_OPERATION_V2_SCENE;
+ String locNo = null;
+ String sourceLocNo = null;
+ String barcode = null;
+ Integer sourceStaNo = null;
+ Integer staNo = null;
+ try {
+ WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
+ if (Cools.isEmpty(wrkMast)) {
+ return R.error(workNo + "宸ヤ綔妗d笉瀛樺湪");
+ }
+ if (!Objects.equals(wrkMast.getWrkSts(), 15L)) {
+ return R.error("褰撳墠浠诲姟鐘舵�佷笉鑳芥墽琛屾鎿嶄綔锛�");
+ }
+ if (Objects.isNull(wrkMast.getIsSuplus())) {
+ return R.error("鍥炲簱绫诲瀷涓嶈兘涓虹┖锛侊紒");
+ }
+
+ barcode = wrkMast.getBarcode();
+ sourceLocNo = wrkMast.getLocNo();
+
+ LocMast sourceLoc = locMastService.selectById(sourceLocNo);
+ if (Cools.isEmpty(sourceLoc)) {
+ return R.error("浣滀笟搴撲綅涓嶅瓨鍦�");
+ }
+
+ List<Integer> outStaNos = staDescService.queryOutStaNosByLocNo(sourceLocNo, 101);
+ if (Cools.isEmpty(outStaNos)) {
+ return R.error("鍑哄簱璺緞涓嶅瓨鍦�");
+ }
+ sourceStaNo = outStaNos.get(0);
+
+ LocTypeDto locTypeDto = new LocTypeDto();
+ locTypeDto.setLocType1((short) 1);
+ StartupDto dto = commonService.getLocNoV2(1, sourceStaNo, wrkMast, locTypeDto);
+ if (Cools.isEmpty(dto) || Cools.isEmpty(dto.getLocNo())) {
+ throw new CoolException("娌℃湁鎵惧埌搴撲綅");
+ }
+
+ locNo = dto.getLocNo();
+ List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+ if (Cools.isEmpty(wrkDetls)) {
+ throw new CoolException("宸ヤ綔鏄庣粏涓嶅瓨鍦�");
+ }
+ List<Integer> inStaNos = staDescService.queryOutStaNosByLocNo(locNo, 1);
+ if (Cools.isEmpty(inStaNos)) {
+ throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+ }
+ staNo = inStaNos.get(0);
+
+
+ int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", barcode));
+ if (count >= 2) {
+ return R.error("浠诲姟妗e凡鐢熸垚锛屼笉鍙互閲嶅鐢熸垚鐩稿悓鐨勫瓙浠诲姟锛侊紒");
+ }
+
+ WrkDetl detl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+ if (Cools.isEmpty(detl)) {
+ return R.error("鏁版嵁閿欒锛屼换鍔℃。鏄庣粏涓嶅瓨鍦� 锛侊紒");
+ }
+
+ LocDetl locDetl = new LocDetl();
+ BeanUtils.copyProperties(detl, locDetl);
+ new FindLocNoAttributeVo(locDetl);
+
+ int newWorkNo = dto.getWorkNo();
+ Date now = new Date();
+
+ WrkMast mast = new WrkMast();
+ BeanUtils.copyProperties(wrkMast, mast);
+ mast.setWrkNo(newWorkNo);
+ mast.setIoType(101);
+ mast.setWrkSts(11L);
+ mast.setSourceStaNo(String.valueOf(sourceStaNo));
+ mast.setStaNo(String.valueOf(staNo));
+ mast.setSourceLocNo(sourceLocNo);
+ mast.setLocNo(locNo);
+ mast.setOnlineYn("N");
+ mast.setModiTime(now);
+ mast.setWrkCode(null);
+ mast.setPacked(workNo);
+ mast.setModiUser(userId);
+ if (!wrkMastService.insert(mast)) {
+ return R.error("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+ }
+
+ LocAroundBind aroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", mast.getSourceLocNo()));
+ if (!Objects.isNull(aroundBind)) {
+ aroundBind.setLocType(LocStsType.LOC_STS_TYPE_R.type);
+ if (!locAroundBindService.updateById(aroundBind)) {
+ return R.error("宸ヤ綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+
+ for (WrkDetl wrkDetl : wrkDetls) {
+ WrkDetl wrkDetl1 = new WrkDetl();
+ BeanUtils.copyProperties(wrkDetl, wrkDetl1);
+ wrkDetl1.setAnfme(wrkDetl.getStockQty() - wrkDetl.getAnfme());
+ wrkDetl1.setWrkNo(newWorkNo);
+ if (!wrkDetlService.insert(wrkDetl1)) {
+ throw new CoolException("浠诲姟妗f槑缁嗕繚瀛樺け璐ワ紒锛�");
+ }
+ }
+
+ LocMast locMast1 = locMastService.selectById(sourceLocNo);
+ locMast1.setLocSts("R");
+ locMast1.setModiTime(now);
+ locMast1.setModiUser(userId);
+ LocMast locMast2 = locMastService.selectById(locNo);
+ locMast2.setLocSts("S");
+ locMast2.setModiTime(now);
+ locMast2.setModiUser(userId);
+ if (!locMastService.updateById(locMast1)) {
+ return R.error("淇敼鍑哄簱搴撲綅鐘舵�佸け璐�");
+ }
+ if (!locMastService.updateById(locMast2)) {
+ return R.error("淇敼鍏ュ簱搴撲綅鐘舵�佸け璐�");
+ }
+
+ if (Cools.isEmpty(mast)) {
+ return R.error("娌℃湁鐢熸垚浠诲姟");
+ }
+ return R.ok("鐢熸垚鍥炲簱浠诲姟鎴愬姛锛侊紒");
+ } catch (Exception e) {
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ String reason = Cools.isEmpty(e.getMessage()) ? e.getClass().getSimpleName() : e.getMessage();
+ log.error("{}澶辫触[workNo={}, barcode={}, sourceLocNo={}, locNo={}, sourceStaNo={}, staNo={}, userId={}]锛屽師鍥�: {}",
+ scene, workNo, barcode, sourceLocNo, locNo, sourceStaNo, staNo, userId, reason, e);
+ return R.error(reason);
+ }
}
--
Gitblit v1.9.1