#ifndef TRANSFER_MANAGER_H #define TRANSFER_MANAGER_H #include #include #include #include #include "Database.h" /** * °áÔ˼Ǽ½á¹¹Ìå */ 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; class TransferManager { public: /** * »ñÈ¡ TransferManager µ¥Àý * @return TransferManager ʵÀý */ static TransferManager& getInstance(); /** * ³õʼ»¯°áÔ˼Ǽ±í * @return ³É¹¦·µ»Ø true£¬Ê§°Ü·µ»Ø false */ bool initTransferTable(); /** * ²åÈë²âÊÔ°áÔ˼Ǽ */ void insertTestTransferRecord(int nCount = 10000); /** * ÖÕÖ¹Êý¾Ý¿âÁ¬½Ó */ 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 getAllTransfers(); /** * ¸ù¾Ý¼Ç¼ ID ²éѯ°áÔ˼Ǽ * @param id ¼Ç¼Ö÷¼ü ID * @return °áÔ˼ǼÊý¾Ý */ TransferData getTransferById(int id); /** * ¸ù¾Ýʱ¼ä·¶Î§²éѯ°áÔ˼Ǽ * @param startTime Æðʼʱ¼ä * @param endTime ½áÊøÊ±¼ä * @return °áÔ˼ǼÊý¾Ý */ std::vector getTransfersByTimeRange(const std::string& startTime, const std::string& endTime); /** * ¸ù¾Ý״̬²éѯ°áÔ˼Ǽ * @param status ÈÎÎñ״̬ * @return °áÔ˼ǼÊý¾Ý */ std::vector TransferManager::getTransfersByStatus(const std::string& status); /** * ·ÖÒ³»ñÈ¡°áÔ˼Ǽ * @param startPosition Æðʼ¼Ç¼λÖà * @param count »ñÈ¡µÄ¼Ç¼ÊýÁ¿ * @return °áÔ˼ǼÊý¾Ý */ //std::vector getTransfers(int startPosition, int count); /** * »ñÈ¡¼Ç¼×ÜÊý */ int getTotalTransferCountAll(); /** * »ñÈ¡·ûºÏÌõ¼þµÄ¼Ç¼×ÜÊý * @param filter ¹ýÂËÌõ¼þ * @return ·ûºÏÌõ¼þµÄ¼Ç¼×ÜÊý */ int getFilteredTransferCount(const TransferData& filter); /** * ·ÖÒ³»ñÈ¡·ûºÏÌõ¼þµÄ°áÔ˼Ǽ * @param filter ¹ýÂËÌõ¼þ * @param pageNum Ò³Âë * @param pageSize ÿҳ¼Ç¼Êý */ std::vector getTransfers(const TransferData& filter, int pageNum, int pageSize); /** * ÇåÀíÔçÓÚ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 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