# 销售联系人信息更新说明

## 概述

为uk_vat_register表添加了销售联系人信息字段：
- `linked_sales_contact_name` - 销售联系人姓名（来自Base_User.F_RealName）
- `linked_sales_contact_phone` - 销售联系人电话（来自Base_User.F_Mobile）

## 数据来源

通过以下关联获取销售联系人信息：
```
VATBusinessRecord.BusinessCounselorId -> Base_User.F_UserId
```

## 自动同步

新的数据同步会自动包含销售联系人信息，无需手动处理。

修改的代码：
- `src/Services/DataSyncService.php` - fetchPendingRecord方法添加了Base_User表的JOIN
- `src/Models/VatBusinessRecord.php` - 添加了LinkedSalesContactName和LinkedSalesContactPhone属性
- INSERT和UPDATE方法都已更新

## 更新历史数据

### 为什么需要特殊处理？

uk_vat_register表和VATBusinessRecord/Base_User表不在同一个数据库中，所以不能直接使用跨库JOIN的SQL语句。

### 更新步骤

使用提供的PHP脚本来更新历史数据：

**测试环境**：
```bash
php bin/update-sales-contact.php env=test
```

**生产环境**：
```bash
php bin/update-sales-contact.php env=prod
```

### 脚本工作流程

1. **从目标数据库查询**：
   - 查询uk_vat_register表中所有有source_record_id的记录
   - 获取id和source_record_id

2. **从源数据库查询**：
   - 根据source_record_id列表查询VATBusinessRecord表
   - LEFT JOIN Base_User表获取销售联系人信息
   - 构建source_record_id -> 联系人信息的映射

3. **更新目标数据库**：
   - 遍历目标记录
   - 根据映射更新linked_sales_contact_name和linked_sales_contact_phone

### 脚本输出示例

```
========================================
Update Sales Contact Information
========================================
Environment: prod
Started at: 2025-01-15 10:30:00
========================================

[2025-01-15 10:30:00] Connecting to source database...
[2025-01-15 10:30:00] Source database connected

[2025-01-15 10:30:00] Connecting to target database...
[2025-01-15 10:30:00] Target database connected

[2025-01-15 10:30:01] Step 1: Fetching records from target database...
[2025-01-15 10:30:01] Found 500 records with source_record_id

[2025-01-15 10:30:01] Step 2: Fetching sales contact info from source database...
[2025-01-15 10:30:02] Found sales contact info for 450 records

[2025-01-15 10:30:02] Step 3: Updating target database...
[2025-01-15 10:30:03] Progress: 100/500 records processed
[2025-01-15 10:30:04] Progress: 200/500 records processed
[2025-01-15 10:30:05] Progress: 300/500 records processed
[2025-01-15 10:30:06] Progress: 400/500 records processed
[2025-01-15 10:30:07] Progress: 500/500 records processed

========================================
Update Summary
========================================
Total records: 500
Successfully updated: 500
Failed: 0
Records with contact info: 450
Records without contact info: 50
========================================
Completed at: 2025-01-15 10:30:07
========================================
```

### 统计说明

- **Total records**: 目标数据库中有source_record_id的记录总数
- **Successfully updated**: 成功更新的记录数
- **Failed**: 更新失败的记录数
- **Records with contact info**: 有销售联系人信息的记录数
- **Records without contact info**: 没有销售联系人信息的记录数（可能是BusinessCounselorId为空或Base_User中找不到对应记录）

## 验证更新结果

在目标数据库中执行以下SQL查看统计：

```sql
SELECT 
    COUNT(*) as total_records,
    SUM(CASE WHEN linked_sales_contact_name IS NOT NULL THEN 1 ELSE 0 END) as records_with_name,
    SUM(CASE WHEN linked_sales_contact_phone IS NOT NULL THEN 1 ELSE 0 END) as records_with_phone,
    SUM(CASE WHEN linked_sales_contact_name IS NULL AND linked_sales_contact_phone IS NULL THEN 1 ELSE 0 END) as records_without_contact
FROM uk_vat_register
WHERE source_record_id IS NOT NULL;
```

## 注意事项

1. **跨数据库操作**：脚本需要同时连接源数据库和目标数据库
2. **批量查询**：使用IN查询避免N+1问题，提高性能
3. **NULL值处理**：如果BusinessCounselorId为空或Base_User中找不到记录，联系人信息会是NULL
4. **日志记录**：所有操作都会记录到日志文件中
5. **错误处理**：单条记录更新失败不会影响其他记录

## 文件说明

- `bin/update-sales-contact.php` - 更新脚本（推荐使用）
- `sql/update_sales_contact_info.sql` - SQL参考（不能直接使用，仅供参考）
- `docs/SALES_CONTACT_UPDATE.md` - 本说明文档