From 3a02c2a1f28f1cc804aabf4dee8c1a1fb18cd3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 27 Apr 2026 13:30:01 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E6=89=B9=E6=AC=A1=E8=A7=84=E5=88=99?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MaterialBaseInfoApplicationService.java | 68 ++++++++++++++++++- .../StockReceiptOrderApplicationService.java | 7 +- .../StockShelfOrderApplicationService.java | 4 ++ .../ReceiptMaterialDetailImpl.java | 5 ++ .../persistence/ShelfMaterialDetailImpl.java | 38 +++++++---- .../StockReceiptOrderDomainService.java | 3 + 6 files changed, 106 insertions(+), 19 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java index 45d11776a..8879dc1c6 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java @@ -23,6 +23,8 @@ import com.mhd.wms.domain.materialBaseInfo.repository.facade.IMaterialBaseInfoSe import com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO; import com.mhd.wms.domain.materialBaseInfo.repository.todo.MaterialBaseInfoDO; import com.mhd.wms.domain.materialBaseInfo.service.MaterialBaseInfoDomainService; +import com.mhd.wms.domain.materialCommon.repository.facade.IMaterialCommonService; +import com.mhd.wms.domain.materialCommon.repository.po.MaterialCommonPO; import com.mhd.wms.domain.materialCommon.repository.todo.MaterialCommonDO; import com.mhd.wms.domain.materialCommon.service.MaterialCommonDomainService; import com.mhd.wms.domain.materialGoodsRule.entity.MaterialGoodsRule; @@ -33,6 +35,8 @@ import com.mhd.wms.domain.materialGoodsRule.service.MaterialGoodsRuleDomainServi import com.mhd.wms.domain.materialInventoryWarning.repository.facade.IMaterialInventoryWarningService; import com.mhd.wms.domain.materialInventoryWarning.repository.po.MaterialInventoryWarningPO; import com.mhd.wms.domain.materialInventoryWarning.service.MaterialInventoryWarningDomainService; +import com.mhd.wms.domain.materialWarehouseControl.repository.facade.IMaterialWarehouseControlService; +import com.mhd.wms.domain.materialWarehouseControl.repository.po.MaterialWarehouseControlPO; import com.mhd.wms.domain.materialWarehouseControl.repository.todo.MaterialWarehouseControlDO; import com.mhd.wms.domain.materialWarehouseControl.service.MaterialWarehouseControlDomainService; import com.mhd.wms.interfaces.dto.materialBaseInfo.MaterialBaseInfoDTO; @@ -88,6 +92,10 @@ public class MaterialBaseInfoApplicationService { private UserServiceFeign userServiceFeign; @Autowired private IMaterialBaseInfoService materialBaseInfoService; + @Autowired + private IMaterialCommonService materialCommonService; + @Autowired + private IMaterialWarehouseControlService materialWarehouseControlService; /** * 分页查询物料基础信息列表 @@ -268,20 +276,38 @@ public class MaterialBaseInfoApplicationService { */ public Boolean update(MaterialBaseInfoDO materialBaseInfoDO) { materialBaseInfoDomainService.update(materialBaseInfoDO); + Long materialBaseInfoId = materialBaseInfoDO.getMaterialBaseInfoId(); + // 商品/公共/仓控 子表:Feign/前端常只带业务字段、未带子表主键,需按 material_base_info_id 补全后再 update,否则 WHERE xxx_id=? 为 null 导致 Updates: 0 + mergeSubEntityPrimaryKeysForMaterialUpdate(materialBaseInfoDO); //商品规则 MaterialGoodsRuleDO materialGoodsRuleDO = materialBaseInfoDO.getMaterialGoodsRule(); if (materialGoodsRuleDO != null) { - materialGoodsRuleDomainService.update(materialGoodsRuleDO); + if (materialGoodsRuleDO.getMaterialGoodsRuleId() == null && materialBaseInfoId != null) { + materialGoodsRuleDO.setMaterialBaseInfoId(materialBaseInfoId); + materialGoodsRuleDomainService.insert(materialGoodsRuleDO); + } else { + materialGoodsRuleDomainService.update(materialGoodsRuleDO); + } } //公共信息 MaterialCommonDO materialCommonDO = materialBaseInfoDO.getMaterialCommon(); if (materialCommonDO != null) { - materialCommonDomainService.update(materialCommonDO); + if (materialCommonDO.getMaterialCommonId() == null && materialBaseInfoId != null) { + materialCommonDO.setMaterialBaseInfoId(materialBaseInfoId); + materialCommonDomainService.insert(materialCommonDO); + } else { + materialCommonDomainService.update(materialCommonDO); + } } //仓库控制信息 MaterialWarehouseControlDO materialWarehouseControlDO = materialBaseInfoDO.getMaterialWarehouseControl(); if (materialWarehouseControlDO != null) { - materialWarehouseControlDomainService.update(materialWarehouseControlDO); + if (materialWarehouseControlDO.getMaterialWarehouseControlId() == null && materialBaseInfoId != null) { + materialWarehouseControlDO.setMaterialBaseInfoId(materialBaseInfoId); + materialWarehouseControlDomainService.insert(materialWarehouseControlDO); + } else { + materialWarehouseControlDomainService.update(materialWarehouseControlDO); + } } //库存预警 materialInventoryWarningDomainService.batchInsertOrUpdate(materialBaseInfoDO); @@ -290,6 +316,42 @@ public class MaterialBaseInfoApplicationService { return true; } + /** + * 编辑物料时从库中反查子表主键,避免仅传 batchId 等字段时子表主键为 null 无法 UPDATE。 + */ + private void mergeSubEntityPrimaryKeysForMaterialUpdate(MaterialBaseInfoDO materialBaseInfoDO) { + if (materialBaseInfoDO == null) { + return; + } + Long mid = materialBaseInfoDO.getMaterialBaseInfoId(); + if (mid == null) { + return; + } + MaterialGoodsRuleDO gr = materialBaseInfoDO.getMaterialGoodsRule(); + if (gr != null && gr.getMaterialGoodsRuleId() == null) { + MaterialGoodsRule one = materialGoodsRuleMapper.selectOne(new LambdaQueryWrapper() + .eq(MaterialGoodsRule::getMaterialBaseInfoId, mid) + .eq(MaterialGoodsRule::getDelFlag, 1)); + if (one != null) { + gr.setMaterialGoodsRuleId(one.getMaterialGoodsRuleId()); + } + } + MaterialCommonDO common = materialBaseInfoDO.getMaterialCommon(); + if (common != null && common.getMaterialCommonId() == null) { + MaterialCommonPO ex = materialCommonService.getInfoByMaterialBaseInfoIds(mid); + if (ex != null) { + common.setMaterialCommonId(ex.getMaterialCommonId()); + } + } + MaterialWarehouseControlDO wh = materialBaseInfoDO.getMaterialWarehouseControl(); + if (wh != null && wh.getMaterialWarehouseControlId() == null) { + MaterialWarehouseControlPO ex = materialWarehouseControlService.getInfoByMaterialBaseInfoIds(mid); + if (ex != null) { + wh.setMaterialWarehouseControlId(ex.getMaterialWarehouseControlId()); + } + } + } + /** * 批量删除物料基础信息 */ diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java index 145a35b11..7f111bb4a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java @@ -46,6 +46,7 @@ import com.mhd.wms.domain.stockReceiptOrder.repository.todo.NoReceiptOrderDO; import com.mhd.wms.domain.stockReceiptOrder.repository.todo.StockReceiptOrderDO; import com.mhd.wms.domain.stockReceiptOrder.service.StockReceiptOrderDomainService; import com.mhd.wms.interfaces.dto.stockReceiptOrder.StockReceiptOrderDTO; +import com.mhd.wms.util.ReceiptBatchDetailFilter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -220,6 +221,9 @@ public class StockReceiptOrderApplicationService { if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { List batchDetailFeignPOList = JSON.parseArray( JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); + // 与物料商品规则中的 batchId 对齐,避免多批次模板的 isDisplay=1 行全部合并成几十条 + batchDetailFeignPOList = ReceiptBatchDetailFilter.filterByMaterialGoodsRule( + materialBaseInfoId, batchDetailFeignPOList, materialGoodsRuleService); if (!CollectionUtils.isEmpty(batchDetailFeignPOList)) { // 过滤isDisplay=1的属性 List filteredList = batchDetailFeignPOList.stream() @@ -338,7 +342,8 @@ public class StockReceiptOrderApplicationService { if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { List batchDetailFeignPOList = JSON.parseArray( JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); - + batchDetailFeignPOList = ReceiptBatchDetailFilter.filterByMaterialGoodsRule( + materialBaseInfoId, batchDetailFeignPOList, materialGoodsRuleService); if (!CollectionUtils.isEmpty(batchDetailFeignPOList)) { // 过滤isDisplay=1的属性 batchDetailFeignPOList.stream() diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java index 3b1ba6640..77c8daccf 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java @@ -49,6 +49,7 @@ import com.mhd.wms.domain.shiftMaterialDetail.repository.todo.ShiftMaterialDetai import com.mhd.wms.domain.stockShelfOrder.repository.po.StockShelfOrderPO; import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO; import com.mhd.wms.domain.stockShelfOrder.service.StockShelfOrderDomainService; +import com.mhd.wms.util.ReceiptBatchDetailFilter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -232,6 +233,9 @@ public class StockShelfOrderApplicationService { if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { List batchDetailFeignPOList = JSON.parseArray( JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); + // 与物料商品规则中的 batchId 对齐,同收货单详情,避免多批次 isDisplay=1 并集 + batchDetailFeignPOList = ReceiptBatchDetailFilter.filterByMaterialGoodsRule( + materialBaseInfoId, batchDetailFeignPOList, materialGoodsRuleService); if (!CollectionUtils.isEmpty(batchDetailFeignPOList)) { // 过滤isDisplay=1的属性 List filteredList = batchDetailFeignPOList.stream() diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java index ef5dc2610..c905a10ba 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java @@ -17,6 +17,8 @@ import com.mhd.system.api.SystemServiceFeign; import com.mhd.system.api.domain.BatchDetailFeignPO; import com.mhd.system.api.model.LoginUser; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mhd.wms.domain.materialGoodsRule.repository.facade.IMaterialGoodsRuleService; +import com.mhd.wms.util.ReceiptBatchDetailFilter; import com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail; import com.mhd.wms.domain.inMaterialDetail.repository.facade.IInMaterialDetailService; import com.mhd.wms.domain.inMaterialDetail.repository.po.InMaterialDetailPO; @@ -81,6 +83,8 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); + batchList = ReceiptBatchDetailFilter.filterByMaterialGoodsRule(materialBaseInfoId, batchList, materialGoodsRuleService); result = filterAndConvertToMaterialMoreDetail(batchList); if (CollectionUtils.isEmpty(result)) { return result; diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/shelfMaterialDetail/repository/persistence/ShelfMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/shelfMaterialDetail/repository/persistence/ShelfMaterialDetailImpl.java index 38e23765f..0b2d915c2 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/shelfMaterialDetail/repository/persistence/ShelfMaterialDetailImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/shelfMaterialDetail/repository/persistence/ShelfMaterialDetailImpl.java @@ -19,6 +19,8 @@ import com.mhd.wms.domain.shelfMaterialDetail.repository.facade.IShelfMaterialDe import com.mhd.wms.domain.shelfMaterialDetail.repository.mapper.ShelfMaterialDetailMapper; import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailPO; import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO; +import com.mhd.wms.domain.materialGoodsRule.repository.facade.IMaterialGoodsRuleService; +import com.mhd.wms.util.ReceiptBatchDetailFilter; import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService; import com.mhd.wms.domain.stockShelfOrder.repository.facade.IStockShelfOrderService; import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO; @@ -54,6 +56,8 @@ public class ShelfMaterialDetailImpl extends ServiceImpl materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO); if (CollectionUtils.isEmpty(materialMoreDetailList)) { - AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId()); - if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { - List batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); - materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList); - } + materialMoreDetailList = loadTemplateMoreFromSystem(shelfMaterialDetailPO.getMaterialBaseInfoId()); } fillAttributeValueFromShelfMaterialDetail(shelfMaterialDetailPO, materialMoreDetailList); shelfMaterialDetailPO.setMaterialMoreDetailList(materialMoreDetailList); @@ -113,11 +113,7 @@ public class ShelfMaterialDetailImpl extends ServiceImpl materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO); if (CollectionUtils.isEmpty(materialMoreDetailList)) { - AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId()); - if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { - List batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); - materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList); - } + materialMoreDetailList = loadTemplateMoreFromSystem(childrenDetailPO.getMaterialBaseInfoId()); } fillAttributeValueFromShelfMaterialDetail(childrenDetailPO, materialMoreDetailList); childrenDetailPO.setMaterialMoreDetailList(materialMoreDetailList); @@ -211,11 +207,7 @@ public class ShelfMaterialDetailImpl extends ServiceImpl materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO); if (CollectionUtils.isEmpty(materialMoreDetailList)) { - AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(row.getMaterialBaseInfoId()); - if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { - List batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); - materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList); - } + materialMoreDetailList = loadTemplateMoreFromSystem(row.getMaterialBaseInfoId()); } if (materialMoreDetailList == null) { materialMoreDetailList = new ArrayList<>(); @@ -224,6 +216,22 @@ public class ShelfMaterialDetailImpl extends ServiceImpl loadTemplateMoreFromSystem(Long materialBaseInfoId) { + if (materialBaseInfoId == null) { + return new ArrayList<>(); + } + AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(materialBaseInfoId); + if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) { + return new ArrayList<>(); + } + List batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); + batchList = ReceiptBatchDetailFilter.filterByMaterialGoodsRule(materialBaseInfoId, batchList, materialGoodsRuleService); + return filterAndConvertToMaterialMoreDetail(batchList); + } + /** * 过滤 isDisplay=1 的批次属性并转换为 MaterialMoreDetailPO,与收货/PC 端一致 */ diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java index 6990779be..387b5703c 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java @@ -44,6 +44,7 @@ import com.mhd.wms.domain.materialMoreDetail.repository.facade.IMaterialMoreDeta import com.mhd.wms.domain.materialMoreDetail.repository.po.MaterialMoreDetailPO; import com.mhd.wms.domain.materialMoreDetail.repository.todo.MaterialMoreDetailDO; import com.mhd.wms.domain.qualityInspection.repository.facade.IQualityInspectionService; +import com.mhd.wms.util.ReceiptBatchDetailFilter; import com.mhd.wms.domain.qualityInspection.repository.todo.QualityInspectionDO; import com.mhd.wms.domain.receiptMaterialDetail.entity.ReceiptMaterialDetail; import com.mhd.wms.domain.receiptMaterialDetail.repository.facade.IReceiptMaterialDetailService; @@ -303,6 +304,8 @@ public class StockReceiptOrderDomainService { return materialMoreDetailPOList; } List batchDetailFeignPOList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); + batchDetailFeignPOList = ReceiptBatchDetailFilter.filterByMaterialGoodsRule( + materialBaseInfoId, batchDetailFeignPOList, materialGoodsRuleService); if (CollectionUtils.isEmpty(batchDetailFeignPOList)) { return materialMoreDetailPOList; } From 3cefbecd698c1b21d1aead5b0b8c92c4f3a91c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 27 Apr 2026 13:39:17 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=89=B9=E6=AC=A1=E8=A7=84=E5=88=99?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/util/ReceiptBatchDetailFilter.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 mhd_wms/src/main/java/com/mhd/wms/util/ReceiptBatchDetailFilter.java diff --git a/mhd_wms/src/main/java/com/mhd/wms/util/ReceiptBatchDetailFilter.java b/mhd_wms/src/main/java/com/mhd/wms/util/ReceiptBatchDetailFilter.java new file mode 100644 index 000000000..d020b9f40 --- /dev/null +++ b/mhd_wms/src/main/java/com/mhd/wms/util/ReceiptBatchDetailFilter.java @@ -0,0 +1,43 @@ +package com.mhd.wms.util; + +import com.mhd.system.api.domain.BatchDetailFeignPO; +import com.mhd.wms.domain.materialGoodsRule.repository.facade.IMaterialGoodsRuleService; +import com.mhd.wms.domain.materialGoodsRule.repository.po.MaterialGoodsRulePO; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 收货单明细「批次更多属性」与物料商品规则对齐:只展示 material_goods_rule 中绑定的 batchId 下的批次属性,避免多批次模板并集导致几十条空壳。 + */ +public final class ReceiptBatchDetailFilter { + + private ReceiptBatchDetailFilter() { + } + + /** + * 按物料商品规则中的 batchId 过滤 system 返回的批次属性行。 + * 无商品规则或规则未绑定 batchId 时返回空列表(不展示跨批次模板的并集)。 + */ + public static List filterByMaterialGoodsRule( + Long materialBaseInfoId, + List fromSystem, + IMaterialGoodsRuleService materialGoodsRuleService) { + if (materialBaseInfoId == null) { + return fromSystem == null ? new ArrayList<>() : fromSystem; + } + if (CollectionUtils.isEmpty(fromSystem)) { + return new ArrayList<>(); + } + MaterialGoodsRulePO rule = materialGoodsRuleService.getInfoByMaterialBaseInfoIds(materialBaseInfoId); + if (rule == null || rule.getBatchId() == null) { + return new ArrayList<>(); + } + final Long targetBatchId = rule.getBatchId(); + return fromSystem.stream() + .filter(b -> b.getBatchId() != null && targetBatchId.equals(b.getBatchId())) + .collect(Collectors.toList()); + } +} From eb3d7ad0c821f6622dc94d8cbe60b8f46f60d078 Mon Sep 17 00:00:00 2001 From: zhaoqing <1670883518@qq.com> Date: Mon, 27 Apr 2026 14:29:13 +0800 Subject: [PATCH 3/8] =?UTF-8?q?tms-=E6=96=B0=E5=A2=9E/=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=8F=B8=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/service/UserDriverApplicationService.java | 5 ++++- .../com/mhd/user/interfaces/dto/addDTO/UserDriverDTO.java | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserDriverApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserDriverApplicationService.java index 85bde9bb1..ad7394719 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserDriverApplicationService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserDriverApplicationService.java @@ -460,7 +460,7 @@ public class UserDriverApplicationService { userDO.setAvatar(userDriverDO.getAvatar()); userDO.setUserAccount(userDriverDO.getUserAccount()); // 账号通常是手机号 userDO.setUserName(userDriverDO.getUserName()); // 真实姓名 - userDO.setUserPhone(userDriverDO.getUserAccount()); // 手机号 + userDO.setUserPhone(userDriverDO.getUserPhone()); // 手机号 userDO.setBusinessType(userDriverDO.getBusinessType()); // 业务类型已在 determineAndSetBusinessType 中确定 if (StringUtils.isBlank(userDO.getUserAccount())) { @@ -469,6 +469,9 @@ public class UserDriverApplicationService { if (StringUtils.isBlank(userDO.getUserName())) { throw new ServiceException("用户姓名不能为空"); } + if (StringUtils.isBlank(userDO.getUserPhone())) { + throw new ServiceException("用户电话不能为空"); + } UserPo newUserPo = userApplicationService.addDriverUser(userDO); userDriverDO.setUserId(newUserPo.getUserId()); // 回填新生成的userId到userDriverDO diff --git a/mhd-user-center/src/main/java/com/mhd/user/interfaces/dto/addDTO/UserDriverDTO.java b/mhd-user-center/src/main/java/com/mhd/user/interfaces/dto/addDTO/UserDriverDTO.java index 0aab9bcc2..5568c1264 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/interfaces/dto/addDTO/UserDriverDTO.java +++ b/mhd-user-center/src/main/java/com/mhd/user/interfaces/dto/addDTO/UserDriverDTO.java @@ -208,6 +208,8 @@ public class UserDriverDTO extends UserDTO { private String driverAuthByUsername; @ApiModelProperty(name = "司机用户姓名") private String userName; + @ApiModelProperty(name = "司机手机号") + private String userPhone; @ApiModelProperty(name = "司机审核时间") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") From 6df0c40d0bad8ec81504c3f54ae134e1b035aabe Mon Sep 17 00:00:00 2001 From: zhaoqing <1670883518@qq.com> Date: Mon, 27 Apr 2026 15:27:56 +0800 Subject: [PATCH 4/8] =?UTF-8?q?tms-=E6=96=B0=E5=A2=9E/=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E8=BD=A6=E9=98=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UserDriverEnterpriseApplicationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserDriverEnterpriseApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserDriverEnterpriseApplicationService.java index de18319c8..98b1cd0fa 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserDriverEnterpriseApplicationService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserDriverEnterpriseApplicationService.java @@ -612,7 +612,7 @@ public class UserDriverEnterpriseApplicationService { BeanUtils.copyProperties(userDriverEnterpriseDo, userDO, IgnoreNullUtil.getNullPropertyNames(userDriverEnterpriseDo)); // 关键信息设置 - userDO.setUserPhone(userDriverEnterpriseDo.getUserAccount()); // 手机号通常作为账号 + // userDO.setUserPhone(userDriverEnterpriseDo.getUserAccount()); // 手机号通常作为账号 // userDO.setUserName(userDriverEnterpriseDo.getEnterpriseName()); // 或其他表示用户名的字段 if (userDriverEnterpriseDo.getUserId() == null) { From 1ea3f13a995009087473a4356dbf2bcbdc9e3fdc Mon Sep 17 00:00:00 2001 From: zhaoqing <1670883518@qq.com> Date: Mon, 27 Apr 2026 18:04:29 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE-?= =?UTF-8?q?=E5=A7=94=E6=89=98=E6=96=B9=E7=AE=A1=E7=90=86-=E8=81=94?= =?UTF-8?q?=E7=B3=BB=E6=96=B9=E5=BC=8F/=E7=99=BB=E5=BD=95=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E7=9B=B8=E5=85=B3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserShipperApplicationService.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperApplicationService.java index 54a97909f..94c6cec03 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperApplicationService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperApplicationService.java @@ -322,6 +322,8 @@ public class UserShipperApplicationService { //========================用户注册=========================== UserDO userDO = new UserDO(); userDO.setAvatar(userShipperDO.getAvatar()); + //账号唯一性检验 + checkUserAccountUnique(userShipperDO.getUserAccount(),null,configSwitch.getTopOrganizationId()); userDO.setUserAccount(userShipperDO.getUserAccount()); userDO.setUserName(userShipperDO.getUserName()); userDO.setUserId(userShipperDO.getUserId()); @@ -333,7 +335,8 @@ public class UserShipperApplicationService { userDO.setRoleName(roleName); } - userDO.setUserPhone(userShipperDO.getUserAccount()); + + userDO.setUserPhone(userShipperDO.getUserPhone()); userShipperDO.setShipperType(1); userShipperDO.setDelFlag(1); @@ -1182,4 +1185,29 @@ public class UserShipperApplicationService { // 根据userId查询货主信息 return userShipperDomainService.selectByUserId(userId); } + + + /** + * 校验登录账号唯一性 + * @param userAccount 登录账号 + * @param userId 用户ID(编辑时传入,用于排除自身;新增时传null) + * @param topOrganizationId 顶级组织ID + */ + private void checkUserAccountUnique(String userAccount, Long userId, Long topOrganizationId) { + if (StringUtils.isBlank(userAccount)) { + return; // 账号为空,不校验 + } + + UserDO checkDO = new UserDO(); + checkDO.setTopOrganizationId(topOrganizationId); + checkDO.setUserAccount(userAccount); + checkDO.setUserId(userId); + + UserPo existUser = userDomainService.findByTopOrganizationIdAndUserAccount(checkDO); + if (existUser != null) { + throw new ServiceException("登录账号已存在"); + } + } + + } \ No newline at end of file From 71e418862257baedd151c9a8a443995e208189be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com> Date: Mon, 27 Apr 2026 18:58:40 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=B8=8A=E6=9E=B6=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/persistence/MaterialInventoryImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/persistence/MaterialInventoryImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/persistence/MaterialInventoryImpl.java index 9a5be85bc..6d3ef620f 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/persistence/MaterialInventoryImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/persistence/MaterialInventoryImpl.java @@ -868,10 +868,10 @@ public class MaterialInventoryImpl extends ServiceImpl Date: Tue, 28 Apr 2026 09:44:05 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=8D=95=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=85=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/persistence/BusinessDocumentOrderImpl.java | 4 ++-- .../com/mhd/oms/domain/executeOrder/entity/ExecuteOrder.java | 3 +++ .../executeOrder/repository/persistence/ExecuteOrderImpl.java | 4 +++- .../oms/domain/executeOrder/repository/po/ExecuteOrderPO.java | 3 +++ .../domain/executeOrder/repository/todo/ExecuteOrderDO.java | 3 +++ .../mhd/oms/interfaces/dto/executeOrder/ExecuteOrderDTO.java | 3 +++ .../main/resources/mapper/executeOrder/ExecuteOrderMapper.xml | 3 +++ 7 files changed, 20 insertions(+), 3 deletions(-) diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/persistence/BusinessDocumentOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/persistence/BusinessDocumentOrderImpl.java index 325fc6e98..fcccc579e 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/persistence/BusinessDocumentOrderImpl.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/persistence/BusinessDocumentOrderImpl.java @@ -230,6 +230,7 @@ public class BusinessDocumentOrderImpl extends ServiceImpl ids,Long organizationId) { LoginUser loginUser = SecurityUtils.getLoginUser();//获取登录人 + String orgName = executeOrderMapper.getOrgNameByOrgId(organizationId); try { for (Long id:ids){ BusinessDocumentOrder businessDocumentOrder=businessDocumentOrderMapper.selectById(id); @@ -283,6 +284,7 @@ public class BusinessDocumentOrderImpl extends ServiceImpl ids,Long organizationId) { LoginUser loginUser = SecurityUtils.getLoginUser();//获取登录人 + String orgName = executeOrderMapper.getOrgNameByOrgId(organizationId); for (Long id:ids){ ExecuteOrder executeOrder=executeOrderMapper.selectById(id); if (ObjectUtil.isNotNull(executeOrder)){ @@ -128,6 +129,7 @@ public class ExecuteOrderImpl extends ServiceImpl businessDocumentCargoMultiList; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executeOrder/repository/todo/ExecuteOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executeOrder/repository/todo/ExecuteOrderDO.java index 48d26f903..f4c0ace26 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executeOrder/repository/todo/ExecuteOrderDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executeOrder/repository/todo/ExecuteOrderDO.java @@ -141,4 +141,7 @@ public class ExecuteOrderDO extends BaseVOEntity{ @ApiModelProperty("备注") private String shippingNote; + + @ApiModelProperty("业务单元") + private String businessUnit; } diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/executeOrder/ExecuteOrderDTO.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/executeOrder/ExecuteOrderDTO.java index b237cabd0..d7577a2c4 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/executeOrder/ExecuteOrderDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/executeOrder/ExecuteOrderDTO.java @@ -134,4 +134,7 @@ public class ExecuteOrderDTO extends BaseVOEntity{ @ApiModelProperty("预计出发日期") private Date layDate; + + @ApiModelProperty("业务单元") + private String businessUnit; } diff --git a/mhd_oms/src/main/resources/mapper/executeOrder/ExecuteOrderMapper.xml b/mhd_oms/src/main/resources/mapper/executeOrder/ExecuteOrderMapper.xml index bb2ef2c36..7f3759e00 100644 --- a/mhd_oms/src/main/resources/mapper/executeOrder/ExecuteOrderMapper.xml +++ b/mhd_oms/src/main/resources/mapper/executeOrder/ExecuteOrderMapper.xml @@ -72,6 +72,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and GOODS_NUMBER like concat('%', #{goodsNumber}, '%') + + and BUSINESS_UNIT like concat('%', #{businessUnit}, '%') + and ORG_NAME like concat('%', #{orgName}, '%') From 99f086fdfa0c723484c6f5322f795c1c7fc46378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com> Date: Tue, 28 Apr 2026 10:52:03 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=B8=8A=E6=9E=B6=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/ReservationMaterialInventoryImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java index f1dbc09dd..b981c3f79 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java @@ -498,10 +498,10 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl