XNSim/XNSimHtml/utils/model-utils.js

271 lines
8.6 KiB
JavaScript
Raw Normal View History

const { getDBConnection } = require('./file-utils');
// 查询ATAChapters表
function getATAChapters() {
try {
const db = getDBConnection(true);
// 直接使用ATAChapters表名查询
const chapters = db.prepare("SELECT ID, Name, Name_CN FROM 'ATAChapters' ORDER BY ID").all();
return chapters;
} catch (error) {
console.error('获取ATA章节数据失败:', error.message);
throw error;
}
}
// 根据章节ID查询XNModels表中的模型
function getModelsByChapterId(chapterId, planeName) {
try {
const db = getDBConnection(true);
// 根据planeName是否为空构建不同的查询
let query;
let params;
if (!planeName || planeName === '' || planeName === 'undefined') {
query = `
SELECT PlaneName, Chapters_ID, ModelName, ModelName_CN, Description, ClassName
FROM 'XNModels'
WHERE Chapters_ID = ?
ORDER BY ModelName
`;
params = [chapterId];
} else {
query = `
SELECT PlaneName, Chapters_ID, ModelName, ModelName_CN, Description, ClassName
FROM 'XNModels'
WHERE Chapters_ID = ? AND PlaneName = ?
ORDER BY ModelName
`;
params = [chapterId, planeName];
}
const models = db.prepare(query).all(...params);
return models;
} catch (error) {
console.error(`获取章节${chapterId}的模型数据失败:`, error.message);
throw error;
}
}
// 根据ClassName查询XNModelsVersion表中的模型版本
function getModelVersionsByClassName(className, planeName) {
try {
const db = getDBConnection(true);
// 根据planeName是否为空构建不同的查询
let query;
let params;
if (!planeName || planeName === '') {
query = `
SELECT
PlaneName, ClassName, Name, Version, CodePath, Author, Description,
CreatTime, ChangeTime, RunFreqGroup, RunNode, Priority,
DataPackagePath, DataPackageHeaderPath, DataPackageEntryPoint, DataPackageInterfaceName,
ConfID
FROM 'XNModelsVersion'
WHERE ClassName = ?
ORDER BY Version DESC
`;
params = [className];
} else {
query = `
SELECT
PlaneName, ClassName, Name, Version, CodePath, Author, Description,
CreatTime, ChangeTime, RunFreqGroup, RunNode, Priority,
DataPackagePath, DataPackageHeaderPath, DataPackageEntryPoint, DataPackageInterfaceName,
ConfID
FROM 'XNModelsVersion'
WHERE ClassName = ? AND PlaneName = ?
ORDER BY Version DESC
`;
params = [className, planeName];
}
const versions = db.prepare(query).all(...params);
return versions;
} catch (error) {
console.error(`获取模型${className}的版本数据失败:`, error.message);
throw error;
}
}
// 保存或更新模型版本信息
function saveModelVersion(versionData) {
try {
// 验证必填字段
const requiredFields = ['ClassName', 'Name', 'Version', 'Author', 'PlaneName', 'ConfID'];
for (const field of requiredFields) {
if (!versionData[field]) {
throw new Error(`${field} 是必填字段`);
}
}
const db = getDBConnection();
// 检查是否为更新模式
if (versionData.isUpdate) {
// 查询是否存在要更新的版本
const existingVersion = db.prepare(`
SELECT COUNT(*) as count FROM 'XNModelsVersion'
WHERE ClassName = ? AND Version = ? AND PlaneName = ?
`).get(versionData.ClassName, versionData.originalVersion || versionData.Version, versionData.PlaneName);
if (existingVersion.count === 0) {
// 不存在要更新的版本,创建新版本
return saveNewVersion(db, versionData);
}
// 使用前端传来的修改时间,如果没有则生成当前时间
let changeTime = versionData.ChangeTime;
if (!changeTime) {
// 生成当前时间格式为YYYY-MM-DD HH:MM:SS
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
changeTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
// 更新现有版本
const updateResult = db.prepare(`
UPDATE 'XNModelsVersion'
SET
PlaneName = ?,
ClassName = ?,
Name = ?,
Version = ?,
CodePath = ?,
Author = ?,
Description = ?,
CreatTime = ?,
ChangeTime = ?,
RunFreqGroup = ?,
RunNode = ?,
Priority = ?,
DataPackagePath = ?,
DataPackageHeaderPath = ?,
DataPackageEntryPoint = ?,
DataPackageInterfaceName = ?,
ConfID = ?
WHERE ClassName = ? AND Version = ? AND PlaneName = ?
`).run(
versionData.PlaneName,
versionData.ClassName,
versionData.Name,
versionData.Version,
versionData.CodePath || '',
versionData.Author,
versionData.Description || '',
versionData.CreatTime || changeTime,
changeTime,
versionData.RunFreqGroup || '',
versionData.RunNode || '',
versionData.Priority || '0',
versionData.DataPackagePath || '',
versionData.DataPackageHeaderPath || '',
versionData.DataPackageEntryPoint || '',
versionData.DataPackageInterfaceName || '',
versionData.ConfID,
versionData.ClassName,
versionData.originalVersion || versionData.Version,
versionData.PlaneName
);
return {
success: true,
isNew: false,
changes: updateResult.changes,
message: '模型版本更新成功'
};
} else {
// 创建新版本
return saveNewVersion(db, versionData);
}
} catch (error) {
console.error('保存模型版本时出错:', error);
throw error;
}
}
// 内部函数:保存新版本
function saveNewVersion(db, versionData) {
try {
// 检查版本是否已存在
const existingVersion = db.prepare(`
SELECT COUNT(*) as count FROM 'XNModelsVersion'
WHERE ClassName = ? AND Version = ? AND PlaneName = ?
`).get(versionData.ClassName, versionData.Version, versionData.PlaneName);
if (existingVersion.count > 0) {
throw new Error(`版本 ${versionData.Version} 已存在,请使用其他版本号`);
}
// 生成当前时间格式为YYYY-MM-DD HH:MM:SS
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
const formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
// 使用前端传来的时间或生成的时间
const createTime = versionData.CreatTime || formattedDateTime;
const changeTime = versionData.ChangeTime || formattedDateTime;
// 插入新版本
const insertResult = db.prepare(`
INSERT INTO 'XNModelsVersion' (
PlaneName, ClassName, Name, Version, CodePath, Author, Description,
CreatTime, ChangeTime, RunFreqGroup, RunNode, Priority,
DataPackagePath, DataPackageHeaderPath, DataPackageEntryPoint, DataPackageInterfaceName,
ConfID
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`).run(
versionData.PlaneName,
versionData.ClassName,
versionData.Name,
versionData.Version,
versionData.CodePath || '',
versionData.Author,
versionData.Description || '',
createTime,
changeTime,
versionData.RunFreqGroup || '',
versionData.RunNode || '',
versionData.Priority || '0',
versionData.DataPackagePath || '',
versionData.DataPackageHeaderPath || '',
versionData.DataPackageEntryPoint || '',
versionData.DataPackageInterfaceName || '',
versionData.ConfID
);
return {
success: true,
isNew: true,
id: insertResult.lastInsertRowid,
message: '模型版本创建成功'
};
} catch (error) {
console.error('创建模型版本失败:', error);
throw error;
}
}
module.exports = {
getATAChapters,
getModelsByChapterId,
getModelVersionsByClassName,
saveModelVersion
};