| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | #pragma once#include <QString>#include <QObject>#include <QLibrary>#include <QDateTime>#include <QMutex>#include <QWaitCondition>// #include "Common/singleton.h"#include "threadcontroller.h"#define LH_HTTPAPI_SUCC 0// 用New#define LHAPI_BUFFER_SIZE_NEW 2048000#define LHAPI_BUFFER_SIZE_ARY 4096extern int g_nHttpTimeOut;// 操作类型【1查询 2更新 3删除 4插入 5存储过程】enum enDBOperatorType{    EDBOT_Select = 1,    EDBOT_Update,    EDBOT_Delete,    EDBOT_Insert,    EDBOT_Procedure,    EDBOT_Batch,    // 单动作批量操作,失败全部回滚    EDBOT_BatchTransAction // 多动作批量操作,失败回滚};class lhhttpapi : public QObject{    Q_OBJECTpublic:    typedef int (*FunDBInit)(const char* lpUrl);    typedef int (*FunDBLogin)(const char *pLocalIP, const char *pSerid, const char* CType, char *pszUserToken, int nSize);    typedef int (*FunDBGetServerList)(char *pszList, int nSize);    typedef int (*FunDBGetServerInfo)(const char* pSerid, const char* pszUserToken, char* pServerInfo, int nSize);    typedef int (*FunDBGetChannelList)(const char* pSerid,char *pszList, int nSize);    typedef int (*FunDBDoInterface)(const char* pSerid,const char* CType,const char* strtoken,int nOperatorType, const char * strParam, char *strRet, int nSize);    typedef int (*FunDoGetLastError)(char *pError, int nLen, int *nErrorCode);    typedef int (*FunSetHttpTimeOut)(int nTimeout);    // 获取网络文件大小,返回文件大小    typedef int64_t (*FunDoGetHttpFileSize)(const char *pszHttpAddr);    // 获取网络文件内容,返回内容大小    typedef int64_t (*FunDoGetHttpFileContent)(const char* pHttpAddr, char *pszContent, int nSize);    // 获取汉字拼音首字母,空格、数字等其它字符保持不动    typedef int (*FunDoWord2Pyjc)(const char* pszWord, char *pszContent, int nSize);    // 文件上传FTP    typedef int (*FunDoUploadFtpFile)(const char* pszLocalFilePath, const char* pszFtpFilePath);    typedef int (*FunDoUploadFtpFileContent)(const char* pszFileContent, int size, const char* pszFtpFilePath);    // FTP    typedef int (*FunDoCurlDeleteFtpFile)(const char* user, const char* pwd, const char* pszFtpFile);    typedef int (*FunDoCurlUploadFtpFile)(const char* user, const char* pwd, const char* pszLocalFilePath, const char* pszFtpFile);    typedef int (*FunDoCurlUploadFtpFileContent)(const char* user, const char* pwd, const char* pszFileContent, int nSize, const char* pszFtpFile);    // 获取数据库信息    typedef int (*FunDoGetDBInfo)(const char* strSerid, const char* strtoken, char* pDBInfo, int nsize);public:    explicit lhhttpapi(QObject *parent = nullptr);    ~lhhttpapi();public:    QLibrary *m_pQLib;    FunDBInit fnDBInit;    FunDBLogin fnDBLogin;    FunDBGetServerList fnDBGettServerList;    FunDBGetChannelList fnDBGetChannelList;    FunDBGetServerInfo fnDBGetServerInfo;    FunSetHttpTimeOut fnSetHttpTimeOut;    FunDoGetHttpFileSize fnGetHttpFileSize;    FunDoGetHttpFileContent fnGetHttpFileContent;    FunDoGetLastError fnGetLastError;    FunDoWord2Pyjc    fnDoWord2Pyjc;    FunDoUploadFtpFile fnDoUploadFtpFile;    FunDoUploadFtpFileContent fnDoUploadFtpFileContent;    FunDoCurlDeleteFtpFile  fnDoCurlDeleteFtpFile;    FunDoCurlUploadFtpFile  fnDoCurlUploadFtpFile;    FunDoCurlUploadFtpFileContent fnDoCurlUploadFtpFileContent;    FunDoGetDBInfo  fnDoGetDBInfo;    QMutex m_mutexWorkerDestroy;    QWaitCondition m_Condition;    FunDBDoInterface fnDBDoInterface;public:    bool Load(QString file);    bool UnLoad();    int SetHttpTimeOut(int nTimeout);    QString DoGetLastError(int *nErrorCode);    QString GetServerID() const {return m_serID;}    QString GetClientType() const {return m_clientType;}    int DBQInit(QString strUrl);    int DBQGetServerList(QString& serverList);    int DBQGetServerInfo(const QString& serid, QString& serverInfo);    /**     * @brief 登录数据库     *      * @param LocalIP      * @param Serid      * @param CType      * @param strUserToken 传出参数     * @return int      */    int DBQLogin(QString LocalIP, QString Serid, QString CType, QString &strUserToken);    int DBQDoInterface(int nOperatorType, const QString &strParamXml, QString &strRetXml, bool wait = true);private slots:    void OnWorkerFinished();private:    QString m_token;    QMutex m_mtx;    QString m_serID;    QString m_clientType;    QTimer* m_tUpToken;};class DoInterfaceObject : public ThreadWorker{    Q_OBJECTpublic:    explicit DoInterfaceObject(lhhttpapi *pApi, const QString &strToken, int nOperatorType, const QString &strParamXml);    virtual ~DoInterfaceObject() override {}    QString GetRetXML() const {return m_strRetXml;}    int GetResult() const {return m_nResult;}public slots:    void DoInit() override {}    void DoWork() override;signals:    void sig_WorkFinished();public:    lhhttpapi *m_pApi;    QString m_strToken;    int m_nOperatorType;    QString m_strParamXml;    QString m_strRetXml;    int m_nResult;};
 |