Files
openclaw-config/workspace-sql/memory/2026-07-17.md
T

182 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-07-17 工作记录
## 日期修正 SQL — 新增第16、17表(ecid='hsjm'
继7月15日已生成的15个表批量日期修正脚本之后,今日补充两个表:
### 16. 收款单 `dmp_serp.idb_fin_ar_collection_doc`
```sql
UPDATE dmp_serp.idb_fin_ar_collection_doc
SET
doc_date = doc_date,
create_time = STR_TO_DATE(
CONCAT(DATE_FORMAT(doc_date, '%Y-%m-%d'), ' ', DATE_FORMAT(create_time, '%H:%i:%s')),
'%Y-%m-%d %H:%i:%s'
)
WHERE ecid = 'hsjm';
```
### 17. 付款单 `dmp_serp.idb_fin_ap_payment_doc`
```sql
UPDATE dmp_serp.idb_fin_ap_payment_doc
SET
doc_date = doc_date,
create_time = STR_TO_DATE(
CONCAT(DATE_FORMAT(doc_date, '%Y-%m-%d'), ' ', DATE_FORMAT(create_time, '%H:%i:%s')),
'%Y-%m-%d %H:%i:%s'
)
WHERE ecid = 'hsjm';
```
### 规则说明
- 与之前15个表一致:用业务日期源字段(`doc_date`)的日期部分替换 `create_time` 的日期,保留原时分秒
- 不更新 `update_time`
- 数据库 `dmp_serp` 不在本地 Docker MySQL 实例中,需在对应环境的数据库上执行
## JumpServer 堡垒机 API 认证测试
**时间:** 2026-07-17 14:17
**API 凭证:**
- Access Key: `ae50b72c-e92e-4185-8371-636bc16bdde0`
- Secret Key: `e0414b64-4126-4747-b318-8457dcd8590d`
- 堡垒机地址:`https://bastion.witdn.com`
**测试结果:**
- 堡垒机 Web 页面可正常访问(HTTP 200
- API 认证尝试多次,签名格式始终不对(返回 "Invalid signature"
- JumpServer 的 Signature 认证需要 HMAC-SHA1 签名,签名串格式为:`{method}\n{accept}\n{date}\n{path}\n`
- 需要进一步调试签名算法或确认 API 凭证权限
**后续:** 可能需要用正确的 Python 脚本生成签名,或确认凭证是否有 API 访问权限。
## MySQL 数据库连接与表操作
### 本地 Docker MySQLdmp_serp
- **容器名**: mysql (mysql:8)
- **密码**: `MYSQL_PWD_SQL=5gynj20J`(来自 .env
- **命令模板**: `docker exec mysql mysql -u root -p"${MYSQL_PWD_SQL}" -D dmp_serp`
### 远程服务器
- **IP**: `101.34.227.188` (xuan-vps)
- **版本**: MySQL 8.4.9
- **用户**: root / 5gynj20J
- **可用库**: `dmp_smdm`(物料主数据)、`ruoyi-vue-pro``sys`
- **注意**: 远程无 `dmp_serp`
### 新建表
- **`dmp_im_stock_out`**(出库表)— 在本地 `dmp_serp` 创建,54个字段,InnoDB/utf8mb4
### 级联更新 SQLecid='hsjm'
基于 `dmp_im_stock_in_out_flow_detail``stock_date` 更新入库单和出库单:
```sql
-- 1. 更新流水明细(每个 stock_no 取 MIN(stock_date)
UPDATE dmp_serp.dmp_im_stock_in_out_flow_detail t1
INNER JOIN (
SELECT ecid, stock_no, MIN(stock_date) AS min_stock_date
FROM dmp_serp.dmp_im_stock_in_out_flow_detail
WHERE ecid = 'hsjm' AND stock_date IS NOT NULL
GROUP BY ecid, stock_no
) t2 ON t1.ecid = t2.ecid AND t1.stock_no = t2.stock_no AND t1.stock_date = t2.min_stock_date
SET t1.create_time = STR_TO_DATE(CONCAT(DATE_FORMAT(t1.stock_date,'%Y-%m-%d'),' ',DATE_FORMAT(t1.create_time,'%H:%i:%s')),'%Y-%m-%d %H:%i:%s'),
t1.update_time = STR_TO_DATE(CONCAT(DATE_FORMAT(t1.stock_date,'%Y-%m-%d'),' ',DATE_FORMAT(t1.update_time,'%H:%i:%s')),'%Y-%m-%d %H:%i:%s')
WHERE t1.ecid = 'hsjm';
-- 2. 级联更新入库单(stock_in_no = stock_no
UPDATE dmp_serp.dmp_im_stock_in t1
INNER JOIN (
SELECT ecid, stock_no, MIN(stock_date) AS min_stock_date
FROM dmp_serp.dmp_im_stock_in_out_flow_detail
WHERE ecid = 'hsjm' AND stock_date IS NOT NULL
GROUP BY ecid, stock_no
) t2 ON t1.ecid = t2.ecid AND t1.stock_in_no = t2.stock_no
SET t1.create_time = STR_TO_DATE(CONCAT(DATE_FORMAT(t2.min_stock_date,'%Y-%m-%d'),' ',DATE_FORMAT(t1.create_time,'%H:%i:%s')),'%Y-%m-%d %H:%i:%s'),
t1.update_time = STR_TO_DATE(CONCAT(DATE_FORMAT(t2.min_stock_date,'%Y-%m-%d'),' ',DATE_FORMAT(t1.update_time,'%H:%i:%s')),'%Y-%m-%d %H:%i:%s'),
t1.completed_at = STR_TO_DATE(CONCAT(DATE_FORMAT(t2.min_stock_date,'%Y-%m-%d'),' ',DATE_FORMAT(COALESCE(t1.completed_at,t1.create_time),'%H:%i:%s')),'%Y-%m-%d %H:%i:%s'),
t1.bill_date = t2.min_stock_date
WHERE t1.ecid = 'hsjm';
-- 3. 级联更新出库单(stock_out_no = stock_no
UPDATE dmp_serp.dmp_im_stock_out t1
INNER JOIN (
SELECT ecid, stock_no, MIN(stock_date) AS min_stock_date
FROM dmp_serp.dmp_im_stock_in_out_flow_detail
WHERE ecid = 'hsjm' AND stock_date IS NOT NULL
GROUP BY ecid, stock_no
) t2 ON t1.ecid = t2.ecid AND t1.stock_out_no = t2.stock_no
SET t1.create_time = STR_TO_DATE(CONCAT(DATE_FORMAT(t2.min_stock_date,'%Y-%m-%d'),' ',DATE_FORMAT(t1.create_time,'%H:%i:%s')),'%Y-%m-%d %H:%i:%s'),
t1.update_time = STR_TO_DATE(CONCAT(DATE_FORMAT(t2.min_stock_date,'%Y-%m-%d'),' ',DATE_FORMAT(t1.update_time,'%H:%i:%s')),'%Y-%m-%d %H:%i:%s'),
t1.delivery_at = STR_TO_DATE(CONCAT(DATE_FORMAT(t2.min_stock_date,'%Y-%m-%d'),' ',DATE_FORMAT(COALESCE(t1.delivery_at,t1.create_time),'%H:%i:%s')),'%Y-%m-%d %H:%i:%s'),
t1.bill_date = t2.min_stock_date
WHERE t1.ecid = 'hsjm';
```
### 当前状态
三个表(`dmp_im_stock_in``dmp_im_stock_out``dmp_im_stock_in_out_flow_detail`)在 `dmp_serp` 中均**无数据**ecid='hsjm'),需先导入数据后再执行更新。
## 工作空间初始化
重写所有配置文件为中文:
- **IDENTITY.md** — SQL Agent,职责:连接数据库、编写分析SQL、提供脚本
- **SOUL.md** — 直接有用、有判断力、先查再做
- **AGENTS.md** — 会话启动、记忆管理、红线、数据库操作规范
- **USER.md** — yangxuan、Asia/Shanghai、偏好中文/简洁/本地客户端
- **HEARTBEAT.md** — 删除(SQL Agent 不需要心跳任务)
- **.git** — 删除独立仓库,使用 `.openclaw` 公用 git
- **.env** — 删除重复文件,共用 `/home/yangxuan/.openclaw/.env`
## 技能安装
从 ClawHub 安装 **sql-toolkit@1.0.0**,覆盖查询设计、迁移优化、索引策略等最佳实践。
## 新建表
- **`dmp_om_productinfo`**(订单明细表)— 在本地 `dmp_serp` 创建,87个字段,InnoDB/utf8mb43个复合索引
## 跨库级联更新
### qc_task_inspect ← dmp_mc_purchase_arrival
关联条件:`arrival_doc_no = arrival_no`
```sql
UPDATE dmp_smes.qc_task_inspect t1
INNER JOIN dmp_serp.dmp_mc_purchase_arrival t2
ON t1.arrival_doc_no = t2.arrival_no
SET
t1.insp_time = STR_TO_DATE(
CONCAT(DATE_FORMAT(t2.ship_date, '%Y-%m-%d'), ' ', DATE_FORMAT(t1.insp_time, '%H:%i:%s')),
'%Y-%m-%d %H:%i:%s'
),
t1.create_time = STR_TO_DATE(
CONCAT(DATE_FORMAT(t2.ship_date, '%Y-%m-%d'), ' ', DATE_FORMAT(t1.create_time, '%H:%i:%s')),
'%Y-%m-%d %H:%i:%s'
),
t1.update_time = STR_TO_DATE(
CONCAT(DATE_FORMAT(t2.ship_date, '%Y-%m-%d'), ' ', DATE_FORMAT(t1.update_time, '%H:%i:%s')),
'%Y-%m-%d %H:%i:%s'
)
WHERE t2.ship_date IS NOT NULL;
```
### dmp_me_work_operate_record_detail
根据报工日期 `report_date` 更新创建时间和更新时间:
```sql
UPDATE `dmp_me_work_operate_record_detail` t1
SET
t1.create_time = STR_TO_DATE(
CONCAT(DATE_FORMAT(t1.report_date, '%Y-%m-%d'), ' ', DATE_FORMAT(t1.create_time, '%H:%i:%s')),
'%Y-%m-%d %H:%i:%s'
),
t1.update_time = STR_TO_DATE(
CONCAT(DATE_FORMAT(t1.report_date, '%Y-%m-%d'), ' ', DATE_FORMAT(t1.update_time, '%H:%i:%s')),
'%Y-%m-%d %H:%i:%s'
)
WHERE t1.ecid = 'kangda'
AND t1.report_date IS NOT NULL;
```
## 数据导入经验
- INSERT 语句中的 `-- NULL` 注释会被 MySQL 当作行内注释吞掉后续值,导致列数不匹配
- 非必填字段可以跳过不插,只写有值的字段
- 长 INSERT 建议写入 `.sql` 文件后通过 `< file.sql` 导入