This commit is contained in:
zlwu committed 2026-06-21 12:41:39 +08:00
1 parent 299609706c
commit e46c0480d4
87 files changed
+11975 -15543

No files matched your search

-163
View File
@@ -1,163 +0,0 @@
-- =============================================================================
-- 运输计划 · 车辆/人员/证书重构 — 增量 DDL
-- 日期: 2026-06-19
-- 说明: 在已有 pl_ 表基础上新增/扩展,不删除 pl_driver(迁移后另脚本处理)
-- =============================================================================
SET NAMES utf8mb4;
-- -----------------------------------------------------------------------------
-- 1. pl_personnel(人员主表)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `pl_personnel` (
`id` varchar(64) NOT NULL COMMENT '主键ID',
`personnel_name` varchar(100) NOT NULL COMMENT '姓名',
`phone_no` varchar(32) DEFAULT NULL COMMENT '手机号(非必填)',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`id_card_no` varchar(32) DEFAULT NULL COMMENT '身份证号',
`status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 1-在职 0-停用',
`tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0' COMMENT '租户编号',
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
`remark` varchar(512) DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` smallint(6) NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_no`),
KEY `idx_phone` (`phone_no`),
KEY `idx_personnel_name` (`personnel_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运输计划-人员表';
-- -----------------------------------------------------------------------------
-- 2. pl_cert(证书实例表)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `pl_cert` (
`id` varchar(64) NOT NULL COMMENT '主键ID',
`owner_type` varchar(20) NOT NULL COMMENT '归属类型 vehicle-车辆 personnel-人员',
`owner_id` varchar(64) NOT NULL COMMENT '归属主体ID',
`cert_name` varchar(100) NOT NULL COMMENT '证书名称',
`cert_no` varchar(64) DEFAULT NULL COMMENT '证号',
`expire_date` date DEFAULT NULL COMMENT '有效期',
`remind_days` int(11) NOT NULL DEFAULT 30 COMMENT '提前提醒天数',
`attachment_urls` varchar(2000) DEFAULT NULL COMMENT '附件URL(逗号分隔)',
`status` varchar(20) NOT NULL DEFAULT 'valid' COMMENT '状态 valid-有效 expired-已过期 revoked-已作废',
`tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0' COMMENT '租户编号',
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
`remark` varchar(512) DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` smallint(6) NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_no`),
KEY `idx_owner` (`owner_type`, `owner_id`),
KEY `idx_expire_date` (`expire_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运输计划-证书表';
-- -----------------------------------------------------------------------------
-- 3. pl_vehicle_personnel(车辆-人员关联,由 pl_vehicle_driver 演进)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `pl_vehicle_personnel` (
`id` varchar(64) NOT NULL COMMENT '主键ID',
`vehicle_id` varchar(64) NOT NULL COMMENT '车辆ID',
`personnel_id` varchar(64) NOT NULL COMMENT '人员ID',
`role` varchar(20) NOT NULL DEFAULT 'driver' COMMENT '角色 driver-司机 escort-押运员',
`is_default` smallint(6) NOT NULL DEFAULT 0 COMMENT '是否默认司机 0-否 1-是',
`tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0' COMMENT '租户编号',
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
`remark` varchar(512) DEFAULT NULL COMMENT '关联备注',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` smallint(6) NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
PRIMARY KEY (`id`),
KEY `idx_vehicle_id` (`vehicle_id`),
KEY `idx_personnel_id` (`personnel_id`),
KEY `idx_tenant` (`tenant_no`),
KEY `idx_vehicle_role` (`vehicle_id`, `role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车辆-人员关联表';
-- 若存在旧表 pl_vehicle_driver 且无 pl_vehicle_personnel 数据,由迁移脚本处理
-- -----------------------------------------------------------------------------
-- 4. pl_document_reminder 扩展字段
-- -----------------------------------------------------------------------------
-- cert_id
SET @col_exists = (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'cert_id'
);
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pl_document_reminder` ADD COLUMN `cert_id` varchar(64) DEFAULT NULL COMMENT ''证书ID'' AFTER `id`',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- owner_type
SET @col_exists = (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'owner_type'
);
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pl_document_reminder` ADD COLUMN `owner_type` varchar(20) DEFAULT NULL COMMENT ''归属类型 vehicle/personnel'' AFTER `cert_id`',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- owner_id
SET @col_exists = (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'owner_id'
);
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pl_document_reminder` ADD COLUMN `owner_id` varchar(64) DEFAULT NULL COMMENT ''归属主体ID'' AFTER `owner_type`',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- owner_label
SET @col_exists = (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'owner_label'
);
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pl_document_reminder` ADD COLUMN `owner_label` varchar(200) DEFAULT NULL COMMENT ''归属展示名(车牌/姓名)'' AFTER `owner_id`',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- driver_id 改为可空(兼容车辆主体提醒)
SET @col_nullable = (
SELECT IS_NULLABLE FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'driver_id'
);
SET @sql = IF(@col_nullable = 'NO',
'ALTER TABLE `pl_document_reminder` MODIFY COLUMN `driver_id` varchar(64) DEFAULT NULL COMMENT ''司机/人员ID(兼容)''',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col_nullable = (
SELECT IS_NULLABLE FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'driver_name'
);
SET @sql = IF(@col_nullable = 'NO',
'ALTER TABLE `pl_document_reminder` MODIFY COLUMN `driver_name` varchar(100) DEFAULT NULL COMMENT ''司机/人员姓名(兼容)''',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- document_type 扩长以存 cert_name
ALTER TABLE `pl_document_reminder`
MODIFY COLUMN `document_type` varchar(100) NOT NULL COMMENT '证件类型/证书名称';
-- 新索引
SET @idx_exists = (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND INDEX_NAME = 'idx_cert_id'
);
SET @sql = IF(@idx_exists = 0,
'ALTER TABLE `pl_document_reminder` ADD KEY `idx_cert_id` (`cert_id`)',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
@@ -1,146 +0,0 @@
-- =============================================================================
-- 运输计划 · 人员/证书字典与菜单更新
-- 日期: 2026-06-19
-- =============================================================================
SET NAMES utf8mb4;
-- -----------------------------------------------------------------------------
-- 1. 字典类型 pl_personnel_role(人员角色)
-- -----------------------------------------------------------------------------
INSERT INTO `sys_dict_type` (
`id`, `dict_name`, `dict_type`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
'PL_PERSONNEL_ROLE', '运输人员角色', 'pl_personnel_role', 'shanxia2.0', 20,
'运输计划-人员角色 driver/escort', 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_type` WHERE `dict_type` = 'pl_personnel_role' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_ROLE_DRIVER', '司机', 'driver', 'primary', 'pl_personnel_role', 'shanxia2.0', 1,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_personnel_role' AND `dict_value` = 'driver' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_ROLE_ESCORT', '押运员', 'escort', 'warning', 'pl_personnel_role', 'shanxia2.0', 2,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_personnel_role' AND `dict_value` = 'escort' AND `del_flag` = 0
);
-- -----------------------------------------------------------------------------
-- 2. 字典类型 pl_cert_name(证书名称引导)
-- -----------------------------------------------------------------------------
INSERT INTO `sys_dict_type` (
`id`, `dict_name`, `dict_type`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
'PL_CERT_NAME', '运输证书名称', 'pl_cert_name', 'shanxia2.0', 21,
'运输计划-证书名称引导录入', 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_type` WHERE `dict_type` = 'pl_cert_name' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_CERT_01', '行驶证', '行驶证', 'success', 'pl_cert_name', 'shanxia2.0', 1,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_cert_name' AND `dict_value` = '行驶证' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_CERT_02', '道路运输证', '道路运输证', 'primary', 'pl_cert_name', 'shanxia2.0', 2,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_cert_name' AND `dict_value` = '道路运输证' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_CERT_03', '驾驶证', '驾驶证', 'primary', 'pl_cert_name', 'shanxia2.0', 3,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_cert_name' AND `dict_value` = '驾驶证' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_CERT_04', '押运员证', '押运员证', 'warning', 'pl_cert_name', 'shanxia2.0', 4,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_cert_name' AND `dict_value` = '押运员证' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_CERT_05', '危化品从业资格证', '危化品从业资格证', 'danger', 'pl_cert_name', 'shanxia2.0', 5,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_cert_name' AND `dict_value` = '危化品从业资格证' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_CERT_06', '保险单', '保险单', 'info', 'pl_cert_name', 'shanxia2.0', 6,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_cert_name' AND `dict_value` = '保险单' AND `del_flag` = 0
);
INSERT INTO `sys_dict_data` (
`id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`, `order_num`,
`remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT 'PL_CERT_07', '健康证', '健康证', 'info', 'pl_cert_name', 'shanxia2.0', 7,
NULL, 'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'pl_cert_name' AND `dict_value` = '健康证' AND `del_flag` = 0
);
-- -----------------------------------------------------------------------------
-- 3. 菜单:司机管理 → 人员管理,path driver → personnel
-- -----------------------------------------------------------------------------
UPDATE `sys_menu`
SET
`menu_name` = '人员管理',
`path` = 'personnel',
`component` = 'pl/personnel/index',
`update_time` = NOW()
WHERE `id` = 'PL_DRIVER' AND `del_flag` = 0;
@@ -1,211 +0,0 @@
-- =============================================================================
-- 运输计划 · 车辆/人员/证书重构 — 数据迁移
-- 日期: 2026-06-19
-- 前置: 先执行 docs/sql/20260619_pl_personnel_cert.sql
-- 说明: 从 pl_driver / pl_vehicle_driver 迁移至新表;可重复执行(幂等)
-- =============================================================================
SET NAMES utf8mb4;
-- -----------------------------------------------------------------------------
-- 1. pl_driver → pl_personnel(保留 id)
-- -----------------------------------------------------------------------------
INSERT IGNORE INTO `pl_personnel` (
`id`, `personnel_name`, `phone_no`, `age`, `id_card_no`, `status`,
`tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
d.`id`,
d.`driver_name`,
NULLIF(TRIM(d.`phone_no`), ''),
NULL,
d.`id_card_no`,
'1',
d.`tenant_no`,
d.`order_num`,
d.`remark`,
d.`create_by`,
d.`create_dept_id`,
d.`create_time`,
d.`update_by`,
d.`update_time`,
d.`del_flag`
FROM `pl_driver` d
WHERE d.`del_flag` = 0
AND NOT EXISTS (SELECT 1 FROM `pl_personnel` p WHERE p.`id` = d.`id`);
-- -----------------------------------------------------------------------------
-- 2. 司机证件 → pl_cert(owner_type=personnel, remind_days=30)
-- 证书 id 使用确定性前缀,便于幂等
-- -----------------------------------------------------------------------------
-- 驾驶证
INSERT INTO `pl_cert` (
`id`, `owner_type`, `owner_id`, `cert_name`, `cert_no`, `expire_date`, `remind_days`,
`status`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
CONCAT(d.`id`, '-dl'),
'personnel',
d.`id`,
'驾驶证',
d.`driving_license_no`,
d.`driving_license_expire`,
30,
'valid',
d.`tenant_no`,
d.`order_num`,
d.`remark`,
d.`create_by`,
d.`create_dept_id`,
d.`create_time`,
d.`update_by`,
d.`update_time`,
0
FROM `pl_driver` d
WHERE d.`del_flag` = 0
AND d.`driving_license_expire` IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM `pl_cert` c WHERE c.`id` = CONCAT(d.`id`, '-dl'));
-- 行驶证(原存于司机表,迁移后挂人员;业务上可后续调整到车辆)
INSERT INTO `pl_cert` (
`id`, `owner_type`, `owner_id`, `cert_name`, `cert_no`, `expire_date`, `remind_days`,
`status`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
CONCAT(d.`id`, '-vl'),
'personnel',
d.`id`,
'行驶证',
d.`vehicle_license_no`,
d.`vehicle_license_expire`,
30,
'valid',
d.`tenant_no`,
d.`order_num`,
d.`remark`,
d.`create_by`,
d.`create_dept_id`,
d.`create_time`,
d.`update_by`,
d.`update_time`,
0
FROM `pl_driver` d
WHERE d.`del_flag` = 0
AND d.`vehicle_license_expire` IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM `pl_cert` c WHERE c.`id` = CONCAT(d.`id`, '-vl'));
-- 危化品从业资格证
INSERT INTO `pl_cert` (
`id`, `owner_type`, `owner_id`, `cert_name`, `cert_no`, `expire_date`, `remind_days`,
`status`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
CONCAT(d.`id`, '-hc'),
'personnel',
d.`id`,
'危化品从业资格证',
d.`hazmat_cert_no`,
d.`hazmat_cert_expire`,
30,
'valid',
d.`tenant_no`,
d.`order_num`,
d.`remark`,
d.`create_by`,
d.`create_dept_id`,
d.`create_time`,
d.`update_by`,
d.`update_time`,
0
FROM `pl_driver` d
WHERE d.`del_flag` = 0
AND d.`hazmat_cert_expire` IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM `pl_cert` c WHERE c.`id` = CONCAT(d.`id`, '-hc'));
-- -----------------------------------------------------------------------------
-- 3. pl_vehicle_driver → pl_vehicle_personnel(driver_id → personnel_id, role=driver)
-- -----------------------------------------------------------------------------
INSERT IGNORE INTO `pl_vehicle_personnel` (
`id`, `vehicle_id`, `personnel_id`, `role`, `is_default`,
`tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
vd.`id`,
vd.`vehicle_id`,
vd.`driver_id`,
'driver',
vd.`is_default`,
vd.`tenant_no`,
vd.`order_num`,
vd.`remark`,
vd.`create_by`,
vd.`create_dept_id`,
vd.`create_time`,
vd.`update_by`,
vd.`update_time`,
vd.`del_flag`
FROM `pl_vehicle_driver` vd
WHERE vd.`del_flag` = 0
AND NOT EXISTS (SELECT 1 FROM `pl_vehicle_personnel` vp WHERE vp.`id` = vd.`id`);
-- -----------------------------------------------------------------------------
-- 4. 从 pl_vehicle.default_driver_id 修正 is_default(每车最多一条 is_default=1)
-- -----------------------------------------------------------------------------
-- 先清零所有关联的 is_default
UPDATE `pl_vehicle_personnel` vp
INNER JOIN `pl_vehicle` v ON v.`id` = vp.`vehicle_id` AND v.`del_flag` = 0
SET vp.`is_default` = 0
WHERE vp.`del_flag` = 0
AND vp.`role` = 'driver'
AND v.`default_driver_id` IS NOT NULL
AND v.`default_driver_id` != '';
-- 按车辆 default_driver_id 设置默认司机
UPDATE `pl_vehicle_personnel` vp
INNER JOIN `pl_vehicle` v ON v.`id` = vp.`vehicle_id` AND v.`del_flag` = 0
SET vp.`is_default` = 1
WHERE vp.`del_flag` = 0
AND vp.`role` = 'driver'
AND vp.`personnel_id` = v.`default_driver_id`
AND v.`default_driver_id` IS NOT NULL
AND v.`default_driver_id` != '';
-- 若 default_driver_id 有值但尚无关联行,补插一条
INSERT IGNORE INTO `pl_vehicle_personnel` (
`id`, `vehicle_id`, `personnel_id`, `role`, `is_default`,
`tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
CONCAT('mig-vp-', v.`id`, '-', v.`default_driver_id`),
v.`id`,
v.`default_driver_id`,
'driver',
1,
v.`tenant_no`,
NULL,
'迁移自 default_driver_id',
v.`create_by`,
v.`create_dept_id`,
v.`create_time`,
v.`update_by`,
v.`update_time`,
0
FROM `pl_vehicle` v
WHERE v.`del_flag` = 0
AND v.`default_driver_id` IS NOT NULL
AND v.`default_driver_id` != ''
AND EXISTS (SELECT 1 FROM `pl_personnel` p WHERE p.`id` = v.`default_driver_id` AND p.`del_flag` = 0)
AND NOT EXISTS (
SELECT 1 FROM `pl_vehicle_personnel` vp
WHERE vp.`vehicle_id` = v.`id`
AND vp.`personnel_id` = v.`default_driver_id`
AND vp.`role` = 'driver'
AND vp.`del_flag` = 0
);
@@ -1,4 +0,0 @@
-- CRM 产品:易制毒 / 易制爆属性(运输计划证件校验前置)
ALTER TABLE `crm_product`
ADD COLUMN `is_toxic` smallint(6) NOT NULL DEFAULT 0 COMMENT '是否易制毒 0-否 1-是' AFTER `tax_rate`,
ADD COLUMN `is_explosive` smallint(6) NOT NULL DEFAULT 0 COMMENT '是否易制爆 0-否 1-是' AFTER `is_toxic`;
@@ -1,10 +0,0 @@
-- 将 CRM 产品表中所有未删除产品的易制毒、易制爆属性批量设为「是」
-- 前置:已执行 docs/sql/20260620_crm_product_hazard_flags.sql 添加字段
-- 说明:仅更新 del_flag=0 的有效产品;0=否,1=是
UPDATE `crm_product`
SET
`is_toxic` = 1,
`is_explosive` = 1,
`update_time` = NOW()
WHERE `del_flag` = 0;
-27
View File
@@ -1,27 +0,0 @@
-- 安排运输 + 司机免登录 + 地磅联动
-- 2026-06-20
ALTER TABLE pl_transport
ADD COLUMN driver_access_token VARCHAR(64) NULL COMMENT '司机免登录访问令牌' AFTER qr_expire_date;
CREATE UNIQUE INDEX uk_pl_transport_driver_token ON pl_transport(driver_access_token);
CREATE TABLE IF NOT EXISTS pl_transport_db_link (
id VARCHAR(64) NOT NULL PRIMARY KEY COMMENT '主键ID',
transport_id VARCHAR(64) NOT NULL COMMENT '运输单ID',
plan_id VARCHAR(64) NOT NULL COMMENT '运输计划ID',
plan_product_id VARCHAR(64) NOT NULL COMMENT '计划产品行ID',
db_purchase_plan_id VARCHAR(64) NOT NULL COMMENT '地磅计划ID',
db_inventory_id VARCHAR(64) NOT NULL COMMENT '出入库单ID',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'shanxia2.0' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
KEY idx_pl_tdb_link_transport (transport_id),
KEY idx_pl_tdb_link_plan (plan_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运输-地磅出入库关联';
-19
View File
@@ -1,19 +0,0 @@
-- =============================================================================
-- 运输管理 · 一级菜单更名 + 隐藏子菜单(运输管理、库存台账)
-- 日期: 2026-06-20
-- =============================================================================
SET NAMES utf8mb4;
UPDATE `sys_menu`
SET
`menu_name` = '运输管理',
`remark` = '运输管理父菜单',
`update_time` = NOW()
WHERE `id` = 'PL_MENU_ROOT' AND `del_flag` = 0;
UPDATE `sys_menu`
SET
`visible` = '0',
`update_time` = NOW()
WHERE `id` IN ('PL_TRANSPORT', 'PL_INVENTORY') AND `del_flag` = 0;
-20
View File
@@ -1,20 +0,0 @@
-- =============================================================================
-- 运输计划 · 危化品证上传菜单
-- 日期: 2026-06-20
-- =============================================================================
SET NAMES utf8mb4;
INSERT INTO `sys_menu` (
`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
`is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
'PL_PLAN_CERT', '危化品证上传', 'PL_MENU_ROOT', 'C', 'plan-cert', 'pl/plan-cert/index',
'pl:plan-cert:list', 1, '1', '1', 'shanxia2.0', 11, '危化品购买证/运输证上传',
'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_PLAN_CERT' AND `del_flag` = 0
);
@@ -1,22 +0,0 @@
-- 运输计划 · 新增计划弹窗 — 物流/产品/运输量字段增量
-- 执行前请备份;MySQL 5.7+
ALTER TABLE `pl_plan`
ADD COLUMN `pickup_address` varchar(500) DEFAULT NULL COMMENT '取货地址' AFTER `has_freight`,
ADD COLUMN `pickup_time` datetime DEFAULT NULL COMMENT '取货时间' AFTER `pickup_address`,
ADD COLUMN `pickup_notes` varchar(500) DEFAULT NULL COMMENT '取货注意事项' AFTER `pickup_time`,
ADD COLUMN `destination_address` varchar(500) DEFAULT NULL COMMENT '目的地地址' AFTER `pickup_notes`,
ADD COLUMN `delivery_time` datetime DEFAULT NULL COMMENT '送达时间' AFTER `destination_address`,
ADD COLUMN `destination_notes` varchar(500) DEFAULT NULL COMMENT '目的地注意事项' AFTER `delivery_time`;
ALTER TABLE `pl_plan_product`
ADD COLUMN `category_name` varchar(200) DEFAULT NULL COMMENT '产品分类' AFTER `unit`,
ADD COLUMN `package_spec` varchar(200) DEFAULT NULL COMMENT '包装规格' AFTER `category_name`,
ADD COLUMN `delivery_method` varchar(50) DEFAULT NULL COMMENT '送货方式' AFTER `package_spec`,
ADD COLUMN `quantity` decimal(15,3) DEFAULT NULL COMMENT '合同数量' AFTER `delivery_method`,
ADD COLUMN `tax_price` decimal(15,4) DEFAULT NULL COMMENT '含税单价' AFTER `quantity`,
ADD COLUMN `tax_amount` decimal(15,2) DEFAULT NULL COMMENT '税费' AFTER `tax_price`,
ADD COLUMN `tax_subtotal` decimal(15,2) DEFAULT NULL COMMENT '含税总价' AFTER `tax_amount`;
ALTER TABLE `pl_transport`
ADD COLUMN `transport_qty` decimal(15,3) DEFAULT NULL COMMENT '运输量(按重量计费基数)' AFTER `unit`;
@@ -1,5 +0,0 @@
-- 运输计划产品明细 · 新增实际数量字段
-- 执行前请备份;MySQL 5.7+
ALTER TABLE `pl_plan_product`
ADD COLUMN `actual_qty` decimal(15,3) DEFAULT NULL COMMENT '实际数量' AFTER `quantity`;
@@ -1,11 +0,0 @@
-- 回滚:20260620_pl_plan_transport_prefill.sql
-- 撤销 pl_plan 上误加的运输预选冗余字段(改由 pl_transport 草稿子表承载)
-- 执行前请备份;MySQL 5.7+
ALTER TABLE `pl_plan`
DROP COLUMN `has_invoice`,
DROP COLUMN `freight_price`,
DROP COLUMN `transport_qty`,
DROP COLUMN `freight_type`,
DROP COLUMN `distance_km`,
DROP COLUMN `carrier_id`;
@@ -1,27 +0,0 @@
-- =============================================================================
-- 运输计划 · 山峡自有车辆菜单(更名 + 增量)
-- 日期: 2026-06-20
-- =============================================================================
SET NAMES utf8mb4;
INSERT INTO `sys_menu` (
`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
`is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
'PL_SELF_VEHICLE', '山峡自有车辆', 'PL_MENU_ROOT', 'C', 'self-vehicle', 'pl/self-vehicle/index',
'pl:self-vehicle:list', 1, '1', '1', 'shanxia2.0', 4, '自有类型车辆管理',
'system', '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_SELF_VEHICLE' AND `del_flag` = 0
);
UPDATE `sys_menu`
SET
`menu_name` = '山峡自有车辆',
`remark` = '自有类型车辆管理',
`update_time` = NOW()
WHERE `id` = 'PL_SELF_VEHICLE' AND `del_flag` = 0;
@@ -1,24 +0,0 @@
-- =============================================================================
-- 一体化门户 · 隐藏控制台菜单
-- 日期: 2026-06-20
-- =============================================================================
SET NAMES utf8mb4;
UPDATE `sys_menu`
SET
`visible` = '0',
`update_time` = NOW()
WHERE `id` = 'DSH000000000000000000000000000001' AND `del_flag` = 0;
UPDATE `sys_menu`
SET
`visible` = '0',
`update_time` = NOW()
WHERE `menu_name` = '控制台'
AND `parent_id` IN (
SELECT `id` FROM (
SELECT `id` FROM `sys_menu` WHERE `menu_name` IN ('Web管理端', '管理端') AND `del_flag` = 0 LIMIT 1
) AS web_root
)
AND `del_flag` = 0;
@@ -1,23 +0,0 @@
-- 报销申请单:报销日期 + 标题序号(同日报销日期下序号唯一,支持高并发)
-- 兼容 MySQL 5.7(不支持 DEFAULT (CURRENT_DATE) 表达式默认值)
ALTER TABLE `bx_reimburse_apply`
ADD COLUMN `reimburse_date` date NULL COMMENT '报销日期' AFTER `title`,
ADD COLUMN `title_seq` int(11) DEFAULT NULL COMMENT '标题序号(同租户同报销日期下自增,自动生成标题时使用)' AFTER `reimburse_date`;
UPDATE `bx_reimburse_apply`
SET `reimburse_date` = DATE(`create_time`)
WHERE `reimburse_date` IS NULL;
ALTER TABLE `bx_reimburse_apply`
MODIFY COLUMN `reimburse_date` date NOT NULL COMMENT '报销日期';
UPDATE `bx_reimburse_apply`
SET `title_seq` = CAST(RIGHT(`title`, 3) AS UNSIGNED)
WHERE `title_seq` IS NULL
AND `title` REGEXP '报销单[0-9]{11}$'
AND RIGHT(`title`, 3) REGEXP '^[0-9]{3}$';
ALTER TABLE `bx_reimburse_apply`
ADD UNIQUE KEY `uk_tenant_reimburse_date_title_seq` (`tenant_no`, `reimburse_date`, `title_seq`),
ADD KEY `idx_reimburse_date` (`reimburse_date`);
+20
View File
@@ -0,0 +1,20 @@
-- 移除地磅「车牌管理」独立主数据表及菜单(车牌统一使用运输管理 pl_vehicle)
DROP TABLE IF EXISTS `db_vehicle`;
DELETE FROM `sys_role_menu`
WHERE `menu_id` IN (
'DB00000000000000000000000000006',
'DB10000000000000000000000000014',
'DB10000000000000000000000000015',
'DB10000000000000000000000000016',
'DB10000000000000000000000000017'
);
DELETE FROM `sys_menu`
WHERE `id` IN (
'DB00000000000000000000000000006',
'DB10000000000000000000000000014',
'DB10000000000000000000000000015',
'DB10000000000000000000000000016',
'DB10000000000000000000000000017'
);
+491 -570
View File
File diff suppressed because it is too large. Load diff