小医系统整改计划

版本:v1.0
编制时间:2026-04-28 14:12
编制依据:《建档流程与架构分析报告》
状态:待审批

---

一、问题汇总

1.1 问题来源

根据《建档流程与架构分析报告》(2026-04-28),共识别出 **7 个问题**:

编号问题严重级别状态
P001user_index.json 同步风险🔴 严重待修复
P002渠道激活依赖用户主动发消息🔴 严重待修复
P003档案目录结构不统一⚠️ 中等待修复
P004活动名称映射维护成本高⚠️ 中等待修复
P005SESSION_STATE 文件分散⚠️ 中等待修复
P006文档版本管理不规范ℹ️ 低待修复
P007测试档案未清理ℹ️ 低待修复

1.2 新增问题(本次发现)

编号问题严重级别状态
P008云部署脚本硬编码 contactId(越权风险)🔴 严重待修复

---

二、整改计划总览

2.1 整改阶段划分

阶段时间目标问题数量
**第一阶段:紧急修复**第 1 周解决严重级别问题3 个(P001, P002, P008)
**第二阶段:中期优化**第 2-3 周解决中等级别问题3 个(P003, P004, P005)
**第三阶段:长期完善**第 4-6 周解决低级别问题 + 架构升级2 个(P006, P007)+ 2 个新增

---

2.2 整改任务清单

任务 ID关联问题任务名称优先级预计工时责任角色
T001P001增强 user_index.json 同步脚本健壮性P04 小时开发
T002P002增加渠道状态监控机制P04 小时开发
T003P008修复云部署脚本越权问题P02 小时开发
T004P003统一档案目录结构P18 小时开发
T005P004优化活动名称映射管理P16 小时开发 + 运营
T006P005统一 SESSION_STATE 文件位置P14 小时开发
T007P006规范文档版本管理P24 小时文档
T008P007清理测试档案P22 小时运维
T009-引入数据库存储(长期)P240 小时开发
T010-建立自动化测试体系P220 小时测试

---

三、详细整改方案

3.1 第一阶段:紧急修复(第 1 周)

---

任务 T001:增强 user_index.json 同步脚本健壮性

**关联问题:** P001 — user_index.json 同步风险

