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 bc84b75d8..fcbdb5536 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 @@ -1296,6 +1296,50 @@ public class UserShipperApplicationService { return userShipperMapper.findByCustomerNcCodeAndOrganizationId(customerNcCode, organizationId); } + /** + * MDM 客商同步:按 NC编码 + 公司名称 建立本地委托方索引 + */ + public java.util.Map loadMasterDataSyncShipperMap(Long organizationId) { + if (organizationId == null) { + return new java.util.HashMap<>(); + } + List list = userShipperMapper.listForMasterDataSyncByOrganizationId(organizationId); + java.util.Map map = new java.util.HashMap<>(list.size() * 2); + for (UserShipperPo po : list) { + String ncCode = normalizeMasterDataKey(po.getCustomerNcCode()); + String companyName = resolveMasterDataCompanyName(po); + if (StringUtils.isNotEmpty(ncCode) && StringUtils.isNotEmpty(companyName)) { + map.putIfAbsent(buildMasterDataMatchKey(ncCode, companyName), po); + } + } + return map; + } + + public UserShipperPo findByCustomerNcCodeAndCompanyName(String customerNcCode, String companyName, Long organizationId) { + if (StringUtils.isEmpty(customerNcCode) || StringUtils.isEmpty(companyName) || organizationId == null) { + return null; + } + return userShipperMapper.findByCustomerNcCodeAndCompanyName( + normalizeMasterDataKey(customerNcCode), + normalizeMasterDataKey(companyName), + organizationId); + } + + public static String buildMasterDataMatchKey(String ncCode, String companyName) { + return normalizeMasterDataKey(ncCode) + "|" + normalizeMasterDataKey(companyName); + } + + private static String normalizeMasterDataKey(String value) { + return value == null ? null : value.trim(); + } + + private static String resolveMasterDataCompanyName(UserShipperPo po) { + if (StringUtils.isNotEmpty(po.getShipperEnterpriseName())) { + return normalizeMasterDataKey(po.getShipperEnterpriseName()); + } + return normalizeMasterDataKey(po.getUserNameShipper()); + } + @Transactional(rollbackFor = Exception.class) public void addEnterpriseShipperFromMasterData(MdmMerchantRecordDTO record, LoginUser loginUser) { validateMasterDataRecord(record); @@ -1378,15 +1422,6 @@ public class UserShipperApplicationService { if (StringUtils.isEmpty(record.getDesc1())) { throw new ServiceException("公司名称不能为空,CODE=" + record.getCode()); } - if (StringUtils.isEmpty(record.getDesc14())) { - throw new ServiceException("联系人不能为空,CODE=" + record.getCode()); - } - if (StringUtils.isEmpty(record.getDesc15())) { - throw new ServiceException("联系电话不能为空,CODE=" + record.getCode()); - } - if (StringUtils.isEmpty(record.getDesc29())) { - throw new ServiceException("省市区县不能为空,CODE=" + record.getCode()); - } } private String buildMasterDataUserAccount(String code) { 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 9bfc75a90..8b81a645a 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 @@ -25,6 +25,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; +import java.util.Map; import java.util.concurrent.TimeUnit; @Service @@ -132,6 +133,7 @@ public class UserShipperMasterDataSyncService { log.info("开始同步MDM客商, organizationId={}, orgNcCode={}, lastModifyRecordTime={}", organizationId, orgNcCode, lastModifyRecordTime); + Map existingMap = userShipperApplicationService.loadMasterDataSyncShipperMap(organizationId); String maxModifyTime = lastModifyRecordTime; int currentPage = 1; Integer totalPages = null; @@ -147,11 +149,22 @@ public class UserShipperMasterDataSyncService { continue; } try { - UserShipperPo existing = userShipperApplicationService.findByCustomerNcCodeAndOrganizationId( - record.getCode(), organizationId); + 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) { userShipperApplicationService.addEnterpriseShipperFromMasterData(record, loginUser); resultVo.setAddCount(resultVo.getAddCount() + 1); + UserShipperPo added = userShipperApplicationService.findByCustomerNcCodeAndCompanyName( + ncCode, companyName, organizationId); + if (added != null) { + existingMap.put(matchKey, added); + } } else { userShipperApplicationService.updateEnterpriseShipperFromMasterData(record, existing, loginUser); resultVo.setUpdateCount(resultVo.getUpdateCount() + 1); diff --git a/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/repository/mapper/UserShipperMapper.java b/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/repository/mapper/UserShipperMapper.java index 2800c72df..2970a1dbc 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/repository/mapper/UserShipperMapper.java +++ b/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/repository/mapper/UserShipperMapper.java @@ -45,4 +45,10 @@ public interface UserShipperMapper extends BaseMapper { UserShipperPo findByCustomerNcCodeAndOrganizationId(@Param("customerNcCode") String customerNcCode, @Param("organizationId") Long organizationId); + + List listForMasterDataSyncByOrganizationId(@Param("organizationId") Long organizationId); + + UserShipperPo findByCustomerNcCodeAndCompanyName(@Param("customerNcCode") String customerNcCode, + @Param("companyName") String companyName, + @Param("organizationId") Long organizationId); } \ No newline at end of file diff --git a/mhd-user-center/src/main/resources/mapper/UserShipperMapper.xml b/mhd-user-center/src/main/resources/mapper/UserShipperMapper.xml index 1dec9230b..aecb52637 100644 --- a/mhd-user-center/src/main/resources/mapper/UserShipperMapper.xml +++ b/mhd-user-center/src/main/resources/mapper/UserShipperMapper.xml @@ -577,5 +577,44 @@ LIMIT 1 + + + + \ No newline at end of file