From d52bab61f91056e75e60ddeda76a72cd1bd63615 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 07 八月 2025 14:40:00 +0800
Subject: [PATCH] no message
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 304 +++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 260 insertions(+), 44 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 2f98da3..a0f6a43 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.*;
@@ -530,6 +532,12 @@
return mergePreviewDtos;
}
+ /**
+ * 娉㈡鍑哄簱棰勮
+ *
+ * @param param
+ * @return
+ */
@Transactional(rollbackFor = Exception.class)
public List<MergePreviewResultDto> orderOutMergeLocPreview(List<MergePreviewDto> param) {
if (param == null) {
@@ -565,7 +573,7 @@
//鏌ヨ骞冲簱涓鍚堟潯浠剁殑搴撳瓨
List<LocDetl> locs = locDetlService.queryFlatStock(pars.getMatnr(), pars.getBatch(), pars.getFieldParams());
if (!locs.isEmpty()) {
- double anfme = pars.getAnfme() - pars.getWorkQty();
+ Double anfme = pars.getAnfme() - pars.getWorkQty();
for (LocDetl detl : locs) {
Loc loc = locService.getById(detl.getLocId());
if (loc == null) {
@@ -580,7 +588,7 @@
locDto.setLocNo(detl.getLocNo());
locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id);
locDto.setLocDetlId(detl.getId());
- locDto.setAnfme(detl.getAnfme());
+ locDto.setAnfme(detl.getAnfme() - detl.getWorkQty());
locDto.setWorkQty(detl.getWorkQty());
locDtos.add(locDto);
//搴撲綅瀹為檯鍙敤鏁伴噺
@@ -589,8 +597,8 @@
continue;
}
//娉㈡鏁伴噺鍑忓幓搴撲綅鍙敤鏁伴噺鍚庯紝鐩堜綑鏁伴噺
- anfme = anfme - surplusQty;
- if (anfme > 0) {
+ anfme = Math.round((anfme - surplusQty) * 10000) / 10000.0;
+ if (anfme.compareTo(0.0) > 0) {
//褰撳墠鍙娇鐢ㄦ暟閲�
resultDto.setFetchQty(surplusQty);
//浣欎笅闇�姹傛暟閲�
@@ -935,9 +943,9 @@
/**
* 娉㈡鍚堝苟鍑哄簱
- * 1. 鍒ゆ柇鏄钩搴撹繕TCU搴�
+ * 1. 鍒ゆ柇鏄钩搴撹繕CTU搴�
* 2. 骞冲簱鐢熸垚鎷h揣鍗�
- * 3. TCU搴撶敓鎴愪换鍔″崟
+ * 3. CTU搴撶敓鎴愪换鍔″崟
*/
outStockByArea(dto, wave);
@@ -1019,9 +1027,10 @@
* 鏍规嵁涓嶅悓搴撲綅绫诲瀷鐢熸垚鍑哄簱鎷h揣鍗曟垨CTU浠诲姟妗�
*
* @param dto
- * @param wave
+ * @param
*/
- private void outStockByArea(OrderOutMergeParamDto dto, Wave wave) {
+ @Transactional(rollbackFor = Exception.class)
+ public void outStockByArea(OrderOutMergeParamDto dto, Wave wave) {
List<OrderOutMergeParam> params = dto.getList();
if (params.isEmpty()) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
@@ -1048,13 +1057,11 @@
if (!flatOrders.isEmpty()) {
//骞冲簱鍑哄簱
outStockByFlat(flatOrders, wave);
- } else if (!tucOrders.isEmpty()) {
- //CTU鍑哄簱
- outStockByTUC(tucOrders, wave);
- } else {
- throw new CoolException("搴撳瓨涓嶈冻");
}
-
+ if (!tucOrders.isEmpty()) {
+ //CTU鍑哄簱
+ outStockByCTU(tucOrders, wave);
+ }
}
/**
@@ -1063,7 +1070,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()) {
@@ -1103,6 +1110,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) {
@@ -1137,9 +1149,12 @@
}
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()));
+ logger.error("Matnr------>{}", taskDetl.getMatnr());
+ WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>()
+ .eq(WaveDetl::getStockIndex, matUniqueKey)
+ .eq(WaveDetl::getWaveId, wave.getId()));
if (waveDetl == null) {
- throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦�");
+ throw new CoolException("waveId:" + wave.getId() + "鐗╂枡锛�" + taskDetl.getMatnr() + "娉㈡鏁版嵁涓嶅瓨鍦�");
}
waveDetl.setWorkQty(waveDetl.getWorkQty() + taskDetl.getAnfme());
waveDetl.setUpdateTime(new Date());
@@ -1153,28 +1168,32 @@
throw new CoolException("褰撳墠娉㈡璁㈠崟涓嶅瓨鍦紒锛�");
}
- 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("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�");
- }
- if (cacheSites.size() < orders.size()) {
- throw new CoolException("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�");
- }
+// 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("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�");
+// }
+//
+// if (cacheSites.size() < orders.size()) {
+// throw new CoolException("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�");
+// }
- for (int i = 0; i < orders.size(); i++) {
- CacheSite cacheSite = cacheSites.get(i);
- 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("缂撳瓨绔欐洿鏂板け璐�");
- }
- }
+// for (int i = 0; i < orders.size(); i++) {
+// CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orders.get(i).getId()));
+// if (Objects.isNull(cacheSite)) {
+// 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("缂撳瓨绔欐洿鏂板け璐�");
+// }
+// }
+// }
//搴撲綅F => R
loc.setLocStsId(LocStsType.R.val());
@@ -1219,6 +1238,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));
@@ -1248,11 +1279,14 @@
if (!locDetlService.updateById(locDetl)) {
throw new CoolException("搴撳瓨鍔犻攣澶辫触锛侊紒");
}
-
});
- });
+ curLoc.setLocStsId(LocStsType.R.val());
+ if (!locService.updateById(curLoc)) {
+ throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ });
}
/**
@@ -1272,24 +1306,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("璁㈠崟鍙傛暟涓嶈兘涓虹┖");
@@ -1437,6 +1466,7 @@
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("缂撳瓨绔欐竻绌哄け璐�");
@@ -1449,7 +1479,193 @@
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::getMatId, locDetl.getMatId())
+ .eq(LocDetl::getBatch, locDetl.getBatch())
+ .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