初始代码
This commit is contained in:
213
yawei-mes/.sql/2025-11-11_02_周启威_连续制造业改进.sql
Normal file
213
yawei-mes/.sql/2025-11-11_02_周启威_连续制造业改进.sql
Normal file
@@ -0,0 +1,213 @@
|
||||
-- =====================================================
|
||||
-- 连续制造业改进 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_id,work_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`;
|
||||
*/
|
||||
Reference in New Issue
Block a user