diff --git a/bms-back/bms-system/src/main/java/com/bms/customer/customerinfo/mapper/CustomerSyncMapper.java b/bms-back/bms-system/src/main/java/com/bms/customer/customerinfo/mapper/CustomerSyncMapper.java index 0ce4e6d5..db93569d 100644 --- a/bms-back/bms-system/src/main/java/com/bms/customer/customerinfo/mapper/CustomerSyncMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/customer/customerinfo/mapper/CustomerSyncMapper.java @@ -1,6 +1,7 @@ package com.bms.customer.customerinfo.mapper; import java.util.List; +import com.bms.common.core.domain.entity.SysUser; import com.bms.customer.customerinfo.domain.BmsCustomer; /** @@ -15,6 +16,11 @@ public interface CustomerSyncMapper */ List selectExistingCodes(); + /** + * 未删除用户的 工号(user_name)->用户ID(user_id) 映射,用于 TMS BELONG_SALER 工号转换 + */ + List selectUserLoginMap(); + /** * 新增客户(同步专用,字段集与老系统导入脚本一致) */ diff --git a/bms-back/bms-system/src/main/java/com/bms/customer/customerinfo/sync/CustomerSyncService.java b/bms-back/bms-system/src/main/java/com/bms/customer/customerinfo/sync/CustomerSyncService.java index 206daa6b..7f90ebf3 100644 --- a/bms-back/bms-system/src/main/java/com/bms/customer/customerinfo/sync/CustomerSyncService.java +++ b/bms-back/bms-system/src/main/java/com/bms/customer/customerinfo/sync/CustomerSyncService.java @@ -4,6 +4,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -14,6 +15,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.bms.common.utils.StringUtils; +import com.bms.common.core.domain.entity.SysUser; import com.bms.customer.customerinfo.domain.BmsCustomer; import com.bms.customer.customerinfo.mapper.CustomerSyncMapper; @@ -84,6 +86,9 @@ public class CustomerSyncService Set existingCodes = new HashSet<>(customerSyncMapper.selectExistingCodes()); + // 业务员归属转本系统用户ID:数据权限按 user_id 控制,工号后续修改不影响归属 + Map userIdByLogin = loadUserIdByLogin(); + List inserts = new ArrayList<>(); List updates = new ArrayList<>(); Set seenCodes = new HashSet<>(); @@ -118,7 +123,7 @@ public class CustomerSyncService continue; } - BmsCustomer c = mapRow(row, code, name, warnings); + BmsCustomer c = mapRow(row, code, name, userIdByLogin, warnings); if (existingCodes.contains(code)) { c.setUpdateBy(SYNC_MARKER); @@ -155,7 +160,8 @@ public class CustomerSyncService /** * 单行映射(逻辑对齐 import_customers.py 的 build_row) */ - private BmsCustomer mapRow(Map row, String code, String name, List warnings) + private BmsCustomer mapRow(Map row, String code, String name, + Map userIdByLogin, List warnings) { BmsCustomer c = new BmsCustomer(); c.setCustomerCode(truncate(code, LEN_CODE, code, "customer_code", warnings)); @@ -163,7 +169,7 @@ public class CustomerSyncService c.setDelFlag("0"); c.setCustomerCodeDw(truncate(getStr(row, "CUSTOMER_OUTER_CODE"), LEN_CODE_DW, code, "customer_code_dw", warnings)); - c.setSalesUserId(truncate(getStr(row, "BELONG_SALER"), LEN_USER_ID, code, "sales_user_id", warnings)); + c.setSalesUserId(resolveSalesUserId(clean(getStr(row, "BELONG_SALER")), userIdByLogin, code, warnings)); c.setSalesUser(truncate(getStr(row, "BELONG_SALER_NAME"), LEN_USER, code, "sales_user", warnings)); c.setSettlementUser(truncate(getStr(row, "SETTLEMENT_MAN"), LEN_USER, code, "settlement_user", warnings)); c.setServiceUser(truncate(getStr(row, "SERVICE_MAN"), LEN_USER, code, "service_user", warnings)); @@ -225,6 +231,42 @@ public class CustomerSyncService return ("1".equals(s) || "1.0".equals(s)) ? "0" : "1"; } + /** 加载未删除用户的 工号(user_name)->用户ID(user_id) 映射 */ + private Map loadUserIdByLogin() + { + Map map = new HashMap<>(); + for (SysUser u : customerSyncMapper.selectUserLoginMap()) + { + if (u != null && u.getUserName() != null && u.getUserId() != null + && !map.containsKey(u.getUserName())) + { + map.put(u.getUserName(), String.valueOf(u.getUserId())); + } + } + return map; + } + + /** + * 业务员工号 -> 本系统 sys_user.user_id 转换(数据权限按 user_id 控制,工号修改不影响归属)。 + * 工号在系统用户中不存在时保留原工号并告警(常见于该用户尚未同步),避免归属信息丢失。 + */ + private String resolveSalesUserId(String salerCode, Map userIdByLogin, + String code, List warnings) + { + String s = truncate(salerCode, LEN_USER_ID, code, "sales_user_id", warnings); + if (s == null) + { + return null; + } + String userId = userIdByLogin.get(s); + if (userId != null) + { + return userId; + } + warnings.add(code + ": 业务员工号 " + s + " 在系统用户中不存在,sales_user_id 保留原工号"); + return s; + } + private static String clean(String v) { if (v == null) diff --git a/bms-back/bms-system/src/main/resources/mapper/customer/BmsCustomerMapper.xml b/bms-back/bms-system/src/main/resources/mapper/customer/BmsCustomerMapper.xml index 09fd91a6..ac156764 100644 --- a/bms-back/bms-system/src/main/resources/mapper/customer/BmsCustomerMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/customer/BmsCustomerMapper.xml @@ -59,12 +59,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" su.nick_name as sales_user_nick_name, cps.price_set_id, ps.price_set_name from ctr_customer c - + left join sys_user su on su.del_flag = '0' - and (su.user_name = c.sales_user_id or su.user_id = c.sales_user_id + 0) + and (su.user_id = c.sales_user_id + 0 or su.user_name = c.sales_user_id) left join prc_customer_price_set cps on cps.customer_id = c.customer_id left join prc_price_set ps on ps.price_set_id = cps.price_set_id diff --git a/bms-back/bms-system/src/main/resources/mapper/customer/CustomerSyncMapper.xml b/bms-back/bms-system/src/main/resources/mapper/customer/CustomerSyncMapper.xml index b793af55..572aef76 100644 --- a/bms-back/bms-system/src/main/resources/mapper/customer/CustomerSyncMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/customer/CustomerSyncMapper.xml @@ -8,6 +8,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT customer_code FROM ctr_customer WHERE del_flag = '0' + + + diff --git a/bms-back/sql/20261019_customer_sales_user_to_userid.sql b/bms-back/sql/20261019_customer_sales_user_to_userid.sql new file mode 100644 index 00000000..9fce5381 --- /dev/null +++ b/bms-back/sql/20261019_customer_sales_user_to_userid.sql @@ -0,0 +1,10 @@ +-- 客户归属销售员由"工号"改存本系统用户ID(数据权限按 user_id 控制,工号后续修改不影响归属) +-- 同步链路已在 CustomerSyncService.resolveSalesUserId 做同样转换,本脚本只处理存量数据。 +-- 仅转换"含非数字字符"的工号值(工号形如 WS0052/WSC0184/wsadmin); +-- 已是数字(user_id)的行不触碰,脚本可重复执行。 +UPDATE ctr_customer c +JOIN sys_user u ON u.del_flag = '0' AND u.user_name = c.sales_user_id +SET c.sales_user_id = CONVERT(u.user_id, CHAR) +WHERE c.del_flag = '0' + AND c.sales_user_id IS NOT NULL + AND c.sales_user_id REGEXP '[^0-9]'; diff --git a/bms-front/src/views/customersuppliermanagement/customerinfo/customeredit/index.vue b/bms-front/src/views/customersuppliermanagement/customerinfo/customeredit/index.vue index a52c7583..252211ff 100644 --- a/bms-front/src/views/customersuppliermanagement/customerinfo/customeredit/index.vue +++ b/bms-front/src/views/customersuppliermanagement/customerinfo/customeredit/index.vue @@ -75,7 +75,6 @@ diff --git a/bms-front/src/views/customersuppliermanagement/customerinfo/index.vue b/bms-front/src/views/customersuppliermanagement/customerinfo/index.vue index 1c2e95ee..b7a7a166 100644 --- a/bms-front/src/views/customersuppliermanagement/customerinfo/index.vue +++ b/bms-front/src/views/customersuppliermanagement/customerinfo/index.vue @@ -34,8 +34,7 @@