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 | 390 +++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 332 insertions(+), 58 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 e5e77a4..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,15 +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.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;
@@ -25,7 +25,6 @@
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
/**
* 鍑哄簱绠$悊
@@ -533,6 +532,12 @@
return mergePreviewDtos;
}
+ /**
+ * 娉㈡鍑哄簱棰勮
+ *
+ * @param param
+ * @return
+ */
@Transactional(rollbackFor = Exception.class)
public List<MergePreviewResultDto> orderOutMergeLocPreview(List<MergePreviewDto> param) {
if (param == null) {
@@ -555,15 +560,20 @@
List<MergePreviewResultDto> resultDtos = new ArrayList<>();
//浼樺厛鏌ヨ骞冲簱鏁版嵁
param.forEach(pars -> {
+ if (pars.getStatus() == 1) {
+ return;
+ }
List<MergePreviewResultLocDto> locDtos = new ArrayList<>();
MergePreviewResultDto resultDto = new MergePreviewResultDto();
resultDto.sync(pars);
resultDto.setOrderIds(pars.getOrderIds());
+ //鎬婚渶姹傛暟閲�
+ resultDto.setAnfme(pars.getAnfme());
resultDto.setLocs(locDtos);
-
+ //鏌ヨ骞冲簱涓鍚堟潯浠剁殑搴撳瓨
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) {
@@ -578,44 +588,61 @@
locDto.setLocNo(detl.getLocNo());
locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id);
locDto.setLocDetlId(detl.getId());
-
+ locDto.setAnfme(detl.getAnfme() - detl.getWorkQty());
+ 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;
+ }
//娉㈡鏁伴噺鍑忓幓搴撲綅鍙敤鏁伴噺鍚庯紝鐩堜綑鏁伴噺
- anfme = anfme - surplusQty;
- if (anfme > 0) {
- locDto.setAnfme(detl.getAnfme());
- locDto.setWorkQty(surplusQty);
+ anfme = Math.round((anfme - surplusQty) * 10000) / 10000.0;
+ if (anfme.compareTo(0.0) > 0) {
+ //褰撳墠鍙娇鐢ㄦ暟閲�
+ resultDto.setFetchQty(surplusQty);
+ //浣欎笅闇�姹傛暟閲�
+ pars.setStatus(2);
+ pars.setWorkQty(pars.getWorkQty() + surplusQty);
+ pars.setAnfme(anfme);
} else {
- locDto.setAnfme(pars.getAnfme() - pars.getWorkQty());
- locDto.setWorkQty(pars.getAnfme() - pars.getWorkQty());
+ //褰撳墠浣跨敤鏁伴噺
+ resultDto.setFetchQty(pars.getAnfme());
+ //浣欎笅闇�姹�
+ pars.setWorkQty(pars.getWorkQty() + pars.getAnfme());
+ pars.setStatus(1);
+ pars.setAnfme(0.0);
break;
}
}
- //淇濆瓨鍑哄簱鏁伴噺锛堝钩搴擄級
- pars.setWorkQty(pars.getAnfme() - pars.getWorkQty() - anfme);
- resultDto.setOtherLocs(new ArrayList<>());
+ if (!Objects.isNull(resultDto.getFetchQty()) && !(new BigDecimal(resultDto.getFetchQty()).compareTo(new BigDecimal("0.00")) == 0)) {
+ resultDto.setOtherLocs(new ArrayList<>());
- resultDto.setAnfme(pars.getAnfme());
+ resultDto.setType(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.desc);
- resultDtos.add(resultDto);
-
+ resultDtos.add(resultDto);
+ }
}
});
+
//骞冲簱鏌ヨ瀹屾垚鍚庯紝鍐嶆煡璇CU
for (MergePreviewDto dto : param) {
- Double anfme = dto.getAnfme() - dto.getWorkQty();
- //鍑忓幓骞冲簱鏁伴噺鍚庯紝灏忎簬绛変簬0锛岃烦鍑哄鐞�
- if (anfme <= 0) {
+ //鍗曟嵁宸插畬鎴愶紝璺冲嚭
+ if (dto.getStatus() == 1) {
continue;
}
+// Double anfme = dto.getAnfme() - dto.getWorkQty();
+// //鍑忓幓骞冲簱鏁伴噺鍚庯紝灏忎簬绛変簬0锛岃烦鍑哄鐞�
+// if (anfme <= 0) {
+// continue;
+// }
List<LocDetl> locDetls = locDetlService.queryStock(dto.getMatnr(), dto.getBatch(), dto.getFieldParams(), sortParams);
if (locDetls.isEmpty()) {
MergePreviewResultDto resultDto = new MergePreviewResultDto();
resultDto.sync(dto);
resultDto.setLocs(new ArrayList<>());
+ resultDto.setType(LocAreaTypeSts.LOC_AREA_TYPE_UTC.desc);
resultDto.setOrderIds(dto.getOrderIds());
resultDto.setAnfme(dto.getAnfme());
resultDtos.add(resultDto);
@@ -627,7 +654,7 @@
MergePreviewResultDto resultDto = new MergePreviewResultDto();
resultDto.sync(dto);
resultDto.setOrderIds(dto.getOrderIds());
-// Double anfme = dto.getAnfme();
+ Double anfme = dto.getAnfme();
resultDto.setLocs(locDtos);
for (LocDetl locDetl : locDetls) {
Loc loc = locService.getById(locDetl.getLocId());
@@ -675,6 +702,8 @@
resultDto.setOtherLocs(otherLocDtos);
resultDto.setAnfme(dto.getAnfme());
+
+ resultDto.setType(LocAreaTypeSts.LOC_AREA_TYPE_UTC.desc);
resultDtos.add(resultDto);
}
@@ -914,9 +943,9 @@
/**
* 娉㈡鍚堝苟鍑哄簱
- * 1. 鍒ゆ柇鏄钩搴撹繕TCU搴�
+ * 1. 鍒ゆ柇鏄钩搴撹繕CTU搴�
* 2. 骞冲簱鐢熸垚鎷h揣鍗�
- * 3. TCU搴撶敓鎴愪换鍔″崟
+ * 3. CTU搴撶敓鎴愪换鍔″崟
*/
outStockByArea(dto, wave);
@@ -995,12 +1024,13 @@
}
/**
- * 鏍规嵁涓嶅悓搴撲綅绫诲瀷鐢熸垚鍑哄簱鎷e崟鍙奀TU浠诲姟妗�
+ * 鏍规嵁涓嶅悓搴撲綅绫诲瀷鐢熸垚鍑哄簱鎷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("鍙傛暟涓嶈兘涓虹┖");
@@ -1008,14 +1038,13 @@
//骞冲簱鏁版嵁婧�
List<OrderOutMergeParam> flatOrders = new ArrayList<>();// listMap.get(LocAreaTypeSts.LOC_AREA_TYPE_FLAT);
- //TUC鏁版嵁婧�
+ //CTU鏁版嵁婧�
List<OrderOutMergeParam> tucOrders = new ArrayList<>();//listMap.get(LocAreaTypeSts.LOC_AREA_TYPE_UTC);
//鎸夊簱浣嶇被鍨嬪垎绫�
- //fixme 濡傛灉搴撳瓨涓嶈冻鏃讹紝鐢熸垚浠诲姟妗� 杩囨护鎺夋病鏈夊簱浣嶄俊鎭殑鏁版嵁銆傛壘鍚涙澃纭
List<OrderOutMergeParam> mergeParam = params.stream().filter(par -> {
return !StringUtils.isNullOrEmpty(par.getLocNo());
}).collect(Collectors.toList());
- //鏁版嵁鍒嗙被 1.骞冲簱鏁版嵁 2. TUC鏁版嵁
+ //鏁版嵁鍒嗙被 1.骞冲簱鏁版嵁 2. CTU鏁版嵁
Map<Long, List<OrderOutMergeParam>> listMap = mergeParam.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getTypeId));
listMap.keySet().forEach(key -> {
@@ -1029,22 +1058,19 @@
//骞冲簱鍑哄簱
outStockByFlat(flatOrders, wave);
}
-
if (!tucOrders.isEmpty()) {
- //TUC鍑哄簱
- outStockByTUC(tucOrders, wave);
+ //CTU鍑哄簱
+ outStockByCTU(tucOrders, wave);
}
-
-
}
/**
- * TUC鍑哄簱--鐢熸垚鍑哄簱浠诲姟妗�
+ * CTU鍑哄簱--鐢熸垚鍑哄簱浠诲姟妗�
*
* @param tucOrders
* @param wave
*/
- private void outStockByTUC(List<OrderOutMergeParam> tucOrders, Wave wave) {//123
+ 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()) {
@@ -1084,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) {
@@ -1118,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());
@@ -1128,6 +1162,38 @@
throw new CoolException("娉㈡鏁版嵁鏇存柊澶辫触");
}
}
+
+ List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveNo, wave.getWaveNo()));
+ 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()));
+//
+// if (cacheSites.isEmpty()) {
+// throw new CoolException("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�");
+// }
+//
+// if (cacheSites.size() < orders.size()) {
+// 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());
@@ -1172,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));
@@ -1198,10 +1276,17 @@
//閿佸畾搴撳瓨閲�
locDetl.setWorkQty(locDetl.getWorkQty() + outOder.getAnfme());
+ if (!locDetlService.updateById(locDetl)) {
+ throw new CoolException("搴撳瓨鍔犻攣澶辫触锛侊紒");
+ }
});
- });
+ curLoc.setLocStsId(LocStsType.R.val());
+ if (!locService.updateById(curLoc)) {
+ throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ });
}
/**
@@ -1221,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("璁㈠崟鍙傛暟涓嶈兘涓虹┖");
@@ -1338,7 +1418,7 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public void cancelWave(List<Long> waveIds) {
if (waveIds == null) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
@@ -1361,6 +1441,14 @@
throw new CoolException("宸插瓨鍦ㄤ换鍔★紝绂佹鍙栨秷娉㈡");
}
+ List<PickSheet> pickSheets = pickSheetService.list(new LambdaQueryWrapper<PickSheet>()
+ .eq(PickSheet::getWaveNo, wave.getWaveNo())
+ .eq(PickSheet::getDeleted, 0)
+ .eq(PickSheet::getStatus, 1));
+ if (!pickSheets.isEmpty()) {
+ throw new CoolException("褰撳墠娉㈡鏈夋嫞璐у崟瀛樺湪锛侊紒");
+ }
+
List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, wave.getId()));
for (Order order : orders) {
order.setWaveId(null);
@@ -1374,15 +1462,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("缂撳瓨绔欐竻绌哄け璐�");
+ }
}
}
@@ -1391,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