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

7.5 KiB
Raw Blame History

2026-07-17 工作记录

日期修正 SQL — 新增第16、17表(ecid='hsjm'

继7月15日已生成的15个表批量日期修正脚本之后,今日补充两个表:

16. 收款单 dmp_serp.idb_fin_ar_collection_doc

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

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-prosys
  • 注意: 远程无 dmp_serp

新建表

  • dmp_im_stock_out(出库表)— 在本地 dmp_serp 创建,54个字段,InnoDB/utf8mb4

级联更新 SQLecid='hsjm'

基于 dmp_im_stock_in_out_flow_detailstock_date 更新入库单和出库单:

-- 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_indmp_im_stock_outdmp_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

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 更新创建时间和更新时间:

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 导入