From 2f63acadcd111fe47b2feedf13adb9cffcd64b2c Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期五, 25 十月 2024 13:28:50 +0800
Subject: [PATCH] mes调用立即出库修改
---
src/main/java/com/zy/asrs/controller/OpenController.java | 6
src/main/java/com/zy/asrs/utils/MatCompareUtils.java | 34 ++++++++
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | 143 ++++++++++++++++++++++++++++-------
src/main/java/com/zy/asrs/service/OpenService.java | 3
src/main/java/com/zy/asrs/entity/param/OutBoundParam.java | 18 ++-
5 files changed, 163 insertions(+), 41 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index adc21bc..5576b9c 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -74,13 +74,13 @@
@AppAuth(memo = "MES璋冪敤鍑哄簱")
public synchronized R outbound(@RequestHeader(required = false) String appkey,
@RequestBody(required = false) OutBoundParam param,
- HttpServletRequest request) throws InterruptedException {
+ HttpServletRequest request) {
auth(appkey, param, request);
- if (Cools.isEmpty(param.getEndLocation(),param.getLocDtos())) {
+ if (Cools.isEmpty(param.getEndLocation(),param.getBarcode(),param.getOrderNo())) {
return R.parse(BaseRes.PARAM);
}
- return openService.outbound(param.getLocDtos(),param.getEndLocation());
+ return openService.outbound(param);
}
@PostMapping("/order/matSync/default/v1")
diff --git a/src/main/java/com/zy/asrs/entity/param/OutBoundParam.java b/src/main/java/com/zy/asrs/entity/param/OutBoundParam.java
index 3e6794f..4dd1014 100644
--- a/src/main/java/com/zy/asrs/entity/param/OutBoundParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/OutBoundParam.java
@@ -1,9 +1,6 @@
package com.zy.asrs.entity.param;
-import com.zy.common.model.LocDto;
import lombok.Data;
-
-import java.util.List;
/**
* @author pang.jiabao
@@ -12,13 +9,20 @@
*/
@Data
public class OutBoundParam {
+
+ /**
+ * 鍗曟嵁缂栧彿
+ */
+ private String orderNo;
+
+ /**
+ * 鎵樼洏鐮�
+ */
+ private String barcode;
+
/**
* 鍦扮爜
*/
private String endLocation;
- /**
- * 鐗╂枡鏄庣粏
- */
- private List<LocDto> locDtos;
}
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index 3667cf5..dbd180c 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -4,7 +4,6 @@
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
-import com.zy.common.model.LocDto;
import java.util.List;
@@ -23,7 +22,7 @@
/**
* MES璋冪敤鍑哄簱
*/
- R outbound(List<LocDto> locDtos,String endLocation) throws InterruptedException;
+ R outbound(OutBoundParam param);
/**
* 娣诲姞鍏ュ簱鍗�
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index c04b55a..be5810c 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -12,9 +12,10 @@
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
+import com.zy.asrs.utils.MatCompareUtils;
import com.zy.asrs.utils.MatUtils;
-import com.zy.common.model.LocDto;
-import com.zy.common.model.TaskDto;
+import com.zy.common.model.enums.WorkNoType;
+import com.zy.common.service.CommonService;
import com.zy.common.utils.NodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,9 +23,9 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
-import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.stream.Collectors;
/**
* Created by vincent on 2022/4/9
@@ -63,6 +64,18 @@
@Resource
private BasDevpService basDevpService;
+
+ @Resource
+ private LocMastService locMastService;
+
+ @Resource
+ private StaDescService staDescService;
+
+ @Resource
+ private CommonService commonService;
+
+ @Resource
+ private WrkMastService wrkMastService;
@Override
@@ -163,42 +176,114 @@
@Override
@Transactional
- public R outbound(List<LocDto> locDtos,String endLocation) throws InterruptedException {
- if (Cools.isEmpty(locDtos)) {
- return R.parse(BaseRes.PARAM);
+ public R outbound(OutBoundParam param) {
+
+ // 鎵樼洏鐮�
+ String barcode = param.getBarcode();
+
+ // 鍗曟嵁缂栧彿
+ String orderNo = param.getOrderNo();
+
+ // 鏍规嵁鎵樼洏鐮佹煡璇㈠簱瀛樻槑缁�
+ List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("zpallet", barcode));
+ List<String> locNos = locDetls.stream().map(LocDetl::getLocNo).distinct().collect(Collectors.toList());
+ if (locDetls.size() == 0) {
+ return R.parse("璇ユ墭鐩樼爜涓嶅瓨鍦ㄥ簱瀛橈細" + barcode);
+ } else if (locNos.size() > 1) {
+ return R.parse("璇ユ墭鐩樼爜鏈夊涓簱浣嶏細" + barcode);
}
- boolean lack = true;
- for (LocDto locDto : locDtos) {
- if (!locDto.isLack()) {
- lack = false;
+
+ // 搴撲綅鍙�
+ String locNo = locNos.get(0);
+
+ // 鍑哄簱绔欑偣
+ Integer outSite = null;
+ List<BasDevp> devps = basDevpService.selectList(new EntityWrapper<BasDevp>().in("dev_no", 223, 123));
+ for (BasDevp basDevp : devps) {
+ // 鏃犲伐浣滃彿锛屾棤鐗�
+ if (basDevp.getWrkNo() == 0 && basDevp.getLoading().equals("N")) {
+ outSite = basDevp.getDevNo();
break;
}
}
- if (lack) {
- return R.error("搴撳瓨涓嶈冻");
+ if (outSite == null) {
+ outSite = 123;
}
- Thread.sleep(1000L);
+ Date now = new Date();
- List<TaskDto> taskDtos = new ArrayList<>();
- // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
- for (LocDto locDto : locDtos) {
- if (locDto.isLack()) {
- continue;
+ // 鑾峰彇鍗曟嵁
+ Order order = orderService.selectByNo(orderNo);
+ // 鑾峰彇鍗曟嵁鏄庣粏
+ List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId());
+
+ // 瀵规瘮搴撳瓨鏄庣粏鍜屽嚭搴撳崟鎹槑缁嗘槸鍚︿竴鑷�
+ boolean flag = MatCompareUtils.compareAndCheckCancellation(locDetls, orderDetlList);
+ if (!flag) {
+ return R.parse("搴撳瓨鏄庣粏鍜屽崟鎹槑缁嗕笉涓�鑷达紝璇锋鏌ワ紝鍗曟嵁缂栧彿锛�" + orderNo);
+ }
+
+ // 鑾峰彇搴撲綅
+ LocMast locMast = locMastService.selectById(locNo);
+ // 鑾峰彇璺緞
+ int ioType = 101;
+ StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), outSite);
+ // 鐢熸垚宸ヤ綔鍙�
+ int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+ // 鐢熸垚宸ヤ綔妗�
+ WrkMast wrkMast = new WrkMast();
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setInvWh(param.getEndLocation()); // 鍦扮爜
+ 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(locNo); // 婧愬簱浣�
+ wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+ wrkMast.setPicking("N"); // 鎷f枡
+ wrkMast.setExitMk("N"); // 閫�鍑�
+ wrkMast.setEmptyMk("N"); // 绌烘澘
+ wrkMast.setLinkMis("N");
+ wrkMast.setBarcode(barcode);
+ wrkMast.setAppeTime(now);
+ wrkMast.setModiTime(now);
+ if (!wrkMastService.insert(wrkMast)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + locNo);
+ }
+
+ // 鐢熸垚宸ヤ綔妗f槑缁�
+ for (OrderDetl orderDetl : orderDetlList) {
+
+ WrkDetl wrkDetl = new WrkDetl();
+ wrkDetl.setWrkNo(workNo);
+ wrkDetl.sync(orderDetl);
+ wrkDetl.setZpallet(wrkMast.getBarcode());
+ wrkDetl.setIoTime(now);
+ wrkDetl.setOrderNo(orderNo);
+ wrkDetl.setAppeTime(now);
+ wrkDetl.setModiTime(now);
+ if (!wrkDetlService.insert(wrkDetl)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
}
- TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
- if (TaskDto.has(taskDtos, taskDto)) {
- TaskDto dto = TaskDto.find(taskDtos, taskDto);
- assert dto != null;
- dto.getLocDtos().addAll(taskDto.getLocDtos());
- } else {
- taskDtos.add(taskDto);
+ // 淇敼璁㈠崟鏄庣粏
+ if (!orderDetlService.increaseWorkQty(orderDetl, orderDetl.getAnfme())) {
+ throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
}
}
- // -----------------------------------------------------------------------------------------------
- for (TaskDto taskDto : taskDtos) {
- BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
- workService.stockOut(staNo, taskDto, null, endLocation);
+ // 淇敼璁㈠崟鐘舵��
+ orderService.updateSettle(order.getId(), 2L, null);
+ // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+ if (locMast.getLocSts().equals("F")) {
+ locMast.setLocSts("R");
+ locMast.setModiTime(now);
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + locNo);
+ }
+ } else {
+ throw new CoolException(locNo + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
}
return R.ok("鍑哄簱鎴愬姛");
}
diff --git a/src/main/java/com/zy/asrs/utils/MatCompareUtils.java b/src/main/java/com/zy/asrs/utils/MatCompareUtils.java
index 947f84f..192f4af 100644
--- a/src/main/java/com/zy/asrs/utils/MatCompareUtils.java
+++ b/src/main/java/com/zy/asrs/utils/MatCompareUtils.java
@@ -1,12 +1,16 @@
package com.zy.asrs.utils;
import com.core.common.Cools;
+import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.OrderDetl;
import com.zy.common.model.LocDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
/**
* 鐢ㄦ埛鐗╂枡淇℃伅姣斿锛屽垽鏂槸鍚︿负鍚屼竴鐗╂枡
@@ -33,6 +37,36 @@
return true;
}
+ /**
+ * 姣旇緝涓や釜闆嗗悎鐨勭被鐨勫睘鎬э紝鐩稿悓鍒欐姷娑堬紝鏈�鍚庡垽鏂袱涓泦鍚堟槸鍚﹀畬鍏ㄦ姷娑�
+ */
+ public static boolean compareAndCheckCancellation(List<LocDetl> list1, List<OrderDetl> list2) {
+ if (list1.size() != list2.size()) {
+ return false; // If lists are not of the same size, cancellation is not possible
+ }
+
+ List<OrderDetl> remainingList2 = new ArrayList<>(list2);
+
+ // Compare and cancel out elements
+ for (LocDetl p1 : list1) {
+ boolean cancelled = false;
+ for (OrderDetl p2 : remainingList2) {
+ if (Objects.equals(p1.getMatnr(),p2.getMatnr()) && Objects.equals(p1.getBatch(),p2.getBatch()) && Objects.equals(p1.getOutOrderNo(),p2.getOutOrderNo()) &&
+ Objects.equals(p1.getLuHao(),p2.getLuHao()) && Objects.equals(p1.getPacking(),p2.getPacking()) && Objects.equals(p1.getSPgNO(),p2.getSPgNO()) &&
+ Objects.equals(p1.getProType(),p2.getProType()) && Objects.equals(p1.getColor(),p2.getColor())) {
+ remainingList2.remove(p2);
+ cancelled = true;
+ break;
+ }
+ }
+ if (!cancelled) {
+ return false; // If any element in list1 cannot be cancelled, return false
+ }
+ }
+
+ return remainingList2.isEmpty(); // Return true if all elements in list1 were cancelled out
+ }
+
private static boolean isSame(Object fieldValue1, Object fieldValue2) {
if (Cools.isEmpty(fieldValue1)) {
fieldValue1 = "";
--
Gitblit v1.9.1