LAPTOP-SNT8I5JK\Boounion
2025-07-21 66d8ca4b75006f9875731ef819dafd3d20ca01a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#ifndef TRANSFER_MANAGER_H
#define TRANSFER_MANAGER_H
 
#include <string>
#include <vector>
#include <mutex>
#include <unordered_map>
#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<int, TransferData>;
 
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<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 getTotalTransferCountAll();
 
    /**
     * »ñÈ¡·ûºÏÌõ¼þµÄ¼Ç¼×ÜÊý
     * @param filter ¹ýÂËÌõ¼þ
     * @return ·ûºÏÌõ¼þµÄ¼Ç¼×ÜÊý
     */
    int getFilteredTransferCount(const TransferData& filter);
 
    /**
     * ·ÖÒ³»ñÈ¡·ûºÏÌõ¼þµÄ°áÔ˼Ǽ
     * @param filter ¹ýÂËÌõ¼þ
     * @param pageNum Ò³Âë
     * @param pageSize Ã¿Ò³¼Ç¼Êý
     */
    std::vector<TransferData> 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