From febdf3b4775ce990fc80f671513d0c56ab9a42b6 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 07 七月 2025 16:12:23 +0800
Subject: [PATCH] no message
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 252 ++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 221 insertions(+), 31 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 b1d6fe3..affa841 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,16 +1,15 @@
package com.zy.asrs.wms.asrs.manage;
import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.fasterxml.jackson.datatype.jsr310.DecimalUtils;
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.*;
-import com.zy.asrs.wms.asrs.entity.dto.OrderOutMergeDto;
import com.zy.asrs.wms.asrs.entity.enums.*;
import com.zy.asrs.wms.asrs.entity.param.*;
-import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.service.*;
import com.zy.asrs.wms.utils.OrderUtils;
import com.zy.asrs.wms.utils.OutUtils;
@@ -23,11 +22,9 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
-import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
/**
* 鍑哄簱绠$悊
@@ -589,7 +586,7 @@
locDto.setWorkQty(detl.getWorkQty());
locDtos.add(locDto);
//搴撲綅瀹為檯鍙敤鏁伴噺
- double surplusQty = detl.getAnfme() - detl.getWorkQty();
+ Double surplusQty = Math.round((detl.getAnfme() - detl.getWorkQty()) * 10000) / 10000.0;
if (surplusQty <= 0) {
continue;
}
@@ -940,9 +937,9 @@
/**
* 娉㈡鍚堝苟鍑哄簱
- * 1. 鍒ゆ柇鏄钩搴撹繕TCU搴�
+ * 1. 鍒ゆ柇鏄钩搴撹繕CTU搴�
* 2. 骞冲簱鐢熸垚鎷h揣鍗�
- * 3. TCU搴撶敓鎴愪换鍔″崟
+ * 3. CTU搴撶敓鎴愪换鍔″崟
*/
outStockByArea(dto, wave);
@@ -1054,12 +1051,10 @@
//骞冲簱鍑哄簱
outStockByFlat(flatOrders, wave);
}
-
if (!tucOrders.isEmpty()) {
//CTU鍑哄簱
- outStockByTUC(tucOrders, wave);
+ outStockByCTU(tucOrders, wave);
}
-
}
/**
@@ -1068,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()) {
@@ -1158,7 +1153,8 @@
throw new CoolException("褰撳墠娉㈡璁㈠崟涓嶅瓨鍦紒锛�");
}
- List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).orderByAsc(CacheSite::getChannel));
+ List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>()
+ .eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).eq(CacheSite::getChannel, task.getTargetSite()));
if (cacheSites.isEmpty()) {
throw new CoolException("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�");
@@ -1173,6 +1169,7 @@
cacheSite.setOrderId(orders.get(i).getId());
cacheSite.setOrderNo(orders.get(i).getOrderNo());
cacheSite.setSiteStatus(CacheSiteStatusType.R.id);
+ cacheSite.setBarcode(loc.getBarcode());
cacheSite.setUpdateTime(new Date());
if (!cacheSiteService.updateById(cacheSite)) {
throw new CoolException("缂撳瓨绔欐洿鏂板け璐�");
@@ -1222,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));
@@ -1251,11 +1260,14 @@
if (!locDetlService.updateById(locDetl)) {
throw new CoolException("搴撳瓨鍔犻攣澶辫触锛侊紒");
}
-
});
- });
+ curLoc.setLocStsId(LocStsType.R.val());
+ if (!locService.updateById(curLoc)) {
+ throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ });
}
/**
@@ -1275,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("璁㈠崟鍙傛暟涓嶈兘涓虹┖");
@@ -1436,15 +1443,15 @@
}
CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, order.getId()));
- if (cacheSite == null) {
- throw new CoolException("缂撳瓨绔欎笉瀛樺湪");
- }
- cacheSite.setSiteStatus(CacheSiteStatusType.O.id);
- cacheSite.setOrderId(null);
- cacheSite.setOrderNo(null);
- cacheSite.setUpdateTime(new Date());
- if (!cacheSiteService.updateById(cacheSite)) {
- throw new CoolException("缂撳瓨绔欐竻绌哄け璐�");
+ if (cacheSite != null) {
+ cacheSite.setSiteStatus(CacheSiteStatusType.O.id);
+ cacheSite.setOrderId(null);
+ cacheSite.setOrderNo(null);
+ cacheSite.setBarcode(null);
+ cacheSite.setUpdateTime(new Date());
+ if (!cacheSiteService.updateById(cacheSite)) {
+ throw new CoolException("缂撳瓨绔欐竻绌哄け璐�");
+ }
}
}
@@ -1453,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());
+ outMergeParam.setLocNo(outLocDetl.getLocNo());
+ outMergeParam.setLocDetlId(detl.getId());
+ outMergeParam.setLocId(detl.getLocId());
+ outMergeParam.setMatnr(outLocDetl.getMatnr());
+ outMergeParam.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