**问题描述:**

  • 档案创建后依赖脚本同步到 user_index.json
  • subprocess 调用可能超时或失败
  • 失败后没有回滚机制
  • 导致数据不一致
  • **整改目标:**

  • 同步成功率达到 99.9%
  • 失败时自动回滚
  • 增加监控告警
  • **技术方案:**

    
    # 修改 skills/user-onboard/scripts/sync_user_index.py
    
    def call_update_script(contact_id, *args):
        """调用 update_user_index.py(增加重试机制)"""
        max_retries = 3
        for attempt in range(max_retries):
            try:
                cmd = ["python3", str(UPDATE_SCRIPT), contact_id] + list(args)
                result = subprocess.run(
                    cmd,
                    stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE,
                    universal_newlines=True,
                    timeout=10,
                    env=env
                )
                if result.returncode == 0:
                    return True
                else:
                    if attempt == max_retries - 1:
                        return False
                    time.sleep(1)  # 重试前等待
            except Exception as e:
                if attempt == max_retries - 1:
                    return False
                time.sleep(1)
        return False
    

    **修改文件清单:**

  • `skills/user-onboard/scripts/sync_user_index.py`
  • `skills/user-onboard/scripts/archive.py`
  • `skills/user-onboard/scripts/verify_user.py`
  • **验收标准:**

  • [ ] 同步脚本增加重试机制(最多 3 次)
  • [ ] 同步失败时回滚 user_index.json 修改
  • [ ] 增加同步日志(记录每次同步结果)
  • [ ] 同步失败时通知 owner
  • **风险评估:**

  • 风险等级:低
  • 影响范围:user_index.json 同步流程
  • 回滚方案:保留旧版本脚本,可随时切换
  • ---

    任务 T002:增加渠道状态监控机制

    **关联问题:** P002 — 渠道激活依赖用户主动发消息

    **问题描述:**

  • tutu-aggchat 通道需要用户主动发消息才能激活
  • 新用户添加后不发消息 → 无法发送欢迎词
  • 员工建档后不发消息 → 无法接收工单通知
  • **整改目标:**

  • 实时掌握渠道激活状态
  • 未激活用户 24 小时内提醒
  • 欢迎流程执行率提升到 95%
  • **技术方案:**

    
    # 新增脚本:scripts/check_channel_status.sh
    
    #!/bin/bash
    # 渠道状态监控脚本
    
    USER_INDEX="/home/admin/.openclaw/workspace/user_index.json"
    OUTPUT_FILE="/home/admin/.openclaw/workspace/logs/channel_status_$(date +%Y%m%d).json"
    
    # 读取所有 contactId
    contactIds=$(cat "$USER_INDEX" | jq -r 'keys[]')
    
    results=()
    for contactId in $contactIds; do
        # 调用 tutu API 检查渠道状态
        status=$(curl -s -X POST "https://tutu-gateway.lovebenefits.com/tutu-api/api/jkzl/mcp/chat/contact/status" \
            -H "Content-Type: application/json" \
            -d "{\"tenant\":\"jkzl\",\"contactId\":\"$contactId\"}" | jq -r '.status')
        
        if [ "$status" != "active" ]; then
            results+=("{\"contactId\":\"$contactId\",\"status\":\"inactive\"}")
        fi
    done
    
    # 输出结果
    echo "{\"timestamp\":\"$(date -Iseconds)\",\"unactivated\":[$(IFS=,; echo "${results[*]}")]}" > "$OUTPUT_FILE"
    

    **新增文件清单:**

  • `scripts/check_channel_status.sh`
  • `logs/channel_status/` 目录
  • **修改文件清单:**

  • `HEARTBEAT.md`(增加渠道检查任务)
  • **验收标准:**

  • [ ] 渠道状态监控脚本可正常运行
  • [ ] 每日生成未激活用户列表
  • [ ] 未激活用户 24 小时内发送提醒
  • [ ] 运营人员可查看未激活用户列表
  • **风险评估:**

  • 风险等级:中
  • 影响范围:渠道管理流程
  • 依赖:tutu-aggchat API 支持
  • ---

    任务 T003:修复云部署脚本越权问题

    **关联问题:** P008 — 云部署脚本硬编码 contactId

    **问题描述:**

  • `update-reports.sh` 硬编码 owner 的 contactId(7v1xmj9q)
  • 非 owner 用户可操作 owner 的资源
  • 违反数据隔离原则
  • **整改目标:**

  • 部署使用当前用户的 contactId
  • 增加权限检查
  • 记录部署审计日志
  • **技术方案:**

    
    # 修改 scripts/update-reports.sh
    
    # 从环境变量或会话标识获取当前用户 contactId
    CONTACT_ID="${DEPLOY_CONTACT_ID:-}"
    
    if [ -z "$CONTACT_ID" ]; then
        # 尝试从会话标识解析
        CONTACT_ID=$(python3 -c "
    import os
    # 从环境变量或会话标识获取
    session_key = os.environ.get('SESSION_KEY', '')
    if ':' in session_key:
        contact_id = session_key.split(':')[-1]
        print(contact_id)
    ")
    fi
    
    if [ -z "$CONTACT_ID" ]; then
        echo "❌ 错误:无法获取当前用户 contactId"
        echo "请设置环境变量 DEPLOY_CONTACT_ID 或从会话中自动获取"
        exit 1
    fi
    
    # 权限检查
    ROLE=$(python3 -c "
    import json
    user_index = json.load(open('/home/admin/.openclaw/workspace/user_index.json'))
    info = user_index.get('$CONTACT_ID', {})
    print(info.get('role', 'unknown'))
    ")
    
    if [ "$ROLE" = "owner" ]; then
        echo "👤 当前用户:$CONTACT_ID (owner)"
    elif [ "$ROLE" = "employee" ]; then
        echo "👤 当前用户:$CONTACT_ID (employee)"
    else
        echo "👤 当前用户:$CONTACT_ID (other-contacts)"
    fi
    
    # 记录审计日志
    echo "{\"timestamp\":\"$(date -Iseconds)\",\"contactId\":\"$CONTACT_ID\",\"role\":\"$ROLE\",\"action\":\"deploy\",\"project\":\"$PROJECT_NAME\"}" >> ~/.openclaw/cloud-deploy-audit.log
    

    **修改文件清单:**

  • `skills/cloud-deploy/scripts/update-reports.sh`
  • `skills/cloud-deploy/scripts/deploy.sh`
  • **新增文件清单:**

  • `~/.openclaw/cloud-deploy-audit.log`(审计日志)
  • **验收标准:**

  • [ ] 移除硬编码的 contactId
  • [ ] 自动获取当前用户 contactId
  • [ ] 增加权限检查(记录角色)
  • [ ] 记录部署审计日志
  • [ ] 非 owner 用户只能部署到自己的 namespace
  • **风险评估:**

  • 风险等级:高(安全相关)
  • 影响范围:云部署功能
  • 回滚方案:保留旧版本脚本
  • ---

    3.2 第二阶段:中期优化(第 2-3 周)

    ---

    任务 T004:统一档案目录结构

    **关联问题:** P003 — 档案目录结构不统一

    **问题描述:**

  • 不同用户的档案目录结构存在差异
  • 旧格式使用手机号作为目录名
  • 增加维护成本
  • **整改目标:**

  • 所有档案使用统一格式(contactId 作为目录名)
  • 迁移旧格式档案
  • 更新同步脚本
  • **修改文件清单:**

  • `skills/user-onboard/scripts/sync-all-to-user-index.py`
  • `skills/user-onboard/scripts/archive.py`
  • **新增文件清单:**

  • `scripts/migrate-legacy-archives.sh`
  • `docs/archive-migration-plan.md`
  • **验收标准:**

  • [ ] 所有档案目录使用 contactId 作为目录名
  • [ ] 旧格式档案迁移完成
  • [ ] 同步脚本支持新格式
  • [ ] 迁移日志记录完整
  • ---

    任务 T005:优化活动名称映射管理

    **关联问题:** P004 — 活动名称映射维护成本高

    **问题描述:**

  • 映射表位置分散(config/ + AGENTS.md)
  • 新活动上线需手动更新多处
  • 容易遗漏或过时
  • **整改目标:**

  • 统一映射表位置
  • 增加映射表验证脚本
  • 支持运营人员自助更新
  • **修改文件清单:**

  • `config/activity-name-mapping.json`(统一格式)
  • `skills/activity-reg-link/SKILL.md`(读取统一映射表)
  • `AGENTS.md`(移除内嵌映射表,引用配置文件)
  • **新增文件清单:**

  • `scripts/validate-activity-mapping.py`(映射表验证脚本)
  • `docs/activity-mapping-guide.md`(运营人员更新指南)
  • **验收标准:**

  • [ ] 映射表统一位置(仅 config/activity-name-mapping.json)
  • [ ] 增加映射表验证脚本
  • [ ] AGENTS.md 引用配置文件
  • [ ] 运营人员可自助更新
  • ---

    任务 T006:统一 SESSION_STATE 文件位置

    **关联问题:** P005 — SESSION_STATE 文件分散

    **问题描述:**

  • SESSION_STATE 文件分布在多个位置
  • 加载逻辑复杂
  • 容易加载错误文件
  • **整改目标:**

  • 统一 SESSION_STATE 文件位置
  • 制定加载优先级规则
  • 增加降级处理
  • **修改文件清单:**

  • `skills/memory-continuity/SKILL.md`
  • `skills/user-onboard/scripts/check_contactId.py`
  • **新增文件清单:**

  • `memory/sessions/` 目录
  • `docs/session-state-migration.md`
  • **验收标准:**

  • [ ] SESSION_STATE 文件统一位置
  • [ ] 兼容旧位置(自动迁移)
  • [ ] 加载优先级规则明确
  • [ ] 文件不存在时降级处理
  • ---

    3.3 第三阶段:长期完善(第 4-6 周)

    ---

    任务 T007:规范文档版本管理

    **关联问题:** P006 — 文档版本管理不规范

    **整改目标:**

  • 所有核心文档增加版本号
  • 统一更新时间格式
  • 增加变更日志
  • **新增文件清单:**

  • `CHANGELOG.md`(变更日志)
  • `docs/documentation-standards.md`(文档规范)
  • **验收标准:**

  • [ ] 所有核心文档增加版本号
  • [ ] 统一更新时间格式(ISO 8601)
  • [ ] 增加变更日志
  • ---

    任务 T008:清理测试档案

    **关联问题:** P007 — 测试档案未清理

    **整改目标:**

  • 清理所有测试档案
  • 测试档案使用独立目录
  • 同步脚本自动跳过测试目录
  • **新增文件清单:**

  • `test-contacts/` 目录(测试档案专用)
  • `scripts/cleanup-test-archives.sh`
  • **验收标准:**

  • [ ] 所有测试档案清理完成
  • [ ] 测试档案使用独立目录
  • [ ] 同步脚本自动跳过测试目录
  • ---

    任务 T009:引入数据库存储(长期)

    **整改目标:**

  • 使用 SQLite/PostgreSQL 替代文件存储
  • 提高数据一致性
  • 支持复杂查询
  • **新增文件清单:**

  • `database/schema.sql`
  • `database/db.py`(数据库操作封装)
  • ---

    任务 T010:建立自动化测试体系

    **整改目标:**

  • 建立自动化测试框架
  • 核心功能测试覆盖率 > 80%
  • **新增文件清单:**

  • `tests/` 目录
  • `tests/test_user_onboard.py`
  • `.github/workflows/ci.yml`(CI 配置)
  • ---

    四、风险评估

    4.1 风险矩阵

    风险可能性影响风险等级缓解措施
    数据迁移丢失⚠️ 中迁移前完整备份
    同步脚本故障⚠️ 中保留旧版本,灰度发布
    渠道 API 变更ℹ️ 低抽象 API 接口层
    测试覆盖不足ℹ️ 低分阶段增加测试

    4.2 回滚方案

    任务回滚方案
    T001保留旧版 sync_user_index.py,可随时切换
    T002关闭渠道监控任务,不影响现有功能
    T003恢复硬编码 contactId,重新部署
    T004保留旧目录结构,手动恢复
    T005恢复 AGENTS.md 内嵌映射表
    T006恢复旧 SESSION_STATE 位置
    T009保留文件存储,双写模式过渡

    ---

    五、验收标准

    5.1 第一阶段验收(第 1 周末)

  • [ ] P001: user_index.json 同步成功率 > 99.9%
  • [ ] P002: 渠道监控脚本正常运行
  • [ ] P008: 云部署脚本无硬编码 contactId
  • 5.2 第二阶段验收(第 3 周末)

  • [ ] P003: 所有档案目录使用 contactId
  • [ ] P004: 映射表统一位置
  • [ ] P005: SESSION_STATE 文件统一位置
  • 5.3 第三阶段验收(第 6 周末)

  • [ ] P006: 所有核心文档有版本号
  • [ ] P007: 测试档案清理完成
  • [ ] T009: 数据库存储上线(可选)
  • [ ] T010: 自动化测试覆盖率 > 80%
  • ---

    六、资源需求

    6.1 人力资源

    角色人数工时
    开发工程师1-280 小时
    测试工程师120 小时
    文档工程师0.510 小时
    运营人员0.56 小时

    ---

    七、审批流程

    阶段审批人状态日期
    计划编制小医✅ 已完成2026-04-28
    技术评审待指定⏳ 待审批-
    产品评审高祖峰⏳ 待审批-
    最终批准高祖峰⏳ 待审批-

    ---

    八、附录

    A. 相关文件清单

    文件说明位置
    建档流程与架构分析报告.md分析报告原文docs/architecture-analysis/
    issue-tracker-20260427.md问题执行清单docs/
    history-issues-tracker.md历史问题追踪docs/

    B. 术语表

    术语说明
    contactIdtutu-aggchat 分配的用户短 ID(8 位)
    user_index.json全局用户索引文件
    SESSION_STATE会话状态文件
    tutu-aggchat企业微信聚合聊天通道

    ---

    _整改计划版本:v1.0_

    _编制时间:2026-04-28 14:12_

    _编制依据:《建档流程与架构分析报告》_

    _状态:待审批_

    _保存位置:/home/admin/.openclaw/workspace/docs/architecture-analysis/整改计划-v1.0.md_