From 1280bdd67d6df2bac0b6af8189e9dc53e97eb1e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Wed, 27 May 2026 16:06:16 +0800 Subject: [PATCH] =?UTF-8?q?PDA=E8=87=AA=E5=8A=A8=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E9=A2=86=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeliveTaskApplicationService.java | 28 +++++++++- .../persistence/DeliveTaskImpl.java | 2 +- .../service/PickingOrderDomainService.java | 54 +++++++++++++++++-- .../service/StockOutOrderDomainService.java | 5 ++ .../deliveTask/DeliveTaskAppApi.java | 6 +-- .../mapper/deliveTask/DeliveTaskMapper.xml | 8 ++- 6 files changed, 92 insertions(+), 11 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/deliveTask/DeliveTaskApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/deliveTask/DeliveTaskApplicationService.java index 9fe86c797..1f8ababa4 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/deliveTask/DeliveTaskApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/deliveTask/DeliveTaskApplicationService.java @@ -1,6 +1,8 @@ package com.mhd.wms.application.service.deliveTask; import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.domain.cache.AssociationWarehouseCacheDO; +import com.mhd.system.api.domain.cache.SystemServiceCacheUtil; import com.mhd.system.api.model.LoginUser; import com.mhd.wms.domain.deliveTask.repository.po.DeliveTaskPO; import com.mhd.wms.domain.deliveTask.repository.po.DeliveTaskSumPO; @@ -47,8 +49,17 @@ public class DeliveTaskApplicationService { if (topOrganizationId != null && topOrganizationId != 1){ deliveTaskDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); } - // 只查询下发给当前登录用户的任务(对应 task_distribution_id = 当前用户) - deliveTaskDO.setTaskDistributionId(loginUser.getUserid()); + applyPdaWarehouseScope(deliveTaskDO, loginUser); + Long tabType = deliveTaskDO.getTabType(); + if (tabType != null && tabType == 1L) { + // 指派给我的:已接收(operators_by = 当前用户) + deliveTaskDO.setOperatorsBy(loginUser.getUserid()); + } else if (tabType == null || tabType == 2L) { + // 任务大厅:未领取任务池(含入库审核收货、出库生成拣货单等自动下发的任务),不按下发人过滤 + if (tabType == null) { + deliveTaskDO.setTabType(2L); + } + } } // 不按 task_status 默认过滤;若请求传入 taskStatus 则仍可按状态筛选 return deliveTaskDomainService.queryListApp(deliveTaskDO); @@ -107,10 +118,23 @@ public class DeliveTaskApplicationService { deliveTaskDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); deliveTaskDO.setOperatorsBy(loginUser.getUserid()); } + applyPdaWarehouseScope(deliveTaskDO, loginUser); } return deliveTaskDomainService.querySum(deliveTaskDO); } + /** PDA:按用户绑定仓库过滤任务(与收货/上架等 App 列表一致) */ + private static void applyPdaWarehouseScope(DeliveTaskDO deliveTaskDO, LoginUser loginUser) { + if (deliveTaskDO.getWarehouseId() != null) { + return; + } + AssociationWarehouseCacheDO warehouseCache = + SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); + if (warehouseCache != null && warehouseCache.getWarehouseId() != null) { + deliveTaskDO.setWarehouseId(warehouseCache.getWarehouseId()); + } + } + public Boolean forward(DeliveTaskDO deliveTaskDO) { return deliveTaskDomainService.updateById(deliveTaskDO); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/repository/persistence/DeliveTaskImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/repository/persistence/DeliveTaskImpl.java index 58aff4d5b..db1a1463a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/repository/persistence/DeliveTaskImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/repository/persistence/DeliveTaskImpl.java @@ -99,7 +99,7 @@ public class DeliveTaskImpl extends ServiceImpl im @Override public List queryListApp(DeliveTaskDO deliveTaskDO) { - // App 列表条件见 DeliveTaskMapper.queryListApp / selectDeliveTaskPoApp1(不按 tabType、operators_by 过滤) + // App 列表条件见 DeliveTaskMapper.queryListApp / selectDeliveTaskPoApp1(tabType=2 任务大厅 / tabType=1 指派给我) List deliveTaskPOS = deliveTaskMapper.queryListApp(deliveTaskDO); if (deliveTaskDO.getTaskType() == 7){ statistics(deliveTaskPOS); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java index 394ea5edd..c69e8d428 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java @@ -14,6 +14,7 @@ import com.mhd.common.core.utils.bean.BeanUtils; import com.mhd.common.core.utils.uuid.IdGenerator; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.model.LoginUser; +import com.mhd.wms.domain.deliveTask.entity.DeliveTask; import com.mhd.wms.domain.deliveTask.repository.facade.IDeliveTaskService; import com.mhd.wms.domain.deliveTask.repository.todo.DeliveTaskDO; import com.mhd.wms.domain.handoverTaskOrder.repository.facade.IHandoverTaskOrderService; @@ -932,15 +933,20 @@ public class PickingOrderDomainService { : loginUser.getUsername(); List deliveTaskDOList = new ArrayList<>(); for (StockOutTaskOrderDO stockOutTaskOrderDO : stockOutTaskOrderDOList){ + if (StringUtils.isNotBlank(stockOutTaskOrderDO.getTaskNumber()) + && deliveTaskService.count(new LambdaQueryWrapper() + .eq(DeliveTask::getTrackingNumber, stockOutTaskOrderDO.getTaskNumber()) + .eq(DeliveTask::getTaskType, 3) + .eq(DeliveTask::getDelFlag, 1)) > 0) { + continue; + } DeliveTaskDO deliveTaskDO = new DeliveTaskDO(); deliveTaskDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); deliveTaskDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); deliveTaskDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); deliveTaskDO.setTaskNumber(OrderSequence.getOrderCode("RW")); deliveTaskDO.setTrackingNumber(stockOutTaskOrderDO.getTaskNumber()); - deliveTaskDO.setWarehouseId(stockOutTaskOrderDO.getWarehouseId()); - deliveTaskDO.setWarehouseCode(stockOutTaskOrderDO.getWarehouseCode()); - deliveTaskDO.setWarehouseName(stockOutTaskOrderDO.getWarehouseName()); + fillPickingDeliveTaskWarehouse(deliveTaskDO, stockOutTaskOrderDO); deliveTaskDO.setTaskType(3); deliveTaskDO.setTaskDistribution(1); deliveTaskDO.setTaskDistributionId(loginUser.getUserid()); @@ -954,6 +960,46 @@ public class PickingOrderDomainService { deliveTaskDO.setCreateTime(new Date()); deliveTaskDOList.add(deliveTaskDO); } - deliveTaskService.batchInsert(deliveTaskDOList); + if (!deliveTaskDOList.isEmpty()) { + deliveTaskService.batchInsert(deliveTaskDOList); + } + } + + /** + * 拣货类 delive_task 仓库:优先作业单/拣货单,否则按来源单号查出库单或波次单仓库(供 PDA 任务大厅按绑定仓库过滤)。 + */ + private void fillPickingDeliveTaskWarehouse(DeliveTaskDO deliveTaskDO, StockOutTaskOrderDO stockOutTaskOrderDO) { + Long warehouseId = stockOutTaskOrderDO.getWarehouseId(); + String warehouseCode = stockOutTaskOrderDO.getWarehouseCode(); + String warehouseName = stockOutTaskOrderDO.getWarehouseName(); + if (warehouseId != null && warehouseId != 0L) { + deliveTaskDO.setWarehouseId(warehouseId); + deliveTaskDO.setWarehouseCode(warehouseCode); + deliveTaskDO.setWarehouseName(warehouseName); + return; + } + String orderNumber = stockOutTaskOrderDO.getOrderNumber(); + if (StringUtils.isBlank(orderNumber)) { + return; + } + StockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper() + .eq(StockOutOrder::getOutOrderNumber, orderNumber) + .eq(StockOutOrder::getDelFlag, 1) + .last("LIMIT 1")); + if (stockOutOrder != null && stockOutOrder.getWarehouseId() != null) { + deliveTaskDO.setWarehouseId(stockOutOrder.getWarehouseId()); + deliveTaskDO.setWarehouseCode(stockOutOrder.getWarehouseCode()); + deliveTaskDO.setWarehouseName(stockOutOrder.getWarehouseName()); + return; + } + WaveOrder waveOrder = waveOrderService.getOne(new LambdaQueryWrapper() + .eq(WaveOrder::getWaveOrderNumber, orderNumber) + .eq(WaveOrder::getDelFlag, 1) + .last("LIMIT 1")); + if (waveOrder != null && waveOrder.getWarehouseId() != null) { + deliveTaskDO.setWarehouseId(waveOrder.getWarehouseId()); + deliveTaskDO.setWarehouseCode(waveOrder.getWarehouseCode()); + deliveTaskDO.setWarehouseName(waveOrder.getWarehouseName()); + } } } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java index b459824a2..c679eb382 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java @@ -630,6 +630,11 @@ public class StockOutOrderDomainService { pickingOrderDO.setOrderNumber(p.getOutOrderNumber()); pickingOrderDO.setPickingOrderNumber(OrderSequence.getOrderCode("JH")); pickingOrderDO.setQuantity(p.getAllocationQuantity()); + if (pickingOrderDO.getWarehouseId() == null && p.getWarehouseId() != null) { + pickingOrderDO.setWarehouseId(p.getWarehouseId()); + pickingOrderDO.setWarehouseCode(p.getWarehouseCode()); + pickingOrderDO.setWarehouseName(p.getWarehouseName()); + } List outMaterialDetailPOS = outMaterialDetailPOListMap.get(p.getOutOrderNumber()); // 出库单头 warehouse_code 常为空,用已分配明细(含子行)第一条有仓库编码的行兜底 OutMaterialDetailPO warehouseFromDetail = firstOutDetailWithWarehouse(outMaterialDetailPOS); diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/deliveTask/DeliveTaskAppApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/deliveTask/DeliveTaskAppApi.java index 0f2f86159..84fab7514 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/deliveTask/DeliveTaskAppApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApp/deliveTask/DeliveTaskAppApi.java @@ -31,9 +31,9 @@ public class DeliveTaskAppApi extends BaseController { private DeliveTaskAssembler deliveTaskAssembler; /** - * 分页查询下发任务列表。条件:del_flag=1、当前一级组织、请求参数 warehouseId、 - * task_distribution_id=当前登录用户;不按 task_status 过滤(入参传入 taskStatus 时可选筛状态)。 - * 与 PC 列表不同,不按 tabType/operators_by 过滤。 + * 分页查询下发任务列表。条件:del_flag=1、当前一级组织、绑定仓库(未传 warehouseId 时取用户仓库绑定)、 + * {@code tabType=2} 任务大厅(operators_by 为空,含收货/上架/拣货等自动下发任务)、 + * {@code tabType=1} 指派给我的(operators_by=当前用户);不按 task_status 默认过滤。 */ @ApiOperation("查询下发任务列表") @GetMapping("/list") diff --git a/mhd_wms/src/main/resources/mapper/deliveTask/DeliveTaskMapper.xml b/mhd_wms/src/main/resources/mapper/deliveTask/DeliveTaskMapper.xml index 0ac6887bc..d9f570e32 100644 --- a/mhd_wms/src/main/resources/mapper/deliveTask/DeliveTaskMapper.xml +++ b/mhd_wms/src/main/resources/mapper/deliveTask/DeliveTaskMapper.xml @@ -138,7 +138,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + del_flag = 1 @@ -196,6 +196,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and task_distribution_name like concat('%', #{taskDistributionName}, '%') + + and operators_by = #{operatorsBy} + + + and operators_by IS NULL + and operators_name like concat('%', #{operatorsName}, '%')