From 5a77719594f0a2c9ef17b3a6d5c1e2f4e5d4e092 Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期五, 09 一月 2026 20:01:19 +0800
Subject: [PATCH] 出库根据机台号分别任务类型
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 293 +++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 227 insertions(+), 66 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 d2e32b3..72ff28f 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -12,6 +12,7 @@
import com.zy.asrs.entity.param.FullStoreParam;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
+import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.service.*;
@@ -91,8 +92,13 @@
@Resource
private LocMastMapper locMastMapper;
+ @Autowired
+ private LocAroundBindService locAroundBindService;
+
@Resource
private OrderPakoutService orderPakOutService;
+ @Autowired
+ private BasDeviceServiceImpl basDeviceService;
@Override
@Transactional
@@ -391,7 +397,7 @@
@Override
@Transactional
- public void stockOut(BasDevp staNo, TaskDto taskDto, String deviceNo ,Long userId) {
+ public void stockOut(BasDevp staNo, TaskDto taskDto, String deviceNo, Long userId) {
Date now = new Date();
List<LocDto> locDtos = taskDto.getLocDtos();
for (LocDto locDto : locDtos) {
@@ -409,86 +415,118 @@
// 鐢熸垚宸ヤ綔鍙�
int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
String wrkCode = null;
+ //TODO 濡傛灉鏈哄彴鍙蜂笉涓虹┖锛屽垽鏂綋鍓嶆満鍙颁笌褰撳墠鍑哄簱搴撲綅鏄惁鍦ㄥ悓涓�搴撳尯鎴栧悓涓�鍙板爢鍨涙満锛堢浉鍚岀珯鐐癸級
+ //TODO 1. 濡傛灉鏄悓涓�鍙板爢鍨涙満锛岀敓鎴愮Щ搴擄紙鍑哄簱锛変换鍔� 2. 濡傛灉涓嶆槸锛岀敓鎴愬嚭搴撲换鍔★紝鍐嶇敓鎴愬叆搴撲换鍔�
if (!Objects.isNull(deviceNo)) {
- wrkCode = wrkCode + "-1";
- }
- // 鐢熸垚宸ヤ綔妗�
- WrkMast wrkMast = new WrkMast();
- wrkMast.setWrkNo(workNo);
- //鐢ㄤ簬宸ヤ綔绔欙紝浠诲姟鍒嗚В
- wrkMast.setWrkCode(wrkCode);
- wrkMast.setIoTime(now);
- wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
- wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
- wrkMast.setIoPri(13D); // 浼樺厛绾э細13
- wrkMast.setCrnNo(locMast.getCrnNo());
- wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 婧愮珯
- wrkMast.setStaNo(staDesc.getStnNo() + ""); // 鐩爣绔�
- wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
- wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
- wrkMast.setPicking("N"); // 鎷f枡
- wrkMast.setExitMk("N"); // 閫�鍑�
- wrkMast.setEmptyMk("N"); // 绌烘澘
- wrkMast.setLinkMis("N");
- wrkMast.setBarcode(locMast.getBarcode());
- wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
- wrkMast.setAppeTime(now);
- wrkMast.setModiUser(userId);
- wrkMast.setModiTime(now);
- if (!wrkMastService.insert(wrkMast)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + taskDto.getLocNo());
- }
- // 鐢熸垚宸ヤ綔妗f槑缁�
- for (LocDto locDto : taskDto.getLocDtos()) {
- if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
- continue;
+ BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
+ .eq("status", 1)
+ .eq("dev_no", deviceNo));
+ if (Objects.isNull(basDevice)) {
+ throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
}
+ List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
+ if (Objects.isNull(binds) || binds.isEmpty()) {
+ throw new CoolException("鍙版満鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
+ }
+ Set<String> locs = binds.stream().map(LocAroundBind::getBLocNo).collect(Collectors.toSet());
+
+ LocMast mast = locMastService.selectOne(new EntityWrapper<LocMast>()
+ .in("loc_no", locs)
+ .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
+ .eq("dev_no", basDevice.getDevNo())
+ .orderAsc(Arrays.asList("loc_no"))
+ .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+
+ if (Objects.isNull(mast)) {
+ throw new CoolException("褰撳墠鏈哄彴锛屾棤鍙敤宸ヤ綔鍙帮紒锛�");
+ }
+ //鐩稿悓琛ㄧず鍦ㄥ悓涓�涓贩閬�
+ if (mast.getCrnNo().equals(locMast.getCrnNo())) {
+
+ } else {
+ wrkCode = wrkCode + "-1";
+
+ }
+ } else {
+ // 鐢熸垚宸ヤ綔妗�
+ WrkMast wrkMast = new WrkMast();
+ wrkMast.setWrkNo(workNo);
+ //鐢ㄤ簬宸ヤ綔绔欙紝浠诲姟鍒嗚В
+ wrkMast.setWrkCode(wrkCode);
+ wrkMast.setIoTime(now);
+ wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+ wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
+ wrkMast.setIoPri(13D); // 浼樺厛绾э細13
+ wrkMast.setCrnNo(locMast.getCrnNo());
+ wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 婧愮珯
+ wrkMast.setStaNo(staDesc.getStnNo() + ""); // 鐩爣绔�
+ wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
+ wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+ wrkMast.setPicking("N"); // 鎷f枡
+ wrkMast.setExitMk("N"); // 閫�鍑�
+ wrkMast.setEmptyMk("N"); // 绌烘澘
+ wrkMast.setLinkMis("N");
+ wrkMast.setBarcode(locMast.getBarcode());
+ wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
+ wrkMast.setAppeTime(now);
+ wrkMast.setModiUser(userId);
+ wrkMast.setModiTime(now);
+ if (!wrkMastService.insert(wrkMast)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + taskDto.getLocNo());
+ }
+ // 鐢熸垚宸ヤ綔妗f槑缁�
+ for (LocDto locDto : taskDto.getLocDtos()) {
+ if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
+ continue;
+ }
// OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
- OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getBrand()
- , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
+ OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getBrand()
+ , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
// if (orderDetl == null) {
//// orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
// orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), null);
//
// }
- WrkDetl wrkDetl = new WrkDetl();
- wrkDetl.sync(orderDetl);
- wrkDetl.setZpallet(wrkMast.getBarcode());
- wrkDetl.setIoTime(now);
- wrkDetl.setWrkNo(workNo);
- wrkDetl.setBatch(locDto.getBatch());
- wrkDetl.setOrderNo(locDto.getOrderNo());
- wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
- wrkDetl.setAppeTime(now);
- wrkDetl.setAppeUser(userId);
- wrkDetl.setModiTime(now);
- wrkDetl.setModiUser(userId);
- if (!wrkDetlService.insert(wrkDetl)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
- }
+ WrkDetl wrkDetl = new WrkDetl();
+ wrkDetl.sync(orderDetl);
+ wrkDetl.setZpallet(wrkMast.getBarcode());
+ wrkDetl.setIoTime(now);
+ wrkDetl.setWrkNo(workNo);
+ wrkDetl.setBatch(locDto.getBatch());
+ wrkDetl.setOrderNo(locDto.getOrderNo());
+ wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
+ wrkDetl.setAppeTime(now);
+ wrkDetl.setAppeUser(userId);
+ wrkDetl.setModiTime(now);
+ wrkDetl.setModiUser(userId);
+ if (!wrkDetlService.insert(wrkDetl)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ }
// // 淇敼璁㈠崟鏄庣粏
// if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
// throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
// }
// orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
- OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
- orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
- orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3()
- , locDto.getAnfme());
- OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
- }
- // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
- locMast = locMastService.selectById(taskDto.getLocNo());
- if (locMast.getLocSts().equals("F")) {
- locMast.setLocSts(ioType == 101 ? "R" : "P");
- locMast.setModiUser(userId);
- locMast.setModiTime(now);
- if (!locMastService.updateById(locMast)) {
- throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
+ OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
+ orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
+ orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3()
+ , locDto.getAnfme());
+ OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
}
- } else {
- throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+ // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+ locMast = locMastService.selectById(taskDto.getLocNo());
+ if (locMast.getLocSts().equals("F")) {
+ locMast.setLocSts(ioType == 101 ? "R" : "P");
+ locMast.setModiUser(userId);
+ locMast.setModiTime(now);
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
+ }
+ } else {
+ throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+ }
}
+
}
@Override
@@ -1416,4 +1454,127 @@
}
}
+ /**
+ * 鐢熸垚鍑哄簱鍖归厤鐨勫伐浣滅珯鍏ュ簱浠诲姟
+ *
+ * @param staNo
+ * @param taskDto
+ * @param deviceNo
+ * @param userId
+ * @author Ryan
+ * @date 2026/1/9 17:39
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void genInStock(BasDevp staNo, TaskDto taskDto, String deviceNo, Long userId) {
+ if (Objects.isNull(deviceNo)) {
+ throw new CoolException("鏈哄彴鍙蜂笉鑳戒负绌猴紒锛�");
+ }
+ BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
+ .eq("status", 1)
+ .eq("dev_no", deviceNo));
+ if (Objects.isNull(basDevice)) {
+ throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
+ }
+ List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
+ if (Objects.isNull(binds) || binds.isEmpty()) {
+ throw new CoolException("鍙版満鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
+ }
+ Set<String> locs = binds.stream().map(LocAroundBind::getBLocNo).collect(Collectors.toSet());
+
+ LocMast locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
+ .in("loc_no", locs)
+ .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
+ .eq("dev_no", basDevice.getDevNo())
+ .orderAsc(Arrays.asList("loc_no"))
+ .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+
+ if (Objects.isNull(locMasts)) {
+ throw new CoolException("褰撳墠鏈哄彴锛屾棤鍙敤宸ヤ綔鍙帮紒锛�");
+ }
+
+
+
+
+
+ staNos = staDescService.queryOutStaNosByLocNo(locMasts.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
+
+
+ WrkMast wrkMast = new WrkMast();
+ StartupDto dto = commonService.getLocNo(1, sourceStaNo.getDevNo(), findLocNoAttributeVo, locTypeDto);
+ int workNo = dto.getWorkNo();
+ // 鐢熸垚宸ヤ綔妗�
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setIoTime(new Date());
+ wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+ wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+ wrkMast.setCrnNo(dto.getCrnNo());
+ wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
+ wrkMast.setStaNo(dto.getStaNo() + "");
+ wrkMast.setLocNo(dto.getLocNo());
+ wrkMast.setIoPri(13D); // 浼樺厛绾�
+ wrkMast.setBarcode(pakin.getZpallet()); // 鎵樼洏鐮�
+ wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+ wrkMast.setPicking("N"); // 鎷f枡
+ wrkMast.setExitMk("N"); // 閫�鍑�
+ wrkMast.setEmptyMk("N"); // 绌烘澘
+ wrkMast.setLinkMis("Y");
+ wrkMast.setModiUser(userId);
+ wrkMast.setAppeUser(userId);
+ wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
+ // 鎿嶄綔浜哄憳鏁版嵁
+ wrkMast.setAppeTime(now);
+ wrkMast.setModiTime(now);
+ boolean res = wrkMastService.insert(wrkMast);
+ if (!res) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ }
+ // 鏇存柊婧愮珯鐐逛俊鎭�
+ sourceStaNo.setWrkNo(workNo);
+ sourceStaNo.setModiTime(now);
+ if (!basDevpService.updateById(sourceStaNo)) {
+ throw new CoolException("鏇存柊婧愮珯澶辫触");
+ }
+ // 鏇存柊鐩爣搴撲綅鐘舵��
+ LocMast locMast = locMastService.selectById(dto.getLocNo());
+ if (locMast.getLocSts().equals("O")) {
+ locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+ locMast.setModiTime(now);
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+ }
+ } else {
+ throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+ }
+
+ // 鏇存柊鍏ュ簱閫氱煡妗� ioStatus ===>> Y
+ Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
+ .eq("zpallet", pakin.getZpallet());
+ WaitPakin setParam = new WaitPakin();
+ setParam.setLocNo(dto.getLocNo());
+ setParam.setIoStatus("Y");
+ setParam.setModiTime(now);
+ if (!waitPakinService.update(setParam, wrapper)) {
+ throw new CoolException("鏇存柊閫氱煡妗eけ璐�");
+ }
+ }
+
+ // 鐢熸垚宸ヤ綔妗f槑缁�
+ waitPakins.forEach(waitPakin ->
+
+ {
+ WrkDetl wrkDetl = new WrkDetl();
+ wrkDetl.sync(waitPakin);
+ wrkDetl.setWrkNo(wrkMast.getWrkNo());
+ wrkDetl.setIoTime(wrkMast.getIoTime());
+ double v = Math.round(waitPakin.getAnfme() * waitPakin.getVolume() * 100) / 100.0;
+ wrkDetl.setAnfme(v);
+ wrkDetl.setAppeTime(now);
+ wrkDetl.setModiTime(now);
+ if (!wrkDetlService.insert(wrkDetl)) {
+ throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+ }
+ });
+}
+
}
--
Gitblit v1.9.1