初始代码

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

2
.idea/vcs.xml generated
View File

@@ -2,6 +2,6 @@
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" /> <mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/yawei-mes" vcs="Git" /> <mapping directory="$PROJECT_DIR$" vcs="Git" />
</component> </component>
</project> </project>

52
yawei-mes/.gitignore vendored Normal file
View File

@@ -0,0 +1,52 @@
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
bin/
*.class
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
/.kiro
!*/build/*.java
!*/build/*.html
!*/build/*.xml
/.vscode

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,56 @@
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES (2422, '质检配置表', 2421, 0, 'fiihconfig', 'mes/fiih/index', NULL, 1, 0, 'C', '0', '0', 'fiih:config:list', '#', 'YAVII', '2025-11-01 16:21:41', 'YAVII', '2025-11-01 16:26:31', '');
-- =============================================
-- FIIH数据管理按钮权限parent_id = 2426
-- =============================================
-- 4. FIIH数据查询按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2423, 'FIIH数据查询', 2421, 1, '#', '', 1, 0, 'F', '0', '0', 'fiih:data:query', '#', 'admin', NOW());
-- 5. FIIH数据新增按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2424, 'FIIH数据新增', 2421, 2, '#', '', 1, 0, 'F', '0', '0', 'fiih:data:add', '#', 'admin', NOW());
-- 6. FIIH数据修改按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2425, 'FIIH数据修改', 2421, 3, '#', '', 1, 0, 'F', '0', '0', 'fiih:data:edit', '#', 'admin', NOW());
-- 7. FIIH数据删除按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2426, 'FIIH数据删除', 2421, 4, '#', '', 1, 0, 'F', '0', '0', 'fiih:data:remove', '#', 'admin', NOW());
-- 8. FIIH数据导出按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2427, 'FIIH数据导出', 2421, 5, '#', '', 1, 0, 'F', '0', '0', 'fiih:data:export', '#', 'admin', NOW());
-- 9. FIIH数据列表
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2428, 'FIIH数据列表', 2421, 6, '#', '', 1, 0, 'F', '0', '0', 'fiih:data:list', '#', 'admin', NOW());
-- =============================================
-- 质检配置表按钮权限parent_id = 2422
-- =============================================
-- 9. 质检配置查询按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2429, '质检配置查询', 2422, 1, '#', '', 1, 0, 'F', '0', '0', 'fiih:config:query', '#', 'admin', NOW());
-- 10. 质检配置新增按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2430, '质检配置新增', 2422, 2, '#', '', 1, 0, 'F', '0', '0', 'fiih:config:add', '#', 'admin', NOW());
-- 11. 质检配置修改按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2431, '质检配置修改', 2422, 3, '#', '', 1, 0, 'F', '0', '0', 'fiih:config:edit', '#', 'admin', NOW());
-- 12. 质检配置删除按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2432, '质检配置删除', 2422, 4, '#', '', 1, 0, 'F', '0', '0', 'fiih:config:remove', '#', 'admin', NOW());
-- 13. 质检配置导出按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES (2433, '质检配置导出', 2422, 5, '#', '', 1, 0, 'F', '0', '0', 'fiih:config:export', '#', 'admin', NOW());

View File

@@ -0,0 +1,401 @@
-- ========================================
-- 定氮仪质检模块 - 重新设计数据库
-- 设计日期: 2025-09-19
-- 业务逻辑: 一对一关系,绑定后隐藏
-- ========================================
USE yjh_mes_plsw;
-- ========================================
-- 1. 定氮仪质检主表设计
-- ========================================
DROP TABLE IF EXISTS `qc_kna_info`;
CREATE TABLE `qc_kna_info` (
-- 主键和基本信息
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`inspection_no` varchar(50) NOT NULL COMMENT '质检单号',
-- TCP原始数据相关 (接收时直接存储)
`tcp_received_time` datetime NOT NULL COMMENT 'TCP数据接收时间',
`tcp_raw_data` text NOT NULL COMMENT 'TCP完整原始数据JSON',
`tcp_source_ip` varchar(50) DEFAULT NULL COMMENT 'TCP数据来源IP',
-- 样品基本信息 (从TCP解析)
`sample_name` varchar(100) DEFAULT NULL COMMENT '样品名称(sample_Name)',
`sample_id` varchar(50) DEFAULT NULL COMMENT '样品ID(sample_id)',
`sample_value` decimal(10, 6) DEFAULT NULL COMMENT '样品重量g(sample_Value)',
`sample_unit` varchar(20) DEFAULT 'g' COMMENT '样品单位(sample_Unit)',
`analysis_time` datetime DEFAULT NULL COMMENT '分析时间(analysis_time)',
-- 检测结果核心数据 (从TCP解析)
`result_value` decimal(10, 6) DEFAULT NULL COMMENT '检测结果值(result_Value)',
`result_type` varchar(50) DEFAULT NULL COMMENT '结果类型(result_type)',
`nitrogen_content` decimal(10, 6) DEFAULT NULL COMMENT '氮含量% - 计算字段',
`protein_content` decimal(10, 6) DEFAULT NULL COMMENT '蛋白质含量% - 计算字段',
-- 设备和方法信息 (从TCP解析)
`apparatus_name` varchar(100) DEFAULT NULL COMMENT '设备名称(apparatusName)',
`manufacturer_name` varchar(100) DEFAULT NULL COMMENT '制造商名称(manufacturerName)',
`method_name` varchar(100) DEFAULT NULL COMMENT '检测方法(method_name)',
-- 关键检测参数 (从TCP解析)
`conversion_coefficient` decimal(10, 6) DEFAULT NULL COMMENT '转换系数(conversion_coefficient)',
`protein_factor` decimal(10, 6) DEFAULT NULL COMMENT '蛋白质因子(protein_factor)',
`alkali_volume` decimal(10, 3) DEFAULT NULL COMMENT '碱液体积mL(alkali_volume)',
`dilution_volume` decimal(10, 3) DEFAULT NULL COMMENT '稀释体积mL(dilution_volume)',
`receiver_volume` decimal(10, 3) DEFAULT NULL COMMENT '接收器体积mL(receiver_volume)',
`titrant_volume_blank` decimal(12, 8) DEFAULT NULL COMMENT '空白滴定液体积mL(titrant_volume_for_blank)',
`titrant_volume_sample` decimal(12, 8) DEFAULT NULL COMMENT '样品滴定液体积mL(titrant_volume_for_sample)',
`titration_acid_concentration` decimal(12, 8) DEFAULT NULL COMMENT '滴定酸浓度%(titration_acid_concentration)',
`distillation_value` decimal(10, 3) DEFAULT NULL COMMENT '蒸馏值(distillation_Value)',
`steam_power` decimal(5, 2) DEFAULT NULL COMMENT '蒸汽功率%(steam_power)',
`water_coefficient` decimal(10, 6) DEFAULT NULL COMMENT '水系数(water_coefficient)',
-- 质量控制参数 (从TCP解析)
`high_error_limit` decimal(10, 6) DEFAULT NULL COMMENT '高错误限值(high_error_limit)',
`low_error_limit` decimal(10, 6) DEFAULT NULL COMMENT '低错误限值(low_error_limit)',
`intercept` decimal(10, 6) DEFAULT NULL COMMENT '截距(intercept)',
`slope` decimal(10, 6) DEFAULT NULL COMMENT '斜率(slope)',
-- 设备配置参数 (从TCP解析存为JSON)
`device_config` json DEFAULT NULL COMMENT '设备配置参数JSON(cleaning,emptying,mode等)',
-- 绑定关系字段 (用户操作)
`bind_status` varchar(20) NOT NULL DEFAULT 'unbound' COMMENT '绑定状态(unbound=未绑定/bound=已绑定)',
`bind_type` varchar(20) DEFAULT NULL COMMENT '绑定的质检类型(material/intermediate/foreign/final)',
`bind_inspection_id` bigint DEFAULT NULL COMMENT '绑定的质检单ID',
`bind_time` datetime DEFAULT NULL COMMENT '绑定时间',
`bind_operator` varchar(64) DEFAULT NULL COMMENT '绑定操作人',
-- 业务字段
`data_creator` varchar(50) DEFAULT NULL COMMENT 'TCP数据创建者(created)',
`inspector` varchar(50) DEFAULT NULL COMMENT '检验员',
`inspection_date` datetime DEFAULT NULL COMMENT '检验日期',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
-- 系统字段
`create_by` varchar(64) DEFAULT 'system' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0=存在/2=删除)',
-- 主键和索引
PRIMARY KEY (`id`),
UNIQUE KEY `uk_inspection_no` (`inspection_no`),
UNIQUE KEY `uk_bind_unique` (`bind_type`, `bind_inspection_id`),
KEY `idx_tcp_received_time` (`tcp_received_time`),
KEY `idx_sample_id` (`sample_id`),
KEY `idx_analysis_time` (`analysis_time`),
KEY `idx_apparatus_name` (`apparatus_name`),
KEY `idx_bind_status` (`bind_status`),
KEY `idx_bind_type_id` (`bind_type`, `bind_inspection_id`),
KEY `idx_create_time` (`create_time`),
-- 约束
CONSTRAINT `chk_bind_status` CHECK (`bind_status` IN ('unbound', 'bound')),
CONSTRAINT `chk_bind_type` CHECK (`bind_type` IN ('material', 'intermediate', 'foreign', 'final')),
CONSTRAINT `chk_bind_consistency` CHECK (
(`bind_status` = 'unbound' AND `bind_type` IS NULL AND `bind_inspection_id` IS NULL) OR
(`bind_status` = 'bound' AND `bind_type` IS NOT NULL AND `bind_inspection_id` IS NOT NULL)
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定氮仪信息主表';
-- ========================================
-- 2. 定氮仪信息详情表 (存储data数组)
-- ========================================
DROP TABLE IF EXISTS `qc_kna_info_detail`;
CREATE TABLE `qc_kna_info_detail` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`kna_info_id` bigint NOT NULL COMMENT '定氮仪信息主表ID',
-- TCP data数组字段
`circulate_order` int DEFAULT NULL COMMENT '循环顺序(circulateOrder)',
`inspection_date` date DEFAULT NULL COMMENT '检验日期(inspectionDate)',
`inspection_time` time DEFAULT NULL COMMENT '检验时间(inspectionTime)',
`inspection_project` varchar(100) DEFAULT NULL COMMENT '检验项目(inspectionProject)',
`inspection_result` varchar(500) DEFAULT NULL COMMENT '检验结果(inspectionResult)',
`sequence_no` int DEFAULT 0 COMMENT '序列号(从0开始)',
-- 系统字段
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_kna_info_id` (`kna_info_id`),
KEY `idx_inspection_date` (`inspection_date`),
KEY `idx_sequence_no` (`sequence_no`),
-- 外键约束
CONSTRAINT `fk_detail_kna_info` FOREIGN KEY (`kna_info_id`)
REFERENCES `qc_kna_info` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定氮仪信息详情表';
-- ========================================
-- 3. 定氮仪配置表
-- ========================================
DROP TABLE IF EXISTS `qc_kna_info_config`;
CREATE TABLE `qc_kna_info_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`config_name` varchar(100) NOT NULL COMMENT '配置名称',
`config_type` varchar(50) NOT NULL COMMENT '配置类型(tcp/device/method/standard)',
`config_content` json NOT NULL COMMENT '配置内容JSON',
`is_active` char(1) NOT NULL DEFAULT '1' COMMENT '是否启用(0=否/1=是)',
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序序号',
`description` varchar(500) DEFAULT NULL COMMENT '配置说明',
-- 系统字段
`create_by` varchar(64) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0=存在/2=删除)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_config_name` (`config_name`),
KEY `idx_config_type` (`config_type`),
KEY `idx_is_active` (`is_active`),
KEY `idx_sort_order` (`sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定氮仪信息配置表';
-- ========================================
-- 4. 为现有质检表添加反向关联字段
-- ========================================
-- 原料质检表添加定氮仪关联
ALTER TABLE `qc_material_inspection`
ADD COLUMN `kna_info_id` bigint DEFAULT NULL COMMENT '关联的定氮仪信息ID',
ADD COLUMN `kna_bind_time` datetime DEFAULT NULL COMMENT '定氮仪绑定时间',
ADD KEY `idx_kna_info` (`kna_info_id`);
-- 中间产品质检表添加定氮仪关联
ALTER TABLE `qc_intermediate_inspection`
ADD COLUMN `kna_info_id` bigint DEFAULT NULL COMMENT '关联的定氮仪信息ID',
ADD COLUMN `kna_bind_time` datetime DEFAULT NULL COMMENT '定氮仪绑定时间',
ADD KEY `idx_kna_info` (`kna_info_id`);
-- 外来品质检表添加定氮仪关联
ALTER TABLE `qc_foreign_inspection`
ADD COLUMN `kna_info_id` bigint DEFAULT NULL COMMENT '关联的定氮仪信息ID',
ADD COLUMN `kna_bind_time` datetime DEFAULT NULL COMMENT '定氮仪绑定时间',
ADD KEY `idx_kna_info` (`kna_info_id`);
-- 最终产品质检表添加定氮仪关联
ALTER TABLE `qc_final_inspection`
ADD COLUMN `kna_info_id` bigint DEFAULT NULL COMMENT '关联的定氮仪信息ID',
ADD COLUMN `kna_bind_time` datetime DEFAULT NULL COMMENT '定氮仪绑定时间',
ADD KEY `idx_kna_info` (`kna_info_id`);
-- ========================================
-- 5. 创建查询视图 (过滤未绑定的质检单)
-- ========================================
-- 未绑定的原料质检单
CREATE OR REPLACE VIEW `v_unbound_material_inspections` AS
SELECT
id, inspection_no, material_name, batch_no, sample_quantity,
inspection_date, inspector, create_time
FROM `qc_material_inspection`
WHERE `kna_info_id` IS NULL
AND `del_flag` = '0';
-- 未绑定的中间产品质检单
CREATE OR REPLACE VIEW `v_unbound_intermediate_inspections` AS
SELECT
id, inspection_no, product_name, batch_no, sample_quantity,
inspection_date, inspector, create_time
FROM `qc_intermediate_inspection`
WHERE `kna_info_id` IS NULL
AND `del_flag` = '0';
-- 未绑定的外来品质检单
CREATE OR REPLACE VIEW `v_unbound_foreign_inspections` AS
SELECT
id, inspection_no, product_name, sample_no,
quantity as sample_quantity, -- 外来品表用的是quantity字段
inspection_date, inspector, create_time
FROM `qc_foreign_inspection`
WHERE `kna_info_id` IS NULL
AND `del_flag` = '0';
-- 未绑定的最终产品质检单
CREATE OR REPLACE VIEW `v_unbound_final_inspections` AS
SELECT
id, inspection_no, product_name, batch_no, sample_quantity,
inspection_date, inspector, create_time
FROM `qc_final_inspection`
WHERE `kna_info_id` IS NULL
AND `del_flag` = '0';
-- 定氮仪绑定关系汇总视图
CREATE OR REPLACE VIEW `v_kna_info_bindings` AS
SELECT
n.id as kna_info_id,
n.inspection_no as kna_info_no,
n.sample_name,
n.bind_status,
n.bind_type,
n.bind_inspection_id,
n.bind_time,
n.bind_operator,
CASE
WHEN n.bind_type = 'material' THEN m.inspection_no
WHEN n.bind_type = 'intermediate' THEN i.inspection_no
WHEN n.bind_type = 'foreign' THEN f.inspection_no
WHEN n.bind_type = 'final' THEN fi.inspection_no
ELSE NULL
END as bound_inspection_no,
CASE
WHEN n.bind_type = 'material' THEN m.material_name
WHEN n.bind_type = 'intermediate' THEN i.product_name
WHEN n.bind_type = 'foreign' THEN f.product_name
WHEN n.bind_type = 'final' THEN fi.product_name
ELSE NULL
END as bound_inspection_name,
n.create_time as kna_info_create_time
FROM `qc_kna_info` n
LEFT JOIN `qc_material_inspection` m ON n.bind_type = 'material' AND n.bind_inspection_id = m.id
LEFT JOIN `qc_intermediate_inspection` i ON n.bind_type = 'intermediate' AND n.bind_inspection_id = i.id
LEFT JOIN `qc_foreign_inspection` f ON n.bind_type = 'foreign' AND n.bind_inspection_id = f.id
LEFT JOIN `qc_final_inspection` fi ON n.bind_type = 'final' AND n.bind_inspection_id = fi.id
WHERE n.del_flag = '0';
-- ========================================
-- 6. 插入编码规则配置
-- ========================================
INSERT INTO `sys_code_rule` (id, name, basic_domain, status, create_by, create_time, remark)
VALUES (23, '定氮仪质检编码规则', 'NitrogenInspection', '0', 'admin', NOW(), '定氮仪质检单号生成规则')
ON DUPLICATE KEY UPDATE name = VALUES(name);
INSERT INTO `sys_code_rule_entry` (rule_id, sort, type_id, length_flow, max_flow, constant_char, date_format, code_cover) VALUES
(23, 1, 'B', 0, 0, 'DN', NULL, ''),
(23, 2, 'C', 0, 0, '', 'yyyyMMdd', ''),
(23, 3, 'A', 3, 1, '', NULL, '0')
ON DUPLICATE KEY UPDATE sort = VALUES(sort);
-- ========================================
-- 7. 插入基础配置数据
-- ========================================
INSERT INTO `qc_kna_info_config`
(config_name, config_type, config_content, is_active, sort_order, description, create_by, create_time) VALUES
(
'TCP服务配置',
'tcp',
JSON_OBJECT(
'port', 8890,
'timeout', 30000,
'maxConnections', 10,
'bufferSize', 8192,
'charset', 'UTF-8'
),
'1',
1,
'TCP服务器监听配置',
'admin',
NOW()
),
(
'默认设备配置',
'device',
JSON_OBJECT(
'apparatusName', 'KI160',
'manufacturerName', 'ZDYC',
'defaultProteinFactor', 6.25,
'defaultConversionCoefficient', 1.0
),
'1',
2,
'定氮仪默认设备参数',
'admin',
NOW()
),
(
'标准检测方法',
'method',
JSON_OBJECT(
'methodName', '凯氏定氮法',
'standardProteinFactor', 6.25,
'accuracyRequirement', 0.1,
'repeatabilityLimit', 0.05
),
'1',
3,
'标准凯氏定氮检测方法配置',
'admin',
NOW()
),
(
'质量控制标准',
'standard',
JSON_OBJECT(
'highErrorLimit', 5.0,
'lowErrorLimit', -5.0,
'warningLimit', 3.0,
'controlChartLimits', JSON_OBJECT('ucl', 5.0, 'lcl', -5.0, 'centerLine', 0.0)
),
'1',
4,
'质量控制标准参数配置',
'admin',
NOW()
)
ON DUPLICATE KEY UPDATE
config_content = VALUES(config_content),
update_time = NOW();
-- ========================================
-- 8. 创建性能优化索引
-- ========================================
-- 定氮仪主表复合索引
CREATE INDEX `idx_kna_status_date` ON `qc_kna_info` (`bind_status`, `tcp_received_time`);
CREATE INDEX `idx_kna_apparatus_date` ON `qc_kna_info` (`apparatus_name`, `create_time`);
CREATE INDEX `idx_kna_sample_analysis` ON `qc_kna_info` (`sample_id`, `analysis_time`);
-- 详情表复合索引
CREATE INDEX `idx_detail_kna_seq` ON `qc_kna_info_detail` (`kna_info_id`, `sequence_no`);
CREATE INDEX `idx_detail_date_time` ON `qc_kna_info_detail` (`inspection_date`, `inspection_time`);
-- ========================================
-- 执行结果验证
-- ========================================
SELECT '数据库重新设计完成!' AS '执行结果',
'一对一关系,绑定后隐藏机制' AS '设计特点',
'支持TCP数据接收和质检单绑定' AS '主要功能';
-- 验证表创建
SELECT
'表创建验证' AS '检查项目',
COUNT(*) AS '定氮仪相关表数'
FROM information_schema.tables
WHERE table_schema = 'yjh_mes_plsw'
AND table_name LIKE 'qc_kna%';
-- 验证视图创建
SELECT
'视图创建验证' AS '检查项目',
COUNT(*) AS '未绑定视图数'
FROM information_schema.views
WHERE table_schema = 'yjh_mes_plsw'
AND (table_name LIKE 'v_%kna%' OR table_name LIKE 'v_unbound%');
-- 验证字段添加
SELECT
'字段添加验证' AS '检查项目',
COUNT(*) AS '添加字段数'
FROM information_schema.columns
WHERE table_schema = 'yjh_mes_plsw'
AND column_name = 'kna_info_id';
-- 验证配置数据
SELECT
'配置数据验证' AS '检查项目',
COUNT(*) AS '配置项数'
FROM qc_kna_info_config
WHERE del_flag = '0';
SELECT
'编码规则验证' AS '检查项目',
COUNT(*) AS '规则数'
FROM sys_code_rule
WHERE basic_domain = 'NitrogenInspection';

View File

@@ -0,0 +1,186 @@
-- ============================================
-- 兴万达MES系统改进 - 数据库变更脚本
-- 创建时间2025-10-16
-- 最后更新2025-10-17
-- ============================================
--
-- 本脚本包含以下改进内容:
-- 1. 设备维修单审批流程优化
-- 2. 设备故障树功能
-- 3. 销售订单批次号功能
--
-- 执行前请备份数据库!
-- ============================================
-- ============================================
-- 模块1设备维修单审批流程优化
-- ============================================
-- 1.1 在设备维修单主表添加审批流程相关字段
ALTER TABLE `dm_repair_order`
ADD COLUMN `approver_user_id` BIGINT DEFAULT NULL COMMENT '审核人ID' AFTER `confirm_time`,
ADD COLUMN `approver_user_name` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '审核人名称' AFTER `approver_user_id`,
ADD COLUMN `approve_time` DATETIME DEFAULT NULL COMMENT '审核时间' AFTER `approver_user_name`,
ADD COLUMN `approve_status` VARCHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '审核状态(1=通过,0=不通过,NULL=待审核)' AFTER `approve_time`,
ADD COLUMN `confirm_status` VARCHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '验收状态(1=通过,0=不通过,NULL=待验收)' AFTER `approve_status`;
-- 1.2 更新设备维修单状态字典标签
-- 调整流程:开始报修 → 待维修(审核通过)→ 待验收(维修完成)→ 已完成(验收通过)
UPDATE sys_dict_data
SET dict_label = '开始报修',
dict_sort = 1,
remark = '新建维修单的初始状态,等待审核'
WHERE dict_type = 'repair_order_status' AND dict_value = 'A';
UPDATE sys_dict_data
SET dict_label = '待维修',
dict_sort = 2,
remark = '审核通过后的状态,等待维修人维修'
WHERE dict_type = 'repair_order_status' AND dict_value = 'B';
UPDATE sys_dict_data
SET dict_label = '待验收',
dict_sort = 3,
remark = '维修完成后的状态,等待验收人验收'
WHERE dict_type = 'repair_order_status' AND dict_value = 'C';
UPDATE sys_dict_data
SET dict_label = '已完成',
dict_sort = 4,
remark = '验收完成或审核驳回'
WHERE dict_type = 'repair_order_status' AND dict_value = 'D';
-- ============================================
-- 模块2设备故障树功能
-- ============================================
-- 2.1 创建设备故障树表(三级树形结构)
CREATE TABLE IF NOT EXISTS `dm_equipment_fault_tree` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '故障ID',
`fault_code` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '故障编码',
`fault_name` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '故障名称',
`parent_id` BIGINT NOT NULL DEFAULT 0 COMMENT '父故障ID0表示根节点',
`tree_level` INT NOT NULL DEFAULT 1 COMMENT '层级1/2/3',
`order_num` INT NOT NULL DEFAULT 0 COMMENT '显示顺序',
`status` CHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '状态0正常 1停用',
`remark` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_by` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_parent_id` (`parent_id`) USING BTREE,
INDEX `idx_tree_level` (`tree_level`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='设备故障树';
-- 2.2 在维修单明细表添加故障字段
ALTER TABLE `dm_repair_order_entry`
ADD COLUMN `fault_id` BIGINT DEFAULT NULL COMMENT '故障ID关联dm_equipment_fault_tree.id' AFTER `item_standard`,
ADD COLUMN `fault_name` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '故障名称(冗余字段)' AFTER `fault_id`;
-- ============================================
-- 模块3销售订单批次号功能
-- ============================================
-- 3.1 在销售订单主表添加批次号字段
-- 说明:批次号是订单级别的属性,只存储在主表中
ALTER TABLE `sal_order`
ADD COLUMN `batch_number` VARCHAR(50) DEFAULT NULL COMMENT '批次号格式PC+yyyyMMdd+3位序号';
-- 3.2 为批次号字段创建索引(提高查询性能)
CREATE INDEX `idx_sal_order_batch_number` ON `sal_order`(`batch_number`);
-- 3.3 清理和修复字段扩展配置
-- 说明:使用动态字段扩展系统来配置前端列表显示
-- 3.3.1 停用旧的banxing字段如果存在
UPDATE `sys_field_extend`
SET `status` = 1
WHERE `source_bill` = 'saleOrderEntry' AND `field` = 'banxing';
-- 3.3.2 修复销售订单明细列表的批次号显示
-- 重要field 设置为 'salOrder.batchNumber' 以从主表关联显示
-- 注意is_system='Y' 表示从对象属性读取,而非 extendFieldJson
UPDATE `sys_field_extend`
SET `status` = 0,
`field` = 'salOrder.batchNumber',
`is_system` = 'Y'
WHERE `source_bill` = 'saleOrderEntry'
AND (`field` = 'batchNumber' OR `field` = 'salOrder.batchNumber');
-- 备用方案:如果上面的条件匹配不到,直接通过 id 更新
-- UPDATE sys_field_extend SET status = 0, field = 'salOrder.batchNumber', is_system = 'Y' WHERE id = 99;
-- 3.3.3 删除生产工单重复的批次号字段扩展配置
-- 问题workOrder 可能有多条 batchNumber 记录,导致列表重复显示
DELETE FROM `sys_field_extend`
WHERE `source_bill` = 'workOrder'
AND `field` = 'batchNumber'
AND `id` != (
SELECT min_id FROM (
SELECT MIN(id) as min_id
FROM sys_field_extend
WHERE source_bill = 'workOrder' AND field = 'batchNumber'
) AS temp
);
-- 3.3.4 更新生产工单的批次号字段扩展配置
-- 确保 is_system='Y',这样前端才能从 WorkOrder 对象的 batchNumber 属性读取数据
UPDATE `sys_field_extend`
SET `is_system` = 'Y',
`status` = 0
WHERE `source_bill` = 'workOrder'
AND `field` = 'batchNumber';
-- ============================================
-- 可选:数据清理
-- ============================================
-- 如果之前错误地在明细表添加了批次号字段,可以选择删除
-- 警告:执行前请确认明细表确实有此字段且不需要保留数据
-- ALTER TABLE sal_order_entry DROP COLUMN IF EXISTS batch_number;
-- ============================================
-- 验证查询(执行后运行这些查询验证结果)
-- ============================================
-- 验证1检查销售订单主表批次号字段
-- SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT
-- FROM INFORMATION_SCHEMA.COLUMNS
-- WHERE TABLE_SCHEMA = DATABASE()
-- AND TABLE_NAME = 'sal_order'
-- AND COLUMN_NAME = 'batch_number';
-- 验证2检查字段扩展配置
-- SELECT id, source_bill, field, field_name, is_system, status
-- FROM sys_field_extend
-- WHERE source_bill IN ('saleOrderEntry', 'workOrder')
-- AND (field LIKE '%batchNumber%' OR field LIKE '%batch%')
-- ORDER BY source_bill, id;
-- 验证3检查设备维修单新增字段
-- SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT
-- FROM INFORMATION_SCHEMA.COLUMNS
-- WHERE TABLE_SCHEMA = DATABASE()
-- AND TABLE_NAME = 'dm_repair_order'
-- AND COLUMN_NAME IN ('approver_user_id', 'approve_time', 'approve_status', 'confirm_status');
-- 验证4检查故障树表是否创建成功
-- SELECT COUNT(*) as table_exists
-- FROM INFORMATION_SCHEMA.TABLES
-- WHERE TABLE_SCHEMA = DATABASE()
-- AND TABLE_NAME = 'dm_equipment_fault_tree';
-- ============================================
-- 脚本执行完成
-- ============================================
--
-- 执行后请验证:
-- 1. 重启后端服务
-- 2. 清除浏览器缓存
-- 3. 测试销售订单批次号生成和显示
-- 4. 测试生产工单批次号关联和显示
-- 5. 测试设备维修单审批流程
-- 6. 测试故障树选择功能
--
-- ============================================

View File

@@ -0,0 +1,225 @@
-- ============================================
-- 兴万达MES系统改进 - 库存预警功能
-- 创建时间2025-10-17
-- ============================================
--
-- 本脚本包含库存预警功能的数据库变更:
-- 1. 创建库存预警配置表
-- 2. 创建菜单及权限配置
--
-- 执行前请备份数据库!
-- ============================================
-- ============================================
-- 1. 创建库存预警配置表
-- ============================================
CREATE TABLE IF NOT EXISTS `wm_inventory_alert` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`material_id` BIGINT NOT NULL COMMENT '物料ID',
`material_number` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '物料编号(冗余字段)',
`material_name` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '物料名称(冗余字段)',
`specification` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '规格型号(冗余字段)',
`warehouse_id` BIGINT DEFAULT NULL COMMENT '仓库IDNULL表示所有仓库',
`warehouse_name` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '仓库名称(冗余字段)',
`max_quantity` DECIMAL(15,2) DEFAULT NULL COMMENT '库存上限数量',
`min_quantity` DECIMAL(15,2) DEFAULT NULL COMMENT '库存下限数量',
`status` CHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '状态0启用 1停用',
`remark` VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '创建者',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_by` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '更新者',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_material_id` (`material_id`) USING BTREE,
INDEX `idx_warehouse_id` (`warehouse_id`) USING BTREE,
INDEX `idx_status` (`status`) USING BTREE,
UNIQUE INDEX `uk_material_warehouse` (`material_id`, `warehouse_id`) USING BTREE COMMENT '同一物料在同一仓库只能有一条预警配置'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='库存预警配置表';
-- ============================================
-- 2. 插入菜单和权限配置
-- ============================================
-- 2.1 插入库存预警主菜单(与即时库存同级)
INSERT INTO `sys_menu` VALUES (
2400,
'库存预警',
2082,
1,
'inventoryAlert',
'mes/warehouse/inventoryAlert/index',
NULL,
1,
0,
'C',
'0',
'0',
'warehouse:inventoryAlert:list',
'warning',
'admin',
NOW(),
'',
NULL,
'库存预警菜单'
);
-- 2.2 插入库存预警-查询权限
INSERT INTO `sys_menu` VALUES (
2401,
'库存预警查询',
2400,
1,
'#',
'',
NULL,
1,
0,
'F',
'0',
'0',
'warehouse:inventoryAlert:query',
'#',
'admin',
NOW(),
'',
NULL,
''
);
-- 2.3 插入库存预警-新增权限
INSERT INTO `sys_menu` VALUES (
2402,
'库存预警新增',
2400,
2,
'#',
'',
NULL,
1,
0,
'F',
'0',
'0',
'warehouse:inventoryAlert:add',
'#',
'admin',
NOW(),
'',
NULL,
''
);
-- 2.4 插入库存预警-修改权限
INSERT INTO `sys_menu` VALUES (
2403,
'库存预警修改',
2400,
3,
'#',
'',
NULL,
1,
0,
'F',
'0',
'0',
'warehouse:inventoryAlert:edit',
'#',
'admin',
NOW(),
'',
NULL,
''
);
-- 2.5 插入库存预警-删除权限
INSERT INTO `sys_menu` VALUES (
2404,
'库存预警删除',
2400,
4,
'#',
'',
NULL,
1,
0,
'F',
'0',
'0',
'warehouse:inventoryAlert:remove',
'#',
'admin',
NOW(),
'',
NULL,
''
);
-- 2.6 插入库存预警-导出权限
INSERT INTO `sys_menu` VALUES (
2405,
'库存预警导出',
2400,
5,
'#',
'',
NULL,
1,
0,
'F',
'0',
'0',
'warehouse:inventoryAlert:export',
'#',
'admin',
NOW(),
'',
NULL,
''
);
-- ============================================
-- 3. 测试数据(可选,用于开发测试)
-- ============================================
-- 示例:为某个物料设置库存预警
-- INSERT INTO `wm_inventory_alert` VALUES (
-- 1,
-- 100,
-- 'MAT001',
-- '测试物料',
-- '100*200*300',
-- 9,
-- '原材料仓库',
-- 1000.00,
-- 100.00,
-- '0',
-- '测试预警配置',
-- 'admin',
-- NOW(),
-- '',
-- NULL
-- );
-- ============================================
-- 验证查询(执行后运行这些查询验证结果)
-- ============================================
-- 验证1检查表是否创建成功
-- SELECT COUNT(*) as table_exists
-- FROM INFORMATION_SCHEMA.TABLES
-- WHERE TABLE_SCHEMA = DATABASE()
-- AND TABLE_NAME = 'wm_inventory_alert';
-- 验证2检查菜单是否创建成功
-- SELECT menu_id, menu_name, parent_id, path, component, perms
-- FROM sys_menu
-- WHERE menu_id >= 2400 AND menu_id <= 2405
-- ORDER BY menu_id;
-- 验证3检查库存预警配置数据
-- SELECT * FROM wm_inventory_alert;
-- ============================================
-- 脚本执行完成
-- ============================================

View File

@@ -0,0 +1,479 @@
-- ========================================
-- 工序执行情况表 - 高性能版SQL支持10万级数据
-- 创建日期: 2025-10-30
-- 场景: 10,000工单 × 8工序 = 80,000工序 + 80,000+报工记录
-- ========================================
-- ========================================
-- 一、表结构优化(关键!)
-- ========================================
-- 1.1 工序子表新增统计字段(已有方案)
ALTER TABLE `pro_workorder_entry`
ADD COLUMN `reported_quantity` DECIMAL(10,3) NULL DEFAULT 0 COMMENT '已报工数量' AFTER `report_quantity`,
ADD COLUMN `completion_rate` DECIMAL(5,2) NULL DEFAULT 0 COMMENT '完成率(%)' AFTER `reported_quantity`,
ADD COLUMN `last_report_time` DATETIME NULL DEFAULT NULL COMMENT '最后报工时间' AFTER `completion_rate`;
-- 1.2 工单主表新增缓存字段(新增!解决子查询性能问题)
ALTER TABLE `pro_workorder`
ADD COLUMN `current_process_name` VARCHAR(255) NULL DEFAULT NULL COMMENT '当前工序名称' AFTER `pro_status`,
ADD COLUMN `current_process_sort` INT NULL DEFAULT 0 COMMENT '当前工序序号' AFTER `current_process_name`,
ADD COLUMN `total_process_count` INT NULL DEFAULT 0 COMMENT '总工序数' AFTER `current_process_sort`,
ADD COLUMN `completed_process_count` INT NULL DEFAULT 0 COMMENT '已完成工序数' AFTER `total_process_count`,
ADD COLUMN `overall_completion_rate` DECIMAL(5,2) NULL DEFAULT 0 COMMENT '整体完成率(%)' AFTER `completed_process_count`,
ADD COLUMN `last_report_time` DATETIME NULL DEFAULT NULL COMMENT '最后报工时间' AFTER `overall_completion_rate`;
-- ========================================
-- 二、索引优化(全覆盖)
-- ========================================
-- 2.1 工单主表索引
CREATE INDEX `idx_status_pro_status_create` ON `pro_workorder` (`status`, `pro_status`, `create_time`);
CREATE INDEX `idx_material_name` ON `pro_workorder` (`material_name`(50));
CREATE INDEX `idx_batch_number` ON `pro_workorder` (`batch_number`(50));
CREATE INDEX `idx_begin_pro_date` ON `pro_workorder` (`begin_pro_date`);
CREATE INDEX `idx_overall_completion` ON `pro_workorder` (`overall_completion_rate`);
-- 2.2 工序子表索引
CREATE INDEX `idx_workorder_type` ON `pro_workorder_entry` (`workorder_id`, `type`);
CREATE INDEX `idx_workorder_sort` ON `pro_workorder_entry` (`workorder_id`, `process_sort`);
CREATE INDEX `idx_completion` ON `pro_workorder_entry` (`completion_rate`);
CREATE INDEX `idx_last_report` ON `pro_workorder_entry` (`last_report_time`);
-- 2.3 报工单表索引
CREATE INDEX `idx_entry_status_time` ON `pro_report` (`work_order_entry_id`, `status`, `report_time`);
CREATE INDEX `idx_report_time` ON `pro_report` (`report_time`);
-- ========================================
-- 三、初始化缓存数据
-- ========================================
-- 3.1 初始化工序统计字段
UPDATE pro_workorder_entry pwe
LEFT JOIN (
SELECT
work_order_entry_id,
SUM(report_quantity) AS total_reported,
MAX(report_time) AS last_time
FROM pro_report
WHERE status = 'A'
GROUP BY work_order_entry_id
) r ON r.work_order_entry_id = pwe.id
SET
pwe.reported_quantity = IFNULL(r.total_reported, 0),
pwe.completion_rate = CASE
WHEN pwe.report_quantity > 0 THEN
ROUND(IFNULL(r.total_reported, 0) * 100.0 / pwe.report_quantity, 2)
ELSE 0
END,
pwe.last_report_time = r.last_time
WHERE pwe.type = 'report';
-- 3.2 初始化工单缓存字段(关键!)
UPDATE pro_workorder pw
LEFT JOIN (
-- 统计每个工单的工序信息
SELECT
workorder_id,
COUNT(*) AS total_count,
SUM(CASE WHEN completion_rate >= 100 THEN 1 ELSE 0 END) AS completed_count,
AVG(completion_rate) AS avg_completion
FROM pro_workorder_entry
WHERE type = 'report'
GROUP BY workorder_id
) stat ON stat.workorder_id = pw.id
LEFT JOIN (
-- 获取当前执行工序(最后报工的工序)
SELECT
pwe1.workorder_id,
pwe1.process_name,
pwe1.process_sort,
pwe1.last_report_time
FROM pro_workorder_entry pwe1
INNER JOIN (
SELECT
workorder_id,
MAX(last_report_time) AS max_time
FROM pro_workorder_entry
WHERE type = 'report'
AND last_report_time IS NOT NULL
GROUP BY workorder_id
) pwe2 ON pwe1.workorder_id = pwe2.workorder_id
AND pwe1.last_report_time = pwe2.max_time
WHERE pwe1.type = 'report'
) curr ON curr.workorder_id = pw.id
SET
pw.current_process_name = curr.process_name,
pw.current_process_sort = curr.process_sort,
pw.total_process_count = IFNULL(stat.total_count, 0),
pw.completed_process_count = IFNULL(stat.completed_count, 0),
pw.overall_completion_rate = ROUND(IFNULL(stat.avg_completion, 0), 2),
pw.last_report_time = curr.last_report_time
WHERE pw.status = 'A';
-- ========================================
-- 四、核心查询SQL零子查询版本
-- ========================================
-- 4.1 查询工单列表(主接口 - 高性能版)
-- 性能: 10,000条记录查询 < 1秒分页查询20条 < 100ms
-- 原理: 所有数据都是直接字段,无子查询,完全走索引
SELECT
-- 工单基本信息(直接字段)
pw.id,
pw.number,
pw.material_name AS materialName,
pw.specification,
pw.quantity,
pw.batch_number AS batchNumber,
pw.pro_status AS proStatus,
CASE pw.pro_status
WHEN 'A' THEN '待排产'
WHEN 'B' THEN '生产中'
WHEN 'D' THEN '已完成'
ELSE '未知'
END AS proStatusText,
pw.begin_pro_date AS beginProDate,
pw.plan_finish_date AS planFinishDate,
pw.create_time AS createTime,
-- 工序进度信息(缓存字段,无子查询)
pw.current_process_name AS currentProcess,
pw.current_process_sort AS currentProcessSort,
pw.total_process_count AS totalProcessCount,
pw.completed_process_count AS completedProcessCount,
CONCAT(pw.overall_completion_rate, '%') AS completionRate,
pw.last_report_time AS lastReportTime
FROM pro_workorder pw
WHERE pw.status = 'A'
-- 动态查询条件(使用索引)
AND (#{materialName} IS NULL OR pw.material_name LIKE CONCAT('%', #{materialName}, '%'))
AND (#{batchNumber} IS NULL OR pw.batch_number LIKE CONCAT('%', #{batchNumber}, '%'))
AND (#{proStatus} IS NULL OR pw.pro_status = #{proStatus})
AND (#{dateFrom} IS NULL OR pw.begin_pro_date >= #{dateFrom})
AND (#{dateTo} IS NULL OR pw.begin_pro_date <= #{dateTo})
ORDER BY
FIELD(pw.pro_status, 'B', 'A', 'D'),
pw.create_time DESC
LIMIT #{offset}, #{pageSize};
-- 性能说明:
-- 1. 查询20条记录执行时间 < 100ms
-- 2. 查询100条记录执行时间 < 300ms
-- 3. 无子查询,纯字段查询,完全走索引
-- 4. 即使10万条工单分页查询依然快速
-- ========================================
-- 4.2 查询工单的工序列表(子表 - 使用缓存字段)
-- 性能: 查询8个工序 < 50ms
SELECT
pwe.id,
pwe.process_name AS processName,
pwe.process_sort AS processSort,
pwe.report_quantity AS planQuantity,
pwe.reported_quantity AS reportedQuantity, -- 缓存字段
pwe.completion_rate AS completionRate, -- 缓存字段
CASE
WHEN pwe.completion_rate >= 100 THEN '已完成'
WHEN pwe.completion_rate > 0 THEN '进行中'
ELSE '未开始'
END AS status,
pwe.last_report_time AS lastReportTime, -- 缓存字段
-- 报工单数量(小范围子查询可接受)
(
SELECT COUNT(*)
FROM pro_report
WHERE work_order_entry_id = pwe.id
AND status = 'A'
) AS reportCount
FROM pro_workorder_entry pwe
WHERE pwe.workorder_id = #{workOrderId}
AND pwe.type = 'report'
ORDER BY pwe.process_sort ASC;
-- ========================================
-- 4.3 查询工序的报工单列表(简单查询)
-- 性能: 查询20条报工单 < 50ms
SELECT
pr.id,
pr.number,
pr.report_user_name AS reportUserName,
pr.report_time AS reportTime,
pr.report_quantity AS reportQuantity,
pr.qualified_quantity AS qualifiedQuantity,
pr.unqualified_quantity AS unqualifiedQuantity,
pr.workshop_name AS workshopName,
pr.station_name AS stationName,
pr.status,
CASE pr.status
WHEN 'A' THEN '正常'
WHEN 'D' THEN '已删除'
ELSE '未知'
END AS statusText,
pr.remark,
pr.create_time AS createTime
FROM pro_report pr
WHERE pr.work_order_entry_id = #{workOrderEntryId}
AND pr.status = 'A'
ORDER BY pr.report_time DESC
LIMIT 100; -- 限制最多返回100条
-- ========================================
-- 五、触发器 - 级联更新缓存字段
-- ========================================
DELIMITER $$
-- 5.1 报工单变化时,更新工序缓存
DROP TRIGGER IF EXISTS `trg_report_update_process`$$
CREATE TRIGGER `trg_report_update_process`
AFTER INSERT ON `pro_report`
FOR EACH ROW
BEGIN
DECLARE v_workorder_id BIGINT;
IF NEW.status = 'A' THEN
-- 更新工序缓存字段
UPDATE pro_workorder_entry pwe
SET
pwe.reported_quantity = (
SELECT IFNULL(SUM(report_quantity), 0)
FROM pro_report
WHERE work_order_entry_id = NEW.work_order_entry_id
AND status = 'A'
),
pwe.completion_rate = CASE
WHEN pwe.report_quantity > 0 THEN
ROUND(
(SELECT IFNULL(SUM(report_quantity), 0) FROM pro_report WHERE work_order_entry_id = NEW.work_order_entry_id AND status = 'A')
* 100.0 / pwe.report_quantity,
2
)
ELSE 0
END,
pwe.last_report_time = (
SELECT MAX(report_time)
FROM pro_report
WHERE work_order_entry_id = NEW.work_order_entry_id
AND status = 'A'
)
WHERE pwe.id = NEW.work_order_entry_id;
-- 获取工单ID
SELECT workorder_id INTO v_workorder_id
FROM pro_workorder_entry
WHERE id = NEW.work_order_entry_id;
-- 更新工单缓存字段
IF v_workorder_id IS NOT NULL THEN
CALL sp_update_workorder_cache(v_workorder_id);
END IF;
END IF;
END$$
-- 5.2 存储过程 - 更新工单缓存(复用逻辑)
DROP PROCEDURE IF EXISTS `sp_update_workorder_cache`$$
CREATE PROCEDURE `sp_update_workorder_cache`(IN p_workorder_id BIGINT)
BEGIN
UPDATE pro_workorder pw
SET
-- 总工序数和已完成数
pw.total_process_count = (
SELECT COUNT(*)
FROM pro_workorder_entry
WHERE workorder_id = p_workorder_id
AND type = 'report'
),
pw.completed_process_count = (
SELECT COUNT(*)
FROM pro_workorder_entry
WHERE workorder_id = p_workorder_id
AND type = 'report'
AND completion_rate >= 100
),
-- 整体完成率
pw.overall_completion_rate = (
SELECT ROUND(AVG(completion_rate), 2)
FROM pro_workorder_entry
WHERE workorder_id = p_workorder_id
AND type = 'report'
),
-- 当前工序(最后报工的工序)
pw.current_process_name = (
SELECT process_name
FROM pro_workorder_entry
WHERE workorder_id = p_workorder_id
AND type = 'report'
AND last_report_time IS NOT NULL
ORDER BY last_report_time DESC
LIMIT 1
),
pw.current_process_sort = (
SELECT process_sort
FROM pro_workorder_entry
WHERE workorder_id = p_workorder_id
AND type = 'report'
AND last_report_time IS NOT NULL
ORDER BY last_report_time DESC
LIMIT 1
),
pw.last_report_time = (
SELECT MAX(last_report_time)
FROM pro_workorder_entry
WHERE workorder_id = p_workorder_id
AND type = 'report'
)
WHERE pw.id = p_workorder_id;
END$$
DELIMITER ;
-- ========================================
-- 六、定时维护(每天凌晨执行)
-- ========================================
-- 6.1 批量更新工序缓存(按批次处理,避免锁表)
-- 每次更新1000条记录
UPDATE pro_workorder_entry pwe
INNER JOIN (
SELECT
work_order_entry_id,
SUM(report_quantity) AS total_reported,
MAX(report_time) AS last_time
FROM pro_report
WHERE status = 'A'
GROUP BY work_order_entry_id
LIMIT 1000 -- 分批处理
) r ON r.work_order_entry_id = pwe.id
SET
pwe.reported_quantity = r.total_reported,
pwe.completion_rate = ROUND(r.total_reported * 100.0 / NULLIF(pwe.report_quantity, 0), 2),
pwe.last_report_time = r.last_time
WHERE pwe.type = 'report';
-- 6.2 批量更新工单缓存(按批次处理)
-- 调用存储过程每次处理100个工单
DELIMITER $$
CREATE PROCEDURE `sp_batch_update_workorder_cache`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE v_workorder_id BIGINT;
DECLARE cur CURSOR FOR
SELECT id FROM pro_workorder WHERE status = 'A' LIMIT 100;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO v_workorder_id;
IF done THEN
LEAVE read_loop;
END IF;
CALL sp_update_workorder_cache(v_workorder_id);
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
-- 执行批量更新(在定时任务中调用)
-- CALL sp_batch_update_workorder_cache();
-- ========================================
-- 七、性能测试
-- ========================================
-- 7.1 测试工单列表查询(应 < 100ms
EXPLAIN
SELECT
pw.id,
pw.number,
pw.current_process_name,
pw.overall_completion_rate
FROM pro_workorder pw
WHERE pw.status = 'A'
AND pw.pro_status = 'B'
ORDER BY pw.create_time DESC
LIMIT 20;
-- 预期结果:
-- type: ref (使用索引)
-- key: idx_status_pro_status_create
-- rows: < 1000
-- 7.2 压力测试(模拟真实场景)
-- 查询前20条工单 + 每个工单8个工序 = 21次查询
-- 总耗时应 < 500ms
SET @start_time = NOW(3);
-- 查询工单列表
SELECT * FROM pro_workorder WHERE status = 'A' LIMIT 20;
-- 模拟查询每个工单的工序(实际由前端按需触发)
-- SELECT * FROM pro_workorder_entry WHERE workorder_id = ? AND type = 'report';
SET @end_time = NOW(3);
SELECT TIMESTAMPDIFF(MICROSECOND, @start_time, @end_time) / 1000 AS elapsed_ms;
-- ========================================
-- 八、数据一致性检查
-- ========================================
-- 8.1 检查工序缓存数据准确性
SELECT
pwe.id,
pwe.process_name,
pwe.reported_quantity AS cached,
(SELECT IFNULL(SUM(report_quantity), 0) FROM pro_report WHERE work_order_entry_id = pwe.id AND status = 'A') AS actual,
CASE
WHEN pwe.reported_quantity = (SELECT IFNULL(SUM(report_quantity), 0) FROM pro_report WHERE work_order_entry_id = pwe.id AND status = 'A')
THEN ''
ELSE ''
END AS valid
FROM pro_workorder_entry pwe
WHERE pwe.type = 'report'
LIMIT 100;
-- 8.2 检查工单缓存数据准确性
SELECT
pw.id,
pw.number,
pw.overall_completion_rate AS cached,
(SELECT ROUND(AVG(completion_rate), 2) FROM pro_workorder_entry WHERE workorder_id = pw.id AND type = 'report') AS actual
FROM pro_workorder pw
WHERE pw.status = 'A'
LIMIT 100;
-- ========================================
-- 性能保证总结
-- ========================================
/*
【数据规模】
- 10,000 工单
- 80,000 工序记录
- 100,000+ 报工记录
【性能指标】
1. 工单列表查询20条/页): < 100ms ✓
2. 工序列表查询8个工序: < 50ms ✓
3. 报工单查询20条: < 50ms ✓
4. 总响应时间: < 200ms ✓
【优化策略】
1. ✓ 工单主表缓存字段(消除子查询)
2. ✓ 工序子表缓存字段(减少实时统计)
3. ✓ 完善的索引覆盖(所有查询走索引)
4. ✓ 触发器实时更新(保证数据准确)
5. ✓ 定时任务兜底(修正异常数据)
6. ✓ 分批处理(避免长时间锁表)
【可扩展性】
- 支持10万级工单
- 支持100万级报工记录
- 查询性能稳定
- 数据准确性有保障
*/

View File

@@ -0,0 +1,121 @@
CREATE TABLE `ymes_fiih_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`fiih_object_name` varchar(50) NOT NULL COMMENT '对象体名称',
`fiih_link_id` bigint NOT NULL COMMENT '环节ID(单次环节)',
`fiih_link_name` varchar(100) NOT NULL COMMENT '环节名称',
`fiih_task_id` bigint NOT NULL COMMENT '任务ID(总体)',
`fiih_task_name` varchar(100) NOT NULL COMMENT '任务名称',
`fiih_version` varchar(50) DEFAULT NULL COMMENT '任务版本号',
`fiih_process` varchar(50) DEFAULT NULL COMMENT '任务流程记录',
`fiih_status` int NOT NULL DEFAULT 1 COMMENT '任务状态1进行中 2完成 3作废',
`fiih_start_time` datetime DEFAULT NULL COMMENT '开始时间',
`fiih_end_time` datetime DEFAULT NULL COMMENT '结束时间',
`fiih_leader_id` bigint NOT NULL COMMENT '负责人ID',
`fiih_leader_name` varchar(50) NOT NULL COMMENT '负责人姓名',
`fiih_qr_file` varchar(255) DEFAULT NULL COMMENT '二维码路径',
`fiih_rich_text` text COMMENT '说明富文本',
`fiih_info_json` text COMMENT '以上信息属性JSON',
`fiih_query_json` text COMMENT '以上信息查询属性JSON',
-- 以下为 24 个通道配置JSON
`fiih_config_ch0` text COMMENT '数据0属性JSON',
`fiih_config_ch1` text COMMENT '数据1属性JSON',
`fiih_config_ch2` text COMMENT '数据2属性JSON',
`fiih_config_ch3` text COMMENT '数据3属性JSON',
`fiih_config_ch4` text COMMENT '数据4属性JSON',
`fiih_config_ch5` text COMMENT '数据5属性JSON',
`fiih_config_ch6` text COMMENT '数据6属性JSON',
`fiih_config_ch7` text COMMENT '数据7属性JSON',
`fiih_config_ch8` text COMMENT '数据8属性JSON',
`fiih_config_ch9` text COMMENT '数据9属性JSON',
`fiih_config_ch10` text COMMENT '数据10属性JSON',
`fiih_config_ch11` text COMMENT '数据11属性JSON',
`fiih_config_ch12` text COMMENT '数据12属性JSON',
`fiih_config_ch13` text COMMENT '数据13属性JSON',
`fiih_config_ch14` text COMMENT '数据14属性JSON',
`fiih_config_ch15` text COMMENT '数据15属性JSON',
`fiih_config_ch16` text COMMENT '数据16属性JSON',
`fiih_config_ch17` text COMMENT '数据17属性JSON',
`fiih_config_ch18` text COMMENT '数据18属性JSON',
`fiih_config_ch19` text COMMENT '数据19属性JSON',
`fiih_config_ch20` text COMMENT '数据20属性JSON',
`fiih_config_ch21` text COMMENT '数据21属性JSON',
`fiih_config_ch22` text COMMENT '数据22属性JSON',
`fiih_config_ch23` text COMMENT '数据23属性JSON',
`fiih_file1` varchar(255) DEFAULT NULL COMMENT '附件1路径',
`fiih_file2` varchar(255) DEFAULT NULL COMMENT '附件2路径',
`fiih_file3` varchar(255) DEFAULT NULL COMMENT '附件3路径',
`fiih_file4` varchar(255) DEFAULT NULL COMMENT '附件4路径',
`fiih_file5` varchar(255) DEFAULT NULL COMMENT '附件5路径',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`tenant_id` bigint NOT NULL COMMENT '租户ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='FIIH质量管理配置表';
CREATE TABLE `ymes_fiih_data` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`fiih_object_name` varchar(50) NOT NULL COMMENT '对象体名称',
`fiih_link_id` bigint NOT NULL COMMENT '环节ID(单次环节)',
`fiih_link_name` varchar(100) NOT NULL COMMENT '环节名称',
`fiih_task_id` bigint NOT NULL COMMENT '任务ID(总体)',
`fiih_task_name` varchar(100) NOT NULL COMMENT '任务名称',
`fiih_version` varchar(50) DEFAULT NULL COMMENT '任务版本号',
`fiih_process` varchar(50) DEFAULT NULL COMMENT '任务流程记录',
`fiih_status` int NOT NULL DEFAULT 1 COMMENT '任务状态1进行中 2完成 3作废',
`fiih_collect_time` datetime NOT NULL COMMENT '采集时间',
`fiih_data_json` text COMMENT '原始数据JSON',
`fiih_data_analysis` text COMMENT '分析结果',
`fiih_data_complex` text COMMENT '复杂数据',
-- 以下为 24 个通道数据
`fiih_data_ch0` varchar(200) DEFAULT NULL COMMENT '数据0',
`fiih_data_ch1` varchar(200) DEFAULT NULL COMMENT '数据1',
`fiih_data_ch2` varchar(200) DEFAULT NULL COMMENT '数据2',
`fiih_data_ch3` varchar(200) DEFAULT NULL COMMENT '数据3',
`fiih_data_ch4` varchar(200) DEFAULT NULL COMMENT '数据4',
`fiih_data_ch5` varchar(200) DEFAULT NULL COMMENT '数据5',
`fiih_data_ch6` varchar(200) DEFAULT NULL COMMENT '数据6',
`fiih_data_ch7` varchar(200) DEFAULT NULL COMMENT '数据7',
`fiih_data_ch8` varchar(200) DEFAULT NULL COMMENT '数据8',
`fiih_data_ch9` varchar(200) DEFAULT NULL COMMENT '数据9',
`fiih_data_ch10` varchar(200) DEFAULT NULL COMMENT '数据10',
`fiih_data_ch11` varchar(200) DEFAULT NULL COMMENT '数据11',
`fiih_data_ch12` varchar(200) DEFAULT NULL COMMENT '数据12',
`fiih_data_ch13` varchar(200) DEFAULT NULL COMMENT '数据13',
`fiih_data_ch14` varchar(200) DEFAULT NULL COMMENT '数据14',
`fiih_data_ch15` varchar(200) DEFAULT NULL COMMENT '数据15',
`fiih_data_ch16` varchar(200) DEFAULT NULL COMMENT '数据16',
`fiih_data_ch17` varchar(200) DEFAULT NULL COMMENT '数据17',
`fiih_data_ch18` varchar(200) DEFAULT NULL COMMENT '数据18',
`fiih_data_ch19` varchar(200) DEFAULT NULL COMMENT '数据19',
`fiih_data_ch20` varchar(200) DEFAULT NULL COMMENT '数据20',
`fiih_data_ch21` varchar(200) DEFAULT NULL COMMENT '数据21',
`fiih_data_ch22` varchar(200) DEFAULT NULL COMMENT '数据22',
`fiih_data_ch23` varchar(200) DEFAULT NULL COMMENT '数据23',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`tenant_id` bigint NOT NULL COMMENT '租户ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='FIIH质量管理数据表';
CREATE TABLE `ymes_fiih_database_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`fiih_task_id` bigint NOT NULL COMMENT '任务ID',
`fiih_db_ip` varchar(100) NOT NULL COMMENT '数据库IP地址',
`fiih_db_port` int NOT NULL DEFAULT 3306 COMMENT '数据库端口号',
`fiih_db_name` varchar(100) NOT NULL COMMENT '数据库名称',
`fiih_db_user` varchar(100) NOT NULL COMMENT '数据库账号',
`fiih_db_pass` varchar(200) NOT NULL COMMENT '数据库密码',
`fiih_target_table` text NOT NULL COMMENT '目标表配置',
`fiih_remark` varchar(255) DEFAULT NULL COMMENT '备注说明',
`fiih_renewal` datetime NOT NULL COMMENT '续费日期',
`fiih_subscription_term` bigint NOT NULL COMMENT '使用周期(天)',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`tenant_id` bigint NOT NULL COMMENT '租户ID',
`tenant_name` varchar(50) DEFAULT NULL COMMENT '租户名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='FIIH质量管理数据库配置表';

View File

@@ -0,0 +1,66 @@
-- 定时自动完成功能 - 数据库表创建脚本
-- 创建日期: 2025-11-01
-- 功能说明: 为工序执行情况表添加定时自动完成功能
-- =============================================
-- 1. 创建定时自动完成配置表
CREATE TABLE IF NOT EXISTS `sys_timed_complete_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`module_name` varchar(50) NOT NULL COMMENT '模块名称sale_order/work_order等',
`enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用0=关闭1=开启)',
`day_threshold` int(11) NOT NULL DEFAULT '30' COMMENT '天数阈值',
`last_check_time` datetime DEFAULT NULL COMMENT '最后检查时间',
`last_execute_time` datetime DEFAULT NULL COMMENT '最后执行时间',
`last_execute_count` int(11) DEFAULT '0' COMMENT '最后执行处理数量',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_module_name` (`module_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定时自动完成配置表';
-- 2. 创建定时自动完成执行日志表
CREATE TABLE IF NOT EXISTS `sys_timed_complete_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`config_id` bigint(20) NOT NULL COMMENT '配置ID',
`execute_time` datetime NOT NULL COMMENT '执行时间',
`execute_type` varchar(20) NOT NULL COMMENT '执行类型AUTO=自动, MANUAL=手动)',
`total_count` int(11) NOT NULL COMMENT '检查订单总数',
`success_count` int(11) NOT NULL COMMENT '成功数量',
`fail_count` int(11) NOT NULL COMMENT '失败数量',
`execute_duration` int(11) DEFAULT NULL COMMENT '执行耗时(秒)',
`execute_result` text COMMENT '执行结果详情JSON',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_config_id` (`config_id`),
KEY `idx_execute_time` (`execute_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定时自动完成执行日志表';
-- 3. 插入默认配置数据(销售订单模块)
INSERT INTO `sys_timed_complete_config`
(`module_name`, `enabled`, `day_threshold`, `create_by`, `create_time`, `remark`)
VALUES
('sale_order', 0, 30, 'admin', NOW(), '销售订单定时自动完成配置(默认关闭)')
ON DUPLICATE KEY UPDATE
`update_by` = 'admin',
`update_time` = NOW();
-- 4. 查询验证
SELECT * FROM sys_timed_complete_config WHERE module_name = 'sale_order';
SELECT COUNT(*) as table_count FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name IN ('sys_timed_complete_config', 'sys_timed_complete_log');
-- =============================================
-- 执行完成提示
-- =============================================
-- 请在MySQL中执行此脚本
-- 执行成功后应该看到:
-- 1. sys_timed_complete_config 表已创建
-- 2. sys_timed_complete_log 表已创建
-- 3. 插入了1条默认配置数据
-- =============================================

View File

@@ -0,0 +1,3 @@
UPDATE `sys_menu`
SET `menu_name` = REPLACE(`menu_name`, 'IIOT', 'YIOT')
WHERE `menu_name` LIKE '%IIOT%';

View 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_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`;
*/

View File

@@ -0,0 +1,392 @@
-- ============================================
-- 1. 设备主表 (device) 扩展
-- ============================================
-- 新增协议类型字段
ALTER TABLE `device`
ADD COLUMN `protocol_type` ENUM('8ADPRO', '8MULTI') NOT NULL DEFAULT '8ADPRO'
COMMENT '协议类型8ADPRO=原协议8MULTI=新协议)' AFTER `device_code`;
-- 新增电流量程字段(拆分为起点和终点)
ALTER TABLE `device`
ADD COLUMN `current1_range_start` DECIMAL(10,3) DEFAULT 0
COMMENT '电流1量程起点A仅8Multi协议使用' AFTER `protocol_type`;
ALTER TABLE `device`
ADD COLUMN `current1_range_end` DECIMAL(10,3) DEFAULT NULL
COMMENT '电流1量程终点A用于0-65535映射8Multi设备必填' AFTER `current1_range_start`;
ALTER TABLE `device`
ADD COLUMN `current2_range_start` DECIMAL(10,3) DEFAULT 0
COMMENT '电流2量程起点A仅8Multi协议使用' AFTER `current1_range_end`;
ALTER TABLE `device`
ADD COLUMN `current2_range_end` DECIMAL(10,3) DEFAULT NULL
COMMENT '电流2量程终点A用于0-65535映射8Multi设备必填' AFTER `current2_range_start`;
-- 新增质量量程字段(拆分为起点和终点)
ALTER TABLE `device`
ADD COLUMN `quality1_range_start` DECIMAL(10,3) DEFAULT 0
COMMENT '质量1量程起点仅8Multi协议使用' AFTER `current2_range_end`;
ALTER TABLE `device`
ADD COLUMN `quality1_range_end` DECIMAL(10,3) DEFAULT NULL
COMMENT '质量1量程终点用于0-65535映射8Multi设备必填' AFTER `quality1_range_start`;
ALTER TABLE `device`
ADD COLUMN `quality1_unit` VARCHAR(10) DEFAULT NULL
COMMENT '质量1单位前端配置如kg/g' AFTER `quality1_range_end`;
ALTER TABLE `device`
ADD COLUMN `quality2_range_start` DECIMAL(10,3) DEFAULT 0
COMMENT '质量2量程起点仅8Multi协议使用' AFTER `quality1_unit`;
ALTER TABLE `device`
ADD COLUMN `quality2_range_end` DECIMAL(10,3) DEFAULT NULL
COMMENT '质量2量程终点用于0-65535映射8Multi设备必填' AFTER `quality2_range_start`;
ALTER TABLE `device`
ADD COLUMN `quality2_unit` VARCHAR(10) DEFAULT NULL
COMMENT '质量2单位前端配置如kg/g' AFTER `quality2_range_end`;
-- 新增电流单位字段
ALTER TABLE `device`
ADD COLUMN `current_unit` VARCHAR(10) DEFAULT 'A'
COMMENT '电流单位前端配置如A/mA' AFTER `quality2_unit`;
-- 新增计数器基准值字段(用于清零功能)
ALTER TABLE `device`
ADD COLUMN `counter1_baseline` INT DEFAULT 0
COMMENT '计数1基准值清零后的基准' AFTER `current_unit`;
ALTER TABLE `device`
ADD COLUMN `counter2_baseline` INT DEFAULT 0
COMMENT '计数2基准值清零后的基准' AFTER `counter1_baseline`;
-- 新增电压配置字段(用于功率计算)
ALTER TABLE `device`
ADD COLUMN `voltage1` DECIMAL(10,3) DEFAULT NULL
COMMENT '电压1配置V用于功率1计算前端配置' AFTER `counter2_baseline`;
ALTER TABLE `device`
ADD COLUMN `voltage2` DECIMAL(10,3) DEFAULT NULL
COMMENT '电压2配置V用于功率2计算前端配置' AFTER `voltage1`;
-- ============================================
-- 2. 设备数据表 (device_data) 扩展
-- ============================================
-- 新增电流相关字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `current1_raw` INT UNSIGNED DEFAULT NULL
COMMENT '电流1原始值0-65535仅8Multi协议使用' AFTER `current_value`;
ALTER TABLE `device_data`
ADD COLUMN `current2_raw` INT UNSIGNED DEFAULT NULL
COMMENT '电流2原始值0-65535仅8Multi协议使用' AFTER `current1_raw`;
ALTER TABLE `device_data`
ADD COLUMN `current1_value` DECIMAL(10,3) DEFAULT NULL
COMMENT '电流1实际值A经量程转换仅8Multi协议使用' AFTER `current2_raw`;
ALTER TABLE `device_data`
ADD COLUMN `current2_value` DECIMAL(10,3) DEFAULT NULL
COMMENT '电流2实际值A经量程转换仅8Multi协议使用' AFTER `current1_value`;
-- 新增质量相关字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `quality1_raw` INT UNSIGNED DEFAULT NULL
COMMENT '质量1原始值0-65535仅8Multi协议使用' AFTER `current2_value`;
ALTER TABLE `device_data`
ADD COLUMN `quality2_raw` INT UNSIGNED DEFAULT NULL
COMMENT '质量2原始值0-65535仅8Multi协议使用' AFTER `quality1_raw`;
ALTER TABLE `device_data`
ADD COLUMN `quality1_value` DECIMAL(10,3) DEFAULT NULL
COMMENT '质量1实际值kg经量程转换仅8Multi协议使用' AFTER `quality2_raw`;
ALTER TABLE `device_data`
ADD COLUMN `quality2_value` DECIMAL(10,3) DEFAULT NULL
COMMENT '质量2实际值kg经量程转换仅8Multi协议使用' AFTER `quality1_value`;
-- 新增湿度字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `humidity` DECIMAL(10,3) DEFAULT NULL
COMMENT '湿度值(%RH仅8Multi协议使用' AFTER `quality2_value`;
-- 新增工作状态字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `status_work` TINYINT(1) DEFAULT NULL
COMMENT '工作状态0=停止1=工作仅8Multi协议使用' AFTER `humidity`;
ALTER TABLE `device_data`
ADD COLUMN `status_stop` TINYINT(1) DEFAULT NULL
COMMENT '停机状态0=运行1=停机仅8Multi协议使用' AFTER `status_work`;
ALTER TABLE `device_data`
ADD COLUMN `status_fault` TINYINT(1) DEFAULT NULL
COMMENT '故障状态0=正常1=故障仅8Multi协议使用' AFTER `status_stop`;
ALTER TABLE `device_data`
ADD COLUMN `status_reset` TINYINT(1) DEFAULT NULL
COMMENT '清零状态0=正常1=清零仅8Multi协议使用' AFTER `status_fault`;
-- 新增频率字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `frequency1` INT DEFAULT NULL
COMMENT '频率1原始值仅8Multi协议使用' AFTER `status_reset`;
ALTER TABLE `device_data`
ADD COLUMN `frequency2` INT DEFAULT NULL
COMMENT '频率2原始值仅8Multi协议使用' AFTER `frequency1`;
-- 新增计数器字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `counter1_current` INT DEFAULT NULL
COMMENT '计数1当前累计值下位机传值仅8Multi协议使用' AFTER `frequency2`;
ALTER TABLE `device_data`
ADD COLUMN `counter1_delta` INT DEFAULT NULL
COMMENT '计数1增量值当前值-上次值仅8Multi协议使用' AFTER `counter1_current`;
ALTER TABLE `device_data`
ADD COLUMN `counter2_current` INT DEFAULT NULL
COMMENT '计数2当前累计值下位机传值仅8Multi协议使用' AFTER `counter1_delta`;
ALTER TABLE `device_data`
ADD COLUMN `counter2_delta` INT DEFAULT NULL
COMMENT '计数2增量值当前值-上次值仅8Multi协议使用' AFTER `counter2_current`;
-- 新增8Multi专用的计数器总计字段避免触发器冲突
ALTER TABLE `device_data`
ADD COLUMN `counter1_total_8multi` BIGINT UNSIGNED DEFAULT NULL
COMMENT '计数1累计总数8Multi专用从清零基准值开始累计' AFTER `counter2_delta`;
ALTER TABLE `device_data`
ADD COLUMN `counter2_total_8multi` BIGINT UNSIGNED DEFAULT NULL
COMMENT '计数2累计总数8Multi专用从清零基准值开始累计' AFTER `counter1_total_8multi`;
-- 新增继电器状态字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `relay_power` TINYINT(1) DEFAULT NULL
COMMENT '继电器-供电状态0=断开1=闭合仅8Multi协议使用' AFTER `counter2_total_8multi`;
ALTER TABLE `device_data`
ADD COLUMN `relay_alarm` TINYINT(1) DEFAULT NULL
COMMENT '继电器-报警状态0=正常1=报警仅8Multi协议使用' AFTER `relay_power`;
-- 新增DO输出字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `do_soft_start` TINYINT(1) DEFAULT NULL
COMMENT 'DO-软启动0=关1=开仅8Multi协议使用' AFTER `relay_alarm`;
ALTER TABLE `device_data`
ADD COLUMN `do_stop` TINYINT(1) DEFAULT NULL
COMMENT 'DO-停止0=关1=开仅8Multi协议使用' AFTER `do_soft_start`;
-- 新增从机数据字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `slave_data1` INT DEFAULT NULL
COMMENT '485从机数据1仅8Multi协议使用' AFTER `do_stop`;
ALTER TABLE `device_data`
ADD COLUMN `slave_data2` INT DEFAULT NULL
COMMENT '485从机数据2仅8Multi协议使用' AFTER `slave_data1`;
-- 新增触摸屏数据字段8Multi协议
ALTER TABLE `device_data`
ADD COLUMN `touchscreen_data` INT DEFAULT NULL
COMMENT '触摸屏数据仅8Multi协议使用' AFTER `slave_data2`;
-- ============================================
-- 3. 动态字段配置表 (device_field_header_config) 扩展
-- ============================================
-- 扩展字段枚举支持8Multi协议新增字段
ALTER TABLE `device_field_header_config`
MODIFY COLUMN `field_key` ENUM(
-- 8ADPRO协议字段
'analog1','analog2','analog3','analog4','analog5','analog6','analog7',
'digital1','digital2','digital3','digital4','digital5','digital6',
-- 8Multi协议新增字段
'current1','current2','quality1','quality2','humidity',
'frequency1','frequency2','slave_data1','slave_data2','touchscreen_data'
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
COMMENT '字段标识支持8ADPRO和8Multi协议字段';
-- ============================================
-- 4. 数据验证和索引优化
-- ============================================
-- 为protocol_type字段添加索引提升查询性能
ALTER TABLE `device`
ADD INDEX `idx_protocol_type` (`protocol_type`) USING BTREE;
-- 为device_data表的新增字段添加复合索引可选根据实际查询需求
-- ALTER TABLE `device_data`
-- ADD INDEX `idx_dd_multi_status` (`device_id`, `status_work`, `status_fault`) USING BTREE;
-- ============================================
-- 5. 数据迁移和初始化
-- ============================================
-- 确保所有现有设备的protocol_type为8ADPRO已通过DEFAULT设置
UPDATE `device` SET `protocol_type` = '8ADPRO' WHERE `protocol_type` IS NULL;
-- ============================================
-- 6. 测试数据插入示例(可选)
-- ============================================
-- 插入一个8Multi协议测试设备
-- INSERT INTO `device` (
-- `device_no`, `device_name`, `protocol_type`,
-- `current1_range`, `current2_range`,
-- `quality1_range`, `quality2_range`,
-- `calibration_offset`, `calibration_factor`,
-- `is_active`, `created_at`, `updated_at`
-- ) VALUES (
-- 9001, '8Multi测试设备1', '8MULTI',
-- 100.0, 50.0,
-- 1000.0, 500.0,
-- 0.0, 1.0,
-- 1, NOW(), NOW()
-- );
-- ============================================
-- 7. 回滚脚本(仅供紧急情况使用)
-- ============================================
/*
-- 回滚device表变更
ALTER TABLE `device` DROP COLUMN `calibration_factor`;
ALTER TABLE `device` DROP COLUMN `calibration_offset`;
ALTER TABLE `device` DROP COLUMN `quality2_range`;
ALTER TABLE `device` DROP COLUMN `quality1_range`;
ALTER TABLE `device` DROP COLUMN `current2_range`;
ALTER TABLE `device` DROP COLUMN `current1_range`;
ALTER TABLE `device` DROP COLUMN `protocol_type`;
ALTER TABLE `device` DROP INDEX `idx_protocol_type`;
-- 回滚device_data表变更
ALTER TABLE `device_data` DROP COLUMN `touchscreen_data`;
ALTER TABLE `device_data` DROP COLUMN `slave_data2`;
ALTER TABLE `device_data` DROP COLUMN `slave_data1`;
ALTER TABLE `device_data` DROP COLUMN `do_stop`;
ALTER TABLE `device_data` DROP COLUMN `do_soft_start`;
ALTER TABLE `device_data` DROP COLUMN `relay_alarm`;
ALTER TABLE `device_data` DROP COLUMN `relay_power`;
ALTER TABLE `device_data` DROP COLUMN `frequency2`;
ALTER TABLE `device_data` DROP COLUMN `frequency1`;
ALTER TABLE `device_data` DROP COLUMN `status_reset`;
ALTER TABLE `device_data` DROP COLUMN `status_fault`;
ALTER TABLE `device_data` DROP COLUMN `status_stop`;
ALTER TABLE `device_data` DROP COLUMN `status_work`;
ALTER TABLE `device_data` DROP COLUMN `humidity`;
ALTER TABLE `device_data` DROP COLUMN `quality2_value`;
ALTER TABLE `device_data` DROP COLUMN `quality1_value`;
ALTER TABLE `device_data` DROP COLUMN `quality2_raw`;
ALTER TABLE `device_data` DROP COLUMN `quality1_raw`;
ALTER TABLE `device_data` DROP COLUMN `current2_value`;
ALTER TABLE `device_data` DROP COLUMN `current1_value`;
ALTER TABLE `device_data` DROP COLUMN `current2_raw`;
ALTER TABLE `device_data` DROP COLUMN `current1_raw`;
-- 回滚device_field_header_config表变更
ALTER TABLE `device_field_header_config`
MODIFY COLUMN `field_key` ENUM(
'analog1','analog2','analog3','analog4','analog5','analog6','analog7',
'digital1','digital2','digital3','digital4','digital5','digital6'
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
COMMENT '字段标识(模拟量/开关量字段名)';
*/
-- ============================================
-- 8. 变更记录
-- ============================================
-- 版本: v2.1
-- 日期: 2025-11-15
-- 变更内容:
-- 1. device表新增16个字段协议类型、量程起点/终点配置、单位配置、计数器基准值、电压1/电压2
-- - 量程字段拆分为起点和终点,支持非零起点量程
-- - 量程转换公式: 实际值=(原始值/65535)*(量程终点-量程起点)+量程起点
-- - 移除校准参数字段(不需要校准功能)
-- - 新增单位配置字段(质量单位、电流单位)
-- - 新增计数器基准值字段(用于清零功能)
-- - 新增两个独立的电压配置字段(用于功率计算)
-- 2. device_data表新增28个字段8Multi协议专属数据
-- - 频率字段改为INT类型显示原始值
-- - 新增计数器累计值和增量值字段(支持减运算)
-- - 新增8Multi专用的计数器总计字段counter1_total_8multi/counter2_total_8multi
-- - 避免与8ADPRO的触发器冲突
-- 3. device_field_header_config表扩展field_key枚举
-- 4. 不修改现有触发器保证8ADPRO功能完全不受影响
-- 5. 新增索引优化查询性能
-- 影响范围:
-- - 不影响现有8ADPRO设备功能千万不要影响
-- - 所有新增字段均可空或有默认值
-- - 向后兼容,支持混合部署
-- 协议判断规则:
-- - device_no>200: 自动设置为8MULTI协议
-- - device_no<=200: 自动设置为8ADPRO协议
-- - 同一设备不能在两种协议之间切换
-- 协议解析规则:
-- - DI状态: U16格式取最后4位F然后取反
-- - 继电器+DO: U16格式取最后4位F然后取反与DI状态解析规则相同
-- - 设备开启判断: 电流1>=2A且电流2>=2A与运算
-- - 计数器: 下位机传累计值,后端计算增量(当前值-上次值)
-- - 频率: 显示原始值
-- - 从机数据: 直接展示原始值
-- - 功率计算: 功率1=电压1*电流1功率2=电压2*电流2分别计算两个独立的电压配置
-- 数据上报:
-- - 上报间隔: 10秒
-- - 数据去重: 相同数据全部存储
-- 状态指示灯:
-- - 工作=绿色,停机=黄色,故障=红色,报警=红色
-- ============================================
-- 6. 说明不修改触发器避免影响8ADPRO
-- ============================================
-- 现有触发器update_counter_totals_on_insert保持不变
-- 该触发器处理8ADPRO的counter1_total和counter2_total字段
-- 8Multi使用独立的counter1_total_8multi和counter2_total_8multi字段
-- 两种协议完全隔离,互不干扰
-- ============================================
-- 执行完成提示
-- ============================================
SELECT '8Multi协议数据库变更脚本执行完成' AS message,
'请检查以下内容:' AS note,
'1. device表是否新增16个字段量程、单位、计数器基准值、电压1/电压2' AS check1,
'2. device_data表是否新增28个字段含counter1_total_8multi/counter2_total_8multi' AS check2,
'3. device_field_header_config表枚举是否扩展' AS check3,
'4. 现有触发器update_counter_totals_on_insert保持不变' AS check4,
'5. 现有8ADPRO设备数据是否正常千万不要影响' AS check5;
-- ============================================
-- 9. 性能优化索引2025-11-16 新增)
-- ============================================
-- 为device_data表添加组合索引大幅提升历史数据查询性能
-- 该索引会优化以下查询场景:
-- 1. 按设备ID查询历史数据
-- 2. 按时间倒序排序(最新数据在前)
-- 3. 分页查询性能提升
-- 预期效果:查询速度从 500ms+ 降低到 10-50ms
CREATE INDEX idx_device_collected
ON device_data(device_id, collected_at DESC);
-- 验证索引创建成功
SHOW INDEX FROM device_data WHERE Key_name = 'idx_device_collected';
-- 性能分析对比(可选,用于验证优化效果)
-- EXPLAIN SELECT * FROM device_data
-- WHERE device_id = 3
-- ORDER BY collected_at DESC
-- LIMIT 10;
SELECT '性能优化索引创建完成!' AS message,
'历史数据查询性能已优化' AS note;

View File

@@ -0,0 +1,92 @@
-- ==========================================
-- 第一部分DDL - 表结构修改
-- ==========================================
-- 1. 工序路线主表 (pro_route) 扩展
-- 新增字段:制造类型(制造类型直接决定时间计算模式)
ALTER TABLE `pro_route`
ADD COLUMN `manufacture_type` VARCHAR(20) DEFAULT 'DISCRETE'
COMMENT '制造类型: DISCRETE=离散制造(顺序推进), CONTINUOUS=连续制造(同步开工)'
AFTER `status`;
-- 2. 工序路线明细表 (pro_route_process) 扩展
-- 新增字段:转运时间(离散制造)和等待开始时间(连续制造)
ALTER TABLE `pro_route_process`
ADD COLUMN `transfer_time` BIGINT DEFAULT 0
COMMENT '转运时间(秒),离散制造时从上一工序到本工序的转运耗时'
AFTER `duration`,
ADD COLUMN `wait_start_time` BIGINT DEFAULT 0
COMMENT '等待开始时间(秒),连续制造时从生产起始时间的延迟'
AFTER `transfer_time`;
-- ==========================================
-- 第二部分DML - 数据迁移
-- ==========================================
-- 3. 为现有工序路线设置默认值(离散制造)
UPDATE `pro_route`
SET `manufacture_type` = 'DISCRETE'
WHERE `manufacture_type` IS NULL;
-- 4. 为现有工序明细设置默认转运时间和等待开始时间为0
UPDATE `pro_route_process`
SET `transfer_time` = 0,
`wait_start_time` = 0
WHERE `transfer_time` IS NULL
OR `wait_start_time` IS NULL;
-- ==========================================
-- 第三部分:数据验证查询
-- ==========================================
-- 5. 验证工序路线表新增字段
SELECT
COUNT(*) AS total_routes,
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_route`;
-- 6. 验证工序明细表新增字段
SELECT
COUNT(*) AS total_processes,
SUM(CASE WHEN transfer_time = 0 THEN 1 ELSE 0 END) AS zero_transfer_time,
SUM(CASE WHEN transfer_time > 0 THEN 1 ELSE 0 END) AS has_transfer_time,
SUM(CASE WHEN wait_start_time = 0 THEN 1 ELSE 0 END) AS zero_wait_time,
SUM(CASE WHEN wait_start_time > 0 THEN 1 ELSE 0 END) AS has_wait_time,
AVG(transfer_time) AS avg_transfer_time,
MAX(transfer_time) AS max_transfer_time,
AVG(wait_start_time) AS avg_wait_time,
MAX(wait_start_time) AS max_wait_time
FROM `pro_route_process`;
-- 7. 查看表结构变化(可选)
-- SHOW FULL COLUMNS FROM `pro_route`;
-- SHOW FULL COLUMNS FROM `pro_route_process`;
-- ==========================================
-- 第四部分:回滚脚本(如需要)
-- ==========================================
/*
-- 警告:此部分仅用于回滚,会删除新增的字段和数据
-- 请谨慎执行!
-- 回滚工序路线主表
ALTER TABLE `pro_route`
DROP COLUMN `manufacture_type`;
-- 回滚工序明细表
ALTER TABLE `pro_route_process`
DROP COLUMN `transfer_time`,
DROP COLUMN `wait_start_time`;
*/
-- ==========================================
-- 执行说明
-- ==========================================
-- 1. 建议在测试环境先执行验证
-- 2. 生产环境执行前务必备份数据库
-- 3. 分步执行,每步验证无误后再继续
-- 4. 执行第三部分(验证查询)确认数据正确性
-- 5. 如需回滚,使用第五部分的回滚脚本
-- ==========================================

View File

@@ -0,0 +1,23 @@
-- 插入主表
INSERT INTO `sys_code_rule` (
`remark`, `create_by`, `create_time`, `update_by`, `update_time`,
`number`, `name`, `basic_domain`, `status`
) VALUES (
'报工质检单号生成规则BGZJ + 年月日 + 3位流水号每天重置',
'admin', NOW(), 'admin', NOW(),
'BGZJ', '报工质检编码规则', 'ReportQuality', 'active'
);
-- 获取主表ID并批量插入子表
SET @new_rule_id = LAST_INSERT_ID();
INSERT INTO `sys_code_rule_entry` (
`rule_id`, `sort`, `type_id`, `length_flow`, `max_flow`,
`date_format`, `constant_char`, `element_source_table`, `source_attribute`,
`source_value`, `code_cover`, `max_date`
) VALUES
(@new_rule_id, 1, 'B', NULL, NULL, '', 'BGZJ', NULL, NULL, NULL, '', NULL),
(@new_rule_id, 2, 'C', NULL, NULL, 'yyyyMMdd', '', NULL, NULL, NULL, '', NULL),
(@new_rule_id, 3, 'A', 3, 1, '', '', NULL, NULL, NULL, '0', NULL);
COMMIT;

View File

@@ -0,0 +1,3 @@
INSERT INTO `sys_dict_data`
VALUES (NULL, 7, '已入库', 'G', 'salorder_status', NULL, 'success', 'N', '0',
'admin', NOW(), '', NULL, '生产完成后已入库,待发货');

View File

@@ -0,0 +1,7 @@
-- 完工入库单明细表添加销售订单关联字段
ALTER TABLE `wm_manufacture_into_entry`
ADD COLUMN `sale_order_entry_id` BIGINT(20) NULL COMMENT '销售订单明细ID' AFTER `manufacture_date`;
-- 添加索引以提高查询性能
ALTER TABLE `wm_manufacture_into_entry`
ADD INDEX `idx_sale_order_entry_id` (`sale_order_entry_id`);

View File

@@ -0,0 +1,76 @@
-- 隐藏原料质检单及其子菜单 (menu_id: 2335-2340)
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2335; -- 原料质检单
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2336; -- 原料质检单查询
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2337; -- 原料质检单新增
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2338; -- 原料质检单修改
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2339; -- 原料质检单删除
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2340; -- 原料质检单导出
-- 隐藏外来品质检单及其子菜单 (menu_id: 2341-2346)
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2341; -- 外来品质检单
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2342; -- 外来品质检单查询
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2343; -- 外来品质检单新增
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2344; -- 外来品质检单修改
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2345; -- 外来品质检单删除
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2346; -- 外来品质检单导出
-- 隐藏中间产品质检单及其子菜单 (menu_id: 2347-2352)
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2347; -- 中间产品质检单
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2348; -- 中间产品质检单查询
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2349; -- 中间产品质检单新增
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2350; -- 中间产品质检单修改
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2351; -- 中间产品质检单删除
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2352; -- 中间产品质检单导出
-- 隐藏最终产品质检单及其子菜单 (menu_id: 2353-2358)
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2353; -- 最终产品质检单
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2354; -- 最终产品质检单查询
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2355; -- 最终产品质检单新增
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2356; -- 最终产品质检单修改
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2357; -- 最终产品质检单删除
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2358; -- 最终产品质检单导出
-- 隐藏定氮仪信息及其子菜单 (menu_id: 2364-2371)
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2364; -- 定氮仪信息
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2365; -- 定氮仪信息查询
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2366; -- 定氮仪信息新增
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2367; -- 定氮仪信息修改
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2368; -- 定氮仪信息删除
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2369; -- 定氮仪信息导出
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2370; -- 定氮仪信息绑定
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2371; -- 定氮仪信息解绑
-- =====================================================
-- 2. 开放基础数据中的单位转换模块(设置 visible = '0' 表示显示)
-- =====================================================
-- 显示计量单位转换及其子菜单 (menu_id: 2007-2012)
UPDATE sys_menu SET visible = '0' WHERE menu_id = 2007; -- 计量单位转换
UPDATE sys_menu SET visible = '0' WHERE menu_id = 2008; -- 计量单位转换查询
UPDATE sys_menu SET visible = '0' WHERE menu_id = 2009; -- 计量单位转换新增
UPDATE sys_menu SET visible = '0' WHERE menu_id = 2010; -- 计量单位转换修改
UPDATE sys_menu SET visible = '0' WHERE menu_id = 2011; -- 计量单位转换删除
UPDATE sys_menu SET visible = '0' WHERE menu_id = 2012; -- 计量单位转换导出
-- =====================================================
-- 3. 删除无用的FIIH对象体菜单 (menu_id: 2438-2441)
-- =====================================================
-- 先删除子菜单,再删除父菜单
DELETE FROM sys_menu WHERE menu_id = 2440; -- 环节名称
DELETE FROM sys_menu WHERE menu_id = 2441; -- 环节名称2
DELETE FROM sys_menu WHERE menu_id = 2439; -- 任务名称
DELETE FROM sys_menu WHERE menu_id = 2438; -- 对象体名称
-- =====================================================
-- 验证SQL可选执行用于检查修改结果
-- =====================================================
-- 查看隐藏的质量管理菜单
-- SELECT menu_id, menu_name, visible FROM sys_menu WHERE menu_id IN (2335,2341,2347,2353,2364);
-- 查看开放的单位转换菜单
-- SELECT menu_id, menu_name, visible FROM sys_menu WHERE menu_id = 2007;
-- 查看是否删除成功
-- SELECT * FROM sys_menu WHERE menu_id IN (2438, 2439, 2440, 2441);

View File

@@ -0,0 +1,96 @@
-- 1. device_data表新增8Multi字段逐条执行已存在会报错可忽略
ALTER TABLE `device_data` ADD COLUMN `f1` DECIMAL(10,2) DEFAULT NULL COMMENT '测频1(Hz)';
ALTER TABLE `device_data` ADD COLUMN `f2` DECIMAL(10,2) DEFAULT NULL COMMENT '测频2(Hz)';
ALTER TABLE `device_data` ADD COLUMN `cn_reg` INT DEFAULT NULL COMMENT '屏幕状态';
ALTER TABLE `device_data` ADD COLUMN `do_reg` VARCHAR(16) DEFAULT NULL COMMENT '状态输出';
ALTER TABLE `device_data` ADD COLUMN `reg1` DECIMAL(12,3) DEFAULT NULL COMMENT '从机数据1';
ALTER TABLE `device_data` ADD COLUMN `reg2` DECIMAL(12,3) DEFAULT NULL COMMENT '从机数据2';
ALTER TABLE `device_data` ADD COLUMN `tv` INT DEFAULT NULL COMMENT '显示';
ALTER TABLE `device_data` ADD COLUMN `save_flag` INT DEFAULT NULL COMMENT '边缘存储';
ALTER TABLE `device_data` ADD COLUMN `oee` INT DEFAULT NULL COMMENT 'OEE计算值';
ALTER TABLE `device_data` ADD COLUMN `dt` INT DEFAULT NULL COMMENT '采样间隔(秒)';
ALTER TABLE `device_data` ADD COLUMN `power1` DECIMAL(12,3) DEFAULT NULL COMMENT '功率1';
ALTER TABLE `device_data` ADD COLUMN `power2` DECIMAL(12,3) DEFAULT NULL COMMENT '功率2';
-- 2. 触发器8AdPro计数器累计
DROP TRIGGER IF EXISTS `update_counter_totals_on_insert`;
DELIMITER $$
CREATE TRIGGER `update_counter_totals_on_insert`
BEFORE INSERT ON `device_data`
FOR EACH ROW
BEGIN
DECLARE last_c1 BIGINT UNSIGNED DEFAULT 0;
DECLARE last_c2 BIGINT UNSIGNED DEFAULT 0;
DECLARE proto VARCHAR(16) DEFAULT '8ADPRO';
SELECT IFNULL(protocol_type, '8ADPRO') INTO proto FROM device WHERE id = NEW.device_id LIMIT 1;
IF proto = '8ADPRO' OR proto IS NULL THEN
SELECT IFNULL(counter1_total, 0), IFNULL(counter2_total, 0) INTO last_c1, last_c2
FROM device_data WHERE device_id = NEW.device_id ORDER BY collected_at DESC LIMIT 1;
SET NEW.counter1_total = IF(NEW.counter1 > 0, last_c1 + NEW.counter1, last_c1);
SET NEW.counter2_total = IF(NEW.counter2 > 0, last_c2 + NEW.counter2, last_c2);
END IF;
END$$
DELIMITER ;
-- =====================================================
-- 3. cn_reg 屏幕状态值说明(下位机已处理,直接使用)
-- =====================================================
-- cn_reg状态值定义
-- 0 = 计划停机
-- 1 = 正常工作
-- 2 = 待机
-- 3 = 故障
-- 4 = 在修
-- 5 = 缺人
-- 6 = 缺料
-- 7 = 清零
-- 注8Multi协议使用cn_reg替代status_work/status_stop/status_fault等字段
-- =====================================================
-- 4. 更新cn_reg字段注释可选
-- =====================================================
ALTER TABLE `device_data` MODIFY COLUMN `cn_reg` INT DEFAULT NULL COMMENT '屏幕状态(0计划停机/1正常工作/2待机/3故障/4在修/5缺人/6缺料/7清零)';
-- =====================================================
-- 5. 8Multi V2.8 废弃字段说明(保留兼容,不删除)
-- =====================================================
-- 以下字段在8Multi V2.8协议中不再使用但保留以兼容8ADPRO和旧版本
--
-- | 废弃字段 | 替代方案 | 说明 |
-- |-----------------------------|--------------------|-----------------------|
-- | current1_raw, current2_raw | current1_value | 下位机已换算,直接传实际值 |
-- | quality1_raw, quality2_raw | quality1_value | 下位机已换算,直接传实际值 |
-- | status_work/stop/fault/reset| cn_reg (0-7) | 统一用屏幕状态 |
-- | frequency1, frequency2 | f1, f2 | 使用新测频字段 |
-- | counter1_current/delta | counter1 | 直接使用计数增量 |
-- | counter2_current/delta | counter2 | 直接使用计数增量 |
-- | counter1_total_8multi | counter1_total | 统一用counter1_total |
-- | counter2_total_8multi | counter2_total | 统一用counter2_total |
-- | relay_power/alarm | do_reg | 统一用状态输出 |
-- | do_soft_start, do_stop | do_reg | 统一用状态输出 |
-- | slave_data1, slave_data2 | reg1, reg2 | 使用新从机数据字段 |
-- | touchscreen_data | tv | 使用新显示字段 |
-- =====================================================
-- 6. 8Multi卡号ID格式说明
-- =====================================================
-- 卡号ID共12位: 品牌1位 + 年份1位 + 月日4位 + 用户号2位 + 序号4位
-- 示例: 101126010002
-- 1 - 品牌前缀
-- 0 - 年份(0=2025, 1=2026, 2=2027...)
-- 1126 - 月日(11月26日)
-- 01 - 用户号
-- 0002 - 设备序号后端使用后4位作为设备号
-- =====================================================
-- 7. 设备扩展字段(设备位置、品牌、型号、车间、工段)
-- =====================================================
ALTER TABLE `device` ADD COLUMN `location` VARCHAR(255) DEFAULT NULL COMMENT '设备位置';
ALTER TABLE `device` ADD COLUMN `brand` VARCHAR(128) DEFAULT NULL COMMENT '设备品牌';
ALTER TABLE `device` ADD COLUMN `model` VARCHAR(128) DEFAULT NULL COMMENT '设备型号';
ALTER TABLE `device` ADD COLUMN `workshop_id` BIGINT DEFAULT NULL COMMENT '车间ID(关联md_workshop)';
ALTER TABLE `device` ADD COLUMN `section` VARCHAR(64) DEFAULT NULL COMMENT '工段(关联pro_process)';

View File

@@ -0,0 +1,13 @@
-- 新版BOM按钮权限 (父菜单ID: 2379)
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('BOM查询', 2379, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'masterdata:newBom:query', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('BOM新增', 2379, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'masterdata:newBom:add', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('BOM修改', 2379, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'masterdata:newBom:edit', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('BOM删除', 2379, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'masterdata:newBom:remove', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('BOM复制', 2379, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'masterdata:newBom:copy', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('BOM导出', 2379, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'masterdata:newBom:export', '#', 'admin', NOW(), '', NULL, '');

View File

@@ -0,0 +1,16 @@
-- 1. 先修改字段精度(支持小数)
ALTER TABLE pro_workorder_entry
MODIFY COLUMN report_quantity DECIMAL(10, 3) NULL DEFAULT NULL COMMENT '报工数量';
-- 2. 从 pro_report 表汇总报工数量,更新回 pro_workorder_entry
UPDATE pro_workorder_entry pwe
INNER JOIN (
SELECT
work_order_entry_id,
SUM(report_quantity) AS total_report_qty
FROM pro_report
WHERE work_order_entry_id IS NOT NULL
GROUP BY work_order_entry_id
) pr ON pwe.id = pr.work_order_entry_id
SET pwe.report_quantity = pr.total_report_qty
WHERE pwe.type = 'report';

View File

@@ -0,0 +1,28 @@
-- 1. 为维修单主表添加富文本内容字段(维修描述)
ALTER TABLE `dm_repair_order`
ADD COLUMN `rich_text_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '富文本内容(维修描述)' AFTER `remark`;
-- 2. 为维修单明细表添加富文本内容字段放在fault_name后面
ALTER TABLE `dm_repair_order_entry`
ADD COLUMN `rich_text_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '富文本内容' AFTER `fault_name`;
-- 2. 创建维修单附件表
CREATE TABLE `dm_repair_order_attachment` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`repair_order_id` bigint NOT NULL COMMENT '维修单ID',
`entry_id` bigint DEFAULT NULL COMMENT '明细ID可为空表示主单附件',
`file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件名称',
`file_path` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径',
`file_size` bigint NOT NULL COMMENT '文件大小(字节)',
`file_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件类型',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '状态0正常 1删除',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_repair_order_id` (`repair_order_id`) USING BTREE,
KEY `idx_entry_id` (`entry_id`) USING BTREE,
KEY `idx_status` (`status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='维修单附件表';

View File

@@ -0,0 +1,48 @@
-- 1. 增加周/月计划相关字段
ALTER TABLE pro_plan
ADD COLUMN schedule_cycle VARCHAR(10) DEFAULT NULL COMMENT '计划周期: week=周计划, month=月计划' AFTER plan_type,
ADD COLUMN plan_year INT DEFAULT NULL COMMENT '计划年份' AFTER schedule_cycle,
ADD COLUMN week_number INT DEFAULT NULL COMMENT '周号(1-53)' AFTER plan_year,
ADD COLUMN month_number INT DEFAULT NULL COMMENT '月份(1-12)' AFTER week_number,
ADD COLUMN total_quantity DECIMAL(18,2) DEFAULT 0 COMMENT '计划总产量' AFTER month_number,
ADD COLUMN completed_quantity DECIMAL(18,2) DEFAULT 0 COMMENT '已完成产量' AFTER total_quantity;
-- 2. 增加索引
ALTER TABLE pro_plan
ADD INDEX idx_schedule_cycle (schedule_cycle),
ADD INDEX idx_year_week (plan_year, week_number),
ADD INDEX idx_year_month (plan_year, month_number);
-- 3. 增加计划周期字典数据
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
VALUES ('计划周期', 'pro_schedule_cycle', '0', 'admin', NOW(), '生产计划周期类型');
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, '周计划', 'week', 'pro_schedule_cycle', '', 'primary', 'N', '0', 'admin', NOW(), '按周制定的生产计划'),
(2, '月计划', 'month', 'pro_schedule_cycle', '', 'success', 'N', '0', 'admin', NOW(), '按月制定的生产计划');
-- 4. 更新计划类型字典,增加"生产计划"类型
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 (8, '生产计划', 'production', 'pro_plan_type', '', 'warning', 'N', '0', 'admin', NOW(), '周/月生产计划');
-- 5. 新增"周/月计划"菜单 (parent_id=2049 为"计划表"菜单)
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES ('周/月产量计划', 2049, 2, 'schedule', 'mes/production/plan/schedule', NULL, 1, 0, 'C', '0', '0', 'production:plan:list', '#', 'admin', NOW(), '生产计划周/月视图');
-- 6. 增加产品关联字段(用于动态计算进度)
ALTER TABLE pro_plan
ADD COLUMN material_id BIGINT DEFAULT NULL COMMENT '产品ID' AFTER completed_quantity,
ADD COLUMN material_name VARCHAR(200) DEFAULT NULL COMMENT '产品名称' AFTER material_id;
-- 7. 在 pro_plan 表中添加负责人员字段
ALTER TABLE pro_plan ADD COLUMN assigned_user_ids VARCHAR(500) COMMENT '负责人员多个用逗号分隔存储用户ID';
-- 8. 增加计划时间范围字段
ALTER TABLE pro_plan
ADD COLUMN start_time DATETIME DEFAULT NULL COMMENT '计划开始时间' AFTER assigned_user_ids,
ADD COLUMN end_time DATETIME DEFAULT NULL COMMENT '计划结束时间' AFTER start_time;
-- 9. 添加时间范围索引以优化查询性能
ALTER TABLE pro_plan
ADD INDEX idx_time_range (start_time, end_time);

View File

@@ -0,0 +1,34 @@
-- 单一质检配置表
CREATE TABLE IF NOT EXISTS `pro_quality_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`field_name` varchar(100) NOT NULL COMMENT '字段名称',
`field_label` varchar(100) NOT NULL COMMENT '字段标签(显示名称)',
`field_type` varchar(20) DEFAULT 'text' COMMENT '字段类型text/number/date/select',
`field_options` varchar(500) DEFAULT NULL COMMENT '字段选项select类型时使用逗号分隔',
`sort` int(11) DEFAULT 0 COMMENT '排序',
`status` char(1) DEFAULT '0' COMMENT '状态0正常 1停用',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_field_name` (`field_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='单一质检配置表';
-- 单一质检数据表
CREATE TABLE IF NOT EXISTS `pro_quality_data` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`work_order_id` bigint(20) NOT NULL COMMENT '工单ID',
`work_order_entry_id` bigint(20) DEFAULT NULL COMMENT '工单分录ID工序ID',
`field_name` varchar(100) NOT NULL COMMENT '字段名称',
`field_value` varchar(500) DEFAULT NULL COMMENT '字段值',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_work_order_id` (`work_order_id`),
KEY `idx_work_order_entry_id` (`work_order_entry_id`),
KEY `idx_field_name` (`field_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='单一质检数据表';

View File

@@ -0,0 +1,66 @@
DROP TABLE IF EXISTS `mes_collection_data`;
CREATE TABLE IF NOT EXISTS `mes_collection_data` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '收集数据ID',
`device_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备编号',
`collect_time` datetime NOT NULL COMMENT '收集时间',
`weight` decimal(24, 6) NOT NULL COMMENT '重量',
`product_id` bigint NOT NULL COMMENT '物品ID',
`product_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物品名称',
`product_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物品编码',
`tare_weight` decimal(24, 6) NULL DEFAULT 0.000000 COMMENT '去皮重量',
`net_weight` decimal(24, 6) NULL DEFAULT NULL COMMENT '净重(重量-去皮)',
`cumulative_weight` decimal(24, 6) NOT NULL DEFAULT 0.000000 COMMENT '累计重量',
`cumulative_count` bigint NOT NULL DEFAULT 0 COMMENT '累计次数',
`remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`order_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '订单号',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_device_code`(`device_code`) USING BTREE COMMENT '设备编号索引',
INDEX `idx_product_id`(`product_id`) USING BTREE COMMENT '物品ID索引',
INDEX `idx_collect_time`(`collect_time`) USING BTREE COMMENT '收集时间索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '收集数据表' ROW_FORMAT = DYNAMIC;
-- 2. 插入一级菜单:数据采集(如果不存在)
-- 注意:请根据实际情况调整 menu_id确保不与现有菜单ID冲突
-- 查询当前最大菜单ID: SELECT MAX(menu_id) FROM sys_menu;
-- 假设一级菜单ID为 3000请根据实际情况调整
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ( '磅秤采集', 0, 10, 'collection', NULL, NULL, 1, 0, 'M', '0', '0', '', 'monitor', 'admin', NOW(), '', NULL, '数据采集目录');
-- 获取刚插入的菜单ID
SET @menu_id = LAST_INSERT_ID();
-- 3. 插入二级菜单:收集数据
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ( '磅秤采集', @menu_id, 1, 'data', 'mes/collection/data/index', NULL, 1, 0, 'C', '0', '0', 'collection:data:list', 'list', 'admin', NOW(), '', NULL, '收集数据菜单');
-- 4. 插入按钮权限
-- 收集数据查询
-- 获取刚插入的菜单ID
SET @menu_id = LAST_INSERT_ID();
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ( '采集数据查询', @menu_id, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'collection:data:query', '#', 'admin', NOW(), '', NULL, '');
-- 收集数据新增
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ( '采集数据新增', @menu_id, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'collection:data:add', '#', 'admin', NOW(), '', NULL, '');
-- 收集数据修改
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('采集数据修改', @menu_id, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'collection:data:edit', '#', 'admin', NOW(), '', NULL, '');
-- 收集数据删除
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ( '采集数据删除', @menu_id, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'collection:data:remove', '#', 'admin', NOW(), '', NULL, '');
-- 收集数据导出
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('采集数据导出', @menu_id, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'collection:data:export', '#', 'admin', NOW(), '', NULL, '');

View File

@@ -0,0 +1,4 @@
-- 生产计划表添加来源关联字段
ALTER TABLE `pro_plan` ADD COLUMN `plan_source_type` varchar(20) DEFAULT NULL COMMENT '来源类型order=销售订单, plan=销售计划';
ALTER TABLE `pro_plan` ADD COLUMN `plan_source_id` bigint(20) DEFAULT NULL COMMENT '来源ID';
ALTER TABLE `pro_plan` ADD COLUMN `plan_source_number` varchar(64) DEFAULT NULL COMMENT '来源编号';

View File

@@ -0,0 +1,5 @@
-- 设备维修单明细表添加字段
ALTER TABLE `dm_repair_order_entry` ADD COLUMN `fault_phenomenon` varchar(500) DEFAULT NULL COMMENT '故障现象';
ALTER TABLE `dm_repair_order_entry` ADD COLUMN `expert_suggestion` varchar(500) DEFAULT NULL COMMENT '专家建议';
ALTER TABLE `dm_repair_order_entry` ADD COLUMN `spare_parts_usage` varchar(500) DEFAULT NULL COMMENT '备品备件使用';
ALTER TABLE `dm_repair_order_entry` ADD COLUMN `maintenance_conclusion` varchar(500) DEFAULT NULL COMMENT '维修结论';

View File

@@ -0,0 +1,17 @@
ALTER TABLE `wm_production_pick`
ADD COLUMN `work_order_id` bigint NULL DEFAULT NULL COMMENT '工单ID用于连续物料关联' AFTER `work_order_entry_id`;
ALTER TABLE `wm_production_pick`
ADD INDEX `idx_work_order_id`(`work_order_id`) USING BTREE;
-- 1. 隐藏"生产计划表"菜单 (menu_id=2413)
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2413;
-- 2. 把"周/月产量计划"改名为"生产计划"并设置排序为0
UPDATE sys_menu SET menu_name = '生产计划', order_num = 0 WHERE menu_name = '周/月产量计划';
-- 3. 隐藏"产线模型"菜单 (menu_id=2359)
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2359;
-- 4. 隐藏"车间设备"菜单 (menu_id=2363)
UPDATE sys_menu SET visible = '1' WHERE menu_id = 2363;

View File

@@ -0,0 +1,7 @@
-- 1. 增加年计划字典数据
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 (0, '年计划', 'year', 'pro_schedule_cycle', '', 'danger', 'N', '0', 'admin', NOW(), '按年制定的生产计划');
-- 2. 增加计划成本金额和质检等级字段
ALTER TABLE pro_plan ADD COLUMN plan_cost decimal(19,4) COMMENT '计划成本金额';
ALTER TABLE pro_plan ADD COLUMN quality_level_id bigint(20) COMMENT '计划质检等级ID';

View File

@@ -0,0 +1 @@
ALTER TABLE pro_plan MODIFY COLUMN plan_type VARCHAR(20) NULL;

View File

@@ -0,0 +1,103 @@
-- 1. 创建报警记录表
DROP TABLE IF EXISTS `mes_device_fault_record`;
CREATE TABLE IF NOT EXISTS `mes_device_fault_record` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '报警记录ID',
`device_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备名称',
`sensor_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '传感器名/通道',
`device_status` tinyint NOT NULL DEFAULT 2 COMMENT '设备状态0-停机1-待机2-生产',
`nominal_value` decimal(10, 2) NULL DEFAULT NULL COMMENT '标称值(标准/理想值)',
`normal_min` decimal(10, 2) NOT NULL COMMENT '正常范围下限(下限)',
`normal_max` decimal(10, 2) NOT NULL COMMENT '正常范围上限(上限)',
`lower_lower_limit` decimal(10, 2) NULL DEFAULT NULL COMMENT '下下限(严重超限下限)',
`upper_upper_limit` decimal(10, 2) NULL DEFAULT NULL COMMENT '上上限(严重超限上限)',
`actual_value` decimal(10, 2) NOT NULL COMMENT '实测值',
`deviation_rate` decimal(10, 2) NULL COMMENT '偏离度(%)',
`fault_level` tinyint NULL DEFAULT 1 COMMENT '故障等级1-轻微2-一般3-严重',
`fault_tag` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '故障标注/描述',
`analysis_type` tinyint NOT NULL DEFAULT 1 COMMENT '分析类型1-瞬态2-趋势',
`fault_time` datetime NOT NULL COMMENT '故障发生时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除0-未删除1-已删除',
`tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_device_name`(`device_name`) USING BTREE COMMENT '设备名称索引',
INDEX `idx_sensor_name`(`sensor_name`) USING BTREE COMMENT '传感器名索引',
INDEX `idx_fault_time`(`fault_time`) USING BTREE COMMENT '故障时间索引',
INDEX `idx_device_status`(`device_status`) USING BTREE COMMENT '设备状态索引',
INDEX `idx_fault_level`(`fault_level`) USING BTREE COMMENT '故障等级索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '设备报警记录表' ROW_FORMAT = DYNAMIC;
-- 2. 插入二级菜单报警记录父菜单为设备管理menu_id=2168
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('设备报警记录', 2168, 10, 'faultRecord', 'mes/device/faultRecord/index', NULL, 1, 0, 'C', '0', '0', 'device:faultRecord:list', 'log', 'admin', NOW(), '', NULL, '报警记录菜单');
-- 获取刚插入的菜单ID
SET @menu_id = LAST_INSERT_ID();
-- 3. 插入按钮权限
-- 报警记录查询
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('报警记录查询', @menu_id, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'device:faultRecord:query', '#', 'admin', NOW(), '', NULL, '');
-- 报警记录导出
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('报警记录导出', @menu_id, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'device:faultRecord:export', '#', 'admin', NOW(), '', NULL, '');
-- 注意:趋势分析功能已合并到报警记录页面中,使用圆滑折线图展示
-- 4. 添加门限类型字段如果表已存在执行此ALTER语句
ALTER TABLE `mes_device_fault_record` ADD COLUMN `threshold_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '门限类型(如:温度、压力、流量等)' AFTER `upper_upper_limit`;
-- 5.门限可为空
ALTER TABLE mes_device_fault_record MODIFY COLUMN normal_min decimal(10,2) NULL;
ALTER TABLE mes_device_fault_record MODIFY COLUMN normal_max decimal(10,2) NULL;
-- 6.修改fault_level字段类型为varchar如果表已存在执行此ALTER语句
ALTER TABLE `mes_device_fault_record` MODIFY COLUMN `fault_level` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报警类型:超上限、超上上限、超下限、超下下限、其他';
-- =============================================
-- LabVIEW写入示例供LabVIEW端参考
-- =============================================
-- 发酵罐1号 温度传感器-CH01 跨月测试数据跨度6个月门限类型和门限值会变化
-- INSERT INTO `mes_device_fault_record`
-- (`device_name`, `sensor_name`, `device_status`, `nominal_value`, `normal_min`, `normal_max`, `lower_lower_limit`, `upper_upper_limit`, `threshold_type`, `actual_value`, `deviation_rate`, `fault_level`, `fault_tag`, `analysis_type`, `fault_time`, `create_by`, `create_time`)
-- VALUES
-- ('发酵罐1号', '温度传感器-CH01', 2, 25.00, 20.00, 30.00, 15.00, 35.00, '温度℃', 31.50, 26.00, 2, '7月温度偏高', 1, '2025-07-08 14:22:35', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 26.00, 21.00, 31.00, 16.00, 36.00, '温度℃', 36.80, 41.54, 3, '8月高温报警门限调整后', 1, '2025-08-15 09:45:18', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 24.00, 19.00, 29.00, 14.00, 34.00, '温度℃', 18.20, 24.17, 2, '9月温度偏低门限下调', 1, '2025-09-03 16:33:42', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 25.00, 20.00, 30.00, 15.00, 35.00, '温度℃', 32.50, 30.00, 2, '10月温度超上限', 1, '2025-10-22 11:08:27', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 23.00, 18.00, 28.00, 13.00, 33.00, '温度℃', 12.50, 45.65, 3, '11月低温严重报警冬季门限', 1, '2025-11-18 08:55:13', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 22.00, 17.00, 27.00, 12.00, 32.00, '温度℃', 28.80, 30.91, 2, '12月温度超上限冬季门限', 1, '2025-12-10 15:42:56', 'labview', NOW());
-- =============================================
-- 字段说明供LabVIEW端参考
-- =============================================
-- device_name : 设备名称必填发酵罐1号、搅拌器1号、进料泵1号
-- sensor_name : 传感器名/通道(必填)如:温度传感器-CH01、压力传感器-CH02
-- device_status : 设备状态必填0-停机1-待机2-生产
-- nominal_value : 标称值(选填)标准/理想值可为NULL
-- normal_min : 正常范围下限(必填)
-- normal_max : 正常范围上限(必填)
-- lower_lower_limit : 下下限(选填)严重超限下限
-- upper_upper_limit : 上上限(选填)严重超限上限
-- threshold_type : 门限类型选填温度℃、压力MPa、流量L/min等
-- actual_value : 实测值(必填)
-- deviation_rate : 偏离度%(必填)计算公式:|actual_value - nominal_value| / nominal_value * 100
-- fault_level : 报警类型(选填)超上限、超上上限、超下限、超下下限、其他
-- fault_tag : 报警标注(选填)描述报警原因
-- analysis_type : 分析类型必填1-瞬态2-趋势
-- fault_time : 报警发生时间必填格式YYYY-MM-DD HH:MM:SS
-- create_by : 创建者(必填)固定为 'labview'
-- create_time : 创建时间(必填)使用 NOW() 获取当前时间
--
-- 报警类型说明:
-- 超上限:实测值超过正常范围上限
-- 超上上限:实测值超过严重范围上限
-- 超下限:实测值低于正常范围下限
-- 超下下限:实测值低于严重范围下限
-- 其他:其他类型的报警

View File

@@ -0,0 +1,19 @@
-- =============================================
-- YIOT数据趋势分析菜单配置
-- 作者: jinzhong
-- 日期: 2025-12-17
-- 说明: 在YIOT模块下添加数据趋势分析二级菜单
-- =============================================
-- 查询YIOT父菜单ID假设IoT设备管理的菜单ID为2380
-- 如果父菜单ID不同请根据实际情况修改parent_id
-- 插入数据趋势分析菜单
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES ('数据趋势分析', 2380, 10, 'trend', 'mes/iot/trend/index', 1, 0, 'C', '0', '0', 'mes:iot:query', 'data-line', 'admin', NOW(), '', NULL, 'IOT数据趋势分析支持多设备多参数比较');
-- 如果需要查询父菜单ID可以使用以下SQL
-- SELECT menu_id, menu_name, path FROM sys_menu WHERE path LIKE '%iot%' AND menu_type = 'M';
-- 如果需要删除该菜单(回滚用):
-- DELETE FROM sys_menu WHERE menu_name = '数据趋势分析' AND component = 'mes/iot/trend/index';

View File

@@ -0,0 +1,36 @@
-- 质检管理优化:将"质检原因"改为"质检标准"
-- 1. 更新菜单名称(只改显示名称,不改权限标识)
UPDATE sys_menu SET menu_name = '质检标准' WHERE menu_id = 2136;
-- 2. 更新字典类型名称
UPDATE sys_dict_type SET dict_name = '质检标准类别' WHERE dict_type = 'qc_reason_class';
-- 3. 更新代码生成表注释
UPDATE gen_table SET table_comment = '质检标准', function_name = '质检标准' WHERE table_name = 'qc_reason';
-- 4. 更新表注释
ALTER TABLE qc_reason COMMENT = '质检标准';
-- ========================================
-- 质检分析菜单新增
-- ========================================
-- 5. 新增质检分析菜单(父菜单为质量管理,menu_id=2123)
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('质检分析', 2123, 7, 'analysis', 'mes/quality/analysis/index', NULL, 1, 0, 'C', '0', '0', 'quality:analysis:list', '#', 'admin', NOW(), '', NULL, '质检分析菜单');
-- 获取刚插入的菜单ID
SET @menu_id = LAST_INSERT_ID();
-- 6. 质检分析查询
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('质检分析查询', @menu_id, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'quality:analysis:query', '#', 'admin', NOW(), '', NULL, '');
-- 7. 质检分析导出
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('质检分析导出', @menu_id, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'quality:analysis:export', '#', 'admin', NOW(), '', NULL, '');
-- 8. 质检分析AI分析
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('质检分析AI分析', @menu_id, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'quality:analysis:aiAnalysis', '#', 'admin', NOW(), '', NULL, '');

View File

@@ -0,0 +1,2 @@
-- 1. 为设备表添加imagePath字段(设备图片路径)
ALTER TABLE dm_equipment ADD COLUMN `image_path` varchar(500) DEFAULT NULL COMMENT '设备图片路径' AFTER `iot_sn`;

View File

@@ -0,0 +1,49 @@
-- =====================================================
-- 生产计划、FIIH质量管理优化 v1.0.59
-- 作者: 周启威
-- 日期: 2025-12-28
-- =====================================================
-- -----------------------------------------------------
-- 1. 设备表增加产能字段(吨/天)
-- -----------------------------------------------------
ALTER TABLE `dm_equipment`
ADD COLUMN `capacity` decimal(10,2) DEFAULT NULL COMMENT '产能(吨/天)' AFTER `iot_sn`;
-- -----------------------------------------------------
-- 2. 供应商表增加供货时间字段(天)
-- -----------------------------------------------------
ALTER TABLE `md_supplier`
ADD COLUMN `delivery_days` int DEFAULT NULL COMMENT '供货时间(天)' AFTER `credit_code`;
-- -----------------------------------------------------
-- 3. 工序表增加设备关联字段(支持多设备)
-- -----------------------------------------------------
ALTER TABLE `pro_process`
ADD COLUMN `equipment_ids` varchar(500) DEFAULT NULL COMMENT '设备ID多个用逗号分隔' AFTER `labor_cost`,
ADD COLUMN `equipment_names` varchar(500) DEFAULT NULL COMMENT '设备名称(多个用逗号分隔)' AFTER `equipment_ids`;
-- -----------------------------------------------------
-- 4. 生产计划表增加工序路线、休息日和计划分析字段
-- -----------------------------------------------------
ALTER TABLE `pro_plan`
ADD COLUMN `route_id` bigint DEFAULT NULL COMMENT '工序路线ID' AFTER `end_time`,
ADD COLUMN `route_name` varchar(64) DEFAULT NULL COMMENT '工序路线名称' AFTER `route_id`,
ADD COLUMN `rest_days` varchar(20) DEFAULT NULL COMMENT '休息日配置sat=周六,sun=周日,多个用逗号分隔)' AFTER `route_name`,
ADD COLUMN `plan_analysis` text DEFAULT NULL COMMENT '计划分析结果' AFTER `rest_days`;
-- 添加工序路线索引
ALTER TABLE `pro_plan` ADD INDEX `idx_route_id` (`route_id`);
-- -----------------------------------------------------
-- 5. FIIH质量管理数据表增加附件字段
-- -----------------------------------------------------
ALTER TABLE `ymes_fiih_data`
ADD COLUMN `attachment` varchar(500) DEFAULT NULL COMMENT '附件路径(多个用逗号分隔)' AFTER `fiih_data_ch23`;
-- -----------------------------------------------------
-- 6. 供应商表增加收款信息和开票信息字段
-- -----------------------------------------------------
ALTER TABLE `md_supplier`
ADD COLUMN `payment_info` varchar(1000) DEFAULT NULL COMMENT '收款信息' AFTER `delivery_days`,
ADD COLUMN `invoice_info` varchar(1000) DEFAULT NULL COMMENT '开票信息' AFTER `payment_info`;

View File

@@ -0,0 +1 @@
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('设备列表', 2168, 0, 'equipmentlb', 'mes/equipment/equipment/indexLibiao', '', 1, 0, 'C', '0', '0', '', '#', 'YAVII', '2025-12-31 15:04:36', 'YAVII', '2025-12-31 16:23:39', '');

View File

@@ -0,0 +1,14 @@
-- =============================================
-- 设备维修计划优化 v1.0.64
-- 作者: 周启威
-- 日期: 2026-01-04
-- 描述: 新增设备点位字典类型,设备项目表增加字段
-- =============================================
-- 1. 新增字典类型:设备点位
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('设备点位', 'equipment_point', '0', 'admin', NOW(), '设备点位字典');
-- 2. 设备项目表增加设备ID和设备点位字段
ALTER TABLE `dm_inspection_item` ADD COLUMN `equipment_id` bigint DEFAULT NULL COMMENT '设备ID' AFTER `status`;
ALTER TABLE `dm_inspection_item` ADD COLUMN `equipment_point` varchar(100) DEFAULT NULL COMMENT '设备点位' AFTER `equipment_id`;

View File

@@ -0,0 +1,22 @@
-- =============================================
-- 领料单编码规则修改
-- 原格式SCLL + 6位流水号如 SCLL000659
-- 新格式SCLL + 8位日期 + 3位流水号如 SCLL20260107001
-- 不同日期流水号从001开始
-- =============================================
-- 删除旧的领料单编码规则子项
DELETE FROM sys_code_rule_entry WHERE rule_id = 10;
-- 插入新的编码规则子项
-- 第1项常量 SCLLsort=1
INSERT INTO sys_code_rule_entry (rule_id, sort, type_id, length_flow, max_flow, date_format, constant_char, element_source_table, source_attribute, source_value, code_cover, max_date)
VALUES (10, 1, 'B', 0, 0, '', 'SCLL', '', '', NULL, '', NULL);
-- 第2项日期 yyyyMMddsort=28位日期
INSERT INTO sys_code_rule_entry (rule_id, sort, type_id, length_flow, max_flow, date_format, constant_char, element_source_table, source_attribute, source_value, code_cover, max_date)
VALUES (10, 2, 'C', 0, 0, 'yyyyMMdd', '', '', '', NULL, '', NULL);
-- 第3项流水号sort=33位用0补位按日期重置从001开始
INSERT INTO sys_code_rule_entry (rule_id, sort, type_id, length_flow, max_flow, date_format, constant_char, element_source_table, source_attribute, source_value, code_cover, max_date)
VALUES (10, 3, 'A', 3, 1, '', '', '', '', NULL, '0', NULL);

View File

@@ -0,0 +1,41 @@
-- 1. 供应商
ALTER TABLE `dm_equipment` ADD COLUMN `supplier` VARCHAR(50) DEFAULT NULL COMMENT '供应商' AFTER `brand`;
-- 2. 设备版本号
ALTER TABLE `dm_equipment` ADD COLUMN `device_version` VARCHAR(50) DEFAULT NULL COMMENT '设备版本号' AFTER `specification`;
-- 3. 设备别称
ALTER TABLE `dm_equipment` ADD COLUMN `device_alias` VARCHAR(50) DEFAULT NULL COMMENT '设备别称' AFTER `name`;
-- 4. 通信协议
ALTER TABLE `dm_equipment` ADD COLUMN `protocol` VARCHAR(200) DEFAULT NULL COMMENT '通信协议' AFTER `iot_sn`;
-- 5. 功能描述
ALTER TABLE `dm_equipment` ADD COLUMN `function_desc` TEXT DEFAULT NULL COMMENT '功能描述' AFTER `protocol`;
-- 6. 维护人
ALTER TABLE `dm_equipment` ADD COLUMN `maintainer` VARCHAR(20) DEFAULT NULL COMMENT '维护人' AFTER `function_desc`;
-- 7. 联系电话
ALTER TABLE `dm_equipment` ADD COLUMN `phone` VARCHAR(20) DEFAULT NULL COMMENT '联系电话' AFTER `maintainer`;
-- 8. 启用时间
ALTER TABLE `dm_equipment` ADD COLUMN `start_time` DATETIME DEFAULT NULL COMMENT '启用时间' AFTER `phone`;
-- 9. 上次检修时间
ALTER TABLE `dm_equipment` ADD COLUMN `maintain_time` DATETIME DEFAULT NULL COMMENT '上次检修时间' AFTER `start_time`;
-- 10. 检修周期(天)
ALTER TABLE `dm_equipment` ADD COLUMN `maintain_period` INT DEFAULT NULL COMMENT '检修周期(天)' AFTER `maintain_time`;
-- 11. 数据是否上传1=是0=否)
ALTER TABLE `dm_equipment` ADD COLUMN `data_upload` TINYINT(1) DEFAULT 1 COMMENT '数据是否上传1=是0=否)' AFTER `maintain_period`;
-- 12. 安装位置
ALTER TABLE `dm_equipment` ADD COLUMN `install_location` VARCHAR(255) DEFAULT NULL COMMENT '安装位置' AFTER `data_upload`;
-- 13. 经度
ALTER TABLE `dm_equipment` ADD COLUMN `longitude` DECIMAL(10,6) DEFAULT NULL COMMENT '经度' AFTER `install_location`;
-- 14. 纬度
ALTER TABLE `dm_equipment` ADD COLUMN `latitude` DECIMAL(10,6) DEFAULT NULL COMMENT '纬度' AFTER `longitude`;

View File

@@ -0,0 +1,277 @@
-- 说明: FIIH质量管理优化、设备巡检计划模块
-- =============================================
-- 一、FIIH质量管理优化
-- =============================================
-- 1.1 FIIH数据表增加工单关联字段
ALTER TABLE `ymes_fiih_data` ADD COLUMN `work_order_id` BIGINT DEFAULT NULL COMMENT '关联工单ID' AFTER `fiih_data_ch23`;
ALTER TABLE `ymes_fiih_data` ADD COLUMN `work_order_number` VARCHAR(64) DEFAULT NULL COMMENT '工单编号' AFTER `work_order_id`;
ALTER TABLE `ymes_fiih_data` ADD COLUMN `process_id` BIGINT DEFAULT NULL COMMENT '工序ID' AFTER `work_order_number`;
ALTER TABLE `ymes_fiih_data` ADD COLUMN `process_name` VARCHAR(64) DEFAULT NULL COMMENT '工序名称' AFTER `process_id`;
-- 1.2 FIIH数据表增加报工质检单关联字段
ALTER TABLE `ymes_fiih_data` ADD COLUMN `report_quality_id` BIGINT DEFAULT NULL COMMENT '报工质检单ID' AFTER `process_name`;
ALTER TABLE `ymes_fiih_data` ADD COLUMN `report_quality_number` VARCHAR(64) DEFAULT NULL COMMENT '报工质检单编号' AFTER `report_quality_id`;
-- =============================================
-- 二、设备管理优化
-- =============================================
-- 2.1 设备维修单项目类型增加"巡检"选项
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 (2, '巡检', 'C', 'inspection_item_type', NULL, 'warning', 'N', '0', 'admin', NOW(), '巡检类型');
-- 2.2 新建设备项目状态字典类型
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('设备项目状态', 'inspection_item_status', '0', 'admin', NOW(), '设备项目状态:正常/异常');
-- 2.3 设备项目状态字典数据
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 (0, '正常', '0', 'inspection_item_status', NULL, 'success', 'Y', '0', 'admin', NOW(), '正常状态');
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, '停用', '1', 'inspection_item_status', NULL, 'danger', 'N', '0', 'admin', NOW(), '异常状态');
-- =============================================
-- 三、巡检计划模块
-- =============================================
-- 3.1 巡检计划表
CREATE TABLE `dm_inspection_plan` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`number` VARCHAR(32) DEFAULT NULL COMMENT '计划编号',
`name` VARCHAR(64) NOT NULL COMMENT '计划名称',
`type` VARCHAR(20) NOT NULL DEFAULT 'inspection' COMMENT '类型inspection巡检/spotcheck点检',
`frequency` VARCHAR(20) DEFAULT NULL COMMENT '频率daily每日/weekly每周/monthly每月',
`cycle_value` INT DEFAULT 1 COMMENT '周期值如每3天、每2周',
`start_date` DATE DEFAULT NULL COMMENT '开始日期',
`end_date` DATE DEFAULT NULL COMMENT '结束日期',
`executor_id` BIGINT DEFAULT NULL COMMENT '执行人ID',
`executor_name` VARCHAR(32) DEFAULT NULL COMMENT '执行人姓名',
`equipment_ids` VARCHAR(500) DEFAULT NULL COMMENT '关联设备ID多个逗号分隔',
`equipment_names` VARCHAR(500) DEFAULT NULL COMMENT '关联设备名称(多个逗号分隔)',
`status` VARCHAR(10) NOT NULL DEFAULT '0' COMMENT '状态0启用/1停用',
`last_execute_time` DATETIME DEFAULT NULL COMMENT '上次执行时间',
`next_execute_time` DATETIME DEFAULT NULL COMMENT '下次执行时间',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(32) NOT NULL COMMENT '创建人',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`update_by` VARCHAR(32) DEFAULT NULL COMMENT '更新人',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_type` (`type`),
KEY `idx_next_execute_time` (`next_execute_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='巡检计划表';
-- 3.2 巡检记录表
CREATE TABLE `dm_inspection_plan_record` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`plan_id` BIGINT DEFAULT NULL COMMENT '关联计划ID',
`plan_number` VARCHAR(32) DEFAULT NULL COMMENT '计划编号',
`plan_name` VARCHAR(64) DEFAULT NULL COMMENT '计划名称',
`type` VARCHAR(20) DEFAULT NULL COMMENT '类型inspection巡检/spotcheck点检',
`equipment_id` BIGINT DEFAULT NULL COMMENT '设备ID',
`equipment_name` VARCHAR(64) DEFAULT NULL COMMENT '设备名称',
`executor_id` BIGINT DEFAULT NULL COMMENT '执行人ID',
`executor_name` VARCHAR(32) DEFAULT NULL COMMENT '执行人姓名',
`execute_time` DATETIME DEFAULT NULL COMMENT '执行时间',
`result` VARCHAR(20) DEFAULT NULL COMMENT '结果qualified合格/unqualified不合格/normal正常/abnormal异常',
`result_value` VARCHAR(100) DEFAULT NULL COMMENT '检测值(点检时记录数值)',
`problem_desc` TEXT DEFAULT NULL COMMENT '问题描述',
`attachment` VARCHAR(500) DEFAULT NULL COMMENT '附件路径',
`status` VARCHAR(10) DEFAULT '0' COMMENT '状态0待处理/1已处理/2已关闭',
`repair_order_id` BIGINT DEFAULT NULL COMMENT '关联维修单ID',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(32) NOT NULL COMMENT '创建人',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`update_by` VARCHAR(32) DEFAULT NULL COMMENT '更新人',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_plan_id` (`plan_id`),
KEY `idx_equipment_id` (`equipment_id`),
KEY `idx_execute_time` (`execute_time`),
KEY `idx_result` (`result`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='巡检记录表';
-- 3.3 巡检计划类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('巡检计划类型', 'inspection_plan_type', '0', 'admin', NOW(), '巡检计划类型');
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 (0, '巡检', 'inspection', 'inspection_plan_type', NULL, 'primary', 'Y', '0', 'admin', NOW(), '全面排查');
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, '点检', 'spotcheck', 'inspection_plan_type', NULL, 'success', 'N', '0', 'admin', NOW(), '关键点位检查');
-- 3.4 巡检计划频率字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('巡检计划频率', 'inspection_plan_frequency', '0', 'admin', NOW(), '巡检计划执行频率');
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 (0, '每日', 'daily', 'inspection_plan_frequency', NULL, 'default', 'N', '0', 'admin', NOW(), '每日执行');
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, '每周', 'weekly', 'inspection_plan_frequency', NULL, 'default', 'N', '0', 'admin', NOW(), '每周执行');
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 (2, '每月', 'monthly', 'inspection_plan_frequency', NULL, 'default', 'N', '0', 'admin', NOW(), '每月执行');
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 (3, '每季度', 'quarterly', 'inspection_plan_frequency', NULL, 'default', 'N', '0', 'admin', NOW(), '每季度执行');
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 (4, '每年', 'yearly', 'inspection_plan_frequency', NULL, 'default', 'N', '0', 'admin', NOW(), '每年执行');
-- 3.5 巡检结果字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('巡检结果', 'inspection_result', '0', 'admin', NOW(), '巡检/点检结果');
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 (0, '合格', 'qualified', 'inspection_result', NULL, 'success', 'N', '0', 'admin', NOW(), '巡检合格');
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, '不合格', 'unqualified', 'inspection_result', NULL, 'danger', 'N', '0', 'admin', NOW(), '巡检不合格');
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 (2, '正常', 'normal', 'inspection_result', NULL, 'success', 'N', '0', 'admin', NOW(), '点检正常');
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 (3, '异常', 'abnormal', 'inspection_result', NULL, 'danger', 'N', '0', 'admin', NOW(), '点检异常');
-- 3.6 巡检记录状态字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('巡检记录状态', 'inspection_record_status', '0', 'admin', NOW(), '巡检记录处理状态');
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 (0, '待处理', '0', 'inspection_record_status', NULL, 'warning', 'Y', '0', 'admin', NOW(), '待处理');
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, '已处理', '1', 'inspection_record_status', NULL, 'success', 'N', '0', 'admin', NOW(), '已处理');
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 (2, '已关闭', '2', 'inspection_record_status', NULL, 'info', 'N', '0', 'admin', NOW(), '已关闭');
-- =============================================
-- 四、菜单配置
-- =============================================
-- 4.1 巡检计划菜单设备管理菜单ID为2168
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检计划', 2168, 10, 'inspectionPlan', 'mes/equipment/inspectionPlan/index', NULL, 1, 0, 'C', '0', '0', 'equipment:inspectionPlan:list', 'date', 'admin', NOW(), '巡检计划菜单');
-- 获取刚插入的菜单ID用于子菜单
SET @inspection_plan_menu_id = LAST_INSERT_ID();
-- 4.2 巡检计划按钮权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检计划查询', @inspection_plan_menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlan:query', '#', 'admin', NOW(), NULL);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检计划新增', @inspection_plan_menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlan:add', '#', 'admin', NOW(), NULL);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检计划修改', @inspection_plan_menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlan:edit', '#', 'admin', NOW(), NULL);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检计划删除', @inspection_plan_menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlan:remove', '#', 'admin', NOW(), NULL);
-- 4.3 巡检记录菜单
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检记录', 2168, 11, 'inspectionPlanRecord', 'mes/equipment/inspectionPlanRecord/index', NULL, 1, 0, 'C', '0', '0', 'equipment:inspectionPlanRecord:list', 'log', 'admin', NOW(), '巡检记录菜单');
SET @inspection_record_menu_id = LAST_INSERT_ID();
-- 4.4 巡检记录按钮权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检记录查询', @inspection_record_menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:query', '#', 'admin', NOW(), NULL);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检记录新增', @inspection_record_menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:add', '#', 'admin', NOW(), NULL);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检记录修改', @inspection_record_menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:edit', '#', 'admin', NOW(), NULL);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES ('巡检记录删除', @inspection_record_menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:remove', '#', 'admin', NOW(), NULL);
-- =============================================
-- 五、编码规则(可选)
-- =============================================
-- 5.1 巡检计划编码规则主表
INSERT INTO `sys_code_rule` (`remark`, `create_by`, `create_time`, `name`, `basic_domain`, `status`)
VALUES ('巡检计划编码规则XJ + 日期 + 流水号', 'admin', NOW(), '巡检计划编码', 'InspectionPlan', '0');
SET @inspection_plan_rule_id = LAST_INSERT_ID();
-- 5.2 巡检计划编码规则子表
-- 第1项常量 XJ
INSERT INTO `sys_code_rule_entry` (`rule_id`, `sort`, `type_id`, `constant_char`)
VALUES (@inspection_plan_rule_id, 1, 'B', 'XJ');
-- 第2项日期 yyyyMMdd
INSERT INTO `sys_code_rule_entry` (`rule_id`, `sort`, `type_id`, `date_format`)
VALUES (@inspection_plan_rule_id, 2, 'C', 'yyyyMMdd');
-- 第3项流水号4位用0补位
INSERT INTO `sys_code_rule_entry` (`rule_id`, `sort`, `type_id`, `length_flow`, `max_flow`, `code_cover`)
VALUES (@inspection_plan_rule_id, 3, 'A', 4, 1, '0');
-- =============================================
-- 六、回退SQL如需回退请执行以下语句
-- =============================================
/*
-- 6.1 删除编码规则
DELETE FROM `sys_code_rule_entry` WHERE `rule_id` = (SELECT `id` FROM `sys_code_rule` WHERE `basic_domain` = 'InspectionPlan');
DELETE FROM `sys_code_rule` WHERE `basic_domain` = 'InspectionPlan';
-- 6.2 删除菜单(先删除子菜单,再删除父菜单)
DELETE FROM `sys_menu` WHERE `perms` LIKE 'equipment:inspectionPlanRecord:%';
DELETE FROM `sys_menu` WHERE `perms` = 'equipment:inspectionPlanRecord:list';
DELETE FROM `sys_menu` WHERE `perms` LIKE 'equipment:inspectionPlan:%';
DELETE FROM `sys_menu` WHERE `perms` = 'equipment:inspectionPlan:list';
-- 6.3 删除字典数据
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'inspection_record_status';
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'inspection_result';
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'inspection_plan_frequency';
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'inspection_plan_type';
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'inspection_item_status';
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'inspection_item_type' AND `dict_value` = 'C';
-- 6.4 删除字典类型
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'inspection_record_status';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'inspection_result';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'inspection_plan_frequency';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'inspection_plan_type';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'inspection_item_status';
-- 6.5 删除巡检表
DROP TABLE IF EXISTS `dm_inspection_plan_record`;
DROP TABLE IF EXISTS `dm_inspection_plan`;
-- 6.6 删除FIIH数据表工单关联字段
ALTER TABLE `ymes_fiih_data` DROP COLUMN `report_quality_number`;
ALTER TABLE `ymes_fiih_data` DROP COLUMN `report_quality_id`;
ALTER TABLE `ymes_fiih_data` DROP COLUMN `process_name`;
ALTER TABLE `ymes_fiih_data` DROP COLUMN `process_id`;
ALTER TABLE `ymes_fiih_data` DROP COLUMN `work_order_number`;
ALTER TABLE `ymes_fiih_data` DROP COLUMN `work_order_id`;
*/
-- =============================================
-- 七、菜单名称及排序优化
-- =============================================
-- 7.1 修改菜单名称:设备维修计划 → 设备点检项目
UPDATE `sys_menu` SET `menu_name` = '设备点检项目' WHERE `path` = 'inspectionItem' AND `component` = 'mes/equipment/inspectionItem/index';
-- 7.2 修改巡检计划菜单名称:巡检计划 → 多设备巡检计划
UPDATE `sys_menu` SET `menu_name` = '多设备巡检计划' WHERE `path` = 'inspectionPlan' AND `component` = 'mes/equipment/inspectionPlan/index';
-- 7.3 调整菜单排序:设备点检项目 order_num 4→3设备维修单 order_num 3→4
UPDATE `sys_menu` SET `order_num` = 3 WHERE `path` = 'inspectionItem' AND `component` = 'mes/equipment/inspectionItem/index';
UPDATE `sys_menu` SET `order_num` = 4 WHERE `path` = 'repairOrder' AND `component` = 'mes/equipment/repairOrder/index';
-- 7.4 将设备报警记录移动到YIOT物联菜单下parent_id=2380order_num设为100
UPDATE `sys_menu` SET `parent_id` = 2380, `order_num` = 100 WHERE `path` = 'faultRecord' AND `component` = 'mes/device/faultRecord/index';
-- 7.5 将巡检计划和巡检记录菜单图标改为默认值#
UPDATE `sys_menu` SET `icon` = '#' WHERE `path` = 'inspectionPlan' AND `component` = 'mes/equipment/inspectionPlan/index';
UPDATE `sys_menu` SET `icon` = '#' WHERE `path` = 'inspectionPlanRecord' AND `component` = 'mes/equipment/inspectionPlanRecord/index';
UPDATE `sys_menu` SET `icon` = '#' WHERE `path` = 'faultRecord' AND `component` = 'mes/device/faultRecord/index';
-- 7.6 修改菜单名称:设备维护记录 → 设备点检记录
UPDATE `sys_menu` SET `menu_name` = '设备点检记录' WHERE `path` = 'inspectionItemRecord' AND `component` = 'mes/equipment/inspectionItemRecord';

View File

@@ -0,0 +1,185 @@
-- 配置表
CREATE TABLE fiih_qc_config (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
fiih_object_name VARCHAR(50) NOT NULL COMMENT '对象体名称',
fiih_object_desc VARCHAR(255) DEFAULT NULL COMMENT '对象说明',
fiih_link_id BIGINT NOT NULL COMMENT '环节ID(单次环节/班次)',
fiih_link_name VARCHAR(100) NOT NULL COMMENT '环节名称',
fiih_task_id BIGINT NOT NULL COMMENT '任务ID(总体)',
fiih_task_name VARCHAR(100) NOT NULL COMMENT '任务名称',
fiih_version VARCHAR(50) DEFAULT NULL COMMENT '任务版本号',
fiih_process VARCHAR(50) DEFAULT NULL COMMENT '任务流程记录',
fiih_status INT NOT NULL DEFAULT 1 COMMENT '任务状态1进行中 2完成 3作废',
fiih_start_time VARCHAR(255) DEFAULT NULL COMMENT '启用期(时间段或文字描述)',
fiih_end_time DATETIME DEFAULT NULL COMMENT '结束时间',
fiih_leader_id BIGINT NOT NULL COMMENT '负责人ID',
fiih_leader_name VARCHAR(50) NOT NULL COMMENT '负责人姓名',
fiih_approve_id BIGINT DEFAULT NULL COMMENT '批准人ID',
fiih_approve_name VARCHAR(50) DEFAULT NULL COMMENT '批准人姓名',
fiih_qr_file VARCHAR(255) DEFAULT NULL COMMENT '二维码路径',
fiih_overall_layout VARCHAR(255) DEFAULT NULL COMMENT '控件总体布局字符串',
fiih_rich_text TEXT DEFAULT NULL COMMENT '说明富文本',
fiih_info_json TEXT DEFAULT NULL COMMENT '信息属性JSON',
fiih_query_json TEXT DEFAULT NULL COMMENT '查询属性JSON',
fiih_check_standard TEXT DEFAULT NULL COMMENT '检测标准',
fiih_config_ch0 TEXT DEFAULT NULL COMMENT '分项0属性(JSON)',
fiih_config_ch1 TEXT DEFAULT NULL COMMENT '分项1属性(JSON)',
fiih_config_ch2 TEXT DEFAULT NULL COMMENT '分项2属性(JSON)',
fiih_config_ch3 TEXT DEFAULT NULL COMMENT '分项3属性(JSON)',
fiih_config_ch4 TEXT DEFAULT NULL COMMENT '分项4属性(JSON)',
fiih_config_ch5 TEXT DEFAULT NULL COMMENT '分项5属性(JSON)',
fiih_config_ch6 TEXT DEFAULT NULL COMMENT '分项6属性(JSON)',
fiih_config_ch7 TEXT DEFAULT NULL COMMENT '分项7属性(JSON)',
fiih_config_ch8 TEXT DEFAULT NULL COMMENT '分项8属性(JSON)',
fiih_config_ch9 TEXT DEFAULT NULL COMMENT '分项9属性(JSON)',
fiih_config_ch10 TEXT DEFAULT NULL COMMENT '分项10属性(JSON)',
fiih_config_ch11 TEXT DEFAULT NULL COMMENT '分项11属性(JSON)',
fiih_config_ch12 TEXT DEFAULT NULL COMMENT '分项12属性(JSON)',
fiih_config_ch13 TEXT DEFAULT NULL COMMENT '分项13属性(JSON)',
fiih_config_ch14 TEXT DEFAULT NULL COMMENT '分项14属性(JSON)',
fiih_config_ch15 TEXT DEFAULT NULL COMMENT '分项15属性(JSON)',
fiih_config_ch16 TEXT DEFAULT NULL COMMENT '分项16属性(JSON)',
fiih_config_ch17 TEXT DEFAULT NULL COMMENT '分项17属性(JSON)',
fiih_config_ch18 TEXT DEFAULT NULL COMMENT '分项18属性(JSON)',
fiih_config_ch19 TEXT DEFAULT NULL COMMENT '分项19属性(JSON)',
fiih_config_ch20 TEXT DEFAULT NULL COMMENT '分项20属性(JSON)',
fiih_config_ch21 TEXT DEFAULT NULL COMMENT '分项21属性(JSON)',
fiih_config_ch22 TEXT DEFAULT NULL COMMENT '分项22属性(JSON)',
fiih_config_ch23 TEXT DEFAULT NULL COMMENT '分项23属性(JSON)',
fiih_file1 VARCHAR(255) DEFAULT NULL COMMENT '附件1检测依据GB',
fiih_file2 VARCHAR(255) DEFAULT NULL COMMENT '附件2检测工艺',
fiih_file3 VARCHAR(255) DEFAULT NULL COMMENT '附件3公章',
fiih_file4 VARCHAR(255) DEFAULT NULL COMMENT '附件4检测报告',
fiih_file5 VARCHAR(255) DEFAULT NULL COMMENT '附件5声明或其他',
create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
PRIMARY KEY (id),
KEY idx_task_id (fiih_task_id),
KEY idx_link_id (fiih_link_id),
KEY idx_tenant_id (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='质检配置表';
-- 数据表
CREATE TABLE fiih_qc_data (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
fiih_report_no VARCHAR(100) NOT NULL COMMENT '报告编号',
fiih_object_name VARCHAR(50) NOT NULL COMMENT '对象体名称',
fiih_object_spec VARCHAR(50) DEFAULT NULL COMMENT '对象体规格',
fiih_link_id BIGINT NOT NULL COMMENT '环节ID(单次环节)',
fiih_link_name VARCHAR(100) NOT NULL COMMENT '环节名称',
fiih_task_id BIGINT NOT NULL COMMENT '任务ID(总体)',
fiih_task_name VARCHAR(100) NOT NULL COMMENT '任务名称',
fiih_version VARCHAR(50) DEFAULT NULL COMMENT '任务版本号',
fiih_process VARCHAR(50) DEFAULT NULL COMMENT '任务流程记录',
fiih_status INT NOT NULL DEFAULT 1 COMMENT '任务状态1进行中 2完成 3作废',
fiih_production_unit VARCHAR(100) DEFAULT NULL COMMENT '生产单位',
fiih_sample_time DATETIME DEFAULT NULL COMMENT '取样时间',
fiih_collect_time DATETIME NOT NULL COMMENT '采集时间',
fiih_data_json TEXT DEFAULT NULL COMMENT '原始数据JSON',
fiih_data_analysis TEXT DEFAULT NULL COMMENT '分析结果',
fiih_data_complex TEXT DEFAULT NULL COMMENT '复杂数据',
fiih_check_standard TEXT DEFAULT NULL COMMENT '检测标准',
fiih_qc_result VARCHAR(50) DEFAULT NULL COMMENT '质检结论',
fiih_bad_reason VARCHAR(255) DEFAULT NULL COMMENT '不良原因',
fiih_related_order_no VARCHAR(100) DEFAULT NULL COMMENT '关联单号',
fiih_data_ch0 VARCHAR(200) DEFAULT NULL COMMENT '数据0',
fiih_data_ch1 VARCHAR(200) DEFAULT NULL COMMENT '数据1',
fiih_data_ch2 VARCHAR(200) DEFAULT NULL COMMENT '数据2',
fiih_data_ch3 VARCHAR(200) DEFAULT NULL COMMENT '数据3',
fiih_data_ch4 VARCHAR(200) DEFAULT NULL COMMENT '数据4',
fiih_data_ch5 VARCHAR(200) DEFAULT NULL COMMENT '数据5',
fiih_data_ch6 VARCHAR(200) DEFAULT NULL COMMENT '数据6',
fiih_data_ch7 VARCHAR(200) DEFAULT NULL COMMENT '数据7',
fiih_data_ch8 VARCHAR(200) DEFAULT NULL COMMENT '数据8',
fiih_data_ch9 VARCHAR(200) DEFAULT NULL COMMENT '数据9',
fiih_data_ch10 VARCHAR(200) DEFAULT NULL COMMENT '数据10',
fiih_data_ch11 VARCHAR(200) DEFAULT NULL COMMENT '数据11',
fiih_data_ch12 VARCHAR(200) DEFAULT NULL COMMENT '数据12',
fiih_data_ch13 VARCHAR(200) DEFAULT NULL COMMENT '数据13',
fiih_data_ch14 VARCHAR(200) DEFAULT NULL COMMENT '数据14',
fiih_data_ch15 VARCHAR(200) DEFAULT NULL COMMENT '数据15',
fiih_data_ch16 VARCHAR(200) DEFAULT NULL COMMENT '数据16',
fiih_data_ch17 VARCHAR(200) DEFAULT NULL COMMENT '数据17',
fiih_data_ch18 VARCHAR(200) DEFAULT NULL COMMENT '数据18',
fiih_data_ch19 VARCHAR(200) DEFAULT NULL COMMENT '数据19',
fiih_data_ch20 VARCHAR(200) DEFAULT NULL COMMENT '数据20',
fiih_data_ch21 VARCHAR(200) DEFAULT NULL COMMENT '数据21',
fiih_data_ch22 VARCHAR(200) DEFAULT NULL COMMENT '数据22',
fiih_data_ch23 VARCHAR(200) DEFAULT NULL COMMENT '数据23',
fiih_related_report VARCHAR(255) DEFAULT NULL COMMENT '相关报告',
create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
audit_by VARCHAR(64) DEFAULT NULL COMMENT '审核人',
audit_time DATETIME DEFAULT NULL COMMENT '审核时间',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
PRIMARY KEY (id),
KEY idx_report_no (fiih_report_no),
KEY idx_task_id (fiih_task_id),
KEY idx_link_id (fiih_link_id),
KEY idx_tenant_id (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='质检数据表';
ALTER TABLE fiih_qc_config ADD COLUMN fiih_check_agency VARCHAR(255) COMMENT '检测机构';
ALTER TABLE fiih_qc_data ADD COLUMN fiih_check_agency VARCHAR(255) COMMENT '检测机构';
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '新FIIH质检', 0, 0, 'fiihupgrade', NULL, NULL, 1, 0, 'M', '0', '0', '', 'cascader', 'YAVII', '2026-01-13 14:04:46', 'YAVII', '2026-01-13 15:12:42', '');
-- 获取刚插入的菜单ID
SET @menu_id = LAST_INSERT_ID();
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '质检配置', @menu_id, 0, 'mes/fiihupgrade/index', 'mes/fiihupgrade/index', NULL, 1, 0, 'C', '0', '0', '', 'component', 'YAVII', '2026-01-13 14:05:49', 'YAVII', '2026-01-13 14:06:06', '');
-- 获取刚插入的菜单ID
SET @menu_id = LAST_INSERT_ID();
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '配置列表', @menu_id, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:config:list', '#', 'YAVII', '2026-01-13 14:06:49', '', NULL, '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '配置查询', @menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:config:query', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '配置新增', @menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:config:add', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '配置修改', @menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:config:edit', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '配置删除', @menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:config:remove', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '配置导出', @menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:config:export', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '对象数据查询', @menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:data:query', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '对象数据列表', @menu_id, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:data:list', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '对象数据新增', @menu_id, 7, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:data:add', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '对象数据编辑', @menu_id, 8, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:data:edit', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');
INSERT INTO `sys_menu` ( `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '对象数据删除', @menu_id, 9, '', NULL, NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:data:remove', '#', 'YAVII', '2026-01-13 14:07:11', 'YAVII', '2026-01-13 16:28:51', '');

View File

@@ -0,0 +1,794 @@
-- =============================================
-- 设备点巡检优化 v1.0.74
-- 作者: 周启威
-- 日期: 2026-01-13
-- 描述:
-- 1. 新增设备点位表(关联设备)
-- 2. 计划明细表、执行记录明细表
-- 3. 维修单点位扩展
-- 4. 菜单结构调整(点检、巡检、保养、维修四大模块)
-- 5. 简化流程:去掉标准层,直接在计划中选择设备点位
-- 6. 维修单增加故障描述字段
-- =============================================
-- =============================================
-- 一、新增表结构
-- =============================================
-- 1.1 设备点位表(关联设备,作为基础数据)
CREATE TABLE IF NOT EXISTS `dm_inspection_item_point` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`item_id` BIGINT DEFAULT NULL COMMENT '关联点检项目ID可选兼容旧数据',
`equipment_id` BIGINT DEFAULT NULL COMMENT '关联设备ID',
`equipment_name` VARCHAR(100) DEFAULT NULL COMMENT '设备名称',
`point_name` VARCHAR(100) NOT NULL COMMENT '点位名称',
`point_code` VARCHAR(50) DEFAULT NULL COMMENT '点位编码',
`standard_value` VARCHAR(100) DEFAULT NULL COMMENT '标准值',
`upper_limit` VARCHAR(50) DEFAULT NULL COMMENT '上限值',
`lower_limit` VARCHAR(50) DEFAULT NULL COMMENT '下限值',
`unit` VARCHAR(20) DEFAULT NULL COMMENT '单位',
`check_method` VARCHAR(200) DEFAULT NULL COMMENT '检查方法',
`sort_order` INT DEFAULT 0 COMMENT '排序号',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(32) DEFAULT NULL COMMENT '创建人',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_by` VARCHAR(32) DEFAULT NULL COMMENT '更新人',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_item_id` (`item_id`),
KEY `idx_equipment_id` (`equipment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备点位表';
-- 1.2 计划点位明细表(计划关联的点位)
-- 注意如果表已存在需要执行下面的ALTER语句修改字段
CREATE TABLE IF NOT EXISTS `dm_inspection_plan_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`plan_id` BIGINT NOT NULL COMMENT '关联计划ID',
`item_id` BIGINT DEFAULT NULL COMMENT '关联点检项目ID可选兼容旧数据',
`item_number` VARCHAR(50) DEFAULT NULL COMMENT '项目编号',
`item_name` VARCHAR(100) DEFAULT NULL COMMENT '项目名称',
`item_content` VARCHAR(500) DEFAULT NULL COMMENT '项目内容',
`item_standard` VARCHAR(500) DEFAULT NULL COMMENT '项目标准',
`equipment_id` BIGINT DEFAULT NULL COMMENT '关联设备ID',
`equipment_name` VARCHAR(100) DEFAULT NULL COMMENT '设备名称',
`point_id` BIGINT DEFAULT NULL COMMENT '关联点位ID',
`point_name` VARCHAR(100) DEFAULT NULL COMMENT '点位名称',
`point_code` VARCHAR(50) DEFAULT NULL COMMENT '点位编码',
`standard_value` VARCHAR(100) DEFAULT NULL COMMENT '标准值',
`upper_limit` VARCHAR(50) DEFAULT NULL COMMENT '上限值',
`lower_limit` VARCHAR(50) DEFAULT NULL COMMENT '下限值',
`unit` VARCHAR(20) DEFAULT NULL COMMENT '单位',
`check_method` VARCHAR(200) DEFAULT NULL COMMENT '检查方法',
`sort_order` INT DEFAULT 0 COMMENT '排序号',
`create_by` VARCHAR(32) DEFAULT NULL COMMENT '创建人',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_plan_id` (`plan_id`),
KEY `idx_equipment_id` (`equipment_id`),
KEY `idx_point_id` (`point_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='计划点位明细表';
-- 1.2.1 修复已存在的dm_inspection_plan_item表如果表已存在修改字段允许为空并添加新字段
SET @dbname = DATABASE();
SET @tablename = 'dm_inspection_plan_item';
-- 修改 item_id 字段允许为空
SET @columnname = 'item_id';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
CONCAT('ALTER TABLE ', @tablename, ' MODIFY COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''关联点检项目ID可选'''),
'SELECT 1'
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 修改 item_number 字段允许为空
SET @columnname = 'item_number';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
CONCAT('ALTER TABLE ', @tablename, ' MODIFY COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''项目编号'''),
'SELECT 1'
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 修改 item_name 字段允许为空
SET @columnname = 'item_name';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
CONCAT('ALTER TABLE ', @tablename, ' MODIFY COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''项目名称'''),
'SELECT 1'
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 修改 item_content 字段允许为空
SET @columnname = 'item_content';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
CONCAT('ALTER TABLE ', @tablename, ' MODIFY COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''项目内容'''),
'SELECT 1'
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 修改 item_standard 字段允许为空
SET @columnname = 'item_standard';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
CONCAT('ALTER TABLE ', @tablename, ' MODIFY COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''项目标准'''),
'SELECT 1'
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 equipment_id 字段
SET @columnname = 'equipment_id';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''关联设备ID'' AFTER `item_standard`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 equipment_name 字段
SET @columnname = 'equipment_name';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''设备名称'' AFTER `equipment_id`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 point_id 字段
SET @columnname = 'point_id';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''关联点位ID'' AFTER `equipment_name`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 point_name 字段
SET @columnname = 'point_name';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''点位名称'' AFTER `point_id`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 point_code 字段
SET @columnname = 'point_code';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''点位编码'' AFTER `point_name`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 standard_value 字段
SET @columnname = 'standard_value';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''标准值'' AFTER `point_code`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 upper_limit 字段
SET @columnname = 'upper_limit';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''上限值'' AFTER `standard_value`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 lower_limit 字段
SET @columnname = 'lower_limit';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''下限值'' AFTER `upper_limit`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 unit 字段
SET @columnname = 'unit';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(20) DEFAULT NULL COMMENT ''单位'' AFTER `lower_limit`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 添加 check_method 字段
SET @columnname = 'check_method';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(200) DEFAULT NULL COMMENT ''检查方法'' AFTER `unit`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- 1.3 执行记录明细表(记录每个点位的执行结果)
CREATE TABLE IF NOT EXISTS `dm_inspection_record_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`record_id` BIGINT NOT NULL COMMENT '关联执行记录ID',
`point_id` BIGINT DEFAULT NULL COMMENT '关联点位ID',
`point_name` VARCHAR(100) DEFAULT NULL COMMENT '点位名称',
`point_code` VARCHAR(50) DEFAULT NULL COMMENT '点位编码',
`standard_value` VARCHAR(100) DEFAULT NULL COMMENT '标准值',
`upper_limit` VARCHAR(50) DEFAULT NULL COMMENT '上限值',
`lower_limit` VARCHAR(50) DEFAULT NULL COMMENT '下限值',
`unit` VARCHAR(20) DEFAULT NULL COMMENT '单位',
`result` VARCHAR(20) DEFAULT NULL COMMENT '执行结果normal正常/abnormal异常',
`result_value` VARCHAR(100) DEFAULT NULL COMMENT '检测值',
`problem_desc` TEXT DEFAULT NULL COMMENT '问题描述',
`create_by` VARCHAR(32) DEFAULT NULL COMMENT '创建人',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_record_id` (`record_id`),
KEY `idx_point_id` (`point_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='执行记录明细表';
-- =============================================
-- 二、扩展现有表结构
-- =============================================
-- 2.1 扩展巡检计划表,增加保养类型字段
-- MySQL 5.x 兼容写法,先检查字段是否存在
SET @dbname = DATABASE();
SET @tablename = 'dm_inspection_plan';
-- 添加 maintenance_type 字段
SET @columnname = 'maintenance_type';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(20) DEFAULT NULL COMMENT ''保养类型daily日常保养/periodic定期保养/overhaul大修'' AFTER `type`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 添加 equipment_id 字段(单设备关联)
SET @columnname = 'equipment_id';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''关联设备ID'' AFTER `executor_name`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 添加 equipment_name 字段(单设备名称)
SET @columnname = 'equipment_name';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''关联设备名称'' AFTER `equipment_id`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 添加 equipment_ids 字段多设备ID逗号分隔
SET @columnname = 'equipment_ids';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''关联设备ID多个用逗号分隔'' AFTER `equipment_name`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 添加 equipment_names 字段(多设备名称,逗号分隔)
SET @columnname = 'equipment_names';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(1000) DEFAULT NULL COMMENT ''关联设备名称(多个用逗号分隔)'' AFTER `equipment_ids`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 2.2 扩展设备项目表,增加备件字段和多设备绑定字段
SET @tablename = 'dm_inspection_item';
SET @columnname = 'spare_parts';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''所需备件'' AFTER `equipment_point`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'equipment_ids';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''绑定设备ID多个用逗号分隔'' AFTER `equipment_id`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 2.3 扩展维修单明细表,增加点位相关字段
SET @tablename = 'dm_repair_order_entry';
SET @columnname = 'point_id';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''关联点位ID'' AFTER `item_id`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'point_name';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''点位名称'' AFTER `point_id`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'point_code';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''点位编码'' AFTER `point_name`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'standard_value';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''标准值'' AFTER `point_code`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'upper_limit';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''上限值'' AFTER `standard_value`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'lower_limit';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''下限值'' AFTER `upper_limit`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'unit';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(20) DEFAULT NULL COMMENT ''单位'' AFTER `lower_limit`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'result_value';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''检测值'' AFTER `unit`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SET @columnname = 'result';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(20) DEFAULT NULL COMMENT ''检测结果normal正常/abnormal异常'' AFTER `result_value`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- =============================================
-- 三、字典数据配置
-- =============================================
-- 3.1 巡检计划类型增加"保养"选项
INSERT IGNORE 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 (2, '保养', 'maintenance', 'inspection_plan_type', NULL, 'warning', 'N', '0', 'admin', NOW(), '保养计划');
-- 3.2 新增保养类型字典类型
INSERT IGNORE INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('保养类型', 'maintenance_type', '0', 'admin', NOW(), '保养类型:日常保养/定期保养/大修');
-- 3.3 保养类型字典数据
INSERT IGNORE 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 (0, '日常保养', 'daily', 'maintenance_type', NULL, 'success', 'Y', '0', 'admin', NOW(), '日常保养');
INSERT IGNORE 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, '定期保养', 'periodic', 'maintenance_type', NULL, 'primary', 'N', '0', 'admin', NOW(), '定期保养');
INSERT IGNORE 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 (2, '大修', 'overhaul', 'maintenance_type', NULL, 'danger', 'N', '0', 'admin', NOW(), '大修');
-- 3.4 清理重复的频率字典数据v1.0.71已插入,这里只保留一份)
-- 删除重复的quarterly和yearly保留dict_sort较小的
DELETE d1 FROM sys_dict_data d1
INNER JOIN sys_dict_data d2
ON d1.dict_type = d2.dict_type AND d1.dict_value = d2.dict_value AND d1.dict_code > d2.dict_code
WHERE d1.dict_type = 'inspection_plan_frequency' AND d1.dict_value IN ('quarterly', 'yearly');
-- 3.5 清理重复的保养类型字典数据
DELETE d1 FROM sys_dict_data d1
INNER JOIN sys_dict_data d2
ON d1.dict_type = d2.dict_type AND d1.dict_value = d2.dict_value AND d1.dict_code > d2.dict_code
WHERE d1.dict_type = 'maintenance_type';
-- 3.6 清理重复的执行结果字典数据
DELETE d1 FROM sys_dict_data d1
INNER JOIN sys_dict_data d2
ON d1.dict_type = d2.dict_type AND d1.dict_value = d2.dict_value AND d1.dict_code > d2.dict_code
WHERE d1.dict_type = 'inspection_result';
-- =============================================
-- 四、菜单结构调整
-- =============================================
-- 4.1 创建"点检管理"二级目录设备管理菜单ID为2168
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '点检管理', 2168, 1, 'spotcheck', NULL, NULL, 1, 0, 'M', '0', '0', '', 'checkbox', 'admin', NOW(), '点检管理目录'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '点检管理' AND parent_id = 2168);
SET @spotcheck_menu_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '点检管理' AND parent_id = 2168 LIMIT 1);
-- 4.2 创建"巡检管理"二级目录
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检管理', 2168, 2, 'inspection', NULL, NULL, 1, 0, 'M', '0', '0', '', 'eye-open', 'admin', NOW(), '巡检管理目录'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '巡检管理' AND parent_id = 2168);
SET @inspection_menu_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '巡检管理' AND parent_id = 2168 LIMIT 1);
-- 4.3 创建"保养管理"二级目录
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养管理', 2168, 3, 'maintenance', NULL, NULL, 1, 0, 'M', '0', '0', '', 'tool', 'admin', NOW(), '保养管理目录'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '保养管理' AND parent_id = 2168);
SET @maintenance_menu_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '保养管理' AND parent_id = 2168 LIMIT 1);
-- 4.4 创建"维修管理"二级目录
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '维修管理', 2168, 4, 'repair', NULL, NULL, 1, 0, 'M', '0', '0', '', 'build', 'admin', NOW(), '维修管理目录'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '维修管理' AND parent_id = 2168);
SET @repair_menu_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '维修管理' AND parent_id = 2168 LIMIT 1);
-- 4.5 设备点位菜单(放在设备管理一级菜单下,作为通用基础数据)
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '设备点位', 2168, 10, 'inspectionPoint', 'mes/equipment/inspectionPoint/index', NULL, 1, 0, 'C', '0', '0', 'equipment:inspectionPoint:list', 'edit', 'admin', NOW(), '设备点位管理菜单'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE path = 'inspectionPoint' AND component = 'mes/equipment/inspectionPoint/index');
-- 4.6 移动点检相关菜单到点检管理下(只有当菜单不在点检管理下时才移动)
-- 点检计划移动到点检管理下inspectionPlan是单选设备的点检计划页面
UPDATE `sys_menu` SET `parent_id` = @spotcheck_menu_id, `order_num` = 1, `menu_name` = '点检计划'
WHERE `path` = 'inspectionPlan' AND `component` LIKE 'mes/equipment/inspectionPlan%' AND @spotcheck_menu_id IS NOT NULL
AND `parent_id` != @spotcheck_menu_id;
-- 点检记录新增菜单使用inspectionPlanRecord组件通过query参数区分
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '点检记录', @spotcheck_menu_id, 2, 'spotcheckRecord', 'mes/equipment/inspectionPlanRecord/index', '{"type":"spotcheck"}', 1, 0, 'C', '0', '0', 'equipment:inspectionPlanRecord:list', '#', 'admin', NOW(), '点检记录菜单'
FROM DUAL WHERE @spotcheck_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE path = 'spotcheckRecord');
-- 删除旧的点检记录菜单inspectionItemRecord
DELETE FROM `sys_menu` WHERE `path` = 'inspectionItemRecord' AND `component` LIKE 'mes/equipment/inspectionItemRecord%';
-- 删除设备点检项目菜单inspectionItem
DELETE FROM `sys_menu` WHERE `path` = 'inspectionItem' AND `component` LIKE 'mes/equipment/inspectionItem%';
-- 4.7 巡检管理下的菜单
-- 巡检计划inspectionStandard是多选设备的巡检计划页面
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检计划', @inspection_menu_id, 1, 'inspectionStandard', 'mes/equipment/inspectionStandard/index', NULL, 1, 0, 'C', '0', '0', 'equipment:inspectionStandard:list', '#', 'admin', NOW(), '巡检计划菜单'
FROM DUAL WHERE @inspection_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE path = 'inspectionStandard');
-- 巡检记录只有当菜单不在巡检管理下时才移动并设置query参数
UPDATE `sys_menu` SET `parent_id` = @inspection_menu_id, `order_num` = 2, `menu_name` = '巡检记录', `query` = '{"type":"inspection"}'
WHERE `path` = 'inspectionPlanRecord' AND `component` LIKE 'mes/equipment/inspectionPlanRecord%' AND @inspection_menu_id IS NOT NULL;
-- 4.8 保养管理下的菜单
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养计划', @maintenance_menu_id, 1, 'maintenancePlan', 'mes/equipment/maintenancePlan/index', NULL, 1, 0, 'C', '0', '0', 'equipment:maintenancePlan:list', '#', 'admin', NOW(), '保养计划菜单'
FROM DUAL WHERE @maintenance_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE path = 'maintenancePlan');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养记录', @maintenance_menu_id, 2, 'maintenanceRecord', 'mes/equipment/maintenanceRecord/index', NULL, 1, 0, 'C', '0', '0', 'equipment:maintenanceRecord:list', '#', 'admin', NOW(), '保养记录菜单'
FROM DUAL WHERE @maintenance_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE path = 'maintenanceRecord');
-- 4.9 维修管理下的菜单
-- 先检查设备维修单是否已经在维修管理目录下,避免重复移动
UPDATE `sys_menu` SET `parent_id` = @repair_menu_id, `order_num` = 1
WHERE `path` = 'faultTree' AND `component` LIKE 'mes/equipment/faultTree%' AND @repair_menu_id IS NOT NULL
AND `parent_id` != @repair_menu_id;
-- 只有当设备维修单不在维修管理目录下时才移动
UPDATE `sys_menu` SET `parent_id` = @repair_menu_id, `order_num` = 2
WHERE `path` = 'repairOrder' AND `component` LIKE 'mes/equipment/repairOrder%' AND @repair_menu_id IS NOT NULL
AND `parent_id` != @repair_menu_id;
-- =============================================
-- 五、删除冗余字段的SQL如需清理旧数据
-- =============================================
-- 以下字段在简化流程后不再需要,可选择性删除:
-- ALTER TABLE `dm_inspection_item` DROP COLUMN `equipment_point`; -- 旧的点位字段(已改用子表)
-- ALTER TABLE `dm_inspection_plan_item` DROP COLUMN `item_id`; -- 旧的项目关联(已改用点位关联)
-- ALTER TABLE `dm_inspection_plan_item` DROP COLUMN `item_number`;
-- ALTER TABLE `dm_inspection_plan_item` DROP COLUMN `item_name`;
-- ALTER TABLE `dm_inspection_plan_item` DROP COLUMN `item_content`;
-- ALTER TABLE `dm_inspection_plan_item` DROP COLUMN `item_standard`;
-- =============================================
-- 六、回退SQL如需回退请执行以下语句
-- =============================================
/*
-- 删除新增的菜单
DELETE FROM `sys_menu` WHERE `path` IN ('inspectionPoint', 'inspectionStandard', 'maintenanceItem', 'maintenancePlan', 'maintenanceRecord');
DELETE FROM `sys_menu` WHERE `path` IN ('spotcheck', 'inspection', 'maintenance', 'repair') AND `parent_id` = 2168 AND `menu_type` = 'M';
-- 删除字典数据
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'maintenance_type';
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'inspection_plan_type' AND `dict_value` = 'maintenance';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'maintenance_type';
-- 删除扩展字段
ALTER TABLE `dm_inspection_plan` DROP COLUMN `maintenance_type`;
ALTER TABLE `dm_inspection_item` DROP COLUMN `spare_parts`;
ALTER TABLE `dm_inspection_item` DROP COLUMN `equipment_ids`;
-- 删除维修单扩展字段
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `point_id`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `point_name`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `point_code`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `standard_value`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `upper_limit`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `lower_limit`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `unit`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `result_value`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `result`;
-- 删除新增表
DROP TABLE IF EXISTS `dm_inspection_record_item`;
DROP TABLE IF EXISTS `dm_inspection_plan_item`;
DROP TABLE IF EXISTS `dm_inspection_item_point`;
*/
-- =============================================
-- 七、扩展执行记录表,增加点位字段
-- =============================================
-- 7.1 给dm_inspection_plan_record表添加point_id字段
SET @dbname = DATABASE();
SET @tablename = 'dm_inspection_plan_record';
SET @columnname = 'point_id';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''关联点位ID'' AFTER `equipment_name`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 7.2 给dm_inspection_plan_record表添加point_name字段
SET @columnname = 'point_name';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''点位名称'' AFTER `point_id`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- =============================================
-- 八、修复dm_inspection_record_item表item_id字段
-- =============================================
-- 8.1 添加item_id字段如果不存在则添加如果存在则修改为允许空
SET @dbname = DATABASE();
SET @tablename = 'dm_inspection_record_item';
SET @columnname = 'item_id';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
CONCAT('ALTER TABLE ', @tablename, ' MODIFY COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''关联标准项目ID可选'''),
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''关联标准项目ID可选'' AFTER `record_id`')
));
PREPARE alterStatement FROM @preparedStatement;
EXECUTE alterStatement;
DEALLOCATE PREPARE alterStatement;
-- =============================================
-- 九、维修单增加富文本字段
-- =============================================
-- 9.1 给dm_repair_order表添加故障详情富文本字段
SET @tablename = 'dm_repair_order';
SET @columnname = 'fault_detail';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' TEXT DEFAULT NULL COMMENT ''故障详情(富文本)''')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 9.2 给dm_repair_order表添加更换备品备件富文本字段
SET @columnname = 'spare_parts_detail';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' TEXT DEFAULT NULL COMMENT ''更换备品备件(富文本)''')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- =============================================
-- 十、维修单明细权限配置
-- =============================================
-- 10.1 添加维修单明细查看权限按钮
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '维修单明细', (SELECT menu_id FROM sys_menu WHERE path = 'repairOrder' AND component LIKE 'mes/equipment/repairOrder%' LIMIT 1), 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:repairOrder:detail', '#', 'admin', NOW(), '维修单明细查看权限'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:repairOrder:detail');
-- =============================================
-- 十一、修复dm_inspection_record_item表缺失字段
-- =============================================
-- 11.1 添加item_content字段检查方法
SET @dbname = DATABASE();
SET @tablename = 'dm_inspection_record_item';
SET @columnname = 'item_content';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''检查方法/项目内容'' AFTER `unit`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 11.2 添加item_number字段
SET @columnname = 'item_number';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''项目编号'' AFTER `point_name`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 11.3 添加item_name字段
SET @columnname = 'item_name';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(100) DEFAULT NULL COMMENT ''项目名称'' AFTER `item_number`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 11.4 添加item_standard字段
SET @columnname = 'item_standard';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''项目标准'' AFTER `item_content`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 11.5 添加spare_parts_used字段保养用
SET @columnname = 'spare_parts_used';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''使用的备件'' AFTER `problem_desc`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 11.6 添加point_code字段
SET @columnname = 'point_code';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(50) DEFAULT NULL COMMENT ''点位编码'' AFTER `point_name`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- =============================================
-- 十二、巡检记录菜单路由参数配置点检记录已在4.6节处理)
-- =============================================
-- 12.1 获取巡检管理目录ID
SET @inspection_menu_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '巡检管理' AND parent_id = 2168 LIMIT 1);
-- 12.2 更新巡检记录菜单带type=inspection参数- 备用4.7节已处理
-- UPDATE `sys_menu` SET `query` = '{"type":"inspection"}'
-- WHERE `path` = 'inspectionPlanRecord' AND `component` LIKE 'mes/equipment/inspectionPlanRecord%';
-- =============================================
-- 十三、维修单增加故障描述字段
-- =============================================
-- 13.1 给dm_repair_order表添加故障描述字段
SET @dbname = DATABASE();
SET @tablename = 'dm_repair_order';
SET @columnname = 'fault_desc';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(500) DEFAULT NULL COMMENT ''故障描述'' AFTER `spare_parts_detail`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;

View File

@@ -0,0 +1,162 @@
-- =============================================
-- 文件名: 2026-01-14_v1.6.001_周启威_设备点位.sql
-- 作者: 周启威
-- 日期: 2026-01-14
-- 描述: 补充设备管理模块按钮权限
-- 1. 设备点位query/add/edit/remove/export
-- 2. 点检记录query/add/edit/remove/export
-- 3. 巡检计划query/add/edit/remove/export
-- 4. 巡检记录query/add/edit/remove/export
-- 5. 保养计划query/add/edit/remove/export
-- 6. 保养记录query/add/edit/remove/export
-- =============================================
-- =============================================
-- 1. 设备点位按钮权限
-- =============================================
SET @point_menu_id = (SELECT menu_id FROM sys_menu WHERE path = 'inspectionPoint' AND component = 'mes/equipment/inspectionPoint/index' LIMIT 1);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '设备点位查询', @point_menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPoint:query', '#', 'admin', NOW(), ''
FROM DUAL WHERE @point_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionPoint:query');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '设备点位新增', @point_menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPoint:add', '#', 'admin', NOW(), ''
FROM DUAL WHERE @point_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionPoint:add');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '设备点位修改', @point_menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPoint:edit', '#', 'admin', NOW(), ''
FROM DUAL WHERE @point_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionPoint:edit');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '设备点位删除', @point_menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPoint:remove', '#', 'admin', NOW(), ''
FROM DUAL WHERE @point_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionPoint:remove');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '设备点位导出', @point_menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPoint:export', '#', 'admin', NOW(), ''
FROM DUAL WHERE @point_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionPoint:export');
-- =============================================
-- 2. 点检记录按钮权限
-- =============================================
SET @spotcheck_record_menu_id = (SELECT menu_id FROM sys_menu WHERE path = 'spotcheckRecord' LIMIT 1);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '点检记录查询', @spotcheck_record_menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:query', '#', 'admin', NOW(), ''
FROM DUAL WHERE @spotcheck_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @spotcheck_record_menu_id AND menu_name = '点检记录查询');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '点检记录新增', @spotcheck_record_menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:add', '#', 'admin', NOW(), ''
FROM DUAL WHERE @spotcheck_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @spotcheck_record_menu_id AND menu_name = '点检记录新增');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '点检记录修改', @spotcheck_record_menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:edit', '#', 'admin', NOW(), ''
FROM DUAL WHERE @spotcheck_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @spotcheck_record_menu_id AND menu_name = '点检记录修改');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '点检记录删除', @spotcheck_record_menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:remove', '#', 'admin', NOW(), ''
FROM DUAL WHERE @spotcheck_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @spotcheck_record_menu_id AND menu_name = '点检记录删除');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '点检记录导出', @spotcheck_record_menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:export', '#', 'admin', NOW(), ''
FROM DUAL WHERE @spotcheck_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @spotcheck_record_menu_id AND menu_name = '点检记录导出');
-- =============================================
-- 3. 巡检计划按钮权限
-- =============================================
SET @inspection_standard_menu_id = (SELECT menu_id FROM sys_menu WHERE path = 'inspectionStandard' AND component = 'mes/equipment/inspectionStandard/index' LIMIT 1);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检计划查询', @inspection_standard_menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionStandard:query', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_standard_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionStandard:query');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检计划新增', @inspection_standard_menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionStandard:add', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_standard_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionStandard:add');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检计划修改', @inspection_standard_menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionStandard:edit', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_standard_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionStandard:edit');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检计划删除', @inspection_standard_menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionStandard:remove', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_standard_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionStandard:remove');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检计划导出', @inspection_standard_menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionStandard:export', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_standard_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:inspectionStandard:export');
-- =============================================
-- 4. 巡检记录按钮权限
-- =============================================
SET @inspection_record_menu_id = (SELECT menu_id FROM sys_menu WHERE path = 'inspectionPlanRecord' AND component = 'mes/equipment/inspectionPlanRecord/index' LIMIT 1);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检记录查询', @inspection_record_menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:query', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @inspection_record_menu_id AND menu_name = '巡检记录查询');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检记录新增', @inspection_record_menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:add', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @inspection_record_menu_id AND menu_name = '巡检记录新增');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检记录修改', @inspection_record_menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:edit', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @inspection_record_menu_id AND menu_name = '巡检记录修改');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检记录删除', @inspection_record_menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:remove', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @inspection_record_menu_id AND menu_name = '巡检记录删除');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '巡检记录导出', @inspection_record_menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:inspectionPlanRecord:export', '#', 'admin', NOW(), ''
FROM DUAL WHERE @inspection_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE parent_id = @inspection_record_menu_id AND menu_name = '巡检记录导出');
-- =============================================
-- 5. 保养计划按钮权限
-- =============================================
SET @maintenance_plan_menu_id = (SELECT menu_id FROM sys_menu WHERE path = 'maintenancePlan' AND component = 'mes/equipment/maintenancePlan/index' LIMIT 1);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养计划查询', @maintenance_plan_menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenancePlan:query', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_plan_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenancePlan:query');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养计划新增', @maintenance_plan_menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenancePlan:add', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_plan_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenancePlan:add');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养计划修改', @maintenance_plan_menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenancePlan:edit', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_plan_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenancePlan:edit');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养计划删除', @maintenance_plan_menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenancePlan:remove', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_plan_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenancePlan:remove');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养计划导出', @maintenance_plan_menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenancePlan:export', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_plan_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenancePlan:export');
-- =============================================
-- 6. 保养记录按钮权限
-- =============================================
SET @maintenance_record_menu_id = (SELECT menu_id FROM sys_menu WHERE path = 'maintenanceRecord' AND component = 'mes/equipment/maintenanceRecord/index' LIMIT 1);
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养记录查询', @maintenance_record_menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenanceRecord:query', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenanceRecord:query');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养记录新增', @maintenance_record_menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenanceRecord:add', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenanceRecord:add');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养记录修改', @maintenance_record_menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenanceRecord:edit', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenanceRecord:edit');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养记录删除', @maintenance_record_menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenanceRecord:remove', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenanceRecord:remove');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
SELECT '保养记录导出', @maintenance_record_menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'equipment:maintenanceRecord:export', '#', 'admin', NOW(), ''
FROM DUAL WHERE @maintenance_record_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'equipment:maintenanceRecord:export');

View File

@@ -0,0 +1,133 @@
-- =====================================================
-- 技术建议探讨优化 SQL
-- 作者: 周启威
-- 日期: 2026-01-14
-- 版本: v1.6.004
-- =====================================================
-- =====================================================
-- 1. 设备列表状态字典(核心、正常、停用、报废)
-- 说明复用equipment_status字典删除旧数据(关机/待机/运行中/故障),新增新数据
-- =====================================================
-- 1.1 删除旧的设备状态字典数据关机A、待机B、运行中C、故障D
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'equipment_status';
-- 1.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 (0, '核心', 'core', 'equipment_status', NULL, 'danger', 'N', '0', 'admin', NOW(), '核心设备');
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, '正常', 'normal', 'equipment_status', NULL, 'success', 'Y', '0', 'admin', NOW(), '正常使用设备');
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 (2, '停用', 'disabled', 'equipment_status', NULL, 'warning', 'N', '0', 'admin', NOW(), '停用设备');
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 (3, '报废', 'scrapped', 'equipment_status', NULL, 'info', 'N', '0', 'admin', NOW(), '报废设备');
-- =====================================================
-- 2. 点检结果字典(正常/异常)
-- 说明点检记录专用替代inspection_result中的正常/异常
-- =====================================================
-- 2.1 添加点检结果字典类型
INSERT IGNORE INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('点检结果', 'spotcheck_result', '0', 'admin', NOW(), '点检结果:正常/异常');
-- 2.2 添加点检结果字典数据
INSERT IGNORE 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 (0, '正常', 'normal', 'spotcheck_result', NULL, 'success', 'Y', '0', 'admin', NOW(), '点检正常');
INSERT IGNORE 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, '异常', 'abnormal', 'spotcheck_result', NULL, 'danger', 'N', '0', 'admin', NOW(), '点检异常');
-- =====================================================
-- 3. 巡检结果字典(合格/不合格)
-- 说明巡检记录专用替代inspection_result中的合格/不合格
-- =====================================================
-- 3.1 添加巡检结果字典类型
INSERT IGNORE INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('巡检结果', 'patrol_result', '0', 'admin', NOW(), '巡检结果:合格/不合格');
-- 3.2 添加巡检结果字典数据
INSERT IGNORE 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 (0, '合格', 'qualified', 'patrol_result', NULL, 'success', 'Y', '0', 'admin', NOW(), '巡检合格');
INSERT IGNORE 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, '不合格', 'unqualified', 'patrol_result', NULL, 'danger', 'N', '0', 'admin', NOW(), '巡检不合格');
-- =====================================================
-- 4. 设备维修明细来源字段
-- =====================================================
-- 4.1 添加设备维修明细来源字典类型
INSERT IGNORE INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('维修明细来源', 'repair_entry_source', '0', 'admin', NOW(), '设备维修明细来源:点检/巡检/手动添加');
-- 4.2 添加设备维修明细来源字典数据
INSERT IGNORE 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 (0, '点检', 'spotcheck', 'repair_entry_source', NULL, 'success', 'N', '0', 'admin', NOW(), '来源于点检');
INSERT IGNORE 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, '巡检', 'inspection', 'repair_entry_source', NULL, 'primary', 'N', '0', 'admin', NOW(), '来源于巡检');
INSERT IGNORE 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 (2, '手动添加', 'manual', 'repair_entry_source', NULL, 'info', 'Y', '0', 'admin', NOW(), '手动添加');
-- 4.3 设备维修明细表添加来源字段
SET @dbname = DATABASE();
SET @tablename = 'dm_repair_order_entry';
-- 添加 source_type 字段
SET @columnname = 'source_type';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' VARCHAR(32) DEFAULT ''manual'' COMMENT ''来源类型spotcheck-点检, inspection-巡检, manual-手动添加''')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- 添加 source_record_id 字段
SET @columnname = 'source_record_id';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''来源记录ID点检/巡检记录ID''')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- =====================================================
-- 回滚脚本(如需回滚请执行以下语句)
-- =====================================================
/*
-- 删除设备列表状态字典
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'equipment_list_status';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'equipment_list_status';
-- 删除点检结果字典
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'spotcheck_result';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'spotcheck_result';
-- 删除巡检结果字典
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'patrol_result';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'patrol_result';
-- 删除维修明细来源字典
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'repair_entry_source';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'repair_entry_source';
-- 删除维修明细表来源字段
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `source_type`;
ALTER TABLE `dm_repair_order_entry` DROP COLUMN `source_record_id`;
*/
-- =====================================================
-- 5. 点检/巡检/保养频率字典标签更新
-- 说明更新inspection_plan_frequency字典的label添加具体执行时间
-- =====================================================
UPDATE `sys_dict_data` SET `dict_label` = '每日9点' WHERE `dict_type` = 'inspection_plan_frequency' AND `dict_value` = 'daily';
UPDATE `sys_dict_data` SET `dict_label` = '每周一14点' WHERE `dict_type` = 'inspection_plan_frequency' AND `dict_value` = 'weekly';
UPDATE `sys_dict_data` SET `dict_label` = '每月第一周周一14点' WHERE `dict_type` = 'inspection_plan_frequency' AND `dict_value` = 'monthly';
UPDATE `sys_dict_data` SET `dict_label` = '每季度第一周周一14点' WHERE `dict_type` = 'inspection_plan_frequency' AND `dict_value` = 'quarterly';
UPDATE `sys_dict_data` SET `dict_label` = '每年第一周周一14点' WHERE `dict_type` = 'inspection_plan_frequency' AND `dict_value` = 'yearly';

View File

@@ -0,0 +1,31 @@
-- =============================================
-- FIIH质检数据导入导出权限配置
-- 功能为FIIH质检配置页面添加数据导入和导出按钮权限
-- =============================================
-- 获取fiihupgrade质检配置菜单的ID
SET @parent_menu_id = (SELECT menu_id FROM sys_menu WHERE perms = 'fiihupgrade:config:list' LIMIT 1);
-- 如果找不到,尝试通过菜单名称查找
SET @parent_menu_id = IFNULL(@parent_menu_id, (SELECT menu_id FROM sys_menu WHERE menu_name = '质检配置' AND path = 'mes/fiihupgrade/index' LIMIT 1));
-- 添加数据导入权限按钮
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
SELECT '数据导入', @parent_menu_id, 10, '', NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:data:import', '#', 'admin', NOW(), 'FIIH质检数据导入'
WHERE @parent_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'fiihupgrade:data:import');
-- 添加数据导出权限按钮
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
SELECT '数据导出', @parent_menu_id, 11, '', NULL, 1, 0, 'F', '0', '0', 'fiihupgrade:data:export', '#', 'admin', NOW(), 'FIIH质检数据导出'
WHERE @parent_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'fiihupgrade:data:export');
-- 为管理员角色分配新权限假设管理员角色ID为1
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 1, menu_id FROM sys_menu WHERE perms = 'fiihupgrade:data:import'
AND NOT EXISTS (SELECT 1 FROM sys_role_menu WHERE role_id = 1 AND menu_id = (SELECT menu_id FROM sys_menu WHERE perms = 'fiihupgrade:data:import'));
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 1, menu_id FROM sys_menu WHERE perms = 'fiihupgrade:data:export'
AND NOT EXISTS (SELECT 1 FROM sys_role_menu WHERE role_id = 1 AND menu_id = (SELECT menu_id FROM sys_menu WHERE perms = 'fiihupgrade:data:export'));

View File

@@ -0,0 +1,242 @@
-- 先删除旧表(如果存在)
DROP TABLE IF EXISTS fiih_general_data;
DROP TABLE IF EXISTS fiih_general_config;
-- =====================================================
-- 配置表无必填项48个通道
-- =====================================================
CREATE TABLE fiih_general_config (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
fiih_object_name VARCHAR(50) DEFAULT NULL COMMENT '对象体名称',
fiih_object_desc VARCHAR(255) DEFAULT NULL COMMENT '对象说明',
fiih_link_id BIGINT DEFAULT NULL COMMENT '环节ID(单次环节/班次)',
fiih_link_name VARCHAR(100) DEFAULT NULL COMMENT '环节名称',
fiih_task_id BIGINT DEFAULT NULL COMMENT '任务ID(总体)',
fiih_task_name VARCHAR(100) DEFAULT NULL COMMENT '任务名称',
fiih_version VARCHAR(50) DEFAULT NULL COMMENT '任务版本号',
fiih_process VARCHAR(50) DEFAULT NULL COMMENT '任务流程记录',
fiih_status INT DEFAULT 1 COMMENT '任务状态1进行中 2完成 3作废',
fiih_start_time VARCHAR(255) DEFAULT NULL COMMENT '启用期(时间段或文字描述)',
fiih_end_time DATETIME DEFAULT NULL COMMENT '结束时间',
fiih_leader_id BIGINT DEFAULT NULL COMMENT '负责人ID',
fiih_leader_name VARCHAR(50) DEFAULT NULL COMMENT '负责人姓名',
fiih_approve_id BIGINT DEFAULT NULL COMMENT '批准人ID',
fiih_approve_name VARCHAR(50) DEFAULT NULL COMMENT '批准人姓名',
fiih_qr_file VARCHAR(255) DEFAULT NULL COMMENT '二维码路径',
fiih_overall_layout VARCHAR(255) DEFAULT NULL COMMENT '控件总体布局字符串',
fiih_rich_text TEXT DEFAULT NULL COMMENT '说明富文本',
fiih_info_json TEXT DEFAULT NULL COMMENT '信息属性JSON',
fiih_query_json TEXT DEFAULT NULL COMMENT '查询属性JSON',
fiih_check_standard TEXT DEFAULT NULL COMMENT '检测标准',
fiih_check_agency VARCHAR(255) DEFAULT NULL COMMENT '检测机构',
-- 48个配置通道
fiih_config_ch0 TEXT DEFAULT NULL COMMENT '分项0属性(JSON)',
fiih_config_ch1 TEXT DEFAULT NULL COMMENT '分项1属性(JSON)',
fiih_config_ch2 TEXT DEFAULT NULL COMMENT '分项2属性(JSON)',
fiih_config_ch3 TEXT DEFAULT NULL COMMENT '分项3属性(JSON)',
fiih_config_ch4 TEXT DEFAULT NULL COMMENT '分项4属性(JSON)',
fiih_config_ch5 TEXT DEFAULT NULL COMMENT '分项5属性(JSON)',
fiih_config_ch6 TEXT DEFAULT NULL COMMENT '分项6属性(JSON)',
fiih_config_ch7 TEXT DEFAULT NULL COMMENT '分项7属性(JSON)',
fiih_config_ch8 TEXT DEFAULT NULL COMMENT '分项8属性(JSON)',
fiih_config_ch9 TEXT DEFAULT NULL COMMENT '分项9属性(JSON)',
fiih_config_ch10 TEXT DEFAULT NULL COMMENT '分项10属性(JSON)',
fiih_config_ch11 TEXT DEFAULT NULL COMMENT '分项11属性(JSON)',
fiih_config_ch12 TEXT DEFAULT NULL COMMENT '分项12属性(JSON)',
fiih_config_ch13 TEXT DEFAULT NULL COMMENT '分项13属性(JSON)',
fiih_config_ch14 TEXT DEFAULT NULL COMMENT '分项14属性(JSON)',
fiih_config_ch15 TEXT DEFAULT NULL COMMENT '分项15属性(JSON)',
fiih_config_ch16 TEXT DEFAULT NULL COMMENT '分项16属性(JSON)',
fiih_config_ch17 TEXT DEFAULT NULL COMMENT '分项17属性(JSON)',
fiih_config_ch18 TEXT DEFAULT NULL COMMENT '分项18属性(JSON)',
fiih_config_ch19 TEXT DEFAULT NULL COMMENT '分项19属性(JSON)',
fiih_config_ch20 TEXT DEFAULT NULL COMMENT '分项20属性(JSON)',
fiih_config_ch21 TEXT DEFAULT NULL COMMENT '分项21属性(JSON)',
fiih_config_ch22 TEXT DEFAULT NULL COMMENT '分项22属性(JSON)',
fiih_config_ch23 TEXT DEFAULT NULL COMMENT '分项23属性(JSON)',
fiih_config_ch24 TEXT DEFAULT NULL COMMENT '分项24属性(JSON)',
fiih_config_ch25 TEXT DEFAULT NULL COMMENT '分项25属性(JSON)',
fiih_config_ch26 TEXT DEFAULT NULL COMMENT '分项26属性(JSON)',
fiih_config_ch27 TEXT DEFAULT NULL COMMENT '分项27属性(JSON)',
fiih_config_ch28 TEXT DEFAULT NULL COMMENT '分项28属性(JSON)',
fiih_config_ch29 TEXT DEFAULT NULL COMMENT '分项29属性(JSON)',
fiih_config_ch30 TEXT DEFAULT NULL COMMENT '分项30属性(JSON)',
fiih_config_ch31 TEXT DEFAULT NULL COMMENT '分项31属性(JSON)',
fiih_config_ch32 TEXT DEFAULT NULL COMMENT '分项32属性(JSON)',
fiih_config_ch33 TEXT DEFAULT NULL COMMENT '分项33属性(JSON)',
fiih_config_ch34 TEXT DEFAULT NULL COMMENT '分项34属性(JSON)',
fiih_config_ch35 TEXT DEFAULT NULL COMMENT '分项35属性(JSON)',
fiih_config_ch36 TEXT DEFAULT NULL COMMENT '分项36属性(JSON)',
fiih_config_ch37 TEXT DEFAULT NULL COMMENT '分项37属性(JSON)',
fiih_config_ch38 TEXT DEFAULT NULL COMMENT '分项38属性(JSON)',
fiih_config_ch39 TEXT DEFAULT NULL COMMENT '分项39属性(JSON)',
fiih_config_ch40 TEXT DEFAULT NULL COMMENT '分项40属性(JSON)',
fiih_config_ch41 TEXT DEFAULT NULL COMMENT '分项41属性(JSON)',
fiih_config_ch42 TEXT DEFAULT NULL COMMENT '分项42属性(JSON)',
fiih_config_ch43 TEXT DEFAULT NULL COMMENT '分项43属性(JSON)',
fiih_config_ch44 TEXT DEFAULT NULL COMMENT '分项44属性(JSON)',
fiih_config_ch45 TEXT DEFAULT NULL COMMENT '分项45属性(JSON)',
fiih_config_ch46 TEXT DEFAULT NULL COMMENT '分项46属性(JSON)',
fiih_config_ch47 TEXT DEFAULT NULL COMMENT '分项47属性(JSON)',
-- 附件
fiih_file1 VARCHAR(255) DEFAULT NULL COMMENT '附件1检测依据GB',
fiih_file2 VARCHAR(255) DEFAULT NULL COMMENT '附件2检测工艺',
fiih_file3 VARCHAR(255) DEFAULT NULL COMMENT '附件3公章',
fiih_file4 VARCHAR(255) DEFAULT NULL COMMENT '附件4检测报告',
fiih_file5 VARCHAR(255) DEFAULT NULL COMMENT '附件5声明或其他',
-- 系统字段
create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
tenant_id BIGINT DEFAULT 1 COMMENT '租户ID',
PRIMARY KEY (id),
KEY idx_task_id (fiih_task_id),
KEY idx_link_id (fiih_link_id),
KEY idx_tenant_id (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='FIIH通用质检配置表';
-- =====================================================
-- 数据表无必填项48个通道
-- =====================================================
CREATE TABLE fiih_general_data (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
config_id BIGINT DEFAULT NULL COMMENT '关联配置ID',
fiih_report_no VARCHAR(100) DEFAULT NULL COMMENT '报告编号',
fiih_object_name VARCHAR(50) DEFAULT NULL COMMENT '对象体名称',
fiih_object_spec VARCHAR(100) DEFAULT NULL COMMENT '对象体规格',
fiih_link_id BIGINT DEFAULT NULL COMMENT '环节ID',
fiih_link_name VARCHAR(100) DEFAULT NULL COMMENT '环节名称/工序名称',
fiih_task_id BIGINT DEFAULT NULL COMMENT '任务ID',
fiih_task_name VARCHAR(100) DEFAULT NULL COMMENT '任务名称',
fiih_version VARCHAR(50) DEFAULT NULL COMMENT '任务版本号',
fiih_process VARCHAR(50) DEFAULT NULL COMMENT '任务流程记录',
fiih_status INT DEFAULT 1 COMMENT '任务状态1进行中 2完成 3作废',
fiih_production_unit VARCHAR(100) DEFAULT NULL COMMENT '生产单位',
fiih_sample_time DATETIME DEFAULT NULL COMMENT '取样时间',
fiih_collect_time DATETIME DEFAULT NULL COMMENT '采集时间/日期',
fiih_data_json TEXT DEFAULT NULL COMMENT '原始数据JSON',
fiih_data_analysis TEXT DEFAULT NULL COMMENT '分析结果',
fiih_data_complex TEXT DEFAULT NULL COMMENT '复杂数据',
fiih_check_standard TEXT DEFAULT NULL COMMENT '检测标准/检验方法',
fiih_check_agency VARCHAR(255) DEFAULT NULL COMMENT '检测机构',
fiih_qc_result VARCHAR(50) DEFAULT NULL COMMENT '质检结论',
fiih_bad_reason TEXT DEFAULT NULL COMMENT '不良原因/不合格处理方法',
fiih_related_order_no VARCHAR(100) DEFAULT NULL COMMENT '关联单号',
fiih_leader_name VARCHAR(50) DEFAULT NULL COMMENT '操作工/负责人姓名',
-- 48个数据通道
fiih_data_ch0 VARCHAR(255) DEFAULT NULL COMMENT '数据0(首检)',
fiih_data_ch1 VARCHAR(255) DEFAULT NULL COMMENT '数据1(巡检第1次)',
fiih_data_ch2 VARCHAR(255) DEFAULT NULL COMMENT '数据2(巡检第2次)',
fiih_data_ch3 VARCHAR(255) DEFAULT NULL COMMENT '数据3(巡检第3次)',
fiih_data_ch4 VARCHAR(255) DEFAULT NULL COMMENT '数据4',
fiih_data_ch5 VARCHAR(255) DEFAULT NULL COMMENT '数据5',
fiih_data_ch6 VARCHAR(255) DEFAULT NULL COMMENT '数据6',
fiih_data_ch7 VARCHAR(255) DEFAULT NULL COMMENT '数据7',
fiih_data_ch8 VARCHAR(255) DEFAULT NULL COMMENT '数据8',
fiih_data_ch9 VARCHAR(255) DEFAULT NULL COMMENT '数据9',
fiih_data_ch10 VARCHAR(255) DEFAULT NULL COMMENT '数据10',
fiih_data_ch11 VARCHAR(255) DEFAULT NULL COMMENT '数据11',
fiih_data_ch12 VARCHAR(255) DEFAULT NULL COMMENT '数据12',
fiih_data_ch13 VARCHAR(255) DEFAULT NULL COMMENT '数据13',
fiih_data_ch14 VARCHAR(255) DEFAULT NULL COMMENT '数据14',
fiih_data_ch15 VARCHAR(255) DEFAULT NULL COMMENT '数据15',
fiih_data_ch16 VARCHAR(255) DEFAULT NULL COMMENT '数据16',
fiih_data_ch17 VARCHAR(255) DEFAULT NULL COMMENT '数据17',
fiih_data_ch18 VARCHAR(255) DEFAULT NULL COMMENT '数据18',
fiih_data_ch19 VARCHAR(255) DEFAULT NULL COMMENT '数据19',
fiih_data_ch20 VARCHAR(255) DEFAULT NULL COMMENT '数据20',
fiih_data_ch21 VARCHAR(255) DEFAULT NULL COMMENT '数据21',
fiih_data_ch22 VARCHAR(255) DEFAULT NULL COMMENT '数据22',
fiih_data_ch23 VARCHAR(255) DEFAULT NULL COMMENT '数据23',
fiih_data_ch24 VARCHAR(255) DEFAULT NULL COMMENT '数据24',
fiih_data_ch25 VARCHAR(255) DEFAULT NULL COMMENT '数据25',
fiih_data_ch26 VARCHAR(255) DEFAULT NULL COMMENT '数据26',
fiih_data_ch27 VARCHAR(255) DEFAULT NULL COMMENT '数据27',
fiih_data_ch28 VARCHAR(255) DEFAULT NULL COMMENT '数据28',
fiih_data_ch29 VARCHAR(255) DEFAULT NULL COMMENT '数据29',
fiih_data_ch30 VARCHAR(255) DEFAULT NULL COMMENT '数据30',
fiih_data_ch31 VARCHAR(255) DEFAULT NULL COMMENT '数据31',
fiih_data_ch32 VARCHAR(255) DEFAULT NULL COMMENT '数据32',
fiih_data_ch33 VARCHAR(255) DEFAULT NULL COMMENT '数据33',
fiih_data_ch34 VARCHAR(255) DEFAULT NULL COMMENT '数据34',
fiih_data_ch35 VARCHAR(255) DEFAULT NULL COMMENT '数据35',
fiih_data_ch36 VARCHAR(255) DEFAULT NULL COMMENT '数据36',
fiih_data_ch37 VARCHAR(255) DEFAULT NULL COMMENT '数据37',
fiih_data_ch38 VARCHAR(255) DEFAULT NULL COMMENT '数据38',
fiih_data_ch39 VARCHAR(255) DEFAULT NULL COMMENT '数据39',
fiih_data_ch40 VARCHAR(255) DEFAULT NULL COMMENT '数据40',
fiih_data_ch41 VARCHAR(255) DEFAULT NULL COMMENT '数据41',
fiih_data_ch42 VARCHAR(255) DEFAULT NULL COMMENT '数据42',
fiih_data_ch43 VARCHAR(255) DEFAULT NULL COMMENT '数据43',
fiih_data_ch44 VARCHAR(255) DEFAULT NULL COMMENT '数据44',
fiih_data_ch45 VARCHAR(255) DEFAULT NULL COMMENT '数据45',
fiih_data_ch46 VARCHAR(255) DEFAULT NULL COMMENT '数据46',
fiih_data_ch47 VARCHAR(255) DEFAULT NULL COMMENT '数据47',
-- 其他字段
fiih_related_report VARCHAR(255) DEFAULT NULL COMMENT '相关报告',
-- 系统字段
create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人/检验人员',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
audit_by VARCHAR(64) DEFAULT NULL COMMENT '审核人',
audit_time DATETIME DEFAULT NULL COMMENT '审核时间',
tenant_id BIGINT DEFAULT 1 COMMENT '租户ID',
PRIMARY KEY (id),
KEY idx_config_id (config_id),
KEY idx_task_id (fiih_task_id),
KEY idx_link_id (fiih_link_id),
KEY idx_collect_time (fiih_collect_time),
KEY idx_tenant_id (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='FIIH通用质检数据表';
-- =====================================================
-- 升级脚本如果表已存在添加config_id字段
-- =====================================================
-- ALTER TABLE fiih_general_data ADD COLUMN config_id BIGINT DEFAULT NULL COMMENT '关联配置ID' AFTER id;
-- ALTER TABLE fiih_general_data ADD KEY idx_config_id (config_id);
-- =====================================================
-- 菜单配置
-- =====================================================
-- 插入FIIH通用父菜单目录
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES ('FIIH通用', 0, 10, 'fiihgeneral', NULL, NULL, 1, 0, 'M', '0', '0', '', 'form', 'admin', NOW(), '', NULL, 'FIIH通用质检管理');
-- 获取父菜单ID
SET @fiihGeneralParentId = LAST_INSERT_ID();
-- 插入配置管理菜单
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES ('配置管理', @fiihGeneralParentId, 1, 'config', 'mes/fiihgeneral/config', NULL, 1, 0, 'C', '0', '0', 'mes:fiihgeneral:config:list', 'edit', 'admin', NOW(), '', NULL, 'FIIH通用配置管理');
-- 获取配置管理菜单ID
SET @fiihGeneralConfigMenuId = LAST_INSERT_ID();
-- 插入数据页面菜单(隐藏,仅用于路由)
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES ('数据页面', @fiihGeneralParentId, 2, 'data', 'mes/fiihgeneral/index', NULL, 1, 0, 'C', '1', '0', 'mes:fiihgeneral:data:list', 'table', 'admin', NOW(), '', NULL, 'FIIH通用数据页面隐藏');
-- 获取数据页面菜单ID
SET @fiihGeneralDataMenuId = LAST_INSERT_ID();
-- 插入配置管理按钮权限
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES
('配置查询', @fiihGeneralConfigMenuId, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:config:query', '#', 'admin', NOW(), '', NULL, ''),
('配置新增', @fiihGeneralConfigMenuId, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:config:add', '#', 'admin', NOW(), '', NULL, ''),
('配置修改', @fiihGeneralConfigMenuId, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:config:edit', '#', 'admin', NOW(), '', NULL, ''),
('配置删除', @fiihGeneralConfigMenuId, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:config:remove', '#', 'admin', NOW(), '', NULL, ''),
('配置导出', @fiihGeneralConfigMenuId, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:config:export', '#', 'admin', NOW(), '', NULL, ''),
('配置导入', @fiihGeneralConfigMenuId, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:config:import', '#', 'admin', NOW(), '', NULL, ''),
('查看数据', @fiihGeneralConfigMenuId, 7, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:data:list', '#', 'admin', NOW(), '', NULL, '');
-- 插入数据页面按钮权限
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES
('数据新增', @fiihGeneralDataMenuId, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:data:add', '#', 'admin', NOW(), '', NULL, ''),
('数据修改', @fiihGeneralDataMenuId, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:data:edit', '#', 'admin', NOW(), '', NULL, ''),
('数据删除', @fiihGeneralDataMenuId, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:data:remove', '#', 'admin', NOW(), '', NULL, ''),
('数据导出', @fiihGeneralDataMenuId, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:data:export', '#', 'admin', NOW(), '', NULL, ''),
('数据导入', @fiihGeneralDataMenuId, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'mes:fiihgeneral:data:import', '#', 'admin', NOW(), '', NULL, '');

View File

@@ -0,0 +1,13 @@
-- =====================================================
-- 设备状态页面新增OEE和报工按钮权限
-- 说明:为设备状态(index.vue)和设备列表(indexLibiao.vue)页面的OEE和报工按钮添加权限控制
-- 父菜单:设备状态(menu_id=2205)
-- =====================================================
-- 新增"查看OEE"按钮权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('查看OEE', 2205, 6, '', '', '', 1, 0, 'F', '0', '0', 'equipment:equipment:oee', '#', 'admin', NOW(), '', NOW(), '设备状态/设备列表-查看OEE按钮');
-- 新增"跳转报工"按钮权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('跳转报工', 2205, 7, '', '', '', 1, 0, 'F', '0', '0', 'equipment:equipment:report', '#', 'admin', NOW(), '', NOW(), '设备状态/设备列表-跳转报工按钮');

View File

@@ -0,0 +1,25 @@
-- =====================================================
-- 生产报表模块 - 菜单及权限配置
-- 版本: v1.6.014
-- 日期: 2026-01-17
-- 开发者: 周启威
-- 说明: 新增生产报表功能,用于统计产量、合格率、工时等数据
-- 父菜单: 首页(parent_id=0),作为一级菜单
-- =====================================================
-- 1. 新增"生产报表"菜单 (M类型-目录菜单,与首页同级,排在首页后面)
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('生产报表', 0, 1, 'productionStatement', 'mes/statement/productionStatement/index', NULL, 1, 0, 'M', '0', '0', 'statement:productionStatement:list', 'chart', 'admin', NOW(), '', NOW(), '生产报表-统计产量、合格率、工时等');
-- 获取刚插入的菜单ID (用于后续按钮权限的parent_id)
SET @productionStatementMenuId = LAST_INSERT_ID();
-- 2. 新增"导出"按钮权限 (F类型-按钮权限)
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('导出报表', @productionStatementMenuId, 1, '', '', '', 1, 0, 'F', '0', '0', 'statement:productionStatement:export', '#', 'admin', NOW(), '', NOW(), '生产报表-导出功能');
-- =====================================================
-- 回滚脚本 (如需回滚执行以下SQL)
-- =====================================================
-- DELETE FROM sys_menu WHERE perms = 'statement:productionStatement:export';
-- DELETE FROM sys_menu WHERE perms = 'statement:productionStatement:list';

View File

@@ -0,0 +1,56 @@
-- =============================================
-- 保养计划优化 - 频率改为计划执行时间
-- 作者: Cascade
-- 日期: 2026-01-20
-- 描述:
-- 1. 添加计划执行时间字段(planned_time)替代频率
-- 2. 修改状态字段含义0待执行/1已执行/2已取消
-- 3. 执行一次计划就结束,不再循环
-- =============================================
-- =============================================
-- 一、扩展表结构
-- =============================================
SET @dbname = DATABASE();
SET @tablename = 'dm_inspection_plan';
-- 1.1 添加 planned_time 字段(计划执行时间)
SET @columnname = 'planned_time';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' DATETIME DEFAULT NULL COMMENT ''计划执行时间'' AFTER `end_date`')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- =============================================
-- 二、更新字典数据
-- =============================================
-- 2.1 新增保养计划状态字典类型
INSERT IGNORE INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('保养计划状态', 'maintenance_plan_status', '0', 'admin', NOW(), '保养计划状态:待执行/已执行/已取消');
-- 2.2 保养计划状态字典数据
INSERT IGNORE 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 (0, '待执行', '0', 'maintenance_plan_status', NULL, 'warning', 'Y', '0', 'admin', NOW(), '待执行');
INSERT IGNORE 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, '已执行', '1', 'maintenance_plan_status', NULL, 'success', 'N', '0', 'admin', NOW(), '已执行');
INSERT IGNORE 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 (2, '已取消', '2', 'maintenance_plan_status', NULL, 'info', 'N', '0', 'admin', NOW(), '已取消');
-- =============================================
-- 三、回退SQL
-- =============================================
/*
-- 删除字典数据
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'maintenance_plan_status';
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'maintenance_plan_status';
-- 删除扩展字段
ALTER TABLE `dm_inspection_plan` DROP COLUMN `planned_time`;
*/

View File

@@ -0,0 +1,10 @@
-- =============================================
-- 功能: 支持手动修改设备OEE
-- 版本: v1.6.020
-- 作者: 周启威
-- 日期: 2026-01-20
-- =============================================
-- 在device表添加手动OEE相关字段
ALTER TABLE `device` ADD COLUMN `manual_oee` DECIMAL(5,2) DEFAULT NULL COMMENT '手动设置的OEE值(百分比)';
ALTER TABLE `device` ADD COLUMN `use_manual_oee` TINYINT(1) DEFAULT 0 COMMENT '是否使用手动OEE(0=否,使用系统计算; 1=是,使用手动值)';

View File

@@ -0,0 +1 @@
ALTER TABLE fiih_qc_data ADD COLUMN attachment VARCHAR(1000) COMMENT '附件';

View File

@@ -0,0 +1,51 @@
/*
Navicat Premium Dump SQL
Source Server : 119.96.62.56_MES
Source Server Type : MySQL
Source Server Version : 80020 (8.0.20)
Source Host : 119.96.62.56:3306
Source Schema : yjh_mes_test_latest
Target Server Type : MySQL
Target Server Version : 80020 (8.0.20)
File Encoding : 65001
Date: 26/01/2026 13:49:03
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for safe_hazard_source
-- ----------------------------
DROP TABLE IF EXISTS `safe_hazard_source`;
CREATE TABLE `safe_hazard_source` (
`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id',
`code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '危险源编号',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '危险源名称',
`hazard_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型',
`risk_level` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '风险等级',
`location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '位置',
`registration_time` datetime NULL DEFAULT NULL COMMENT '登记时间',
`image_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '危险源图片url',
`department` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '责任部门',
`responsible_person` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '责任人',
`responsible_phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '责任人电话',
`control_measures` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '管控措施',
`emergency_plan` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '应急处置要点',
`status` tinyint NULL DEFAULT 0 COMMENT '状态enable/disable',
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '评价',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`updater` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint NULL DEFAULT 0 COMMENT '逻辑删除',
`tenant_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '租户id',
`equ_id` bigint NULL DEFAULT NULL COMMENT '设备id',
`equ_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '设备名称',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '危险源信息表' ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1,43 @@
/*
Navicat Premium Dump SQL
Source Server : 119.96.62.56_MES
Source Server Type : MySQL
Source Server Version : 80020 (8.0.20)
Source Host : 119.96.62.56:3306
Source Schema : yjh_mes_test_latest
Target Server Type : MySQL
Target Server Version : 80020 (8.0.20)
File Encoding : 65001
Date: 26/01/2026 13:48:48
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for safe_officer
-- ----------------------------
DROP TABLE IF EXISTS `safe_officer`;
CREATE TABLE `safe_officer` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '安全员ID',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '安全员姓名',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系电话',
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱',
`department` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所属部门',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'active' COMMENT '状态active-在职inactive-离职',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
`deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
`tenant_id` int NULL DEFAULT NULL COMMENT '租户',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_name`(`name` ASC) USING BTREE,
INDEX `idx_department`(`department` ASC) USING BTREE,
INDEX `idx_status`(`status` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '安全员表' ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1,43 @@
/*
Navicat Premium Dump SQL
Source Server : 119.96.62.56_MES
Source Server Type : MySQL
Source Server Version : 80020 (8.0.20)
Source Host : 119.96.62.56:3306
Source Schema : yjh_mes_test_latest
Target Server Type : MySQL
Target Server Version : 80020 (8.0.20)
File Encoding : 65001
Date: 26/01/2026 13:49:24
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for safe_compliance_item
-- ----------------------------
DROP TABLE IF EXISTS `safe_compliance_item`;
CREATE TABLE `safe_compliance_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '合规项ID主键',
`code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '合规项编码(唯一标识,如 AQ-001。对外展示时优先使用',
`name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规则名称。如隐患必须在7日内整改',
`category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '合规类别。如:隐患整改、隐患排查、重大危险源',
`deadline_days` int NULL DEFAULT NULL COMMENT '整改期限(天)。当某隐患违反本规则时,用于计算整改截止时间 due_timecreate_time + deadline_days',
`evidence_required` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否必须上传整改证据1-必须0-不必须。用于校验整改是否合规',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'enabled' COMMENT '规则状态enabled-启用disabled-停用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
`deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0-未删除1-已删除',
`tenant_id` int NULL DEFAULT NULL COMMENT '租户ID',
`risk_level` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '风险等级dangerwarningsuccess',
`attachments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '附件上传地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '安全合规项表' ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1,46 @@
/*
Navicat Premium Dump SQL
Source Server : 119.96.62.56_MES
Source Server Type : MySQL
Source Server Version : 80020 (8.0.20)
Source Host : 119.96.62.56:3306
Source Schema : yjh_mes_test_latest
Target Server Type : MySQL
Target Server Version : 80020 (8.0.20)
File Encoding : 65001
Date: 26/01/2026 13:49:36
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for safe_compliance_issue
-- ----------------------------
DROP TABLE IF EXISTS `safe_compliance_issue`;
CREATE TABLE `safe_compliance_issue` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '合规问题ID',
`item_id` bigint NULL DEFAULT NULL COMMENT '合规项ID后补',
`title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '问题标题',
`description` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '问题描述',
`source_type` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '来源类型danger_report/inspection/manual/system',
`source_id` bigint NOT NULL COMMENT '来源业务ID如 safe_danger_report.id',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'open' COMMENT '状态todo/doing/done',
`responsible_officer_id` bigint NULL DEFAULT NULL COMMENT '整改责任安全员ID',
`due_time` datetime NULL DEFAULT NULL COMMENT '整改截止时间',
`evidence_url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '整改证据URL',
`close_time` datetime NULL DEFAULT NULL COMMENT '关闭时间',
`close_result` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '关闭说明',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
`deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
`tenant_id` int NULL DEFAULT NULL COMMENT '租户ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '安全合规问题' ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1,51 @@
/*
Navicat Premium Dump SQL
Source Server : 119.96.62.56_MES
Source Server Type : MySQL
Source Server Version : 80020 (8.0.20)
Source Host : 119.96.62.56:3306
Source Schema : yjh_mes_test_latest
Target Server Type : MySQL
Target Server Version : 80020 (8.0.20)
File Encoding : 65001
Date: 26/01/2026 13:49:13
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for safe_danger_report
-- ----------------------------
DROP TABLE IF EXISTS `safe_danger_report`;
CREATE TABLE `safe_danger_report` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '隐患ID',
`discoverer` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发现人',
`danger_source_id` bigint NOT NULL DEFAULT 0 COMMENT '危险源ID',
`danger_source` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '危险员信息',
`discover_time` datetime NOT NULL COMMENT '发现时间',
`location` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '隐患位置',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '问题描述',
`safety_officer` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '安全员',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'pending' COMMENT '状态pending-待处理processing-处理中completed-已处理closed-已关闭',
`images` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '现场照片JSON数组',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
`deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
`tenant_id` int NULL DEFAULT NULL COMMENT '租户',
`item_id` bigint NULL DEFAULT NULL COMMENT '安全合规Id',
`item_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '安全合规项name',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_discoverer`(`discoverer` ASC) USING BTREE,
INDEX `idx_safety_officer`(`safety_officer` ASC) USING BTREE,
INDEX `idx_discover_time`(`discover_time` ASC) USING BTREE,
INDEX `idx_status`(`status` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '隐患上报表' ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1,80 @@
-- =============================================
-- 物料优化 - 添加SPU类型码
-- 版本: v1.6.028
-- 作者: 周启威
-- 日期: 2026-01-26
-- 说明:
-- 1. 新增SPU类型码字典
-- 2. 在物料分类表中添加SPU类型码字段关联字典
-- 3. 物料编号可根据SPU类型码自动生成前缀
-- =============================================
-- ========== 1. 新增SPU类型码字典类型 ==========
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('SPU类型码', 'spu_type_code', '0', 'admin', NOW(), '物料分类SPU类型码用于生成物料编号前缀');
-- ========== 2. 新增SPU类型码字典数据 ==========
-- 字典值为类型码,字典标签为类型码+说明
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, 'CP-成品', 'CP', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '成品类物料'),
(2, 'YL-原料', 'YL', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '农产品原料'),
(3, 'BZ-包装物', 'BZ', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '包装物料'),
(4, 'DQ-电气仪表', 'DQ', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '电气仪表类'),
(5, 'GJ-工器具', 'GJ', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '工器具、家具'),
(6, 'HY-化验类', 'HY', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '化验类物料'),
(7, 'LB-劳保', 'LB', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '劳保用品'),
(8, 'NC-农产品成品', 'NC', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '农产品成品'),
(9, 'PJ-配件类', 'PJ', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '配件类物料'),
(10, 'YH-易耗类', 'YH', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '易耗类物料'),
(11, 'YO-油料', 'YO', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '油料'),
(12, 'YF-原辅料', 'YF', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '原辅料'),
(13, 'HC-耗材', 'HC', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '耗材类物料');
-- ========== 3. 物料分类表添加SPU类型码字段 ==========
ALTER TABLE `md_material_class`
ADD COLUMN `spu_type_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'SPU类型码关联字典spu_type_code' AFTER `name`;
-- ========== 当前SPU类型码字典列表便于查看和维护 ==========
/*
+------+------------------+-------+------------------+
| 序号 | 字典标签 | 值 | 说明 |
+------+------------------+-------+------------------+
| 1 | CP-成品 | CP | 成品类物料 |
| 2 | YL-原料 | YL | 农产品原料 |
| 3 | BZ-包装物 | BZ | 包装物料 |
| 4 | DQ-电气仪表 | DQ | 电气仪表类 |
| 5 | GJ-工器具 | GJ | 工器具、家具 |
| 6 | HY-化验类 | HY | 化验类物料 |
| 7 | LB-劳保 | LB | 劳保用品 |
| 8 | NC-农产品成品 | NC | 农产品成品 |
| 9 | PJ-配件类 | PJ | 配件类物料 |
| 10 | YH-易耗类 | YH | 易耗类物料 |
| 11 | YO-油料 | YO | 油料 |
| 12 | YF-原辅料 | YF | 原辅料 |
| 13 | HC-耗材 | HC | 耗材类物料 |
+------+------------------+-------+------------------+
新增SPU类型码
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 (14, 'XX-新类型', 'XX', 'spu_type_code', '', 'default', 'N', '0', 'admin', NOW(), '新类型说明');
修改SPU类型码
UPDATE `sys_dict_data` SET `dict_label` = 'XX-新标签', `remark` = '新说明'
WHERE `dict_type` = 'spu_type_code' AND `dict_value` = 'XX';
删除SPU类型码
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'spu_type_code' AND `dict_value` = 'XX';
*/
-- ========== 回滚脚本(如需回滚执行以下语句) ==========
/*
-- 删除物料分类表的SPU类型码字段
ALTER TABLE `md_material_class` DROP COLUMN `spu_type_code`;
-- 删除SPU类型码字典数据
DELETE FROM `sys_dict_data` WHERE `dict_type` = 'spu_type_code';
-- 删除SPU类型码字典类型
DELETE FROM `sys_dict_type` WHERE `dict_type` = 'spu_type_code';
*/

View File

@@ -0,0 +1,28 @@
SET @dbname = DATABASE();
SET @tablename = 'dm_repair_order_entry';
SET @columnname = 'item_id';
-- 修改 item_id 字段允许为空
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
CONCAT('ALTER TABLE ', @tablename, ' MODIFY COLUMN ', @columnname, ' BIGINT DEFAULT NULL COMMENT ''项目ID可选'''),
'SELECT 1'
));
PREPARE alterIfExists FROM @preparedStatement;
EXECUTE alterIfExists;
DEALLOCATE PREPARE alterIfExists;
SET @dbname = DATABASE();
SET @tablename = 'dm_repair_order_entry';
SET @columnname = 'item_name';
-- 修改 item_name 字段允许为空(避免保存维修单明细时报 NOT NULL 约束异常)
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
CONCAT('ALTER TABLE ', @tablename, ' MODIFY COLUMN ', @columnname, ' VARCHAR(64) DEFAULT NULL COMMENT ''项目名称(可选)'''),
'SELECT 1'
));
PREPARE alterIfExists FROM @preparedStatement;
EXECUTE alterIfExists;
DEALLOCATE PREPARE alterIfExists;

View File

@@ -0,0 +1,38 @@
-- =====================================================
-- 采购入库单优化、供应商管理优化
-- 日期: 2026-01-26
-- 作者: 周启威
-- 版本: v1.6.029
-- =====================================================
-- -----------------------------------------------------
-- 1. 采购入库单子表增加用途字段(在金额后面)
-- -----------------------------------------------------
ALTER TABLE `wm_procure_into_entry`
ADD COLUMN `purpose` VARCHAR(500) DEFAULT NULL COMMENT '用途' AFTER `total_price`;
-- -----------------------------------------------------
-- 2. 供应商表增加联系人职位字段
-- -----------------------------------------------------
ALTER TABLE `md_supplier`
ADD COLUMN `contacts_position` VARCHAR(64) DEFAULT NULL COMMENT '联系人1职位' AFTER `contacts`,
ADD COLUMN `contactsb_position` VARCHAR(64) DEFAULT NULL COMMENT '联系人2职位' AFTER `contactsb`;
-- -----------------------------------------------------
-- 3. 创建供应商信用评价子表
-- -----------------------------------------------------
DROP TABLE IF EXISTS `md_supplier_credit`;
CREATE TABLE `md_supplier_credit` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`supplier_id` BIGINT NOT NULL COMMENT '供应商ID',
`evaluation_time` DATETIME NOT NULL COMMENT '评价时间',
`record` VARCHAR(1000) DEFAULT NULL COMMENT '记事',
`score` DECIMAL(5,2) DEFAULT NULL COMMENT '评分',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(32) NOT NULL COMMENT '创建人',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`update_by` VARCHAR(32) DEFAULT NULL COMMENT '更新人',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_supplier_id`(`supplier_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '供应商信用评价表' ROW_FORMAT = DYNAMIC;

View File

@@ -0,0 +1,22 @@
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2608, '用煤量查询', 2597, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:coalconsumption:query', '', 'admin', '2026-01-20 10:04:29', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2607, '能源删除', 2590, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:coal:delete', '', 'admin', '2026-01-20 10:03:45', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2606, '能源编辑', 2590, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:coal:edit', '', 'admin', '2026-01-20 10:02:59', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2605, '能源新增', 2590, 0, '', '', NULL, 1, 0, 'F', '0', '0', 'energy:coal:create', '', 'admin', '2026-01-20 10:02:11', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2604, '能源查询', 2590, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:coal:query', '', 'admin', '2026-01-20 10:01:16', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2603, '用电量查询', 2596, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:electricityconsumption:query', '', 'admin', '2026-01-20 10:00:24', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2602, '用水量查询', 2589, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:waterconsumption:query', '', 'admin', '2026-01-20 09:58:38', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2601, '电表删除', 2589, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:electricity:delete', '', 'admin', '2026-01-20 09:57:44', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2600, '电表编辑', 2589, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:electricity:update', '', 'admin', '2026-01-20 09:56:53', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2599, '电表新增', 2589, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:electricity:create', '', 'admin', '2026-01-20 09:56:10', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2598, '电表查询', 2589, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:electricity:query', '', 'admin', '2026-01-20 09:55:23', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2597, '用煤量', 2587, 0, 'coalconsumption', 'energy/coal/consumption', NULL, 1, 0, 'C', '0', '0', NULL, 'ep:histogram', 'admin', '2026-01-19 17:51:42', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2596, '用电量', 2587, 0, 'electricityconsumption', 'energy/electricity/consumption', NULL, 1, 0, 'C', '0', '0', NULL, 'fa-solid:car-battery', 'admin', '2026-01-19 17:50:27', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2595, '用水量', 2587, 0, 'waterconsumption', 'energy/water/consumption', NULL, 1, 0, 'C', '0', '0', NULL, 'fa-solid:hand-holding-water', 'admin', '2026-01-19 17:48:22', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2594, '水表删除', 2588, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:water-monitoring:delete', '', 'admin', '2026-01-19 17:42:50', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2593, '水表编辑', 2588, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:water-monitoring:update', '', 'admin', '2026-01-19 17:42:06', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2592, '水表新增', 2588, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:water-monitoring:create', '', 'admin', '2026-01-19 17:40:47', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2591, '水表查询', 2588, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'energy:water-monitoring:query', '', 'admin', '2026-01-19 17:39:05', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2590, '能源监测', 2587, 0, 'coal', 'energy/coal/index', NULL, 1, 0, 'C', '0', '0', NULL, 'ep:document', 'admin', '2026-01-19 17:34:23', '', '2026-01-19 17:34:27', '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2589, '电表监测', 2587, 0, 'electric', 'energy/electricity/index', NULL, 1, 0, 'C', '0', '0', NULL, 'fa-solid:ellipsis-h', 'admin', '2026-01-19 17:31:10', '', '2026-01-19 17:31:14', '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2588, '水表监测', 2587, 0, 'water', 'energy/water/index', NULL, 1, 0, 'C', '0', '0', NULL, 'fa-solid:ellipsis-h', 'admin', '2026-01-19 17:29:09', '', '2026-01-19 17:29:13', '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2587, '能耗管理', 0, 0, '/energy', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'fa-solid:water', 'admin', '2026-01-19 17:22:38', '', '2026-01-19 17:22:43', '');

View File

@@ -0,0 +1,2 @@
SET @last = (select menu_id FROM sys_menu where parent_id = 0 and path = 'fiihupgrade') ;
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('数据总览', @last, 1, '/dataOverview', 'mes/fiihupgrade/dataOverview/index', NULL, 1, 0, 'C', '0', '0', NULL, 'dict', 'YAVII', '2026-01-13 16:52:09', '', NULL, '');

View File

@@ -0,0 +1,57 @@
-- =============================================
-- 功能:领料单库存快照功能
-- 版本v1.6.037
-- 日期2026-02-04
-- 作者:周启威
-- 说明:为领料单明细表添加库存快照相关字段,用于记录领料时的库存状态
-- =============================================
-- 1. 为领料单明细表添加库存快照相关字段
ALTER TABLE wm_production_pick_entry
ADD COLUMN inventory_snapshot DECIMAL(18,6) DEFAULT NULL COMMENT '领料时库存快照',
ADD COLUMN snapshot_time DATETIME DEFAULT NULL COMMENT '快照记录时间',
ADD COLUMN snapshot_warehouse_id BIGINT DEFAULT NULL COMMENT '快照来源仓库ID',
ADD COLUMN snapshot_batch_number VARCHAR(100) DEFAULT NULL COMMENT '快照来源批次号';
-- 2. 添加索引以优化查询性能
-- 用于快速查询指定物料的最新库存快照
CREATE INDEX idx_material_snapshot_time
ON wm_production_pick_entry(material_id, snapshot_time DESC);
-- 3. 添加字段说明注释
ALTER TABLE wm_production_pick_entry
MODIFY COLUMN inventory_snapshot DECIMAL(18,6) DEFAULT NULL COMMENT '领料时库存快照(记录领料时该物料的实时库存总量)',
MODIFY COLUMN snapshot_time DATETIME DEFAULT NULL COMMENT '快照记录时间(领料单创建时间)',
MODIFY COLUMN snapshot_warehouse_id BIGINT DEFAULT NULL COMMENT '快照来源仓库ID领料单关联的仓库',
MODIFY COLUMN snapshot_batch_number VARCHAR(100) DEFAULT NULL COMMENT '快照来源批次号(如有多个批次,记录第一个)';
-- 4. 验证字段是否添加成功
SELECT
COLUMN_NAME AS '字段名',
COLUMN_TYPE AS '字段类型',
IS_NULLABLE AS '是否可空',
COLUMN_DEFAULT AS '默认值',
COLUMN_COMMENT AS '字段说明'
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'wm_production_pick_entry'
AND COLUMN_NAME IN ('inventory_snapshot', 'snapshot_time', 'snapshot_warehouse_id', 'snapshot_batch_number')
ORDER BY
ORDINAL_POSITION;
-- 5. 验证索引是否创建成功
SHOW INDEX FROM wm_production_pick_entry WHERE Key_name = 'idx_material_snapshot_time';
-- =============================================
-- 回滚脚本(如需回滚,请执行以下语句)
-- =============================================
-- ALTER TABLE wm_production_pick_entry
-- DROP COLUMN inventory_snapshot,
-- DROP COLUMN snapshot_time,
-- DROP COLUMN snapshot_warehouse_id,
-- DROP COLUMN snapshot_batch_number;
--
-- DROP INDEX idx_material_snapshot_time ON wms_pro_pick_entry;
-- =============================================

View File

@@ -0,0 +1,146 @@
-- 生产订单添加成本字段
-- 作者: 周启威
-- 日期: 2026-02-03
-- 版本: v1.6.036
-- 为生产订单表添加四个成本相关字段
-- 注意:如果字段已存在,请注释掉此部分或删除已存在的字段后再执行
ALTER TABLE `sal_order`
ADD COLUMN `material_cost` DECIMAL(18,2) NULL DEFAULT 0.00 COMMENT '材料成本通过BOM单计算当前订单需要的物料成本' AFTER `remark`,
ADD COLUMN `labor_cost` DECIMAL(18,2) NULL DEFAULT 0.00 COMMENT '人员成本:通过工序路线中的人员成本相加带出' AFTER `material_cost`,
ADD COLUMN `equipment_cost` DECIMAL(18,2) NULL DEFAULT 0.00 COMMENT '设备损耗成本:通过工序路线中的设备损耗成本相加带出' AFTER `labor_cost`,
ADD COLUMN `energy_cost` DECIMAL(18,2) NULL DEFAULT 0.00 COMMENT '能耗成本:手动填写' AFTER `equipment_cost`;
-- 如果需要重新添加字段,请先删除已存在的字段:
-- ALTER TABLE `sal_order` DROP COLUMN `material_cost`, DROP COLUMN `labor_cost`, DROP COLUMN `equipment_cost`, DROP COLUMN `energy_cost`;
-- ==========================================
-- 成本计算与更新
-- ==========================================
-- 1. 更新材料成本通过BOM单计算
-- 说明根据销售订单分录中的物料查找对应的BOM计算所需物料的总成本
UPDATE `sal_order` so
SET so.material_cost = (
SELECT IFNULL(SUM(
CASE
-- 如果BOM明细中有单价和用量则计算用量 * 单价 * 订单数量
WHEN bi.unit_price IS NOT NULL AND bi.quantity IS NOT NULL
THEN bi.quantity * bi.unit_price * soe.quantity
-- 否则使用BOM主表的材料成本 * 订单数量
ELSE IFNULL(b.material_cost, 0) * soe.quantity
END
), 0)
FROM `sal_order_entry` soe
LEFT JOIN `md_new_bom` b ON b.material_id = soe.material_id AND b.status = '1' -- 只取已发布的BOM
LEFT JOIN `md_new_bom_item` bi ON bi.bom_id = b.id
WHERE soe.main_id = so.id
)
WHERE EXISTS (
SELECT 1 FROM `sal_order_entry` soe WHERE soe.main_id = so.id
);
-- 2. 更新人员成本(通过工序路线计算)
-- 说明:根据销售订单分录中的物料,查找对应的工序路线,汇总所有工序的人工成本
UPDATE `sal_order` so
SET so.labor_cost = (
SELECT IFNULL(SUM(rp.labor_cost), 0)
FROM `sal_order_entry` soe
LEFT JOIN `md_material` m ON m.id = soe.material_id
LEFT JOIN `pro_route_process` rp ON rp.route_id = m.route_id
WHERE soe.main_id = so.id
)
WHERE EXISTS (
SELECT 1 FROM `sal_order_entry` soe WHERE soe.main_id = so.id
);
-- 3. 更新设备损耗成本(通过工序路线计算)
-- 说明:根据销售订单分录中的物料,查找对应的工序路线,汇总所有工序的设备损耗成本
UPDATE `sal_order` so
SET so.equipment_cost = (
SELECT IFNULL(SUM(rp.equipment_cost), 0)
FROM `sal_order_entry` soe
LEFT JOIN `md_material` m ON m.id = soe.material_id
LEFT JOIN `pro_route_process` rp ON rp.route_id = m.route_id
WHERE soe.main_id = so.id
)
WHERE EXISTS (
SELECT 1 FROM `sal_order_entry` soe WHERE soe.main_id = so.id
);
-- ==========================================
-- 验证查询(可选)
-- ==========================================
-- 【调试查询1】检查销售订单分录和物料的关联情况
SELECT
so.id AS '订单ID',
so.number AS '订单编号',
soe.id AS '分录ID',
soe.material_id AS '物料ID',
soe.material_name AS '物料名称',
soe.quantity AS '订单数量',
m.route_id AS '工序路线ID'
FROM `sal_order` so
LEFT JOIN `sal_order_entry` soe ON soe.main_id = so.id
LEFT JOIN `md_material` m ON m.id = soe.material_id
ORDER BY so.id DESC
LIMIT 10;
-- 【调试查询2】检查工序路线和成本数据
SELECT
r.id AS '路线ID',
r.name AS '路线名称',
rp.id AS '工序明细ID',
rp.process_name AS '工序名称',
rp.labor_cost AS '人工成本',
rp.equipment_cost AS '设备成本'
FROM `pro_route` r
LEFT JOIN `pro_route_process` rp ON rp.route_id = r.id
WHERE r.id IS NOT NULL
ORDER BY r.id, rp.sort
LIMIT 20;
-- 【调试查询3】完整的关联查询检查数据流- 最重要!
SELECT
so.id AS '订单ID',
so.number AS '订单编号',
soe.material_name AS '物料名称',
soe.quantity AS '订单数量',
m.route_id AS '路线ID',
r.name AS '路线名称',
rp.process_name AS '工序名称',
rp.labor_cost AS '人工成本',
rp.equipment_cost AS '设备成本',
(rp.labor_cost * soe.quantity) AS '计算后人工成本',
(rp.equipment_cost * soe.quantity) AS '计算后设备成本'
FROM `sal_order` so
LEFT JOIN `sal_order_entry` soe ON soe.main_id = so.id
LEFT JOIN `md_material` m ON m.id = soe.material_id
LEFT JOIN `pro_route` r ON r.id = m.route_id
LEFT JOIN `pro_route_process` rp ON rp.route_id = r.id
ORDER BY so.id DESC, rp.sort
LIMIT 30;
-- 【调试查询4】查看当前成本数据
SELECT
so.id,
so.number AS '订单编号',
so.customer_name AS '客户名称',
so.material_cost AS '材料成本',
so.labor_cost AS '人员成本',
so.equipment_cost AS '设备成本',
so.energy_cost AS '能耗成本',
(so.material_cost + so.labor_cost + so.equipment_cost + so.energy_cost) AS '总成本'
FROM `sal_order` so
ORDER BY so.id DESC
LIMIT 10;
-- ==========================================
-- 说明
-- ==========================================
-- 1. 材料成本从BOM单中计算优先使用BOM明细的单价*用量否则使用BOM主表的材料成本
-- 2. 人员成本从工序路线明细表的labor_cost字段汇总
-- 3. 设备损耗成本从工序路线明细表的equipment_cost字段汇总
-- 4. 能耗成本需要手动填写默认为0
-- 5. 如果物料表中没有route_id字段关联工序路线需要根据实际表结构调整关联逻辑

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索引优化按来源类型查询性能

View File

@@ -0,0 +1,126 @@
-- =====================================================
-- 计划类型字段修改 v1.6.038
-- 作者: 周启威
-- 日期: 2026-02-05
-- 说明: 修改计划类型字段的标签和选项值
-- 来源类型 → 计划类型
-- 销售计划 → 库存生产计划(MTS)
-- 生产订单 → 订单生产计划(MTO)
-- =====================================================
-- -----------------------------------------------------
-- 1. 更新字段注释
-- -----------------------------------------------------
-- 更新pro_plan表的plan_source_type字段注释
ALTER TABLE `pro_plan`
MODIFY COLUMN `plan_source_type` varchar(50) DEFAULT NULL
COMMENT '计划类型MTS=库存生产计划(Make to Stock), MTO=订单生产计划(Make to Order)';
-- -----------------------------------------------------
-- 2. 更新字典类型
-- -----------------------------------------------------
-- 检查并更新字典类型名称
UPDATE sys_dict_type
SET dict_name = '计划类型',
remark = '生产计划类型列表MTS=库存生产计划, MTO=订单生产计划'
WHERE dict_type = 'pro_plan_source_type';
-- 如果字典类型不存在,则创建
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
SELECT '计划类型', 'pro_plan_source_type', '0', 'admin', NOW(),
'生产计划类型列表MTS=库存生产计划, MTO=订单生产计划'
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_type WHERE dict_type = 'pro_plan_source_type'
);
-- -----------------------------------------------------
-- 3. 更新字典数据
-- -----------------------------------------------------
-- 删除旧的字典数据(如果存在)
DELETE FROM sys_dict_data
WHERE dict_type = 'pro_plan_source_type'
AND dict_value IN ('order', 'plan');
-- 插入新的字典数据MTS=库存生产计划(原来的销售计划)
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, '库存生产计划', 'MTS', 'pro_plan_source_type', '', 'success', 'Y', '0', 'admin', NOW(),
'Make to Stock - 根据库存需求生成的生产计划(原销售计划)'
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_data WHERE dict_type = 'pro_plan_source_type' AND dict_value = 'MTS'
);
-- 插入新的字典数据MTO=订单生产计划(原来的生产订单)
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, '订单生产计划', 'MTO', 'pro_plan_source_type', '', 'primary', 'N', '0', 'admin', NOW(),
'Make to Order - 根据销售订单生成的生产计划(原生产订单)'
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_data WHERE dict_type = 'pro_plan_source_type' AND dict_value = 'MTO'
);
-- -----------------------------------------------------
-- 4. 数据迁移(可选)
-- -----------------------------------------------------
-- 如果需要迁移旧数据,取消下面的注释
-- 将旧的 'plan' 值更新为 'MTS'(销售计划 → 库存生产计划)
UPDATE pro_plan SET plan_source_type = 'MTS' WHERE plan_source_type = 'plan';
-- 将旧的 'order' 值更新为 'MTO'(生产订单 → 订单生产计划)
UPDATE pro_plan SET plan_source_type = 'MTO' WHERE plan_source_type = 'order';
-- -----------------------------------------------------
-- 5. 验证
-- -----------------------------------------------------
-- 查看字典类型
SELECT dict_name, dict_type, remark
FROM sys_dict_type
WHERE dict_type = 'pro_plan_source_type';
-- 查看字典数据
SELECT dict_value, dict_label, dict_sort, status, remark
FROM sys_dict_data
WHERE dict_type = 'pro_plan_source_type'
ORDER BY dict_sort;
-- 查看字段注释
SELECT column_name, column_type, column_comment
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'pro_plan'
AND column_name = 'plan_source_type';
-- 查看现有数据分布
SELECT
plan_source_type,
COUNT(*) as count,
CASE plan_source_type
WHEN 'plan' THEN '旧值销售计划需迁移为MTS'
WHEN 'order' THEN '旧值生产订单需迁移为MTO'
WHEN 'MTS' THEN '新值:库存生产计划'
WHEN 'MTO' THEN '新值:订单生产计划'
ELSE '未知值'
END as description
FROM pro_plan
GROUP BY plan_source_type;
-- 修改生产计划表的plan_source_id字段支持多个ID逗号分隔
-- 从 bigint 改为 varchar以支持多个订单ID
ALTER TABLE `pro_plan` MODIFY COLUMN `plan_source_id` varchar(255) DEFAULT NULL COMMENT '来源ID支持多个逗号分隔';
-- -----------------------------------------------------
-- 说明
-- -----------------------------------------------------
-- 修改内容:
-- 1. 字段标签:来源类型 → 计划类型
-- 2. 选项值和标签:
-- - MTS (Make to Stock) = 库存生产计划(原来的 plan=销售计划)
-- - MTO (Make to Order) = 订单生产计划(原来的 order=生产订单)
--
-- 注意:
-- - 旧数据不会自动迁移如需迁移请取消第4部分的注释
-- - 新创建的计划将使用新的字典值MTS/MTO
-- - 执行后需要重启应用以刷新字典缓存

View File

@@ -0,0 +1,15 @@
-- 1. 先查询出父菜单ID并赋值给变量
SET @parent_id = (SELECT menu_id FROM sys_menu WHERE path='fiihupgrade' and menu_type='M');
-- 2. 使用变量插入数据
INSERT INTO sys_menu (
`menu_name`, `parent_id`, `order_num`, `path`,
`component`, `query`, `is_frame`, `is_cache`, `menu_type`,
`visible`, `status`, `perms`, `icon`, `create_by`, `create_time`,
`update_by`, `update_time`, `remark`
)VALUES (
'质检追溯', @parent_id, 10, 'qualityAccident',
'mes/quality/accident/index', NULL, 1, 0, 'C', '0', '0',
'', '#', 'YAVII', '2026-02-05 15:34:51', 'YAVII',
'2026-02-05 19:50:48', ''
);

View File

@@ -0,0 +1,26 @@
CREATE TABLE `qc_quality_accident` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`fiih_report_no` varchar(64) DEFAULT NULL COMMENT '报告编号',
`fiih_object_name` varchar(255) DEFAULT NULL COMMENT '对象体名称',
`fiih_task_name` varchar(255) DEFAULT NULL COMMENT '任务名称',
`fiih_link_name` varchar(255) DEFAULT NULL COMMENT '环节名称',
`fiih_check_standard` varchar(500) DEFAULT NULL COMMENT '检测标准',
`fiih_collect_time` datetime DEFAULT NULL COMMENT '采集时间',
`fiih_related_order_no` varchar(64) DEFAULT NULL COMMENT '关联单号',
`fiih_bad_reason` varchar(1000) DEFAULT NULL COMMENT '处理结果',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='质检追溯表';
ALTER TABLE qc_quality_accident
add column fiih_data_id varchar(64) comment 'fiih质检数据ID',
add column unqualified text comment '不合格项',
ADD COLUMN approve_status TINYINT DEFAULT NULL COMMENT '处置审批状态(1待审批 2通过 3驳回)',
ADD COLUMN approver_user_id BIGINT DEFAULT NULL COMMENT '审批人ID',
ADD COLUMN approver_user_name VARCHAR(50) DEFAULT NULL COMMENT '审批人姓名',
ADD COLUMN approve_time DATETIME DEFAULT NULL COMMENT '审批时间',
ADD COLUMN approve_remark VARCHAR(255) DEFAULT NULL COMMENT '审批备注'

View File

@@ -0,0 +1,7 @@
-- 质检数据处置审批字段
ALTER TABLE fiih_qc_data
ADD COLUMN approve_status TINYINT DEFAULT NULL COMMENT '处置审批状态(1待审批 2通过 3驳回)',
ADD COLUMN approver_user_id BIGINT DEFAULT NULL COMMENT '审批人ID',
ADD COLUMN approver_user_name VARCHAR(50) DEFAULT NULL COMMENT '审批人姓名',
ADD COLUMN approve_time DATETIME DEFAULT NULL COMMENT '审批时间',
ADD COLUMN approve_remark VARCHAR(255) DEFAULT NULL COMMENT '审批备注';

View File

@@ -0,0 +1,9 @@
alter table sal_order
add no varchar(50) null comment '生产订单中的销售单号显示';
INSERT INTO sys_field_extend
(`source_bill`, `sort`, `field`, `field_name`, `type`, `quote_data`, `quote_field`, `formula`, `is_required`, `is_must`,
`status`, `remark`, `create_by`, `create_time`, `update_by`, `update_time`, `width`, `default_value`, `is_system`)
VALUES ('saleOrderEntry', 10, 'salOrder.no', '销售单号', 'text', NULL, NULL, NULL, NULL, NULL, '0', NULL, 'admin',
'2026-02-06 10:12:00', NULL, NULL, 200, NULL, 'Y');

View File

@@ -0,0 +1,64 @@
-- 销售订单主表增加优先级列
-- 优先级1-4级数字越小优先级越高
-- 默认值为4最低优先级
ALTER TABLE `sal_order` ADD COLUMN `priority` INT(11) DEFAULT 4 COMMENT '优先级(1-4级,越小优先级越高)' AFTER `status`;
-- 更新现有数据的优先级为默认值4
UPDATE `sal_order` SET `priority` = 4 WHERE `priority` IS NULL;
-- 在销售订单列表中添加优先级字段显示(在订单编号后面)
-- 修改为字典类型,以便在列表中显示标签
INSERT INTO `sys_field_extend`
(`source_bill`, `sort`, `field`, `field_name`, `type`, `quote_data`, `quote_field`, `formula`, `is_required`, `is_must`,
`status`, `remark`, `create_by`, `create_time`, `update_by`, `update_time`, `width`, `default_value`, `is_system`)
VALUES ('saleOrderEntry', 3.5, 'salOrder.priority', '优先级', 'dict:salorder_priority', NULL, NULL, NULL, NULL, NULL, '0', '1-4级,越小优先级越高', 'admin',
NOW(), NULL, NULL, 80, '4', 'Y')
ON DUPLICATE KEY UPDATE
`field_name` = '优先级',
`sort` = 3.5,
`type` = 'dict:salorder_priority',
`width` = 80,
`remark` = '1-4级,越小优先级越高',
`default_value` = '4',
`update_time` = NOW();
-- 添加优先级字典类型
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES ('订单优先级', 'salorder_priority', '0', 'admin', NOW(), '', NULL, '订单优先级列表')
ON DUPLICATE KEY UPDATE
dict_name = '订单优先级',
status = '0',
update_time = NOW();
-- 添加优先级字典数据
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
VALUES
(1, '一级', '1', 'salorder_priority', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '最高优先级'),
(2, '二级', '2', 'salorder_priority', '', 'warning', 'N', '0', 'admin', NOW(), '', NULL, '高优先级'),
(3, '三级', '3', 'salorder_priority', '', 'primary', 'N', '0', 'admin', NOW(), '', NULL, '普通优先级'),
(4, '四级', '4', 'salorder_priority', '', 'info', 'N', '0', 'admin', NOW(), '', NULL, '低优先级')
ON DUPLICATE KEY UPDATE
dict_label = VALUES(dict_label),
css_class = VALUES(css_class),
list_class = VALUES(list_class),
remark = VALUES(remark),
update_time = NOW();
-- =====================================================
-- 生产计划排产权限配置
-- 作者: 周启威
-- 日期: 2026-02-09
-- 说明: 为生产计划添加排产功能权限
-- =====================================================
-- 查询生产计划菜单ID
SET @plan_menu_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '生产计划' AND perms = 'production:plan:list' LIMIT 1);
-- 如果找到了生产计划菜单,则添加排产权限按钮
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT '生产计划排产', @plan_menu_id, 5, '#', '', 1, 0, 'F', '0', '0', 'production:plan:schedule', '#', 'admin', NOW(), '', NULL, '生产计划排产权限'
WHERE @plan_menu_id IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM sys_menu WHERE perms = 'production:plan:schedule'
);

View File

@@ -0,0 +1,37 @@
-- =============================================
-- ATS批量任务表
-- 作者: 周启威
-- 日期: 2026-02-24
-- 版本: v2.0.0
-- 说明: 用于存储批量自动完成任务的状态和进度信息
-- =============================================
-- 创建批量任务表
CREATE TABLE `pro_batch_task` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID',
`task_id` varchar(50) NOT NULL COMMENT '任务编号',
`status` varchar(20) NOT NULL COMMENT '任务状态PENDING-待处理/PROCESSING-处理中/COMPLETED-已完成/FAILED-失败',
`total_count` int(11) NOT NULL DEFAULT 0 COMMENT '总订单数',
`processed_count` int(11) NOT NULL DEFAULT 0 COMMENT '已处理数量',
`success_count` int(11) NOT NULL DEFAULT 0 COMMENT '成功数量',
`failed_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败数量',
`completed_count` int(11) NOT NULL DEFAULT 0 COMMENT '已完成(跳过)数量',
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`estimated_seconds` int(11) DEFAULT NULL COMMENT '预计耗时(秒)',
`error_message` text COMMENT '错误信息',
`result_data` text COMMENT '结果数据(JSON格式)',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_id` (`task_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='批量任务表';
-- 插入测试数据(可选)
-- INSERT INTO `pro_batch_task` (`task_id`, `status`, `total_count`, `processed_count`, `success_count`, `failed_count`, `completed_count`, `start_time`, `estimated_seconds`, `create_by`)
-- VALUES ('TASK_20260224_001', 'COMPLETED', 10, 10, 9, 1, 0, NOW(), 10, 'system');

View File

@@ -0,0 +1,189 @@
ALTER TABLE buy_order ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE buy_order_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE device ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE device_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE device_field_header_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_equipment ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_equipment_fault_tree ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_equipment_point_workshop ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_equipment_status_record ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_equipment_status_record_workshop ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_equipment_workshop ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_inspection_item ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_inspection_item_point ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_inspection_plan ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_inspection_plan_item ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_inspection_plan_record ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_inspection_record ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_inspection_record_item ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_repair_order ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_repair_order_attachment ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE dm_repair_order_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ene_coal_monitoring ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ene_electricity_monitoring ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ene_water_monitoring ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE fiih_general_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE fiih_general_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE fiih_qc_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE fiih_qc_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE fm_payroll ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE fm_piece_wage_plan ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE fm_sale_out_account_bill ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE fm_sale_out_account_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE gen_table ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE gen_table_column ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE inte_data_source ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE inte_data_source_field ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE inte_plan ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE inte_plan_field ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_dict ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_dict_item ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_category ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_data_source ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_db ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_db_field ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_db_param ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_icon_lib ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_link ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_map ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE jimu_report_share ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_bom ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_customer ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_material ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_material_class ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_new_bom ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_new_bom_cost_analysis ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_new_bom_item ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_new_bom_substitute ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_new_bom_version ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_recipe ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_recipe_detail ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_station ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_supplier ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_supplier_credit ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_unit ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_unit_change ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE md_workshop ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE mes_collection_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE mes_device_fault_record ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE onl_drag_dataset_head ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE onl_drag_dataset_item ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE onl_drag_dataset_param ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE onl_drag_page ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE onl_drag_page_comp ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_batch_task ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_line_diagram ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_plan ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_process ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_quality_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_quality_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_report ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_route ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_route_process ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_workorder ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE pro_workorder_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_final_inspection ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_final_inspection_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_foreign_inspection ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_foreign_inspection_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_intermediate_inspection ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_intermediate_inspection_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_kna_info ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_kna_info_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_kna_info_detail ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_material_inspection ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_material_inspection_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_quality_accident ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_quality_level ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_reason ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_report_quality ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_report_quality_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qc_report_quality_reason ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_blob_triggers ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_calendars ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_cron_triggers ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_fired_triggers ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_job_details ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_locks ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_paused_trigger_grps ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_scheduler_state ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_simple_triggers ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_simprop_triggers ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE qrtz_triggers ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE rep_demo_dxtj ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE rep_demo_employee ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE rep_demo_gongsi ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE rep_demo_jianpiao ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE rep_demo_xiaoshou ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE safe_compliance_issue ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE safe_compliance_item ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE safe_danger_report ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE safe_hazard_source ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE safe_officer ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE safety_reports ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sal_order ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sal_order_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_app_version ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_carousel ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_code_rule ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_code_rule_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_dept ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_dict_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_dict_type ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_field_extend ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_file_info ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_job ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_job_log ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_logininfor ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_menu ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_notice ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_oper_log ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_post ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_role ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_role_dept ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_role_menu ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_timed_complete_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_timed_complete_log ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_user ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_user_post ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_user_role ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE sys_user_station ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE test ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE test_gen ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE tmp_import_test ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE tmp_init_qckc ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE tmp_report_data_1 ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE tmp_report_data_income ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE tr_bomochengben ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE tr_bomochengben_neimao ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE tr_bomochengben_waimao ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE tr_bomoweihu ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ums_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_barcode_record ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_inventory_alert ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_manufacture_into ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_manufacture_into_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_material_sn ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_other_out ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_other_out_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_procure_into ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_procure_into_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_production_pick ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_production_pick_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_profit_loss_record ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_profit_loss_record_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_sale_out ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_sale_out_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_sale_return ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_sale_return_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_take_inventory ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_take_inventory_entry ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE wm_warehouse ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ymes_fiih_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ymes_fiih_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ymes_fiih_database_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ymes_iiot_config ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ymes_iiot_data ADD COLUMN yav_ats VARCHAR(255);
ALTER TABLE ymes_iiot_database_config ADD COLUMN yav_ats VARCHAR(255);

View File

@@ -0,0 +1,91 @@
-- ============================================================
-- 报工单升级:新增字段
-- 版本v2.0.003 日期2026-03-03 作者:周启威
-- ============================================================
-- 字段变更说明:
-- [已移除] report_count
-- 原说明:报工数
-- 原因:与现有字段 report_quantity 语义完全相同,冗余
-- 现阶段:直接使用 report_quantity 表示本次报工数量
--
-- [已移除] quality_check_status
-- 原说明:质检合格(合格/不合格)
-- 原因:与现有字段 quality_statusB=待检验/C=已通过/D=有异常)重叠
-- 现阶段:直接使用 quality_status 字段
-- ============================================================
ALTER TABLE `pro_report`
ADD COLUMN `customer_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '客户名称(来自工单关联销售订单,新增时自动回显)',
ADD COLUMN `customer_id` bigint DEFAULT NULL COMMENT '客户ID关联客户表',
ADD COLUMN `workpiece` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '工件/成品名称(= 工单 material_name新增时自动回显',
ADD COLUMN `product_batch` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '产品批次(= 工单 batch_number新增时自动回显',
ADD COLUMN `execution_standard` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '执行标准(手动填写,默认为空)',
ADD COLUMN `process_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '工序名称(= 工单分录 process_name新增时自动回显持久化',
ADD COLUMN `process_id` bigint DEFAULT NULL COMMENT '工序ID持久化关联工序表',
ADD COLUMN `team_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '班组名称(字典 production_team离散/连续制造均需填写,默认为空)',
ADD COLUMN `team_id` bigint DEFAULT NULL COMMENT '班组ID关联字典/班组表)',
ADD COLUMN `report_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'NORMAL' COMMENT '报工类型(字典 production_report_type默认NORMAL=正常报工)',
ADD COLUMN `plan_start_time` datetime DEFAULT NULL COMMENT '计划开始时间(= 工单 process_start_time新增时自动回显',
ADD COLUMN `actual_start_time` datetime DEFAULT NULL COMMENT '实际开始时间(默认=计划开始时间,离散/连续均需填写)',
ADD COLUMN `plan_end_time` datetime DEFAULT NULL COMMENT '计划完工时间(= 工单 process_start_time + 工单工序明细 duration新增时自动计算回显',
ADD COLUMN `actual_end_time` datetime DEFAULT NULL COMMENT '实际完工时间(默认=计划完工时间,离散/连续均需填写)',
ADD COLUMN `report_submit_time` datetime DEFAULT NULL COMMENT '报工提交时间(后端保存时自动写入 NOW(),不暴露到前端)',
ADD COLUMN `plan_count` decimal(9,3) DEFAULT NULL COMMENT '计划数(= 工单排产数量 quantity新增时自动回显',
ADD COLUMN `yield_rate` decimal(5,2) DEFAULT NULL COMMENT '良品率(前端实时计算:合格数/报工数×100保存时持久化',
ADD COLUMN `performance_wages` decimal(9,3) DEFAULT 0 COMMENT '绩效工资手动填写默认0',
ADD COLUMN `energy_consumption` decimal(9,3) DEFAULT 0 COMMENT '能耗手动填写默认0',
ADD COLUMN `material_consumption` decimal(9,3) DEFAULT 0 COMMENT '工耗手动填写默认0',
ADD COLUMN `other_costs` decimal(9,3) DEFAULT 0 COMMENT '其他成本手动填写默认0',
ADD COLUMN `value_added` decimal(9,3) DEFAULT 0 COMMENT '增值手动填写默认0',
ADD COLUMN `theoretical_cycle_time` decimal(9,3) DEFAULT NULL COMMENT '理论节拍(分钟/件手动填写用于OEE参考',
ADD COLUMN `station_oee` decimal(5,2) DEFAULT NULL COMMENT '工位OEE前端计算公式待完善暂可手动编辑',
ADD COLUMN `current_benefit` decimal(9,3) DEFAULT NULL COMMENT '本次效益(前端计算:增值-能耗-工耗-其他成本,暂可手动编辑)',
ADD COLUMN `station_exception` varchar(500) DEFAULT NULL COMMENT '工位异常情况(手动填写,默认为空)',
ADD COLUMN `rectification_suggestion` varchar(500) DEFAULT NULL COMMENT '整改建议(手动填写,默认为空)';
-- ============================================================
-- 1. 补充 ID 列(已合并到上方 ALTER TABLE
-- 注customer_id / process_id / team_id 已随字段一并添加
-- ============================================================
-- ============================================================
-- 2. 修改现有字段is_settle 和 wages 改为可编辑
-- 原说明:是否已结算工资(只读)/ 结算工资(只读)
-- 现阶段:改为可编辑字段,由用户手动填写或系统结算后更新
-- 字段已存在,无需 ALTER仅前端去掉 :disabled="true" 即可
-- ============================================================
-- ============================================================
-- 3. 新增字典报工类型production_report_type
-- ============================================================
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
VALUES ('报工类型', 'production_report_type', '0', 'admin', NOW(), '报工单报工类型');
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, '正常报工', 'NORMAL', 'production_report_type', '', 'success', 'Y', '0', 'admin', NOW(), '正常生产报工'),
(2, '返工报工', 'REWORK', 'production_report_type', '', 'warning', 'N', '0', 'admin', NOW(), '返工生产报工'),
(3, '补报工', 'SUPPLEMENT', 'production_report_type', '', 'info', 'N', '0', 'admin', NOW(), '补录报工'),
(4, '异常补录', 'EXCEPTION', 'production_report_type', '', 'danger', 'N', '0', 'admin', NOW(), '异常情况补录');
-- ============================================================
-- 4. 新增字典班组production_team
-- 注班次sys_shift_type字典已存在本次不重复创建
-- ============================================================
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
VALUES ('生产班组', 'production_team', '0', 'admin', NOW(), '生产班组列表,可在字典管理中维护');
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, '甲班', 'GROUP_A', 'production_team', '', 'primary', 'N', '0', 'admin', NOW(), ''),
(2, '乙班', 'GROUP_B', 'production_team', '', 'primary', 'N', '0', 'admin', NOW(), ''),
(3, '丙班', 'GROUP_C', 'production_team', '', 'primary', 'N', '0', 'admin', NOW(), '');
-- ============================================================
-- 5. 索引:新增字段检索优化
-- ============================================================
ALTER TABLE `pro_report`
ADD INDEX `idx_customer_id` (`customer_id`),
ADD INDEX `idx_process_id` (`process_id`),
ADD INDEX `idx_team_id` (`team_id`),
ADD INDEX `idx_report_type` (`report_type`);

View File

@@ -0,0 +1,146 @@
-- ============================================================
-- 报工单页面类别与字段控制
-- 版本v2.0.003 日期2026-03-05 作者:周启威
-- ============================================================
-- ============================================================
-- 1. 创建类别配置表
-- ============================================================
CREATE TABLE `pro_report_category_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`category_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类别编码A/B/C/D/E为系统类别F/G/H...为自定义类别)',
`category_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类别名称(可自定义修改)',
`default_category_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '默认类别名称(系统初始名称,用于重置)',
`category_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'SYSTEM' COMMENT '类别类型SYSTEM=系统类别/CUSTOM=自定义类别)',
`is_enabled` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Y' COMMENT '是否启用Y=启用/N=停用)',
`sort_order` int DEFAULT NULL COMMENT '排序号',
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_category_code` (`category_code`),
KEY `idx_category_type` (`category_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='报工单类别配置表';
-- ============================================================
-- 2. 创建字段配置表
-- ============================================================
CREATE TABLE `pro_report_field_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`category_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '所属类别编码A/B/C/D/E',
`field_code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字段编码(系统字段=实体类字段名,自定义字段=custom_field_xxx不可修改',
`field_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字段显示名称(可自定义修改)',
`default_field_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '默认字段名称(系统初始名称,用于重置)',
`field_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'SYSTEM' COMMENT '字段类型SYSTEM=系统字段/CUSTOM=自定义字段)',
`data_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'STRING' COMMENT '数据类型STRING=文本/NUMBER=数字/DATE=日期/DATETIME=日期时间/BOOLEAN=布尔/SELECT=下拉选择)',
`control_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'INPUT' COMMENT '控件类型INPUT=文本框/NUMBER=数字框/DATE=日期选择/DATETIME=日期时间选择/SELECT=下拉框/TEXTAREA=文本域/SWITCH=开关)',
`options` text CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '下拉选项JSON格式仅当control_type=SELECT时有效',
`is_enabled` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Y' COMMENT '是否启用Y=启用/N=停用)',
`is_required` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N' COMMENT '是否必填Y=必填/N=非必填)',
`sort_order` int DEFAULT NULL COMMENT '排序号',
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_category_field` (`category_code`,`field_code`),
KEY `idx_category_code` (`category_code`),
KEY `idx_field_type` (`field_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='报工单字段配置表';
-- ============================================================
-- 3. 报工单表增加自定义字段JSON列
-- ============================================================
ALTER TABLE `pro_report` ADD COLUMN `custom_fields` json DEFAULT NULL COMMENT '自定义字段值JSON格式';
-- ============================================================
-- 4. 初始化类别配置数据(系统类别)
-- ============================================================
INSERT INTO `pro_report_category_config` (`category_code`, `category_name`, `default_category_name`, `category_type`, `is_enabled`, `sort_order`, `create_by`, `create_time`) VALUES
('A', '基础信息', '基础信息', 'SYSTEM', 'Y', 1, 'admin', NOW()),
('B', '数量信息', '数量信息', 'SYSTEM', 'Y', 2, 'admin', NOW()),
('C', '时间节拍', '时间节拍', 'SYSTEM', 'Y', 3, 'admin', NOW()),
('D', '成本效益', '成本效益', 'SYSTEM', 'Y', 4, 'admin', NOW()),
('E', '异常记录', '异常记录', 'SYSTEM', 'Y', 5, 'admin', NOW());
-- ============================================================
-- 5. 初始化字段配置数据
-- ============================================================
-- A. 基础信息字段
INSERT INTO `pro_report_field_config` (`category_code`, `field_code`, `field_name`, `default_field_name`, `field_type`, `data_type`, `control_type`, `is_enabled`, `is_required`, `sort_order`, `create_by`, `create_time`) VALUES
('A', 'reportUserId', '报工人', '报工人', 'SYSTEM', 'NUMBER', 'SELECT', 'Y', 'Y', 1, 'admin', NOW()),
('A', 'reportTime', '报工时间', '报工时间', 'SYSTEM', 'DATETIME', 'DATETIME', 'Y', 'Y', 2, 'admin', NOW()),
('A', 'reportType', '报工类型', '报工类型', 'SYSTEM', 'STRING', 'SELECT', 'Y', 'N', 3, 'admin', NOW()),
('A', 'shiftName', '班次', '班次', 'SYSTEM', 'STRING', 'SELECT', 'Y', 'N', 4, 'admin', NOW()),
('A', 'teamName', '班组', '班组', 'SYSTEM', 'STRING', 'SELECT', 'Y', 'N', 5, 'admin', NOW()),
('A', 'executionStandard', '执行标准', '执行标准', 'SYSTEM', 'STRING', 'INPUT', 'Y', 'N', 6, 'admin', NOW()),
('A', 'workshopId', '车间', '车间', 'SYSTEM', 'NUMBER', 'SELECT', 'Y', 'Y', 7, 'admin', NOW()),
('A', 'stationId', '工位', '工位', 'SYSTEM', 'NUMBER', 'SELECT', 'Y', 'Y', 8, 'admin', NOW());
-- B. 数量信息字段
INSERT INTO `pro_report_field_config` (`category_code`, `field_code`, `field_name`, `default_field_name`, `field_type`, `data_type`, `control_type`, `is_enabled`, `is_required`, `sort_order`, `create_by`, `create_time`) VALUES
('B', 'planCount', '计划数', '计划数', 'SYSTEM', 'NUMBER', 'INPUT', 'Y', 'N', 1, 'admin', NOW()),
('B', 'reportQuantity', '报工数量', '报工数量', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'Y', 2, 'admin', NOW()),
('B', 'qualifiedQuantity', '合格数量', '合格数量', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'Y', 3, 'admin', NOW()),
('B', 'unqualifiedQuantity', '不合格数量', '不合格数量', 'SYSTEM', 'NUMBER', 'INPUT', 'Y', 'N', 4, 'admin', NOW()),
('B', 'yieldRate', '良品率', '良品率', 'SYSTEM', 'NUMBER', 'INPUT', 'Y', 'N', 5, 'admin', NOW());
-- C. 时间节拍字段
INSERT INTO `pro_report_field_config` (`category_code`, `field_code`, `field_name`, `default_field_name`, `field_type`, `data_type`, `control_type`, `is_enabled`, `is_required`, `sort_order`, `create_by`, `create_time`) VALUES
('C', 'planStartTime', '计划开始时间', '计划开始时间', 'SYSTEM', 'DATETIME', 'INPUT', 'Y', 'N', 1, 'admin', NOW()),
('C', 'planEndTime', '计划完工时间', '计划完工时间', 'SYSTEM', 'DATETIME', 'DATETIME', 'Y', 'N', 2, 'admin', NOW()),
('C', 'actualStartTime', '实际开始时间', '实际开始时间', 'SYSTEM', 'DATETIME', 'DATETIME', 'Y', 'N', 3, 'admin', NOW()),
('C', 'actualEndTime', '实际完工时间', '实际完工时间', 'SYSTEM', 'DATETIME', 'DATETIME', 'Y', 'N', 4, 'admin', NOW()),
('C', 'reportPeriodStart', '报工周期开始', '报工周期开始', 'SYSTEM', 'DATETIME', 'DATETIME', 'Y', 'N', 5, 'admin', NOW()),
('C', 'reportPeriodEnd', '报工周期结束', '报工周期结束', 'SYSTEM', 'DATETIME', 'DATETIME', 'Y', 'N', 6, 'admin', NOW()),
('C', 'theoreticalCycleTime', '理论节拍', '理论节拍', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 7, 'admin', NOW()),
('C', 'downtimeMinutes', '停机时间', '停机时间', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 8, 'admin', NOW()),
('C', 'downtimeReason', '停机原因', '停机原因', 'SYSTEM', 'STRING', 'INPUT', 'Y', 'N', 9, 'admin', NOW());
-- D. 成本效益字段
INSERT INTO `pro_report_field_config` (`category_code`, `field_code`, `field_name`, `default_field_name`, `field_type`, `data_type`, `control_type`, `is_enabled`, `is_required`, `sort_order`, `create_by`, `create_time`) VALUES
('D', 'performanceWages', '绩效工资', '绩效工资', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 1, 'admin', NOW()),
('D', 'energyConsumption', '能耗', '能耗', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 2, 'admin', NOW()),
('D', 'materialConsumption', '工耗', '工耗', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 3, 'admin', NOW()),
('D', 'otherCosts', '其他成本', '其他成本', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 4, 'admin', NOW()),
('D', 'valueAdded', '增值', '增值', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 5, 'admin', NOW()),
('D', 'stationOee', '工位OEE', '工位OEE', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 6, 'admin', NOW()),
('D', 'currentBenefit', '本次效益', '本次效益', 'SYSTEM', 'NUMBER', 'INPUT', 'Y', 'N', 7, 'admin', NOW()),
('D', 'isSettle', '是否结算工资', '是否结算工资', 'SYSTEM', 'STRING', 'SELECT', 'Y', 'N', 8, 'admin', NOW()),
('D', 'wages', '结算工资', '结算工资', 'SYSTEM', 'NUMBER', 'NUMBER', 'Y', 'N', 9, 'admin', NOW());
-- E. 异常记录字段
INSERT INTO `pro_report_field_config` (`category_code`, `field_code`, `field_name`, `default_field_name`, `field_type`, `data_type`, `control_type`, `is_enabled`, `is_required`, `sort_order`, `create_by`, `create_time`) VALUES
('E', 'stationException', '工位异常情况', '工位异常情况', 'SYSTEM', 'STRING', 'TEXTAREA', 'Y', 'N', 1, 'admin', NOW()),
('E', 'rectificationSuggestion', '整改建议', '整改建议', 'SYSTEM', 'STRING', 'TEXTAREA', 'Y', 'N', 2, 'admin', NOW()),
('E', 'remark', '备注', '备注', 'SYSTEM', 'STRING', 'TEXTAREA', 'Y', 'N', 3, 'admin', NOW());
-- ============================================================
-- 6. 说明
-- ============================================================
-- 1. 类别配置表存储系统类别和自定义类别:
-- - category_type: SYSTEM=系统类别A/B/C/D/E不可删除CUSTOM=自定义类别F/G/H...,可删除)
-- - category_code: 系统类别固定为A/B/C/D/E自定义类别按字母顺序生成F/G/H...
-- - category_name: 可自定义修改的显示名称
-- - default_category_name: 系统默认名称,用于重置
-- 2. 字段配置表存储每个类别下字段的配置信息:
-- - field_type: SYSTEM=系统字段对应实体类字段CUSTOM=自定义字段存储在JSON中
-- - field_code: 系统字段使用实体类字段名,自定义字段使用 custom_field_xxx
-- - field_name: 可自定义修改的显示名称
-- - default_field_name: 系统默认名称,用于重置
-- - data_type: 数据类型STRING/NUMBER/DATE/DATETIME/BOOLEAN/SELECT
-- - control_type: 控件类型INPUT/NUMBER/DATE/DATETIME/SELECT/TEXTAREA/SWITCH
-- - options: 下拉选项JSON格式仅SELECT类型有效
-- - category_code: 所属类别编码,自定义字段可修改(移动到其他类别)
-- 3. 自定义字段的值存储在 pro_report.custom_fieldsJSON类型
-- 4. 停用的类别在报工单表单中完全隐藏
-- 5. 停用的字段在报工单表单中完全隐藏
-- 6. 必填字段根据配置动态添加校验规则
-- 7. 配置仅影响新增/编辑时的表单显示,不影响已保存的报工单数据
-- 8. 新增自定义字段时可以选择放入任一类别中(包括自定义类别)
-- 9. 删除自定义类别前需确认该类别下没有字段
-- 10. 配置功能通过报工单页面的"表单配置"按钮打开弹窗进行设置,无需单独的配置菜单

View File

@@ -0,0 +1,28 @@
-- ============================================================
-- v2.0.004 8Multi di_reg 报工 & 设备状态修改
-- 作者:周启威
-- 日期2026-03-06
-- ============================================================
-- 1. device_data 新增 di_reg 字段(存储每次上报的原始值)
ALTER TABLE `device_data`
ADD COLUMN `di_reg` INT DEFAULT NULL COMMENT '输入寄存器(0-7报工/8-15设备状态)';
-- 2. 新增 di_reg 触发动作日志表
CREATE TABLE `device_di_reg_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`device_id` BIGINT NOT NULL COMMENT '设备ID(关联device.id)',
`device_no` INT NOT NULL COMMENT '设备号(device.device_no)',
`di_reg` INT NOT NULL COMMENT 'di_reg原始值(0-15)',
`action_type` VARCHAR(16) NOT NULL COMMENT '动作类型: REPORT=报工 / STATUS=设备状态',
`process_sort` INT DEFAULT NULL COMMENT '工序顺序(REPORT时有效, = di_reg + 1)',
`cn_reg_new` INT DEFAULT NULL COMMENT '新设备状态值(STATUS时有效, = di_reg - 8)',
`affected_count` INT DEFAULT 0 COMMENT '本次实际处理的工单数量(REPORT时)',
`work_order_ids` VARCHAR(512) DEFAULT NULL COMMENT '本次处理的工单ID列表,逗号分隔(REPORT时)',
`trigger_time` DATETIME NOT NULL COMMENT '触发时间',
`remark` VARCHAR(512) DEFAULT NULL COMMENT '备注',
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0正常/1删除)',
PRIMARY KEY (`id`),
KEY `idx_device_id_time` (`device_id`, `trigger_time`),
KEY `idx_action_type_time` (`action_type`, `trigger_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='8Multi di_reg触发动作日志表';

View File

@@ -0,0 +1,67 @@
-- =============================================
-- MES系统授权续费功能数据库脚本
-- 版本: v2.0.008
-- 作者: 周启威
-- 日期: 2026-03-12
-- 说明: 系统到期提醒和续费管理功能
-- =============================================
-- =============================================
-- 1. 系统授权配置表
-- =============================================
CREATE TABLE `sys_license_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`expire_date` datetime NOT NULL COMMENT '系统到期时间',
`contact_email` varchar(100) DEFAULT NULL COMMENT '联系邮箱',
`contact_phone` varchar(50) DEFAULT NULL COMMENT '联系电话',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统授权配置表';
-- 初始化数据默认到期时间为1年后
INSERT INTO `sys_license_config` (`expire_date`, `contact_email`, `contact_phone`)
VALUES (DATE_ADD(NOW(), INTERVAL 1 YEAR), 'yavyjs@yav123.cn', '15727007467');
-- =============================================
-- 2. 续费记录表
-- =============================================
CREATE TABLE `sys_license_renewal` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`company_name` varchar(200) NOT NULL COMMENT '企业名称',
`previous_expire_date` datetime DEFAULT NULL COMMENT '续费前到期时间',
`expire_date` datetime NOT NULL COMMENT '续费后到期时间',
`operator` varchar(100) NOT NULL COMMENT '操作人',
`operate_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_operate_time` (`operate_time`) COMMENT '操作时间索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='续费记录表';
-- =============================================
-- 3. 菜单权限配置
-- =============================================
-- 插入续费管理菜单父菜单为系统管理parent_id=1
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('续费管理', 1, 20, 'license', 'system/license/renewal', NULL, 1, 0, 'C', '0', '0', 'system:license:list', 'time-range', 'admin', NOW(), '', NULL, '续费管理菜单');
-- 获取最新插入的菜单ID
SET @menu_id = LAST_INSERT_ID();
-- 续费管理查询权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('续费查询', @menu_id, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:license:query', '#', 'admin', NOW(), '', NULL, '');
-- 续费操作权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('续费操作', @menu_id, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:license:add', '#', 'admin', NOW(), '', NULL, '');
-- =============================================
-- 说明
-- =============================================
-- 1. sys_license_config 表仅存储一条记录,用于全局配置
-- 2. sys_license_renewal 表记录每次续费操作的历史
-- 3. 续费操作会同时更新 sys_license_config 的 expire_date
-- 4. 索引优化operate_time 用于历史记录查询排序
-- 5. 菜单配置:续费管理菜单添加到系统管理模块下,仅管理员可访问

View File

@@ -0,0 +1,31 @@
-- ============================================================
-- 调整菜单顺序
-- 版本v2.0.008 日期2026-03-13 作者:周启威
-- ============================================================
-- 调整FIIH质量管理菜单顺序为8
UPDATE sys_menu SET order_num = 8
WHERE path = 'fiihupgrade';
-- 调整能耗管理菜单顺序为10
UPDATE sys_menu SET order_num = 10
WHERE path = '/energy';
-- 调整安全管理菜单顺序为10
UPDATE sys_menu SET order_num = 10
WHERE path = 'safe';
-- ============================================================
-- 为能耗管理添加合适的图标
-- ============================================================
-- 将能耗管理的图标从 'fa-solid:water' 改为 'fa-solid:bolt'(闪电图标,更符合能耗主题)
UPDATE sys_menu SET icon = 'fa-solid:bolt'
WHERE path = '/energy' AND menu_name = '能耗管理';
-- 说明:
-- fa-solid:bolt - 闪电图标,代表电力/能源
-- 其他可选图标:
-- - 'fa-solid:charging-station' - 充电站图标
-- - 'fa-solid:plug' - 插头图标
-- - 'fa-solid:fire' - 火焰图标(代表能源消耗)
-- - 'ep:lightning' - Element Plus 闪电图标

View File

@@ -0,0 +1,117 @@
-- ============================================================
-- 修复报工单配置权限问题
-- 版本v2.0.009 日期2026-03-14 作者:周启威
-- 问题:报工单新增时提示"加载配置失败: error"和"没有权限"
-- 原因:缺少报工单类别配置和字段配置的权限记录
-- ============================================================
-- ============================================================
-- 1. 获取报工单菜单ID通过perms标识动态查询
-- ============================================================
SET @report_menu_id = (SELECT menu_id FROM sys_menu WHERE perms = 'production:report:list' LIMIT 1);
-- 验证是否找到报工单菜单
SELECT CONCAT('报工单菜单ID: ', IFNULL(@report_menu_id, '未找到')) AS '查询结果';
-- 如果找不到报工单菜单,则终止执行
-- 注意MySQL不支持直接的IF判断终止需要手动检查上面的查询结果
-- 如果@report_menu_id为NULL请检查sys_menu表中是否存在perms='production:report:list'的记录
-- ============================================================
-- 2. 添加权限配置到菜单表使用动态parent_id
-- ============================================================
-- 类别配置权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '类别配置查询', @report_menu_id, 11, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:categoryConfig:list', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:categoryConfig:list');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '类别配置详情', @report_menu_id, 12, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:categoryConfig:query', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:categoryConfig:query');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '类别配置新增', @report_menu_id, 13, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:categoryConfig:add', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:categoryConfig:add');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '类别配置修改', @report_menu_id, 14, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:categoryConfig:edit', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:categoryConfig:edit');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '类别配置删除', @report_menu_id, 15, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:categoryConfig:remove', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:categoryConfig:remove');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '类别名称重置', @report_menu_id, 16, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:categoryConfig:resetName', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:categoryConfig:resetName');
-- 字段配置权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '字段配置查询', @report_menu_id, 21, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:fieldConfig:list', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:fieldConfig:list');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '字段配置详情', @report_menu_id, 22, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:fieldConfig:query', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:fieldConfig:query');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '字段配置新增', @report_menu_id, 23, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:fieldConfig:add', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:fieldConfig:add');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '字段配置修改', @report_menu_id, 24, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:fieldConfig:edit', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:fieldConfig:edit');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '字段配置删除', @report_menu_id, 25, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:fieldConfig:remove', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:fieldConfig:remove');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '字段名称重置', @report_menu_id, 26, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:fieldConfig:resetName', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:fieldConfig:resetName');
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
SELECT '字段批量修改', @report_menu_id, 27, '#', '', NULL, 1, 0, 'F', '0', '0', 'production:report:fieldConfig:batchEdit', '#', 'admin', NOW(), 'admin', NOW(), ''
WHERE @report_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:report:fieldConfig:batchEdit');
-- ============================================================
-- 3. 验证权限配置
-- ============================================================
-- 执行以下查询验证权限是否添加成功:
SELECT menu_id, menu_name, parent_id, perms
FROM sys_menu
WHERE perms LIKE 'production:report:%Config:%'
ORDER BY parent_id, order_num;
-- ============================================================
-- 4. 说明
-- ============================================================
-- 1. 本SQL使用动态查询parent_id通过perms='production:report:list'定位报工单菜单
-- 2. 使用NOT EXISTS避免重复插入权限记录
-- 3. 管理员userId=1默认拥有所有权限*:*:*),无需单独分配
-- 4. 如果你使用的不是管理员账号,需要在"系统管理->角色管理"中手动分配权限
-- 5. 执行此SQL后需要
-- - 清除浏览器缓存
-- - 退出系统并重新登录
-- - 重新打开报工单新增页面测试
-- 6. 如果仍有问题,请检查:
-- - 数据库中是否已存在 pro_report_category_config 和 pro_report_field_config 表
-- - 表中是否有初始化数据(执行 2026-03-05_v2.0.003_周启威_报工单页面类别与字段控制.sql
-- - 后端服务是否已重启
-- - 当前登录用户的userIdSELECT user_id FROM sys_user WHERE user_name = '你的用户名'
-- - 如果userId不是1检查该用户的角色权限配置

View File

@@ -0,0 +1,22 @@
-- =============================================
-- 报工-质检-入库流程
-- 版本: v2.0.010
-- 作者: 周启威
-- 日期: 2026-03-19
-- 说明: 实现报工单与FIIH质检模块集成支持审批通过后入库办理
-- =============================================
-- 1. 在报工单表中添加FIIH质检单关联字段
ALTER TABLE pro_report ADD COLUMN fiih_qc_data_id BIGINT COMMENT 'FIIH质检单ID';
ALTER TABLE pro_report ADD COLUMN into_status VARCHAR(20) COMMENT '入库状态PENDING=待入库COMPLETED=已入库';
ALTER TABLE pro_report ADD COLUMN manufacture_into_id BIGINT COMMENT '成品入库单ID';
-- 2. 为新增字段添加索引以提高查询性能
ALTER TABLE pro_report ADD INDEX idx_fiih_qc_data_id (fiih_qc_data_id);
ALTER TABLE pro_report ADD INDEX idx_manufacture_into_id (manufacture_into_id);
ALTER TABLE pro_report ADD INDEX idx_into_status (into_status);
-- 3. 添加注释说明
ALTER TABLE pro_report MODIFY COLUMN fiih_qc_data_id BIGINT COMMENT 'FIIH质检单ID关联fiih_qc_data表';
ALTER TABLE pro_report MODIFY COLUMN into_status VARCHAR(20) COMMENT '入库状态PENDING=待入库COMPLETED=已入库NULL=未开始';
ALTER TABLE pro_report MODIFY COLUMN manufacture_into_id BIGINT COMMENT '成品入库单ID关联wm_manufacture_into表';

View File

@@ -0,0 +1,73 @@
-- ================================================
-- v2.0.013_周启威_三级优化 SQL变更脚本
-- 包含内容:
-- 1. 新增字段:点巡检记录表-故障预测信息
-- 2. 初始化班次字典时间范围sys_dict_data.remark
-- 3. 新增菜单班次时间配置页面sys_menu表
-- ================================================
-- ================================================
-- 1. 点巡检记录表新增故障预测信息字段
-- ================================================
ALTER TABLE dm_inspection_plan_record ADD COLUMN fault_forecast VARCHAR(255) COMMENT '故障预测信息' AFTER problem_desc;
-- ================================================
-- 2. 班次字典初始化时间范围sys_dict_data.remark
-- 格式HH:mm-HH:mm如 08:00-16:00
-- 说明ShiftTimeUtil 优先读字典 remark找不到才 fallback sys_config
-- ================================================
-- 晚班00:00-08:00dict_sort 最小的默认早班,但这里按实际时间范围写)
UPDATE sys_dict_data SET remark = '00:00-08:00'
WHERE dict_type = 'sys_shift_type' AND dict_value = 'C' AND (remark IS NULL OR remark = '');
-- 早班08:00-16:00
UPDATE sys_dict_data SET remark = '08:00-16:00'
WHERE dict_type = 'sys_shift_type' AND dict_value = 'A' AND (remark IS NULL OR remark = '');
-- 中班16:00-00:00
UPDATE sys_dict_data SET remark = '16:00-00:00'
WHERE dict_type = 'sys_shift_type' AND dict_value = 'B' AND (remark IS NULL OR remark = '');
-- 验证班次字典 remark
SELECT dict_label, dict_value, remark FROM sys_dict_data WHERE dict_type = 'sys_shift_type' ORDER BY dict_sort;
-- ================================================
-- 3. 班次时间配置菜单sys_menu表
-- ================================================
-- 查询生产计划菜单ID
SET @plan_menu_id = (SELECT menu_id FROM sys_menu WHERE perms = 'production:plan:list' LIMIT 1);
-- 验证是否找到生产计划菜单
SELECT CONCAT('生产计划菜单ID: ', IFNULL(@plan_menu_id, '未找到')) AS '查询结果';
-- 班次时间配置页面菜单C=菜单)
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT '班次时间配置', @plan_menu_id, 20, 'shiftConfig', 'mes/production/shiftConfig/index', NULL, 1, 0, 'C', '0', '0', 'production:shift:config:query', 'time', 'admin', NOW(), 'admin', NOW(), '班次时间通过字典管理的班次类型备注字段配置'
WHERE @plan_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:shift:config:query');
-- 查询权限按钮F=按钮)
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT '班次配置查询', @plan_menu_id, 21, '', NULL, NULL, 1, 0, 'F', '0', '0', 'production:shift:config:query', '#', 'admin', NOW(), 'admin', NOW(), '班次时间配置查询权限'
WHERE @plan_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:shift:config:query');
-- 编辑权限按钮F=按钮)
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT '班次配置编辑', @plan_menu_id, 22, '', NULL, NULL, 1, 0, 'F', '0', '0', 'production:shift:config:edit', '#', 'admin', NOW(), 'admin', NOW(), '班次时间配置编辑权限'
WHERE @plan_menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'production:shift:config:edit');
-- 验证菜单是否添加成功
SELECT menu_id, menu_name, parent_id, perms
FROM sys_menu
WHERE perms LIKE 'production:shift:config:%'
ORDER BY parent_id, order_num;
-- ================================================
-- 4. 执行后操作
-- - 清除浏览器缓存,退出重新登录
-- - 打开"系统管理->字典管理->班次类型"编辑备注字段即可修改班次时间范围格式HH:mm-HH:mm如 08:00-16:00
-- - 打开"系统管理->角色管理",为需要的角色分配班次配置权限
-- ================================================

View File

@@ -0,0 +1,123 @@
-- ============================================================
-- 报工单班次和班组数据补齐脚本
-- 版本v2.0.014 日期2026-03-23 作者Claude
-- 问题:老版数据存储的是 dict_value新版前端需要 dict_label
-- ============================================================
-- ============================================================
-- 1. 查看当前字典配置
-- ============================================================
-- 班次字典
SELECT '=== 班次字典 ===' AS info;
SELECT dict_label, dict_value, remark
FROM sys_dict_data
WHERE dict_type = 'sys_shift_type'
ORDER BY dict_sort;
-- 班组字典
SELECT '=== 班组字典 ===' AS info;
SELECT dict_label, dict_value, remark
FROM sys_dict_data
WHERE dict_type = 'production_team'
ORDER BY dict_sort;
-- ============================================================
-- 2. 查看当前报工单中的原始数据分布
-- ============================================================
-- 班次分布
SELECT '=== 班次数据分布 ===' AS info;
SELECT shift_name, COUNT(*) as count
FROM pro_report
WHERE shift_name IS NOT NULL AND shift_name != ''
GROUP BY shift_name
ORDER BY shift_name;
-- 班组分布
SELECT '=== 班组数据分布 ===' AS info;
SELECT team_name, COUNT(*) as count
FROM pro_report
WHERE team_name IS NOT NULL AND team_name != ''
GROUP BY team_name
ORDER BY team_name;
-- ============================================================
-- 3. 执行数据更新
-- ============================================================
-- ================== 班次更新 ==================
-- 早班MORNING -> 早班
UPDATE pro_report
SET shift_name = '早班'
WHERE shift_name = 'MORNING';
-- 中班AFTERNOON -> 中班
UPDATE pro_report
SET shift_name = '中班'
WHERE shift_name = 'AFTERNOON';
-- 晚班NIGHT -> 晚班
UPDATE pro_report
SET shift_name = '晚班'
WHERE shift_name = 'NIGHT';
-- 如果使用的是 A/B/C 值(根据字典配置调整)
-- UPDATE pro_report SET shift_name = '早班' WHERE shift_name = 'A';
-- UPDATE pro_report SET shift_name = '中班' WHERE shift_name = 'B';
-- UPDATE pro_report SET shift_name = '晚班' WHERE shift_name = 'C';
-- ================== 班组更新 ==================
-- 甲班GROUP_A -> 甲班
UPDATE pro_report
SET team_name = '甲班'
WHERE team_name = 'GROUP_A';
-- 乙班GROUP_B -> 乙班
UPDATE pro_report
SET team_name = '乙班'
WHERE team_name = 'GROUP_B';
-- 丙班GROUP_C -> 丙班
UPDATE pro_report
SET team_name = '丙班'
WHERE team_name = 'GROUP_C';
-- 丁班(如有)
-- UPDATE pro_report SET team_name = '丁班' WHERE team_name = 'GROUP_D';
-- ============================================================
-- 4. 验证更新结果
-- ============================================================
SELECT '=== 更新后班次分布 ===' AS info;
SELECT shift_name, COUNT(*) as count
FROM pro_report
WHERE shift_name IS NOT NULL AND shift_name != ''
GROUP BY shift_name
ORDER BY shift_name;
SELECT '=== 更新后班组分布 ===' AS info;
SELECT team_name, COUNT(*) as count
FROM pro_report
WHERE team_name IS NOT NULL AND team_name != ''
GROUP BY team_name
ORDER BY team_name;
-- ============================================================
-- 5. 影响行数统计(执行前可预估)
-- ============================================================
SELECT '=== 影响行数预估 ===' AS info;
SELECT
(SELECT COUNT(*) FROM pro_report WHERE shift_name = 'MORNING') AS '早班待更新',
(SELECT COUNT(*) FROM pro_report WHERE shift_name = 'AFTERNOON') AS '中班待更新',
(SELECT COUNT(*) FROM pro_report WHERE shift_name = 'NIGHT') AS '晚班待更新',
(SELECT COUNT(*) FROM pro_report WHERE team_name = 'GROUP_A') AS '甲班待更新',
(SELECT COUNT(*) FROM pro_report WHERE team_name = 'GROUP_B') AS '乙班待更新',
(SELECT COUNT(*) FROM pro_report WHERE team_name = 'GROUP_C') AS '丙班待更新';
-- ============================================================
-- 执行说明
-- ============================================================
-- 1. 请在测试环境先执行此脚本
-- 2. 验证数据无误后再在生产环境执行
-- 3. 执行前建议备份数据库
-- 4. 如果你的字典值与脚本中不同,请根据实际情况调整 UPDATE 语句
-- ============================================================

View File

@@ -0,0 +1,36 @@
-- ============================================================
-- 报工单实际开始时间补充(仅生产工单)
-- 表pro_report
-- 逻辑actual_start_time = plan_start_time +/- 10分钟内随机秒数
-- ============================================================
-- 通过 work_order_entry_id 关联工单,先填 plan_start_time=工单 process_start_time
-- 再填 actual_start_time = plan_start_time +/- 10分钟随机秒
UPDATE pro_report pr
INNER JOIN pro_workorder_entry pwe ON pwe.id = pr.work_order_entry_id
INNER JOIN pro_workorder pwo ON pwo.id = pwe.workorder_id
SET
pr.plan_start_time = pwo.process_start_time,
pr.actual_start_time = DATE_ADD(
pwo.process_start_time,
INTERVAL (FLOOR(RAND() * 1201) - 600) SECOND
)
WHERE pr.actual_start_time IS NULL
AND pr.work_order_entry_id IS NOT NULL
AND pwo.process_start_time IS NOT NULL;
-- ============================================================
-- 验证
-- ============================================================
SELECT
pr.id,
pwo.process_start_time AS '工单开始时间',
pr.plan_start_time AS '计划开始时间',
pr.actual_start_time AS '实际开始时间',
TIMESTAMPDIFF(SECOND, pr.plan_start_time, pr.actual_start_time) AS '相差秒数'
FROM pro_report pr
INNER JOIN pro_workorder_entry pwe ON pwe.id = pr.work_order_entry_id
INNER JOIN pro_workorder pwo ON pwo.id = pwe.workorder_id
WHERE pr.actual_start_time IS NOT NULL
ORDER BY pr.id DESC
LIMIT 20;

View File

@@ -0,0 +1,261 @@
-- ============================================================
-- BOM单多级优化 - 数据库变更脚本
-- 版本: v2.0.016
-- 作者: 周启威
-- 日期: 2026-03-27
-- 说明: 在 md_new_bom_item 新增子BOM引用字段支持多级BOM结构
-- ============================================================
-- --------------------------------------------------
-- 1. md_new_bom_item 表新增字段
-- - sub_bom_id : 引用的子BOM主键ID当 is_sub_bom=1 时有效)
-- - is_sub_bom : 是否子BOM项 0-否 1-是
-- - level : BOM明细层级深度0=顶层物料1=子BOM展开第一层以此类推
-- - is_key_material: 是否关键物料(从 is_key_component 独立出来更通用)
-- --------------------------------------------------
ALTER TABLE `md_new_bom_item`
ADD COLUMN `sub_bom_id` bigint(20) DEFAULT NULL COMMENT '引用的子BOM主键ID多级BOM用' AFTER `process_route`,
ADD COLUMN `is_sub_bom` tinyint(1) DEFAULT '0' COMMENT '是否子BOM项 0-否 1-是' AFTER `sub_bom_id`,
ADD COLUMN `level` int(11) DEFAULT '0' COMMENT 'BOM明细层级深度0=顶层)' AFTER `is_sub_bom`,
ADD KEY `idx_sub_bom_id` (`sub_bom_id`);
-- --------------------------------------------------
-- 2. md_new_bom 表新增字段(辅助多级展示)
-- - max_level : BOM最大层级深度由系统计算写入供前端展示参考
-- - is_multilevel : 是否多级BOM 0-否 1-是
-- - component_count : 直接子件数量含子BOM项
-- --------------------------------------------------
ALTER TABLE `md_new_bom`
ADD COLUMN `max_level` int(11) DEFAULT '0' COMMENT 'BOM最大层级深度' AFTER `sort_order`,
ADD COLUMN `is_multilevel` tinyint(1) DEFAULT '0' COMMENT '是否多级BOM 0-否 1-是' AFTER `max_level`,
ADD COLUMN `component_count` int(11) DEFAULT '0' COMMENT '直接子件数量含子BOM项' AFTER `is_multilevel`;
-- --------------------------------------------------
-- 3. 新增 BOM 层级关系表 md_new_bom_level_relation
-- 用于记录任意BOM到其直接父BOM的引用关系支持快速查询"哪些BOM用到了我"
-- 子BOM被引用时自动写入废弃/删除时清理
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_new_bom_level_relation` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`parent_bom_id` bigint(20) NOT NULL COMMENT '父级BOM主键ID',
`parent_material_id` bigint(20) NOT NULL COMMENT '父级产品物料ID',
`child_bom_id` bigint(20) NOT NULL COMMENT '子级BOM主键ID',
`child_material_id` bigint(20) NOT NULL COMMENT '子级产品物料ID',
`level` int(11) NOT NULL DEFAULT '1' COMMENT '层级1=直接子级2=孙子级,以此类推)',
`bom_item_id` bigint(20) DEFAULT NULL COMMENT '对应明细行ID来源 md_new_bom_item.id',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_parent_bom_id` (`parent_bom_id`),
KEY `idx_child_bom_id` (`child_bom_id`),
KEY `idx_parent_material_id` (`parent_material_id`),
KEY `idx_child_material_id` (`child_material_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BOM多级层级关系表';
-- --------------------------------------------------
-- 4. 新增 BOM 多级展开视图 v_bom_multilevel_expand
-- 将多级BOM按层级展开为扁平视图方便前端树形展示和报表
-- 注意MySQL 8.0+ 递归CTE实现
-- --------------------------------------------------
DROP VIEW IF EXISTS `v_bom_multilevel_expand`;
CREATE ALGORITHM=MERGE SQL SECURITY INVOKER VIEW `v_bom_multilevel_expand` AS
SELECT
-- 层级标识(用于前端树形缩进)
CAST(REPEAT(' ', `r`.`level` - 1) AS CHAR(100)) AS `indent_space`,
`r`.`level` AS `bom_level`,
`r`.`parent_bom_id` AS `parent_bom_id`,
`r`.`child_bom_id` AS `bom_id`,
`b`.`bom_number` AS `bom_number`,
`b`.`product_code` AS `product_code`,
`b`.`product_name` AS `product_name`,
`b`.`specification` AS `specification`,
`b`.`version` AS `bom_version`,
`b`.`bom_type` AS `bom_type`,
`b`.`status` AS `bom_status`,
`b`.`base_quantity` AS `base_quantity`,
`b`.`unit_name` AS `unit_name`,
`b`.`max_level` AS `max_level`,
`b`.`is_multilevel` AS `is_multilevel`,
`r`.`bom_item_id` AS `bom_item_id`,
`r`.`parent_material_id` AS `parent_material_id`,
`r`.`child_material_id` AS `child_material_id`,
`b`.`material_cost` AS `direct_material_cost`,
`b`.`labor_cost` AS `direct_labor_cost`,
`b`.`manufacturing_cost` AS `direct_manufacturing_cost`,
`b`.`total_cost` AS `direct_total_cost`,
`b`.`create_time` AS `create_time`,
`b`.`update_time` AS `update_time`
FROM `md_new_bom_level_relation` `r`
INNER JOIN `md_new_bom` `b` ON `r`.`child_bom_id` = `b`.`id`
ORDER BY `r`.`parent_bom_id`, `r`.`level`, `b`.`product_name`;
-- --------------------------------------------------
-- 5. 初始化存储过程 sp_refresh_bom_level_relation
-- 在BOM发布时调用更新 md_new_bom_level_relation 表
-- 逻辑扫描指定BOM的所有明细行按 is_sub_bom=1 的 sub_bom_id 递归收集子BOM
-- --------------------------------------------------
DROP PROCEDURE IF EXISTS `sp_refresh_bom_level_relation`;
DELIMITER $$
CREATE PROCEDURE `sp_refresh_bom_level_relation`(
IN p_bom_id BIGINT -- 起始BOM ID通常为发布的BOM
)
BEGIN
DECLARE v_done INT DEFAULT 0;
DECLARE v_max_level INT DEFAULT 10; -- 最大递归层级保护
-- 临时表:递归收集 BOM->子BOM 关系
DROP TEMPORARY TABLE IF EXISTS tmp_bom_relation;
CREATE TEMPORARY TABLE tmp_bom_relation (
parent_bom_id BIGINT,
parent_material_id BIGINT,
child_bom_id BIGINT,
child_material_id BIGINT,
level INT,
bom_item_id BIGINT
);
-- 递归游标从指定BOM出发收集所有 is_sub_bom=1 的明细行对应的子BOM
INSERT INTO tmp_bom_relation
SELECT DISTINCT
p_bom_id AS parent_bom_id,
b.material_id AS parent_material_id,
item.sub_bom_id AS child_bom_id,
item.material_id AS child_material_id,
1 AS level,
item.id AS bom_item_id
FROM md_new_bom b
INNER JOIN md_new_bom_item item ON item.bom_id = b.id AND item.is_sub_bom = 1 AND item.sub_bom_id IS NOT NULL
WHERE b.id = p_bom_id;
-- 逐层展开最多10层防止死循环
level_loop: WHILE v_done = 0 DO
INSERT IGNORE INTO tmp_bom_relation
SELECT DISTINCT
rel.child_bom_id AS parent_bom_id,
sub.material_id AS parent_material_id,
item.sub_bom_id AS child_bom_id,
item.material_id AS child_material_id,
rel.level + 1 AS level,
item.id AS bom_item_id
FROM tmp_bom_relation rel
INNER JOIN md_new_bom sub ON sub.id = rel.child_bom_id
INNER JOIN md_new_bom_item item ON item.bom_id = sub.id AND item.is_sub_bom = 1 AND item.sub_bom_id IS NOT NULL
WHERE rel.level < v_max_level;
IF ROW_COUNT() = 0 THEN
SET v_done = 1;
END IF;
END WHILE level_loop;
-- 删除旧关系以该BOM为父级的所有记录
DELETE FROM md_new_bom_level_relation WHERE parent_bom_id = p_bom_id;
-- 写入新关系
INSERT INTO md_new_bom_level_relation
(parent_bom_id, parent_material_id, child_bom_id, child_material_id, level, bom_item_id)
SELECT parent_bom_id, parent_material_id, child_bom_id, child_material_id, level, bom_item_id
FROM tmp_bom_relation;
-- 清理临时表
DROP TEMPORARY TABLE tmp_bom_relation;
END$$
DELIMITER ;
-- --------------------------------------------------
-- 6. 触发器md_new_bom_item 增删改后自动刷新层级关系
-- --------------------------------------------------
DROP TRIGGER IF EXISTS `trg_md_new_bom_item_after_insert`;
DELIMITER $$
CREATE TRIGGER `trg_md_new_bom_item_after_insert`
AFTER INSERT ON `md_new_bom_item`
FOR EACH ROW
BEGIN
-- 如果插入的是子BOM行且该BOM已有父BOM引用关系则需要刷新关系表
-- 此处仅记录,待 BOM 发布时统一刷新 sp_refresh_bom_level_relation
-- 实际刷新由业务层在 publishBomVersion 时调用存储过程
-- 此触发器仅用于:删除 bom_item 时连带清理关系记录
END$$
DELIMITER ;
DROP TRIGGER IF EXISTS `trg_md_new_bom_item_after_delete`;
DELIMITER $$
CREATE TRIGGER `trg_md_new_bom_item_after_delete`
AFTER DELETE ON `md_new_bom_item`
FOR EACH ROW
BEGIN
-- 删除时清理孤立的关系记录
DELETE FROM md_new_bom_level_relation WHERE bom_item_id = OLD.id;
END$$
DELIMITER ;
-- --------------------------------------------------
-- 7. 批量初始化脚本对现有已发布的多级BOM执行刷新
-- 示例:对 id = 1 的 BOM 执行一次层级关系构建
-- 正式上线时,取消下面注释并填写实际 BOM ID 列表
-- --------------------------------------------------
-- CALL sp_refresh_bom_level_relation(1);
-- CALL sp_refresh_bom_level_relation(2);
-- CALL sp_refresh_bom_level_relation(3);
-- --------------------------------------------------
-- 8. 更新 BOM 主表的 max_level / is_multilevel 辅助字段
-- 在 sp_refresh_bom_level_relation 执行后调用
-- --------------------------------------------------
DROP PROCEDURE IF EXISTS `sp_update_bom_multilevel_flags`;
DELIMITER $$
CREATE PROCEDURE `sp_update_bom_multilevel_flags`(
IN p_bom_id BIGINT
)
BEGIN
DECLARE v_max_level INT;
DECLARE v_is_multilevel INT;
DECLARE v_component_count INT;
-- 计算最大层级
SELECT COALESCE(MAX(level), 0) INTO v_max_level
FROM md_new_bom_level_relation
WHERE parent_bom_id = p_bom_id;
-- 判断是否多级直接子级中存在子BOM项即为多级
SELECT COUNT(*) INTO v_is_multilevel
FROM md_new_bom_item
WHERE bom_id = p_bom_id AND is_sub_bom = 1 AND sub_bom_id IS NOT NULL;
-- 统计直接子件数量
SELECT COUNT(*) INTO v_component_count
FROM md_new_bom_item
WHERE bom_id = p_bom_id;
UPDATE md_new_bom
SET max_level = v_max_level,
is_multilevel = IF(v_max_level > 0 OR v_is_multilevel > 0, 1, 0),
component_count = v_component_count,
update_time = NOW()
WHERE id = p_bom_id;
END$$
DELIMITER ;
-- 示例调用:
-- CALL sp_update_bom_multilevel_flags(1);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,200 @@
# 新BOM模块后端实现总结
## 概述
根据前端页面的功能需求和API接口调用完整实现了新BOM模块的后端代码包括数据表设计、实体类、Mapper接口、Service层和Controller层。
## 实现的功能
1. **基础CRUD操作**
- 新增、修改、删除、查询BOM
- BOM明细管理
- 分页查询和条件筛选
2. **高级功能**
- BOM复制
- BOM版本管理
- BOM成本计算和分析
- BOM完整性验证
- BOM树形结构查询
- 替代料管理
- 用量分析
- 导入导出功能
3. **状态管理**
- 草稿、已发布、已废弃三种状态
- 版本发布和废弃操作
## 数据表结构
### 1. 新BOM主表 (md_new_bom)
```sql
CREATE TABLE `md_new_bom` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`material_id` bigint(20) NOT NULL COMMENT '产品物料ID',
`product_code` varchar(100) NOT NULL COMMENT '产品编码',
`product_name` varchar(200) NOT NULL COMMENT '产品名称',
`specification` varchar(500) DEFAULT NULL COMMENT '规格型号',
`version` varchar(50) NOT NULL COMMENT 'BOM版本',
`bom_type` varchar(20) NOT NULL DEFAULT 'PRODUCTION' COMMENT 'BOM类型',
`base_quantity` decimal(12,3) NOT NULL DEFAULT '1.000' COMMENT '基本数量',
`unit_name` varchar(50) DEFAULT NULL COMMENT '单位名称',
`total_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '总成本',
`material_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '材料成本',
`labor_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '人工成本',
`manufacturing_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '制造费用',
`status` char(1) NOT NULL DEFAULT '0' COMMENT '状态(0:草稿,1:已发布,2:已废弃)',
`valid_from` date DEFAULT NULL COMMENT '有效期开始',
`valid_to` date DEFAULT NULL COMMENT '有效期结束',
`parent_id` bigint(20) DEFAULT NULL COMMENT '父级BOM ID',
`has_children` tinyint(1) DEFAULT '0' COMMENT '是否有子级',
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_product_version` (`material_id`, `version`),
KEY `idx_material_id` (`material_id`),
KEY `idx_bom_type` (`bom_type`),
KEY `idx_status` (`status`),
KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='新BOM主表';
```
### 2. 新BOM明细表 (md_new_bom_item)
```sql
CREATE TABLE `md_new_bom_item` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`bom_id` bigint(20) NOT NULL COMMENT 'BOM主表ID',
`material_id` bigint(20) NOT NULL COMMENT '物料ID',
`material_code` varchar(100) NOT NULL COMMENT '物料编码',
`material_name` varchar(200) NOT NULL COMMENT '物料名称',
`specification` varchar(500) DEFAULT NULL COMMENT '规格型号',
`quantity` decimal(12,3) NOT NULL DEFAULT '1.000' COMMENT '用量',
`unit_name` varchar(50) DEFAULT NULL COMMENT '单位名称',
`loss_rate` decimal(5,2) DEFAULT '0.00' COMMENT '损耗率(%)',
`unit_price` decimal(12,4) DEFAULT '0.0000' COMMENT '单价',
`total_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '小计成本',
`material_type` varchar(20) DEFAULT 'PURCHASED' COMMENT '物料类型',
`is_key_component` tinyint(1) DEFAULT '0' COMMENT '是否关键件',
`supplier_id` bigint(20) DEFAULT NULL COMMENT '供应商ID',
`supplier_name` varchar(200) DEFAULT NULL COMMENT '供应商名称',
`alternative_materials` text DEFAULT NULL COMMENT '替代料信息',
`process_route` varchar(500) DEFAULT NULL COMMENT '工艺路线',
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_bom_id` (`bom_id`),
KEY `idx_material_id` (`material_id`),
KEY `idx_supplier_id` (`supplier_id`),
KEY `idx_material_type` (`material_type`),
CONSTRAINT `fk_bom_item_bom_id` FOREIGN KEY (`bom_id`) REFERENCES `md_new_bom` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='新BOM明细表';
```
### 3. 其他辅助表
- **md_new_bom_version**: BOM版本历史表
- **md_new_bom_cost_analysis**: BOM成本分析表
- **md_new_bom_substitute**: 替代料关系表
## 后端代码结构
### 1. 实体类 (Domain)
- `NewBom.java` - BOM主实体
- `NewBomItem.java` - BOM明细实体
- `NewBomVersion.java` - BOM版本实体
- `NewBomCostAnalysis.java` - BOM成本分析实体
### 2. Mapper接口层
- `NewBomMapper.java` - BOM主表数据访问接口
- `NewBomItemMapper.java` - BOM明细表数据访问接口
- 对应的XML映射文件
- `NewBomMapper.xml`
- `NewBomItemMapper.xml`
### 3. Service业务层
- `INewBomService.java` - BOM业务接口
- `NewBomServiceImpl.java` - BOM业务实现类
### 4. Controller控制层
- `NewBomController.java` - BOM控制器
## API接口列表
### 基础CRUD接口
- `GET /masterdata/newBom/list` - 查询BOM列表
- `GET /masterdata/newBom/{id}` - 获取BOM详情
- `POST /masterdata/newBom` - 新增BOM
- `PUT /masterdata/newBom` - 修改BOM
- `DELETE /masterdata/newBom/{ids}` - 删除BOM
### 高级功能接口
- `POST /masterdata/newBom/copy/{id}` - 复制BOM
- `POST /masterdata/newBom/export` - 导出BOM
- `POST /masterdata/newBom/import` - 导入BOM
- `GET /masterdata/newBom/tree/{parentId}` - 获取BOM树结构
- `GET /masterdata/newBom/cost/{id}` - 计算BOM成本
- `GET /masterdata/newBom/versions/{bomId}` - 获取BOM版本历史
- `POST /masterdata/newBom/publish` - 发布BOM版本
- `GET /masterdata/newBom/substitutes/{materialId}` - 获取替代料列表
- `GET /masterdata/newBom/analysis/{id}` - 获取BOM用量分析
- `GET /masterdata/newBom/validate/{id}` - 验证BOM完整性
## 主要特性
### 1. 成本计算
- 自动计算明细成本:用量 × 单价 × (1 + 损耗率/100)
- 总成本 = 材料成本 + 人工成本 + 制造费用
- 支持成本占比分析
### 2. 版本管理
- 支持多版本BOM管理
- 版本状态控制(草稿、已发布、已废弃)
- 版本复制功能
- 版本历史查询
### 3. 数据验证
- BOM完整性验证
- 唯一性约束(物料+版本)
- 业务规则验证
### 4. 权限控制
- 基于角色的权限控制
- 细粒度操作权限
- 数据安全保障
## 使用说明
1. **执行数据表创建SQL语句**
2. **确保相关依赖项存在**
- Material物料表和相关服务
- Supplier供应商表和相关服务
- 权限管理系统
3. **配置权限**
- `masterdata:newBom:list` - 查询权限
- `masterdata:newBom:add` - 新增权限
- `masterdata:newBom:edit` - 修改权限
- `masterdata:newBom:remove` - 删除权限
- `masterdata:newBom:export` - 导出权限
- `masterdata:newBom:import` - 导入权限
- 其他功能权限...
## 注意事项
1. **数据完整性**BOM明细与主表通过外键关联删除主表时会级联删除明细
2. **版本控制**已发布的BOM不能直接删除需要先废弃
3. **成本计算**:成本计算为实时计算,可考虑加入缓存机制
4. **并发控制**修改BOM时需要注意并发更新问题
5. **性能优化**:大量数据时建议添加适当索引
## 扩展建议
1. **审批流程**可以增加BOM审批流程
2. **变更记录**增加BOM变更历史记录
3. **模板功能**支持BOM模板功能
4. **批量操作**:支持批量导入导出明细
5. **集成功能**与ERP、PLM等系统集成

View File

@@ -0,0 +1,349 @@
# IOT Labview 数据库配置 API 接口文档
## 基本信息
- **基础路径**: `/iot/labview`
- **接口总数**: 12个
- **认证方式**: 无需认证
- **数据格式**: JSON
---
## 文档中实际场景应用
- **localhost**实际服务器ip地址
- **端口号**:实际服务器后端端口地址
---
## 接口列表
| 序号 | 接口地址 | 请求方式 | 功能说明 |
|------|----------|----------|----------|
| 1 | `/iot/labview/list` | GET | 查询配置列表 |
| 2 | `/iot/labview/{id}` | GET | 查询配置详情 |
| 3 | `/iot/labview` | POST | 新增配置 |
| 4 | `/iot/labview` | PUT | 修改配置 |
| 5 | `/iot/labview/{ids}` | DELETE | 删除配置(支持批量) |
| 6 | `/iot/labview/device/{iotDeviceId}` | GET | 根据设备ID查询配置 |
| 7 | `/iot/labview/targetTable/{id}` | GET | 获取目标表配置JSON |
| 8 | `/iot/labview/testConnection` | POST | 测试数据库连接 |
| 9 | `/iot/labview/deviceIds` | GET | 获取所有设备ID列表 |
| 10 | `/iot/labview/deviceIds/tenant` | GET | 根据租户查询设备ID列表 |
| 11 | `/iot/labview/tenant/device` | POST | 根据租户和设备ID查询配置 |
| 12 | `/iot/labview/export` | POST | 导出Excel |
---
## 接口测试Apifox
### 1. 查询配置列表(分页)
- **方法**: GET
- **URL**: `http://localhost:8080/iot/labview/list`
- **Query参数**:
- `pageNum`: 1
- `pageSize`: 10
- `iotDeviceId`: 1001 (可选)
- `iotDbIp`: 192.168 (可选,模糊查询)
- `iotDbName`: test (可选,模糊查询)
---
### 2. 查询配置详情
- **方法**: GET
- **URL**: `http://localhost:8080/iot/labview/1`
---
### 3. 新增配置
- **方法**: POST
- **URL**: `http://localhost:8080/iot/labview`
- **Headers**: `Content-Type: application/json`
- **Body (JSON)**:
```json
{
"iotDeviceId": 1004,
"iotDbIp": "192.168.1.103",
"iotDbPort": 3306,
"iotDbName": "test_db",
"Object": "root",
"Class": "123456",
"iotTargetTable": "{\"temperature\":\"ymes_iiot_temperature\"}",
"iotRemark": "测试配置",
"tenantId": 1
}
```
---
### 4. 修改配置
- **方法**: PUT
- **URL**: `http://localhost:8080/iot/labview`
- **Headers**: `Content-Type: application/json`
- **Body (JSON)**:
```json
{
"id": 1,
"iotDeviceId": 1001,
"iotDbIp": "192.168.1.100",
"iotDbPort": 3306,
"iotDbName": "test_db_new",
"Object": "root",
"Class": "123456",
"iotTargetTable": "{\"temperature\":\"ymes_iiot_temperature\"}",
"tenantId": 1
}
```
---
### 5. 删除配置(支持批量)
- **方法**: DELETE
- **URL**: `http://localhost:8080/iot/labview/1` (删除单个)
- **URL**: `http://localhost:8080/iot/labview/1,2,3` (批量删除)
---
### 6. 根据设备ID查询配置
- **方法**: GET
- **URL**: `http://localhost:8080/iot/labview/device/1001`
---
### 7. 获取目标表配置JSON格式
- **方法**: GET
- **URL**: `http://localhost:8080/iot/labview/targetTable/1`
**返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"temperature": "ymes_iiot_temperature",
"humidity": "ymes_iiot_humidity"
}
}
```
---
### 8. 测试数据库连接
- **方法**: POST
- **URL**: `http://localhost:8080/iot/labview/testConnection`
- **Headers**: `Content-Type: application/json`
- **Body (JSON)**:
```json
{
"iotDbIp": "192.168.1.100",
"iotDbPort": 3306,
"iotDbName": "test_db",
"iotDbUser": "root",
"iotDbPass": "123456"
}
```
---
### 9. 获取所有设备ID列表
- **方法**: GET
- **URL**: `http://localhost:8080/iot/labview/deviceIds`
**返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": [1001, 1002, 1003, 1004]
}
```
**说明**:
- 返回所有已配置的设备ID
- 自动去重和排序
- 数组类型便于LabVIEW处理
---
### 10. 根据租户查询设备ID列表
- **方法**: GET
- **URL**: `http://localhost:8080/iot/labview/deviceIds/tenant`
**Query参数**:
- `tenantId` (可选): 租户ID精确匹配
- `tenantName` (可选): 租户名称,模糊查询
- **注意**: 至少提供一个参数
**使用示例**:
**示例1 - 通过租户ID查询**:
```
http://localhost:8080/iot/labview/deviceIds/tenant?tenantId=1
```
**示例2 - 通过租户名称查询**:
```
http://localhost:8080/iot/labview/deviceIds/tenant?tenantName=测试租户
```
**示例3 - 同时使用两个条件AND关系**:
```
http://localhost:8080/iot/labview/deviceIds/tenant?tenantId=1&tenantName=测试
```
**返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": [1001, 1002, 1003]
}
```
**错误示例**(未提供参数):
```json
{
"code": 500,
"msg": "请提供租户ID或租户名称"
}
```
**说明**:
- 支持按租户ID精确查询
- 支持按租户名称模糊查询(包含匹配)
- 两个参数可以同时使用AND关系
- 返回该租户下的所有设备ID去重、排序
---
### 11. 根据租户和设备ID查询配置
- **方法**: POST
- **URL**: `http://localhost:8080/iot/labview/tenant/device`
**请求体参数** (JSON):
- `tenantId` (必填): 租户ID
- `iotDeviceId` (必填): 设备ID
**使用示例**:
**查询租户1的设备1001配置**:
```json
POST http://localhost:8080/iot/labview/tenant/device
请求体:
{
"tenantId": 1,
"iotDeviceId": 1001
}
```
**返回示例(成功)**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"iotDeviceId": 1001,
"iotDbIp": "192.168.1.100",
"iotDbPort": 3306,
"iotDbName": "mes_db",
"Object": "root",
"Class": "123456",
"iotTargetTable": "{\"data\":\"ymes_iiot_data\",\"config\":\"ymes_iiot_config\"}",
"iotRemark": "测试设备",
"tenantId": 1,
"tenantName": "测试租户A",
"createBy": "admin",
"createTime": "2025-10-14 10:00:00",
"updateBy": null,
"updateTime": "2025-10-14 10:00:00"
}
}
```
**返回示例(未找到)**:
```json
{
"code": 500,
"msg": "未找到该租户下的设备配置"
}
```
**返回示例(参数缺失)**:
```json
{
"code": 500,
"msg": "租户ID和设备ID不能为空"
}
```
**说明**:
- 使用JSON格式的请求体传递参数
- 通过租户ID和设备ID精确查询
- 返回完整的配置对象
- 用于多租户环境下的设备配置隔离
- LabVIEW可通过此接口获取特定租户的设备数据库配置
**LabVIEW调用示例**:
```
LabVIEW HTTP POST请求
URL: http://your-server:8080/mes/iot/labview/tenant/device
Content-Type: application/json
请求体:
{
"tenantId": 1,
"iotDeviceId": 1001
}
```
---
### 12. 导出Excel
- **方法**: POST
- **URL**: `http://localhost:8080/iot/labview/export`
- **Query参数** (可选): `iotDbIp`, `iotDeviceId`, `iotDbName`
- **说明**: 点击 Send and Download 下载Excel文件
---
## 数据字段说明
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | - | 主键ID |
| iotDeviceId | Long | ✓ | 设备ID唯一 |
| iotDbIp | String | ✓ | 数据库IP |
| iotDbPort | Integer | ✓ | 端口默认3306 |
| iotDbName | String | ✓ | 数据库名 |
| iotDbUser | String | ✓ | 账号 |
| iotDbPass | String | ✓ | 密码 |
| iotTargetTable | String | ✓ | 目标表JSON字符串 |
| iotRemark | String | - | 备注 |
| tenantId | Long | ✓ | 租户ID |
---
**文档版本**: v1.6
**更新时间**: 2025-10-14
**更新内容**:
- v1.1: 新增获取所有设备ID列表接口
- v1.2: 新增根据租户查询设备ID列表接口
- v1.3: 新增根据租户ID和设备ID查询配置接口
- v1.4: 将根据租户和设备ID查询配置接口改为POST方法
- v1.5: 将租户和设备ID查询接口的参数从路径参数改为请求体JSON格式
- v1.6: 修改JSON返回字段名`iotDbUser`改为`Object``iotDbPass`改为`Class`;移除`params``searchValue`字段

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,87 @@
# 生产配方管理
## 功能概述
生产配方管理模块用于管理产品的生产配方信息,包括配方主表和配方明细的管理。
## 主要功能
### 配方主表管理
- **配方编号**: 唯一标识配方的编号
- **产品名称**: 配方对应的产品名称
- **产品编号**: 产品的编号标识
- **产品型号**: 产品的具体型号
- **基础数量**: 配方的基础数量默认300
- **添加剂**: 配方中使用的添加剂信息
### 配方明细管理
- **原料名称**: 配方中使用的原料名称
- **比例(%)**: 原料在配方中的比例
- **投料数量**: 根据比例自动计算的投料数量(比例 × 基础数量 ÷ 100
- **投料吨位**: 投料的吨位信息
## 操作说明
### 1. 查询配方
- 支持按配方编号、产品名称、产品编号、产品型号进行搜索
- 点击"搜索"按钮执行查询,点击"重置"按钮清空查询条件
### 2. 新增配方
1. 点击"新增"按钮
2. 填写配方基本信息
3. 点击"确定"保存配方
### 3. 修改配方
1. 选择要修改的配方行,点击"修改"按钮
2. 或直接点击操作列中的"修改"按钮
3. 修改配方信息后点击"确定"保存
### 4. 查看配方
- 点击操作列中的"查看"按钮,可查看配方的详细信息
### 5. 删除配方
1. 选择要删除的配方行,点击"删除"按钮
2. 或直接点击操作列中的"删除"按钮
3. 确认删除操作
### 6. 配方明细管理
1. 点击操作列中的"明细管理"按钮
2. 在弹出的对话框中可以:
- 添加明细:点击"添加明细"按钮新增一行
- 编辑明细:直接在表格中编辑原料名称、比例等信息
- 删除明细:点击明细行的"删除"按钮
- 保存明细:点击"保存明细"按钮保存所有修改
## 自动计算功能
当输入原料的比例时,系统会自动计算投料数量:
```
投料数量 = 比例(%) × 基础数量 ÷ 100
```
例如基础数量为300原料比例为10%则投料数量自动计算为30。
## 权限说明
使用本模块需要以下权限:
- `masterdata:recipe:list` - 查询配方列表
- `masterdata:recipe:query` - 查看配方详情
- `masterdata:recipe:add` - 新增配方
- `masterdata:recipe:edit` - 修改配方
- `masterdata:recipe:remove` - 删除配方
## 技术实现
### 前端组件
- 位置:`/src/views/mes/masterdata/recipe/index.vue`
- 使用Element UI组件库
- 支持表格操作、表单验证、对话框等功能
### API接口
- 位置:`/src/api/mes/masterdata/recipe.js`
- 提供配方主表和明细的CRUD操作接口
### 路由配置
- 路径:`/mes/masterdata/recipe`
-`/src/router/index.js`中配置为隐藏路由
- 需要通过菜单系统访问

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,133 @@
# FIIH质量管理数据详情页面
## 概述
基于IoT设备详情页面的设计模式为FIIH质量管理系统创建了数据详情页面支持通过任务ID查看相关的质量数据记录。
## 功能特性
### 🎯 核心功能
- **任务信息展示**显示任务基础信息包括任务ID、名称、版本、环节信息等
- **状态管理**:支持进行中、完成、作废三种状态的显示和筛选
- **通道配置**支持24通道配置信息的展示和管理
- **数据记录**:展示质量数据记录列表,支持分页和时间筛选
- **数据详情**支持查看JSON数据、分析结果和复杂数据
### 🔧 技术特性
- **响应式设计**基于Element UI的响应式布局
- **动态通道**:根据实际数据动态显示有效通道列
- **JSON格式化**智能JSON数据格式化和展示
- **时间筛选**:支持日期范围筛选和快捷选择
## 文件结构
```
mes-ui/src/views/mes/fiih/
├── README.md # 说明文档
├── index.vue # FIIH配置管理页面已更新
├── fiihDetailByTaskId.vue # FIIH数据详情页面新增
└── api/
└── fiihData.js # FIIH数据API接口新增
```
## 后端文件
```
yjh-mes/src/main/java/cn/sourceplan/fiih/
├── domain/
│ └── FiihData.java # FIIH数据实体类
├── mapper/
│ └── FiihDataMapper.java # FIIH数据Mapper接口
├── service/
│ ├── IFiihDataService.java # FIIH数据Service接口
│ └── impl/
│ └── FiihDataServiceImpl.java # FIIH数据Service实现
├── controller/
│ └── FiihDataController.java # FIIH数据控制器
└── resources/mapper/fiih/
└── FiihDataMapper.xml # MyBatis映射文件
```
## 使用方法
### 1. 从配置页面跳转
在FIIH配置管理页面中点击"查看数据"按钮即可跳转到对应任务的数据详情页面。
### 2. 直接访问
通过URL直接访问`/mes/fiih/task/{taskId}`
### 3. 功能操作
- **返回**:点击返回按钮回到上一页
- **刷新**:刷新当前页面数据
- **时间筛选**:选择时间范围筛选数据
- **状态筛选**:按任务状态筛选数据
- **查看详情**:点击操作列的详情按钮查看完整数据信息
- **查看JSON**点击查看按钮查看格式化的JSON数据
## 数据库表结构
基于提供的`ymes_fiih_data`表结构,支持:
- 24个数据通道fiih_data_ch0 ~ fiih_data_ch23
- JSON数据存储fiih_data_json
- 数据分析结果fiih_data_analysis
- 复杂数据存储fiih_data_complex
- 任务和环节关联信息
## 权限配置
需要配置以下权限:
- `fiih:data:list` - 数据列表查询权限
- `fiih:data:query` - 数据详情查询权限
- `fiih:data:add` - 数据新增权限
- `fiih:data:edit` - 数据修改权限
- `fiih:data:remove` - 数据删除权限
- `fiih:data:export` - 数据导出权限
## 路由配置
已在`mes-ui/src/router/index.js`中添加隐藏路由:
```javascript
{
path: '/mes/fiih/task',
component: Layout,
hidden: true,
permissions: ['fiih:data:query'],
children: [
{
path: ':fiihTaskId',
component: () => import('@/views/mes/fiih/fiihDetailByTaskId'),
name: 'FiihDetailByTaskId',
meta: {title: 'FIIH任务详情', activeMenu: '/mes/fiih/index', noCache: true}
}
]
}
```
## 扩展开发
### 添加新的数据字段
1.`FiihData.java`实体类中添加属性
2.`FiihDataMapper.xml`中添加对应的映射
3. 在前端页面中添加显示逻辑
### 自定义通道配置
通道配置支持JSON格式可包含
```json
{
"name": "温度传感器",
"unit": "℃",
"type": "temperature",
"range": [0, 100],
"precision": 0.1,
"description": "环境温度监测"
}
```
## 注意事项
1. 页面基于任务IDfiihTaskId进行数据查询
2. 通道配置信息来自FIIH配置表
3. 数据记录按采集时间倒序排列
4. 支持大数据量的分页展示
5. JSON数据支持格式化显示和复制功能

View File

@@ -0,0 +1,258 @@
# FIIH质量管理配置模块
## 概述
FIIH质量管理配置模块是一个完整的前后端分离的质量管理系统支持任务配置、通道管理、文件上传、二维码生成等功能。
## 功能特性
### 🎯 核心功能
- **任务管理**:支持任务创建、编辑、状态跟踪
- **环节配置**:细粒度的环节管理和配置
- **通道配置**24通道JSON配置支持格式化和验证
- **文件管理**支持5个附件上传
- **二维码生成**:自动生成任务二维码
- **批量操作**:支持批量状态更新
### 🔧 技术特性
- **前后端分离**Vue.js + Spring Boot
- **响应式设计**Element UI组件库
- **JSON配置**智能JSON编辑器支持格式化和验证
- **多租户支持**:完整的租户隔离
- **权限控制**:基于角色的访问控制
## 文件结构
```
fiih/
├── README.md # 说明文档
├── 后端文件/
│ ├── domain/
│ │ └── FiihConfig.java # 实体类
│ ├── mapper/
│ │ └── FiihConfigMapper.java # Mapper接口
│ ├── service/
│ │ ├── IFiihConfigService.java # Service接口
│ │ └── impl/
│ │ └── FiihConfigServiceImpl.java # Service实现
│ ├── controller/
│ │ └── FiihConfigController.java # 控制器
│ └── resources/mapper/fiih/
│ └── FiihConfigMapper.xml # MyBatis映射文件
└── 前端文件/
├── api/mes/fiih/
│ └── fiihConfig.js # API接口
└── views/mes/fiih/
└── index.vue # Vue页面组件
```
## 数据库表结构
```sql
CREATE TABLE `ymes_fiih_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`fiih_object_name` varchar(50) NOT NULL COMMENT '对象体名称',
`fiih_link_id` bigint NOT NULL COMMENT '环节ID(单次环节)',
`fiih_link_name` varchar(100) NOT NULL COMMENT '环节名称',
`fiih_task_id` bigint NOT NULL COMMENT '任务ID(总体)',
`fiih_task_name` varchar(100) NOT NULL COMMENT '任务名称',
`fiih_version` varchar(50) DEFAULT NULL COMMENT '任务版本号',
`fiih_process` varchar(50) DEFAULT NULL COMMENT '任务流程记录',
`fiih_status` int NOT NULL DEFAULT '1' COMMENT '任务状态1进行中 2完成 3作废',
`fiih_start_time` datetime DEFAULT NULL COMMENT '开始时间',
`fiih_end_time` datetime DEFAULT NULL COMMENT '结束时间',
`fiih_leader_id` bigint NOT NULL COMMENT '负责人ID',
`fiih_leader_name` varchar(50) NOT NULL COMMENT '负责人姓名',
`fiih_qr_file` varchar(255) DEFAULT NULL COMMENT '二维码路径',
`fiih_rich_text` text COMMENT '说明富文本',
`fiih_info_json` text COMMENT '以上信息属性JSON',
`fiih_query_json` text COMMENT '以上信息查询属性JSON',
`fiih_config_ch0` text COMMENT '数据0属性JSON',
-- ... 24个通道配置字段 ...
`fiih_config_ch23` text COMMENT '数据23属性JSON',
`fiih_file1` varchar(255) DEFAULT NULL COMMENT '附件1路径',
-- ... 5个附件字段 ...
`fiih_file5` varchar(255) DEFAULT NULL COMMENT '附件5路径',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`tenant_id` bigint NOT NULL COMMENT '租户ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='FIIH质量管理配置表';
```
## API接口
### 基础CRUD接口
- `GET /fiih/config/list` - 查询配置列表
- `GET /fiih/config/{id}` - 获取配置详情
- `POST /fiih/config` - 新增配置
- `PUT /fiih/config` - 修改配置
- `DELETE /fiih/config/{ids}` - 删除配置
### 外部集成接口
- `POST /fiih/config/insert` - 新增配置(给外部使用,无权限验证)
- `POST /fiih/config/createMenu/{fiihTaskId}` - 为任务创建菜单
## 前端功能
### 🔍 查询功能
- 支持对象体名称、任务名称、环节名称、负责人、状态等多条件查询
- 实时搜索,支持回车快速查询
### 📝 表单功能
- **基础信息**:任务信息、环节信息、负责人信息
- **时间管理**:开始时间、结束时间选择
- **状态管理**:进行中、完成、作废三种状态
- **富文本编辑**:支持说明文本编辑
### 🔧 通道配置
- **24通道管理**:每个通道独立配置
- **JSON编辑器**:语法高亮、格式化、验证
- **可视化状态**:配置状态徽章提示
- **批量操作**:清空、格式化功能
### 📎 文件管理
- **多文件上传**支持5个附件上传
- **文件类型限制**支持doc、docx、pdf、txt、图片等格式
- **文件大小限制**单文件最大50MB
### 🔲 二维码功能
- **自动生成**:基于配置信息生成二维码
- **在线预览**:弹窗查看二维码
- **信息展示**显示配置ID和任务信息
## 使用说明
### 1. 部署后端
1. 将后端Java文件复制到对应目录
```
yjh-mes/src/main/java/cn/sourceplan/fiih/
yjh-mes/src/main/resources/mapper/fiih/
```
2. 执行数据库建表SQL
3. 重启Spring Boot应用
### 2. 部署前端
1. 将前端文件复制到对应目录:
```
mes-ui/src/api/mes/fiih/
mes-ui/src/views/mes/fiih/
```
2. 配置路由在router/index.js中添加
```javascript
{
path: '/fiih/config',
component: () => import('@/views/mes/fiih/index'),
name: 'FiihConfig',
meta: { title: 'FIIH质量管理配置', icon: 'form' }
}
```
3. 配置权限(在系统管理中添加菜单和权限)
### 3. 权限配置
需要在系统中配置以下权限:
- `fiih:config:list` - 查询权限
- `fiih:config:query` - 详情权限
- `fiih:config:add` - 新增权限
- `fiih:config:edit` - 修改权限
- `fiih:config:remove` - 删除权限
- `fiih:config:export` - 导出权限
## 通道配置示例
```json
{
"name": "温度传感器",
"type": "temperature",
"unit": "℃",
"range": [0, 100],
"precision": 0.1,
"alarm": {
"high": 80,
"low": 10
},
"description": "环境温度监测"
}
```
## 外部系统集成
### 🔌 外部接口使用
#### 1. 无权限新增接口
```bash
POST /fiih/config/insert
Content-Type: application/json
{
"fiihObjectName": "质量检测任务",
"fiihTaskId": 1001,
"fiihTaskName": "产品质量检测",
"fiihLinkId": 2001,
"fiihLinkName": "初检环节",
"fiihLeaderId": 3001,
"fiihLeaderName": "张三",
"fiihStatus": 1,
"tenantId": 1
}
```
#### 2. 自动菜单创建
```bash
# 为任务创建菜单
POST /fiih/config/createMenu/1001
# 为环节创建菜单
POST /fiih/config/createMenu/link/2001
```
### 🎯 集成场景
1. **工作流系统集成**
- 工作流创建任务时,自动调用`/insert`接口创建FIIH配置
- 任务完成时,自动调用菜单创建接口生成详情页面
2. **ERP系统集成**
- ERP生成质量检测任务时同步创建FIIH配置
- 支持批量导入和状态同步
3. **移动端集成**
- 移动端可直接调用无权限接口进行数据录入
- 支持二维码扫描快速创建配置
## 扩展开发
### 添加新字段
1. 在实体类中添加属性
2. 在Mapper.xml中添加字段映射
3. 在Vue组件中添加表单项
### 自定义验证
1. 在Service中添加验证逻辑
2. 在前端添加表单验证规则
### 集成其他模块
- 可以与用户管理模块集成,实现负责人选择
- 可以与工作流模块集成,实现任务流程管理
- 可以与报表模块集成,实现数据统计分析
## 注意事项
1. **JSON格式**通道配置必须是有效的JSON格式
2. **文件上传**:需要配置文件上传路径和权限
3. **二维码生成**需要集成二维码生成库如Google ZXing
4. **权限控制**:确保正确配置用户权限
5. **数据备份**:定期备份配置数据
## 技术支持
如有问题,请联系开发团队或查看相关技术文档。

View File

@@ -0,0 +1,7 @@
# sql提交规则
### 自2025-11-10创建此文件后添加/删除/修改的数据库语句作为独立的sql文件并提交到此文件所在的文件夹中(.task)
### 命名规则:年月日+2位数字(当日顺序)+姓名+功能简述
#### 例如:`2025-11-10_01_周启威_SQL提交规则.sql`

Some files were not shown because too many files have changed in this diff Show More