PDABug修改

This commit is contained in:
秦鸿展
2026-04-20 17:04:49 +08:00
parent 1f0f30923c
commit 3414785be3
5 changed files with 133 additions and 5 deletions
@@ -457,10 +457,36 @@ public class MaterialInventoryApplicationService {
*/
public List<MaterialInventoryQueryListPO> materialQueryList(MaterialInventoryQueryListDO materialInventoryQueryListDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
materialInventoryQueryListDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
//topOrganizationId 会查到一级组织下全部子组织
if (loginUser != null && loginUser.getUserPo() != null) {
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
Long frontendOrganizationId = materialInventoryQueryListDO.getOrganizationId();
if (userOrganizationId != null && userOrganizationId == 2827L) {
if (frontendOrganizationId != null) {
materialInventoryQueryListDO.setOrganizationId(frontendOrganizationId);
materialInventoryQueryListDO.setTopOrganizationId(null);
} else {
materialInventoryQueryListDO.setOrganizationId(null);
materialInventoryQueryListDO.setTopOrganizationId(null);
}
} else {
if (frontendOrganizationId != null && userOrganizationId != null) {
if (!frontendOrganizationId.equals(userOrganizationId)) {
materialInventoryQueryListDO.setOrganizationId(userOrganizationId);
}
} else {
if (userOrganizationId != null) {
materialInventoryQueryListDO.setOrganizationId(userOrganizationId);
}
}
if (materialInventoryQueryListDO.getOrganizationId() == null) {
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1) {
materialInventoryQueryListDO.setTopOrganizationId(topOrganizationId);
}
} else {
materialInventoryQueryListDO.setTopOrganizationId(2827L);
}
}
}
List<MaterialInventoryQueryListPO> list = materialInventoryDomainService.materialQueryList(materialInventoryQueryListDO);
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.mhd.common.core.constant.SnowFlakeConstants;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.core.utils.StringUtils;
import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.common.core.utils.uuid.IdGenerator;
import com.mhd.common.security.utils.SecurityUtils;
@@ -22,6 +23,8 @@ import com.mhd.wms.domain.inventoryStandingDetail.repository.facade.IInventorySt
import com.mhd.wms.domain.inventoryStandingDetail.repository.todo.InventoryStandingDetailDO;
import com.mhd.wms.domain.materialBaseInfo.entity.MaterialBaseInfo;
import com.mhd.wms.domain.materialBaseInfo.repository.mapper.MaterialBaseInfoMapper;
import com.mhd.wms.domain.materialBarCode.repository.facade.IMaterialBarCodeService;
import com.mhd.wms.domain.materialBarCode.repository.po.MaterialBarCodePO;
import com.mhd.wms.domain.materialInventory.entity.MaterialInventory;
import com.mhd.wms.domain.materialInventory.repository.facade.IMaterialInventoryService;
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryDO;
@@ -120,6 +123,8 @@ public class PickingOrderDomainService {
@Resource
private MaterialBaseInfoMapper materialBaseInfoMapper;
@Autowired
private IMaterialBarCodeService materialBarCodeService;
@Autowired
private CopyCodeReferenceDomainService copyCodeReferenceDomainService;
@@ -523,6 +528,39 @@ public class PickingOrderDomainService {
}
}
/**
* 拣货单明细表可能未存物料编码/名称/条码,作业明细从物料主数据(及条码表)补齐,与详情接口从主数据回填一致。
*/
private void fillTaskPickingMaterialDetailMaterialInfo(TaskPickingMaterialDetailDO detail) {
if (detail == null || detail.getMaterialBaseInfoId() == null) {
return;
}
boolean needCode = StringUtils.isBlank(detail.getMaterialCode());
boolean needName = StringUtils.isBlank(detail.getMaterialName());
boolean needBar = StringUtils.isBlank(detail.getBarCode());
if (!needCode && !needName && !needBar) {
return;
}
MaterialBaseInfo m = materialBaseInfoMapper.selectById(detail.getMaterialBaseInfoId());
if (m != null) {
if (needCode && StringUtils.isNotBlank(m.getMaterialCode())) {
detail.setMaterialCode(m.getMaterialCode());
}
if (needName && StringUtils.isNotBlank(m.getMaterialName())) {
detail.setMaterialName(m.getMaterialName());
}
if (needBar && StringUtils.isNotBlank(m.getBarCode())) {
detail.setBarCode(m.getBarCode());
}
}
if (StringUtils.isBlank(detail.getBarCode())) {
List<MaterialBarCodePO> barList = materialBarCodeService.getInfoByMaterialBaseInfoIds(detail.getMaterialBaseInfoId());
if (!CollectionUtils.isEmpty(barList) && StringUtils.isNotBlank(barList.get(0).getBarCode())) {
detail.setBarCode(barList.get(0).getBarCode());
}
}
}
/**
* @description 按单生成拣货作业单
* @author ZhouGY
@@ -562,6 +600,7 @@ public class PickingOrderDomainService {
TaskPickingMaterialDetailDO taskPickingMaterialDetailDO = new TaskPickingMaterialDetailDO();
BeanUtils.copyProperties(materialDetailPO, taskPickingMaterialDetailDO);
taskPickingMaterialDetailDO.setPickingUniqueId(materialDetailPO.getUniqueId());
fillTaskPickingMaterialDetailMaterialInfo(taskPickingMaterialDetailDO);
taskPickingMaterialDetailDOList.add(taskPickingMaterialDetailDO);
});
stockOutTaskOrderDO.setTaskPickingMaterialDetailList(taskPickingMaterialDetailDOList);
@@ -608,6 +647,7 @@ public class PickingOrderDomainService {
TaskPickingMaterialDetailDO taskPickingMaterialDetailDO = new TaskPickingMaterialDetailDO();
BeanUtils.copyProperties(pickingMaterialDetail, taskPickingMaterialDetailDO);
taskPickingMaterialDetailDO.setPickingUniqueId(pickingMaterialDetail.getUniqueId());
fillTaskPickingMaterialDetailMaterialInfo(taskPickingMaterialDetailDO);
taskPickingMaterialDetailDOList.add(taskPickingMaterialDetailDO);
stockOutTaskOrderDO.setTaskPickingMaterialDetailList(taskPickingMaterialDetailDOList);
stockOutTaskOrderDOList.add(stockOutTaskOrderDO);
@@ -129,6 +129,23 @@ public class ReviewOrderDomainService {
header.setWarehouseId(stockOutOrder.getWarehouseId());
header.setWarehouseCode(stockOutOrder.getWarehouseCode());
header.setWarehouseName(stockOutOrder.getWarehouseName());
// 出库单上仓库编码常为空,拣货单上一般有 QZ 等编码,与拣货作业单展示一致
if (!StringUtils.hasText(header.getWarehouseCode()) || !StringUtils.hasText(header.getWarehouseName()) || header.getWarehouseId() == null) {
for (PickingOrder p : pickingOrders) {
if (StringUtils.hasText(header.getWarehouseCode()) && StringUtils.hasText(header.getWarehouseName()) && header.getWarehouseId() != null) {
break;
}
if (!StringUtils.hasText(header.getWarehouseCode()) && StringUtils.hasText(p.getWarehouseCode())) {
header.setWarehouseCode(p.getWarehouseCode());
}
if (!StringUtils.hasText(header.getWarehouseName()) && StringUtils.hasText(p.getWarehouseName())) {
header.setWarehouseName(p.getWarehouseName());
}
if (header.getWarehouseId() == null && p.getWarehouseId() != null) {
header.setWarehouseId(p.getWarehouseId());
}
}
}
header.setCustomerId(stockOutOrder.getCustomerId());
header.setCustomerCode(stockOutOrder.getCustomerCode());
header.setCustomerName(stockOutOrder.getCustomerName());
@@ -631,6 +631,20 @@ public class StockOutOrderDomainService {
pickingOrderDO.setPickingOrderNumber(OrderSequence.getOrderCode("JH"));
pickingOrderDO.setQuantity(p.getAllocationQuantity());
List<OutMaterialDetailPO> outMaterialDetailPOS = outMaterialDetailPOListMap.get(p.getOutOrderNumber());
// 出库单头 warehouse_code 常为空用已分配明细含子行第一条有仓库编码的行兜底
OutMaterialDetailPO warehouseFromDetail = firstOutDetailWithWarehouse(outMaterialDetailPOS);
if (warehouseFromDetail != null) {
if (StringUtils.isBlank(pickingOrderDO.getWarehouseCode())) {
pickingOrderDO.setWarehouseCode(warehouseFromDetail.getWarehouseCode());
}
if (StringUtils.isBlank(pickingOrderDO.getWarehouseName())
&& StringUtils.isNotBlank(warehouseFromDetail.getWarehouseName())) {
pickingOrderDO.setWarehouseName(warehouseFromDetail.getWarehouseName());
}
if (pickingOrderDO.getWarehouseId() == null && warehouseFromDetail.getWarehouseId() != null) {
pickingOrderDO.setWarehouseId(warehouseFromDetail.getWarehouseId());
}
}
List<PickingMaterialDetailDO> pickingMaterialDetailList = new ArrayList<>();
if (!CollectionUtils.isEmpty(outMaterialDetailPOS)){
outMaterialDetailPOS.forEach(outMaterialDetailPO -> {
@@ -709,6 +723,25 @@ public class StockOutOrderDomainService {
return pickingOrderDomainService.batchInsert(pickingOrderDOList);
}
/**
* 从出库明细树中取第一条带仓库编码的行父行优先再递归子行
*/
private static OutMaterialDetailPO firstOutDetailWithWarehouse(List<OutMaterialDetailPO> lines) {
if (CollectionUtils.isEmpty(lines)) {
return null;
}
for (OutMaterialDetailPO line : lines) {
if (StringUtils.isNotBlank(line.getWarehouseCode())) {
return line;
}
OutMaterialDetailPO fromChild = firstOutDetailWithWarehouse(line.getChildren());
if (fromChild != null) {
return fromChild;
}
}
return null;
}
/**
* @description 补货
* @author ZhouGY
@@ -34,6 +34,7 @@ import com.mhd.wms.domain.pickingOrder.entity.PickingOrder;
import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService;
import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO;
import com.mhd.wms.domain.pickingOrder.repository.todo.PickingOrderDO;
import com.mhd.wms.domain.pickingOrder.service.ReviewOrderDomainService;
import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO;
import com.mhd.wms.domain.stockInOrder.service.StockInOrderDomainService;
import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder;
@@ -107,6 +108,8 @@ public class StockOutTaskOrderDomainService {
private IMaterialBaseInfoService materialBaseInfoService;
@Autowired
private CopyCodeReferenceDomainService copyCodeReferenceDomainService;
@Autowired
private ReviewOrderDomainService reviewOrderDomainService;
@Resource
private OutMaterialDetailMapper outMaterialDetailMapper;
@@ -882,8 +885,17 @@ public class StockOutTaskOrderDomainService {
stockOutOrder.setUpdateBy(loginUser.getUserid());
stockOutOrder.setUpdateByName(loginUser.getUsername());
stockOutOrder.setUpdateTime(new Date());
return stockOutOrderService.update(stockOutOrder,
boolean stockOutUpdated = stockOutOrderService.update(stockOutOrder,
new QueryWrapper<StockOutOrder>().lambda().eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber()));
// PickingOrderDomainService.picking 一致PDA 按物料拣货/作业单路径拣满时只走本方法需触发生成复核单
if (stockOutUpdated) {
StockOutOrder so = stockOutOrderService.getOne(new LambdaQueryWrapper<StockOutOrder>()
.eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber()));
if (so != null) {
reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPODb, so);
}
}
return stockOutUpdated;
}else {
//波次单
WaveOrder waveOrderDb = waveOrderService.getOne(new QueryWrapper<WaveOrder>().lambda()