fix(oms):入库预约App提交后各端不显示,落库回填仓库/组织/货主并支持货主维度查询

根因:App提交的预约单organization_id/shipper_id落库为空、warehouse_code全空,列表按组织与仓码过滤必然查不到
1.ReserveStockInOrderDomainService.insert:
  -新增明细非空校验,App不传明细时返回'请添加货物明细'而非NPE
  -按warehouseId查仓库档案回填组织(仓码2841/谷丰2842按仓库归属)/一级组织(2827)/仓库编码名称,仓库缺失时兜底登录人一级组织+2841
  -委托方(有货主档案)未传shipper时回填登录人userId至shipperId/customerId
  -订单状态默认'新增'/status默认1(配合App端订单状态改只读)
2.ReserveStockInOrderApplicationService:
  -detailsList增加货主直查旁路(对齐queryList既有逻辑),委托方按shipperId查询不再被组织过滤拦截
  -inAndOutList原无任何数据权限,委托方登录强制注入本人shipperId,防止传错组织(如通宇2830)导致列表滤空并防越权
This commit is contained in:
rcx
2026-08-18 18:09:34 +08:00
parent f77d89fa7f
commit 8692b38671
2 changed files with 52 additions and 3 deletions
@@ -153,6 +153,10 @@ public class ReserveStockInOrderApplicationService {
public List<ReserveInMaterialDetailPO> detailsList(ReserveStockInOrderDO stockInOrderDO) {
// 与 queryList(:96-99) 对齐:委托方按货主直查
if (stockInOrderDO.getShipperId() != null && stockInOrderDO.getShipperId() != 0L) {
return stockInOrderDomainService.detailsList(stockInOrderDO);
}
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null && loginUser.getUserPo() != null){
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
@@ -195,6 +199,11 @@ public class ReserveStockInOrderApplicationService {
public List<InAndOutListVo> inAndOutList(ReserveStockInOrderDO stockInOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
// 委托方(货主)登录:强制只看本人货主数据;运营人员不注入(XML :667-669 支持 shipperId
if (stockInOrderDO.getShipperId() == null
&& loginUser != null && loginUser.getUserShipperPo() != null) {
stockInOrderDO.setShipperId(loginUser.getUserPo().getUserId());
}
return stockInOrderDomainService.inAndOutList(stockInOrderDO);
}
@@ -142,6 +142,9 @@ public class ReserveStockInOrderDomainService {
// //设置物料信息
// setMaterialDetailInfo(stockInOrderDO);
// //统计总物料种数
if (CollectionUtils.isEmpty(stockInOrderDO.getMaterialDetailList())) {
throw new ServiceException("请添加货物明细");
}
stockInOrderDO.setMaterialQuantity(stockInOrderDO.getMaterialDetailList().size());
// //统计总计划数
BigDecimal quantity = stockInOrderDO.getMaterialDetailList().stream().map(ReserveInMaterialDetailDO::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -155,9 +158,46 @@ public class ReserveStockInOrderDomainService {
BigDecimal volumeLimit = stockInOrderDO.getMaterialDetailList().stream().map(ReserveInMaterialDetailDO::getVolumeLimit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
stockInOrderDO.setVolumeLimit(volumeLimit);
LoginUser loginUser = SecurityUtils.getLoginUser();
stockInOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
// stockInOrderDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
// stockInOrderDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
// 仓库档案回填:组织(仓码2841/谷丰2842按仓库归属)/一级组织(2827)/仓库编码名称
if (stockInOrderDO.getWarehouseId() != null) {
AjaxResult wr = systemServiceFeign.getWarehouseInfoByWarehouseId(stockInOrderDO.getWarehouseId());
if ("200".equals(String.valueOf(wr.get("code")))) {
WarehouseFeignPO wh = JSON.parseObject(JSONObject.toJSONString(wr.get("data")), WarehouseFeignPO.class);
if (stockInOrderDO.getOrganizationId() == null && wh.getOrganizationId() != null) {
stockInOrderDO.setOrganizationId(wh.getOrganizationId());
stockInOrderDO.setOrganizationName(wh.getOrganizationName());
}
if (wh.getTopOrganizationId() != null) {
stockInOrderDO.setTopOrganizationId(wh.getTopOrganizationId());
}
if (StringUtils.isBlank(stockInOrderDO.getWarehouseCode())) {
stockInOrderDO.setWarehouseCode(wh.getWarehouseCode());
stockInOrderDO.setWarehouseName(wh.getWarehouseName());
}
}
}
// 兜底:仓库没带组织时用登录人一级组织 + 2841(与存量导入 :2226-2228 口径一致)
if (stockInOrderDO.getTopOrganizationId() == null) {
stockInOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
if (stockInOrderDO.getOrganizationId() == null) {
stockInOrderDO.setOrganizationId(2841L);
stockInOrderDO.setOrganizationName("仓码");
}
// 委托方(货主)身份回填:App未传且登录人有货主档案时=登录人(模式同 importInData :1992-1997
if (stockInOrderDO.getShipperId() == null && loginUser.getUserShipperPo() != null) {
stockInOrderDO.setShipperId(loginUser.getUserPo().getUserId());
stockInOrderDO.setShipperName(loginUser.getUserPo().getUserName());
stockInOrderDO.setCustomerId(loginUser.getUserPo().getUserId());
stockInOrderDO.setCustomerName(loginUser.getUserPo().getUserName());
}
// 状态默认值(App端订单状态不可编辑)
if (StringUtils.isBlank(stockInOrderDO.getOrderStatus())) {
stockInOrderDO.setOrderStatus("新增");
}
if (stockInOrderDO.getStatus() == null) {
stockInOrderDO.setStatus(1);
}
stockInOrderService.insert(stockInOrderDO);
return materialDetailService.batchInsert(stockInOrderDO.getInOrderNumber(), stockInOrderDO.getMaterialDetailList());
}