From bb28c2f09f7fa36b8b80f9d19f23631623b80d1c Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期六, 01 三月 2025 16:59:46 +0800
Subject: [PATCH] #
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 171 ++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 116 insertions(+), 55 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 6a4b7d9..b1d6fe3 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,8 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
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.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.dto.*;
import com.zy.asrs.wms.asrs.entity.dto.OrderOutMergeDto;
@@ -21,9 +23,11 @@
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;
/**
* 鍑哄簱绠$悊
@@ -551,14 +555,19 @@
sortParams.add(sortParam);
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();
@@ -576,50 +585,61 @@
locDto.setLocNo(detl.getLocNo());
locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id);
locDto.setLocDetlId(detl.getId());
-
+ locDto.setAnfme(detl.getAnfme());
+ locDto.setWorkQty(detl.getWorkQty());
locDtos.add(locDto);
//搴撲綅瀹為檯鍙敤鏁伴噺
double surplusQty = detl.getAnfme() - detl.getWorkQty();
+ if (surplusQty <= 0) {
+ continue;
+ }
//娉㈡鏁伴噺鍑忓幓搴撲綅鍙敤鏁伴噺鍚庯紝鐩堜綑鏁伴噺
anfme = anfme - surplusQty;
if (anfme > 0) {
- locDto.setAnfme(detl.getAnfme());
- locDto.setWorkQty(surplusQty);
+ //褰撳墠鍙娇鐢ㄦ暟閲�
+ 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);
-
- } else {
- resultDto.sync(pars);
- resultDto.setLocs(new ArrayList<>());
- resultDto.setOrderIds(pars.getOrderIds());
- resultDto.setAnfme(pars.getAnfme());
- 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);
@@ -631,7 +651,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());
@@ -647,7 +667,7 @@
locDto.setLocId(locDetl.getLocId());
locDto.setLocNo(locDetl.getLocNo());
locDto.setLocDetlId(locDetl.getId());
-
+ locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_UTC.id);
locDtos.add(locDto);
if (anfme - locDetl.getAnfme() < 0) {
locDto.setAnfme(anfme);
@@ -671,6 +691,7 @@
MergePreviewResultLocDto locDto = new MergePreviewResultLocDto();
locDto.setLocId(locDetl.getLocId());
locDto.setLocNo(locDetl.getLocNo());
+ locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_UTC.id);
locDto.setLocDetlId(locDetl.getId());
locDto.setAnfme(locDetl.getAnfme());
otherLocDtos.add(locDto);
@@ -678,6 +699,8 @@
resultDto.setOtherLocs(otherLocDtos);
resultDto.setAnfme(dto.getAnfme());
+
+ resultDto.setType(LocAreaTypeSts.LOC_AREA_TYPE_UTC.desc);
resultDtos.add(resultDto);
}
@@ -998,7 +1021,7 @@
}
/**
- * 鏍规嵁涓嶅悓搴撲綅绫诲瀷鐢熸垚鍑哄簱鎷e崟鍙奣UC浠诲姟妗�
+ * 鏍规嵁涓嶅悓搴撲綅绫诲瀷鐢熸垚鍑哄簱鎷h揣鍗曟垨CTU浠诲姟妗�
*
* @param dto
* @param wave
@@ -1011,12 +1034,15 @@
//骞冲簱鏁版嵁婧�
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);
//鎸夊簱浣嶇被鍨嬪垎绫�
- Map<Long, List<OrderOutMergeParam>> listMap = params.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getTypeId));
+ List<OrderOutMergeParam> mergeParam = params.stream().filter(par -> {
+ return !StringUtils.isNullOrEmpty(par.getLocNo());
+ }).collect(Collectors.toList());
+ //鏁版嵁鍒嗙被 1.骞冲簱鏁版嵁 2. CTU鏁版嵁
+ Map<Long, List<OrderOutMergeParam>> listMap = mergeParam.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getTypeId));
- //鏁版嵁鍒嗙被 1.骞冲簱鏁版嵁 2. TUC鏁版嵁
listMap.keySet().forEach(key -> {
if (key == LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id) {
flatOrders.addAll(listMap.get(key));
@@ -1030,24 +1056,21 @@
}
if (!tucOrders.isEmpty()) {
- //TUC鍑哄簱
+ //CTU鍑哄簱
outStockByTUC(tucOrders, wave);
}
-
}
/**
- * TUC鍑哄簱--鐢熸垚鍑哄簱浠诲姟妗�
+ * CTU鍑哄簱--鐢熸垚鍑哄簱浠诲姟妗�
*
* @param tucOrders
* @param wave
*/
- private void outStockByTUC(List<OrderOutMergeParam> tucOrders, Wave wave) {//123
+ private void outStockByTUC(List<OrderOutMergeParam> tucOrders, Wave wave) {
Map<Long, List<OrderOutMergeDto>> map = checkLoc(tucOrders, wave);
- if (!Objects.isNull(map)) {
- return;
- }
+
for (Map.Entry<Long, List<OrderOutMergeDto>> entry : map.entrySet()) {
Long locId = entry.getKey();
List<OrderOutMergeDto> list = entry.getValue();
@@ -1130,6 +1153,32 @@
}
}
+ 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).orderByAsc(CacheSite::getChannel));
+
+ 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.setUpdateTime(new Date());
+ if (!cacheSiteService.updateById(cacheSite)) {
+ throw new CoolException("缂撳瓨绔欐洿鏂板け璐�");
+ }
+ }
+
//搴撲綅F => R
loc.setLocStsId(LocStsType.R.val());
loc.setUpdateTime(new Date());
@@ -1199,6 +1248,10 @@
//閿佸畾搴撳瓨閲�
locDetl.setWorkQty(locDetl.getWorkQty() + outOder.getAnfme());
+ if (!locDetlService.updateById(locDetl)) {
+ throw new CoolException("搴撳瓨鍔犻攣澶辫触锛侊紒");
+ }
+
});
});
@@ -1232,12 +1285,12 @@
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 + "閫氶亾宸茬粡鍒嗛厤娉㈡");
- }
- }
+// 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();
@@ -1290,19 +1343,19 @@
throw new CoolException("璁㈠崟鍙嶅啓娉㈡澶辫触");
}
- List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).in(CacheSite::getChannel, channels).orderBy(true, true, CacheSite::getChannel));
- if (cacheSites.isEmpty()) {
- throw new CoolException("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�");
- }
-
- CacheSite cacheSite = cacheSites.get(0);
- cacheSite.setOrderId(order.getId());
- cacheSite.setOrderNo(order.getOrderNo());
- cacheSite.setSiteStatus(CacheSiteStatusType.R.id);
- cacheSite.setUpdateTime(new Date());
- if (!cacheSiteService.updateById(cacheSite)) {
- throw new CoolException("缂撳瓨绔欐洿鏂板け璐�");
- }
+// List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).in(CacheSite::getChannel, channels).orderBy(true, true, CacheSite::getChannel));
+// if (cacheSites.isEmpty()) {
+// throw new CoolException("缂撳瓨绔欑┖闂翠笉瓒筹紝璇风◢鍚庡啀璇�");
+// }
+//
+// CacheSite cacheSite = cacheSites.get(0);
+// cacheSite.setOrderId(order.getId());
+// cacheSite.setOrderNo(order.getOrderNo());
+// cacheSite.setSiteStatus(CacheSiteStatusType.R.id);
+// cacheSite.setUpdateTime(new Date());
+// if (!cacheSiteService.updateById(cacheSite)) {
+// throw new CoolException("缂撳瓨绔欐洿鏂板け璐�");
+// }
}
for (Map.Entry<String, List<OrderDetl>> entry : map.entrySet()) {
@@ -1339,7 +1392,7 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public void cancelWave(List<Long> waveIds) {
if (waveIds == null) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
@@ -1362,6 +1415,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);
--
Gitblit v1.9.1