客商主数据同步修改BUG

This commit is contained in:
秦鸿展
2026-06-12 16:56:11 +08:00
parent ece27b786f
commit 8e0b728206
4 changed files with 104 additions and 11 deletions
@@ -1296,6 +1296,50 @@ public class UserShipperApplicationService {
return userShipperMapper.findByCustomerNcCodeAndOrganizationId(customerNcCode, organizationId);
}
/**
* MDM 客商同步:按 NC编码 + 公司名称 建立本地委托方索引
*/
public java.util.Map<String, UserShipperPo> loadMasterDataSyncShipperMap(Long organizationId) {
if (organizationId == null) {
return new java.util.HashMap<>();
}
List<UserShipperPo> list = userShipperMapper.listForMasterDataSyncByOrganizationId(organizationId);
java.util.Map<String, UserShipperPo> 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) {
@@ -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<String, UserShipperPo> 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);
@@ -45,4 +45,10 @@ public interface UserShipperMapper extends BaseMapper<UserShipperEntity> {
UserShipperPo findByCustomerNcCodeAndOrganizationId(@Param("customerNcCode") String customerNcCode,
@Param("organizationId") Long organizationId);
List<UserShipperPo> listForMasterDataSyncByOrganizationId(@Param("organizationId") Long organizationId);
UserShipperPo findByCustomerNcCodeAndCompanyName(@Param("customerNcCode") String customerNcCode,
@Param("companyName") String companyName,
@Param("organizationId") Long organizationId);
}
@@ -577,5 +577,44 @@
LIMIT 1
</select>
<select id="listForMasterDataSyncByOrganizationId" resultType="com.mhd.user.domain.userAggregate.repository.po.UserShipperPo">
SELECT b.shipper_id,
b.user_id,
b.customer_nc_code,
b.data_source,
a.organization_id AS organizationId,
a.organization_name AS organizationName,
b.shipper_enterprise_name,
b.user_name_shipper,
b.emergency_contact_name,
b.emergency_contact_phone
FROM "USER" a
INNER JOIN user_shipper b ON a.user_id = b.user_id
WHERE a.del_flag = 1
AND b.del_flag = 1
AND a.organization_id = #{organizationId}
</select>
<select id="findByCustomerNcCodeAndCompanyName" resultType="com.mhd.user.domain.userAggregate.repository.po.UserShipperPo">
SELECT b.shipper_id,
b.user_id,
b.customer_nc_code,
b.data_source,
a.organization_id AS organizationId,
a.organization_name AS organizationName,
b.shipper_enterprise_name,
b.user_name_shipper,
b.emergency_contact_name,
b.emergency_contact_phone
FROM "USER" a
INNER JOIN user_shipper b ON a.user_id = b.user_id
WHERE a.del_flag = 1
AND b.del_flag = 1
AND b.customer_nc_code = #{customerNcCode}
AND b.shipper_enterprise_name = #{companyName}
AND a.organization_id = #{organizationId}
LIMIT 1
</select>
</mapper>