客商主数据同步修改

This commit is contained in:
秦鸿展
2026-06-13 15:39:29 +08:00
parent 192a406682
commit 72e54bb219
5 changed files with 131 additions and 21 deletions
@@ -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;
}
@@ -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<String, UserShipperPo> 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<MdmMerchantQueryResultDTO> 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();
}