Merge remote-tracking branch 'origin/dev_WMS20260401' into dev_WMS20260401

This commit is contained in:
王奎兴
2026-06-12 17:08:40 +08:00
4 changed files with 104 additions and 11 deletions
@@ -1296,6 +1296,50 @@ public class UserShipperApplicationService {
return userShipperMapper.findByCustomerNcCodeAndOrganizationId(customerNcCode, organizationId); 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) @Transactional(rollbackFor = Exception.class)
public void addEnterpriseShipperFromMasterData(MdmMerchantRecordDTO record, LoginUser loginUser) { public void addEnterpriseShipperFromMasterData(MdmMerchantRecordDTO record, LoginUser loginUser) {
validateMasterDataRecord(record); validateMasterDataRecord(record);
@@ -1378,15 +1422,6 @@ public class UserShipperApplicationService {
if (StringUtils.isEmpty(record.getDesc1())) { if (StringUtils.isEmpty(record.getDesc1())) {
throw new ServiceException("公司名称不能为空,CODE=" + record.getCode()); 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) { private String buildMasterDataUserAccount(String code) {
@@ -25,6 +25,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date; import java.util.Date;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@Service @Service
@@ -132,6 +133,7 @@ public class UserShipperMasterDataSyncService {
log.info("开始同步MDM客商, organizationId={}, orgNcCode={}, lastModifyRecordTime={}", log.info("开始同步MDM客商, organizationId={}, orgNcCode={}, lastModifyRecordTime={}",
organizationId, orgNcCode, lastModifyRecordTime); organizationId, orgNcCode, lastModifyRecordTime);
Map<String, UserShipperPo> existingMap = userShipperApplicationService.loadMasterDataSyncShipperMap(organizationId);
String maxModifyTime = lastModifyRecordTime; String maxModifyTime = lastModifyRecordTime;
int currentPage = 1; int currentPage = 1;
Integer totalPages = null; Integer totalPages = null;
@@ -147,11 +149,22 @@ public class UserShipperMasterDataSyncService {
continue; continue;
} }
try { try {
UserShipperPo existing = userShipperApplicationService.findByCustomerNcCodeAndOrganizationId( String ncCode = trimToEmpty(record.getCode());
record.getCode(), organizationId); 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) { if (existing == null) {
userShipperApplicationService.addEnterpriseShipperFromMasterData(record, loginUser); userShipperApplicationService.addEnterpriseShipperFromMasterData(record, loginUser);
resultVo.setAddCount(resultVo.getAddCount() + 1); resultVo.setAddCount(resultVo.getAddCount() + 1);
UserShipperPo added = userShipperApplicationService.findByCustomerNcCodeAndCompanyName(
ncCode, companyName, organizationId);
if (added != null) {
existingMap.put(matchKey, added);
}
} else { } else {
userShipperApplicationService.updateEnterpriseShipperFromMasterData(record, existing, loginUser); userShipperApplicationService.updateEnterpriseShipperFromMasterData(record, existing, loginUser);
resultVo.setUpdateCount(resultVo.getUpdateCount() + 1); resultVo.setUpdateCount(resultVo.getUpdateCount() + 1);
@@ -45,4 +45,10 @@ public interface UserShipperMapper extends BaseMapper<UserShipperEntity> {
UserShipperPo findByCustomerNcCodeAndOrganizationId(@Param("customerNcCode") String customerNcCode, UserShipperPo findByCustomerNcCodeAndOrganizationId(@Param("customerNcCode") String customerNcCode,
@Param("organizationId") Long organizationId); @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 LIMIT 1
</select> </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> </mapper>