From d1480e6c40cbcaf7e0dd6349153a461a3635bee3 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期一, 19 八月 2024 09:04:39 +0800
Subject: [PATCH] #优化
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 295 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 269 insertions(+), 26 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 1100b2c..79f152d 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -94,7 +94,7 @@
// 妫�绱㈠簱浣�
LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
- StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs, locTypeDto);
+ StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs, locTypeDto,0);
// 鐢熸垚宸ヤ綔鍙�
int workNo = dto.getWorkNo();
// 鐢熸垚宸ヤ綔妗�
@@ -167,30 +167,41 @@
for(StockOutParam.LocDetl one : param.getLocDetls()){
locs.add(one.getLocNo());
}
- boolean sign = false;
- for (StockOutParam.LocDetl locDetl : param.getLocDetls()) {
- //鑾峰彇鍚屼竴搴撲綅缁勭殑澶栦晶搴撲綅鍙�
- List<String> groupOuterSingleLoc = Utils.getGroupOuterSingleLoc(locDetl.getLocNo());
- if (Utils.getBay(locDetl.getLocNo())>=21){
- groupOuterSingleLoc = Utils.getGroupOuterSingleLocLowFrequency(locDetl.getLocNo());
- }
- if (!sign){
+ List<StockOutParam.LocDetl> stockOutParamLocDetlSort = Utils.getStockOutParamLocDetlSort(param.getLocDetls());
+ boolean sign = true;
+ List<String> locNoWeighting = new ArrayList<>();
+ for (StockOutParam.LocDetl locDetl : stockOutParamLocDetlSort) {
+ if (Cools.isEmpty(locNoWeighting)){
+ locNoWeighting.add(locDetl.getLocNo());
+ }else {
+ if (!Utils.getLocNoWeighting(locNoWeighting,locDetl.getLocNo())){
+ locNoWeighting.add(locDetl.getLocNo());
+ sign = true;
+ }
+ }
+ if (sign){
+ LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
+ //鑾峰彇鍚屼竴搴撲綅缁勭殑澶栦晶搴撲綅鍙�
+ List<String> groupOuterSingleLoc = Utils.getGroupOuterSingleLoc(locDetl.getLocNo());
+ if (locMast.getLocType2().equals((short)3)){
+ groupOuterSingleLoc = Utils.getGroupOuterSingleLocLowFrequency(locDetl.getLocNo());
+ sign = false;
+ }
for (String locNo : groupOuterSingleLoc) {
//姣忎釜搴撲綅鐨勫簱浣嶆槑缁�
if(locs.contains(locNo)) continue;
for (LocDetl detl : locDetlService.selectByLocNo(locNo)) {
if (!detl.getMatnr().equals(locDetl.getMatnr())) {
//涓嶆槸鐩稿悓鐗╂枡
- if (Utils.getBay(locDetl.getLocNo())>=21){
+ if (!sign){
locDetls.add(new StockOutParam.LocDetl(detl.getLocNo(), detl.getMatnr(), detl.getBatch(), detl.getAnfme()));
}
continue;
}
- locDetls.add(new StockOutParam.LocDetl(detl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), detl.getAnfme()));
+ locDetls.add(new StockOutParam.LocDetl(detl.getLocNo(), detl.getMatnr(), detl.getBatch(), detl.getAnfme()));
}
}
- sign = true;
}
locDetls.add(locDetl);
}
@@ -306,11 +317,16 @@
if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
}
}
+ for (LocDetlDto locDetlDto:locDetlDtos){
+ if (locs.contains(locDetlDto.getLocDetl().getLocNo())){
+ locDetlDto.setSign(true);
+ }
+ }
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);
+ stockOut2(staNo, locDetlDtos, null, userId);
}else {
throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎銆丏鐨勫簱浣嶏紝搴撲綅鍙凤細"+locMast.getLocNo()+" 銆佸綋鍓嶇姸鎬侊細"+locMast.getLocSts()+"-"+locMast.getLocSts$());
}
@@ -462,21 +478,44 @@
Date now = new Date();
// 鍚堝苟鍚岀被椤�
Set<String> locNos = new HashSet<>();
+ ArrayList<String> locNos2 = new ArrayList<String>();
List<OutLocDto> dtos = new ArrayList<>();
for (LocDetlDto locDetlDto : locDetlDtos) {
String locNo = locDetlDto.getLocDetl().getLocNo();
- if (locNos.contains(locNo)) {
- for (OutLocDto dto : dtos) {
- if (dto.getLocNo().equals(locNo)) {
- dto.getLocDetlDtos().add(locDetlDto);
- break;
+ locNos2.add(locNo);
+ //if (locNos.contains(locNo)) {
+ //for (OutLocDto dto : dtos) {
+ // if (dto.getLocNo().equals(locNo)) {
+ // dto.getLocDetlDtos().add(locDetlDto);
+ // break;
+ // }
+ //}
+ //} else {
+ //locNos.add(locNo);
+
+ //dtos.add(new OutLocDto(locNo, locDetlDto));
+ //}
+ }
+ List<String> innermostSideLoc = Utils.getInnermostSideLoc(locNos2, true);
+ System.out.println(innermostSideLoc);
+ for (LocDetlDto locDetlDto : locDetlDtos) {
+ String locNo = locDetlDto.getLocDetl().getLocNo();
+ if(innermostSideLoc.contains(locNo)) {
+ if (locNos.contains(locNo)) {
+ for (OutLocDto dto : dtos) {
+ if (dto.getLocNo().equals(locNo)) {
+ dto.getLocDetlDtos().add(locDetlDto);
+ break;
+ }
}
+ } else {
+ locNos.add(locNo);
+ dtos.add(new OutLocDto(locNo, locDetlDto));
}
- } else {
- locNos.add(locNo);
- dtos.add(new OutLocDto(locNo, locDetlDto));
+ //dtos.add(new OutLocDto(locNo,locDetlDto));
}
}
+
Integer ioType = null;
List<String> excludeLocNos = dtos.stream().map(OutLocDto::getLocNo).distinct().collect(Collectors.toList());
// 鐢熸垚宸ヤ綔妗�
@@ -502,6 +541,10 @@
}
List<String> outerLocs = Utils.getGroupOuterSingleLoc(locNo);
+ LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", dto.getLocNo()));
+ if (locMast1.getLocType2().equals((short)3)){
+ outerLocs = Utils.getGroupOuterSingleLocLowFrequency(locMast1.getLocNo());
+ }
Double wrkPri = 15D;
for (String outerLoc : outerLocs) {
LocMast locMast = locMastService.selectById(outerLoc);
@@ -543,7 +586,8 @@
wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
wrkMast.setIoType(101); // 鍏ュ嚭搴撶姸鎬�101鍏ㄦ澘鍑哄簱
wrkPri += 2D;
- wrkMast.setIoPri(wrkPri); // 浼樺厛绾�
+
+ wrkMast.setIoPri(Utils.getIoPri(locMast.getLocNo())); // 浼樺厛绾�
wrkMast.setOutMost(0);
wrkMast.setCrnNo(locMast.getCrnNo());
wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
@@ -621,6 +665,205 @@
}
}
+ }
+ //-----------------2023.5.31涓婃灦鍖哄煙鐗堟湰鍏煎浠g爜end-----------------------
+
+ // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱
+ if (ioWorkType == null) {
+ ioType = dto.isAll() ? 101 : 103;
+ } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) {
+ ioType = 107;
+ // if (wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 107)) > 0) {
+ // throw new CoolException("鍙兘瀛樺湪涓�绗旂洏鐐逛换鍔�");
+ // }
+ }
+ assert ioType != null;
+ // 鑾峰彇搴撲綅
+ LocMast locMast = locMastService.selectById(dto.getLocNo());
+
+ //-----------------2023.6.2鍑哄簱鍏煎浠g爜-----------------------
+ if (ioType!=107){
+ List<LocDetl> locDetls = locDetlService.selectByLocNo(locMast.getLocNo());
+ //if (locMast.getLocType2() == 1 && locDetls.size() > 1) {
+ // //鍗曞搧鍖哄煙鍑哄簱鐗╂枡澶т簬1绉嶏紝寮哄埗鍙樻垚101鍏ㄦ澘鍑哄簱
+ // ioType = 101;
+ // if (staNo.getDevNo()==300){
+ // staNo.setDevNo(200);
+ // }
+ //}
+ if (ioType == 101) {
+ if (staNo.getDevNo()==300){
+ if(locMast.getCrnNo() == 1) {
+ staNo.setDevNo(100);
+ } else {
+ staNo.setDevNo(200);
+ }
+
+ }
+ } else {
+ staNo.setDevNo(basDevp);
+ }
+
+
+ }
+ //-----------------2023.6.2鍑哄簱鍏煎浠g爜end-----------------------
+
+ // 鑾峰彇璺緞
+ StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), staNo.getDevNo(), locMast.getRow1());
+ if(staDesc == null){
+ throw new CoolException("鍑哄簱璺緞涓嶅瓨鍦�");
+ }
+
+ // 鐢熸垚宸ヤ綔鍙�
+ int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+ // 鐢熸垚宸ヤ綔妗�
+ WrkMast wrkMast = new WrkMast();
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setIoTime(now);
+ wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+ wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
+ Double ioPri = wrkMastService.getIoPri(ioType, dto.getLocNo());
+ wrkMast.setIoPri(15D); // 浼樺厛绾э細13
+ wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), false) ? 1 : 0);
+ wrkMast.setCrnNo(locMast.getCrnNo());
+ wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
+ wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
+ wrkMast.setSourceLocNo(dto.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け璐ワ紝鍑哄簱搴撲綅鍙凤細" + dto.getLocNo());
+ }
+ // 鐢熸垚宸ヤ綔妗f槑缁�
+ for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
+ if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
+ continue;
+ }
+ WrkDetl wrkDetl = new WrkDetl();
+ wrkDetl.sync(detlDto.getLocDetl());
+ wrkDetl.setOrderNo(""); // 鎵嬪姩鍑哄簱涓嶉渶瑕佸甫鍑哄簱瀛樹腑鐨勫崟鎹紪鍙�
+ wrkDetl.setWrkNo(workNo);
+ wrkDetl.setIoTime(now);
+ Double anfme = ioType == 101 ? detlDto.getLocDetl().getAnfme() : detlDto.getCount();
+ wrkDetl.setAnfme(anfme); // 鏁伴噺
+ wrkDetl.setAppeTime(now);
+ wrkDetl.setAppeUser(userId);
+ wrkDetl.setModiTime(now);
+ wrkDetl.setModiUser(userId);
+ wrkDetl.setSpecs(detlDto.getLocDetl().getSpecs());
+ wrkDetl.setMatType(detlDto.getLocDetl().getMatType());
+ wrkDetl.setZpallet(locMast.getBarcode());
+ if (!wrkDetlService.insert(wrkDetl)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ }
+ }
+ // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+ locMast = locMastService.selectById(dto.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("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + dto.getLocNo());
+ }
+ } else {
+ throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+ }
+// locMastService.breakUp(dto.getLocNo(), excludeLocNos);
+ }
+ }
+
+ @Override
+ @Transactional
+ public void stockOut2(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId) {
+ Integer basDevp = staNo.getDevNo();
+ Date now = new Date();
+ // 鍚堝苟鍚岀被椤�
+ Set<String> locNos = new HashSet<>();
+ List<OutLocDto> dtos = new ArrayList<>();
+ for (LocDetlDto locDetlDto : locDetlDtos) {
+ String locNo = locDetlDto.getLocDetl().getLocNo();
+ if (locNos.contains(locNo)) {
+ for (OutLocDto dto : dtos) {
+ if (dto.getLocNo().equals(locNo)) {
+ dto.getLocDetlDtos().add(locDetlDto);
+ break;
+ }
+ }
+ } else {
+ locNos.add(locNo);
+ dtos.add(new OutLocDto(locNo, locDetlDto));
+ }
+ }
+ Integer ioType = null;
+ // 鐢熸垚宸ヤ綔妗�
+ for (OutLocDto dto : dtos) {
+ // 濡傛灉涓烘繁搴撲綅锛屼笖瀵瑰簲娴呭簱浣嶄负X.绂佺敤锛屽垯鐣ヨ繃姝ゅ簱浣�
+ if (Utils.isDeepLoc(slaveProperties, dto.getLocNo())) {
+ String shallowLoc = Utils.getShallowLoc(slaveProperties, dto.getLocNo());
+ if (locMastService.selectById(shallowLoc).getLocSts().equals("X")) {
+ continue;
+ }
+ }
+
+ //-----------------2023.5.31涓婃灦鍖哄煙鐗堟湰鍏煎浠g爜-----------------------
+ //鍒ゆ柇褰撳墠搴撲綅缁勬槸鍚﹀潎涓哄悓涓�绉嶇墿鏂欙紝濡備笉鏄紝鍒欒瀹氶渶瑕佹墽琛屽吋瀹逛唬鐮�
+ //闇�瑕佸皢寰呭嚭搴撳簱浣嶅墠渚у簱浣�(涓嶅寘鍚渶澶栦晶楂橀搴撲綅)鎵ц101鍏ㄦ澘鍑哄簱
+ String locNo = dto.getLocNo();
+ String matnr = null;
+ for (LocDetlDto locDetlDto : dto.getLocDetlDtos()) {
+ LocDetl locDetl = locDetlDto.getLocDetl();
+ if (locDetl.getLocNo().equals(locNo)) {
+ matnr = locDetl.getMatnr();
+ }
+ }
+
+ List<String> outerLocs = new ArrayList<>();
+ if (!dto.isSign()){
+ outerLocs.add(dto.getLocNo());
+ }
+ Double wrkPri = 15D;
+ for (String outerLoc : outerLocs) {
+ if (!dto.isSign()) {
+ // 鐢熸垚宸ヤ綔妗f槑缁�
+ for (LocDetl locDetl : locDetlService.selectByLocNo(outerLoc)) {
+
+ Mat mat = matService.selectByMatnr(locDetl.getMatnr());
+ if (Cools.isEmpty(mat)) {
+ throw new CoolException(locDetl.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+ }
+ int zpallet = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", locDetl.getZpallet()).ne("loc_no",locDetl.getLocNo()));
+ if (zpallet>0) {
+ throw new CoolException(locDetl.getZpallet() + "鍏ュ簱閫氱煡妗d腑宸插瓨鍦�");
+ }
+ WaitPakin waitPakin = new WaitPakin();
+ waitPakin.sync(mat);
+ //waitPakin.setBatch("");
+ waitPakin.setZpallet(locDetl.getZpallet()); // 鎵樼洏鐮�
+ waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵��
+ waitPakin.setAnfme(locDetl.getAnfme()); // 鏁伴噺
+ waitPakin.setStatus("Y"); // 鐘舵��
+ waitPakin.setAppeUser(userId);
+ waitPakin.setAppeTime(now);
+ waitPakin.setModiUser(userId);
+ waitPakin.setModiTime(now);
+ waitPakin.setMemo(locDetl.getMemo());
+ waitPakin.setFrozen(0); // 鏄惁鍐荤粨
+ waitPakin.setManu(locDetl.getManu());
+ waitPakin.setMatType(mat.getMatType());//鐗╂枡绫诲瀷
+ if (!waitPakinService.insert(waitPakin)) {
+ throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+ }
+ }
+ }
}
//-----------------2023.5.31涓婃灦鍖哄煙鐗堟湰鍏煎浠g爜end-----------------------
@@ -981,7 +1224,7 @@
BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
// 妫�绱㈠簱浣�
LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
- StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto);
+ StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto,0);
int workNo = dto.getWorkNo();
// 鐢熸垚宸ヤ綔妗�
WrkMast wrkMast = new WrkMast();
@@ -1292,6 +1535,7 @@
AdjDetl adjDetl = new AdjDetl();
adjDetl.setLocNo(locDetl.getLocNo());
adjDetl.setMatnr(locDetl.getMatnr());
+ adjDetl.setSpecs(locDetl.getSpecs());
adjDetl.setBatch(locDetl.getBatch());
adjDetl.setOriQty(locDetl.getAnfme());
adjDetl.setAdjQty(adjust.getCount());
@@ -1443,7 +1687,7 @@
for (WrkDetl wrkDetl : wrkDetls) {
if (!Cools.isEmpty(wrkDetl.getOrderNo())){
String[] orderNos = GetOrderNo(wrkDetl.getOrderNo());
- if (!Cools.isEmpty(orderNos)){
+ if (!Cools.isEmpty(orderNos) && orderNos.length!=0){
String[] anfmes = GetAnfme(wrkDetl.getOrderNo());
int i = 0;
for (String orderNo : orderNos) {
@@ -1517,8 +1761,7 @@
if (!wrkMastRes || !locMastRes) {
throw new CoolException("淇濆瓨鏁版嵁澶辫触");
}
- WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
- waitPakinService.delete(new EntityWrapper<>(waitPakin));
+ waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
}
@Override
--
Gitblit v1.9.1