diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderApplicationService.java index f96c5e981..7047aab44 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderApplicationService.java @@ -1297,4 +1297,122 @@ public class ReservationStockOutOrderApplicationService { public void returnGoods(String invoiceNumber, String transportationNumber, String orderId,String pictureUrl) { stockOutOrderDomainService.returnGoods(invoiceNumber, transportationNumber, orderId, pictureUrl); } + + public List queryList1(ReservationStockOutOrderDO stockOutOrderDO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = stockOutOrderDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + stockOutOrderDO.setOrganizationId(frontendOrganizationId); + stockOutOrderDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + stockOutOrderDO.setOrganizationId(null); + stockOutOrderDO.setTopOrganizationId(null); + } + } else { + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + stockOutOrderDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + stockOutOrderDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (stockOutOrderDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + stockOutOrderDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 对于非2827组织,必须设置 topOrganizationId=2827 + stockOutOrderDO.setTopOrganizationId(2827L); + } + } + } + + // 库管角色过滤:不展示已创建(status=1)的出库单 + // 出库状态: 1-已创建 ... +// if (loginUser != null) { +// String targetRoleCode = "KGY-001"; +// boolean isKuGuan = false; +// +// String roleCode = loginUser.getUserPo() != null ? loginUser.getUserPo().getRoleCode() : null; +// if (StringUtils.isNotBlank(roleCode) && roleCode.contains(targetRoleCode)) { +// isKuGuan = true; +// } +// +// if (!isKuGuan && loginUser.getRoleList() != null) { +// isKuGuan = loginUser.getRoleList().stream() +// .anyMatch(rc -> StringUtils.isNotBlank(rc) && rc.contains(targetRoleCode)); +// } +// +// if (!isKuGuan && loginUser.getRoles() != null) { +// isKuGuan = loginUser.getRoles().stream() +// .anyMatch(rc -> StringUtils.isNotBlank(rc) && rc.contains(targetRoleCode)); +// } +// +// if (isKuGuan) { +// Integer currentGtStatus = stockOutOrderDO.getGtStatus(); +// if (currentGtStatus == null || currentGtStatus < 1) { +// stockOutOrderDO.setGtStatus(1); // status > 1 +// } +// } +// } + + List stockOutOrderPOS = stockOutOrderDomainService.queryList(stockOutOrderDO); +// for (ReservationStockOutOrderPO stockOutOrderPO : stockOutOrderPOS) { +// ReservationStockOutOrderPO stockOutOrderPO1 = stockOutOrderDomainService.getInfoChildren(stockOutOrderPO.getOutOrderId()); +// List materialDetailList = stockOutOrderPO1 != null ? stockOutOrderPO1.getMaterialDetailList() : null; +// if (materialDetailList == null) { +// materialDetailList = Collections.emptyList(); +// } +// BigDecimal reduce = materialDetailList.stream().map(ReservationOutMaterialDetailPO::getOutboundQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); +// stockOutOrderPO.setTotalOutboundQuantity(reduce); +// stockOutOrderPO.setAllocationQuantity(stockOutOrderPO1 != null ? stockOutOrderPO1.getAllocationQuantity() : null); +// String outOrderNumber = stockOutOrderPO.getOutOrderNumber(); +// // PDA复核物料总数量:使用实际下发时的拣货完成数量(picking_material_detail),拣货多少显示多少 +// // PDA端物料总数量取quantity字段、复核总数量取checkQuantity字段,需同时设置quantity和pickingQuantity +// BigDecimal actualPickingQty = pickingMaterialDetailService.sumPickingQuantityByOutOrderNumber(outOrderNumber); +// BigDecimal displayPickingQty = actualPickingQty.compareTo(BigDecimal.ZERO) > 0 ? actualPickingQty : (stockOutOrderPO1 != null ? stockOutOrderPO1.getPickingQuantity() : BigDecimal.ZERO); +// stockOutOrderPO.setPickingQuantity(displayPickingQty); +// stockOutOrderPO.setQuantity(displayPickingQty); +// // 物料种类:优先从picking_material_detail统计,为0时从out_material_detail按料号去重 +// Integer materialTypeCount = pickingMaterialDetailService.countMaterialTypesByOutOrderNumber(outOrderNumber); +// if (materialTypeCount != null && materialTypeCount > 0) { +// stockOutOrderPO.setMaterialQuantity(materialTypeCount); +// } else { +// long count = materialDetailList.stream() +// .map(d -> d.getMaterialBaseInfoId() != null ? String.valueOf(d.getMaterialBaseInfoId()) : d.getMaterialCode()) +// .filter(Objects::nonNull) +// .distinct() +// .count(); +// stockOutOrderPO.setMaterialQuantity((int) count); +// } +// // 复核总数量:从out_material_detail汇总check_quantity +// BigDecimal checkSum = materialDetailList.stream().map(ReservationOutMaterialDetailPO::getCheckQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); +// stockOutOrderPO.setCheckQuantity(checkSum); +// } + return stockOutOrderPOS; + } + } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java index f20f82bad..e346d44de 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java @@ -210,4 +210,16 @@ public class ReservationStockOutOrderApi extends BaseController { return AjaxResult.success(); } + + @ApiOperation("查询出库单列表") + @GetMapping("/list1") + public TableDataInfo list1(ReservationStockOutOrderDTO stockOutOrderDTO) + { + //转换实体 + ReservationStockOutOrderDO stockOutOrderDO = stockOutOrderAssembler.toDO(stockOutOrderDTO); + startPage(); + List list = stockOutOrderApplicationService.queryList1(stockOutOrderDO); + return getDataTable(list); + } + } \ No newline at end of file