From 9198ac12e4e2ff64a2cf65c32d576f02d54c346a Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期六, 10 一月 2026 16:50:32 +0800
Subject: [PATCH] 1.S1F3_CurrentRecipe,S6F11_RecipeChange实现。

---
 SourceCode/Bond/Servo/TransferManager.cpp |  142 +++++++++++++++++++++-------------------------
 1 files changed, 65 insertions(+), 77 deletions(-)

diff --git a/SourceCode/Bond/Servo/TransferManager.cpp b/SourceCode/Bond/Servo/TransferManager.cpp
index bfcf457..bf7e2a4 100644
--- a/SourceCode/Bond/Servo/TransferManager.cpp
+++ b/SourceCode/Bond/Servo/TransferManager.cpp
@@ -29,45 +29,6 @@
     }
 }
 
-// 任务状态转换成 int 类型
-int TransferManager::statusToInt(TransferStatus status) {
-    return static_cast<int>(status);
-}
-
-// int 类型转换成任务状态
-TransferStatus TransferManager::intToStatus(int value) {
-    switch (value) {
-        case 0: return TransferStatus::Ready;
-        case 1: return TransferStatus::Running;
-        case 2: return TransferStatus::Error;
-        case 3: return TransferStatus::Abort;
-        case 4: return TransferStatus::Completed;
-        default: return TransferStatus::Error;
-    }
-}
-
-// 任务状态转换成字符串
-std::string TransferManager::statusToString(TransferStatus status) {
-    switch (status) {
-        case TransferStatus::Ready:     return "Ready";
-        case TransferStatus::Running:   return "Running";
-        case TransferStatus::Error:     return "Error";
-        case TransferStatus::Abort:     return "Abort";
-        case TransferStatus::Completed: return "Completed";
-        default:                        return "Unknown";
-    }
-}
-
-// 字符串转换成任务状态
-TransferStatus TransferManager::stringToStatus(const std::string& str) {
-    if (str == "Ready")     return TransferStatus::Ready;
-    if (str == "Running")   return TransferStatus::Running;
-    if (str == "Error")     return TransferStatus::Error;
-    if (str == "Abort")     return TransferStatus::Abort;
-    if (str == "Completed") return TransferStatus::Completed;
-    return TransferStatus::Error;
-}
-
 // 本地编码转为 UTF-8
 std::string TransferManager::ansiToUtf8(const std::string& ansiStr) {
     // 1. ANSI → UTF-16
@@ -134,22 +95,49 @@
 }
 
 // 插入测试搬运记录
-void TransferManager::insertTestTransferRecord() {
-    TransferData data;
-    data.strClassID = "Task-20240529-001";
-    data.strStatus = "Running";
-    data.strCreateTime = "2024-05-29 10:30:00";
-    data.strPickTime = "2024-05-29 10:31:00";
-    data.strPlaceTime = "2024-05-29 10:32:00";
-    data.strEndTime = "2024-05-29 10:33:00";
-    data.strDescription = "搬运动作:从 Port1 取片 → Port2 放片";
+void TransferManager::insertTestTransferRecord(int nCount /*=10000*/) {
+    if (nullptr != m_pDB) {
+        static const char* STATUS_STR[] = {
+            "Unknown", "Ready", "Running", "Picking", "Placing",
+            "Restoring", "Error", "Abort", "Completed"
+        };
 
-    int nRecordId = -1;
-    if (TransferManager::getInstance().addTransferRecord(data, nRecordId)) {
-        std::cout << "插入成功,记录 ID = " << nRecordId << std::endl;
-    }
-    else {
-        std::cerr << "插入失败!" << std::endl;
+        auto formatTime = [](const std::tm& time) {
+            char szTime[64];
+            strftime(szTime, sizeof(szTime), "%Y-%m-%d %H:%M:%S", &time);
+            return std::string(szTime);
+        };
+
+        std::time_t startTime = std::time(nullptr);
+        for (int i = 0; i < nCount; ++i) {
+            TransferData data;
+            data.strClassID = "T-" + std::to_string(1000 + i);
+            data.strStatus = STATUS_STR[i % 9];
+
+            std::time_t baseTime = startTime + i * 60;
+            std::time_t pickTime = baseTime + 60;
+            std::time_t placeTime = pickTime + 60;
+            std::time_t endTime = placeTime + 60;
+
+            std::tm tmCreate = {}, tmPick = {}, tmPlace = {}, tmEnd = {};
+            localtime_s(&tmCreate, &baseTime);
+            localtime_s(&tmPick, &pickTime);
+            localtime_s(&tmPlace, &placeTime);
+            localtime_s(&tmEnd, &endTime);
+
+            data.strCreateTime = formatTime(tmCreate);
+            data.strPickTime = formatTime(tmPick);
+            data.strPlaceTime = formatTime(tmPlace);
+            data.strEndTime = formatTime(tmEnd);
+            data.strDescription = "Mock transfer task " + std::to_string(i);
+
+            int nRecordId = 0;
+            if (!addTransferRecord(data, nRecordId)) {
+                std::cerr << "[Error] 插入第 " << i << " 条记录失败" << std::endl;
+            }
+        }
+
+        std::cout << "[Mock] 成功插入 " << nCount << " 条测试搬运记录。" << std::endl;
     }
 }
 
@@ -221,13 +209,13 @@
 
         TransferData data;
         data.nRecordId = std::stoi(row[0]);
-        data.strClassID = row[1];
-        data.strStatus = row[2];
+        data.strClassID = utf8ToAnsi(row[1]);
+        data.strStatus = utf8ToAnsi(row[2]);
         data.strCreateTime = row[3];
         data.strPickTime = row[4];
         data.strPlaceTime = row[5];
         data.strEndTime = row[6];
-        data.strDescription = row[7];
+        data.strDescription = utf8ToAnsi(row[7]);
 
         records.push_back(data);
     }
@@ -247,13 +235,13 @@
 	auto results = m_pDB->fetchResults(oss.str());
 	if (!results.empty() && results[0].size() == 8) {
 		data.nRecordId = std::stoi(results[0][0]);
-		data.strClassID = results[0][1];
-		data.strStatus = results[0][2];
+		data.strClassID = utf8ToAnsi(results[0][1]);
+		data.strStatus = utf8ToAnsi(results[0][2]);
 		data.strCreateTime = results[0][3];
 		data.strPickTime = results[0][4];
 		data.strPlaceTime = results[0][5];
 		data.strEndTime = results[0][6];
-		data.strDescription = results[0][7];
+		data.strDescription = utf8ToAnsi(results[0][7]);
 	}
 	return data;
 }
