From 63442f0e2760394112fb4c2ca9200d2b0e071f36 Mon Sep 17 00:00:00 2001 From: jinchao <383321154@qq.com> Date: Mon, 23 Jun 2025 16:42:06 +0800 Subject: [PATCH] =?UTF-8?q?V0.33.1.250623=5Falpha:=E4=BF=AE=E6=94=B9XNCore?= =?UTF-8?q?=E5=92=8CXNEngine=E9=80=82=E9=85=8D=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Release/database/XNSim.db | Bin 1224704 -> 1224704 bytes XNCore/XNModelObject.cpp | 20 +++---- XNCore/XNScenarioManager.cpp | 21 ++----- XNCore/XNServiceObject.cpp | 12 ++-- XNEngine/XNEngine.cpp | 16 ++--- XNSimPortal/components/service-development.js | 55 +++++++++++------- XNSimPortal/utils/service-utils.js | 9 +-- 7 files changed, 65 insertions(+), 68 deletions(-) diff --git a/Release/database/XNSim.db b/Release/database/XNSim.db index d7759aeeb27a9612cbdda6afde7aff5bd699b997..d1135b37e4ee9b4c0d0ce864fec1edbdba15dea1 100644 GIT binary patch delta 770 zcmZp8;MMTJYl1W*^F$eEM&^wPQ|uWfn!nn&f3;`a{?(p|KS6|pqnDH4h_8XSm?ww3 znyZ0xB}ebZ#!`;@CP@ii21(26#$s`C4r5E>rxW^~uU`Lr_QYp>%b(5ZecH9qE7;!; zpXk$NO;7etecH9+SwrK~j`nB0i=4H!AqL>n_F_Zx^C>IppU-LmDu*b1vS-%Q*$bY{ zYk4}a`^k>prxSW!H1s^}pYgP3+WS2{PtK7Si!&oqOvhW92h!={*AKY z;+)gBtz_EI4Kc^a%*w=Yd&4TG7FIc4h8_lfZa!Y^-MpcY<+ZPC-T@&9)y0fs|}*($&R%z*6)7WKg~Hm zFD)~@v?#G8Ge58XaYJK-pKpFjYEE%jYEdyz2rLquT2z*qoC+0sv2X>@;HPsoJe#)j z{hrxeM#zRk+=1PAWQ~s-n!usnoD~B0ablafxWV?WjZ9T`%%MEV)7d{TO=jXr-ahLC z({b+Ud4HHVnG8eQfiw^^12GE_vjQ<25VHd@2M}`tF&7YX12GQ}^8zs+5c31E!1la9 If|E7_0DdB682|tP delta 219 zcmZp8;MMTJYl1W*!$cWpMuv?EQ|uYVo4?w(f3;`a{?(p|KS79{b0sIg5nlsuF;5P6 zHCF@Y%FTiTlR0@CL&SL*Bn|x=WyQrgrf*xxw4dA1Qo+F3%D~9V*m!%xDy9}z86L)3 z27YcnYu;%*_qcy^_j5gBt7DC1F=ftTtOXhq%ecLEBU8H_a|ln~boLKSlef?Lz;v8@ zVgPS@-XA6)W(HywAZ7((HXvpPVh$kY1Y#~A<_2OOAO@-D17dz47TBKmM{v?+03hd2 AZ~y=R diff --git a/XNCore/XNModelObject.cpp b/XNCore/XNModelObject.cpp index 65f4a41..1d52e39 100755 --- a/XNCore/XNModelObject.cpp +++ b/XNCore/XNModelObject.cpp @@ -362,18 +362,18 @@ void XNModelObject::ParseConfig() return; } - d->_sDescription = XNSim::getStringFromSqlite3(stmt, 7); - d->_sAuthor = XNSim::getStringFromSqlite3(stmt, 6); + d->_sDescription = XNSim::getStringFromSqlite3(stmt, 6); + d->_sAuthor = XNSim::getStringFromSqlite3(stmt, 5); d->_sVersion = XNSim::getStringFromSqlite3(stmt, 2); // 解析时间 - std::string createTimeStr = XNSim::getStringFromSqlite3(stmt, 8); - std::string changeTimeStr = XNSim::getStringFromSqlite3(stmt, 9); + std::string createTimeStr = XNSim::getStringFromSqlite3(stmt, 7); + std::string changeTimeStr = XNSim::getStringFromSqlite3(stmt, 8); d->_cCreatTime = XNSim::parseISOTime(createTimeStr); d->_cChangeTime = XNSim::parseISOTime(changeTimeStr); - d->_runFreq = XNSim::safe_stoi(XNSim::getStringFromSqlite3(stmt, 10)); - d->_runNode = XNSim::safe_stoi(XNSim::getStringFromSqlite3(stmt, 11)); - d->_runPriority = XNSim::safe_stoi(XNSim::getStringFromSqlite3(stmt, 12)); + d->_runFreq = XNSim::safe_stoi(XNSim::getStringFromSqlite3(stmt, 9)); + d->_runNode = XNSim::safe_stoi(XNSim::getStringFromSqlite3(stmt, 10)); + d->_runPriority = XNSim::safe_stoi(XNSim::getStringFromSqlite3(stmt, 11)); // 注册周期性函数 auto framework = GetFramework(); @@ -387,11 +387,11 @@ void XNModelObject::ParseConfig() } // 加载动态库 - std::string mathlib = XNSim::getStringFromSqlite3(stmt, 13); + std::string mathlibPath = XNSim::getStringFromSqlite3(stmt, 12); + std::string mathlibName = XNSim::getStringFromSqlite3(stmt, 13); + std::string mathlib = mathlibPath + "/" + mathlibName; if (mathlib.length() > 0) { // 使用标准C++文件路径处理 - //std::filesystem::path xmlPath(GetXmlPath()); - //d->_sLibPath = xmlPath.parent_path().string() + "/" + mathlib; std::string libPath = d->_sLibPath + "/" + mathlib; // 使用标准C++动态库加载 d->_dynamicLib = dlopen(libPath.c_str(), RTLD_LAZY); diff --git a/XNCore/XNScenarioManager.cpp b/XNCore/XNScenarioManager.cpp index 6f0a422..285a786 100755 --- a/XNCore/XNScenarioManager.cpp +++ b/XNCore/XNScenarioManager.cpp @@ -235,31 +235,20 @@ bool XNScenarioManager::ParseConfig(const std::string &ConfigID) return false; } std::string planeName = XNSim::getStringFromSqlite3(stmt, 1); + std::string confName = XNSim::getStringFromSqlite3(stmt, 2); std::string osName = XNSim::getStringFromSqlite3(stmt, 3); std::string version = XNSim::getStringFromSqlite3(stmt, 4); std::string kernel = XNSim::getStringFromSqlite3(stmt, 5); - std::string rootPath = XNSim::getStringFromSqlite3(stmt, 7); - if (rootPath.empty()) { - LOG_WARNING("0x1020 未设置工作目录,使用默认工作目录: %1", XNCorePath); - rootPath = XNCorePath; - } + std::string rootPath = XNCorePath + "/Configuration/" + confName; GetFramework()->SetWorkPath(rootPath); // 设置模型库目录 - std::string modelPath = rootPath + XNSim::getStringFromSqlite3(stmt, 8); - if (modelPath.empty()) { - LOG_WARNING("0x1020 未设置模型库目录,使用默认模型库目录: %1/Models", XNCorePath); - modelPath = XNCorePath + "/Models"; - } + std::string modelPath = rootPath + "/Models"; GetFramework()->SetModelPath(modelPath); // 设置服务库目录 - std::string servicePath = rootPath + XNSim::getStringFromSqlite3(stmt, 9); - if (servicePath.empty()) { - LOG_WARNING("0x1020 未设置服务库目录,使用默认服务库目录: %1/Services", XNCorePath); - servicePath = XNCorePath + "/Services"; - } + std::string servicePath = rootPath + "/Services"; GetFramework()->SetServicePath(servicePath); // 设置域ID - uint32_t domainID = std::stoul(XNSim::getStringFromSqlite3(stmt, 10)); + uint32_t domainID = std::stoul(XNSim::getStringFromSqlite3(stmt, 7)); if (domainID == 0 || domainID > 225) { LOG_WARNING("0x1020 域ID设置错误,使用默认域ID: 10"); domainID = 10; diff --git a/XNCore/XNServiceObject.cpp b/XNCore/XNServiceObject.cpp index 15b6b63..c4ba212 100755 --- a/XNCore/XNServiceObject.cpp +++ b/XNCore/XNServiceObject.cpp @@ -238,18 +238,18 @@ void XNServiceObject::ParseConfig() sqlite3_close(db); return; } - d->_sDescription = XNSim::getStringFromSqlite3(stmt, 5); - d->_sAuthor = XNSim::getStringFromSqlite3(stmt, 4); + d->_sDescription = XNSim::getStringFromSqlite3(stmt, 4); + d->_sAuthor = XNSim::getStringFromSqlite3(stmt, 3); d->_sVersion = XNSim::getStringFromSqlite3(stmt, 2); // 解析时间 - std::string createTimeStr = XNSim::getStringFromSqlite3(stmt, 6); - std::string changeTimeStr = XNSim::getStringFromSqlite3(stmt, 7); + std::string createTimeStr = XNSim::getStringFromSqlite3(stmt, 5); + std::string changeTimeStr = XNSim::getStringFromSqlite3(stmt, 6); d->_cCreateTime = XNSim::parseISOTime(createTimeStr); d->_cChangeTime = XNSim::parseISOTime(changeTimeStr); // 读取服务命令列表 - std::string commandListStr = XNSim::getStringFromSqlite3(stmt, 8); + std::string commandListStr = XNSim::getStringFromSqlite3(stmt, 7); if (!commandListStr.empty()) { try { XN_JSON commandList = XN_JSON::parse(commandListStr); @@ -273,7 +273,7 @@ void XNServiceObject::ParseConfig() } // 读取其他参数 - std::string otherParamsStr = XNSim::getStringFromSqlite3(stmt, 9); + std::string otherParamsStr = XNSim::getStringFromSqlite3(stmt, 8); if (!otherParamsStr.empty()) { try { d->_otherParams = XN_JSON::parse(otherParamsStr); diff --git a/XNEngine/XNEngine.cpp b/XNEngine/XNEngine.cpp index 7ec7439..4c75db3 100755 --- a/XNEngine/XNEngine.cpp +++ b/XNEngine/XNEngine.cpp @@ -585,17 +585,17 @@ bool XNEngine::ParseDataBase(const std::string &ConfigId) return sqlite3_column_int(stmt, column) != 0; }; - bool isDebug = readBoolean(stmt, 11); - bool isInfo = readBoolean(stmt, 12); - bool isWarn = readBoolean(stmt, 13); - bool isError = readBoolean(stmt, 14); + bool isDebug = readBoolean(stmt, 8); + bool isInfo = readBoolean(stmt, 9); + bool isWarn = readBoolean(stmt, 10); + bool isError = readBoolean(stmt, 11); SetConsoleOutput(isDebug, isInfo, isWarn, isError); - isDebug = readBoolean(stmt, 15); - isInfo = readBoolean(stmt, 16); - isWarn = readBoolean(stmt, 17); - isError = readBoolean(stmt, 18); + isDebug = readBoolean(stmt, 12); + isInfo = readBoolean(stmt, 13); + isWarn = readBoolean(stmt, 14); + isError = readBoolean(stmt, 15); SetLogLevel(isDebug, isInfo, isWarn, isError); diff --git a/XNSimPortal/components/service-development.js b/XNSimPortal/components/service-development.js index 75d0e38..e78abe7 100644 --- a/XNSimPortal/components/service-development.js +++ b/XNSimPortal/components/service-development.js @@ -863,10 +863,10 @@ class ServiceDevelopment extends HTMLElement { } } }, - { text: '生成代码', color: '#805ad5', action: () => alert('生成代码功能即将上线') }, - { text: '编辑代码', color: '#d69e2e', action: () => alert('编辑代码功能即将上线') }, - { text: '服务编译', color: '#dd6b20', action: () => alert('服务编译功能即将上线') }, - { text: '服务提交', color: '#e53e3e', action: () => alert('服务提交功能即将上线') } + { text: '生成模板代码', color: '#805ad5', action: () => this.generateTemplateCode() }, + { text: '下载模板代码', color: '#d69e2e', action: () => this.downloadTemplateCode() }, + { text: '上传服务代码', color: '#dd6b20', action: () => this.uploadServiceCode() }, + { text: '服务编译发布', color: '#e53e3e', action: () => this.compileAndPublishService() } ]; buttonConfigs.forEach(config => { @@ -947,25 +947,11 @@ class ServiceDevelopment extends HTMLElement { basicInfoSection.appendChild(leftColumn); basicInfoSection.appendChild(rightColumn); - // 代码路径 - const codePathSection = document.createElement('div'); - codePathSection.className = 'form-section code-path'; - codePathSection.style.cssText = 'margin-top: 20px; border-top: 1px solid #e2e8f0; padding-top: 20px;'; - - const codePathGroup = document.createElement('div'); - codePathGroup.className = 'form-group'; - codePathGroup.innerHTML = ` - - - `; - - codePathSection.appendChild(codePathGroup); - // 添加 CmdList 和 OtherParam 字段 const jsonFieldsSection = document.createElement('div'); jsonFieldsSection.className = 'form-section json-fields'; jsonFieldsSection.style.cssText = 'margin-top: 20px; border-top: 1px solid #e2e8f0; padding-top: 20px;'; - + // CmdList 字段 const cmdListGroup = document.createElement('div'); cmdListGroup.className = 'form-group'; @@ -1028,7 +1014,6 @@ class ServiceDevelopment extends HTMLElement { // 组装表单 form.appendChild(basicInfoSection); - form.appendChild(codePathSection); form.appendChild(jsonFieldsSection); formContainer.appendChild(form); container.appendChild(formContainer); @@ -1080,7 +1065,6 @@ class ServiceDevelopment extends HTMLElement { Author: form.querySelector('#author').value, Description: form.querySelector('#description').value, ChangeTime: form.querySelector('#changeTime').value, - CodePath: form.querySelector('#codePath').value, CmdList: cmdListInput.value, OtherParam: otherParamInput.value, isUpdate: this.isEditMode, @@ -1574,7 +1558,6 @@ class ServiceDevelopment extends HTMLElement { Description: '', CreatTime: this.getCurrentDateTime(), ChangeTime: this.getCurrentDateTime(), - CodePath: '', CmdList: [], // 初始化为空数组 OtherParam: '{}' // 初始化为空对象的 JSON 字符串 }; @@ -1794,6 +1777,34 @@ class ServiceDevelopment extends HTMLElement { throw error; } } + + // 生成模板代码 + generateTemplateCode() { + console.log('生成模板代码功能'); + // TODO: 实现生成模板代码的具体功能 + alert('生成模板代码功能即将上线'); + } + + // 下载模板代码 + downloadTemplateCode() { + console.log('下载模板代码功能'); + // TODO: 实现下载模板代码的具体功能 + alert('下载模板代码功能即将上线'); + } + + // 上传服务代码 + uploadServiceCode() { + console.log('上传服务代码功能'); + // TODO: 实现上传服务代码的具体功能 + alert('上传服务代码功能即将上线'); + } + + // 服务编译发布 + compileAndPublishService() { + console.log('服务编译发布功能'); + // TODO: 实现服务编译发布的具体功能 + alert('服务编译发布功能即将上线'); + } } customElements.define('service-development', ServiceDevelopment); \ No newline at end of file diff --git a/XNSimPortal/utils/service-utils.js b/XNSimPortal/utils/service-utils.js index 2dc2952..9861bd9 100644 --- a/XNSimPortal/utils/service-utils.js +++ b/XNSimPortal/utils/service-utils.js @@ -26,7 +26,7 @@ function getServiceVersionsByClassName(className) { // 查询该类名下的所有版本 const versions = db.prepare(` - SELECT ClassName, Name, Version, CodePath, Author, Description, + SELECT ClassName, Name, Version, Author, Description, CreatTime, ChangeTime, CmdList, OtherParam FROM 'XNServiceVersion' WHERE ClassName = ? @@ -88,7 +88,6 @@ function saveServiceVersion(versionData) { Version = ?, Author = ?, Description = ?, - CodePath = ?, ChangeTime = ?, CmdList = ?, OtherParam = ? @@ -98,7 +97,6 @@ function saveServiceVersion(versionData) { versionData.Version, versionData.Author, versionData.Description || '', - versionData.CodePath || '', changeTime, // 使用前端传来的时间或生成的当前时间 versionData.CmdList || '[]', versionData.OtherParam || '{}', @@ -152,14 +150,13 @@ function saveNewServiceVersion(db, versionData) { // 插入新版本 const insertResult = db.prepare(` INSERT INTO 'XNServiceVersion' ( - ClassName, Name, Version, CodePath, Author, Description, + ClassName, Name, Version, Author, Description, CreatTime, ChangeTime, CmdList, OtherParam - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) `).run( versionData.ClassName, versionData.Name, versionData.Version, - versionData.CodePath || '', versionData.Author, versionData.Description || '', createTime, // 使用前端传来的创建时间或生成的当前时间