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