Files
zkxw/待同步到生产的sql脚本
T
2026-06-25 12:41:07 +08:00

71 lines
2.8 KiB
Plaintext

-- 生产过程派发质检:支持仅关联步骤产出物(无细胞产品时也可派发)
ALTER TABLE `biz_qc_work_order`
ADD COLUMN `production_step_output_id` varchar(64) DEFAULT NULL
COMMENT '关联生产任务步骤产出物ID(生产过程触发时)'
AFTER `production_task_id`;
CREATE INDEX `idx_qc_wo_prod_step_output` ON `biz_qc_work_order` (`production_step_output_id`, `del_flag`);
-- 生产任务 · 工艺步骤级派发
-- 步骤计划开始时间、完成人 + 步骤负责人关联表
ALTER TABLE `biz_production_task_step`
ADD COLUMN `planned_start_time` datetime DEFAULT NULL COMMENT '计划开始时间' AFTER `step_status`;
ALTER TABLE `biz_production_task_step`
ADD COLUMN `completed_by` varchar(64) DEFAULT NULL COMMENT '完成步骤的用户ID' AFTER `completed_time`;
CREATE TABLE IF NOT EXISTS `biz_production_task_step_assignee` (
`id` varchar(64) NOT NULL COMMENT '主键',
`step_id` varchar(64) NOT NULL COMMENT '生产任务步骤ID',
`user_id` varchar(64) NOT NULL COMMENT '负责人用户ID',
`tenant_no` varchar(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
`order_num` int DEFAULT 0 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 COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
`update_time` datetime NOT NULL COMMENT '更新时间',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
KEY `idx_step_assignee_step` (`step_id`),
KEY `idx_step_assignee_user` (`user_id`, `tenant_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务步骤负责人';
-- 可选:将仍有 task.current_assignee_user_id 且无步骤负责人的旧任务回填到全部步骤
--
-- 注意:MySQL 5.7 在 INSERT...SELECT 中 UUID() 可能整批只计算一次,导致主键重复。
-- 此处用 SHA2(step_id) 生成确定性主键,每步唯一,且可重复执行(已存在则跳过)。
INSERT INTO `biz_production_task_step_assignee` (
`id`, `step_id`, `user_id`, `tenant_no`, `order_num`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
LOWER(SHA2(CONCAT('step-assignee-backfill:', s.id), 256)),
s.id,
t.current_assignee_user_id,
s.tenant_no,
0,
t.create_by,
IFNULL(t.create_dept_id, ''),
NOW(),
t.update_by,
NOW(),
0
FROM `biz_production_task` t
JOIN `biz_production_task_step` s ON s.task_id = t.id AND s.del_flag = 0
WHERE t.del_flag = 0
AND t.current_assignee_user_id IS NOT NULL
AND TRIM(t.current_assignee_user_id) <> ''
AND NOT EXISTS (
SELECT 1 FROM `biz_production_task_step_assignee` a
WHERE a.step_id = s.id AND a.del_flag = 0
);