初始化
This commit is contained in:
@@ -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 ×tamp, 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> ¶ms = QMap<QString, QString>());
|
||||
QVector<AttendanceRecord> parseRecordsJson(const QByteArray &json);
|
||||
|
||||
// AES加密/解密功能
|
||||
QByteArray aesDecrypt(const QByteArray &encryptedData);
|
||||
QByteArray removePKCS7Padding(const QByteArray &data);
|
||||
};
|
||||
|
||||
#endif // NETWORKAPIMANAGER_H
|
||||
Reference in New Issue
Block a user