客商主数据同步修改
This commit is contained in:
+3
@@ -27,4 +27,7 @@ public class MdmMerchantQueryDTO implements Serializable {
|
||||
|
||||
@ApiModelProperty("一级组织ID,用于读取三方接口配置")
|
||||
private Long topOrganizationId;
|
||||
|
||||
@ApiModelProperty("当前同步组织ID,用于 desc24 为空时判定南光组织体系")
|
||||
private Long syncOrganizationId;
|
||||
}
|
||||
|
||||
+50
-3
@@ -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()))) {
|
||||
|
||||
+16
-8
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+57
-8
@@ -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();
|
||||
}
|
||||
|
||||
+5
-2
@@ -60,11 +60,14 @@ public class MdmMasterDataApplicationService {
|
||||
String orgNcCode = queryDTO.getOrgNcCode().trim();
|
||||
int rawCount = result.getDataInfo().size();
|
||||
List<MdmMerchantRecordDTO> 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={}",
|
||||
|
||||
Reference in New Issue
Block a user