From da9df9d46ed3fc50e0c03497bd9f76b8aa1a4595 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期三, 14 一月 2026 15:37:48 +0800
Subject: [PATCH] 1.修复以下问题: 作业前置条件不足导致 PJ 验证失败:onPRJobMultiCreate 调 CMaster::setProcessJobs,CProcessJob::validate 要求“当前没有其它 PJ”(issue 1000),且 carrierPresent/slotUsable 必须为真。只要本地还有未结批的 PJ/CJ 或载具/槽位状态未就绪(ID 未绑、Slot 未使能),Host 发送的 CreateMultiPJ 会直接被丢弃(返回 size=0),但当前代码没有向 Host 回 ACK/NAK,Host 会误以为创建成功。
---
SourceCode/Bond/Servo/GlassLogDb.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/GlassLogDb.cpp b/SourceCode/Bond/Servo/GlassLogDb.cpp
index b9f0df5..d348bd9 100644
--- a/SourceCode/Bond/Servo/GlassLogDb.cpp
+++ b/SourceCode/Bond/Servo/GlassLogDb.cpp
@@ -524,3 +524,55 @@
ofs.flush();
return rows;
}
+
+std::optional<GlassLogDb::Row> GlassLogDb::queryById(long long id) {
+ std::lock_guard<std::mutex> lk(mtx_);
+
+ const char* sql =
+ "SELECT id, cassette_seq_no, job_seq_no, class_id, material_type, state,"
+ " IFNULL(strftime('%Y-%m-%d %H:%M:%S', t_start, 'localtime'), ''),"
+ " IFNULL(strftime('%Y-%m-%d %H:%M:%S', t_end, 'localtime'), ''),"
+ " buddy_id, aoi_result, path, params, pretty"
+ " FROM " GLASS_LOG_TABLE
+ " WHERE id = ?";
+
+ sqlite3_stmt* stmt = nullptr;
+ try {
+ throwIf(sqlite3_prepare_v2(db_, sql, -1, &stmt, nullptr), db_, "prepare queryById");
+ throwIf(sqlite3_bind_int64(stmt, 1, id), db_, "bind id");
+
+ std::optional<Row> result;
+
+ int rc = sqlite3_step(stmt);
+ if (rc == SQLITE_ROW) {
+ Row row;
+ row.id = sqlite3_column_int64(stmt, 0);
+ row.cassetteSeqNo = sqlite3_column_int(stmt, 1);
+ row.jobSeqNo = sqlite3_column_int(stmt, 2);
+ row.classId = safe_text(stmt, 3);
+ row.materialType = sqlite3_column_int(stmt, 4);
+ row.state = sqlite3_column_int(stmt, 5);
+ row.tStart = safe_text(stmt, 6);
+ row.tEnd = safe_text(stmt, 7);
+ row.buddyId = safe_text(stmt, 8);
+ row.aoiResult = sqlite3_column_int(stmt, 9);
+ row.path = safe_text(stmt, 10);
+ row.params = safe_text(stmt, 11);
+ row.pretty = safe_text(stmt, 12);
+
+ result = std::move(row);
+ }
+ else if (rc != SQLITE_DONE) {
+ throwIf(rc, db_, "queryById step");
+ }
+
+ sqlite3_finalize(stmt);
+ return result;
+ }
+ catch (const std::exception& e) {
+ if (stmt) sqlite3_finalize(stmt);
+ TRACE("GlassLogDb::queryById exception: %s\n", e.what());
+ return std::nullopt;
+ }
+}
+
--
Gitblit v1.9.3