From d8c9b9afb41c368a08d7e05d0f624c98bf72042a Mon Sep 17 00:00:00 2001 From: lty <876263681@qq.com> Date: 星期五, 06 六月 2025 11:18:56 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 273 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 233 insertions(+), 40 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 7b453a6..adae54a 100644 --- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java @@ -2,16 +2,12 @@ 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.exception.CoolException; import com.zy.asrs.entity.*; -import com.zy.asrs.entity.param.EmptyPlateOutParam; -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.entity.param.*; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.model.*; @@ -156,31 +152,81 @@ return null; } +// @Override +// @Transactional +// public void startupFullTakeStore(StockOutFloorParam param, Long userId) { +// // 鐩爣绔欑偣鐘舵�佹娴� +// BasDevp staNo = null; +// // 鑾峰彇搴撲綅鏄庣粏 +// List<LocDetlDto> locDetlDtos = new ArrayList<>(); +// for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) { +// staNo = basDevpService.checkSiteStatus(paramLocDetl.getSiteId()); +// +// if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { +// LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl); +// if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); +// } +// } +// if (!locDetlDtos.isEmpty()) { +// LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); +// if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { +// // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱 +// stockOut(staNo, locDetlDtos, null, userId); +// } else { +// throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎銆丏鐨勫簱浣嶏紝搴撲綅鍙凤細" + locMast.getLocNo() + " 銆佸綋鍓嶇姸鎬侊細" + locMast.getLocSts() + "-" + locMast.getLocSts$()); +// } +// } else { +// throw new CoolException("搴撳瓨涓嶅瓨鍦�"); +// } +// } + @Override @Transactional - public void startupFullTakeStore(StockOutParam param, Long userId) { - // 鐩爣绔欑偣鐘舵�佹娴� - BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); - // 鑾峰彇搴撲綅鏄庣粏 - List<LocDetlDto> locDetlDtos = new ArrayList<>(); - for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { + public void startupFullTakeStore(StockOutFloorParam param, Long userId) { + // 鎸� siteId 鍒嗙粍 + Map<Integer, List<LocDetlDto>> siteIdToLocDetlsMap = new HashMap<>(); + + for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) { if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl); - if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); + if (one != null) { + LocDetlDto dto = new LocDetlDto(one, paramLocDetl.getCount()); + Integer siteId = paramLocDetl.getSiteId(); + + if (siteId != null) { + siteIdToLocDetlsMap.computeIfAbsent(siteId, k -> new ArrayList<>()).add(dto); + } + } } } - if (!locDetlDtos.isEmpty()) { - LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); - if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { - // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱 - stockOut(staNo, locDetlDtos, null, userId); - } else { - throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎銆丏鐨勫簱浣嶏紝搴撲綅鍙凤細" + locMast.getLocNo() + " 銆佸綋鍓嶇姸鎬侊細" + locMast.getLocSts() + "-" + locMast.getLocSts$()); - } - } else { + + if (siteIdToLocDetlsMap.isEmpty()) { throw new CoolException("搴撳瓨涓嶅瓨鍦�"); } + + // 閬嶅巻鍒嗙粍鍚庣殑姣忎釜 siteId锛岄�愪釜鍑哄簱 + for (Map.Entry<Integer, List<LocDetlDto>> entry : siteIdToLocDetlsMap.entrySet()) { + Integer siteId = entry.getKey(); + List<LocDetlDto> locDetlDtos = entry.getValue(); + + // 鏍¢獙搴撲綅鐘舵�� + LocMast locMast = locMastService.selectOne( + new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()) + ); + + if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { + // 鏍¢獙鐩爣绔欑偣 + BasDevp staNo = basDevpService.checkSiteStatus(siteId); + + // 鎵ц鍑哄簱 + stockOut(staNo, locDetlDtos, null, userId); + } else { + throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎銆丏鐨勫簱浣嶏紝搴撲綅鍙凤細" + + locMast.getLocNo() + " 銆佸綋鍓嶇姸鎬侊細" + locMast.getLocSts() + "-" + locMast.getLocSts$()); + } + } } + @Override @Transactional @@ -297,6 +343,21 @@ } // 鑾峰彇搴撲綅 LocMast locMast = locMastService.selectById(taskDto.getLocNo()); + // 鏋勫缓鍑哄簱鏄庣粏锛堢敤浜� isAll 鍒ゆ柇锛� + List<LocDetlDto> locDetlDtos = locDtos.stream().map(locDto -> { + LocDetl locDetl = new LocDetl(); + locDetl.setMatnr(locDto.getMatnr()); + locDetl.setBatch(locDto.getBatch()); + locDetl.setAnfme(locDto.getAnfme()); + + LocDetlDto dto = new LocDetlDto(); + dto.setLocDetl(locDetl); + dto.setCount(locDto.getAnfme()); + return dto; + }).collect(Collectors.toList()); + + taskDto.setLocDetlDtos(locDetlDtos); + // 鑾峰彇璺緞 int ioType = taskDto.isAll() ? 101 : 103; StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo()); @@ -305,6 +366,90 @@ // 鐢熸垚宸ヤ綔妗� WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); + 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; + } + log.info("宸ヤ綔妗f槑缁嗭細{},{},{},{}", locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(),locDto.getAnfme()); + OrderDetl orderDetl = orderDetlService.selectItem(locDto); + + 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, locDto.getAnfme())) { + throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触"); + } + orderService.updateSettle(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()); + } + } else { + throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); + } + } + + @Override + public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId, String endLocation) { + Date now = new Date(); + List<LocDto> locDtos = taskDto.getLocDtos(); + for (LocDto locDto : locDtos) { + if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) { + throw new CoolException("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�"); + } + } + // 鑾峰彇搴撲綅 + LocMast locMast = locMastService.selectById(taskDto.getLocNo()); + // 鑾峰彇璺緞 + int ioType = taskDto.isAll() ? 101 : 103; + StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo()); + // 鐢熸垚宸ヤ綔鍙� + int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setInvWh(endLocation); // 鍦扮爜 wrkMast.setIoTime(now); wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬� @@ -450,10 +595,10 @@ .eq("stn_no", param.getOutSite()) .eq("crn_no", locMast.getCrnNo()); StaDesc staDesc = staDescService.selectOne(wrapper); - Integer sourceStaNo = staDesc.getCrnStn(); - if (Cools.isEmpty(sourceStaNo)) { - throw new CoolException("妫�绱㈡簮绔欏け璐�"); + if (Cools.isEmpty(staDesc)) { + throw new CoolException("涓嶅瓨鍦ㄨ绌烘澘鍑哄簱璺緞锛岃鏇存崲绔欑偣"); } + Integer sourceStaNo = staDesc.getCrnStn(); Date now = new Date(); // 淇濆瓨宸ヤ綔妗� WrkMast wrkMast = new WrkMast(); @@ -555,29 +700,77 @@ return wrkMast; } +// @Override +// @Transactional +// public void locCheckOut(StockOutParam param, Long userId) { +// // 鐩爣绔欑偣鐘舵�佹娴� +// BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); +// // 鑾峰彇搴撲綅鏄庣粏 +// List<LocDetlDto> locDetlDtos = new ArrayList<>(); +// for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { +// if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { +// LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl); +// if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); +// } +// } +// if (!locDetlDtos.isEmpty()) { +// LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); +// if (locMast.getLocSts().equals("F")) { +// // 鍚姩鍑哄簱寮�濮� 107.鐩樼偣鍑哄簱 +// stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId); +// } else { +// throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎鐨勫簱浣嶏紝搴撲綅鍙凤細" + locMast.getLocNo() + " 銆佸綋鍓嶇姸鎬侊細" + locMast.getLocSts() + "-" + locMast.getLocSts$()); +// } +// } else { +// throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�"); +// } +// } + @Override @Transactional - public void locCheckOut(StockOutParam param, Long userId) { - // 鐩爣绔欑偣鐘舵�佹娴� - BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); - // 鑾峰彇搴撲綅鏄庣粏 - List<LocDetlDto> locDetlDtos = new ArrayList<>(); - for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { + public void locCheckOut(StockOutFloorParam param, Long userId) { + + // 鎸� siteId 鍒嗙粍 + Map<Integer, List<LocDetlDto>> siteIdToLocDetlsMap = new HashMap<>(); + + for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) { if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl); - if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); + if (one != null) { + LocDetlDto dto = new LocDetlDto(one, paramLocDetl.getCount()); + Integer siteId = paramLocDetl.getSiteId(); + + if (siteId != null) { + siteIdToLocDetlsMap.computeIfAbsent(siteId, k -> new ArrayList<>()).add(dto); + } + } } } - if (!locDetlDtos.isEmpty()) { - LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); - if (locMast.getLocSts().equals("F")) { - // 鍚姩鍑哄簱寮�濮� 107.鐩樼偣鍑哄簱 + + if (siteIdToLocDetlsMap.isEmpty()) { + throw new CoolException("搴撳瓨涓嶅瓨鍦�"); + } + + // 閬嶅巻鍒嗙粍鍚庣殑姣忎釜 siteId锛岄�愪釜鍑哄簱 + for (Map.Entry<Integer, List<LocDetlDto>> entry : siteIdToLocDetlsMap.entrySet()) { + Integer siteId = entry.getKey(); + List<LocDetlDto> locDetlDtos = entry.getValue(); + + // 鏍¢獙搴撲綅鐘舵�� + LocMast locMast = locMastService.selectOne( + new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()) + ); + + if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { + // 鏍¢獙鐩爣绔欑偣 + BasDevp staNo = basDevpService.checkSiteStatus(siteId); + + // 鎵ц鍑哄簱 stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId); } else { - throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎鐨勫簱浣嶏紝搴撲綅鍙凤細" + locMast.getLocNo() + " 銆佸綋鍓嶇姸鎬侊細" + locMast.getLocSts() + "-" + locMast.getLocSts$()); + throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎銆丏鐨勫簱浣嶏紝搴撲綅鍙凤細" + + locMast.getLocNo() + " 銆佸綋鍓嶇姸鎬侊細" + locMast.getLocSts() + "-" + locMast.getLocSts$()); } - } else { - throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�"); } } @@ -672,7 +865,7 @@ if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪"); } - if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) { + if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() >= 14) { throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚"); } // 鍏ュ簱 + 搴撲綅杞Щ @@ -1034,7 +1227,7 @@ } LocTypeDto locTypeDto = new LocTypeDto(); locTypeDto.setLocType1((short) 1); - return wcsController.startupFullPutStore(301, list.get(0).getZpallet(), locTypeDto, list); + return wcsController.startupFullPutStore(301, list.get(0).getZpallet(), 0.0, locTypeDto, list); } @Override -- Gitblit v1.9.1