7d951d5b04
原先三个取数入口都不带组织条件,租户内两个组织的运单混在同一张表里。「小程序管理」 账号与运单业务组织不一致确实是事实,但那是账号挂在一个已软删部门上的脏数据症状, 不是「不该按组织过滤」的理由。 现在与后台运单列表同一条规则:普通用户只出自己所属组织,超级管理员不过滤, 小程序端不提供「全部组织」开关;详情与重新派单照旧不按组织收口。 组织条件由调用方算好、经 TripQueryVO.deptIds 落到运次读服务的运单行上, 列表、待处理与首页三档统计因此共用同一条可见范围;「待重新派单」另走库层分组查询, 单独带上,首页重派角标与待办 feed 随之一起收口。 运次读服务的分档统计走一份「去掉 Tab 条件」的副本,该副本必须照搬 deptIds, 否则统计会退回全租户、与列表的数对不上(已由用例钉住)。 存量 42 张 dept_id 为 -1 或 NULL 的运单不属于任何组织,收紧后普通用户再也看不到, 另订正到各自的创建组织,见 doc/sql/transport/blade_waybill_dept_backfill_20261018.sql。 新增 ManageWaybillOrgScopeTest(8 项),TripQueryServiceImplTest 补 3 项; blade-transport 全量 376 项用例通过。
62 lines
3.0 KiB
SQL
62 lines
3.0 KiB
SQL
-- ----------------------------
|
|
-- 调度端运单列表按组织过滤: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;
|