PDA入库[收货,上架修改]
This commit is contained in:
+89
-12
@@ -3,6 +3,7 @@ package com.mhd.wms.domain.stockOutTaskOrder.service;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.mhd.common.core.exception.ServiceException;
|
||||
@@ -37,6 +38,7 @@ import com.mhd.wms.domain.stockOutTaskOrder.repository.po.StockOutTaskOrderPO;
|
||||
import com.mhd.wms.domain.stockOutTaskOrder.repository.po.TaskMaterialPO;
|
||||
import com.mhd.wms.domain.stockOutTaskOrder.repository.po.TaskStoragePO;
|
||||
import com.mhd.wms.domain.stockOutTaskOrder.repository.todo.StockOutTaskOrderDO;
|
||||
import com.mhd.wms.domain.taskPickingMaterialDetail.entity.TaskPickingMaterialDetail;
|
||||
import com.mhd.wms.domain.taskPickingMaterialDetail.repository.facade.ITaskPickingMaterialDetailService;
|
||||
import com.mhd.wms.domain.taskPickingMaterialDetail.repository.po.TaskPickingMaterialDetailPO;
|
||||
import com.mhd.wms.domain.taskPickingMaterialDetail.repository.todo.TaskPickingMaterialDetailDO;
|
||||
@@ -96,9 +98,64 @@ public class StockOutTaskOrderDomainService {
|
||||
|
||||
/**
|
||||
* 分页查询拣货作业单列表
|
||||
* 列表返回前补充拣货进度:materialQuantity=拣货明细种类数,pickingMaterialQuantity=已完成种类数,用于显示 已完成数/总数
|
||||
*/
|
||||
public List<StockOutTaskOrderPO> queryList(StockOutTaskOrderDO stockOutTaskOrderDO) {
|
||||
return stockOutTaskOrderService.queryList(stockOutTaskOrderDO);
|
||||
List<StockOutTaskOrderPO> list = stockOutTaskOrderService.queryList(stockOutTaskOrderDO);
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
return list;
|
||||
}
|
||||
enrichListWithPickingProgress(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 为拣货作业单列表补充拣货进度(materialQuantity、pickingMaterialQuantity)
|
||||
*/
|
||||
private void enrichListWithPickingProgress(List<StockOutTaskOrderPO> list) {
|
||||
List<String> taskNumberList = list.stream()
|
||||
.map(StockOutTaskOrderPO::getTaskNumber)
|
||||
.filter(taskNumber -> taskNumber != null && !taskNumber.isEmpty())
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtil.isEmpty(taskNumberList)) {
|
||||
return;
|
||||
}
|
||||
List<TaskPickingMaterialDetail> detailList = taskPickingMaterialDetailService.list(
|
||||
new LambdaQueryWrapper<TaskPickingMaterialDetail>()
|
||||
.in(TaskPickingMaterialDetail::getTaskNumber, taskNumberList));
|
||||
if (CollectionUtils.isEmpty(detailList)) {
|
||||
return;
|
||||
}
|
||||
// 按 task_number -> material_base_info_id 分组,汇总 quantity、pickingQuantity
|
||||
Map<String, Map<Long, List<TaskPickingMaterialDetail>>> taskToMaterialMap = detailList.stream()
|
||||
.collect(Collectors.groupingBy(TaskPickingMaterialDetail::getTaskNumber,
|
||||
Collectors.groupingBy(TaskPickingMaterialDetail::getMaterialBaseInfoId)));
|
||||
for (StockOutTaskOrderPO po : list) {
|
||||
String taskNumber = po.getTaskNumber();
|
||||
if (taskNumber == null) {
|
||||
continue;
|
||||
}
|
||||
Map<Long, List<TaskPickingMaterialDetail>> materialMap = taskToMaterialMap.get(taskNumber);
|
||||
if (materialMap == null || materialMap.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
int totalMaterialQuantity = materialMap.size();
|
||||
int completedMaterialQuantity = 0;
|
||||
for (List<TaskPickingMaterialDetail> materialDetails : materialMap.values()) {
|
||||
BigDecimal quantity = BigDecimal.ZERO;
|
||||
BigDecimal pickingQuantity = BigDecimal.ZERO;
|
||||
for (TaskPickingMaterialDetail d : materialDetails) {
|
||||
quantity = quantity.add(d.getQuantity() != null ? d.getQuantity() : BigDecimal.ZERO);
|
||||
pickingQuantity = pickingQuantity.add(d.getPickingQuantity() != null ? d.getPickingQuantity() : BigDecimal.ZERO);
|
||||
}
|
||||
if (pickingQuantity.compareTo(quantity) >= 0 && quantity.compareTo(BigDecimal.ZERO) > 0) {
|
||||
completedMaterialQuantity++;
|
||||
}
|
||||
}
|
||||
po.setMaterialQuantity(totalMaterialQuantity);
|
||||
po.setPickingMaterialQuantity(completedMaterialQuantity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -160,6 +217,8 @@ public class StockOutTaskOrderDomainService {
|
||||
totalPickingMaterialQuantity += 1;
|
||||
}
|
||||
}
|
||||
// 拣货进度:已完成数/拣货明细总数(按物料分组)
|
||||
stockOutTaskOrderPO.setMaterialQuantity(taskPickingMaterialDetailPOMap.size());
|
||||
stockOutTaskOrderPO.setPickingMaterialQuantity(totalPickingMaterialQuantity);
|
||||
stockOutTaskOrderPO.setMaterialDetailList(taskPickingMaterialDetailPOList);
|
||||
return stockOutTaskOrderPO;
|
||||
@@ -180,22 +239,39 @@ public class StockOutTaskOrderDomainService {
|
||||
// .collect(Collectors.groupingBy(OutMaterialDetailSerialNumberPO::getMaterialDetailUniqueId));
|
||||
List<TaskPickingMaterialDetailPO> taskPickingMaterialDetailPOList = taskPickingMaterialDetailService.queryList(taskPickingMaterialDetailDO);
|
||||
Map<Long, List<TaskPickingMaterialDetailPO>> taskPickingMaterialDetailPOMap = taskPickingMaterialDetailPOList.stream().collect(Collectors.groupingBy(TaskPickingMaterialDetailPO::getStorageLocationId));
|
||||
int totalPickingMaterialQuantity = 0;//拣货单按库位分组 统计已拣货进度
|
||||
int totalPickingMaterialQuantity = 0;//拣货单按库位分组 统计已拣货进度(含已完成的库位)
|
||||
int totalStorageCount = taskPickingMaterialDetailPOMap.size();
|
||||
List<TaskStoragePO> taskStoragePOList = new ArrayList<>();
|
||||
for (Map.Entry<Long, List<TaskPickingMaterialDetailPO>> map : taskPickingMaterialDetailPOMap.entrySet()){
|
||||
List<TaskPickingMaterialDetailPO> taskPickingMaterialDetailPOListByMaterial = map.getValue();
|
||||
if (CollectionUtil.isEmpty(taskPickingMaterialDetailPOListByMaterial)){
|
||||
List<TaskPickingMaterialDetailPO> taskPickingMaterialDetailPOListByStorage = map.getValue();
|
||||
if (CollectionUtil.isEmpty(taskPickingMaterialDetailPOListByStorage)){
|
||||
continue;
|
||||
}
|
||||
BigDecimal quantityAll = BigDecimal.ZERO;
|
||||
BigDecimal pickingQuantityAll = BigDecimal.ZERO;
|
||||
for (TaskPickingMaterialDetailPO d : taskPickingMaterialDetailPOListByStorage) {
|
||||
quantityAll = quantityAll.add(d.getQuantity() != null ? d.getQuantity() : BigDecimal.ZERO);
|
||||
pickingQuantityAll = pickingQuantityAll.add(d.getPickingQuantity() != null ? d.getPickingQuantity() : BigDecimal.ZERO);
|
||||
}
|
||||
if (quantityAll.compareTo(BigDecimal.ZERO) > 0 && pickingQuantityAll.compareTo(quantityAll) >= 0){
|
||||
totalPickingMaterialQuantity += 1;
|
||||
}
|
||||
// 过滤掉已拣货完成的明细,只展示待拣货的
|
||||
List<TaskPickingMaterialDetailPO> incompleteList = taskPickingMaterialDetailPOListByStorage.stream()
|
||||
.filter(d -> d.getQuantity() != null && (d.getPickingQuantity() == null || d.getPickingQuantity().compareTo(d.getQuantity()) < 0))
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtil.isEmpty(incompleteList)){
|
||||
continue;
|
||||
}
|
||||
TaskStoragePO taskStoragePO = new TaskStoragePO();
|
||||
BeanUtils.copyProperties(taskPickingMaterialDetailPOListByMaterial.get(0), taskStoragePO);
|
||||
BeanUtils.copyProperties(incompleteList.get(0), taskStoragePO);
|
||||
BigDecimal quantity = BigDecimal.ZERO;
|
||||
BigDecimal pickingQuantity = BigDecimal.ZERO;
|
||||
BigDecimal waitPickingQuantity = BigDecimal.ZERO;
|
||||
for (TaskPickingMaterialDetailPO taskPickingMaterialDetailPO : taskPickingMaterialDetailPOListByMaterial) {
|
||||
for (TaskPickingMaterialDetailPO taskPickingMaterialDetailPO : incompleteList) {
|
||||
quantity = quantity.add(taskPickingMaterialDetailPO.getQuantity());
|
||||
pickingQuantity = pickingQuantity.add(taskPickingMaterialDetailPO.getPickingQuantity());
|
||||
waitPickingQuantity = waitPickingQuantity.add(taskPickingMaterialDetailPO.getWaitPickingQuantity());
|
||||
pickingQuantity = pickingQuantity.add(taskPickingMaterialDetailPO.getPickingQuantity() != null ? taskPickingMaterialDetailPO.getPickingQuantity() : BigDecimal.ZERO);
|
||||
waitPickingQuantity = waitPickingQuantity.add(taskPickingMaterialDetailPO.getWaitPickingQuantity() != null ? taskPickingMaterialDetailPO.getWaitPickingQuantity() : BigDecimal.ZERO);
|
||||
}
|
||||
taskStoragePO.setQuantity(quantity);
|
||||
taskStoragePO.setPickingQuantity(pickingQuantity);
|
||||
@@ -203,12 +279,11 @@ public class StockOutTaskOrderDomainService {
|
||||
//判断拣货数量是否等于计划数量
|
||||
Integer pickingStatus = judgePickingQuantity(pickingQuantity, quantity);
|
||||
taskStoragePO.setPickingStatus(pickingStatus);
|
||||
taskStoragePO.setTaskPickingMaterialDetailList(taskPickingMaterialDetailPOListByMaterial);
|
||||
taskStoragePO.setTaskPickingMaterialDetailList(incompleteList);
|
||||
taskStoragePOList.add(taskStoragePO);
|
||||
if (pickingStatus > 2){
|
||||
totalPickingMaterialQuantity += 1;
|
||||
}
|
||||
}
|
||||
// 拣货进度:已完成数/拣货明细总数(按库位分组,几种库位就几种明细)
|
||||
stockOutTaskOrderPO.setMaterialQuantity(totalStorageCount);
|
||||
stockOutTaskOrderPO.setPickingMaterialQuantity(totalPickingMaterialQuantity);
|
||||
stockOutTaskOrderPO.setTaskStorageList(taskStoragePOList);
|
||||
return stockOutTaskOrderPO;
|
||||
@@ -252,6 +327,8 @@ public class StockOutTaskOrderDomainService {
|
||||
totalPickingMaterialQuantity += 1;
|
||||
}
|
||||
}
|
||||
// 拣货进度:已完成数/拣货明细总数(按物料分组,几种物料就几种明细)
|
||||
stockOutTaskOrderPO.setMaterialQuantity(taskMaterialPOList.size());
|
||||
stockOutTaskOrderPO.setPickingMaterialQuantity(totalPickingMaterialQuantity);
|
||||
stockOutTaskOrderPO.setTaskMaterialList(taskMaterialPOList);
|
||||
return stockOutTaskOrderPO;
|
||||
|
||||
Reference in New Issue
Block a user