From 2191824072549f0da35d73686a075e59b0196321 Mon Sep 17 00:00:00 2001
From: ZY <zc857179121@qq.com>
Date: 星期三, 25 九月 2024 15:02:25 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/wms-dev' into wms-dev
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 373 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 349 insertions(+), 24 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 ba2a50e..96f79fb 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
@@ -4,8 +4,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.dto.*;
-import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
-import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
+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.*;
@@ -58,6 +58,10 @@
private WaveService waveService;
@Autowired
private WaveDetlService waveDetlService;
+ @Autowired
+ private CacheSiteService cacheSiteService;
+ @Autowired
+ private WaveSeedService waveSeedService;
/**
* 鍑哄簱
@@ -87,7 +91,7 @@
Task task = new Task();
task.setTaskNo(workService.generateTaskNo(1L));
- task.setTaskSts(101L);
+ task.setTaskSts(TaskStsType.GENERATE_OUT.id);
task.setTaskType(taskType);
task.setIoPri(workService.generateIoPri(taskType));
task.setOriginLoc(loc.getLocNo());
@@ -107,6 +111,7 @@
TaskDetl taskDetl = new TaskDetl();
taskDetl.sync(locDetl);
taskDetl.setTaskId(task.getId());
+ taskDetl.setTaskNo(task.getTaskNo());
taskDetl.setAnfme(detl.getAnfme());
taskDetl.setStock(detl.getStock());
taskDetl.setOrderId(null);
@@ -357,7 +362,7 @@
Task task = new Task();
task.setTaskNo(workService.generateTaskNo(taskType));
- task.setTaskSts(101L);
+ task.setTaskSts(TaskStsType.GENERATE_OUT.id);
task.setTaskType(taskType);
task.setIoPri(workService.generateIoPri(taskType));
task.setOriginLoc(loc.getLocNo());
@@ -384,6 +389,7 @@
taskDetl.sync(locDetl);
taskDetl.setId(null);
taskDetl.setTaskId(task.getId());
+ taskDetl.setTaskNo(task.getTaskNo());
taskDetl.setAnfme(dto.getAnfme());
taskDetl.setStock(locDetl.getAnfme());
taskDetl.setOrderId(orderDetl.getOrderId());
@@ -501,6 +507,12 @@
for (MergePreviewDto dto : param) {
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.setOrderIds(dto.getOrderIds());
+ resultDto.setAnfme(dto.getAnfme());
+ resultDtos.add(resultDto);
continue;
}
@@ -513,6 +525,15 @@
Double anfme = dto.getAnfme();
for (LocDetl locDetl : locDetls) {
+ Loc loc = locService.getById(locDetl.getLocId());
+ if (loc == null) {
+ throw new CoolException("搴撲綅鏁版嵁涓嶅瓨鍦�");
+ }
+
+ if (loc.getLocStsId() != LocStsType.F.val()) {
+ continue;
+ }
+
MergePreviewResultLocDto locDto = new MergePreviewResultLocDto();
locDto.setLocId(locDetl.getLocId());
locDto.setLocNo(locDetl.getLocNo());
@@ -526,7 +547,28 @@
locDto.setAnfme(locDetl.getAnfme());
anfme -= locDetl.getAnfme();
}
- resultDto.setAnfme(anfme < 0 ? 0 : anfme);
+
+ List<MergePreviewResultLocDto> otherLocDtos = new ArrayList<>();
+ for (LocDetl locDetl : locDetls) {
+ Loc loc = locService.getById(locDetl.getLocId());
+ if (loc == null) {
+ throw new CoolException("搴撲綅鏁版嵁涓嶅瓨鍦�");
+ }
+
+ if (loc.getLocStsId() != LocStsType.F.val()) {
+ continue;
+ }
+
+ MergePreviewResultLocDto locDto = new MergePreviewResultLocDto();
+ locDto.setLocId(locDetl.getLocId());
+ locDto.setLocNo(locDetl.getLocNo());
+ locDto.setLocDetlId(locDetl.getId());
+ locDto.setAnfme(locDetl.getAnfme());
+ otherLocDtos.add(locDto);
+ }
+ resultDto.setOtherLocs(otherLocDtos);
+
+ resultDto.setAnfme(dto.getAnfme());
resultDtos.add(resultDto);
}
@@ -535,10 +577,12 @@
}
@Transactional
- public void orderOutMerge(List<OrderOutMergeParam> params) {
- if(params == null){
+ public void orderOutMerge(OrderOutMergeParamDto dto) {
+ if(dto == null){
throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
}
+
+ List<OrderOutMergeParam> params = dto.getList();
if (params.isEmpty()) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
@@ -645,6 +689,7 @@
map.put(orderOutMergeDto.getLocId(), list);
}
+ List<TaskDetl> taskDetls = new ArrayList<>();
for (Map.Entry<Long, List<OrderOutMergeDto>> entry : map.entrySet()) {
Long locId = entry.getKey();
List<OrderOutMergeDto> list = entry.getValue();
@@ -670,7 +715,7 @@
Task task = new Task();
task.setTaskNo(workService.generateTaskNo(taskType));
- task.setTaskSts(101L);
+ task.setTaskSts(TaskStsType.GENERATE_OUT.id);
task.setTaskType(taskType);
task.setIoPri(workService.generateIoPri(taskType));
task.setOriginLoc(loc.getLocNo());
@@ -696,6 +741,7 @@
taskDetl.sync(locDetl);
taskDetl.setId(null);
taskDetl.setTaskId(task.getId());
+ taskDetl.setTaskNo(task.getTaskNo());
taskDetl.setAnfme(merge.getAnfme());
taskDetl.setStock(locDetl.getAnfme());
taskDetl.setOrderId(orderDetl.getOrderId());
@@ -716,6 +762,8 @@
throw new CoolException("鏄庣粏鎵╁睍鐢熸垚澶辫触");
}
}
+
+ taskDetls.add(taskDetl);
}
//搴撲綅F => R
@@ -728,17 +776,220 @@
}
-
}
@Transactional
- public void generateWave(List<Long> orderIds) {
- if (orderIds == null) {
+ public void orderOutMergeWave(OrderOutMergeParamDto dto) {
+ if(dto == null){
throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
}
- if (orderIds.isEmpty()) {
+ if (dto.getWaveId() == null) {
+ throw new CoolException("鏈敓鎴愭尝娆�");
+ }
+
+ List<OrderOutMergeParam> params = dto.getList();
+
+ if (params.isEmpty()) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
+ }
+
+ Long waveId = dto.getWaveId();
+
+ List<Long> filterParamsList = new ArrayList<>();
+ List<OrderOutMergeParam> filterParams = new ArrayList<>();
+ for (OrderOutMergeParam param : params) {
+ if (param.getLocId() == null) {
+ continue;
+ }
+
+ if(!filterParamsList.contains(param.getLocId())){
+ filterParamsList.add(param.getLocId());
+ filterParams.add(param);
+ }
+ }
+
+ HashMap<String, Double> stockMap = new HashMap<>();
+ for (OrderOutMergeParam param : filterParams) {
+ String matUniqueKey = Utils.getMatUniqueKey(param.getMatnr(), param.getBatch(), param.getFieldParams());
+ WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, waveId));
+ if(waveDetl == null){
+ throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦�");
+ }
+
+ double issued = Optional.of(waveDetl.getAnfme() - waveDetl.getWorkQty()).orElse(0.0D);
+ if(!stockMap.containsKey(matUniqueKey)){
+ stockMap.put(matUniqueKey, issued);
+ }
+ }
+
+ HashMap<Long, List<OrderOutMergeDto>> map = new HashMap<>();
+ for (OrderOutMergeParam param : filterParams) {
+ LocDetl locDetl = locDetlService.getById(param.getLocDetlId());
+ if(locDetl == null) {
+ continue;
+ }
+
+ if (locDetl.getAnfme() - param.getAnfme() < 0) {
+ continue;
+ }
+
+ OrderOutMergeDto orderOutMergeDto = new OrderOutMergeDto();
+ orderOutMergeDto.sync(param);
+
+ String matUniqueKey = Utils.getMatUniqueKey(param.getMatnr(), param.getBatch(), param.getFieldParams());
+ Double issued = stockMap.get(matUniqueKey);
+ if (issued - orderOutMergeDto.getAnfme() < 0) {
+ orderOutMergeDto.setAnfme(issued);
+ issued = 0D;
+ }else {
+ issued -= orderOutMergeDto.getAnfme();
+ }
+ stockMap.put(matUniqueKey, issued);
+
+ List<OrderOutMergeDto> list = null;
+ if (map.containsKey(orderOutMergeDto.getLocId())) {
+ list = map.get(orderOutMergeDto.getLocId());
+ }else {
+ list = new ArrayList<>();
+ }
+ list.add(orderOutMergeDto);
+ map.put(orderOutMergeDto.getLocId(), list);
+ }
+
+ for (Map.Entry<Long, List<OrderOutMergeDto>> entry : map.entrySet()) {
+ Long locId = entry.getKey();
+ List<OrderOutMergeDto> list = entry.getValue();
+ Boolean all = outUtils.isAllForMerge(locId, list);
+ OrderOutMergeDto param = list.get(0);
+ Long operationPortId = param.getOperationPort();
+
+ 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.getById(operationPortId);
+ if (operationPort == null) {
+ throw new CoolException("浣滀笟鍙d笉瀛樺湪");
+ }
+
+ 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.setWaveId(waveId);
+ 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("鏄庣粏鎵╁睍鐢熸垚澶辫触");
+ }
+ }
+
+ String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField());
+ WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, waveId));
+ if (waveDetl == null) {
+ throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦�");
+ }
+ waveDetl.setWorkQty(waveDetl.getWorkQty() + taskDetl.getAnfme());
+ waveDetl.setUpdateTime(new Date());
+ if (!waveDetlService.updateById(waveDetl)) {
+ throw new CoolException("娉㈡鏁版嵁鏇存柊澶辫触");
+ }
+
+ }
+
+ //搴撲綅F => R
+ loc.setLocStsId(LocStsType.R.val());
+ loc.setUpdateTime(new Date());
+ boolean locUpdate = locService.updateById(loc);
+ if(!locUpdate){
+ throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐�");
+ }
+
+ }
+
+ Wave wave = waveService.getById(waveId);
+ if (wave == null) {
+ throw new CoolException("娉㈡涓嶅瓨鍦�");
+ }
+
+ wave.setWaveStatus(WaveStatusType.GENERATE.id);
+ wave.setUpdateTime(new Date());
+ if (!waveService.updateById(wave)) {
+ throw new CoolException("娉㈡鏇存柊澶辫触");
+ }
+ }
+
+ @Transactional
+ public void generateWave(GenerateWaveParam param) {
+ 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("璁㈠崟鍙傛暟涓嶈兘涓虹┖");
+ }
+
+ if (orderIds.isEmpty()) {
+ throw new CoolException("璁㈠崟鍙傛暟涓嶈兘涓虹┖");
}
List<Order> orderList = orderService.listByIds(orderIds);
@@ -756,26 +1007,77 @@
Wave wave = new Wave();
wave.setWaveNo(waveNo);
wave.setWaveType(0);
+ wave.setWaveStatus(WaveStatusType.INIT.id);
if (!waveService.save(wave)) {
throw new CoolException("娉㈡鐢熸垚澶辫触");
}
+ HashMap<String, List<OrderDetl>> map = new HashMap<>();
for (Order order : orderList) {
- WaveDetl waveDetl = new WaveDetl();
- waveDetl.setWaveNo(waveNo);
- waveDetl.setWaveId(wave.getId());
- waveDetl.setOrderId(order.getId());
- waveDetl.setOrderNo(order.getOrderNo());
- if (!waveDetlService.save(waveDetl)) {
- throw new CoolException("娉㈡鏄庣粏鐢熸垚澶辫触");
+ List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId, order.getId()));
+ for (OrderDetl orderDetl : orderDetls) {
+ List<OrderDetl> list = map.get(orderDetl.getStockIndex());
+ if (list == null) {
+ list = new ArrayList<>();
+ }
+ list.add(orderDetl);
+ map.put(orderDetl.getStockIndex(), list);
}
+ order.setOrderSettle(OrderSettleType.WAVE.val());
order.setWaveId(wave.getId());
order.setWaveNo(waveNo);
+ order.setHasWave(1);
order.setUpdateTime(new Date());
if (!orderService.updateById(order)) {
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()) {
+ String stockIndex = entry.getKey();
+ List<OrderDetl> orderDetls = entry.getValue();
+ Double anfme = 0D;
+ Long matId = null;
+ String matnr = null;
+ String batch = null;
+ List<FieldParam> uniqueField = null;
+ for (OrderDetl orderDetl : orderDetls) {
+ anfme += orderDetl.getAnfme();
+ matId = orderDetl.getMatId();
+ matnr = orderDetl.getMat$().getMatnr();
+ batch = orderDetl.getBatch();
+ uniqueField = orderDetl.getUniqueField();
+ }
+
+ WaveDetl waveDetl = new WaveDetl();
+ waveDetl.setWaveNo(waveNo);
+ waveDetl.setWaveId(wave.getId());
+ waveDetl.setStockIndex(stockIndex);
+ waveDetl.setMatId(matId);
+ waveDetl.setMatnr(matnr);
+ waveDetl.setBatch(batch);
+ waveDetl.setAnfme(anfme);
+ waveDetl.setWorkQty(0D);
+ waveDetl.setFieldParams(JSON.toJSONString(uniqueField));
+ if (!waveDetlService.save(waveDetl)) {
+ throw new CoolException("娉㈡鏄庣粏鐢熸垚澶辫触");
+ }
+
}
}
@@ -798,11 +1100,34 @@
for (Wave wave : waves) {
List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId()));
for (WaveDetl waveDetl : waveDetls) {
- Order order = orderService.getById(waveDetl.getOrderId());
- order.setWaveId(null);
- order.setWaveNo(null);
- if (!orderService.updateById(order)) {
- throw new CoolException("璁㈠崟鍙嶅啓澶辫触");
+ long count = taskDetlService.count(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getWaveId, wave.getId()));
+ if (count > 0) {
+ throw new CoolException("宸插瓨鍦ㄤ换鍔★紝绂佹鍙栨秷娉㈡");
+ }
+
+ List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, wave.getId()));
+ for (Order order : orders) {
+ order.setWaveId(null);
+ order.setWaveNo(null);
+ order.setHasWave(0);
+ if(order.getOrderSettle().equals(OrderSettleType.WAVE.val())){
+ order.setOrderSettle(OrderSettleType.WAIT.val());
+ }
+ if (!orderService.updateById(order)) {
+ throw new CoolException("璁㈠崟鍙嶅啓澶辫触");
+ }
+
+ 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("缂撳瓨绔欐竻绌哄け璐�");
+ }
}
waveDetlService.removeById(waveDetl.getId());
--
Gitblit v1.9.1