From 83b504d7a369baa08b15c741c3b6daf71f6fa1f9 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 07 一月 2025 14:25:25 +0800 Subject: [PATCH] #平库出库功能 --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 124 ++++++++++++++++++++++++++++++++++------- 1 files changed, 102 insertions(+), 22 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 b5b2641..9d6abd4 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,11 +14,13 @@ 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; import java.util.*; +import java.util.stream.Collectors; /** * 鍑哄簱绠$悊 @@ -66,7 +68,7 @@ /** * 鍑哄簱 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public void out(OutParam outParam) { if (outParam.getOperationPort() == null) { throw new CoolException("浣滀笟鍙d笉瀛樺湪"); @@ -152,7 +154,6 @@ if (orderDetlIds.isEmpty()) { throw new CoolException("璁㈠崟鏄庣粏涓嶈兘涓虹┖"); } - List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getId, orderDetlIds).orderByAsc(OrderDetl::getOrderNo, OrderDetl::getCreateTime)); if (orderDetls.isEmpty()) { throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); @@ -160,8 +161,39 @@ 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); + } + }); + /** + * 骞冲簱浼樺厛鍑哄簱瀹屾垚鍚庯紝褰撹鍗曟槑缁唚orkQty + qty 杩樹笉绛変簬anfme鏃讹紝鏌ヨTCU搴� + */ + //鑾峰彇TCU绗﹀悎鏉′欢搴撲綅 for (OrderDetl orderDetl : orderDetls) { double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D); if (issued <= 0.0D) { continue; } @@ -270,7 +302,7 @@ return previewDtos; } - @Transactional + @Transactional(rollbackFor = Exception.class) public void orderOutBatch(List<OrderOutBatchPreviewDto> param) { if (param == null) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖"); @@ -509,6 +541,46 @@ sortParams.add(sortParam); List<MergePreviewResultDto> resultDtos = new ArrayList<>(); + + param.forEach(pars -> { + List<MergePreviewResultLocDto> locDtos = new ArrayList<>(); + List<LocDetl> locs = locDetlService.queryFlatStock(pars.getMatnr(), pars.getBatch(), pars.getFieldParams()); + if (!locs.isEmpty()) { + double anfme = pars.getAnfme() - pars.getWorkQty(); + for (LocDetl detl : locs) { + Loc loc = locService.getById(detl.getLocId()); + if (loc == null) { + throw new CoolException("搴撲綅鏁版嵁涓嶅瓨鍦�"); + } + + if (loc.getLocStsId() != LocStsType.F.val()) { + continue; + } + MergePreviewResultLocDto locDto = new MergePreviewResultLocDto(); + locDto.setLocId(detl.getLocId()); + locDto.setLocNo(detl.getLocNo()); + 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); + break; + } + } + + pars.setWorkQty(pars.getAnfme() - pars.getWorkQty() - anfme); + } + }); + for (MergePreviewDto dto : param) { List<LocDetl> locDetls = locDetlService.queryStock(dto.getMatnr(), dto.getBatch(), dto.getFieldParams(), sortParams); if(locDetls.isEmpty()){ @@ -525,10 +597,9 @@ MergePreviewResultDto resultDto = new MergePreviewResultDto(); resultDto.sync(dto); - resultDto.setLocs(locDtos); resultDto.setOrderIds(dto.getOrderIds()); - Double anfme = dto.getAnfme(); + resultDto.setLocs(locDtos); for (LocDetl locDetl : locDetls) { Loc loc = locService.getById(locDetl.getLocId()); if (loc == null) { @@ -581,7 +652,18 @@ return resultDtos; } - @Transactional + /** + * 娉㈡鐢熸垚鍑哄簱浠诲姟 + * 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){ throw new CoolException("鍙傛暟涓嶈兘涓虹┖"); @@ -793,13 +875,16 @@ throw new CoolException("鏈敓鎴愭尝娆�"); } + Wave wave = waveService.getById(dto.getWaveId()); + if (Objects.isNull(wave)) { + throw new CoolException("娉㈡涓嶅瓨鍦�"); + } + List<OrderOutMergeParam> params = dto.getList(); if (params.isEmpty()) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖"); } - - Long waveId = dto.getWaveId(); List<Long> filterParamsList = new ArrayList<>(); List<OrderOutMergeParam> filterParams = new ArrayList<>(); @@ -814,7 +899,7 @@ HashMap<String, Double> stockMap = new HashMap<>(); for (OrderOutMergeParam param : filterParams) { String matUniqueKey = Utils.getMatUniqueKey(param.getMatnr(), param.getBatch(), param.getFieldParams()); - WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, waveId)); + WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, wave.getId())); if(waveDetl == null){ throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦�"); } @@ -912,7 +997,8 @@ taskDetl.setTaskNo(task.getTaskNo()); taskDetl.setAnfme(merge.getAnfme()); taskDetl.setStock(locDetl.getAnfme()); - taskDetl.setWaveId(waveId); + taskDetl.setWaveId(wave.getId()); + taskDetl.setWaveNo(wave.getWaveNo()); taskDetl.setOrderId(null); taskDetl.setOrderNo(null); if (!taskDetlService.save(taskDetl)) { @@ -934,8 +1020,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, waveId)); - WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, waveId), false); + 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("娉㈡鏁版嵁涓嶅瓨鍦�"); } @@ -946,12 +1032,6 @@ } } -// //搴撳瓨鏇存柊閫昏緫 - List<Long> orderIds = dto.getList().stream().findFirst().get().getOrderIds(); - List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, orderIds)); - orderDetls.forEach(orderDetl -> { - orderUtils.updateWorkQty(orderDetl.getId(), orderDetl.getAnfme()); - }); //搴撲綅F => R loc.setLocStsId(LocStsType.R.val()); @@ -962,10 +1042,10 @@ } } - Wave wave = waveService.getById(waveId); - if (wave == null) { - throw new CoolException("娉㈡涓嶅瓨鍦�"); - } +// Wave wave = waveService.getById(dto.getWaveId()); +// if (wave == null) { +// throw new CoolException("娉㈡涓嶅瓨鍦�"); +// } wave.setWaveStatus(WaveStatusType.GENERATE.id); wave.setUpdateTime(new Date()); -- Gitblit v1.9.1