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