出口仓单型号规格

This commit is contained in:
zhaoqing
2026-06-04 19:04:49 +08:00
parent 21b8114e83
commit c6d4b9c4b5
2 changed files with 126 additions and 38 deletions
@@ -196,44 +196,6 @@ public class PickingOrderApplicationService {
pickingOrderPO.setMaterialQuantity(0);
}
}
// ========== 批量查保管明细表补规格型号 ==========
Set<String> inOrderNumberSet = new HashSet<>();
Set<Long> materialBaseInfoIdSet = new HashSet<>();
for (List<PickingMaterialDetailPO> details : materialDetailsByOrderNumber.values()) {
for (PickingMaterialDetailPO d : details) {
if (StringUtils.isNotBlank(d.getInOrderNumber()) && d.getMaterialBaseInfoId() != null) {
inOrderNumberSet.add(d.getInOrderNumber());
materialBaseInfoIdSet.add(d.getMaterialBaseInfoId());
}
}
}
if (!inOrderNumberSet.isEmpty() && !materialBaseInfoIdSet.isEmpty()) {
LambdaQueryWrapper<InMaterialDetail> inWrapper = new LambdaQueryWrapper<>();
inWrapper.in(InMaterialDetail::getInOrderNumber, inOrderNumberSet);
inWrapper.in(InMaterialDetail::getMaterialBaseInfoId, materialBaseInfoIdSet);
inWrapper.eq(InMaterialDetail::getDelFlag, 1);
List<InMaterialDetail> inDetailList = inMaterialDetailService.list(inWrapper);
// 按 inOrderNumber + materialBaseInfoId 分组
Map<String, Map<Long, List<InMaterialDetail>>> grouped = inDetailList.stream()
.collect(Collectors.groupingBy(InMaterialDetail::getInOrderNumber,
Collectors.groupingBy(InMaterialDetail::getMaterialBaseInfoId)));
// 回填到拣货单头
for (PickingOrderPO po : pickingOrderPOList) {
List<PickingMaterialDetailPO> details = materialDetailsByOrderNumber.get(po.getPickingOrderNumber());
if (CollectionUtils.isEmpty(details)) continue;
PickingMaterialDetailPO first = details.get(0);
Map<Long, List<InMaterialDetail>> byBaseId = grouped.get(first.getInOrderNumber());
if (byBaseId != null) {
List<InMaterialDetail> list = byBaseId.get(first.getMaterialBaseInfoId());
if (list != null && !list.isEmpty()) {
po.setSpecificationModel(list.get(0).getSpecificationModel());
}
}
}
}
// ========== 批量查保管明细表补规格型号结束 ==========
}
}
@@ -1006,4 +968,120 @@ public class PickingOrderApplicationService {
}
pickingOrderMapper.updateById(entity);
}
/**
* 分页查询拣货单列表(含规格型号)
*/
public List<PickingOrderPO> queryList1(PickingOrderDO pickingOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null && loginUser.getUserPo() != null) {
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
Long frontendOrganizationId = pickingOrderDO.getOrganizationId();
if (userOrganizationId != null && userOrganizationId == 2827L) {
if (frontendOrganizationId != null) {
pickingOrderDO.setOrganizationId(frontendOrganizationId);
pickingOrderDO.setTopOrganizationId(null);
} else {
pickingOrderDO.setOrganizationId(null);
pickingOrderDO.setTopOrganizationId(null);
}
} else {
if (frontendOrganizationId != null && userOrganizationId != null) {
if (!frontendOrganizationId.equals(userOrganizationId)) {
pickingOrderDO.setOrganizationId(userOrganizationId);
}
} else {
if (userOrganizationId != null) {
pickingOrderDO.setOrganizationId(userOrganizationId);
}
}
if (pickingOrderDO.getOrganizationId() == null) {
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1) {
pickingOrderDO.setTopOrganizationId(topOrganizationId);
}
} else {
pickingOrderDO.setTopOrganizationId(2827L);
}
}
}
List<PickingOrderPO> pickingOrderPOList = pickingOrderDomainService.queryList(pickingOrderDO);
// 重新计算物料种类数 + 查保管明细表补规格型号
if (!CollectionUtils.isEmpty(pickingOrderPOList)) {
List<String> pickingOrderNumbers = pickingOrderPOList.stream()
.map(PickingOrderPO::getPickingOrderNumber)
.filter(Objects::nonNull)
.filter(number -> !number.trim().isEmpty())
.collect(Collectors.toList());
if (!pickingOrderNumbers.isEmpty()) {
Map<String, List<PickingMaterialDetailPO>> materialDetailsByOrderNumber = new HashMap<>();
for (String pickingOrderNumber : pickingOrderNumbers) {
PickingMaterialDetailDO pickingMaterialDetailDO = new PickingMaterialDetailDO();
pickingMaterialDetailDO.setPickingOrderNumber(pickingOrderNumber);
List<PickingMaterialDetailPO> materialDetails = pickingMaterialDetailDomainService.queryList(pickingMaterialDetailDO);
if (!CollectionUtils.isEmpty(materialDetails)) {
materialDetailsByOrderNumber.put(pickingOrderNumber, materialDetails);
}
}
// 计算物料种类数(按料号去重)
for (PickingOrderPO pickingOrderPO : pickingOrderPOList) {
String pickingOrderNumber = pickingOrderPO.getPickingOrderNumber();
if (pickingOrderNumber != null && materialDetailsByOrderNumber.containsKey(pickingOrderNumber)) {
List<PickingMaterialDetailPO> materialDetails = materialDetailsByOrderNumber.get(pickingOrderNumber);
long materialQuantity = materialDetails.stream()
.map(PickingMaterialDetailPO::getMaterialCode)
.filter(Objects::nonNull)
.filter(code -> !code.trim().isEmpty())
.distinct()
.count();
pickingOrderPO.setMaterialQuantity((int) materialQuantity);
} else {
pickingOrderPO.setMaterialQuantity(0);
}
}
// ========== 批量查保管明细表补规格型号 ==========
Set<String> inOrderNumberSet = new HashSet<>();
Set<Long> materialBaseInfoIdSet = new HashSet<>();
for (List<PickingMaterialDetailPO> details : materialDetailsByOrderNumber.values()) {
for (PickingMaterialDetailPO d : details) {
if (StringUtils.isNotBlank(d.getInOrderNumber()) && d.getMaterialBaseInfoId() != null) {
inOrderNumberSet.add(d.getInOrderNumber());
materialBaseInfoIdSet.add(d.getMaterialBaseInfoId());
}
}
}
if (!inOrderNumberSet.isEmpty() && !materialBaseInfoIdSet.isEmpty()) {
LambdaQueryWrapper<InMaterialDetail> inWrapper = new LambdaQueryWrapper<>();
inWrapper.in(InMaterialDetail::getInOrderNumber, inOrderNumberSet);
inWrapper.in(InMaterialDetail::getMaterialBaseInfoId, materialBaseInfoIdSet);
inWrapper.eq(InMaterialDetail::getDelFlag, 1);
List<InMaterialDetail> inDetailList = inMaterialDetailService.list(inWrapper);
Map<String, Map<Long, List<InMaterialDetail>>> grouped = inDetailList.stream()
.collect(Collectors.groupingBy(InMaterialDetail::getInOrderNumber,
Collectors.groupingBy(InMaterialDetail::getMaterialBaseInfoId)));
for (PickingOrderPO po : pickingOrderPOList) {
List<PickingMaterialDetailPO> details = materialDetailsByOrderNumber.get(po.getPickingOrderNumber());
if (CollectionUtils.isEmpty(details)) continue;
PickingMaterialDetailPO first = details.get(0);
Map<Long, List<InMaterialDetail>> byBaseId = grouped.get(first.getInOrderNumber());
if (byBaseId != null) {
List<InMaterialDetail> list = byBaseId.get(first.getMaterialBaseInfoId());
if (list != null && !list.isEmpty()) {
po.setSpecificationModel(list.get(0).getSpecificationModel());
}
}
}
}
// ========== 批量查保管明细表补规格型号结束 ==========
}
}
return pickingOrderPOList;
}
}
@@ -128,5 +128,15 @@ public class PickingOrderApi extends BaseController {
}
@ApiOperation("查询拣货单列表")
@GetMapping("/list1")
public TableDataInfo list1(PickingOrderDTO pickingOrderDTO)
{
//转换实体
PickingOrderDO pickingOrderDO = pickingOrderAssembler.toDO(pickingOrderDTO);
startPage();
List<PickingOrderPO> list = pickingOrderApplicationService.queryList1(pickingOrderDO);
return getDataTable(list);
}
}