# 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 MySQL（dmp_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

### 级联更新 SQL（ecid='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'），需先导入数据后再执行更新。
