Files
MES/yawei-mes/.sql/2025-11-11_02_周启威_连续制造业改进.sql

214 lines
9.9 KiB
MySQL
Raw Normal View History

2026-04-02 10:38:23 +08:00
-- =====================================================
-- 连续制造业改进 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`;
*/