From d3f22f29b52d7b49e78ce905b6700c92a6096933 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 07 一月 2025 19:30:27 +0800 Subject: [PATCH] #平仓出库功能 --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 223 ++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 147 insertions(+), 76 deletions(-) diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java index 9d6abd4..29f8f7e 100644 --- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java @@ -14,7 +14,6 @@ import com.zy.asrs.wms.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -161,34 +160,34 @@ orderDetls = orderDetlService.parseDetl(orderDetls); HashMap<Long, List<LocDetl>> orderDetlLocMap = new HashMap<>(); - //鍑哄簱璁㈠崟鍚堣 +// //鍑哄簱璁㈠崟鍚堣 List<OutDetlDto> detlDtos = new ArrayList<>(); - //鑾峰彇骞充粨涓鍚堟潯浠剁殑鎵�鏈夊簱浣� - orderDetls.forEach(detl -> { - double issued = Optional.of(detl.getAnfme() - detl.getQty() - detl.getWorkQty()).orElse(0.0D); - if (issued <= 0.0D) { - return; - } - List<LocDetl> locs = locDetlService.queryFlatStock(detl.getMat$().getMatnr(), detl.getBatch(), detl.getUniqueField()); - //骞冲簱鏈夊綋鏄庣墿鏂欎紭鍏堝嚭搴� - if (!locs.isEmpty()) { - for (LocDetl locDetl : locs) { - if (issued > 0) { - OutDetlDto outDetlDto = new OutDetlDto(); - outDetlDto.setDetlId(locDetl.getId()); - outDetlDto.setAnfme(issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued); - outDetlDto.setStock(locDetl.getAnfme()); - outDetlDto.setOrderDetlId(locDetl.getId()); - detlDtos.add(outDetlDto); - issued = issued - outDetlDto.getAnfme(); - } - } - //璁㈠崟鏄庣粏闇�鍑哄簱鏁伴噺 - double workQty = Optional.of(detl.getAnfme() - detl.getQty() - detl.getWorkQty()).orElse(0.0D); - //鏇存柊骞冲簱璁㈠崟鏄庣粏鐨勫疄闄呭彲鐢ㄦ暟閲� - detl.setWorkQty(workQty - issued); - } - }); +// //鑾峰彇骞充粨涓鍚堟潯浠剁殑鎵�鏈夊簱浣� +// orderDetls.forEach(detl -> { +// double issued = Optional.of(detl.getAnfme() - detl.getQty() - detl.getWorkQty()).orElse(0.0D); +// if (issued <= 0.0D) { +// return; +// } +// List<LocDetl> locs = locDetlService.queryFlatStock(detl.getMat$().getMatnr(), detl.getBatch(), detl.getUniqueField()); +// //骞冲簱鏈夊綋鏄庣墿鏂欎紭鍏堝嚭搴� +// if (!locs.isEmpty()) { +// for (LocDetl locDetl : locs) { +// if (issued > 0) { +// OutDetlDto outDetlDto = new OutDetlDto(); +// outDetlDto.setDetlId(locDetl.getId()); +// outDetlDto.setAnfme(issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued); +// outDetlDto.setStock(locDetl.getAnfme()); +// outDetlDto.setOrderDetlId(locDetl.getId()); +// detlDtos.add(outDetlDto); +// issued = issued - outDetlDto.getAnfme(); +// } +// } +// //璁㈠崟鏄庣粏闇�鍑哄簱鏁伴噺 +// double workQty = Optional.of(detl.getAnfme() - detl.getQty() - detl.getWorkQty()).orElse(0.0D); +// //鏇存柊骞冲簱璁㈠崟鏄庣粏鐨勫疄闄呭彲鐢ㄦ暟閲� +// detl.setWorkQty(workQty - issued); +// } +// }); /** * 骞冲簱浼樺厛鍑哄簱瀹屾垚鍚庯紝褰撹鍗曟槑缁唚orkQty + qty 杩樹笉绛変簬anfme鏃讹紝鏌ヨTCU搴� @@ -517,11 +516,10 @@ mergePreviewDtos.add(dto); } - return mergePreviewDtos; } - @Transactional + @Transactional(rollbackFor = Exception.class) public List<MergePreviewResultDto> orderOutMergeLocPreview(List<MergePreviewDto> param) { if (param == null) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖"); @@ -544,6 +542,11 @@ param.forEach(pars -> { List<MergePreviewResultLocDto> locDtos = new ArrayList<>(); + MergePreviewResultDto resultDto = new MergePreviewResultDto(); + resultDto.sync(pars); + resultDto.setOrderIds(pars.getOrderIds()); + resultDto.setLocs(locDtos); + List<LocDetl> locs = locDetlService.queryFlatStock(pars.getMatnr(), pars.getBatch(), pars.getFieldParams()); if (!locs.isEmpty()) { double anfme = pars.getAnfme() - pars.getWorkQty(); @@ -559,29 +562,45 @@ MergePreviewResultLocDto locDto = new MergePreviewResultLocDto(); locDto.setLocId(detl.getLocId()); locDto.setLocNo(detl.getLocNo()); + locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id); locDto.setLocDetlId(detl.getId()); locDtos.add(locDto); //搴撲綅瀹為檯鍙敤鏁伴噺 double surplusQty = detl.getAnfme() - detl.getWorkQty(); //娉㈡鏁伴噺鍑忓幓搴撲綅鍙敤鏁伴噺鍚庯紝鐩堜綑鏁伴噺 -// double workQty = anfme - surplusQty; anfme = anfme - surplusQty; if (anfme > 0) { locDto.setAnfme(detl.getAnfme()); locDto.setWorkQty(surplusQty); } else { - locDto.setAnfme(anfme); - locDto.setWorkQty(anfme); + locDto.setAnfme(pars.getAnfme() - pars.getWorkQty()); + locDto.setWorkQty(pars.getAnfme() - pars.getWorkQty()); break; } } - + //淇濆瓨鍑哄簱鏁伴噺锛堝钩搴擄級 pars.setWorkQty(pars.getAnfme() - pars.getWorkQty() - anfme); + + resultDto.setOtherLocs(new ArrayList<>()); + + resultDto.setAnfme(pars.getAnfme()); + + resultDtos.add(resultDto); + + } else { + resultDto.sync(pars); + resultDto.setLocs(new ArrayList<>()); + resultDto.setOrderIds(pars.getOrderIds()); + resultDto.setAnfme(pars.getAnfme()); + resultDtos.add(resultDto); } }); for (MergePreviewDto dto : param) { + Double anfme = dto.getAnfme() - dto.getWorkQty(); + //鍑忓幓骞冲簱鏁伴噺鍚庯紝灏忎簬绛変簬0锛岃烦鍑哄鐞� + if (anfme <= 0) {continue;} List<LocDetl> locDetls = locDetlService.queryStock(dto.getMatnr(), dto.getBatch(), dto.getFieldParams(), sortParams); if(locDetls.isEmpty()){ MergePreviewResultDto resultDto = new MergePreviewResultDto(); @@ -598,7 +617,7 @@ MergePreviewResultDto resultDto = new MergePreviewResultDto(); resultDto.sync(dto); resultDto.setOrderIds(dto.getOrderIds()); - Double anfme = dto.getAnfme(); +// Double anfme = dto.getAnfme(); resultDto.setLocs(locDtos); for (LocDetl locDetl : locDetls) { Loc loc = locService.getById(locDetl.getLocId()); @@ -652,17 +671,6 @@ return resultDtos; } - /** - * 娉㈡鐢熸垚鍑哄簱浠诲姟 - * UTC鍑哄簱浠诲姟閫昏緫涓嶅彉锛屾坊鍔犲钩搴撳垽鍒�昏緫 - * 1. 鑾峰彇娉㈡璁㈠崟鏄庣粏锛屽垽鍒槸鍚︿负骞冲簱璁㈠崟 - * 2. 骞冲簱璁㈠崟鐢熸垚鎷h揣鍗曪紝 UTC璁㈠崟鐢熸垚鍑哄簱浠诲姟 - * 3. 骞冲簱鍗曟嵁鏄庣粏鎵�鍗犲簱浣嶇墿鏂欐暟閲忓姞閿� - * 4. 鐢熸垚鍑哄簱鍗昉DA绔紝缁熶竴鍑哄簱鎵e噺搴撳瓨 - * 5. 鐢熸垚鎷h揣鍗曞巻鍙叉。锛屽嚭搴撳崟鎹姞鍏ュ巻鍙叉。锛屽垹闄ゅ師鍗曟嵁 - * 6. 鍒犻櫎娉㈡鍒楄〃鏁版嵁 - * @param dto - */ @Transactional(rollbackFor = Exception.class) public void orderOutMerge(OrderOutMergeParamDto dto) { if(dto == null){ @@ -865,6 +873,18 @@ } + + /** + * 娉㈡鐢熸垚鍑哄簱浠诲姟 + * UTC鍑哄簱浠诲姟閫昏緫涓嶅彉锛屾坊鍔犲钩搴撳垽鍒�昏緫 + * 1. 鑾峰彇娉㈡璁㈠崟鏄庣粏锛屽垽鍒槸鍚︿负骞冲簱璁㈠崟 + * 2. 骞冲簱璁㈠崟鐢熸垚鎷h揣鍗曪紝 UTC璁㈠崟鐢熸垚鍑哄簱浠诲姟 + * 3. 骞冲簱鍗曟嵁鏄庣粏鎵�鍗犲簱浣嶇墿鏂欐暟閲忓姞閿� + * 4. 鐢熸垚鍑哄簱鍗昉DA绔紝缁熶竴鍑哄簱鎵e噺搴撳瓨 + * 5. 鐢熸垚鎷h揣鍗曞巻鍙叉。锛屽嚭搴撳崟鎹姞鍏ュ巻鍙叉。锛屽垹闄ゅ師鍗曟嵁 + * 6. 鍒犻櫎娉㈡鍒楄〃鏁版嵁 + * @param dto + */ @Transactional(rollbackFor = Exception.class) public void orderOutMergeWave(OrderOutMergeParamDto dto) { if(dto == null){ @@ -880,24 +900,26 @@ throw new CoolException("娉㈡涓嶅瓨鍦�"); } - List<OrderOutMergeParam> params = dto.getList(); + /** + * 娉㈡鍚堝苟鍑哄簱 + * 1. 鍒ゆ柇鏄钩搴撹繕TCU搴� + * 2. 鏍规嵁鍗曞簱鍗曟嵁绫诲瀷 + * 2. 骞冲簱鐢熸垚鎷h揣鍗� + * 3. TCU搴撶敓鎴愪换鍔″崟 + */ + outStockByArea(dto, wave); - if (params.isEmpty()) { - throw new CoolException("鍙傛暟涓嶈兘涓虹┖"); + //娉㈡鐘舵�佷慨鏀逛负--鐢熸垚浠诲姟 + wave.setWaveStatus(WaveStatusType.GENERATE.id); + wave.setUpdateTime(new Date()); + if (!waveService.updateById(wave)) { + throw new CoolException("娉㈡鏇存柊澶辫触"); } + } - List<Long> filterParamsList = new ArrayList<>(); - List<OrderOutMergeParam> filterParams = new ArrayList<>(); - - params.forEach(action -> { - if (action.getLocId() != null) { - filterParamsList.add(action.getLocId()); - filterParams.add(action); - } - }); - + private Map<Long, List<OrderOutMergeDto>> checkLoc(List<OrderOutMergeParam> mergeParams, Wave wave) { HashMap<String, Double> stockMap = new HashMap<>(); - for (OrderOutMergeParam param : filterParams) { + for (OrderOutMergeParam param : mergeParams) { String matUniqueKey = Utils.getMatUniqueKey(param.getMatnr(), param.getBatch(), param.getFieldParams()); WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, wave.getId())); if(waveDetl == null){ @@ -911,7 +933,7 @@ } HashMap<Long, List<OrderOutMergeDto>> map = new HashMap<>(); - for (OrderOutMergeParam param : filterParams) { + for (OrderOutMergeParam param : mergeParams) { LocDetl locDetl = locDetlService.getById(param.getLocDetlId()); if(locDetl == null) { continue; @@ -947,6 +969,57 @@ if (map.isEmpty()) { throw new CoolException("搴撳瓨涓嶈冻"); } + + return map; + } + + /** + * 鏍规嵁涓嶅悓搴撲綅绫诲瀷鐢熸垚鍑哄簱鎷e崟鍙奣UC浠诲姟妗� + * @param dto + * @param wave + */ + private void outStockByArea(OrderOutMergeParamDto dto, Wave wave) { + List<OrderOutMergeParam> params = dto.getList(); + if (params.isEmpty()) { + throw new CoolException("鍙傛暟涓嶈兘涓虹┖"); + } + + //骞冲簱鏁版嵁婧� + List<OrderOutMergeParam> flatOrders = new ArrayList<>();// listMap.get(LocAreaTypeSts.LOC_AREA_TYPE_FLAT); + //TUC鏁版嵁婧� + List<OrderOutMergeParam> tucOrders = new ArrayList<>();//listMap.get(LocAreaTypeSts.LOC_AREA_TYPE_UTC); + //鎸夊簱浣嶇被鍨嬪垎绫� + Map<Long, List<OrderOutMergeParam>> listMap = params.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getTypeId)); + + //鏁版嵁鍒嗙被 1.骞冲簱鏁版嵁 2. TUC鏁版嵁 + listMap.keySet().forEach(key -> { + if (key == LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id) { + flatOrders.addAll(listMap.get(key)); + } else { + tucOrders.addAll(listMap.get(key)); + } + }); + if (flatOrders.isEmpty()) { + //骞冲簱鍑哄簱 + outStockByFlat(flatOrders, wave); + } + + if (tucOrders.isEmpty()) { + //TUC鍑哄簱 + outStockByTUC(tucOrders, wave); + } + + + } + + /** + * TUC鍑哄簱--鐢熸垚鍑哄簱浠诲姟妗� + * + * @param tucOrders + * @param wave + */ + private void outStockByTUC(List<OrderOutMergeParam> tucOrders, Wave wave) { + Map<Long, List<OrderOutMergeDto>> map = checkLoc(tucOrders, wave); for (Map.Entry<Long, List<OrderOutMergeDto>> entry : map.entrySet()) { Long locId = entry.getKey(); @@ -1017,11 +1090,8 @@ } } - - //TODO 纭鍚庯紝闇�灏嗘敞閲婃墦寮� String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField()); WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, wave.getId())); -// WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId()), false); if (waveDetl == null) { throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦�"); } @@ -1032,7 +1102,6 @@ } } - //搴撲綅F => R loc.setLocStsId(LocStsType.R.val()); loc.setUpdateTime(new Date()); @@ -1041,19 +1110,21 @@ throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐�"); } } - -// Wave wave = waveService.getById(dto.getWaveId()); -// if (wave == null) { -// throw new CoolException("娉㈡涓嶅瓨鍦�"); -// } - - wave.setWaveStatus(WaveStatusType.GENERATE.id); - wave.setUpdateTime(new Date()); - if (!waveService.updateById(wave)) { - throw new CoolException("娉㈡鏇存柊澶辫触"); - } } + /** + * 骞冲簱鍑哄簱--鐢熸垚鍑哄簱鎷h揣鍗� + * + * @param flatOrders + * @param wave + */ + private void outStockByFlat(List<OrderOutMergeParam> flatOrders, Wave wave) { + Map<Long, List<OrderOutMergeDto>> map = checkLoc(flatOrders, wave); + + + } + + @Transactional(rollbackFor = Exception.class) public void generateWave(GenerateWaveParam param) { if (param == null) { -- Gitblit v1.9.1