From 863f21995955fb3e9aa471430218967d4e642c27 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 29 五月 2025 16:11:24 +0800
Subject: [PATCH] Merge branch 'liuyang'
---
SourceCode/Bond/Servo/TransferManager.h | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 171 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/TransferManager.h b/SourceCode/Bond/Servo/TransferManager.h
new file mode 100644
index 0000000..ed1bbf6
--- /dev/null
+++ b/SourceCode/Bond/Servo/TransferManager.h
@@ -0,0 +1,171 @@
+#ifndef TRANSFER_MANAGER_H
+#define TRANSFER_MANAGER_H
+
+#include <string>
+#include <vector>
+#include <mutex>
+#include <unordered_map>
+#include "Database.h"
+
+/**
+ * 任务状态枚举类型
+ */
+enum class TransferStatus {
+ Ready = 0,
+ Running,
+ Error,
+ Abort,
+ Completed
+};
+
+/**
+ * 搬运记录结构体
+ */
+struct TransferData {
+ int nRecordId; // 主键
+ std::string strClassID; // 搬运任务 ClassID
+ std::string strStatus; // 任务状态(字符串:Ready、Running...)
+ std::string strCreateTime; // 创建时间
+ std::string strPickTime; // 取片时间
+ std::string strPlaceTime; // 放片时间
+ std::string strEndTime; // 结束时间
+ std::string strDescription; // 任务说明
+};
+
+using TransferDataMap = std::unordered_map<int, TransferData>;
+
+class TransferManager {
+public:
+ /**
+ * 获取 TransferManager 单例
+ * @return TransferManager 实例
+ */
+ static TransferManager& getInstance();
+
+ /**
+ * 初始化搬运记录表
+ * @return 成功返回 true,失败返回 false
+ */
+ bool initTransferTable();
+
+ /**
+ * 插入测试搬运记录
+ */
+ void insertTestTransferRecord();
+
+ /**
+ * 终止数据库连接
+ */
+ void termTransferTable();
+
+ /**
+ * 删除搬运记录表
+ * @return 成功返回 true,失败返回 false
+ */
+ bool destroyTransferTable();
+
+ /**
+ * 插入搬运记录
+ * @param data 搬运记录结构体
+ * @param outRecordId 插入后的记录主键 ID
+ * @return 成功返回 true,失败返回 false
+ */
+ bool addTransferRecord(const TransferData& data, int& outRecordId);
+
+ /**
+ * 查询所有搬运记录
+ * @return 所有记录数据
+ */
+ std::vector<TransferData> getAllTransfers();
+
+ /**
+ * 根据记录 ID 查询搬运记录
+ * @param id 记录主键 ID
+ * @return 搬运记录数据
+ */
+ TransferData getTransferById(int id);
+
+ /**
+ * 根据时间范围查询搬运记录
+ * @param startTime 起始时间
+ * @param endTime 结束时间
+ * @return 搬运记录数据
+ */
+ std::vector<TransferData> getTransfersByTimeRange(const std::string& startTime, const std::string& endTime);
+
+ /**
+ * 根据状态查询搬运记录
+ * @param status 任务状态
+ * @return 搬运记录数据
+ */
+ std::vector<TransferData> TransferManager::getTransfersByStatus(const std::string& status);
+
+ /**
+ * 分页获取搬运记录
+ * @param startPosition 起始记录位置
+ * @param count 获取的记录数量
+ * @return 搬运记录数据
+ */
+ //std::vector<TransferData> getTransfers(int startPosition, int count);
+
+ /**
+ * 获取符合条件的记录总数
+ */
+ int getTotalTransferCount();
+
+ /**
+ * 分页获取符合条件的搬运记录
+ * @param filter 过滤条件
+ * @param pageNum 页码
+ * @param pageSize 每页记录数
+ */
+ std::vector<TransferData> getTransfers(const TransferData& filter, int pageNum, int pageSize);
+
+ /**
+ * 获取符合条件的记录总数
+ * @param filter 过滤条件
+ * @return 符合条件的记录总数
+ */
+ int getTotalTransferCount(const TransferData& filter);;
+
+ /**
+ * 清理早于某一时间的搬运记录
+ * @param daysToKeep 保留的天数
+ */
+ void cleanOldTransfers(int daysToKeep = 30);
+
+ /**
+ * 读取搬运记录 CSV 文件
+ * @param filename 文件名
+ * @return 成功返回 true,失败返回 false
+ */
+ bool readTransferFile(const std::string& filename);
+
+ /**
+ * 保存搬运记录到 CSV 文件
+ * @param filename 文件名
+ * @return 成功返回 true,失败返回 false
+ */
+ bool saveTransferFile(const std::string& filename);
+
+private:
+ TransferManager();
+ ~TransferManager();
+
+ // 禁止拷贝和赋值
+ TransferManager(const TransferManager&) = delete;
+ TransferManager& operator=(const TransferManager&) = delete;
+
+ // 内联函数
+ inline int statusToInt(TransferStatus status);
+ inline TransferStatus intToStatus(int value);
+ inline std::string statusToString(TransferStatus status);
+ inline TransferStatus stringToStatus(const std::string& str);
+ inline std::string ansiToUtf8(const std::string& ansiStr);
+ inline std::string utf8ToAnsi(const std::string& utf8Str);
+
+ BL::Database* m_pDB;
+ static std::mutex m_mutex;
+};
+
+#endif // TRANSFER_MANAGER_H
\ No newline at end of file
--
Gitblit v1.9.3