> **前置条件** — 执行以下任何命令前，请先确认已完成认证。如未认证，参见 [`../../shb-shared/SKILL.md`](../../shb-shared/SKILL.md)。

# shb-cli customer update

客户更新。`customer update submit` 是写操作，直接调用编辑接口。

## 安全规则

- 更新前确认用户明确要求"更新/修改/编辑客户"。
- `--id` 必须是客户的系统 UUID（不是客户编号 serialNumber）。若只知道客户名称，先用 `customer list --keyword <名称>` 搜索拿到 id。
- **优先使用 `--data` 模式**：quick flags 只发送用户提供的字段，未提供的字段可能被后端清空；完整更新请先搜索拿到当前数据，补齐所有字段后用 `--data` 提交。

## 推荐方式：先搜索再用 `--data` 提交

```bash
# 第一步：搜索客户，拿到当前数据
shb-cli customer list --keyword "客户名称" -o raw | jq '.records[0]'

# 第二步：将搜索结果整理成更新 JSON（修改需要变更的字段）
# 注意：customerAddress 使用 adProvince/adCity/adDist/adAddress 格式

# 第三步：提交更新
shb-cli customer update submit --id <customerUUID> --data '{
  "id": "客户UUID",
  "name": "新名称",
  "lmName": "联系人",
  "lmPhone": "13800000000",
  "lmEmail": "user@example.com",
  "serialNumber": "CUS001",
  "customerManager": "负责人userId",
  "attribute": {},
  "customerAddress": {
    "adProvince": "上海市",
    "adCity": "上海市",
    "adDist": "浦东新区",
    "adAddress": "xx路xx号"
  }
}'
```

## 快捷 flags 模式

适合只修改少量字段的场景。**注意**：未传的字段不会被更新，但如果后端对未传字段有默认处理，可能导致数据被清空，建议用 `--data` 做完整更新。

```bash
# 只改名称和联系电话
shb-cli customer update submit \
  --id <customerUUID> \
  --name "新客户名称" \
  --lm-phone "13900000000"

# 只改负责人
shb-cli customer update submit \
  --id <customerUUID> \
  --manager-id <userId>

# 只改自定义字段
shb-cli customer update submit \
  --id <customerUUID> \
  --attr '{"industry":"互联网","level":"VIP"}'
```

## 完整 JSON 结构说明

```json
{
  "id": "客户UUID",
  "name": "客户名称",
  "lmName": "联系人姓名",
  "lmPhone": "联系人电话",
  "lmEmail": "联系人邮箱",
  "serialNumber": "客户编号",
  "customerManager": "负责人userId",
  "customerManagerName": "负责人显示名",
  "attribute": {
    "customField1": "value1"
  },
  "customerAddress": {
    "adCountry": "中国",
    "adProvince": "上海市",
    "adCity": "上海市",
    "adDist": "浦东新区",
    "adAddress": "xx路xx号",
    "adStreet": "",
    "adLatitude": "",
    "adLongitude": "",
    "addressType": 0
  },
  "tenantTagList": [{ "id": "tagId" }],
  "deleteFiles": []
}
```

## 支持的快捷 flags

| 分类 | Flags |
|------|-------|
| 必填 | `--id`（客户 UUID） |
| 基本信息 | `--name`, `--serial-number`, `--manager-id` |
| 联系人 | `--lm-name`, `--lm-phone`, `--lm-email` |
| 地址 | `--country`, `--province`, `--city`, `--district`, `--address`, `--street`, `--latitude`, `--longitude` |
| 自定义字段 | `--attr`（JSON 字符串，设置 `attribute` 对象） |
| 输入（推荐） | `--data`（内联完整 JSON）, `--file`（本地 JSON 文件） |

## 注意

- **更新后必须回查核实**：命令无报错、或输出里的成功提示**都不代表字段真的变了**，后端可能接受请求却未改值（字段名写错、只读字段、值被静默丢弃、未传字段被清空等）。提交后用 `customer list --keyword <名称/编号>` 重新查到该客户（按 `id` 匹配），确认目标字段已是新值，再告诉用户完成；若仍是旧值或搜不到该客户，如实说明实际当前值/未确认，不要声称成功。
- 如果有错误，请友好地提示错误信息，不要切换操作类型。
- 客户 UUID 不要展示给用户，只用于内部接口调用。
