✨ 小程序用户独立为 blade_mp_user,并兼容司机/车辆 OCR 宽松日期

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-12 13:02:08 +08:00
parent 42ca5ee7bc
commit e19c3b100a
34 changed files with 1892 additions and 170 deletions
@@ -0,0 +1,45 @@
-- ----------------------------
-- 小程序用户表(与 blade_user 分离,仅用于小程序登录)
-- 身份 identities:逗号分隔,当前支持 driver(司机)、admin(管理员),可同时拥有,后续可扩展
-- ----------------------------
CREATE TABLE IF NOT EXISTS `blade_mp_user` (
`id` bigint NOT NULL COMMENT '主键',
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户ID',
`code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户编号',
`account` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '账号(通常为手机号)',
`password` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码(小程序登录可不使用)',
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '昵称',
`real_name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '真名',
`avatar` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像',
`email` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
`phone` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机',
`birthday` datetime NULL DEFAULT NULL COMMENT '生日',
`sex` int NULL DEFAULT NULL COMMENT '性别',
`openid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信小程序 openid',
`identities` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '小程序身份,逗号分隔:driver,admin',
`dept_id` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门id',
`post_id` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位id',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人',
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_user` bigint NULL DEFAULT NULL COMMENT '修改人',
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
`status` int NULL DEFAULT 1 COMMENT '状态',
`is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_mp_user_tenant_phone` (`tenant_id`, `phone`) USING BTREE,
UNIQUE KEY `uk_mp_user_tenant_openid` (`tenant_id`, `openid`) USING BTREE,
KEY `idx_mp_user_account` (`tenant_id`, `account`) USING BTREE,
KEY `idx_mp_user_identities` (`identities`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '小程序用户表';
-- 司机表 user_id 语义变更为关联小程序用户
ALTER TABLE `blade_transport_driver`
MODIFY COLUMN `user_id` bigint(20) DEFAULT NULL COMMENT '关联小程序用户ID(blade_mp_user.id)';
-- 示例:创建小程序管理员(调度端),identities 可同时包含 driver,admin
-- INSERT INTO `blade_mp_user`
-- (`id`, `tenant_id`, `account`, `name`, `real_name`, `phone`, `identities`, `create_time`, `status`, `is_deleted`)
-- VALUES
-- (2091900000000000001, '000000', '13800000000', '调度管理员', '调度管理员', '13800000000', 'admin', NOW(), 1, 0);
@@ -0,0 +1,61 @@
-- ----------------------------
-- 将已关联 blade_user 的司机迁移到 blade_mp_user(可选,按环境执行)
-- 注意:执行前请先执行 blade_mp_user_20261012.sql 建表
-- 策略:小程序用户主键使用司机表 id(避免与 blade_user.id 冲突导致令牌刷新串用户)
-- 迁移后回写 driver.user_id;原 blade_user 账号不会自动删除,请人工确认后再清理
-- 调度端管理员需另行在 blade_mp_user 中维护 identities 含 admin 的账号
-- ----------------------------
-- 1) 按司机写入小程序用户
INSERT INTO `blade_mp_user` (
`id`, `tenant_id`, `account`, `name`, `real_name`, `phone`, `sex`,
`openid`, `identities`, `dept_id`,
`create_user`, `create_dept`, `create_time`, `update_user`, `update_time`,
`status`, `is_deleted`
)
SELECT
d.`id` AS `id`,
IFNULL(d.`tenant_id`, '000000') AS `tenant_id`,
d.`mobile` AS `account`,
d.`driver_name` AS `name`,
d.`driver_name` AS `real_name`,
d.`mobile` AS `phone`,
CASE
WHEN d.`gender` IN ('男', '1') THEN 1
WHEN d.`gender` IN ('女', '2') THEN 2
ELSE NULL
END AS `sex`,
oauth.`uuid` AS `openid`,
'driver' AS `identities`,
u.`dept_id` AS `dept_id`,
d.`create_user`,
d.`create_dept`,
IFNULL(d.`create_time`, NOW()) AS `create_time`,
d.`update_user`,
IFNULL(d.`update_time`, NOW()) AS `update_time`,
IFNULL(d.`status`, 1) AS `status`,
0 AS `is_deleted`
FROM `blade_transport_driver` d
LEFT JOIN `blade_user` u ON u.`id` = d.`user_id` AND u.`is_deleted` = 0
LEFT JOIN `blade_user_oauth` oauth
ON oauth.`user_id` = d.`user_id`
AND oauth.`source` = 'WECHAT_MINI'
AND oauth.`is_deleted` = 0
WHERE d.`is_deleted` = 0
AND d.`mobile` IS NOT NULL
AND d.`mobile` <> ''
AND NOT EXISTS (
SELECT 1 FROM `blade_mp_user` m
WHERE m.`id` = d.`id`
OR (m.`tenant_id` = IFNULL(d.`tenant_id`, '000000') AND m.`phone` = d.`mobile` AND m.`is_deleted` = 0)
);
-- 2) 回写司机关联的小程序用户ID
UPDATE `blade_transport_driver` d
INNER JOIN `blade_mp_user` m
ON m.`id` = d.`id`
OR (m.`tenant_id` = IFNULL(d.`tenant_id`, '000000') AND m.`phone` = d.`mobile` AND m.`is_deleted` = 0)
SET d.`user_id` = m.`id`
WHERE d.`is_deleted` = 0
AND d.`mobile` IS NOT NULL
AND d.`mobile` <> '';