初始化

This commit is contained in:
2026-05-01 10:51:39 +08:00
commit fe6e4e428a
25 changed files with 5763 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
#ifndef NETWORKAPIMANAGER_H
#define NETWORKAPIMANAGER_H
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QVector>
#include "AttendanceRecord.h"
#include "TimeSlotConfig.h"
/**
* @brief 网络API管理类
*
* 负责与服务器端HTTP API通信(支持AES-128-CBC加密)
* API端点:http://server_ip:8082/api/
*/
class NetworkApiManager : public QObject
{
Q_OBJECT
public:
explicit NetworkApiManager(QObject *parent = nullptr);
~NetworkApiManager();
// 设置服务器地址
void setServerUrl(const QString &url);
QString getServerUrl() const { return m_serverUrl; }
// 设置是否启用加密通信
void setEncryptionEnabled(bool enabled) { m_encryptionEnabled = enabled; }
bool isEncryptionEnabled() const { return m_encryptionEnabled; }
// API调用
void fetchRecords(int limit = 100, int offset = 0);
void fetchStatistics();
void clearAllRecords();
void deleteRecord(const QString &timestamp, const QString &studentId);
void uploadTimeSlots(const QVector<TimeSlot> &timeSlots);
void checkHealth();
// 映射配置API
void uploadMappingConfig(const QMap<QString, QString> &studentNameMap,
const QMap<QString, QString> &classNameMap);
void fetchMappingConfig();
// 人脸照片管理API
void fetchFacePhotos();
void fetchFacePhoto(const QString &faceId);
void uploadFaceIdMapping(const QMap<QString, QString> &mapping);
void fetchFaceIdMapping();
signals:
// 响应信号
void recordsFetched(const QVector<AttendanceRecord> &records);
void statisticsFetched(int total, int today, const QString &serverTime);
void recordsCleared(bool success);
void recordDeleted(bool success);
void timeSlotsUploaded(bool success);
void healthChecked(bool healthy);
void errorOccurred(const QString &error);
// 映射配置信号
void mappingConfigUploaded(bool success);
void mappingConfigFetched(const QMap<QString, QString> &studentNameMap,
const QMap<QString, QString> &classNameMap);
// 人脸照片管理信号
void facePhotosFetched(const QJsonArray &photos);
void facePhotoFetched(const QString &faceId, const QByteArray &photoData);
void faceIdMappingUploaded(bool success);
void faceIdMappingFetched(const QMap<QString, QString> &mapping);
private slots:
void onReplyFinished(QNetworkReply *reply);
private:
QNetworkAccessManager *m_networkManager;
QString m_serverUrl;
bool m_encryptionEnabled; // 是否启用加密通信
QString buildApiUrl(const QString &endpoint, const QMap<QString, QString> &params = QMap<QString, QString>());
QVector<AttendanceRecord> parseRecordsJson(const QByteArray &json);
// AES加密/解密功能
QByteArray aesDecrypt(const QByteArray &encryptedData);
QByteArray removePKCS7Padding(const QByteArray &data);
};
#endif // NETWORKAPIMANAGER_H