# 用户管理工单流程

---
DDS-Section: 7. 用户管理工单流程
DDS-Lines: L394-L480
---

## 管理操作类型

| 操作代码 | 操作名称 | 说明 | 需审批 |
|:---|:---|:---|:---|
| `update` | 修改用户信息 | 修改基本信息 | 是 |
| `enable` | 启用用户 | disabled → active | 是 |
| `disable` | 禁用用户 | active → disabled | 是 |
| `delete` | 删除用户 | 软删除 | 是 |
| `reset_password` | 重置密码 | 重置为默认密码 | 是 |
| `extend_validity` | 延长有效期 | 延长 account_expires_at | 是 |

## 工单创建时机

**重要**：前端不允许直接调用创建工单接口，工单由用户管理接口内部自动创建。

| 前端操作 | 后端接口 | 工单类型 |
|:---|:---|:---|
| 修改用户信息 | `PUT /api/users/:id` | user_management (action=update) |
| 启用用户 | `POST /api/users/:id/enable` | user_management (action=enable) |
| 禁用用户 | `POST /api/users/:id/disable` | user_management (action=disable) |
| 删除用户 | `DELETE /api/users/:id` | user_management (action=delete) |
| 重置密码 | `POST /api/users/:id/reset-password` | user_management (action=reset_password) |
| 延长有效期 | `POST /api/users/:id/extend-validity` | user_management (action=extend_validity) |

## 流程时序

```
1. 操作人 → rmdc-user-auth: PUT /api/users/:id (或其他管理操作)
2. rmdc-user-auth: CheckManagementPermission
3. rmdc-user-auth: 记录原始数据快照
4. rmdc-user-auth → rmdc-work-procedure: CreateWorkflow(user_management)
5. rmdc-work-procedure → rmdc-user-auth: workflow_id
6. rmdc-user-auth → 操作人: 返回成功，工单ID

7. rmdc-work-procedure → SuperAdmin: 通知待审批

分支:
- 审批通过: WP → UA: ExecuteUserManagement(action, payload)
- 审批打回: WP → 操作人: 通知修改后重新提交
```

## 管理工单业务载荷

```go
type ManagementWorkflowPayload struct {
    TargetUserID   int64                  `json:"target_user_id"`    // 目标用户ID
    TargetUsername string                 `json:"target_username"`   // 目标用户名
    ActionType     string                 `json:"action_type"`       // 操作类型
    OperatorID     int64                  `json:"operator_id"`       // 操作人ID
    OperatorName   string                 `json:"operator_name"`     // 操作人姓名
    OriginalData   map[string]interface{} `json:"original_data"`     // 原始数据快照
    ModifiedData   map[string]interface{} `json:"modified_data"`     // 修改后数据
    Reason         string                 `json:"reason"`            // 操作原因
}
```

## 管理操作执行器接口

```go
type UserManagementExecutor interface {
    UpdateUserInfo(userID int64, payload map[string]interface{}) error
    EnableUser(userID int64) error
    DisableUser(userID int64) error
    DeleteUser(userID int64) error
    ResetPassword(userID int64) error
    ExtendValidity(userID int64, newExpiresAt time.Time) error
}
```

## 操作执行逻辑

审批通过后，工单模块调用 `ExecuteUserManagement` 执行实际操作：

```go
func (e *UserManagementExecutorImpl) ExecuteUserManagement(
    userID int64, 
    action string, 
    payload map[string]interface{},
) error {
    switch action {
    case "update":
        return e.UpdateUserInfo(userID, payload)
    case "enable":
        return e.EnableUser(userID)
    case "disable":
        return e.DisableUser(userID)
    case "delete":
        return e.DeleteUser(userID)
    case "reset_password":
        return e.ResetPassword(userID)
    case "extend_validity":
        expiresAt := payload["new_expires_at"].(time.Time)
        return e.ExtendValidity(userID, expiresAt)
    default:
        return fmt.Errorf("unknown action: %s", action)
    }
}
```
