Merge branch 'master' into feature/payment-apply-bfi-sync
# Conflicts: # blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java
This commit is contained in:
@@ -2442,7 +2442,7 @@ CREATE TABLE "blade_railway_station" (
|
||||
"id" int8 NOT NULL,
|
||||
"code" varchar(20) NOT NULL,
|
||||
"tmis_code" varchar(5) NOT NULL,
|
||||
"telegraph_code" varchar(3) NOT NULL,
|
||||
"telegraph_code" varchar(3) NULL,
|
||||
"name" varchar(100) NOT NULL,
|
||||
"railway_line" varchar(100),
|
||||
"province_code" varchar(12),
|
||||
|
||||
@@ -304,6 +304,7 @@ CREATE TABLE `blade_dept` (
|
||||
`full_name` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门全称',
|
||||
`dept_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组织编码',
|
||||
`kingdee_dept_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '金蝶部门代码',
|
||||
`contract_code_prefix` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '合同编码前缀',
|
||||
`short_name` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组织简称',
|
||||
`pinyin_mnemonic` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '拼音助记码',
|
||||
`mnemonic_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '助记码',
|
||||
@@ -1550,7 +1551,7 @@ CREATE TABLE `blade_railway_station` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码',
|
||||
`tmis_code` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'TMIS国标编码',
|
||||
`telegraph_code` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '电报码',
|
||||
`telegraph_code` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电报码',
|
||||
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '车站名称',
|
||||
`railway_line` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属铁路线路',
|
||||
`province_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份编码',
|
||||
|
||||
@@ -2442,7 +2442,7 @@ CREATE TABLE "blade_railway_station" (
|
||||
"id" int8 NOT NULL,
|
||||
"code" varchar(20) NOT NULL,
|
||||
"tmis_code" varchar(5) NOT NULL,
|
||||
"telegraph_code" varchar(3) NOT NULL,
|
||||
"telegraph_code" varchar(3) NULL,
|
||||
"name" varchar(100) NOT NULL,
|
||||
"railway_line" varchar(100),
|
||||
"province_code" varchar(12),
|
||||
|
||||
@@ -7592,7 +7592,7 @@ CREATE TABLE [dbo].[blade_railway_station] (
|
||||
[id] bigint NOT NULL,
|
||||
[code] nvarchar(20) NOT NULL,
|
||||
[tmis_code] nvarchar(5) NOT NULL,
|
||||
[telegraph_code] nvarchar(3) NOT NULL,
|
||||
[telegraph_code] nvarchar(3) NULL,
|
||||
[name] nvarchar(100) NOT NULL,
|
||||
[railway_line] nvarchar(100) NULL,
|
||||
[province_code] nvarchar(12) NULL,
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
-- 合同管理新增申请日期:正式合同提交时写入当天日期
|
||||
ALTER TABLE `blade_contract_manage`
|
||||
ADD COLUMN `apply_date` date DEFAULT NULL COMMENT '申请日期(提交正式合同时写入)' AFTER `sign_date`;
|
||||
@@ -0,0 +1,3 @@
|
||||
-- 合同管理新增合同主要内容(非必填,最多1000字)
|
||||
ALTER TABLE `blade_contract_manage`
|
||||
ADD COLUMN `main_content` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '合同主要内容' AFTER `terminate_reason`;
|
||||
@@ -0,0 +1,3 @@
|
||||
-- 组织机构新增合同编码前缀:合同编号 = 前缀(年份)三位流水号,流水按部门独立
|
||||
ALTER TABLE `blade_dept`
|
||||
ADD COLUMN `contract_code_prefix` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '合同编码前缀' AFTER `kingdee_dept_code`;
|
||||
@@ -0,0 +1,4 @@
|
||||
-- 机构表:记录 OA 的 modified(上次更新时间),用于增量同步比对
|
||||
|
||||
ALTER TABLE `blade_dept`
|
||||
ADD COLUMN `oa_modified` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'OA上次更新时间(modified)' AFTER `oa_sup_sub_com_id`;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- 合同附件类型字典:合同文件 → 用印材料
|
||||
-- 业务字典 code = contract_attachment_type
|
||||
|
||||
UPDATE blade_dict_biz
|
||||
SET dict_key = '用印材料',
|
||||
dict_value = '用印材料'
|
||||
WHERE code = 'contract_attachment_type'
|
||||
AND is_deleted = 0
|
||||
AND (dict_key = '合同文件' OR dict_value = '合同文件');
|
||||
@@ -12,6 +12,8 @@ CREATE TABLE IF NOT EXISTS `blade_exception_disposal` (
|
||||
`is_deleted` int(11) DEFAULT '0' COMMENT '是否已删除',
|
||||
`waybill_id` bigint(20) DEFAULT NULL COMMENT '运单ID',
|
||||
`waybill_no` varchar(100) DEFAULT NULL COMMENT '运单号',
|
||||
`node_code` varchar(64) DEFAULT NULL COMMENT '过程节点 key(为空表示未指明节点)',
|
||||
`node_name` varchar(64) DEFAULT NULL COMMENT '过程节点名称(上报时复制,此后不随过程配置变化)',
|
||||
`loading_or_master_no` varchar(100) DEFAULT NULL COMMENT '配载单号/总单号',
|
||||
`project_id` bigint(20) DEFAULT NULL COMMENT '项目ID',
|
||||
`project_name` varchar(100) DEFAULT NULL COMMENT '项目',
|
||||
@@ -34,7 +36,7 @@ CREATE TABLE IF NOT EXISTS `blade_exception_disposal` (
|
||||
KEY `idx_exception_disposal_status` (`disposal_status`) USING BTREE,
|
||||
KEY `idx_exception_disposal_report_time` (`report_time`) USING BTREE,
|
||||
KEY `idx_exception_disposal_create_time` (`create_time`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='异常处置';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='异常处置';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `blade_exception_disposal_follow_record` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键',
|
||||
@@ -48,13 +50,14 @@ CREATE TABLE IF NOT EXISTS `blade_exception_disposal_follow_record` (
|
||||
`is_deleted` int(11) DEFAULT '0' COMMENT '是否已删除',
|
||||
`disposal_id` bigint(20) NOT NULL COMMENT '异常处置ID',
|
||||
`follow_content` varchar(500) NOT NULL COMMENT '跟进说明',
|
||||
`attachments_json` text DEFAULT NULL COMMENT '附件JSON',
|
||||
`follow_user` bigint(20) DEFAULT NULL COMMENT '跟进人',
|
||||
`follow_user_name` varchar(100) DEFAULT NULL COMMENT '跟进人姓名',
|
||||
`follow_time` datetime DEFAULT NULL COMMENT '跟进时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_exception_follow_disposal` (`disposal_id`) USING BTREE,
|
||||
KEY `idx_exception_follow_time` (`follow_time`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='异常处置跟进记录';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='异常处置跟进记录';
|
||||
|
||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
|
||||
VALUES
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
-- 异常处置新增编辑权限码
|
||||
-- 日期:2026-10-10
|
||||
|
||||
INSERT INTO `blade_menu`
|
||||
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
|
||||
VALUES
|
||||
(2090000000000002006,2090000000000002001,'exception_disposal_edit','编辑','exception_disposal_edit','','',5,2,0,1,NULL,'',0)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`parent_id`=VALUES(`parent_id`),
|
||||
`name`=VALUES(`name`),
|
||||
`path`=VALUES(`path`),
|
||||
`sort`=VALUES(`sort`),
|
||||
`is_deleted`=0;
|
||||
|
||||
-- 授权给超级管理员角色。
|
||||
-- 不能按「持有 exception_disposal 菜单的角色」批量授权:司机角色同样持有该菜单,
|
||||
-- 会被一并授予编辑权——而编辑是运管员才有的操作。
|
||||
-- 注意:运管角色当前并未持有 exception_disposal 菜单,故此处不涉及它;
|
||||
-- 若日后把异常处置开放给运管,需另行授予本编辑码。
|
||||
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
|
||||
SELECT 2090000000000002006 + (r.`id` % 1000), 2090000000000002006, r.`id`
|
||||
FROM `blade_role` r
|
||||
WHERE r.`role_alias` = 'administrator'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `blade_role_menu` x
|
||||
WHERE x.`menu_id` = 2090000000000002006 AND x.`role_id` = r.`id`
|
||||
);
|
||||
|
||||
-- 幂等收口:本编辑码只应挂在超级管理员上,其余角色一律收回。
|
||||
-- 上面的 SELECT 是按授权规则下发,这条是按同一规则回收,二者合起来可重复执行。
|
||||
DELETE FROM `blade_role_menu`
|
||||
WHERE `menu_id` = 2090000000000002006
|
||||
AND `role_id` NOT IN (SELECT `id` FROM `blade_role` WHERE `role_alias` = 'administrator');
|
||||
@@ -0,0 +1,27 @@
|
||||
-- 异常处置跟进记录补充附件
|
||||
-- 日期:2026-10-10
|
||||
--
|
||||
-- 附件以 JSON 数组存放([{"name":"...","url":"..."}]),与本仓库其它附件字段一致。
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
DROP PROCEDURE IF EXISTS `upgrade_blade_exception_disposal_follow_attachments_20261010`$$
|
||||
CREATE PROCEDURE `upgrade_blade_exception_disposal_follow_attachments_20261010`()
|
||||
BEGIN
|
||||
DECLARE db_name varchar(128);
|
||||
SET db_name = DATABASE();
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name
|
||||
AND table_name = 'blade_exception_disposal_follow_record'
|
||||
AND column_name = 'attachments_json') THEN
|
||||
ALTER TABLE `blade_exception_disposal_follow_record`
|
||||
ADD COLUMN `attachments_json` text DEFAULT NULL COMMENT '附件JSON'
|
||||
AFTER `follow_content`;
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
CALL `upgrade_blade_exception_disposal_follow_attachments_20261010`()$$
|
||||
DROP PROCEDURE `upgrade_blade_exception_disposal_follow_attachments_20261010`$$
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,37 @@
|
||||
-- 异常处置增加过程节点归属
|
||||
-- 日期:2026-10-05
|
||||
-- 节点归属用于打卡门禁:某节点有未了结异常时,该节点及其后的节点不可打卡。
|
||||
-- node_code 为空表示未指明节点(全局入口上报),此类异常阻断该运单所有尚未打卡的节点。
|
||||
-- node_name 在上报时复制,此后不随过程配置变化,与车牌、项目、承运商等展示字段同一口径。
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
DROP PROCEDURE IF EXISTS `upgrade_blade_exception_disposal_node_code_20261005`$$
|
||||
CREATE PROCEDURE `upgrade_blade_exception_disposal_node_code_20261005`()
|
||||
BEGIN
|
||||
DECLARE db_name varchar(128);
|
||||
SET db_name = DATABASE();
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name
|
||||
AND table_name = 'blade_exception_disposal'
|
||||
AND column_name = 'node_code') THEN
|
||||
ALTER TABLE `blade_exception_disposal`
|
||||
ADD COLUMN `node_code` varchar(64) DEFAULT NULL COMMENT '过程节点 key(为空表示未指明节点)'
|
||||
AFTER `waybill_no`;
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name
|
||||
AND table_name = 'blade_exception_disposal'
|
||||
AND column_name = 'node_name') THEN
|
||||
ALTER TABLE `blade_exception_disposal`
|
||||
ADD COLUMN `node_name` varchar(64) DEFAULT NULL COMMENT '过程节点名称(上报时复制,此后不随过程配置变化)'
|
||||
AFTER `node_code`;
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
CALL `upgrade_blade_exception_disposal_node_code_20261005`()$$
|
||||
DROP PROCEDURE `upgrade_blade_exception_disposal_node_code_20261005`$$
|
||||
|
||||
DELIMITER ;
|
||||
@@ -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,90 @@
|
||||
-- ----------------------------
|
||||
-- 小程序用户管理菜单(挂在系统管理下)
|
||||
-- 日期:2026-10-12
|
||||
-- ----------------------------
|
||||
|
||||
INSERT INTO `blade_menu`
|
||||
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
|
||||
VALUES
|
||||
(2091901200000000101,1123598815738675203,'mp_user','小程序用户','menu','/system/mp-user','iconfont icon-yonghu',3,1,0,1,NULL,'小程序用户管理',0),
|
||||
(2091901200000000102,2091901200000000101,'mp_user_add','新增','add','','',1,2,0,1,NULL,'',0),
|
||||
(2091901200000000103,2091901200000000101,'mp_user_edit','编辑','edit','','',2,2,0,1,NULL,'',0),
|
||||
(2091901200000000104,2091901200000000101,'mp_user_delete','删除','delete','','',3,2,0,1,NULL,'',0),
|
||||
(2091901200000000105,2091901200000000101,'mp_user_view','查看','view','','',4,2,0,1,NULL,'',0),
|
||||
(2091901200000000106,2091901200000000101,'mp_user_status','修改状态','status','','',5,2,0,1,NULL,'',0),
|
||||
(2091901200000000107,2091901200000000101,'mp_user_reset','密码重置','reset','','',6,2,0,1,NULL,'',0)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`parent_id`=VALUES(`parent_id`),
|
||||
`code`=VALUES(`code`),
|
||||
`name`=VALUES(`name`),
|
||||
`alias`=VALUES(`alias`),
|
||||
`path`=VALUES(`path`),
|
||||
`source`=VALUES(`source`),
|
||||
`sort`=VALUES(`sort`),
|
||||
`category`=VALUES(`category`),
|
||||
`remark`=VALUES(`remark`),
|
||||
`is_deleted`=0;
|
||||
|
||||
-- 授权给超级管理员角色(幂等)
|
||||
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
|
||||
SELECT 2091901200000000101 + (r.`id` % 1000), 2091901200000000101, r.`id`
|
||||
FROM `blade_role` r
|
||||
WHERE r.`role_alias` = 'administrator'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `blade_role_menu` x
|
||||
WHERE x.`menu_id` = 2091901200000000101 AND x.`role_id` = r.`id`
|
||||
);
|
||||
|
||||
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
|
||||
SELECT 2091901200000000102 + (r.`id` % 1000), 2091901200000000102, r.`id`
|
||||
FROM `blade_role` r
|
||||
WHERE r.`role_alias` = 'administrator'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `blade_role_menu` x
|
||||
WHERE x.`menu_id` = 2091901200000000102 AND x.`role_id` = r.`id`
|
||||
);
|
||||
|
||||
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
|
||||
SELECT 2091901200000000103 + (r.`id` % 1000), 2091901200000000103, r.`id`
|
||||
FROM `blade_role` r
|
||||
WHERE r.`role_alias` = 'administrator'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `blade_role_menu` x
|
||||
WHERE x.`menu_id` = 2091901200000000103 AND x.`role_id` = r.`id`
|
||||
);
|
||||
|
||||
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
|
||||
SELECT 2091901200000000104 + (r.`id` % 1000), 2091901200000000104, r.`id`
|
||||
FROM `blade_role` r
|
||||
WHERE r.`role_alias` = 'administrator'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `blade_role_menu` x
|
||||
WHERE x.`menu_id` = 2091901200000000104 AND x.`role_id` = r.`id`
|
||||
);
|
||||
|
||||
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
|
||||
SELECT 2091901200000000105 + (r.`id` % 1000), 2091901200000000105, r.`id`
|
||||
FROM `blade_role` r
|
||||
WHERE r.`role_alias` = 'administrator'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `blade_role_menu` x
|
||||
WHERE x.`menu_id` = 2091901200000000105 AND x.`role_id` = r.`id`
|
||||
);
|
||||
|
||||
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
|
||||
SELECT 2091901200000000106 + (r.`id` % 1000), 2091901200000000106, r.`id`
|
||||
FROM `blade_role` r
|
||||
WHERE r.`role_alias` = 'administrator'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `blade_role_menu` x
|
||||
WHERE x.`menu_id` = 2091901200000000106 AND x.`role_id` = r.`id`
|
||||
);
|
||||
|
||||
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
|
||||
SELECT 2091901200000000107 + (r.`id` % 1000), 2091901200000000107, r.`id`
|
||||
FROM `blade_role` r
|
||||
WHERE r.`role_alias` = 'administrator'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `blade_role_menu` x
|
||||
WHERE x.`menu_id` = 2091901200000000107 AND x.`role_id` = r.`id`
|
||||
);
|
||||
@@ -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` <> '';
|
||||
@@ -0,0 +1,19 @@
|
||||
-- 订正过程配置中「上传货量为是、货量类型为空」的脏配置
|
||||
-- 日期:2026-10-05
|
||||
--
|
||||
-- 成因:过程配置页的「到场」「回单」两个节点模板缺 supportCargo 字段,货量开关
|
||||
-- 在界面上不渲染,导致这两个节点被写成 uploadCargo=true 且 cargoTypes 恒为空。
|
||||
-- 语义:「是否需要采集货量」以已勾选的货量类型为准——类型为空即不采集,
|
||||
-- 不存在「没配类型所以三项全采集」。
|
||||
-- 影响:订正后这些节点在小程序不再显示货量表单。因司机端解析过程配置时优先取
|
||||
-- 启用中的活配置,本次订正会同时改变所有引用该项目的运单(含历史运单)的呈现。
|
||||
-- 范围:只订正过程配置表,不修改 blade_waybill.process_json 快照列(那是历史留痕)。
|
||||
-- 幂等:执行后目标子串不再存在,重复执行匹配 0 行。
|
||||
|
||||
UPDATE `blade_process_config`
|
||||
SET `node_config_json` = REPLACE(
|
||||
`node_config_json`,
|
||||
'"uploadCargo":true,"cargoTypes":[]',
|
||||
'"uploadCargo":false,"cargoTypes":[]')
|
||||
WHERE `is_deleted` = 0
|
||||
AND `node_config_json` LIKE '%"uploadCargo":true,"cargoTypes":[]%';
|
||||
@@ -0,0 +1,4 @@
|
||||
-- 平台公司支持多选:ID 逗号分隔,名称顿号分隔
|
||||
ALTER TABLE `blade_project_apply`
|
||||
MODIFY COLUMN `undertake_dept_id` varchar(500) DEFAULT NULL COMMENT '平台公司ID,多个逗号分隔',
|
||||
MODIFY COLUMN `undertake_dept_name` varchar(500) DEFAULT NULL COMMENT '平台公司,多个顿号分隔';
|
||||
@@ -18,8 +18,8 @@ CREATE TABLE `blade_project_apply` (
|
||||
`project_type` varchar(50) DEFAULT NULL COMMENT '项目类型',
|
||||
`business_dept_id` bigint(20) DEFAULT NULL COMMENT '业务部门ID',
|
||||
`business_dept_name` varchar(100) DEFAULT NULL COMMENT '业务部门',
|
||||
`undertake_dept_id` bigint(20) DEFAULT NULL COMMENT '承办部门ID',
|
||||
`undertake_dept_name` varchar(100) DEFAULT NULL COMMENT '承办部门',
|
||||
`undertake_dept_id` varchar(500) DEFAULT NULL COMMENT '平台公司ID,多个逗号分隔',
|
||||
`undertake_dept_name` varchar(500) DEFAULT NULL COMMENT '平台公司,多个顿号分隔',
|
||||
`project_source` varchar(50) DEFAULT NULL COMMENT '项目由来',
|
||||
`source_remark` varchar(500) DEFAULT NULL COMMENT '项目由来说明',
|
||||
`fund_limit` decimal(18,2) DEFAULT NULL COMMENT '项目资金使用额度(万元)',
|
||||
@@ -80,8 +80,8 @@ CREATE TABLE `blade_temporary_credit_limit` (
|
||||
`project_id` bigint(20) DEFAULT NULL COMMENT '项目ID',
|
||||
`project_code` varchar(100) DEFAULT NULL COMMENT '项目编号',
|
||||
`project_name` varchar(100) DEFAULT NULL COMMENT '项目名称',
|
||||
`undertake_dept_id` bigint(20) DEFAULT NULL COMMENT '承办部门ID',
|
||||
`undertake_dept_name` varchar(100) DEFAULT NULL COMMENT '承办部门',
|
||||
`undertake_dept_id` varchar(500) DEFAULT NULL COMMENT '平台公司ID,多个逗号分隔',
|
||||
`undertake_dept_name` varchar(500) DEFAULT NULL COMMENT '平台公司,多个顿号分隔',
|
||||
`project_fund_limit` decimal(18,2) DEFAULT NULL COMMENT '项目资金使用额度(万元)',
|
||||
`used_fund_limit` decimal(18,2) DEFAULT NULL COMMENT '已使用项目资金额度(万元)',
|
||||
`remaining_fund_limit` decimal(18,2) DEFAULT NULL COMMENT '剩余项目资金使用额度(万元)',
|
||||
@@ -119,8 +119,8 @@ CREATE TABLE `blade_contract_manage` (
|
||||
`contract_name` varchar(100) DEFAULT NULL COMMENT '合同名称',
|
||||
`project_id` bigint(20) DEFAULT NULL COMMENT '所属项目ID',
|
||||
`project_name` varchar(100) DEFAULT NULL COMMENT '所属项目',
|
||||
`organization_id` bigint(20) DEFAULT NULL COMMENT '所属组织ID',
|
||||
`organization_name` varchar(100) DEFAULT NULL COMMENT '所属组织',
|
||||
`organization_id` bigint(20) DEFAULT NULL COMMENT '合同负责部门ID',
|
||||
`organization_name` varchar(100) DEFAULT NULL COMMENT '合同负责部门',
|
||||
`contract_category` varchar(50) DEFAULT NULL COMMENT '合同类别',
|
||||
`sign_type` varchar(50) DEFAULT NULL COMMENT '签约类型',
|
||||
`party_a` varchar(200) DEFAULT NULL COMMENT '甲方',
|
||||
@@ -132,6 +132,7 @@ CREATE TABLE `blade_contract_manage` (
|
||||
`handler_user_id` bigint(20) DEFAULT NULL COMMENT '经办人ID',
|
||||
`handler_user_name` varchar(100) DEFAULT NULL COMMENT '经办人',
|
||||
`sign_date` date DEFAULT NULL COMMENT '签订日期',
|
||||
`apply_date` date DEFAULT NULL COMMENT '申请日期(提交正式合同时写入)',
|
||||
`settlement_mode` varchar(100) DEFAULT NULL COMMENT '结算方式',
|
||||
`contract_format` varchar(50) DEFAULT NULL COMMENT '合同格式',
|
||||
`legal_seal_flag` int(11) DEFAULT '0' COMMENT '是否需要加盖法人章',
|
||||
@@ -160,6 +161,7 @@ CREATE TABLE `blade_contract_manage` (
|
||||
`change_reason` varchar(500) DEFAULT NULL COMMENT '变更原因',
|
||||
`change_attachments_json` text DEFAULT NULL COMMENT '待审批变更附件JSON',
|
||||
`terminate_reason` varchar(500) DEFAULT NULL COMMENT '终止原因',
|
||||
`main_content` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '合同主要内容',
|
||||
`remark` varchar(2000) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_contract_project` (`project_id`) USING BTREE,
|
||||
|
||||
@@ -6,7 +6,7 @@ CREATE TABLE `blade_railway_station` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码',
|
||||
`tmis_code` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'TMIS国标编码',
|
||||
`telegraph_code` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '电报码',
|
||||
`telegraph_code` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电报码',
|
||||
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '车站名称',
|
||||
`railway_line` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属铁路线路',
|
||||
`province_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份编码',
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
-- 铁路车站电报略码改为非必填(有值时仍保持唯一)
|
||||
-- 执行前请先备份数据库;如字段已是可空,可跳过本脚本。
|
||||
|
||||
ALTER TABLE `blade_railway_station`
|
||||
MODIFY COLUMN `telegraph_code` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电报码';
|
||||
@@ -0,0 +1,277 @@
|
||||
-- ----------------------------
|
||||
-- 认证:存量司机 / 车辆补生效快照
|
||||
-- 写业务数据。执行前必须先建备份表(第 0 节),执行后必须跑第 3 节校验。可重复执行。
|
||||
-- ----------------------------
|
||||
--
|
||||
-- 为什么必须补:
|
||||
-- 「能否接单」在运营状态之上叠加了认证门槛,判据是生效快照指针
|
||||
-- blade_transport_driver.effective_cert_record_id 与
|
||||
-- blade_transport_vehicle.effective_cert_record_id。这两列与门槛一起新增,
|
||||
-- 新增时对存量对象一律为 NULL;门槛默认开启,于是存量司机与车辆全部被判成
|
||||
-- 「未认证」,接单被直接拒绝。它们在此之前一直正常承运,可用性是既成事实,
|
||||
-- 不该因为换了判定方式就丢掉。
|
||||
--
|
||||
-- 处置口径:给尚无生效快照的存量对象补一条「已通过」记录,并把指针指过去。
|
||||
-- 这是自动认可、不是任何人的审核行为,故 audit_user / audit_time 一律留空,
|
||||
-- 不凭空编造审核留痕。
|
||||
--
|
||||
-- 快照键名必须与 PersonCertSubmitRequest / VehicleCertSubmitRequest 完全一致。
|
||||
-- 键名对不上不会报错、只会静默丢值:司机端「重新认证」表单会缺字段,
|
||||
-- 审核详情会把每个字段都报成「已变更」。改 DTO 字段名时务必同步本脚本。
|
||||
--
|
||||
-- 司机的从业资格证有效期起(qualificationValidStart)在快照里没有来源:
|
||||
-- blade_transport_driver 没有对应列,管理端的同名录入项也是只收不存。
|
||||
-- 此处同样不造值,该键留空。
|
||||
--
|
||||
-- 司机快照里没有 mobile:审核列表的司机姓名/手机号取的是司机档案当前值,
|
||||
-- 不是提交时的快照值,故无需写进快照。
|
||||
--
|
||||
-- 提交司机(submit_user)为什么一起补:
|
||||
-- 审核列表的「司机姓名 / 司机手机号」取数路径是 submit_user -> 系统账号 -> 司机档案。
|
||||
-- submit_user 为空,这两列就永远空白,审核队列「找得到人、联系得上」的价值就没了。
|
||||
-- 车辆认证记录本身不含司机信息,其提交司机取「该车当前绑定的司机」——
|
||||
-- 车辆认证的提交链路强制校验只能操作本人绑定的车辆,故真实提交的车辆认证记录,
|
||||
-- 其提交司机就是这辆车的绑定司机。一条车牌有多个绑定司机时
|
||||
-- (driving_vehicle 是逗号分隔的文本列、无唯一索引),取司机档案 update_time 最新者:
|
||||
-- 库里没有绑定时间戳,这是可用的最好代理指标。
|
||||
-- 解析不到系统账号的(该司机根本没有 blade_user),留 NULL,不编造。
|
||||
--
|
||||
-- 号段:blade_transport_cert_record.id 由应用侧雪花算法发号(当前约 2.1e18),
|
||||
-- 本脚本自行发号,必须落在应用永远到不了的区间,否则会与真实提交撞主键。
|
||||
-- 车辆与司机各占一段,段距 1e17,互不重叠,且都远低于 bigint 上限 9.22e18。
|
||||
-- 该号段同时是回退的识别依据(第 4 节)。
|
||||
-- ⚠️ 不要改成「取 MAX(id) + 偏移量」:雪花 id 每秒最多 +1000,
|
||||
-- 取 MAX+1000000 的话应用约 17 分钟就能追平并开始撞号。
|
||||
-- ⚠️ 也不要把 id 读出来再拼 UPDATE 的 WHERE:id 约 2.1e18 超过 JS/JSON
|
||||
-- 安全整数上限 2^53,传回数据库时末位被截断,UPDATE 会静默匹配 0 行——
|
||||
-- 记录插进去了、指针却没写,且不报任何错。故全程用 SQL 自关联
|
||||
-- (JOIN ... ON r.biz_id = v.id),id 只在库内流转。
|
||||
--
|
||||
-- 发号用会话变量而不是 ROW_NUMBER():窗口函数要 MySQL 8.0 起,本脚本按 5.7 也能执行写。
|
||||
--
|
||||
-- 前置条件:blade_transport_cert_record 表与两张业务表上的
|
||||
-- certification_status / certification_reject_reason / effective_cert_record_id
|
||||
-- 列都已存在(见 blade_transport_cert_record_20261002.sql)。缺表时报
|
||||
-- 「Table ... doesn't exist」,先补跑那个脚本再执行本脚本。
|
||||
|
||||
-- ----------------------------
|
||||
-- 0. 备份(必须在订正之前执行,仅首次需要)
|
||||
-- ----------------------------
|
||||
-- CREATE TABLE blade_transport_vehicle_certbak AS
|
||||
-- SELECT id, certification_status, certification_reject_reason, effective_cert_record_id
|
||||
-- FROM blade_transport_vehicle;
|
||||
-- CREATE TABLE blade_transport_driver_certbak AS
|
||||
-- SELECT id, certification_status, certification_reject_reason, effective_cert_record_id
|
||||
-- FROM blade_transport_driver;
|
||||
-- CREATE TABLE blade_transport_cert_record_bak AS SELECT * FROM blade_transport_cert_record;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
-- ----------------------------
|
||||
-- 1. 为尚无生效快照的车辆补「已通过」记录
|
||||
-- ----------------------------
|
||||
-- 从段内已有的最大号之后接着发,而不是每次从段首发:
|
||||
-- 订正过一次之后又导入了新车、再跑本脚本时,从段首发号会与已有记录撞主键。
|
||||
-- 变量存的是**段内序号**(段基址已减掉),下面 SELECT 里再加回段基址。
|
||||
SET @vehicle_seq := (SELECT IFNULL(MAX(id) - 9000000000000000000, 0)
|
||||
FROM blade_transport_cert_record
|
||||
WHERE id >= 9000000000000000000 AND id < 9100000000000000000);
|
||||
|
||||
INSERT INTO blade_transport_cert_record
|
||||
(id, tenant_id, biz_type, biz_id, biz_key, status, snapshot_json,
|
||||
submit_time, submit_user, create_time, update_time, is_deleted)
|
||||
SELECT 9000000000000000000 + (@vehicle_seq := @vehicle_seq + 1),
|
||||
IFNULL(v.tenant_id, '000000'), 'vehicle', v.id, IFNULL(v.plate_no, ''), 1,
|
||||
JSON_OBJECT(
|
||||
'plateNo', v.plate_no,
|
||||
'ownerName', v.owner_name,
|
||||
'plateColor', v.plate_color,
|
||||
'vehicleType', v.vehicle_type,
|
||||
'vin', v.vin,
|
||||
'outerLength', v.outer_length,
|
||||
'outerWidth', v.outer_width,
|
||||
'outerHeight', v.outer_height,
|
||||
'approvedLoadKg', v.approved_load_kg,
|
||||
'tractionMassKg', v.traction_mass_kg,
|
||||
'energyType', v.energy_type,
|
||||
'businessRelation', v.business_relation,
|
||||
'compulsoryScrapDate', v.compulsory_scrap_date,
|
||||
'compulsoryScrapLongTerm', IF(v.compulsory_scrap_long_term = 1, 1, 0),
|
||||
'drivingLicenseNo', v.driving_license_no,
|
||||
'drivingLicenseImage', v.driving_license_image,
|
||||
'drivingLicenseMainBack', v.driving_license_main_back,
|
||||
'drivingLicenseViceFront', v.driving_license_vice_front,
|
||||
'drivingLicenseViceBack', v.driving_license_vice_back,
|
||||
'drivingLicenseStartDate', v.driving_license_start_date,
|
||||
'drivingLicenseEndDate', v.driving_license_end_date,
|
||||
'drivingLicenseLongTerm', IF(v.driving_license_long_term = 1, 1, 0),
|
||||
'roadTransportCertNo', v.road_transport_cert_no,
|
||||
'roadTransportCertImage', v.road_transport_cert_image,
|
||||
'roadTransportCertStartDate', v.road_transport_cert_start_date,
|
||||
'roadTransportCertEndDate', v.road_transport_cert_end_date,
|
||||
'roadTransportCertLongTerm', IF(v.road_transport_cert_long_term = 1, 1, 0),
|
||||
'registrationNo', v.registration_no,
|
||||
'registrationImage', v.registration_image
|
||||
),
|
||||
NOW(),
|
||||
(SELECT dr.user_id
|
||||
FROM blade_transport_driver dr
|
||||
WHERE dr.is_deleted = 0
|
||||
AND dr.user_id IS NOT NULL
|
||||
AND dr.driving_vehicle IS NOT NULL
|
||||
AND FIND_IN_SET(v.plate_no, REPLACE(dr.driving_vehicle, ',', ',')) > 0
|
||||
ORDER BY dr.update_time DESC, dr.id DESC
|
||||
LIMIT 1),
|
||||
NOW(), NOW(), 0
|
||||
FROM blade_transport_vehicle v
|
||||
LEFT JOIN blade_transport_cert_record r
|
||||
ON r.biz_type = 'vehicle' AND r.biz_id = v.id
|
||||
AND r.id >= 9000000000000000000 AND r.id < 9100000000000000000
|
||||
WHERE v.is_deleted = 0
|
||||
AND v.effective_cert_record_id IS NULL
|
||||
AND r.id IS NULL
|
||||
ORDER BY v.id;
|
||||
|
||||
-- 回填指针:靠 biz_id 自关联,不把 id 带出数据库
|
||||
UPDATE blade_transport_vehicle v
|
||||
JOIN blade_transport_cert_record r
|
||||
ON r.biz_type = 'vehicle' AND r.biz_id = v.id
|
||||
AND r.id >= 9000000000000000000 AND r.id < 9100000000000000000 AND r.status = 1
|
||||
SET v.effective_cert_record_id = r.id,
|
||||
v.certification_status = 1,
|
||||
v.certification_reject_reason = NULL
|
||||
WHERE v.effective_cert_record_id IS NULL AND v.is_deleted = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- 2. 为尚无生效快照的司机补「已通过」记录
|
||||
-- ----------------------------
|
||||
SET @driver_seq := (SELECT IFNULL(MAX(id) - 9100000000000000000, 0)
|
||||
FROM blade_transport_cert_record
|
||||
WHERE id >= 9100000000000000000 AND id < 9200000000000000000);
|
||||
|
||||
INSERT INTO blade_transport_cert_record
|
||||
(id, tenant_id, biz_type, biz_id, biz_key, status, snapshot_json,
|
||||
submit_time, submit_user, create_time, update_time, is_deleted)
|
||||
SELECT 9100000000000000000 + (@driver_seq := @driver_seq + 1),
|
||||
IFNULL(d.tenant_id, '000000'), 'driver', d.id, IFNULL(d.driver_name, ''), 1,
|
||||
JSON_OBJECT(
|
||||
'realName', d.driver_name,
|
||||
'idCardNo', d.id_card_no,
|
||||
'idCardFrontUrl', d.id_card_front,
|
||||
'idCardBackUrl', d.id_card_back,
|
||||
'idCardValidStart', d.id_card_valid_start,
|
||||
'idCardValidEnd', d.id_card_valid_end,
|
||||
'idCardLongTerm', IF(d.id_card_long_term = 1, 1, 0),
|
||||
'driverFileNo', d.driving_license_no,
|
||||
'driverClass', d.driving_type,
|
||||
'driverLicenseFrontUrl', d.driving_license_front,
|
||||
'driverLicenseBackUrl', d.driving_license_back,
|
||||
'driverValidStart', d.driving_license_start_date,
|
||||
'driverValidEnd', d.driving_license_end_date,
|
||||
'driverLongTerm', IF(d.driving_license_long_term = 1, 1, 0),
|
||||
'qualificationType', d.qualification_type,
|
||||
'qualificationNo', d.qualification_no,
|
||||
'qualificationFront', d.qualification_front,
|
||||
'qualificationBack', d.qualification_back,
|
||||
'qualificationValidEnd', d.qualification_end_date,
|
||||
'qualificationLongTerm', IF(d.qualification_long_term = 1, 1, 0),
|
||||
'headPhoto', d.head_photo
|
||||
),
|
||||
NOW(),
|
||||
-- 注册在司机档案上的用户 id 最直接;它为空时退回「按手机号找账号」
|
||||
-- (司机登录账号就是手机号)。两者都落空说明这名司机没有系统账号,
|
||||
-- 此时留 NULL —— 审核列表的司机列本来就取不到人,编不出来。
|
||||
IFNULL(d.user_id,
|
||||
(SELECT u.id
|
||||
FROM blade_user u
|
||||
WHERE u.account = d.mobile COLLATE utf8mb4_general_ci
|
||||
ORDER BY u.id DESC
|
||||
LIMIT 1)),
|
||||
NOW(), NOW(), 0
|
||||
FROM blade_transport_driver d
|
||||
LEFT JOIN blade_transport_cert_record r
|
||||
ON r.biz_type = 'driver' AND r.biz_id = d.id
|
||||
AND r.id >= 9100000000000000000 AND r.id < 9200000000000000000
|
||||
WHERE d.is_deleted = 0
|
||||
AND d.effective_cert_record_id IS NULL
|
||||
AND r.id IS NULL
|
||||
ORDER BY d.id;
|
||||
|
||||
UPDATE blade_transport_driver d
|
||||
JOIN blade_transport_cert_record r
|
||||
ON r.biz_type = 'driver' AND r.biz_id = d.id
|
||||
AND r.id >= 9100000000000000000 AND r.id < 9200000000000000000 AND r.status = 1
|
||||
SET d.effective_cert_record_id = r.id,
|
||||
d.certification_status = 1,
|
||||
d.certification_reject_reason = NULL
|
||||
WHERE d.effective_cert_record_id IS NULL AND d.is_deleted = 0;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ----------------------------
|
||||
-- 3. 校验(执行后必看,四个都必须返回 0)
|
||||
-- ----------------------------
|
||||
-- 下列查询非 0 说明还有对象没有生效快照,门槛开着它们就不可用。
|
||||
-- SELECT COUNT(*) AS vehicle_missing FROM blade_transport_vehicle
|
||||
-- WHERE effective_cert_record_id IS NULL AND is_deleted = 0;
|
||||
-- SELECT COUNT(*) AS driver_missing FROM blade_transport_driver
|
||||
-- WHERE effective_cert_record_id IS NULL AND is_deleted = 0;
|
||||
--
|
||||
-- 下列查询非 0 说明指针指向的不是一条「已通过」记录,生效值取不到内容。
|
||||
-- SELECT COUNT(*) AS vehicle_bad_pointer
|
||||
-- FROM blade_transport_vehicle v
|
||||
-- LEFT JOIN blade_transport_cert_record r ON r.id = v.effective_cert_record_id
|
||||
-- WHERE v.effective_cert_record_id IS NOT NULL AND (r.id IS NULL OR r.status <> 1);
|
||||
-- SELECT COUNT(*) AS driver_bad_pointer
|
||||
-- FROM blade_transport_driver d
|
||||
-- LEFT JOIN blade_transport_cert_record r ON r.id = d.effective_cert_record_id
|
||||
-- WHERE d.effective_cert_record_id IS NOT NULL AND (r.id IS NULL OR r.status <> 1);
|
||||
--
|
||||
-- 快照字段完整性:确认关键字段没有因为键名写错而丢失。
|
||||
-- 司机快照必须含 driverClass(准驾车型),车辆快照必须含 drivingLicenseNo(行驶证档案编号)。
|
||||
-- SELECT COUNT(*) AS driver_snapshot_bad FROM blade_transport_cert_record
|
||||
-- WHERE biz_type = 'driver' AND JSON_EXTRACT(snapshot_json, '$.driverClass') IS NULL;
|
||||
-- SELECT COUNT(*) AS vehicle_snapshot_bad FROM blade_transport_cert_record
|
||||
-- WHERE biz_type = 'vehicle' AND JSON_EXTRACT(snapshot_json, '$.drivingLicenseNo') IS NULL;
|
||||
--
|
||||
-- 号段账目:号段内的记录数应等于本次订正的对象数(首次订正 = 车辆数 + 尚无快照的在用司机数),
|
||||
-- 指针落在号段内的对象数也应等于它。两个数对不上说明有对象漏订正。
|
||||
-- SELECT COUNT(*) AS in_range_record FROM blade_transport_cert_record
|
||||
-- WHERE id >= 9000000000000000000 AND id < 9200000000000000000;
|
||||
-- SELECT COUNT(*) AS driver_backfilled FROM blade_transport_driver
|
||||
-- WHERE effective_cert_record_id >= 9000000000000000000
|
||||
-- AND effective_cert_record_id < 9200000000000000000;
|
||||
-- SELECT COUNT(*) AS vehicle_backfilled FROM blade_transport_vehicle
|
||||
-- WHERE effective_cert_record_id >= 9000000000000000000
|
||||
-- AND effective_cert_record_id < 9200000000000000000;
|
||||
|
||||
-- ----------------------------
|
||||
-- 4. 回退
|
||||
-- ----------------------------
|
||||
-- 识别依据是 id 号段(>= 9.0e18),不是「备份表里没有的 id」:
|
||||
-- 号段法不依赖备份表是否建过,也不会误删订正之后产生的真实提交记录。
|
||||
-- 回退前先把门槛开关置 false(transport.certification.driver-gate-enabled /
|
||||
-- vehicle-gate-enabled),否则清掉指针的瞬间所有对象都不可用。
|
||||
-- 顺序:先清指针,再删记录;反了会在中间态留下悬空指针。
|
||||
-- START TRANSACTION;
|
||||
-- UPDATE blade_transport_driver
|
||||
-- SET effective_cert_record_id = NULL, certification_status = NULL,
|
||||
-- certification_reject_reason = NULL
|
||||
-- WHERE effective_cert_record_id >= 9000000000000000000
|
||||
-- AND effective_cert_record_id < 9200000000000000000;
|
||||
-- UPDATE blade_transport_vehicle
|
||||
-- SET effective_cert_record_id = NULL, certification_status = 0,
|
||||
-- certification_reject_reason = NULL
|
||||
-- WHERE effective_cert_record_id >= 9000000000000000000
|
||||
-- AND effective_cert_record_id < 9200000000000000000;
|
||||
-- DELETE FROM blade_transport_cert_record
|
||||
-- WHERE id >= 9000000000000000000 AND id < 9200000000000000000;
|
||||
-- COMMIT;
|
||||
--
|
||||
-- 车辆 certification_status 还原为 0 是近似值:订正会把原本 0 与 1 的车都写成 1,
|
||||
-- 原分布无法反推。这只影响页面上的状态标,不影响可用性(重跑订正会再次全部写成 1)。
|
||||
-- 要精确还原只能用订正前建好的 blade_transport_vehicle_certbak:
|
||||
-- UPDATE blade_transport_vehicle v
|
||||
-- JOIN blade_transport_vehicle_certbak b ON b.id = v.id
|
||||
-- SET v.certification_status = b.certification_status,
|
||||
-- v.certification_reject_reason = b.certification_reject_reason;
|
||||
@@ -0,0 +1,140 @@
|
||||
-- ----------------------------
|
||||
-- 认证记录:建表,司机表 / 车辆表补认证字段与生效快照指针,订正司机表排序规则,
|
||||
-- 并新增认证审核菜单。可重复执行。
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- 1. 认证记录表
|
||||
-- ----------------------------
|
||||
CREATE TABLE IF NOT EXISTS `blade_transport_cert_record` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键',
|
||||
`tenant_id` varchar(12) NOT NULL DEFAULT '000000' COMMENT '租户ID',
|
||||
`biz_type` varchar(20) NOT NULL COMMENT '认证对象类型:driver-司机,vehicle-车辆',
|
||||
`biz_id` bigint(20) NOT NULL COMMENT '认证对象主键:司机ID或车辆ID(车辆按具体车辆,不是司机)',
|
||||
`biz_key` varchar(100) DEFAULT NULL COMMENT '展示键:司机姓名/车牌号',
|
||||
`status` int(11) NOT NULL COMMENT '审核状态:0审核中 1已通过 2已驳回 3已作废',
|
||||
`snapshot_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '该次提交的全量认证内容JSON,一经创建不可修改',
|
||||
`reject_reason` varchar(200) DEFAULT NULL COMMENT '驳回原因,仅状态为已驳回时有值',
|
||||
`submit_time` datetime DEFAULT NULL COMMENT '提交时间',
|
||||
`submit_user` bigint(20) DEFAULT NULL COMMENT '提交人',
|
||||
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
|
||||
`audit_user` bigint(20) DEFAULT NULL COMMENT '审核人',
|
||||
`create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`is_deleted` int(11) DEFAULT '0' COMMENT '是否已删除',
|
||||
`pending_biz_id` bigint(20) GENERATED ALWAYS AS (if((`status` = 0) and (`is_deleted` = 0),`biz_id`,NULL)) STORED COMMENT '待审唯一键:仅未删除的审核中记录非空,用于保证同对象至多一条待审快照',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_cert_record_pending` (`tenant_id`,`biz_type`,`pending_biz_id`) USING BTREE,
|
||||
KEY `idx_cert_record_biz` (`biz_type`,`biz_id`,`submit_time`) USING BTREE,
|
||||
KEY `idx_cert_record_status` (`biz_type`,`status`,`submit_time`) USING BTREE,
|
||||
KEY `idx_cert_record_submit_time` (`submit_time`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='认证记录';
|
||||
|
||||
-- ----------------------------
|
||||
-- 2~4. 加列与排序规则订正
|
||||
-- ----------------------------
|
||||
DELIMITER $$
|
||||
|
||||
DROP PROCEDURE IF EXISTS `upgrade_transport_cert_record_20261002`$$
|
||||
CREATE PROCEDURE `upgrade_transport_cert_record_20261002`()
|
||||
BEGIN
|
||||
DECLARE db_name varchar(128);
|
||||
SET db_name = DATABASE();
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND column_name = 'certification_status') THEN
|
||||
ALTER TABLE `blade_transport_driver` ADD COLUMN `certification_status` int(11) DEFAULT NULL COMMENT '最新提交状态展示缓存:0审核中 1已通过 2已驳回 3已作废,NULL为从未提交' AFTER `remark`;
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND column_name = 'certification_reject_reason') THEN
|
||||
ALTER TABLE `blade_transport_driver` ADD COLUMN `certification_reject_reason` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最新一次驳回原因展示缓存' AFTER `certification_status`;
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND column_name = 'effective_cert_record_id') THEN
|
||||
ALTER TABLE `blade_transport_driver` ADD COLUMN `effective_cert_record_id` bigint(20) DEFAULT NULL COMMENT '生效快照指针:指向 blade_transport_cert_record.id,NULL 表示从未认证通过;一经设置永不回退' AFTER `certification_reject_reason`;
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND column_name = 'id_card_valid_start') THEN
|
||||
ALTER TABLE `blade_transport_driver` ADD COLUMN `id_card_valid_start` date DEFAULT NULL COMMENT '身份证有效期起' AFTER `id_card_back`;
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND column_name = 'id_card_valid_end') THEN
|
||||
ALTER TABLE `blade_transport_driver` ADD COLUMN `id_card_valid_end` date DEFAULT NULL COMMENT '身份证有效期止' AFTER `id_card_valid_start`;
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND column_name = 'id_card_long_term') THEN
|
||||
ALTER TABLE `blade_transport_driver` ADD COLUMN `id_card_long_term` int(11) DEFAULT '0' COMMENT '身份证长期有效:0否 1是' AFTER `id_card_valid_end`;
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_vehicle' AND column_name = 'effective_cert_record_id') THEN
|
||||
ALTER TABLE `blade_transport_vehicle` ADD COLUMN `effective_cert_record_id` bigint(20) DEFAULT NULL COMMENT '生效快照指针:指向 blade_transport_cert_record.id,NULL 表示从未认证通过;一经设置永不回退' AFTER `certification_reject_reason`;
|
||||
END IF;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND table_collation <> 'utf8mb4_general_ci') THEN
|
||||
ALTER TABLE `blade_transport_driver` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||
END IF;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name AND table_name = 'blade_transport_cert_record'
|
||||
AND column_name = 'pending_biz_id' AND generation_expression NOT LIKE '%is_deleted%'
|
||||
) THEN
|
||||
ALTER TABLE `blade_transport_cert_record`
|
||||
MODIFY COLUMN `pending_biz_id` bigint(20) GENERATED ALWAYS AS (if((`status` = 0) and (`is_deleted` = 0),`biz_id`,NULL)) STORED COMMENT '待审唯一键:仅未删除的审核中记录非空,用于保证同对象至多一条待审快照';
|
||||
END IF;
|
||||
|
||||
-- tenant_id 必须 NOT NULL:唯一索引不对 NULL 去重,允许 NULL 则同一对象可并存两条待审记录
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name AND table_name = 'blade_transport_cert_record'
|
||||
AND column_name = 'tenant_id' AND is_nullable = 'YES'
|
||||
) THEN
|
||||
UPDATE `blade_transport_cert_record` SET `tenant_id` = '000000' WHERE `tenant_id` IS NULL;
|
||||
ALTER TABLE `blade_transport_cert_record`
|
||||
MODIFY COLUMN `tenant_id` varchar(12) NOT NULL DEFAULT '000000' COMMENT '租户ID';
|
||||
END IF;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name AND table_name = 'blade_transport_vehicle'
|
||||
AND column_name = 'certification_status' AND column_comment NOT LIKE '%已作废%'
|
||||
) THEN
|
||||
ALTER TABLE `blade_transport_vehicle`
|
||||
MODIFY COLUMN `certification_status` int(11) DEFAULT '0' COMMENT '最新提交状态展示缓存:0审核中 1已通过 2已驳回 3已作废;可用性判定只看 effective_cert_record_id';
|
||||
END IF;
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name AND table_name = 'blade_transport_vehicle'
|
||||
AND column_name = 'certification_reject_reason' AND column_comment NOT LIKE '%展示缓存%'
|
||||
) THEN
|
||||
ALTER TABLE `blade_transport_vehicle`
|
||||
MODIFY COLUMN `certification_reject_reason` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最新一次驳回原因展示缓存';
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
CALL `upgrade_transport_cert_record_20261002`()$$
|
||||
DROP PROCEDURE `upgrade_transport_cert_record_20261002`$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- ----------------------------
|
||||
-- 5. 菜单
|
||||
-- 挂在「运力管理」2079000000000000001 下;ON DUPLICATE KEY UPDATE 使重跑可覆盖旧值。
|
||||
-- ----------------------------
|
||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES
|
||||
(2079000000000000300, 2079000000000000001, 'cert_certification_audit_driver', '司机审核', 'cert_certification_audit_driver', '/transportCapacity/cert-audit-driver', 'iconfont iconicon_doc', 4, 1, 0, 1, '', '司机认证待审列表', 0),
|
||||
(2079000000000000301, 2079000000000000300, 'cert_certification_audit_driver_audit', '审核', 'cert_certification_audit_driver_audit', '', '', 1, 2, 0, 1, NULL, '通过/驳回司机认证', 0),
|
||||
(2079000000000000310, 2079000000000000001, 'cert_certification_audit_vehicle', '车辆审核', 'cert_certification_audit_vehicle', '/transportCapacity/cert-audit-vehicle', 'iconfont iconicon_doc', 5, 1, 0, 1, '', '车辆认证待审列表', 0),
|
||||
(2079000000000000311, 2079000000000000310, 'cert_certification_audit_vehicle_audit', '审核', 'cert_certification_audit_vehicle_audit', '', '', 1, 2, 0, 1, NULL, '通过/驳回车辆认证', 0)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`parent_id` = VALUES(`parent_id`),
|
||||
`code` = VALUES(`code`),
|
||||
`name` = VALUES(`name`),
|
||||
`alias` = VALUES(`alias`),
|
||||
`path` = VALUES(`path`),
|
||||
`source` = VALUES(`source`),
|
||||
`sort` = VALUES(`sort`),
|
||||
`category` = VALUES(`category`),
|
||||
`action` = VALUES(`action`),
|
||||
`is_open` = VALUES(`is_open`),
|
||||
`component` = VALUES(`component`),
|
||||
`remark` = VALUES(`remark`),
|
||||
`is_deleted` = VALUES(`is_deleted`);
|
||||
@@ -13,10 +13,13 @@ CREATE TABLE `blade_transport_driver` (
|
||||
`education` varchar(20) DEFAULT NULL COMMENT '学历',
|
||||
`address_region` varchar(100) DEFAULT NULL COMMENT '地址区划',
|
||||
`address` varchar(200) DEFAULT NULL COMMENT '详细地址',
|
||||
`driving_vehicle` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '驾驶车辆车牌号',
|
||||
`driving_vehicle` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '驾驶车辆车牌号,多个用逗号分隔',
|
||||
`posts` varchar(100) DEFAULT NULL COMMENT '岗位,多个使用逗号分隔',
|
||||
`id_card_front` varchar(1000) DEFAULT NULL COMMENT '身份证正面照',
|
||||
`id_card_back` varchar(1000) DEFAULT NULL COMMENT '身份证反面照',
|
||||
`id_card_valid_start` date DEFAULT NULL COMMENT '身份证有效期起',
|
||||
`id_card_valid_end` date DEFAULT NULL COMMENT '身份证有效期止',
|
||||
`id_card_long_term` int(11) DEFAULT '0' COMMENT '身份证长期有效:0否 1是',
|
||||
`head_photo` varchar(1000) DEFAULT NULL COMMENT '大头照',
|
||||
`driving_type` varchar(20) NOT NULL COMMENT '准驾车型',
|
||||
`driving_license_no` varchar(50) DEFAULT NULL COMMENT '驾驶证档案编号',
|
||||
@@ -39,6 +42,9 @@ CREATE TABLE `blade_transport_driver` (
|
||||
`emergency_contact_name` varchar(20) NOT NULL COMMENT '紧急联系人姓名',
|
||||
`emergency_contact_mobile` varchar(20) NOT NULL COMMENT '紧急联系人手机号',
|
||||
`remark` varchar(200) DEFAULT NULL COMMENT '备注',
|
||||
`certification_status` int(11) DEFAULT NULL COMMENT '最新提交状态展示缓存:0审核中 1已通过 2已驳回 3已作废,NULL为从未提交',
|
||||
`certification_reject_reason` varchar(200) DEFAULT NULL COMMENT '最新一次驳回原因展示缓存',
|
||||
`effective_cert_record_id` bigint(20) DEFAULT NULL COMMENT '生效快照指针:指向 blade_transport_cert_record.id,NULL 表示从未认证通过;一经设置永不回退',
|
||||
`create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
@@ -54,7 +60,7 @@ CREATE TABLE `blade_transport_driver` (
|
||||
KEY `idx_transport_driver_license_end` (`driving_license_end_date`) USING BTREE,
|
||||
KEY `idx_transport_driver_qualification_end` (`qualification_end_date`) USING BTREE,
|
||||
KEY `idx_transport_driver_status` (`status`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='司机管理';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='司机管理';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of blade_menu for transport capacity driver
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
-- 司机「驾驶车辆」字段扩长:varchar(30) -> varchar(100)。
|
||||
-- 该字段是逗号并列的车牌列表,一个司机最多 5 辆,30 字符不够;超长会静默截断成半个车牌。
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
DROP PROCEDURE IF EXISTS `upgrade_transport_driver_driving_vehicle_widen_20261003`$$
|
||||
CREATE PROCEDURE `upgrade_transport_driver_driving_vehicle_widen_20261003`()
|
||||
BEGIN
|
||||
DECLARE db_name varchar(128);
|
||||
SET db_name = DATABASE();
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name
|
||||
AND table_name = 'blade_transport_driver'
|
||||
AND column_name = 'driving_vehicle'
|
||||
AND character_maximum_length < 100
|
||||
) THEN
|
||||
ALTER TABLE `blade_transport_driver`
|
||||
MODIFY COLUMN `driving_vehicle` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '驾驶车辆车牌号,多个用逗号分隔';
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
CALL `upgrade_transport_driver_driving_vehicle_widen_20261003`()$$
|
||||
DROP PROCEDURE `upgrade_transport_driver_driving_vehicle_widen_20261003`$$
|
||||
|
||||
DELIMITER ;
|
||||
@@ -8,8 +8,10 @@ CREATE TABLE `blade_transport_vehicle` (
|
||||
`organization_name` varchar(50) NOT NULL COMMENT '所属组织',
|
||||
`use_department` varchar(50) DEFAULT NULL COMMENT '使用部门',
|
||||
`plate_no` varchar(16) NOT NULL COMMENT '车牌号',
|
||||
`owner_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所有人(行驶证登记的单位名称,不是司机)',
|
||||
`plate_color` varchar(20) DEFAULT NULL COMMENT '车牌颜色',
|
||||
`vehicle_type` varchar(50) NOT NULL COMMENT '车辆类型',
|
||||
`vin` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '车辆识别代号(车架号)',
|
||||
`outer_length` int(11) DEFAULT NULL COMMENT '外廓长度,毫米',
|
||||
`outer_width` int(11) DEFAULT NULL COMMENT '外廓宽度,毫米',
|
||||
`outer_height` int(11) DEFAULT NULL COMMENT '外廓高度,毫米',
|
||||
@@ -39,8 +41,9 @@ CREATE TABLE `blade_transport_vehicle` (
|
||||
`registration_date` date DEFAULT NULL COMMENT '机动车登记日期',
|
||||
`registration_image` varchar(1000) DEFAULT NULL COMMENT '机动车登记本图片',
|
||||
`remark` varchar(200) DEFAULT NULL COMMENT '备注',
|
||||
`certification_status` int(11) DEFAULT '0' COMMENT '认证状态:0认证中 1认证通过 2认证驳回',
|
||||
`certification_reject_reason` varchar(200) DEFAULT NULL COMMENT '认证驳回原因',
|
||||
`certification_status` int(11) DEFAULT '0' COMMENT '最新提交状态展示缓存:0审核中 1已通过 2已驳回 3已作废;可用性判定只看 effective_cert_record_id',
|
||||
`certification_reject_reason` varchar(200) DEFAULT NULL COMMENT '最新一次驳回原因展示缓存',
|
||||
`effective_cert_record_id` bigint(20) DEFAULT NULL COMMENT '生效快照指针:指向 blade_transport_cert_record.id,NULL 表示从未认证通过;一经设置永不回退',
|
||||
`create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
-- 车辆档案补两列:所有人(行驶证登记的单位名称,不是司机)、车辆识别代号(车架号)。
|
||||
-- 两列均可空,存量车辆没有值。
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
DROP PROCEDURE IF EXISTS `upgrade_transport_vehicle_owner_vin_20261003`$$
|
||||
CREATE PROCEDURE `upgrade_transport_vehicle_owner_vin_20261003`()
|
||||
BEGIN
|
||||
DECLARE db_name varchar(128);
|
||||
SET db_name = DATABASE();
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name
|
||||
AND table_name = 'blade_transport_vehicle'
|
||||
AND column_name = 'owner_name'
|
||||
) THEN
|
||||
ALTER TABLE `blade_transport_vehicle`
|
||||
ADD COLUMN `owner_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所有人(行驶证登记的单位名称,不是司机)' AFTER `plate_no`;
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = db_name
|
||||
AND table_name = 'blade_transport_vehicle'
|
||||
AND column_name = 'vin'
|
||||
) THEN
|
||||
ALTER TABLE `blade_transport_vehicle`
|
||||
ADD COLUMN `vin` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '车辆识别代号(车架号)' AFTER `vehicle_type`;
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
CALL `upgrade_transport_vehicle_owner_vin_20261003`()$$
|
||||
DROP PROCEDURE `upgrade_transport_vehicle_owner_vin_20261003`$$
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,4 @@
|
||||
-- 用户表:记录 OA 的 modified(上次更新时间),用于增量同步比对
|
||||
|
||||
ALTER TABLE `blade_user`
|
||||
ADD COLUMN `oa_modified` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'OA上次更新时间(modified)' AFTER `is_oa`;
|
||||
@@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS `blade_waybill_node_punch` (
|
||||
`longitude` decimal(12, 8) DEFAULT NULL COMMENT '经度',
|
||||
`latitude` decimal(12, 8) DEFAULT NULL COMMENT '纬度',
|
||||
`address` varchar(500) DEFAULT NULL COMMENT '打卡地址',
|
||||
`photos` varchar(2000) DEFAULT NULL COMMENT '凭证照片URL,多张逗号分隔',
|
||||
`photos` text DEFAULT NULL COMMENT '照片 JSON 数组 [{type,url}],每类型至多 9 张',
|
||||
`weight` varchar(32) DEFAULT NULL COMMENT '重量(吨)',
|
||||
`volume` varchar(32) DEFAULT NULL COMMENT '体积(方)',
|
||||
`quantity` varchar(32) DEFAULT NULL COMMENT '数量(件)',
|
||||
@@ -27,4 +27,4 @@ CREATE TABLE IF NOT EXISTS `blade_waybill_node_punch` (
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_node_punch_waybill` (`waybill_id`, `node_code`, `punch_time`) USING BTREE,
|
||||
KEY `idx_node_punch_driver` (`driver_id`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运单过程节点打卡记录';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='运单过程节点打卡记录';
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- ----------------------------
|
||||
-- 节点打卡照片列加宽:varchar(2000) 改为 text
|
||||
-- ----------------------------
|
||||
-- 一个节点可传「打卡照片 9 张 + 每个凭证类型各 9 张」,勾了 4 类凭证时共 45 张;
|
||||
-- 库里实测每张照片含类型的 JSON 串约 111 字符,36 张约 4000 字符,已超 varchar(2000) 一倍。
|
||||
-- 超长时严格模式报 Data too long,非严格模式会静默截断成半个 JSON,后者更难查。
|
||||
-- 内容形状不变,仍是扁平 [{"type","url"}]。可重复执行。
|
||||
|
||||
ALTER TABLE `blade_waybill_node_punch`
|
||||
MODIFY COLUMN `photos` text DEFAULT NULL COMMENT '照片 JSON 数组 [{type,url}],每类型至多 9 张';
|
||||
@@ -1420,7 +1420,7 @@ CREATE TABLE `blade_railway_station` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键',
|
||||
`code` varchar(20) NOT NULL COMMENT '编码',
|
||||
`tmis_code` varchar(5) NOT NULL COMMENT 'TMIS国标编码',
|
||||
`telegraph_code` varchar(3) NOT NULL COMMENT '电报码',
|
||||
`telegraph_code` varchar(3) DEFAULT NULL COMMENT '电报码',
|
||||
`name` varchar(100) NOT NULL COMMENT '车站名称',
|
||||
`railway_line` varchar(100) DEFAULT NULL COMMENT '所属铁路线路',
|
||||
`province_code` varchar(12) DEFAULT NULL COMMENT '所属省份编码',
|
||||
|
||||
Reference in New Issue
Block a user