5.4 KiB
name, description
| name | description |
|---|---|
| wellness | 管理按摩放松记录:查询/新增技师联系人(cc_contract)与放松记录(cc_contract_record),本地 MySQL wellness 库。 |
Wellness — 按摩放松记录管理
管理本地 MySQL wellness 数据库,专注按摩/放松方向的技师联系人(联系方式)与每次放松记录的查询与新增。统计功能后续扩展。
边界:本库只记到店/付费服务的消费记录(技师联系人 + 每次服务记录)。健康/皮肤病症(湿疹、闭口粉刺、用药等)不属于本库,归 fitness(健康)agent 的健康档案。
数据库连接
本库 wellness 是 agent wellness 的私有库:库名 = agent id,账号 agent_wellness,唯一入口 db-conn.sh。
~/.openclaw/scripts/db-conn.sh wellness --sql "<SQL>"
- 口令存
~/.openclaw/.env的DB_PASSWORD_放松保健,由脚本内部读取(不进命令行、不打印) - 禁止 root、禁止 docker exec 直连、禁止跨库;旧写法(root 账号、
db-query --database "按摩放松")已废弃
中文乱码 / 写入失败(实测坑)
db-conn.sh 的 mysql 客户端连接字符集默认是 latin1(读写都受影响;这是 db-conn.sh 层面的行为,其他 agent 的库同样适用):
- 读:不带
SET NAMES utf8mb4;时中文列全部返回??? - 写:中文 INSERT/UPDATE 报
ERROR 1265 Data truncated for column '<列名>'
把该语句放在同一条 --sql 的最前面即可正常读写:
~/.openclaw/scripts/db-conn.sh wellness --sql "SET NAMES utf8mb4; SELECT contract_name,record_locale,comment FROM cc_contract_record ORDER BY record_date DESC LIMIT 5"
表结构
cc_contract — 技师/联系人
| 字段 | 类型 | 说明 |
|---|---|---|
| id | varchar(32) PK | 联系人 id |
| name | varchar(100) UNIQUE | 名称(唯一) |
| face_url | varchar(200) | 头像地址 |
| wechat / qq / phone | varchar(100) | 微信 / QQ / 电话 |
| address | varchar(500) | 地址 |
| is_read | tinyint | 是否已阅 |
| price | int | 价格 |
| description / comment | text | 描述 / 评论 |
| group_type | int | 组别:0自营 1客服 2spa |
| score | int | 评分 |
| gmt_create / gmt_update | datetime | 创建 / 更新时间 |
| status | tinyint | 0有效 1无效 |
| deleted | bit(1) | 是否删除 |
cc_contract_record — 每次放松记录
| 字段 | 类型 | 说明 |
|---|---|---|
| id | varchar(50) PK | 记录 id |
| contract_id | varchar(32) | 对应联系人 id(必填) |
| contract_name | varchar(100) | 名称(冗余) |
| record_date | date | 日期(必填) |
| record_locale | varchar(200) | 地点(必填) |
| price | int | 价格 |
| score | int | 评分 |
| comment | text | 评论 |
| gmt_create / gmt_update | datetime | 创建 / 更新时间 |
操作规范
1. 查询
- 查联系人:
SELECT id,name,phone,wechat,qq,address,price,score,group_type,comment FROM cc_contract WHERE deleted=0 AND status=0(可加 name LIKE / group_type / price 过滤) - 查一次记录:
SELECT contract_name,record_date,record_locale,price,score,comment FROM cc_contract_record WHERE deleted=0 AND status=0 ORDER BY record_date DESC(可加 contract_id / 日期范围过滤) - 按技师查历史:
... WHERE contract_id='<id>' ... - 展示给用户时用中文清晰呈现,联系方式公开非敏感
2. 记录(新增)
新增技师联系人:
INSERT INTO cc_contract
(id, name, wechat, qq, phone, address, price, description, comment, group_type,
is_delete, status, deleted, gmt_create, gmt_update, score)
VALUES
(REPLACE(UUID(),'-',''), '<name>', '<wechat>', '<qq>', '<phone>', '<address>', <price>, '<desc>', '<comment>', <group_type>,
0, 0, 0, NOW(), NOW(), <score>)
cc_contract.id是varchar(32):必须去横线。直接UUID()是 36 位,strict mode 下报ERROR 1406 Data too long(实测);用REPLACE(UUID(),'-','')得 32 位。cc_contract_record.id是varchar(50),36 位也能存,但同样用去横线写法保持一致。若 name 已存在会因 UNIQUE 冲突报错,先查询确认。
新增一次放松记录:
INSERT INTO cc_contract_record
(id, contract_id, contract_name, record_date, record_locale, price, score, comment,
is_delete, status, deleted, gmt_create, gmt_update)
VALUES
(REPLACE(UUID(),'-',''), '<contract_id>', '<name>', '<record_date>', '<record_locale>', <price>, <score>, '<comment>',
0, 0, 0, NOW(), NOW())
contract_id 需先从 cc_contract 查到对应联系人 id;record_date 用
YYYY-MM-DD;record_locale 必填——用户没说地点时用机构名占位(如奢思雅),不要留空。价格/评分未提供时:price 留NULL、score 走列默认0(=未评分),事后拿到再UPDATE补,不要为了凑字段而追问。
3. 更新 / 软删
- 更新联系人/记录:
UPDATE ... WHERE id='<id>'(保留软删字段不变) - 软删:
UPDATE cc_contract SET status=1,deleted=1 WHERE id='<id>'(不物理删除)
⚠️ 写入前先 SELECT 确认目标存在,避免误操作。所有写入均通过 db-conn.sh wellness 执行。
通用原则
- 全程中文交互
- 联系方式非敏感信息,正常展示,但不向第三方外泄
- 任何删除/批量修改操作前,先向杨轩展示精确清单并确认
- 统计/报表功能后续扩展,暂不做