From 50bb444d83d0de8d7c6c9b2b25eb761b7af39a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Sat, 13 Jun 2026 13:29:31 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=AE=A2=E5=95=86=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9F=A5=E8=AF=A2BUG=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserShipperMasterDataSyncService.java | 74 ++++++++----------- .../MdmMasterDataApplicationService.java | 29 +++++++- .../mapper/deliveTask/DeliveTaskMapper.xml | 45 ----------- 3 files changed, 58 insertions(+), 90 deletions(-) diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java index 8b81a645a..7b4fe989c 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java @@ -6,6 +6,7 @@ import com.mhd.common.core.constant.Constants; import com.mhd.common.core.domain.thirdparty.MdmMerchantQueryDTO; import com.mhd.common.core.domain.thirdparty.MdmMerchantQueryResultDTO; import com.mhd.common.core.domain.thirdparty.MdmMerchantRecordDTO; +import com.mhd.common.core.domain.thirdparty.MdmMerchantSyncFilter; import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.feign.ThirdPartyServiceFeign; import com.mhd.common.core.utils.StringUtils; @@ -36,8 +37,6 @@ public class UserShipperMasterDataSyncService { /** MDM 单页条数,不宜过大以免 MDM/Feign 超时 */ private static final int PAGE_SIZE = 100; private static final long SYNC_LOCK_MINUTES = 30; - /** MDM desc3:是否客户 */ - private static final String MDM_FLAG_YES = "1"; @Resource private ThirdPartyServiceFeign thirdPartyServiceFeign; @@ -135,6 +134,10 @@ public class UserShipperMasterDataSyncService { Map existingMap = userShipperApplicationService.loadMasterDataSyncShipperMap(organizationId); String maxModifyTime = lastModifyRecordTime; + int skipOrgMismatch = 0; + int skipNotCustomer = 0; + int skipDisabled = 0; + int skipOther = 0; int currentPage = 1; Integer totalPages = null; do { @@ -144,17 +147,28 @@ public class UserShipperMasterDataSyncService { break; } for (MdmMerchantRecordDTO record : pageData.getDataInfo()) { - if (!shouldSyncRecord(record, orgNcCode)) { + MdmMerchantSyncFilter.SkipReason skipReason = MdmMerchantSyncFilter.resolveSkipReason(record, orgNcCode); + if (skipReason != null) { resultVo.setSkipCount(resultVo.getSkipCount() + 1); + switch (skipReason) { + case ORG_MISMATCH: + skipOrgMismatch++; + break; + case NOT_CUSTOMER: + skipNotCustomer++; + break; + case DISABLED: + skipDisabled++; + break; + default: + skipOther++; + break; + } continue; } try { String ncCode = trimToEmpty(record.getCode()); String companyName = trimToEmpty(record.getDesc1()); - if (StringUtils.isEmpty(ncCode) || StringUtils.isEmpty(companyName)) { - resultVo.setSkipCount(resultVo.getSkipCount() + 1); - continue; - } String matchKey = UserShipperApplicationService.buildMasterDataMatchKey(ncCode, companyName); UserShipperPo existing = existingMap.get(matchKey); if (existing == null) { @@ -186,7 +200,8 @@ public class UserShipperMasterDataSyncService { Date now = new Date(); resultVo.setLastSyncTime(now); - saveSyncWatermark(organizationId, maxModifyTime, now, resultVo); + saveSyncWatermark(organizationId, orgNcCode, maxModifyTime, now, resultVo, + skipOrgMismatch, skipNotCustomer, skipDisabled, skipOther); return resultVo; } @@ -208,31 +223,9 @@ public class UserShipperMasterDataSyncService { return response.getData(); } - /** - * 同步过滤:MDM 查询侧 DESC24 无法精确过滤,必须在应用侧严格筛选。 - */ - private boolean shouldSyncRecord(MdmMerchantRecordDTO record, String orgNcCode) { - if (record == null || StringUtils.isEmpty(record.getCode())) { - return false; - } - // 仅同步客户(desc3=是否客户) - if (!MDM_FLAG_YES.equals(trimToEmpty(record.getDesc3()))) { - return false; - } - // 对应组织编码必须等于当前组织 NC,空值不同步 - String recordOrgNc = trimToEmpty(record.getDesc24()); - if (StringUtils.isEmpty(recordOrgNc) || !orgNcCode.equals(recordOrgNc)) { - return false; - } - // 跳过本组织主体(code 与组织 NC 相同,多为内部单位而非外部客商) - if (orgNcCode.equals(trimToEmpty(record.getCode()))) { - return false; - } - return !isDisabled(record); - } - - private void saveSyncWatermark(Long organizationId, String maxModifyTime, Date syncTime, - ShipperMasterDataSyncResultVo resultVo) { + private void saveSyncWatermark(Long organizationId, String orgNcCode, String maxModifyTime, Date syncTime, + ShipperMasterDataSyncResultVo resultVo, + int skipOrgMismatch, int skipNotCustomer, int skipDisabled, int skipOther) { UserShipperMdmSyncEntity entity = userShipperMdmSyncMapper.selectByOrganizationId(organizationId); if (entity == null) { entity = new UserShipperMdmSyncEntity(); @@ -244,8 +237,10 @@ public class UserShipperMasterDataSyncService { } entity.setLastSyncTime(syncTime); entity.setSyncStatus(resultVo.getFailCount() > 0 ? 2 : 1); - entity.setSyncMessage(String.format("新增%d,更新%d,跳过%d,失败%d", - resultVo.getAddCount(), resultVo.getUpdateCount(), resultVo.getSkipCount(), resultVo.getFailCount())); + entity.setSyncMessage(String.format( + "新增%d,更新%d,跳过%d,失败%d;组织NC=%s;跳过明细[组织不匹配:%d,非客户:%d,停用:%d,其他:%d]", + resultVo.getAddCount(), resultVo.getUpdateCount(), resultVo.getSkipCount(), resultVo.getFailCount(), + orgNcCode, skipOrgMismatch, skipNotCustomer, skipDisabled, skipOther)); entity.setUpdateTime(syncTime); if (entity.getId() == null) { userShipperMdmSyncMapper.insert(entity); @@ -269,15 +264,6 @@ public class UserShipperMasterDataSyncService { return orgJson.has("ncCode") ? orgJson.getString("ncCode") : null; } - private boolean isDisabled(MdmMerchantRecordDTO record) { - if (StringUtils.isEmpty(record.getDesc30())) { - return false; - } - String status = record.getDesc30().trim(); - // 2=启用;0/3/否/停用 视为停用(结合 MDM 样例数据) - return "否".equals(status) || "停用".equals(status) || "0".equals(status) || "3".equals(status); - } - private String trimToEmpty(String value) { return value == null ? "" : value.trim(); } diff --git a/mhd_thrid_party/src/main/java/com/linke/thirdParty/application/server/MdmMasterDataApplicationService.java b/mhd_thrid_party/src/main/java/com/linke/thirdParty/application/server/MdmMasterDataApplicationService.java index c36a9a003..6fb4e435f 100644 --- a/mhd_thrid_party/src/main/java/com/linke/thirdParty/application/server/MdmMasterDataApplicationService.java +++ b/mhd_thrid_party/src/main/java/com/linke/thirdParty/application/server/MdmMasterDataApplicationService.java @@ -8,6 +8,7 @@ import com.linke.thirdParty.domain.departInterfaceInfo.repository.mapper.SysDepa import com.mhd.common.core.domain.thirdparty.MdmMerchantQueryDTO; import com.mhd.common.core.domain.thirdparty.MdmMerchantQueryResultDTO; import com.mhd.common.core.domain.thirdparty.MdmMerchantRecordDTO; +import com.mhd.common.core.domain.thirdparty.MdmMerchantSyncFilter; import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.utils.StringUtils; import lombok.extern.slf4j.Slf4j; @@ -23,6 +24,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; /** * 北京三维天地 MDM 客商主数据查询 @@ -43,7 +45,32 @@ public class MdmMasterDataApplicationService { log.info("MDM客商查询请求 orgNcCode={}, page={}, lastTime={}", queryDTO.getOrgNcCode(), queryDTO.getCurrentPage(), queryDTO.getLastModifyRecordTime()); String responseBody = doPost(config.url, config.usercode, config.password, requestBody); - return parseResponse(responseBody); + MdmMerchantQueryResultDTO result = parseResponse(responseBody); + return applyOrgFilter(queryDTO, result); + } + + /** + * MDM 对 DESC24 条件未严格过滤,按 orgNcCode 在应用侧二次过滤并修正分页描述。 + */ + private MdmMerchantQueryResultDTO applyOrgFilter(MdmMerchantQueryDTO queryDTO, MdmMerchantQueryResultDTO result) { + if (result == null || StringUtils.isEmpty(queryDTO.getOrgNcCode()) + || result.getDataInfo() == null || result.getDataInfo().isEmpty()) { + return result; + } + String orgNcCode = queryDTO.getOrgNcCode().trim(); + int rawCount = result.getDataInfo().size(); + List filtered = result.getDataInfo().stream() + .filter(record -> MdmMerchantSyncFilter.belongsToOrg(record.getDesc24(), orgNcCode)) + .collect(Collectors.toList()); + result.setDataInfo(filtered); + if (rawCount != filtered.size()) { + String note = String.format("(MDM原始%d条,按DESC24=%s过滤后%d条;MDM总条数totalNumber为未过滤全库统计)", + rawCount, orgNcCode, filtered.size()); + result.setDesc(StringUtils.isEmpty(result.getDesc()) ? note : result.getDesc() + note); + log.info("MDM客商查询应用侧过滤 orgNcCode={}, rawPageSize={}, filteredPageSize={}, mdmTotalNumber={}", + orgNcCode, rawCount, filtered.size(), result.getTotalNumber()); + } + return result; } private MdmConfig loadConfig() { diff --git a/mhd_wms/src/main/resources/mapper/deliveTask/DeliveTaskMapper.xml b/mhd_wms/src/main/resources/mapper/deliveTask/DeliveTaskMapper.xml index de30424e6..7d35518b4 100644 --- a/mhd_wms/src/main/resources/mapper/deliveTask/DeliveTaskMapper.xml +++ b/mhd_wms/src/main/resources/mapper/deliveTask/DeliveTaskMapper.xml @@ -69,49 +69,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and (operators_name IS NULL OR operators_name = '') - - - and NOT ( - (task_type = 1 AND EXISTS ( - SELECT 1 FROM stock_receipt_order biz - WHERE biz.receipt_order_number = delive_task.tracking_number AND biz.del_flag = 1 - AND (biz.status >= 2 OR (biz.operators_by IS NOT NULL AND biz.operators_by != 0)) - )) - OR (task_type = 2 AND EXISTS ( - SELECT 1 FROM stock_shelf_order biz - WHERE biz.shelf_order_number = delive_task.tracking_number AND biz.del_flag = 1 - AND (biz.status >= 2 OR (biz.operators_by IS NOT NULL AND biz.operators_by != 0)) - )) - OR (task_type = 3 AND EXISTS ( - SELECT 1 FROM stock_out_task_order biz - WHERE biz.task_number = delive_task.tracking_number AND biz.del_flag = 1 - AND (biz.status >= 2 OR (biz.operators_by IS NOT NULL AND biz.operators_by != 0)) - )) - OR (task_type = 4 AND ( - EXISTS ( - SELECT 1 FROM review_order biz - WHERE biz.review_order_number = delive_task.tracking_number AND biz.del_flag = 1 - AND biz.review_status >= 2 - ) - OR EXISTS ( - SELECT 1 FROM stock_out_order biz - WHERE biz.out_order_number = delive_task.tracking_number AND biz.del_flag = 1 - AND (biz.check_status >= 2 OR (biz.check_operators_by IS NOT NULL AND biz.check_operators_by != 0)) - ) - )) - OR (task_type = 5 AND EXISTS ( - SELECT 1 FROM shift_manage biz - WHERE biz.shift_number = delive_task.tracking_number AND biz.del_flag = 1 - AND (biz.shift_status >= 3 OR (biz.operators_by IS NOT NULL AND biz.operators_by != 0)) - )) - OR (task_type = 6 AND EXISTS ( - SELECT 1 FROM investigation_manage biz - WHERE biz.investigation_number = delive_task.tracking_number AND biz.del_flag = 1 - AND (biz.investigation_status >= 3 OR (biz.operators_by IS NOT NULL AND biz.operators_by != 0)) - )) - ) - - del_flag = 1 @@ -257,7 +214,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - @@ -443,7 +399,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHERE del_flag = 1 - ) taskSum From c83596a5e07ab2243408b9e4be982af58e6aa759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Sat, 13 Jun 2026 13:30:49 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=AE=A2=E5=95=86=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9F=A5=E8=AF=A2BUG=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/MdmMerchantSyncFilter.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java new file mode 100644 index 000000000..96645e9f0 --- /dev/null +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java @@ -0,0 +1,71 @@ +package com.mhd.common.core.domain.thirdparty; + +import com.mhd.common.core.utils.StringUtils; + +/** + * MDM 客商应用侧过滤(MDM 查询条件 DESC24 在对方接口侧未严格生效,需本地过滤) + */ +public final class MdmMerchantSyncFilter { + + private static final String MDM_FLAG_YES = "1"; + + private MdmMerchantSyncFilter() { + } + + public enum SkipReason { + EMPTY_CODE, + NOT_CUSTOMER, + ORG_MISMATCH, + DISABLED, + MISSING_NAME + } + + public static boolean belongsToOrg(String recordDesc24, String orgNcCode) { + if (StringUtils.isEmpty(orgNcCode)) { + return true; + } + return orgNcCode.equals(trim(recordDesc24)); + } + + public static boolean isCustomer(MdmMerchantRecordDTO record) { + return record != null && MDM_FLAG_YES.equals(trim(record.getDesc3())); + } + + public static boolean isDisabled(MdmMerchantRecordDTO record) { + if (record == null || StringUtils.isEmpty(record.getDesc30())) { + return false; + } + String status = record.getDesc30().trim(); + return "否".equals(status) || "停用".equals(status) || "0".equals(status) || "3".equals(status); + } + + /** + * 判断是否应同步到委托方列表 + */ + public static boolean shouldSync(MdmMerchantRecordDTO record, String orgNcCode) { + return resolveSkipReason(record, orgNcCode) == null; + } + + public static SkipReason resolveSkipReason(MdmMerchantRecordDTO record, String orgNcCode) { + if (record == null || StringUtils.isEmpty(record.getCode())) { + return SkipReason.EMPTY_CODE; + } + if (!isCustomer(record)) { + return SkipReason.NOT_CUSTOMER; + } + if (!belongsToOrg(record.getDesc24(), orgNcCode)) { + return SkipReason.ORG_MISMATCH; + } + if (StringUtils.isEmpty(trim(record.getDesc1()))) { + return SkipReason.MISSING_NAME; + } + if (isDisabled(record)) { + return SkipReason.DISABLED; + } + return null; + } + + private static String trim(String value) { + return value == null ? "" : value.trim(); + } +} From 578e3b34d4cf0df51855b47a91eae4a5d7c92cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Sat, 13 Jun 2026 14:28:07 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=AE=A2=E5=95=86=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9F=A5=E8=AF=A2BUG=E4=BF=AE=E6=94=B91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...AsyncUserShipperMasterDataSyncService.java | 24 +++++++++++++++++++ .../UserShipperMasterDataSyncService.java | 8 +++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/AsyncUserShipperMasterDataSyncService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/AsyncUserShipperMasterDataSyncService.java index cfb560391..64f370c75 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/AsyncUserShipperMasterDataSyncService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/AsyncUserShipperMasterDataSyncService.java @@ -1,5 +1,7 @@ package com.mhd.user.application.service; +import com.mhd.common.core.constant.SecurityConstants; +import com.mhd.common.core.context.SecurityContextHolder; import com.mhd.common.redis.service.RedisLock; import com.mhd.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; @@ -23,12 +25,34 @@ public class AsyncUserShipperMasterDataSyncService { public void syncMasterDataAsync(LoginUser loginUser, String lockKey) { Long organizationId = loginUser.getUserPo().getOrganizationId(); try { + bindLoginUser(loginUser); userShipperMasterDataSyncService.executeSync(loginUser); } catch (Exception e) { log.error("异步同步主数据失败, organizationId={}", organizationId, e); userShipperMasterDataSyncService.markSyncFailed(organizationId, e.getMessage()); } finally { + SecurityContextHolder.remove(); redisLock.unlock(lockKey); } } + + /** + * 异步线程无 HTTP 请求上下文,需手动注入 LoginUser 供 addUser/authShipper 等使用。 + */ + private void bindLoginUser(LoginUser loginUser) { + SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser); + if (loginUser.getUserid() != null) { + SecurityContextHolder.setUserId(String.valueOf(loginUser.getUserid())); + } else if (loginUser.getUserPo() != null && loginUser.getUserPo().getUserId() != null) { + SecurityContextHolder.setUserId(String.valueOf(loginUser.getUserPo().getUserId())); + } + if (loginUser.getUsername() != null) { + SecurityContextHolder.setUserName(loginUser.getUsername()); + } else if (loginUser.getUserPo() != null) { + SecurityContextHolder.setUserName(loginUser.getUserPo().getUserAccount()); + } + if (loginUser.getToken() != null) { + SecurityContextHolder.setUserKey(loginUser.getToken()); + } + } } diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java index 7b4fe989c..4269d1cd3 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java @@ -237,10 +237,14 @@ public class UserShipperMasterDataSyncService { } entity.setLastSyncTime(syncTime); entity.setSyncStatus(resultVo.getFailCount() > 0 ? 2 : 1); - entity.setSyncMessage(String.format( + String syncMessage = String.format( "新增%d,更新%d,跳过%d,失败%d;组织NC=%s;跳过明细[组织不匹配:%d,非客户:%d,停用:%d,其他:%d]", resultVo.getAddCount(), resultVo.getUpdateCount(), resultVo.getSkipCount(), resultVo.getFailCount(), - orgNcCode, skipOrgMismatch, skipNotCustomer, skipDisabled, skipOther)); + orgNcCode, skipOrgMismatch, skipNotCustomer, skipDisabled, skipOther); + if (resultVo.getFailCount() > 0 && !resultVo.getErrorMessages().isEmpty()) { + syncMessage += ";" + resultVo.getErrorMessages().get(0); + } + entity.setSyncMessage(syncMessage); entity.setUpdateTime(syncTime); if (entity.getId() == null) { userShipperMdmSyncMapper.insert(entity); From 192a406682d88c9b50ba76b853afd067546cd217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Sat, 13 Jun 2026 15:06:37 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=AE=A2=E5=95=86=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9F=A5=E8=AF=A2BUG=E4=BF=AE=E6=94=B91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/MdmMerchantSyncFilter.java | 4 +++ .../UserShipperApplicationService.java | 31 +++++++++++++++++-- .../UserShipperMasterDataSyncService.java | 13 +++++--- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java index 96645e9f0..bc3d6152b 100644 --- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java @@ -15,6 +15,7 @@ public final class MdmMerchantSyncFilter { public enum SkipReason { EMPTY_CODE, NOT_CUSTOMER, + INTERNAL_ORG, ORG_MISMATCH, DISABLED, MISSING_NAME @@ -53,6 +54,9 @@ public final class MdmMerchantSyncFilter { if (!isCustomer(record)) { return SkipReason.NOT_CUSTOMER; } + if (StringUtils.isNotEmpty(orgNcCode) && orgNcCode.equals(trim(record.getCode()))) { + return SkipReason.INTERNAL_ORG; + } if (!belongsToOrg(record.getDesc24(), orgNcCode)) { return SkipReason.ORG_MISMATCH; } 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 fcbdb5536..4ae04a124 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 @@ -1378,7 +1378,7 @@ public class UserShipperApplicationService { authShipper(userShipperDO); UserShipperEntity shipperEntity = userShipperDomainService.findShipperByUserId(user.getUserId()); - wlhyDomainService.addShipperUserInfo(shipperEntity); + syncWlhyShipperSafely(shipperEntity, record.getCode()); } @Transactional(rollbackFor = Exception.class) @@ -1388,7 +1388,34 @@ public class UserShipperApplicationService { userShipperDO.setDataSource(1); userShipperDO.setShipperId(existing.getShipperId()); userShipperDO.setUserId(existing.getUserId()); - updateShipper(userShipperDO); + updateShipperFromMasterData(userShipperDO, record.getCode()); + } + + /** + * MDM 同步:本地更新成功后同步网货,网货失败仅记日志,不阻断主数据同步。 + */ + private void updateShipperFromMasterData(UserShipperDO userShipperDO, String customerCode) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + UserPo loginUserPo = loginUser.getUserPo(); + userShipperDO.setUpdateBy(loginUserPo.getUserId()); + userShipperDO.setUpdateByName(loginUserPo.getUserName()); + userShipperDO.setUpdateTime(new Date()); + updateUserInformation(userShipperDO); + userShipperDomainService.saveUserShipper(userShipperDO); + UserShipperEntity shipperEntity = userShipperDomainService.findShipperByUserId(userShipperDO.getUserId()); + syncWlhyShipperSafely(shipperEntity, customerCode); + } + + private void syncWlhyShipperSafely(UserShipperEntity shipperEntity, String customerCode) { + try { + wlhyDomainService.addShipperUserInfo(shipperEntity); + } catch (Exception e) { + log.warn("MDM同步委托方本地保存成功,同步网货失败(不影响主数据同步), CODE={}, userId={}, msg={}", + customerCode, shipperEntity.getUserId(), e.getMessage(), e); + } } private UserShipperDO buildShipperDOFromMasterData(MdmMerchantRecordDTO record, LoginUser loginUser) { diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java index 4269d1cd3..4f7e1ebe9 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java @@ -136,6 +136,7 @@ public class UserShipperMasterDataSyncService { String maxModifyTime = lastModifyRecordTime; int skipOrgMismatch = 0; int skipNotCustomer = 0; + int skipInternalOrg = 0; int skipDisabled = 0; int skipOther = 0; int currentPage = 1; @@ -157,6 +158,9 @@ public class UserShipperMasterDataSyncService { case NOT_CUSTOMER: skipNotCustomer++; break; + case INTERNAL_ORG: + skipInternalOrg++; + break; case DISABLED: skipDisabled++; break; @@ -201,7 +205,7 @@ public class UserShipperMasterDataSyncService { Date now = new Date(); resultVo.setLastSyncTime(now); saveSyncWatermark(organizationId, orgNcCode, maxModifyTime, now, resultVo, - skipOrgMismatch, skipNotCustomer, skipDisabled, skipOther); + skipOrgMismatch, skipNotCustomer, skipInternalOrg, skipDisabled, skipOther); return resultVo; } @@ -225,7 +229,8 @@ public class UserShipperMasterDataSyncService { private void saveSyncWatermark(Long organizationId, String orgNcCode, String maxModifyTime, Date syncTime, ShipperMasterDataSyncResultVo resultVo, - int skipOrgMismatch, int skipNotCustomer, int skipDisabled, int skipOther) { + int skipOrgMismatch, int skipNotCustomer, int skipInternalOrg, + int skipDisabled, int skipOther) { UserShipperMdmSyncEntity entity = userShipperMdmSyncMapper.selectByOrganizationId(organizationId); if (entity == null) { entity = new UserShipperMdmSyncEntity(); @@ -238,9 +243,9 @@ public class UserShipperMasterDataSyncService { entity.setLastSyncTime(syncTime); entity.setSyncStatus(resultVo.getFailCount() > 0 ? 2 : 1); String syncMessage = String.format( - "新增%d,更新%d,跳过%d,失败%d;组织NC=%s;跳过明细[组织不匹配:%d,非客户:%d,停用:%d,其他:%d]", + "新增%d,更新%d,跳过%d,失败%d;组织NC=%s;跳过明细[组织不匹配:%d,非客户:%d,内部单位:%d,停用:%d,其他:%d]", resultVo.getAddCount(), resultVo.getUpdateCount(), resultVo.getSkipCount(), resultVo.getFailCount(), - orgNcCode, skipOrgMismatch, skipNotCustomer, skipDisabled, skipOther); + orgNcCode, skipOrgMismatch, skipNotCustomer, skipInternalOrg, skipDisabled, skipOther); if (resultVo.getFailCount() > 0 && !resultVo.getErrorMessages().isEmpty()) { syncMessage += ";" + resultVo.getErrorMessages().get(0); } From 72e54bb21994b6519664e078fbffc3cce561dbe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Sat, 13 Jun 2026 15:39:29 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=AE=A2=E5=95=86=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/MdmMerchantQueryDTO.java | 3 + .../thirdparty/MdmMerchantSyncFilter.java | 53 ++++++++++++++- .../UserShipperApplicationService.java | 24 ++++--- .../UserShipperMasterDataSyncService.java | 65 ++++++++++++++++--- .../MdmMasterDataApplicationService.java | 7 +- 5 files changed, 131 insertions(+), 21 deletions(-) diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantQueryDTO.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantQueryDTO.java index 69ccb3cbd..8a597732c 100644 --- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantQueryDTO.java +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantQueryDTO.java @@ -27,4 +27,7 @@ public class MdmMerchantQueryDTO implements Serializable { @ApiModelProperty("一级组织ID,用于读取三方接口配置") private Long topOrganizationId; + + @ApiModelProperty("当前同步组织ID,用于 desc24 为空时判定南光组织体系") + private Long syncOrganizationId; } diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java index bc3d6152b..6b152d649 100644 --- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/thirdparty/MdmMerchantSyncFilter.java @@ -9,6 +9,9 @@ public final class MdmMerchantSyncFilter { private static final String MDM_FLAG_YES = "1"; + /** 南光组织 ID,仅南光本组织(2827)同步时 desc24 为空写入该组织 */ + public static final Long NANGUANG_ORGANIZATION_ID = 2827L; + private MdmMerchantSyncFilter() { } @@ -22,10 +25,44 @@ public final class MdmMerchantSyncFilter { } public static boolean belongsToOrg(String recordDesc24, String orgNcCode) { + return belongsToOrg(recordDesc24, orgNcCode, null, null); + } + + /** + * desc24 与 orgNcCode 一致则匹配;desc24 为空仅当同步组织为南光(2827)时匹配。 + */ + public static boolean belongsToOrg(String recordDesc24, String orgNcCode, + Long syncOrganizationId, Long topOrganizationId) { if (StringUtils.isEmpty(orgNcCode)) { return true; } - return orgNcCode.equals(trim(recordDesc24)); + String desc24 = trim(recordDesc24); + if (orgNcCode.equals(desc24)) { + return true; + } + if (StringUtils.isEmpty(desc24)) { + return isNanguangOrganization(syncOrganizationId); + } + return false; + } + + /** 是否南光本组织(不含下级组织) */ + public static boolean isNanguangOrganization(Long syncOrganizationId) { + return NANGUANG_ORGANIZATION_ID.equals(syncOrganizationId); + } + + public static boolean isEmptyDesc24(String recordDesc24) { + return StringUtils.isEmpty(trim(recordDesc24)); + } + + /** + * desc24 为空且由南光本组织(2827)发起同步时,写入南光组织;否则写入当前同步组织。 + */ + public static Long resolveSaveOrganizationId(MdmMerchantRecordDTO record, Long syncOrganizationId) { + if (record != null && isEmptyDesc24(record.getDesc24()) && isNanguangOrganization(syncOrganizationId)) { + return NANGUANG_ORGANIZATION_ID; + } + return syncOrganizationId; } public static boolean isCustomer(MdmMerchantRecordDTO record) { @@ -44,10 +81,20 @@ public final class MdmMerchantSyncFilter { * 判断是否应同步到委托方列表 */ public static boolean shouldSync(MdmMerchantRecordDTO record, String orgNcCode) { - return resolveSkipReason(record, orgNcCode) == null; + return resolveSkipReason(record, orgNcCode, null, null) == null; + } + + public static boolean shouldSync(MdmMerchantRecordDTO record, String orgNcCode, + Long syncOrganizationId, Long topOrganizationId) { + return resolveSkipReason(record, orgNcCode, syncOrganizationId, topOrganizationId) == null; } public static SkipReason resolveSkipReason(MdmMerchantRecordDTO record, String orgNcCode) { + return resolveSkipReason(record, orgNcCode, null, null); + } + + public static SkipReason resolveSkipReason(MdmMerchantRecordDTO record, String orgNcCode, + Long syncOrganizationId, Long topOrganizationId) { if (record == null || StringUtils.isEmpty(record.getCode())) { return SkipReason.EMPTY_CODE; } @@ -57,7 +104,7 @@ public final class MdmMerchantSyncFilter { if (StringUtils.isNotEmpty(orgNcCode) && orgNcCode.equals(trim(record.getCode()))) { return SkipReason.INTERNAL_ORG; } - if (!belongsToOrg(record.getDesc24(), orgNcCode)) { + if (!belongsToOrg(record.getDesc24(), orgNcCode, syncOrganizationId, topOrganizationId)) { return SkipReason.ORG_MISMATCH; } if (StringUtils.isEmpty(trim(record.getDesc1()))) { 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 4ae04a124..2c24e056d 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 @@ -1341,14 +1341,17 @@ public class UserShipperApplicationService { } @Transactional(rollbackFor = Exception.class) - public void addEnterpriseShipperFromMasterData(MdmMerchantRecordDTO record, LoginUser loginUser) { + public void addEnterpriseShipperFromMasterData(MdmMerchantRecordDTO record, LoginUser loginUser, + Long targetOrganizationId, String targetOrganizationName, + Long targetTopOrganizationId) { validateMasterDataRecord(record); UserConfigSwitchPo configSwitch = commonApplicationService.getUserConfigSwitch(); if (ObjectUtil.isNull(configSwitch)) { throw new ServiceException("获取组织配置失败"); } - UserShipperDO userShipperDO = buildShipperDOFromMasterData(record, loginUser); + UserShipperDO userShipperDO = buildShipperDOFromMasterData(record, loginUser, + targetOrganizationId, targetOrganizationName, targetTopOrganizationId); userShipperDO.setDataSource(1); userShipperDO.setShipperType(2); userShipperDO.setBusinessType(1); @@ -1382,9 +1385,12 @@ public class UserShipperApplicationService { } @Transactional(rollbackFor = Exception.class) - public void updateEnterpriseShipperFromMasterData(MdmMerchantRecordDTO record, UserShipperPo existing, LoginUser loginUser) { + public void updateEnterpriseShipperFromMasterData(MdmMerchantRecordDTO record, UserShipperPo existing, + LoginUser loginUser, Long targetOrganizationId, + String targetOrganizationName, Long targetTopOrganizationId) { validateMasterDataRecord(record); - UserShipperDO userShipperDO = buildShipperDOFromMasterData(record, loginUser); + UserShipperDO userShipperDO = buildShipperDOFromMasterData(record, loginUser, + targetOrganizationId, targetOrganizationName, targetTopOrganizationId); userShipperDO.setDataSource(1); userShipperDO.setShipperId(existing.getShipperId()); userShipperDO.setUserId(existing.getUserId()); @@ -1418,7 +1424,9 @@ public class UserShipperApplicationService { } } - private UserShipperDO buildShipperDOFromMasterData(MdmMerchantRecordDTO record, LoginUser loginUser) { + private UserShipperDO buildShipperDOFromMasterData(MdmMerchantRecordDTO record, LoginUser loginUser, + Long targetOrganizationId, String targetOrganizationName, + Long targetTopOrganizationId) { UserShipperDO userShipperDO = new UserShipperDO(); userShipperDO.setCustomerNcCode(record.getCode()); userShipperDO.setUserMemberCode(record.getCode()); @@ -1436,9 +1444,9 @@ public class UserShipperApplicationService { userShipperDO.setShipperCorpIdcardNumber(record.getDesc23()); userShipperDO.setRegisteredAddress(record.getDesc13()); userShipperDO.setRegisteredPhone(record.getDesc15()); - userShipperDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); - userShipperDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); - userShipperDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + userShipperDO.setOrganizationId(targetOrganizationId); + userShipperDO.setOrganizationName(targetOrganizationName); + userShipperDO.setTopOrganizationId(targetTopOrganizationId); return userShipperDO; } diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java index 4f7e1ebe9..02754c6d2 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java @@ -120,6 +120,7 @@ public class UserShipperMasterDataSyncService { private ShipperMasterDataSyncResultVo doSync(LoginUser loginUser) { Long organizationId = loginUser.getUserPo().getOrganizationId(); + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); String orgNcCode = resolveOrgNcCode(organizationId); if (StringUtils.isEmpty(orgNcCode)) { throw new ServiceException("当前组织未配置NC编码,请先在组织管理中维护"); @@ -129,8 +130,8 @@ public class UserShipperMasterDataSyncService { String lastModifyRecordTime = syncEntity == null ? null : syncEntity.getLastModifyRecordTime(); ShipperMasterDataSyncResultVo resultVo = new ShipperMasterDataSyncResultVo(); - log.info("开始同步MDM客商, organizationId={}, orgNcCode={}, lastModifyRecordTime={}", - organizationId, orgNcCode, lastModifyRecordTime); + log.info("开始同步MDM客商, organizationId={}, topOrganizationId={}, orgNcCode={}, lastModifyRecordTime={}", + organizationId, topOrganizationId, orgNcCode, lastModifyRecordTime); Map existingMap = userShipperApplicationService.loadMasterDataSyncShipperMap(organizationId); String maxModifyTime = lastModifyRecordTime; @@ -143,12 +144,13 @@ public class UserShipperMasterDataSyncService { Integer totalPages = null; do { MdmMerchantQueryResultDTO pageData = queryMerchantPage(orgNcCode, lastModifyRecordTime, - loginUser.getUserPo().getTopOrganizationId(), currentPage); + topOrganizationId, organizationId, currentPage); if (pageData == null || pageData.getDataInfo() == null) { break; } for (MdmMerchantRecordDTO record : pageData.getDataInfo()) { - MdmMerchantSyncFilter.SkipReason skipReason = MdmMerchantSyncFilter.resolveSkipReason(record, orgNcCode); + MdmMerchantSyncFilter.SkipReason skipReason = MdmMerchantSyncFilter.resolveSkipReason( + record, orgNcCode, organizationId, topOrganizationId); if (skipReason != null) { resultVo.setSkipCount(resultVo.getSkipCount() + 1); switch (skipReason) { @@ -174,17 +176,24 @@ public class UserShipperMasterDataSyncService { String ncCode = trimToEmpty(record.getCode()); String companyName = trimToEmpty(record.getDesc1()); String matchKey = UserShipperApplicationService.buildMasterDataMatchKey(ncCode, companyName); + Long targetOrganizationId = MdmMerchantSyncFilter.resolveSaveOrganizationId(record, organizationId); + MasterDataSaveTarget saveTarget = resolveSaveTarget( + targetOrganizationId, organizationId, topOrganizationId, loginUser); UserShipperPo existing = existingMap.get(matchKey); if (existing == null) { - userShipperApplicationService.addEnterpriseShipperFromMasterData(record, loginUser); + userShipperApplicationService.addEnterpriseShipperFromMasterData( + record, loginUser, saveTarget.getOrganizationId(), + saveTarget.getOrganizationName(), saveTarget.getTopOrganizationId()); resultVo.setAddCount(resultVo.getAddCount() + 1); UserShipperPo added = userShipperApplicationService.findByCustomerNcCodeAndCompanyName( - ncCode, companyName, organizationId); + ncCode, companyName, saveTarget.getOrganizationId()); if (added != null) { existingMap.put(matchKey, added); } } else { - userShipperApplicationService.updateEnterpriseShipperFromMasterData(record, existing, loginUser); + userShipperApplicationService.updateEnterpriseShipperFromMasterData( + record, existing, loginUser, saveTarget.getOrganizationId(), + saveTarget.getOrganizationName(), saveTarget.getTopOrganizationId()); resultVo.setUpdateCount(resultVo.getUpdateCount() + 1); } maxModifyTime = maxTime(maxModifyTime, record.getLastModifyRecordTime()); @@ -210,7 +219,8 @@ public class UserShipperMasterDataSyncService { } private MdmMerchantQueryResultDTO queryMerchantPage(String orgNcCode, String lastModifyRecordTime, - Long topOrganizationId, int currentPage) { + Long topOrganizationId, Long syncOrganizationId, + int currentPage) { MdmMerchantQueryDTO queryDTO = new MdmMerchantQueryDTO(); queryDTO.setOrgNcCode(orgNcCode); if (StringUtils.isNotEmpty(lastModifyRecordTime)) { @@ -219,6 +229,7 @@ public class UserShipperMasterDataSyncService { queryDTO.setCurrentPage(currentPage); queryDTO.setCountPerPage(PAGE_SIZE); queryDTO.setTopOrganizationId(topOrganizationId); + queryDTO.setSyncOrganizationId(syncOrganizationId); R response = thirdPartyServiceFeign.queryMdmMerchant(queryDTO); if (response == null || response.getCode() != Constants.SUCCESS) { @@ -273,6 +284,44 @@ public class UserShipperMasterDataSyncService { return orgJson.has("ncCode") ? orgJson.getString("ncCode") : null; } + private MasterDataSaveTarget resolveSaveTarget(Long targetOrganizationId, Long syncOrganizationId, + Long topOrganizationId, LoginUser loginUser) { + if (MdmMerchantSyncFilter.NANGUANG_ORGANIZATION_ID.equals(targetOrganizationId)) { + return new MasterDataSaveTarget( + MdmMerchantSyncFilter.NANGUANG_ORGANIZATION_ID, + loginUser.getUserPo().getOrganizationName(), + MdmMerchantSyncFilter.NANGUANG_ORGANIZATION_ID); + } + return new MasterDataSaveTarget( + syncOrganizationId, + loginUser.getUserPo().getOrganizationName(), + topOrganizationId); + } + + private static final class MasterDataSaveTarget { + private final Long organizationId; + private final String organizationName; + private final Long topOrganizationId; + + private MasterDataSaveTarget(Long organizationId, String organizationName, Long topOrganizationId) { + this.organizationId = organizationId; + this.organizationName = organizationName; + this.topOrganizationId = topOrganizationId; + } + + private Long getOrganizationId() { + return organizationId; + } + + private String getOrganizationName() { + return organizationName; + } + + private Long getTopOrganizationId() { + return topOrganizationId; + } + } + private String trimToEmpty(String value) { return value == null ? "" : value.trim(); } diff --git a/mhd_thrid_party/src/main/java/com/linke/thirdParty/application/server/MdmMasterDataApplicationService.java b/mhd_thrid_party/src/main/java/com/linke/thirdParty/application/server/MdmMasterDataApplicationService.java index 6fb4e435f..fe8a28f10 100644 --- a/mhd_thrid_party/src/main/java/com/linke/thirdParty/application/server/MdmMasterDataApplicationService.java +++ b/mhd_thrid_party/src/main/java/com/linke/thirdParty/application/server/MdmMasterDataApplicationService.java @@ -60,11 +60,14 @@ public class MdmMasterDataApplicationService { String orgNcCode = queryDTO.getOrgNcCode().trim(); int rawCount = result.getDataInfo().size(); List filtered = result.getDataInfo().stream() - .filter(record -> MdmMerchantSyncFilter.belongsToOrg(record.getDesc24(), orgNcCode)) + .filter(record -> MdmMerchantSyncFilter.belongsToOrg( + record.getDesc24(), orgNcCode, + queryDTO.getSyncOrganizationId(), queryDTO.getTopOrganizationId())) .collect(Collectors.toList()); result.setDataInfo(filtered); if (rawCount != filtered.size()) { - String note = String.format("(MDM原始%d条,按DESC24=%s过滤后%d条;MDM总条数totalNumber为未过滤全库统计)", + String note = String.format( + "(MDM原始%d条,按DESC24=%s或南光本组织空DESC24过滤后%d条;MDM总条数totalNumber为未过滤全库统计)", rawCount, orgNcCode, filtered.size()); result.setDesc(StringUtils.isEmpty(result.getDesc()) ? note : result.getDesc() + note); log.info("MDM客商查询应用侧过滤 orgNcCode={}, rawPageSize={}, filteredPageSize={}, mdmTotalNumber={}", From a3420936db4d9aebdc38118fb45561aa5762a6ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Sat, 13 Jun 2026 17:27:45 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=AE=A2=E5=95=86=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserShipperApplicationService.java | 50 ++++++++++++++++++- .../UserShipperMasterDataSyncService.java | 5 ++ 2 files changed, 54 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 2c24e056d..4c4d02309 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 @@ -1378,12 +1378,60 @@ public class UserShipperApplicationService { userShipperDO.setUpdateTime(DateUtil.date()); UserShipperEntity userShipperEntity = userShipperDomainService.saveUserShipperByUserId(userShipperDO); userShipperDO.setShipperId(userShipperEntity.getShipperId()); - authShipper(userShipperDO); + authEnterpriseShipperForMasterData(userShipperDO, loginUser); UserShipperEntity shipperEntity = userShipperDomainService.findShipperByUserId(user.getUserId()); syncWlhyShipperSafely(shipperEntity, record.getCode()); } + /** + * MDM 同步专用审核:只更新认证状态,不复制登录人全部角色、不开钱包、不发通知;网货由 syncWlhyShipperSafely 处理。 + */ + private void authEnterpriseShipperForMasterData(UserShipperDO userShipperDO, LoginUser loginUser) { + if (userShipperDO.getAuthType() == null || userShipperDO.getAuthType() != 2) { + throw new ServiceException("MDM同步仅支持企业委托方审核"); + } + if (userShipperDO.getShipperAuthStatus() != 3) { + throw new ServiceException("MDM同步审核状态错误"); + } + Long authUserId; + String authUserName; + if (ObjectUtil.isNotNull(userShipperDO.getAutomaticCheckUserInfo()) + && ObjectUtil.equal(userShipperDO.getAutomaticCheckUserInfo(), 1) + && loginUser.getOrganizationPo() != null + && loginUser.getOrganizationPo().getPrincipalId() != null) { + authUserId = loginUser.getOrganizationPo().getPrincipalId(); + authUserName = loginUser.getOrganizationPo().getPrincipalName(); + } else { + authUserId = loginUser.getUserPo().getUserId(); + authUserName = loginUser.getUserPo().getUserName(); + } + String remark = "MDM主数据自动审核"; + userShipperDO.setShipperFill(userShipperDO.getShipperAuthStatus()); + userShipperDO.setShipperFillAuthId(authUserId); + userShipperDO.setShipperFillAuthName(authUserName); + userShipperDO.setShipperFillTime(DateUtil.date()); + userShipperDO.setShipperFillRemark(remark); + userShipperDO.setShipperEnterpriseFill(userShipperDO.getShipperAuthStatus()); + userShipperDO.setShipperType(2); + userShipperDO.setShipperEnterpriselAuthId(authUserId); + userShipperDO.setShipperEnterpriselAuthName(authUserName); + userShipperDO.setShipperEnterpriseFillTime(DateUtil.date()); + userShipperDO.setShipperEnterpriseFillRemark(remark); + + UserDO userDO = new UserDO(); + userDO.setUserId(userShipperDO.getUserId()); + userDO.setUserAuthStatus(userShipperDO.getShipperAuthStatus()); + userDO.setUserAuthTime(userShipperDO.getShipperFillTime()); + userDO.setUserAuthByUsername(authUserName); + userApplicationService.updateUser(userDO); + + userShipperDO.setUpdateByName(loginUser.getUsername()); + userShipperDO.setUpdateBy(loginUser.getUserid()); + userShipperDO.setUpdateTime(new Date()); + userShipperDomainService.saveUserShipper(userShipperDO); + } + @Transactional(rollbackFor = Exception.class) public void updateEnterpriseShipperFromMasterData(MdmMerchantRecordDTO record, UserShipperPo existing, LoginUser loginUser, Long targetOrganizationId, diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java index 02754c6d2..b679eb16b 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java @@ -204,6 +204,11 @@ public class UserShipperMasterDataSyncService { log.error(msg, e); } } + log.info("MDM同步进度 page={}/{}, 本页{}条, 累计新增={}, 更新={}, 跳过={}, 失败={}", + currentPage, pageData.getTotalPages() != null ? pageData.getTotalPages() : "?", + pageData.getDataInfo().size(), + resultVo.getAddCount(), resultVo.getUpdateCount(), + resultVo.getSkipCount(), resultVo.getFailCount()); totalPages = pageData.getTotalPages(); if (totalPages == null || totalPages <= 0) { break;