Merge remote-tracking branch 'websoft/dev'

This commit is contained in:
2026-10-19 22:37:23 +08:00
60 changed files with 9010 additions and 341 deletions
@@ -0,0 +1,30 @@
-- 收票登记:删除冗余的 kingdee_bill_no / kingdee_status 两列
-- 这两列由收票登记旧版金蝶同步链路写入,同步功能已下线,代码中已无任何读写。
-- 收票登记的金蝶状态以 kingdee_push_status 为唯一状态源(未推送/已保存收票单/已指定应付/推送失败);
-- 金蝶单据号可经 kingdee_invoice_pool_id 关联 blade_kingdee_invoice_pool 取 serial_no,
-- 两列的取值集合也与新模型对不上(旧值 pushed / assigned 在新模型里不存在),故不搬运数据。
-- 基线建表脚本 blade_invoice_receipt_20260821.sql 仍声明这两列,
-- 而 CREATE TABLE IF NOT EXISTS 对已存在的表是空操作,存量库只能靠 ALTER 收敛。
-- 以下语句可重复执行。
SET @ddl_sql = (
SELECT IF(COUNT(*) > 0,
'ALTER TABLE `blade_invoice_receipt` DROP COLUMN `kingdee_bill_no`',
'SELECT 1')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_invoice_receipt' AND COLUMN_NAME = 'kingdee_bill_no'
);
PREPARE ddl_stmt FROM @ddl_sql;
EXECUTE ddl_stmt;
DEALLOCATE PREPARE ddl_stmt;
-- 索引 idx_invoice_receipt_kingdee 建在 kingdee_status 上,随该列一并删除,无需单独 DROP INDEX
SET @ddl_sql = (
SELECT IF(COUNT(*) > 0,
'ALTER TABLE `blade_invoice_receipt` DROP COLUMN `kingdee_status`',
'SELECT 1')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_invoice_receipt' AND COLUMN_NAME = 'kingdee_status'
);
PREPARE ddl_stmt FROM @ddl_sql;
EXECUTE ddl_stmt;
DEALLOCATE PREPARE ddl_stmt;
@@ -1,42 +0,0 @@
-- 收票登记:补金蝶单据字段
-- 已有环境里的 blade_invoice_receipt 由更早一版的建表语句创建,缺 kingdee_bill_no /
-- kingdee_status;建表语句用的是 CREATE TABLE IF NOT EXISTS,对已存在的表是空操作,
-- 所以只跑建表脚本补不上这两列,必须走 ALTER。
-- 以下语句可重复执行。
SET @ddl_sql = (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `blade_invoice_receipt` ADD COLUMN `kingdee_bill_no` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ''金蝶单据编号'' AFTER `current_processor`',
'SELECT 1')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_invoice_receipt' AND COLUMN_NAME = 'kingdee_bill_no'
);
PREPARE ddl_stmt FROM @ddl_sql;
EXECUTE ddl_stmt;
DEALLOCATE PREPARE ddl_stmt;
-- 存量行取默认值 unsynced;收票记录只有 synced / failed / unsynced 三种取值
SET @ddl_sql = (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `blade_invoice_receipt` ADD COLUMN `kingdee_status` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ''unsynced'' COMMENT ''金蝶同步状态:unsynced未同步、synced已同步、failed同步失败'' AFTER `kingdee_bill_no`',
'SELECT 1')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_invoice_receipt' AND COLUMN_NAME = 'kingdee_status'
);
PREPARE ddl_stmt FROM @ddl_sql;
EXECUTE ddl_stmt;
DEALLOCATE PREPARE ddl_stmt;
SET @ddl_sql = (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `blade_invoice_receipt` ADD KEY `idx_invoice_receipt_kingdee` (`kingdee_status`)',
'SELECT 1')
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_invoice_receipt' AND INDEX_NAME = 'idx_invoice_receipt_kingdee'
);
PREPARE ddl_stmt FROM @ddl_sql;
EXECUTE ddl_stmt;
DEALLOCATE PREPARE ddl_stmt;
-- 旧列 kingdee_received_invoice_no / kingdee_received_invoice_id / kingdee_push_status /
-- kingdee_push_msg / kingdee_push_time 在代码里已无任何引用,且取值集合与新模型对不上
-- (旧值 pushed / assigned 在新模型里不存在),故不搬运数据,保持原样不动。
@@ -0,0 +1,61 @@
-- ----------------------------
-- 调度端运单列表按组织过滤:dept_id 缺失的存量运单订正回它所属的组织
-- 写业务数据。执行前必须先建备份表(第 0 节),执行后必须跑第 2 节校验。可重复执行。
-- ----------------------------
--
-- 为什么要订正:
-- 调度端(小程序管理端)运单列表的可见范围是「本组织」,超管看全租户。
-- dept_id 为 NULL 或 -1 的运单不属于任何组织,普通用户再也看不到它们。
-- 本机库实测 42 张:34 张的 dept_id = -1、8 张为 NULL,全部是 2026-10-15 / 10-16
-- 由 admin 在 1123598813738675201 下建的(-1 是客户端把「未选组织」当 -1 传上来的哨兵值,
-- 服务端写入前的兜底只判空、拦不住负数)。
--
-- 处置口径:取该运单的 create_dept(创建人所属组织)作为它的组织。
-- 42 张的 create_dept 都是 1123598813738675201,与它们的业务归属一致;
-- 按 create_dept 取而不是写死这个 id,其它环境执行时同样成立。
-- dept_name 取组织表当前的名字:新建运单写的就是这个名字,不跟随存量行里的历史短名
-- (「桂物物流集团」这类短名是历史写法,本次只补缺失值,不复位已存在的值)。
-- 只动 dept_id 为空或非正数的行,且要求 create_dept 为正数:重复执行不再改动任何行。
-- update_time 不在 SET 里,保留原值。
-- ----------------------------
-- 0. 备份(必须在订正之前执行,仅首次需要)
-- ----------------------------
-- CREATE TABLE blade_waybill_dept_bak AS
-- SELECT id, waybill_no, dept_id, dept_name, create_dept, update_time
-- FROM blade_waybill
-- WHERE is_deleted = 0 AND (dept_id IS NULL OR dept_id <= 0);
START TRANSACTION;
-- ----------------------------
-- 1. 订正组织
-- ----------------------------
UPDATE `blade_waybill`
SET `dept_id` = `create_dept`,
`dept_name` = (SELECT `dept_name` FROM `blade_dept` WHERE `id` = `blade_waybill`.`create_dept` LIMIT 1)
WHERE `is_deleted` = 0
AND (`dept_id` IS NULL OR `dept_id` <= 0)
AND `create_dept` IS NOT NULL
AND `create_dept` > 0;
COMMIT;
-- ----------------------------
-- 2. 校验(执行后必看,两个都必须返回 0)
-- ----------------------------
-- -- 仍不属于任何组织的可见运单
-- SELECT COUNT(*) FROM blade_waybill
-- WHERE is_deleted = 0 AND (dept_id IS NULL OR dept_id <= 0) AND create_dept > 0;
--
-- -- 本次订正过的行,组织 ID 与组织名都必须跟组织表一致
-- SELECT COUNT(*) FROM blade_waybill w
-- JOIN blade_waybill_dept_bak b ON b.id = w.id
-- JOIN blade_dept d ON d.id = w.dept_id
-- WHERE w.dept_id <> w.create_dept OR w.dept_name <> d.dept_name;
-- ----------------------------
-- 3. 回退(订正后发现问题时执行)
-- ----------------------------
-- UPDATE blade_waybill w
-- JOIN blade_waybill_dept_bak b ON b.id = w.id
-- SET w.dept_id = b.dept_id, w.dept_name = b.dept_name;