Files
MES/yawei-mes/.sql/2025-11-11_02_周启威_连续制造业改进.sql
2026-04-02 10:39:03 +08:00

214 lines
9.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =====================================================
-- 连续制造业改进 SQL 脚本
-- 作者: 周启威
-- 日期: 2025-11-11
-- 说明: 支持连续制造业的生产报工流程
-- =====================================================
-- =====================================================
-- 第一部分:物料表改动
-- =====================================================
-- 1. 物料表新增字段
ALTER TABLE `md_material`
ADD COLUMN `manufacture_type` VARCHAR(20) DEFAULT 'DISCRETE' COMMENT '制造类型: DISCRETE-离散, CONTINUOUS-连续',
ADD COLUMN `report_mode` VARCHAR(20) COMMENT '报工模式: PROCESS-按工序, TIME-按时间, SHIFT-按班次, QUANTITY-按产量, BATCH-按批次';
-- 2. 创建索引
CREATE INDEX `idx_manufacture_type` ON `md_material`(`manufacture_type`);
-- 3. 为现有数据设置默认值(第一条SQL物料设置为连续制造业第二条SQL物料设置为离散制造业)
-- UPDATE `md_material` SET `manufacture_type` = 'DISCRETE' WHERE `manufacture_type` IS NULL;
-- UPDATE `md_material` SET `manufacture_type` = 'CONTINUOUS' WHERE `manufacture_type` IS NULL;
-- =====================================================
-- 第二部分:工单表改动
-- =====================================================
-- 1. 工单表新增字段
ALTER TABLE `pro_workorder`
ADD COLUMN `manufacture_type` VARCHAR(20) DEFAULT 'DISCRETE' COMMENT '制造类型: DISCRETE-离散, CONTINUOUS-连续',
ADD COLUMN `report_mode` VARCHAR(20) DEFAULT 'PROCESS' COMMENT '报工模式: PROCESS-按工序, TIME-按时间, SHIFT-按班次, QUANTITY-按产量, BATCH-按批次',
ADD COLUMN `total_report_count` INT DEFAULT 0 COMMENT '总报工次数',
ADD COLUMN `total_reported_quantity` DECIMAL(10,3) DEFAULT 0.000 COMMENT '累计报工数量',
ADD COLUMN `equipment_id` BIGINT COMMENT '关联设备ID',
ADD COLUMN `equipment_name` VARCHAR(255) COMMENT '设备名称',
ADD COLUMN `actual_start_time` DATETIME COMMENT '实际开始时间',
ADD COLUMN `actual_end_time` DATETIME COMMENT '实际结束时间',
ADD COLUMN `downtime_minutes` INT DEFAULT 0 COMMENT '累计停机时间(分钟)';
-- 2. 创建索引
CREATE INDEX `idx_manufacture_type` ON `pro_workorder`(`manufacture_type`);
CREATE INDEX `idx_equipment_id` ON `pro_workorder`(`equipment_id`);
CREATE INDEX `idx_report_mode` ON `pro_workorder`(`report_mode`);
-- 3. 为现有数据设置默认值
UPDATE `pro_workorder` SET `manufacture_type` = 'DISCRETE' WHERE `manufacture_type` IS NULL;
UPDATE `pro_workorder` SET `report_mode` = 'PROCESS' WHERE `report_mode` IS NULL;
UPDATE `pro_workorder` SET `total_report_count` = 0 WHERE `total_report_count` IS NULL;
UPDATE `pro_workorder` SET `total_reported_quantity` = 0.000 WHERE `total_reported_quantity` IS NULL;
UPDATE `pro_workorder` SET `downtime_minutes` = 0 WHERE `downtime_minutes` IS NULL;
-- =====================================================
-- 第三部分:报工单表改动
-- =====================================================
-- 1. 报工单表新增字段
-- 说明:如果字段已存在会报错,可以忽略错误继续执行
ALTER TABLE `pro_report`
ADD COLUMN `work_order_id` BIGINT COMMENT '工单ID(连续制造业直接关联工单)',
ADD COLUMN `report_period_start` DATETIME COMMENT '报工时段开始',
ADD COLUMN `report_period_end` DATETIME COMMENT '报工时段结束',
ADD COLUMN `report_sequence` INT COMMENT '报工序号',
ADD COLUMN `shift_name` VARCHAR(64) COMMENT '班次名称',
ADD COLUMN `equipment_id` BIGINT COMMENT '设备ID',
ADD COLUMN `equipment_name` VARCHAR(255) COMMENT '设备名称',
ADD COLUMN `downtime_minutes` INT DEFAULT 0 COMMENT '该时段停机时间(分钟)',
ADD COLUMN `downtime_reason` VARCHAR(500) COMMENT '停机原因';
-- 说明:
-- 1. report_user_id 和 report_user_name 字段已存在,用于记录报工人
-- 连续制造业使用现有字段即可,无需新增 operator_ids
-- 2. work_order_entry_id 字段保留(离散制造业使用)
-- work_order_id 字段新增(连续制造业使用)
-- 两者互不冲突,根据工单类型选择使用
-- 3. equipment_id 关联到 dm_equipment 表(系统已有设备表)
-- 2. 修改 work_order_entry_id 字段为可空(重要!)
-- 说明:连续制造业报工不使用工序分录,此字段必须允许为空
ALTER TABLE `pro_report`
MODIFY COLUMN `work_order_entry_id` BIGINT(20) NULL COMMENT '工单子表ID离散制造业使用';
-- 3. 创建索引
-- 说明:如果索引已存在会报错,可以忽略错误继续执行
CREATE INDEX `idx_work_order_id` ON `pro_report`(`work_order_id`);
CREATE INDEX `idx_report_period` ON `pro_report`(`report_period_start`, `report_period_end`);
CREATE INDEX `idx_shift_name` ON `pro_report`(`shift_name`);
CREATE INDEX `idx_equipment_id` ON `pro_report`(`equipment_id`);
CREATE INDEX `idx_work_order_entry_id` ON `pro_report`(`work_order_entry_id`);
-- =====================================================
-- 第四部分:数据验证
-- =====================================================
-- 验证物料表字段
SELECT
COUNT(*) as total_materials,
SUM(CASE WHEN manufacture_type = 'DISCRETE' THEN 1 ELSE 0 END) as discrete_count,
SUM(CASE WHEN manufacture_type = 'CONTINUOUS' THEN 1 ELSE 0 END) as continuous_count
FROM `md_material`;
-- 验证工单表字段
SELECT
COUNT(*) as total_workorders,
SUM(CASE WHEN manufacture_type = 'DISCRETE' THEN 1 ELSE 0 END) as discrete_count,
SUM(CASE WHEN manufacture_type = 'CONTINUOUS' THEN 1 ELSE 0 END) as continuous_count
FROM `pro_workorder`;
-- 验证报工单表字段
SELECT
COUNT(*) as total_reports,
SUM(CASE WHEN work_order_id IS NOT NULL THEN 1 ELSE 0 END) as continuous_report_count,
SUM(CASE WHEN work_order_entry_id IS NOT NULL THEN 1 ELSE 0 END) as discrete_report_count
FROM `pro_report`;
-- =====================================================
-- 第五部分:班次字典配置
-- =====================================================
-- 说明:连续制造业按班次报工时需要选择班次,使用数据字典管理班次选项
-- 1. 添加班次类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('班次类型', 'sys_shift_type', '0', 'admin', NOW(), '用于连续制造业按班次报工');
-- 2. 添加默认班次选项
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) VALUES
(1, '早班', 'MORNING', 'sys_shift_type', '', 'default', 'Y', '0', 'admin', NOW(), '08:00-16:00'),
(2, '中班', 'AFTERNOON', 'sys_shift_type', '', 'default', 'N', '0', 'admin', NOW(), '16:00-00:00'),
(3, '晚班', 'NIGHT', 'sys_shift_type', '', 'default', 'N', '0', 'admin', NOW(), '00:00-08:00');
-- 说明:
-- 1. 企业可在"系统管理→字典管理"中修改班次名称和数量
-- 2. dict_label 是显示名称可自定义白班、夜班、A班、B班等
-- 3. dict_value 是存储值,建议保持英文编码
-- 4. remark 字段可记录班次时间段,仅供参考
-- 5. 支持两班制、三班制、四班制等多种班次制度
-- 6. is_default='Y' 表示默认选项(早班)
-- =====================================================
-- 执行说明
-- =====================================================
-- 1. 请在测试环境先执行此脚本
-- 2. 验证数据无误后再在生产环境执行
-- 3. 执行前建议备份数据库
-- 4. 执行顺序:物料表 → 工单表 → 报工单表 → 班次字典 → 验证
-- 5. 预计执行时间:< 1分钟取决于数据量
-- 6. 影响范围:新增字段、索引、字典数据,不修改现有数据
-- 7. 兼容性:完全向后兼容,现有功能不受影响
-- 8. 班次配置:执行后可在"系统管理→字典管理"中修改班次选项
-- =====================================================
-- =====================================================
-- 重要说明
-- =====================================================
-- 【已删除的字段】
-- 1. report_interval - 原计划在 md_material 表中,已确认不需要
-- 2. operator_ids - 原计划在 pro_report 表中,与现有字段重复已删除
--
-- 【不需要修改的表】
-- 1. sal_order - 销售订单表不需要任何修改
-- 2. dm_equipment - 设备表已存在,直接复用
-- 3. pro_workorder_entry - 工单分录表保持不变(连续制造业不使用)
--
-- 【字段使用规则】
-- pro_report 表:
-- - 离散制造业:使用 work_order_entry_id其他新字段为NULL
-- - 连续制造业:使用 work_order_idwork_order_entry_id为NULL
-- =====================================================
-- =====================================================
-- 回滚脚本(如需回滚,请执行以下语句)
-- =====================================================
/*
-- 回滚物料表
ALTER TABLE `md_material`
DROP COLUMN `manufacture_type`,
DROP COLUMN `report_mode`;
DROP INDEX `idx_manufacture_type` ON `md_material`;
-- 回滚工单表
ALTER TABLE `pro_workorder`
DROP COLUMN `manufacture_type`,
DROP COLUMN `report_mode`,
DROP COLUMN `total_report_count`,
DROP COLUMN `total_reported_quantity`,
DROP COLUMN `equipment_id`,
DROP COLUMN `equipment_name`,
DROP COLUMN `actual_start_time`,
DROP COLUMN `actual_end_time`,
DROP COLUMN `downtime_minutes`;
DROP INDEX `idx_manufacture_type` ON `pro_workorder`;
DROP INDEX `idx_equipment_id` ON `pro_workorder`;
DROP INDEX `idx_report_mode` ON `pro_workorder`;
-- 回滚报工单表
ALTER TABLE `pro_report`
DROP COLUMN `work_order_id`,
DROP COLUMN `report_period_start`,
DROP COLUMN `report_period_end`,
DROP COLUMN `report_sequence`,
DROP COLUMN `shift_name`,
DROP COLUMN `equipment_id`,
DROP COLUMN `equipment_name`,
DROP COLUMN `downtime_minutes`,
DROP COLUMN `downtime_reason`;
DROP INDEX `idx_work_order_id` ON `pro_report`;
DROP INDEX `idx_report_period` ON `pro_report`;
DROP INDEX `idx_shift_name` ON `pro_report`;
DROP INDEX `idx_equipment_id` ON `pro_report`;
*/