#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);;
|
|
/**
|
* ÇåÀíÔçÓÚijһʱ¼äµÄ°áÔ˼Ǽ
|
* @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
|