160 lines
5.3 KiB
SQL
160 lines
5.3 KiB
SQL
-- backend/scripts/migrate_20260820_duty_shift_dict_time.sql
|
||
-- 值班排班:字典类型/工作安排 + slot 时段与 work_plans
|
||
-- 可重复执行(字典 NOT EXISTS;ALTER 检查 information_schema)
|
||
|
||
SET NAMES utf8mb4;
|
||
|
||
-- 1) 字典类型(tenant shanxia2.0)
|
||
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
|
||
'DUTYDICTTYPE00000000000000000001',
|
||
'值班类型',
|
||
'duty_shift_type',
|
||
'shanxia2.0',
|
||
90,
|
||
'值班排班班次类型',
|
||
'',
|
||
'',
|
||
NOW(),
|
||
'',
|
||
NOW(),
|
||
0
|
||
FROM DUAL
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM `sys_dict_type`
|
||
WHERE `dict_type` = 'duty_shift_type'
|
||
AND `tenant_no` = 'shanxia2.0'
|
||
AND `del_flag` = 0
|
||
);
|
||
|
||
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
|
||
'DUTYDICTTYPE00000000000000000002',
|
||
'值班工作安排',
|
||
'duty_work_plan',
|
||
'shanxia2.0',
|
||
91,
|
||
'值班排班工作安排',
|
||
'',
|
||
'',
|
||
NOW(),
|
||
'',
|
||
NOW(),
|
||
0
|
||
FROM DUAL
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM `sys_dict_type`
|
||
WHERE `dict_type` = 'duty_work_plan'
|
||
AND `tenant_no` = 'shanxia2.0'
|
||
AND `del_flag` = 0
|
||
);
|
||
|
||
-- 2) 字典数据预置
|
||
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 * FROM (
|
||
SELECT 'DUTYDICTDATA0000000000000000001' AS id, '早班' AS dict_label, 'morning' AS dict_value, '' AS tag_type, 'duty_shift_type' AS dict_type, 'shanxia2.0' AS tenant_no, 1 AS order_num, NULL AS remark, '' AS create_by, '' AS create_dept_id, NOW() AS create_time, '' AS update_by, NOW() AS update_time, 0 AS del_flag
|
||
UNION ALL SELECT 'DUTYDICTDATA0000000000000000002', '晚班', 'evening', '', 'duty_shift_type', 'shanxia2.0', 2, NULL, '', '', NOW(), '', NOW(), 0
|
||
UNION ALL SELECT 'DUTYDICTDATA0000000000000000003', '值班', 'duty', '', 'duty_shift_type', 'shanxia2.0', 3, NULL, '', '', NOW(), '', NOW(), 0
|
||
UNION ALL SELECT 'DUTYDICTDATA0000000000000000004', '配酸', 'peisuan', '', 'duty_work_plan', 'shanxia2.0', 1, NULL, '', '', NOW(), '', NOW(), 0
|
||
UNION ALL SELECT 'DUTYDICTDATA0000000000000000005', '装卸', 'zhuangxie', '', 'duty_work_plan', 'shanxia2.0', 2, NULL, '', '', NOW(), '', NOW(), 0
|
||
) AS t
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM `sys_dict_data` d
|
||
WHERE d.`tenant_no` = t.`tenant_no`
|
||
AND d.`dict_type` = t.`dict_type`
|
||
AND d.`dict_value` = t.`dict_value`
|
||
AND d.`del_flag` = 0
|
||
);
|
||
|
||
-- 3) duty_slot 扩字段(列已存在则跳过)
|
||
SET @db = DATABASE();
|
||
|
||
SET @col_exists = (
|
||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'duty_slot' AND COLUMN_NAME = 'work_plans'
|
||
);
|
||
SET @sql = IF(
|
||
@col_exists = 0,
|
||
'ALTER TABLE `duty_slot` ADD COLUMN `work_plans` varchar(500) DEFAULT NULL COMMENT ''工作安排dict_value逗号分隔'' AFTER `capacity`',
|
||
'SELECT 1'
|
||
);
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
SET @col_exists = (
|
||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'duty_slot' AND COLUMN_NAME = 'start_time'
|
||
);
|
||
SET @sql = IF(
|
||
@col_exists = 0,
|
||
'ALTER TABLE `duty_slot` ADD COLUMN `start_time` time DEFAULT NULL COMMENT ''值班开始时间'' AFTER `work_plans`',
|
||
'SELECT 1'
|
||
);
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
SET @col_exists = (
|
||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'duty_slot' AND COLUMN_NAME = 'end_time'
|
||
);
|
||
SET @sql = IF(
|
||
@col_exists = 0,
|
||
'ALTER TABLE `duty_slot` ADD COLUMN `end_time` time DEFAULT NULL COMMENT ''值班结束时间'' AFTER `start_time`',
|
||
'SELECT 1'
|
||
);
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
SET @col_exists = (
|
||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'duty_slot' AND COLUMN_NAME = 'cross_day'
|
||
);
|
||
SET @sql = IF(
|
||
@col_exists = 0,
|
||
'ALTER TABLE `duty_slot` ADD COLUMN `cross_day` smallint(6) NOT NULL DEFAULT 0 COMMENT ''结束是否次日0/1'' AFTER `end_time`',
|
||
'SELECT 1'
|
||
);
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
-- 4) 回填时段(仅 start_time 为空的历史行)
|
||
UPDATE `duty_slot`
|
||
SET `start_time` = '08:00:00', `end_time` = '18:00:00', `cross_day` = 0
|
||
WHERE `del_flag` = 0 AND `shift_type` = 'morning' AND `start_time` IS NULL;
|
||
|
||
UPDATE `duty_slot`
|
||
SET `start_time` = '18:00:00', `end_time` = '07:00:00', `cross_day` = 1
|
||
WHERE `del_flag` = 0 AND `shift_type` = 'evening' AND `start_time` IS NULL;
|
||
|
||
-- 5) 回填工作安排(整段匹配);其它 remark 保留为备注
|
||
UPDATE `duty_slot`
|
||
SET `work_plans` = 'peisuan', `remark` = NULL
|
||
WHERE `del_flag` = 0
|
||
AND TRIM(`remark`) = '配酸'
|
||
AND (`work_plans` IS NULL OR `work_plans` = '');
|
||
|
||
UPDATE `duty_slot`
|
||
SET `work_plans` = 'zhuangxie', `remark` = NULL
|
||
WHERE `del_flag` = 0
|
||
AND TRIM(`remark`) = '装卸'
|
||
AND (`work_plans` IS NULL OR `work_plans` = '');
|
||
|
||
UPDATE `duty_slot`
|
||
SET `work_plans` = 'peisuan,zhuangxie', `remark` = NULL
|
||
WHERE `del_flag` = 0
|
||
AND TRIM(`remark`) IN ('配酸,装卸', '配酸,装卸', '装卸,配酸', '装卸,配酸')
|
||
AND (`work_plans` IS NULL OR `work_plans` = '');
|