Merge remote-tracking branch 'websoft/dev'
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user