From fbed9fbabbc2d560d7a341b426d7604d72f3b6c4 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 31 五月 2023 08:23:31 +0800
Subject: [PATCH] 111库格移栽任务完成处理
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 192 ++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 162 insertions(+), 30 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 690e997..cca463e 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -160,44 +160,50 @@
@Transactional
public void startupFullTakeStore(StockOutParam param, Long userId) {
ArrayList<String> locNos = new ArrayList<>();
- for (StockOutParam.LocDetl locDetl:param.getLocDetls()){
- if (!locNos.contains(locDetl.getLocNo())){
+ List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+ ArrayList<String> matnrs = new ArrayList<>();//鐩殑鍋氭暟鎹幓閲�
+ for (StockOutParam.LocDetl locDetl : param.getLocDetls()) {
+ if (!matnrs.contains(locDetl.getMatnr())) {
+ matnrs.add(locDetl.getMatnr());
+
+ //1.鏍规嵁鐗╂枡鍙峰厛鎼滅储楂橀鍖哄煙鏄惁鏈夊簱瀛�
+ List<StockOutParam.LocDetl> locNoStep1 = this.findLocNoStep1(locDetl);
+ if (locNoStep1 != null) {
+ locDetls.addAll(locNoStep1);
+ continue;
+ }
+
+ //楂橀娣锋斁鍖哄煙娌℃湁婊¤冻鐨勫簱浣嶏紝鍦ㄥ崟鍝佸尯鍩熻繘琛屾悳绱�
+ List<StockOutParam.LocDetl> locNoStep2 = this.findLocNoStep2(locDetl);
+ if (locNoStep2 != null) {
+ locDetls.addAll(locNoStep2);
+ continue;
+ }
+
+ //浣庨娣锋斁鍖哄煙杩涜鎼滅储
+ List<StockOutParam.LocDetl> locNoStep3 = this.findLocNoStep3(locDetl);
+ if (locNoStep3 != null) {
+ locDetls.addAll(locNoStep3);
+ continue;
+ }
+
+ }
+ }
+
+ for (StockOutParam.LocDetl locDetl : locDetls) {
+ if (!locNos.contains(locDetl.getLocNo())) {
locNos.add(locDetl.getLocNo());
}
}
- //妫�娴嬫槸鍚︿负娴呭簱浣�
- boolean sign = false;
- String th = "";
- for (String locNo : locNos) {
- if (sign) {
- break;
- }
- List<String> groupInsideLoc = Utils.getGroupLoc(locNo);
- if (!Cools.isEmpty(groupInsideLoc)) {
- for (String insideLoc : groupInsideLoc) {
- if (locNos.contains(insideLoc)) {
- break;
- }
- LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", insideLoc));
- if (locMast != null) {
- if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")) {
- sign = true;
- th = "搴撲綅鍙凤細" + locNo + " 娴呭簱浣嶆湁闈炵┖搴撲綅锛�";
- break;
- }
- }
- }
- }
- }
- if (sign){
- throw new CoolException("鍑哄簱澶辫触锛�" + th);
- }
+
+ //妫�娴嬫彁浜ょ殑鍑哄簱搴撲綅鏄惁鍚堟硶(娴呭簱浣嶆湁闈炵┖搴撲綅)
+ Utils.checkStockOutLocNo(locNos);
// 鐩爣绔欑偣鐘舵�佹娴�
BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
// 鑾峰彇搴撲綅鏄庣粏
List<LocDetlDto> locDetlDtos = new ArrayList<>();
- for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
+ for (StockOutParam.LocDetl paramLocDetl : locDetls) {
if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
@@ -216,6 +222,132 @@
}
}
+ //1.鏍规嵁鐗╂枡鍙峰厛鎼滅储楂橀鍖哄煙鏄惁鏈夊簱瀛�
+ private List<StockOutParam.LocDetl> findLocNoStep1(StockOutParam.LocDetl locDetl) {
+ List<StockOutParam.LocDetl> locDetlList = new ArrayList<>();
+ //1.鏍规嵁鐗╂枡鍙峰厛鎼滅储楂橀鍖哄煙鏄惁鏈夊簱瀛�
+ List<LocDetl> locDetls = locDetlService.findHighAreaByMatnr(locDetl.getMatnr());
+ if (locDetls.size() > 0) {
+ for (LocDetl locDetl0 : locDetls) {
+ if (locDetl0.getAnfme() >= locDetl.getCount()) {
+ //鎵惧埌鐨勫簱瀛� >= 鎵�闇�搴撳瓨锛屾弧瓒虫潯浠�
+ locDetlList.add(new StockOutParam.LocDetl(locDetl0.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getCount()));
+ return locDetlList;
+ } else {
+ //涓嶆弧瓒冲簱瀛樻潯浠�
+ //鍒ゆ柇鏈�澶栦晶搴撲綅鐨勬繁澶勬槸鍚︽湁鐩稿悓鐗╂枡
+ Double useCount = locDetl0.getAnfme();//宸蹭娇鐢ㄧ殑鏁伴噺
+ List<StockOutParam.LocDetl> tmpLocDetlList = new ArrayList<>();//璁板綍缁忚繃鐨勫簱浣�
+ tmpLocDetlList.add(new StockOutParam.LocDetl(locDetl0.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl0.getAnfme()));
+
+ List<String> insideLoc = Utils.getGroupInsideLoc(locDetl0.getLocNo());
+ List<LocDetl> locDetls1 = locDetlService.selectByLocNosAndMatnr(insideLoc, locDetl.getMatnr());
+ if (locDetls1.size() == 0) {//鍐呬晶搴撲綅娌℃湁鐩稿悓鐨勭墿鏂欙紝璺宠繃
+ continue;
+ }
+
+ for (LocDetl detl : locDetls1) {
+ double lastCount = locDetl.getCount() - useCount;//鍓╀綑鎵�闇�鏁伴噺
+ double realCount = 0;//瀹為檯鎻愪緵鏁伴噺
+ if (detl.getAnfme() >= lastCount) {//瀹為檯鏁伴噺澶т簬鎵�闇�鏁伴噺锛屾寜鎵�闇�鏁伴噺鎻愪緵
+ realCount = lastCount;
+ }else {
+ //瀹為檯灏忎簬鎵�闇�鏁伴噺锛屾寜瀹為檯鏁伴噺鎻愪緵
+ realCount = detl.getAnfme();
+ }
+ useCount += realCount;
+ tmpLocDetlList.add(new StockOutParam.LocDetl(detl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), realCount));
+ if (useCount >= locDetl.getCount()) {
+ //鎵惧埌鐨勫簱瀛� >= 鎵�闇�搴撳瓨锛屾弧瓒虫潯浠�
+ locDetlList.addAll(tmpLocDetlList);
+ return locDetlList;
+ }
+ }
+
+ }
+ }
+
+ //鏈�澶栦晶鍖呮嫭鍐呬晶閮芥棤婊¤冻搴撲綅锛屽垯鍒ゆ柇鎼滅储鍑烘潵鐨勫叏閮ㄦ渶澶栦晶搴撲綅鍔犺捣鏉ユ槸鍚︽弧瓒冲嚭搴撴暟閲忚姹�
+ Double useCount = 0D;
+ for (LocDetl locDetl0 : locDetls) {
+ double lastCount = locDetl.getCount() - useCount;//鍓╀綑鎵�闇�鏁伴噺
+ double realCount = 0;//瀹為檯鎻愪緵鏁伴噺
+ if (locDetl0.getAnfme() >= lastCount) {//瀹為檯鏁伴噺澶т簬鎵�闇�鏁伴噺锛屾寜鎵�闇�鏁伴噺鎻愪緵
+ realCount = lastCount;
+ }else {
+ //瀹為檯灏忎簬鎵�闇�鏁伴噺锛屾寜瀹為檯鏁伴噺鎻愪緵
+ realCount = locDetl0.getAnfme();
+ }
+ useCount += realCount;//宸蹭娇鐢ㄧ殑鏁伴噺
+ locDetlList.add(new StockOutParam.LocDetl(locDetl0.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), realCount));
+ if (useCount >= locDetl.getCount()) {
+ //鎵惧埌鐨勫簱瀛� >= 鎵�闇�搴撳瓨锛屾弧瓒虫潯浠�
+ return locDetlList;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ //楂橀娣锋斁鍖哄煙娌℃湁婊¤冻鐨勫簱浣嶏紝鍦ㄥ崟鍝佸尯鍩熻繘琛屾悳绱�
+ private List<StockOutParam.LocDetl> findLocNoStep2(StockOutParam.LocDetl locDetl) {
+ List<StockOutParam.LocDetl> locDetlList = new ArrayList<>();
+ //鍦ㄥ崟鍝佸尯鍩熻繘琛屾悳绱�
+ List<LocDetl> locDetls = locDetlService.findSingleAreaByMatnr(locDetl.getMatnr());
+ if (locDetls.size() > 0) {
+ Double useCount = 0D;
+ for (LocDetl locDetl0 : locDetls) {
+ double lastCount = locDetl.getCount() - useCount;//鍓╀綑鎵�闇�鏁伴噺
+ double realCount = 0;//瀹為檯鎻愪緵鏁伴噺
+ if (locDetl0.getAnfme() >= lastCount) {//瀹為檯鏁伴噺澶т簬鎵�闇�鏁伴噺锛屾寜鎵�闇�鏁伴噺鎻愪緵
+ realCount = lastCount;
+ }else {
+ //瀹為檯灏忎簬鎵�闇�鏁伴噺锛屾寜瀹為檯鏁伴噺鎻愪緵
+ realCount = locDetl0.getAnfme();
+ }
+ useCount += realCount;//宸蹭娇鐢ㄧ殑鏁伴噺
+
+ locDetlList.add(new StockOutParam.LocDetl(locDetl0.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), realCount));
+ if (useCount >= locDetl.getCount()) {
+ //鎵惧埌鐨勫簱瀛� >= 鎵�闇�搴撳瓨锛屾弧瓒虫潯浠�
+ return locDetlList;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ //浣庨娣锋斁鍖哄煙杩涜鎼滅储
+ private List<StockOutParam.LocDetl> findLocNoStep3(StockOutParam.LocDetl locDetl) {
+ List<StockOutParam.LocDetl> locDetlList = new ArrayList<>();
+ //鍦ㄥ崟鍝佸尯鍩熻繘琛屾悳绱�
+ List<LocDetl> locDetls = locDetlService.findLowAreaByMatnr(locDetl.getMatnr());
+ if (locDetls.size() > 0) {
+ Double useCount = 0D;
+ for (LocDetl locDetl0 : locDetls) {
+ double lastCount = locDetl.getCount() - useCount;//鍓╀綑鎵�闇�鏁伴噺
+ double realCount = 0;//瀹為檯鎻愪緵鏁伴噺
+ if (locDetl0.getAnfme() >= lastCount) {//瀹為檯鏁伴噺澶т簬鎵�闇�鏁伴噺锛屾寜鎵�闇�鏁伴噺鎻愪緵
+ realCount = lastCount;
+ }else {
+ //瀹為檯灏忎簬鎵�闇�鏁伴噺锛屾寜瀹為檯鏁伴噺鎻愪緵
+ realCount = locDetl0.getAnfme();
+ }
+ useCount += realCount;//宸蹭娇鐢ㄧ殑鏁伴噺
+
+ locDetlList.add(new StockOutParam.LocDetl(locDetl0.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), realCount));
+ if (useCount >= locDetl.getCount()) {
+ //鎵惧埌鐨勫簱瀛� >= 鎵�闇�搴撳瓨锛屾弧瓒虫潯浠�
+ return locDetlList;
+ }
+ }
+ }
+
+ return null;
+ }
+
@Override
@Transactional
public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId) {
--
Gitblit v1.9.1