From 49b8b52ae6dfb28e3e9a741bb277c231bd13418d Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期五, 04 七月 2025 15:51:45 +0800 Subject: [PATCH] 库存明细出库 --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 206 insertions(+), 11 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 26e4738..71af48e 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 @@ -1,8 +1,10 @@ package com.zy.asrs.wms.asrs.manage; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mysql.cj.util.StringUtils; +import com.zy.asrs.wms.asrs.entity.param.StockOutParam; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.dto.*; @@ -1051,7 +1053,7 @@ } if (!tucOrders.isEmpty()) { //CTU鍑哄簱 - outStockByTUC(tucOrders, wave); + outStockByCTU(tucOrders, wave); } } @@ -1061,7 +1063,7 @@ * @param tucOrders * @param wave */ - private void outStockByTUC(List<OrderOutMergeParam> tucOrders, Wave wave) { + private void outStockByCTU(List<OrderOutMergeParam> tucOrders, Wave wave) { Map<Long, List<OrderOutMergeDto>> map = checkLoc(tucOrders, wave); for (Map.Entry<Long, List<OrderOutMergeDto>> entry : map.entrySet()) { @@ -1152,7 +1154,7 @@ } List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>() - .eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).eq(CacheSite::getChannel,task.getTargetSite())); + .eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).eq(CacheSite::getChannel, task.getTargetSite())); if (cacheSites.isEmpty()) { throw new CoolException("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�"); @@ -1217,6 +1219,18 @@ //鏍规嵁搴撲綅ID鍒嗙粍 Map<Long, List<OrderOutMergeParam>> listMap = flatOrders.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getLocId)); + + genPickSheet(listMap, pickSheet); + } + + /** + * @author Ryan + * @date 2025/7/4 + * @description: 鐢熼潰鎷h揣鏄庣粏 + * @version 1.0 + */ + @Transactional(rollbackFor = Exception.class) + public void genPickSheet(Map<Long, List<OrderOutMergeParam>> listMap, PickSheet pickSheet) { //鐢熸垚鎷h揣鏄庣粏 listMap.keySet().forEach(key -> { Loc curLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getId, key)); @@ -1246,11 +1260,14 @@ if (!locDetlService.updateById(locDetl)) { throw new CoolException("搴撳瓨鍔犻攣澶辫触锛侊紒"); } - }); - }); + curLoc.setLocStsId(LocStsType.R.val()); + if (!locService.updateById(curLoc)) { + throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + }); } /** @@ -1270,24 +1287,19 @@ if (param == null) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖"); } - List<String> channels = param.getChannels(); if (channels == null) { throw new CoolException("閫氶亾鍙傛暟涓嶈兘涓虹┖"); } - if (channels.isEmpty()) { throw new CoolException("閫氶亾鍙傛暟涓嶈兘涓虹┖"); } - // for (String channel : channels) { // long count = cacheSiteService.count(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getChannel, channel).ne(CacheSite::getSiteStatus, 0)); // if (count > 0) { // throw new CoolException(channel + "閫氶亾宸茬粡鍒嗛厤娉㈡"); // } // } - - List<Long> orderIds = param.getOrderIds(); if (orderIds == null) { throw new CoolException("璁㈠崟鍙傛暟涓嶈兘涓虹┖"); @@ -1448,7 +1460,190 @@ waveService.removeById(wave.getId()); } - } + /** + * @author Ryan + * @date 2025/7/3 + * @description: 搴撳瓨鍑哄簱淇℃伅 + * @version 1.0 + */ + @Transactional(rollbackFor = Exception.class) + public void outLocStock(StockOutParam param) { + System.out.println(JSONObject.toJSONString(param)); + if (param.getOutType().equals(1)) { + //鎷h揣鍗� + outFlatStock(param); + } else { + //鐢熸垚浠诲姟妗� + generateTask(param); + } + } + + /** + * @author Ryan + * @param: [] + * @return: void + * @date: 2025/7/4 + * @description: 鎵嬪姩鍑哄簱鐢熸垚浠诲姟 + */ + @Transactional(rollbackFor = Exception.class) + public void generateTask(StockOutParam outParam) { + for (LocDetl outLocDetl : outParam.getLocDetls()) { + List<OrderOutMergeDto> orders = new ArrayList<>(); + LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getId, outLocDetl.getId())); + if (Objects.isNull(detl)) { + continue; + } + OrderOutMergeDto outMergeParam = new OrderOutMergeDto(); + outMergeParam.setAnfme(outLocDetl.getAnfme()) + .setLocNo(outLocDetl.getLocNo()) + .setLocDetlId(detl.getId()) + .setLocId(detl.getLocId()) + .setMatnr(outLocDetl.getMatnr()) + .setBatch(detl.getBatch()); + orders.add(outMergeParam); + + //鏍规嵁搴撲綅ID鍒嗙粍 + Map<Long, List<OrderOutMergeDto>> listMap = orders.stream().collect(Collectors.groupingBy(OrderOutMergeDto::getLocId)); + //鐢熸垚鎷h揣鍗曟槑缁� + for (Map.Entry<Long, List<OrderOutMergeDto>> entry : listMap.entrySet()) { + Long locId = entry.getKey(); + List<OrderOutMergeDto> list = entry.getValue(); + //鍒ゆ柇鏄惁鍏ㄤ粨鍑哄簱 + Boolean all = outUtils.isAllForMerge(locId, list); + OrderOutMergeDto param = list.stream().findFirst().get(); + + List<CacheSite> sites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>() + .isNotNull(CacheSite::getOrderId)); + if (!sites.isEmpty()) { + Map<String, Long> longMap = sites.stream().collect(Collectors.groupingBy(CacheSite::getChannel, Collectors.counting())); + Map.Entry<String, Long> entry1 = longMap.entrySet().stream().min(Map.Entry.comparingByValue()).get(); + param.setPortSite(entry1.getKey()); + } else { + CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().last("limit 1")); + param.setPortSite(cacheSite.getChannel()); + } + Loc loc = locService.getById(locId); + if (loc == null) { + throw new CoolException("搴撲綅涓嶅瓨鍦�"); + } + + if (!loc.getLocStsId().equals(LocStsType.F.val())) { + throw new CoolException(loc.getLocNo() + "搴撲綅鐘舵�佸紓甯�"); + } + + OperationPort operationPort = operationPortService + .getOne(new LambdaQueryWrapper<OperationPort>() + .eq(OperationPort::getFlag, param.getPortSite())); + if (Objects.isNull(operationPort)) { + throw new CoolException("浣滀笟鍙d笉瀛樺湪"); + } + //101 鍏ㄦ嫋鍑哄簱 103 鎷h揣鍑哄簱 + long taskType = all ? 101L : 103L; + + Task task = new Task(); + task.setTaskNo(workService.generateTaskNo(taskType)); + task.setTaskSts(TaskStsType.GENERATE_OUT.id); + task.setTaskType(taskType); + task.setIoPri(workService.generateIoPri(taskType)); + task.setOriginLoc(loc.getLocNo()); + task.setTargetSite(operationPort.getFlag()); + task.setBarcode(loc.getBarcode()); + boolean res = taskService.save(task); + if (!res) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + + for (OrderOutMergeDto merge : list) { + LocDetl locDetl = locDetlService.getById(merge.getLocDetlId()); + if (locDetl == null) { + throw new CoolException("鏄庣粏涓嶅瓨鍦�"); + } + + TaskDetl taskDetl = new TaskDetl(); + taskDetl.sync(locDetl); + taskDetl.setId(null); + taskDetl.setTaskId(task.getId()); + taskDetl.setTaskNo(task.getTaskNo()); + taskDetl.setAnfme(merge.getAnfme()); + taskDetl.setStock(locDetl.getAnfme()); + taskDetl.setOrderId(null); + taskDetl.setOrderNo(null); + if (!taskDetlService.save(taskDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + + List<LocDetlField> locDetlFields = locDetlFieldService + .list(new LambdaQueryWrapper<LocDetlField>() + .eq(LocDetlField::getDetlId, locDetl.getId())); + for (LocDetlField locDetlField : locDetlFields) { + TaskDetlField taskDetlField = new TaskDetlField(); + taskDetlField.sync(locDetlField); + taskDetlField.setId(null); + taskDetlField.setDetlId(taskDetl.getId()); + boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField); + if (!taskDetlFieldSave) { + throw new CoolException("鏄庣粏鎵╁睍鐢熸垚澶辫触"); + } + } + } + + //搴撲綅F => R + loc.setLocStsId(LocStsType.R.val()); + loc.setUpdateTime(new Date()); + boolean locUpdate = locService.updateById(loc); + if (!locUpdate) { + throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐�"); + } + } + } + } + + + /** + * @author Ryan + * @date 2025/7/4 + * @description: 骞冲簱搴撳瓨鍑哄簱 + * @version 1.0 + */ + @Transactional(rollbackFor = Exception.class) + public void outFlatStock(StockOutParam param) { + //鐢熸垚鎷h揣鍗� + PickSheet pickSheet = new PickSheet(); + //娉㈡鏁伴噺姹囨�� + Double sum = param.getLocDetls().stream().mapToDouble(LocDetl::getAnfme).sum(); + //鐢熸垚鎷h揣鍗曞彿 + String pickNo = generatePickNO(); + pickSheet.setId(null) + .setPickNo(pickNo) + .setMemo("搴撳瓨鍑哄簱") + .setAnfme(sum) + .setType(2); + + if (!pickSheetService.save(pickSheet)) { + throw new CoolException("鎷h揣鍗曞啓鍏ュけ璐ワ紒锛�"); + } + + for (LocDetl locDetl : param.getLocDetls()) { + List<OrderOutMergeParam> orders = new ArrayList<>(); + LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, locDetl.getLocNo())); + if (Objects.isNull(detl)) { + continue; + } + OrderOutMergeParam outMergeParam = new OrderOutMergeParam(); + outMergeParam.setAnfme(locDetl.getAnfme()) + .setLocNo(locDetl.getLocNo()) + .setLocId(detl.getLocId()) + .setLocDetlId(detl.getId()) + .setMatnr(locDetl.getMatnr()) + .setBatch(detl.getBatch()); + orders.add(outMergeParam); + + //鏍规嵁搴撲綅ID鍒嗙粍 + Map<Long, List<OrderOutMergeParam>> listMap = orders.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getLocId)); + //鐢熸垚鎷h揣鍗曟槑缁� + genPickSheet(listMap, pickSheet); + } + } } -- Gitblit v1.9.1