From c2b88a03f3d0d5ebe92949e64d17ee4d0ac3f6b7 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 09 九月 2025 15:14:00 +0800 Subject: [PATCH] 发货清空缓存站点 --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 156 insertions(+), 7 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 26e9398..9f23308 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 @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.mysql.cj.util.StringUtils; import com.zy.asrs.wms.asrs.entity.param.StockOutParam; import com.zy.asrs.framework.exception.CoolException; @@ -1110,6 +1111,11 @@ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); } + wave.setSite(operationPort.getFlag()); + if (!waveService.updateById(wave)) { + throw new CoolException("娉㈡绔欏彛鐘舵�佹洿鏂板け璐ワ紒锛�"); + } + for (OrderOutMergeDto merge : list) { LocDetl locDetl = locDetlService.getById(merge.getLocDetlId()); if (locDetl == null) { @@ -1162,6 +1168,7 @@ if (orders.isEmpty()) { throw new CoolException("褰撳墠娉㈡璁㈠崟涓嶅瓨鍦紒锛�"); } + // List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>() // .eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).eq(CacheSite::getChannel, task.getTargetSite())); @@ -1272,6 +1279,12 @@ if (!locDetlService.updateById(locDetl)) { throw new CoolException("搴撳瓨鍔犻攣澶辫触锛侊紒"); } + + orderDetlService.update(new LambdaUpdateWrapper<OrderDetl>() + .set(OrderDetl::getWareType, 2) + .eq(OrderDetl::getMatId, mat.getId()) + .eq(StringUtils.isNullOrEmpty(outOder.getBatch()), OrderDetl::getBatch, outOder.getBatch()) + .in(OrderDetl::getOrderId, outOder.getOrderIds())); }); curLoc.setLocStsId(LocStsType.R.val()); @@ -1488,7 +1501,133 @@ outFlatStock(param); } else { //鐢熸垚浠诲姟妗� - generateTask(param); + generateTask(param, null); + } + } + + /** + * @author Ryan + * @date 2025/9/9 + * @description: 鐩樼偣鍑哄簱 + * @version 1.0 + */ + @Transactional(rollbackFor = Exception.class) + public void outCheckStock(CheckOutParam checkParams) { + //鐢熸垚浠诲姟妗� + generateCheckTask(checkParams, "check"); + } + + /** + * @author Ryan + * @date 2025/9/9 + * @description: 鐢熸垚鐩樼偣鍑哄簱浠诲姟 + * @version 1.0 + */ + @Transactional(rollbackFor = Exception.class) + public void generateCheckTask(CheckOutParam outParam, String type) { + Loc loc = locService.getById(outParam.getId()); + if (Objects.isNull(loc)) { + throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�"); + } + List<LocDetl> detls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocId, loc.getId())); + for (LocDetl detl : detls) { + List<OrderOutMergeDto> orders = new ArrayList<>(); + if (Objects.isNull(detl)) { + continue; + } + OrderOutMergeDto outMergeParam = new OrderOutMergeDto(); + outMergeParam.setAnfme(detl.getAnfme()); + outMergeParam.setLocNo(detl.getLocNo()); + outMergeParam.setLocDetlId(detl.getId()); + outMergeParam.setLocId(detl.getLocId()); + outMergeParam.setMatnr(detl.getMatnr()); + outMergeParam.setBatch(detl.getBatch()); + orders.add(outMergeParam); + + Map<Long, List<OrderOutMergeDto>> listMap = orders.stream().collect(Collectors.groupingBy(OrderOutMergeDto::getLocId)); + //鏍规嵁搴撲綅ID鍒嗙粍 + //鐢熸垚鎷h揣鍗曟槑缁� + for (Map.Entry<Long, List<OrderOutMergeDto>> entry : listMap.entrySet()) { + List<OrderOutMergeDto> list = entry.getValue(); + 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()); + } + 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笉瀛樺湪"); + } + + Task task = new Task(); + task.setTaskSts(TaskStsType.GENERATE_OUT.id); + // 107 鐩樼偣鍑哄簱 + long taskType = 107L; + task.setTaskType(taskType); + task.setTaskNo(workService.generateTaskNo(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("搴撲綅鐘舵�佹洿鏂板け璐�"); + } + } } } @@ -1500,7 +1639,7 @@ * @description: 鎵嬪姩鍑哄簱鐢熸垚浠诲姟 */ @Transactional(rollbackFor = Exception.class) - public void generateTask(StockOutParam outParam) { + public void generateTask(StockOutParam outParam, String type) { for (LocDetl outLocDetl : outParam.getLocDetls()) { List<OrderOutMergeDto> orders = new ArrayList<>(); LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getId, outLocDetl.getId())); @@ -1551,14 +1690,24 @@ 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)); + if (Objects.isNull(type)) { + //101 鍏ㄦ嫋鍑哄簱 103 鎷h揣鍑哄簱 + long taskType = all ? 101L : 103L; + task.setTaskType(taskType); + task.setTaskNo(workService.generateTaskNo(taskType)); + task.setIoPri(workService.generateIoPri(taskType)); + } else { + // 107 鐩樼偣鍑哄簱 + long taskType = 107L; + task.setTaskType(taskType); + task.setTaskNo(workService.generateTaskNo(taskType)); + task.setIoPri(workService.generateIoPri(taskType)); + } + task.setOriginLoc(loc.getLocNo()); task.setTargetSite(operationPort.getFlag()); task.setBarcode(loc.getBarcode()); -- Gitblit v1.9.1