初始代码

This commit is contained in:
hhh
2026-04-02 10:38:23 +08:00
parent d8b4140f50
commit aed67ce1fd
1937 changed files with 447678 additions and 1 deletions

View File

@@ -0,0 +1,259 @@
-- =====================================================
-- 生产计划优化 v1.6.037
-- 作者: 周启威
-- 日期: 2026-02-25
-- 说明: 优化生产计划创建流程,支持多订单批量处理
-- =====================================================
-- -----------------------------------------------------
-- 1. 生产计划表扩展字段(如果不存在)
-- -----------------------------------------------------
-- 添加计划周期字段
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND column_name = 'schedule_cycle';
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pro_plan` ADD COLUMN `schedule_cycle` varchar(20) DEFAULT NULL COMMENT ''计划周期year=年计划,month=月计划,week=周计划'' AFTER `plan_type`',
'SELECT ''Column schedule_cycle already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 添加计划年份字段
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND column_name = 'plan_year';
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pro_plan` ADD COLUMN `plan_year` int DEFAULT NULL COMMENT ''计划年份'' AFTER `schedule_cycle`',
'SELECT ''Column plan_year already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 添加月份字段
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND column_name = 'month_number';
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pro_plan` ADD COLUMN `month_number` int DEFAULT NULL COMMENT ''月份1-12'' AFTER `plan_year`',
'SELECT ''Column month_number already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 添加周数字段
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND column_name = 'week_number';
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pro_plan` ADD COLUMN `week_number` int DEFAULT NULL COMMENT ''周数1-53'' AFTER `month_number`',
'SELECT ''Column week_number already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 添加开始时间字段(如果不存在)
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND column_name = 'start_time';
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pro_plan` ADD COLUMN `start_time` datetime DEFAULT NULL COMMENT ''开始时间'' AFTER `week_number`',
'SELECT ''Column start_time already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 添加结束时间字段(如果不存在)
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND column_name = 'end_time';
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pro_plan` ADD COLUMN `end_time` datetime DEFAULT NULL COMMENT ''结束时间'' AFTER `start_time`',
'SELECT ''Column end_time already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 添加关联订单ID列表字段
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND column_name = 'related_order_ids';
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `pro_plan` ADD COLUMN `related_order_ids` text DEFAULT NULL COMMENT ''关联订单ID列表JSON格式'' AFTER `plan_analysis`',
'SELECT ''Column related_order_ids already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- -----------------------------------------------------
-- 2. 添加索引优化查询性能
-- -----------------------------------------------------
-- 计划周期索引
SET @index_exists = 0;
SELECT COUNT(*) INTO @index_exists FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND index_name = 'idx_schedule_cycle';
SET @sql = IF(@index_exists = 0,
'ALTER TABLE `pro_plan` ADD INDEX `idx_schedule_cycle` (`schedule_cycle`)',
'SELECT ''Index idx_schedule_cycle already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 年份+周数索引
SET @index_exists = 0;
SELECT COUNT(*) INTO @index_exists FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND index_name = 'idx_year_week';
SET @sql = IF(@index_exists = 0,
'ALTER TABLE `pro_plan` ADD INDEX `idx_year_week` (`plan_year`, `week_number`)',
'SELECT ''Index idx_year_week already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 年份+月份索引
SET @index_exists = 0;
SELECT COUNT(*) INTO @index_exists FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND index_name = 'idx_year_month';
SET @sql = IF(@index_exists = 0,
'ALTER TABLE `pro_plan` ADD INDEX `idx_year_month` (`plan_year`, `month_number`)',
'SELECT ''Index idx_year_month already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 工序路线索引(如果不存在)
SET @index_exists = 0;
SELECT COUNT(*) INTO @index_exists FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'pro_plan' AND index_name = 'idx_route_id';
SET @sql = IF(@index_exists = 0,
'ALTER TABLE `pro_plan` ADD INDEX `idx_route_id` (`route_id`)',
'SELECT ''Index idx_route_id already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- -----------------------------------------------------
-- 3. 产品表验证和索引优化
-- -----------------------------------------------------
-- 验证产品表中是否存在route_id字段默认工序路线ID
-- 该字段已存在于md_material表中用于存储产品的默认工序路线
-- 如果不存在,则添加该字段
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'md_material' AND column_name = 'route_id';
SET @sql = IF(@col_exists = 0,
'ALTER TABLE `md_material` ADD COLUMN `route_id` bigint DEFAULT NULL COMMENT ''默认工序路线ID'' AFTER `update_time`',
'SELECT ''Column route_id already exists in md_material'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 为产品表的route_id字段创建索引优化工序路线查询性能
SET @index_exists = 0;
SELECT COUNT(*) INTO @index_exists FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'md_material' AND index_name = 'idx_material_route_id';
SET @sql = IF(@index_exists = 0,
'ALTER TABLE `md_material` ADD INDEX `idx_material_route_id` (`route_id`)',
'SELECT ''Index idx_material_route_id already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- -----------------------------------------------------
-- 4. 工单表验证和索引优化
-- -----------------------------------------------------
-- 验证工单表中是否存在source_type字段来源类型
-- 该字段已存在于pro_workorder表中用于标识工单的来源如"plan"表示来自计划)
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_workorder' AND column_name = 'source_type';
SELECT IF(@col_exists > 0,
'Column source_type exists in pro_workorder',
'WARNING: Column source_type does NOT exist in pro_workorder') AS verification_result;
-- 验证工单表中是否存在source_info字段来源信息
-- 该字段已存在于pro_workorder表中用于存储计划ID和订单信息JSON格式
SET @col_exists = 0;
SELECT COUNT(*) INTO @col_exists FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'pro_workorder' AND column_name = 'source_info';
SELECT IF(@col_exists > 0,
'Column source_info exists in pro_workorder',
'WARNING: Column source_info does NOT exist in pro_workorder') AS verification_result;
-- 为source_type字段创建索引优化按来源类型查询工单的性能
SET @index_exists = 0;
SELECT COUNT(*) INTO @index_exists FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'pro_workorder' AND index_name = 'idx_source_type';
SET @sql = IF(@index_exists = 0,
'ALTER TABLE `pro_workorder` ADD INDEX `idx_source_type` (`source_type`)',
'SELECT ''Index idx_source_type already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 为material_id字段创建索引如果不存在优化按产品查询工单的性能
-- 注意:该索引可能已存在,脚本会自动检查
SET @index_exists = 0;
SELECT COUNT(*) INTO @index_exists FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'pro_workorder' AND index_name = 'idx_workorder_material';
SET @sql = IF(@index_exists = 0,
'ALTER TABLE `pro_workorder` ADD INDEX `idx_workorder_material` (`material_id`)',
'SELECT ''Index idx_workorder_material already exists'' AS message');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- -----------------------------------------------------
-- 5. 更新计划周期字典数据(如果不存在)
-- -----------------------------------------------------
-- 检查并插入年计划字典
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)
SELECT 0, '年计划', 'year', 'pro_schedule_cycle', '', 'danger', 'N', '0', 'admin', NOW(), '按年制定的生产计划'
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_data WHERE dict_type = 'pro_schedule_cycle' AND dict_value = 'year'
);
-- 检查并插入周计划字典
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)
SELECT 1, '周计划', 'week', 'pro_schedule_cycle', '', 'primary', 'N', '0', 'admin', NOW(), '按周制定的生产计划'
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_data WHERE dict_type = 'pro_schedule_cycle' AND dict_value = 'week'
);
-- 检查并插入月计划字典
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)
SELECT 2, '月计划', 'month', 'pro_schedule_cycle', '', 'success', 'N', '0', 'admin', NOW(), '按月制定的生产计划'
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_data WHERE dict_type = 'pro_schedule_cycle' AND dict_value = 'month'
);
-- -----------------------------------------------------
-- 6. 说明
-- -----------------------------------------------------
-- 本次优化不新增表,使用现有表结构:
-- - pro_plan: 生产计划表(扩展字段)
-- - pro_workorder: 工单主表已验证source_type和source_info字段存在用于关联计划
-- - pro_workorder_entry: 工单子表(工序明细)
-- - pro_report: 报工单表(报工记录)
--
-- 字段验证结果:
-- - pro_workorder.source_type: 已存在,用于标识工单来源(如"plan"
-- - pro_workorder.source_info: 已存在用于存储计划ID和订单信息JSON格式
-- - md_material.route_id: 已验证/添加用于存储产品的默认工序路线ID
--
-- 多订单处理方式:
-- - plan_analysis字段存储JSON格式的多订单分析数据
-- - related_order_ids字段存储关联的订单ID列表
-- - 每个订单生成一个工单通过source_type="plan"和source_info关联到计划
-- - 工单子表记录每个工序的明细
-- - 报工单记录每个工序的报工情况
--
-- 索引优化:
-- - pro_plan: 添加schedule_cycle、year_week、year_month、route_id索引
-- - md_material: 添加route_id索引
-- - pro_workorder: 添加source_type索引优化按来源类型查询性能