@@ -278,13 +266,13 @@
 		if (row.size() != 8) continue;
 		TransferData data;
 		data.nRecordId = std::stoi(row[0]);
-		data.strClassID = row[1];
-		data.strStatus = row[2];
+		data.strClassID = utf8ToAnsi(row[1]);
+		data.strStatus = utf8ToAnsi(row[2]);
 		data.strCreateTime = row[3];
 		data.strPickTime = row[4];
 		data.strPlaceTime = row[5];
 		data.strEndTime = row[6];
-		data.strDescription = row[7];
+		data.strDescription = utf8ToAnsi(row[7]);
 		records.push_back(data);
 	}
 	return records;
@@ -299,7 +287,7 @@
 
     std::ostringstream oss;
     oss << "SELECT record_id, class_id, status, create_time, pick_time, place_time, end_time, description "
-        << "FROM transfers WHERE status = '" << status << "' "
+        << "FROM transfers WHERE status = '" << ansiToUtf8(status) << "' "
         << "ORDER BY create_time DESC";
 
     auto results = m_pDB->fetchResults(oss.str());
@@ -308,13 +296,13 @@
 
         TransferData data;
         data.nRecordId = std::stoi(row[0]);
-        data.strClassID = row[1];
-        data.strStatus = row[2];
+        data.strClassID = utf8ToAnsi(row[1]);
+        data.strStatus = utf8ToAnsi(row[2]);
         data.strCreateTime = row[3];
         data.strPickTime = row[4];
         data.strPlaceTime = row[5];
         data.strEndTime = row[6];
-        data.strDescription = row[7];
+        data.strDescription = utf8ToAnsi(row[7]);
 
         records.push_back(data);
     }
@@ -348,8 +336,8 @@
 //	return records;
 //}
 
-// 获取符合条件的记录总数
-int TransferManager::getTotalTransferCount() {
+// 获取记录总数
+int TransferManager::getTotalTransferCountAll() {
     if (!m_pDB) {
         return 0;
     }
@@ -370,7 +358,7 @@
 }
 
 // 获取符合条件的记录总数
-int TransferManager::getTotalTransferCount(const TransferData& filter) {
+int TransferManager::getFilteredTransferCount(const TransferData& filter) {
     if (!m_pDB) {
         return 0;
     }
@@ -380,12 +368,12 @@
 
     // 状态筛选(完全匹配)
     if (!filter.strStatus.empty()) {
-        oss << " AND status = '" << filter.strStatus << "'";
+        oss << " AND status = '" << ansiToUtf8(filter.strStatus) << "'";
     }
 
     // 描述关键字模糊匹配
     if (!filter.strDescription.empty()) {
-        oss << " AND description LIKE '%" << filter.strDescription << "%'";
+        oss << " AND description LIKE '%" << ansiToUtf8(filter.strDescription) << "%'";
     }
 
     // 时间范围筛选
@@ -422,10 +410,10 @@
 
     // 条件拼接(与 getTotalTransferCount 保持一致)
     if (!filter.strStatus.empty()) {
-        oss << " AND status = '" << filter.strStatus << "'";
+        oss << " AND status = '" << ansiToUtf8(filter.strStatus) << "'";
     }
     if (!filter.strDescription.empty()) {
-        oss << " AND description LIKE '%" << filter.strDescription << "%'";
+        oss << " AND description LIKE '%" << ansiToUtf8(filter.strDescription) << "%'";
     }
     if (!filter.strCreateTime.empty()) {
         oss << " AND create_time >= '" << filter.strCreateTime << "'";
@@ -446,13 +434,13 @@
 
         TransferData data;
         data.nRecordId = std::stoi(row[0]);
-        data.strClassID = row[1];
-        data.strStatus = row[2];
+        data.strClassID = utf8ToAnsi(row[1]);
+        data.strStatus = utf8ToAnsi(row[2]);
         data.strCreateTime = row[3];
         data.strPickTime = row[4];
         data.strPlaceTime = row[5];
         data.strEndTime = row[6];
-        data.strDescription = row[7];
+        data.strDescription = utf8ToAnsi(row[7]);
 
         records.push_back(data);
     }

--
Gitblit v1.9.3