初始代码
This commit is contained in:
401
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-09-18_定氮仪接入.sql
Normal file
401
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-09-18_定氮仪接入.sql
Normal 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';
|
||||
186
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-10-16_兴万达改进.sql
Normal file
186
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-10-16_兴万达改进.sql
Normal 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 '父故障ID(0表示根节点)',
|
||||
`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. 测试故障树选择功能
|
||||
--
|
||||
-- ============================================
|
||||
225
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-10-17_兴万达改进(库存预警).sql
Normal file
225
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-10-17_兴万达改进(库存预警).sql
Normal 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 '仓库ID(NULL表示所有仓库)',
|
||||
`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;
|
||||
|
||||
-- ============================================
|
||||
-- 脚本执行完成
|
||||
-- ============================================
|
||||
|
||||
479
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-10-30_工序执行情况表重做.sql
Normal file
479
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-10-30_工序执行情况表重做.sql
Normal 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万级报工记录
|
||||
- 查询性能稳定
|
||||
- 数据准确性有保障
|
||||
*/
|
||||
|
||||
121
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-11-01_FIIH质量管理.sql
Normal file
121
yawei-mes/.sql/2025-11-10_init前的sql文件/2025-11-01_FIIH质量管理.sql
Normal 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质量管理数据库配置表';
|
||||
@@ -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条默认配置数据
|
||||
-- =============================================
|
||||
|
||||
Reference in New Issue
Block a user