| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- -- 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` = '');
|