From 181a105d2f9688e50d75e7137f1ac6d276558325 Mon Sep 17 00:00:00 2001 From: gong <3218757026@qq.com> Date: 星期四, 07 十一月 2024 15:04:57 +0800 Subject: [PATCH] Merge branch 'master' of ssh://115.28.86.8:29418/~admin/昆仑_1025 --- Server/王琨元/code/MysqlConn.h | 41 Server/陈楚丹/log/日志_陈楚丹_1106.doc | 0 Client/朱航/code/kunlunclient/logquery.h | 49 表.docx | 0 kunlun.sql | 71 Server/王琨元/code/ConnectionPool.h | 58 Server/王琨元/code/ConnectionPool.cpp | 182 +- Client/朱航/code/kunlunclient/clientmainwindow.cpp | 52 Client/朱航/code/kunlunclient/kunlunclient.pro.user | 806 ++++++++++++++ Client/朱航/log/朱航1105.doc | 0 Client/朱航/code/kunlunclient/clientmainwindow.ui | 60 + Server/李转转/log/配置管理_李转转_1107.doc | 0 Server/王琨元/log/日志模板_王琨元_1106.doc | 0 Client/李宵增/log/历史查询_李宵增_1104.doc | 0 Client/朱航/code/kunlunclient/main.cpp | 11 Server/马渝杭/log/日志_马渝杭_20241106.doc | 0 Client/朱航/code/kunlunclient/logquery.ui | 209 +++ Client/朱航/log/朱航1106.doc | 0 Client/朱航/code/kunlunclient/common.h | 1062 +++++++++++++++++++ Client/黎弘霖/log/设备管理_黎弘霖_1107.doc | 0 Client/朱航/code/服务端/LogSearch.cpp | 91 + Client/朱航/code/服务端/LogSearch.h | 17 Client/朱航/code/kunlunclient/kunlunclient.pro | 39 Server/王琨元/code/MysqlConn.cpp | 133 + Client/朱航/code/kunlunclient/logquery.cpp | 216 +++ Client/李宵增/log/历史查询_李宵增_1105.doc | 0 Server/马渝杭/log/20241106昆仑日报.doc | 0 common.h | 127 + Client/王鑫鑫/log/日志_王鑫鑫_1106.doc | 0 Client/朱航/code/kunlunclient/clientmainwindow.h | 34 30 files changed, 2,989 insertions(+), 269 deletions(-) diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.cpp" "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.cpp" new file mode 100644 index 0000000..10656a5 --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.cpp" @@ -0,0 +1,52 @@ +锘�#include "clientmainwindow.h" +#include "ui_clientmainwindow.h" +#include <QDebug> +#pragma execution_character_set("utf-8") + +ClientMainWindow::ClientMainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::ClientMainWindow) +{ + ui->setupUi(this); + + m_client = new QTcpSocket(this); + m_client->connectToHost("127.0.0.1",16888); + if(m_client->waitForConnected()){ + qDebug()<<"conn success"; + //鍏宠仈鏀跺寘妲� + connect(m_client,SIGNAL(readyRead()),this,SLOT(myRead())); + //璋冪敤鐣岄潰鍒濆鍖� + initUi(); + }else{ + qDebug()<<"conn fail:"<<m_client->errorString(); + } + + +} + +ClientMainWindow::~ClientMainWindow() +{ + delete ui; +} + +void ClientMainWindow::initUi() +{ + //m_logSer = new LogQuery(this); + m_logSer = new LogQuery(m_client,this); + ui->tabWidget->addTab(m_logSer,"鏃ュ織鏌ヨ"); + connect(this,SIGNAL(queryResSignal(LogQueryRes*)),m_logSer,SLOT(queryResSlot(LogQueryRes*))); +} + +void ClientMainWindow::myRead() +{ + QByteArray buffer = m_client->readAll(); + qDebug()<< "buffer.size():"<<buffer.size(); + qDebug()<< "buffer:"<<buffer; + int type = ((Head*)buffer.data())->type; + qDebug()<<"type:"<<type; + if(type == LOGSEARCH_RES){ + LogQueryRes *res = (LogQueryRes*)buffer.data(); + qDebug()<< "status:"<<res->status; + emit queryResSignal(res);//鍙戜俊鍙风粰鏃ュ織鏌ヨ鐣岄潰 + } +} diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.h" "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.h" new file mode 100644 index 0000000..e74e0a5 --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.h" @@ -0,0 +1,34 @@ +锘�#ifndef CLIENTMAINWINDOW_H +#define CLIENTMAINWINDOW_H + +#include <QMainWindow> +#include "logquery.h" +#include "common.h" +#include <QTcpSocket> +#pragma execution_character_set("utf-8") + +namespace Ui { +class ClientMainWindow; +} + +class ClientMainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit ClientMainWindow(QWidget *parent = 0); + ~ClientMainWindow(); + + void initUi(); + +signals: + void queryResSignal(LogQueryRes *);//鏃ュ織鏌ヨ鍝嶅簲淇″彿 +private slots: + void myRead(); +private: + Ui::ClientMainWindow *ui; + LogQuery *m_logSer; + QTcpSocket *m_client; +}; + +#endif // CLIENTMAINWINDOW_H diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.ui" "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.ui" new file mode 100644 index 0000000..2c83af9 --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.ui" @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ClientMainWindow</class> + <widget class="QMainWindow" name="ClientMainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>663</width> + <height>537</height> + </rect> + </property> + <property name="windowTitle"> + <string>ClientMainWindow</string> + </property> + <widget class="QWidget" name="centralWidget"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>1</number> + </property> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>瀹炴椂澶у睆</string> + </attribute> + </widget> + <widget class="QWidget" name="tab_2"> + <attribute name="title"> + <string>绯荤粺璁剧疆</string> + </attribute> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menuBar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>663</width> + <height>23</height> + </rect> + </property> + </widget> + <widget class="QToolBar" name="mainToolBar"> + <attribute name="toolBarArea"> + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak"> + <bool>false</bool> + </attribute> + </widget> + <widget class="QStatusBar" name="statusBar"/> + </widget> + <layoutdefault spacing="6" margin="11"/> + <resources/> + <connections/> +</ui> diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/common.h" "b/Client/\346\234\261\350\210\252/code/kunlunclient/common.h" new file mode 100644 index 0000000..13ee96b --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/common.h" @@ -0,0 +1,1062 @@ +锘�#ifndef COMMON_H +#define COMMON_H + +#include <string.h> + +enum TypeInfo { + + //娉ㄥ唽鐧诲綍 + LOGIN_REQ, // 鐧诲綍璇锋眰 + LOGIN_RES, // 鐧诲綍鍝嶅簲 + REGISTER_REQ, //娉ㄥ唽璇锋眰 + REGISTER_RES, //娉ㄥ唽鍝嶅簲 + RESET_REQ, //閲嶇疆瀵嗙爜璇锋眰 + RESET_RES, //閲嶇疆瀵嗙爜鍝嶅簲 + + + //鏉冮檺绠$悊 + QUERY_PMS_REQ, // 鎸夊憳宸ョ紪鍙枫�佸悕瀛楁垨鑱屼綅鏌ヨ浜哄憳鏉冮檺淇℃伅璇锋眰 + UPDATE_PMS_REQ, // 鎸夎鑹瞚d鏇存柊鏉冮檺淇℃伅璇锋眰 + QUERY_PMS_RES, // 鏌ヨ浜哄憳鍜岃鑹蹭俊鎭殑鍝嶅簲缁撴瀯浣� + UPDATE_PMS_RES, // 鏉冮檺鏇存柊缁撴灉鍝嶅簲浣� + + //璁惧绠$悊 + AD_REQ,//娣诲姞璁惧璇锋眰 + AD_RES,//娣诲姞璁惧鍝嶅簲 + MD_REQ,//淇敼璁惧璇锋眰 + MD_RES,//淇敼璁惧鍝嶅簲 + QD_REQ,//鏌ヨ璁惧璇锋眰 + QD_RES,//鏌ヨ璁惧鍝嶅簲 + + //鍦板浘鏍囨敞 + MML_REQ,//鍦板浘鏍囨敞鍔犺浇璇锋眰 + MML_RES,//鍦板浘鏍囨敞鍔犺浇鍝嶅簲 + MMI_REQ,//鍦板浘鏍囨敞鎻掑叆璇锋眰 + MMI_RES,//鍦板浘鏍囨敞鎻掑叆鍝嶅簲 + MMD_REQ,//鍦板浘鏍囨敞鍒犻櫎璇锋眰 + MMD_RES,//鍦板浘鏍囨敞鍒犻櫎鍝嶅簲 + + //澶у睆鏄剧ず + ENVIRONMENT_REQ,//鐜鏁版嵁璇锋眰 + ENVIRONMENT_RES,//鐜鏁版嵁鍝嶅簲 + DEVICESTATUS_REQ,//璁惧鐘舵�佽姹� + DEVICESTATUS_RES,//璁惧鐘舵�佸搷搴� + MOVEMENTRECORD_REQ,//鎿嶄綔鏃ュ織璇锋眰 + MOVEMENTRECORD_RES,//鎿嶄綔鏃ュ織鍝嶅簲 + ALARMRECORD_REQ,//璀︽姤璁板綍璇锋眰 + ALARMRECORD_RES,//璀︽姤璁板綍鍝嶅簲 + YIELD_REQ,//鐓ょ熆浜ч噺璇锋眰 + YIELD_RES,//鐓ょ熆浜ч噺鍝嶅簲 + + //璀︽姤绠$悊 + WARNING_REQ, // 璀︽姤璇锋眰 + WARNING_RES, // 璀︽姤鍝嶅簲 + + + //鐢熶骇璁″垝绠$悊 + ADD_PDPLAN_REQ,//娣诲姞涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣� + ADD_PDPLAN_RES,//娣诲姞涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣� + DEL_PDPLAN_REQ,//鍒犻櫎涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣� + DEL_PDPLAN_RES,//鍒犻櫎涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣� + UPDATE_PDPLAN_REQ,//鏇存敼涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣� + UPDATE_PDPLAN_RES,//鏇存敼涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣� + QUERY_PDPLAN_REQ,//鏌ヨ涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣� + QUERY_PDPLAN_RES,//鏌ヨ涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣� + + + ADD_MONOUTPUT_REQ,//娣诲姞鏈堜骇閲忕殑璇锋眰缁撴瀯浣� + ADD_MONOUTPUT_RES,//娣诲姞鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣� + DEL_MONOUTPUT_REQ,//鍒犻櫎鏈堜骇閲忕殑璇锋眰缁撴瀯浣� + DEL_MONOUTPUT_RES,//鍒犻櫎鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣� + UPDATE_MONOUTPUT_REQ,//鏇存柊鏈堜骇閲忕殑璇锋眰缁撴瀯浣� + UPDATE_MONOUTPUT_RES,//鏇存柊鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣� + QUERY_MONOUTPUT_REQ,//鏌ヨ鏈堜骇閲忕殑璇锋眰缁撴瀯浣� + QUERY_MONOUTPUT_RES,//鏌ヨ鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣� + + + //鑷姩鍗囩骇 + VERSION_NUM_REQ, // 鐗堟湰鍙疯姹� + VERSION_NUM_RES, // 鐗堟湰鍙峰搷搴� + UPLOAD_FILE_REQ, // 涓婁紶鏂囦欢鐨勮姹� + UPLOAD_FILE_RES, // 涓婁紶鏂囦欢鐨勫搷搴� + VERSION_INFOENTRY_REQ, // 鐗堟湰淇℃伅褰曞叆璇锋眰 + VERSION_INFOENTRY_RES, //鐗堟湰淇℃伅褰曞叆鍝嶅簲 + VERSION_UPDATE_REQ, // 鐗堟湰鏇存柊璇锋眰 + VERSION_UPDATE_RES, // 鐗堟湰鏇存柊鍝嶅簲 + FILE_DOWNLOADS_REQ, // 鐗堟湰鏇存柊鏂囦欢涓嬭浇璇锋眰 + FILE_DOWNLOADS_RES, // 鐗堟湰鏇存柊鏂囦欢涓嬭浇鍝嶅簲 + DOWNLOAD_SUCCESSFULLY_RES, // 鏇存柊鏂囦欢涓嬭浇鎴愬姛鐨勫搷搴� + + //鏃ュ織 + LOGSEARCH_REQ,//鏃ュ織鏌ヨ璇锋眰 + + LOGSEARCH_RES,//鏃ュ織鏌ヨ鍝嶅簲 + +}; + +struct Head { + int type; + int len; +}; + +//娉ㄥ唽鐧诲綍 +//鐧诲綍璇锋眰 +struct LoginReq +{ + Head head; + char userName[32]; + char password[32]; + LoginReq() { + head.type = LOGIN_REQ; + head.len = sizeof(LoginReq); + } +}; + +struct Permission +{ + int admin;//瓒呯骇绠$悊鍛� + int loggerSearch; //鏃ュ織鏌ヨ + int queryHistory; //鍘嗗彶璁板綍 + int mapMark;//鍦板浘 + int versionManage; // 鐗堟湰绠$悊 + int warning; //璀︽姤 + int devManage; //璁惧绠$悊 + int productPlan;//鐢熶骇璁″垝 + char roleName[32]; // 瑙掕壊鍚� +}; + +//鐧诲綍鍝嶅簲 +struct LoginRes +{ + Head head; + char userName[32]; + int status; // 鐧诲綍鐘舵�� + // 鐧诲綍鎴愬姛鏃讹紝璇ヨ处鍙峰搴旂殑鏉冮檺缁勫悎 + Permission per; + LoginRes() + { + head.type = LOGIN_RES; + head.len = sizeof(LoginRes); + } +}; + +//娉ㄥ唽璇锋眰 +struct RegisterReq +{ + Head head; + char userName[32]; + char password[32]; + char email[50]; + char capcha[10];//楠岃瘉鐮� + char telephone[32]; + RegisterReq() { + head.type = REGISTER_REQ; + head.len = sizeof(RegisterReq); + } +}; + +//娉ㄥ唽鍝嶅簲 +struct RegisterRes +{ + Head head; + char userName[32]; + int status; // 娉ㄥ唽鐘舵�� + RegisterRes() + { + head.type = REGISTER_RES; + head.len = sizeof(RegisterRes); + } +}; + +//閲嶇疆瀵嗙爜璇锋眰 +struct ResetReq +{ + Head head; + char email[50]; + char capcha[10];//楠岃瘉鐮� + char password[32];//鏂板瘑鐮� + char confirmPassword[32];//纭瀵嗙爜 + ResetReq() { + head.type = RESET_REQ; + head.len = sizeof(ResetReq); + } +}; + +//閲嶇疆瀵嗙爜鍝嶅簲 +struct ResetRes +{ + Head head; + char user_name[32]; + int status; // 閲嶇疆瀵嗙爜鐘舵�� + ResetRes() + { + head.type = RESET_RES; + head.len = sizeof(ResetRes); + } +}; + +//鏉冮檺绠$悊 +// 鎸夊憳宸ョ紪鍙枫�佸悕瀛楁垨鑱屼綅鏌ヨ浜哄憳鏉冮檺淇℃伅璇锋眰 + struct QueryPmsReq { + Head head; + char userNo[32]; + char name[32]; + char permissonType[32]; + QueryPmsReq() { + head.type = QUERY_PMS_REQ; + memset(userNo, 0, 32); + memset(permissonType, 0, 32); + memset(name, 0, 32); + head.len = sizeof(QueryPmsReq); + } +}; + +// 鎸夎鑹瞚d鏇存柊鏉冮檺淇℃伅璇锋眰 +struct UpdatePmsReq { + Head head; + // 浜哄憳琛ㄤ富閿甶d + int id; + int queryHistory; + int loggerSearch; + int mapMark; + int devManage; + int productPlan; + int warningManage; + int versionManage; //鐗堟湰绠$悊 + int admin; //绯荤粺绠$悊鍛� + UpdatePmsReq() { + head.type = QUERY_PMS_RES; + head.len = sizeof(UpdatePmsReq); + } +} ; + +// 鍗曚釜浜哄憳鍜屾潈闄愯仈鍚堟煡璇㈢粨鏋勪綋 + struct PmsRes { + int queryHistory; + int loggerSearch; + int mapMark; + int devManage; + int productPlan; + int id; + + char userNo[32]; + char name[32]; + + char permissonType[32]; // 瑙掕壊绫诲瀷 + int versionManage; //鐗堟湰绠$悊 + int admin; //绯荤粺绠$悊鍛� + char department[32]; + char loginTime[32]; + char registerTime[32]; +}; + +// 鏌ヨ浜哄憳鍜岃鑹蹭俊鎭殑鍝嶅簲缁撴瀯浣� + struct QueryPmsRes { + Head head; + int success; // 1涓烘垚鍔� ,0涓哄け璐� + PmsRes pmsList[0]; + QueryPmsRes() { + head.type = QUERY_PMS_REQ; + } +}; + +// 鏉冮檺鏇存柊缁撴灉鍝嶅簲浣� +struct UpdatePmsRes { + Head head; + int success; // 1涓烘垚鍔� ,0涓哄け璐� + UpdatePmsRes() { + head.type = UPDATE_PMS_RES; + head.len = sizeof(UpdatePmsRes); + } + +}; + + + + +//璁惧绠$悊 +struct DevicesInfo +{ + int deviceID; + char deviceName[32];//璁惧鍚嶇О + char deviceStatus[32];//璁惧鐘舵�� + char manufacturer[100];//鍘傚 + char devicesType[32];//璁惧绫诲瀷 + double longitude;//缁忓害 + double latitude;//绾害 + char purchasingTime[15];//璐拱鏃堕棿 + char installTime[15];//瀹夎鏃堕棿 + char devicesSerialNumber[32];//璁惧缂栫爜 +}; +//娣诲姞璁惧 +struct ADReq//娣诲姞璇锋眰 +{ + Head head; + char deviceName[32]; + ADReq() { + head.type = AD_REQ; + head.len = sizeof(ADReq); + } + +}; + +struct ADRes//娣诲姞鍝嶅簲 +{ + Head head; + int type; + ADRes() { + head.type = AD_RES; + head.len = sizeof(ADRes); + } + +}; +//淇敼璁惧 +struct MDRes//淇敼璇锋眰 +{ + Head head; + DevicesInfo info; + MDRes() { + head.type = MD_RES; + head.len = sizeof(MDRes); + } +}; +struct MDReq//淇敼鍝嶅簲 +{ + Head head; + int type; + MDReq() { + head.type = MD_REQ; + head.len = sizeof(MDReq); + } +}; +//鏌ヨ璁惧 +struct QDReq//鏌ヨ璇锋眰 +{ + Head head; + DevicesInfo info; + QDReq() { + head.type = QD_REQ; + head.len = sizeof(QDReq); + } +}; +struct QDRes//鏌ヨ鍝嶅簲 +{ + Head head; + int type; + QDRes() { + head.type = QD_RES; + head.len = sizeof(QDRes); + } +}; + + +//鍦板浘鏍囨敞 +struct MarkInfo +{ + int markId;//鏍囨敞鐐筰d + double latitude;//绾害 + double longitude;//缁忓害 + int deviceId;//璁惧ID + int deviceStatus;//璁惧鐘舵�� + char deviceName[32];//璁惧鍚嶇О +}; +//鍦板浘鏍囨敞鍔犺浇璇锋眰 +struct MMLReq//鍦板浘 +{ + Head head; + MMLReq() { + head.type = MML_REQ; + head.len = sizeof(MMLReq); + } +}; +//鍦板浘鏍囨敞鍔犺浇鍝嶅簲锛� +struct MMLRes +{ + Head head; + int status;//鎿嶄綔鐘舵�� + MarkInfo info[0]; + MMLRes() { + head.type = MML_RES; + head.len = sizeof(MMLRes); + } +}; +//鍦板浘鏍囨敞鎻掑叆璇锋眰 +struct MMIReq//鍦板浘 +{ + Head head; + MarkInfo info[0]; + MMIReq() { + head.type = MMI_REQ; + head.len = sizeof(MMIReq); + } +}; +//鍦板浘鏍囨敞鎻掑叆鍝嶅簲锛� +struct MMIRes +{ + Head head; + int status;//鎿嶄綔鐘舵�� + MarkInfo info[0]; + MMIRes() { + head.type = MMI_RES; + head.len = sizeof(MMIRes); + } +}; + +//鍦板浘鏍囨敞鍒犻櫎璇锋眰 +struct MMDReq//鍦板浘 +{ + Head head; + MarkInfo info[0]; + MMDReq() { + head.type = MMD_REQ; + head.len = sizeof(MMDReq); + } +}; +//鍦板浘鏍囨敞鍒犻櫎鍝嶅簲锛� +struct MMDRes +{ + Head head; + int status;//鎿嶄綔鐘舵�� + MarkInfo info[0]; + MMDRes() { + head.type = MMD_RES; + head.len = sizeof(MMDRes); + } +}; + +//澶у睆鏄剧ず +//鐜鏁版嵁璇锋眰 +struct EnvironmentReq +{ + Head head; + EnvironmentReq() { + head.type = ENVIRONMENT_REQ; + head.len = sizeof(EnvironmentReq); + } +}; +//鐜鏁版嵁鍝嶅簲 +struct Environment +{ + double longitude;//缁忓害 + double latitude;//绾害 + float temp;//娓╁害 + float humidity;//婀垮害 + float oxygen;//姘ф皵娴撳害 + float carbon;//涓�姘у寲纰虫祿搴� +}; +struct EnvironmentRes +{ + Head head; + int status; + Environment environment[0]; + EnvironmentRes() { + head.type = ENVIRONMENT_RES; + head.len = sizeof(EnvironmentRes); + } +}; +//璁惧鐘舵�佽姹� +struct DeviceStatusReq +{ + Head head; + DeviceStatusReq() { + head.type = DEVICESTATUS_REQ; + head.len = sizeof(DeviceStatusReq); + } +}; +//璁惧鐘舵�佸搷搴� +struct DeviceStatus +{ + double longitude;//缁忓害 + double latitude;//绾害 + int deviceID;//璁惧缂栧彿 + char deviceName[32];//璁惧鍚嶇О + char deviceStatus[32];//璁惧鐘舵�� +}; +struct DeviceStatusRes +{ + Head head; + int status; + DeviceStatus deviceStatus[0]; + DeviceStatusRes() { + head.type = DEVICESTATUS_RES; + head.len = sizeof(DeviceStatusRes); + } +}; +//鎿嶄綔鏃ュ織璇锋眰 +struct MovementRecordReq +{ + Head head; + MovementRecordReq() { + head.type = MOVEMENTRECORD_REQ; + head.len = sizeof(MovementRecordReq); + } +}; +//鎿嶄綔鏃ュ織鍝嶅簲 +struct MovementRecord +{ + double longitude;//缁忓害 + double latitude;//绾害 + char userName;//鎿嶄綔鐢ㄦ埛鍚� + char operateTime[32];//鎿嶄綔鏃堕棿 + char deviceName[32];//鎿嶄綔璁惧 + char movement[256];//鎿嶄綔鎻忚堪 +}; +struct MovementRecordRes +{ + Head head; + int status; + MovementRecord movementRecord[0]; + MovementRecordRes() { + head.type = MOVEMENTRECORD_RES; + head.len = sizeof(MovementRecordRes); + } +}; +//璀︽姤璁板綍璇锋眰 +struct AlarmRecordReq +{ + Head head; + AlarmRecordReq() { + head.type = ALARMRECORD_REQ; + head.len = sizeof(AlarmRecordReq); + } +}; +//璀︽姤璁板綍鍝嶅簲 +struct AlarmRecord +{ + double longitude;//缁忓害 + double latitude;//绾害 + char alarmTime[32];//璀︽姤鏃堕棿 + char alarmtype[32];//澶勭悊鏃堕棿 + char alarmContent[256];//璀︽姤鍐呭 +}; +struct AlarmRecordRes +{ + Head head; + int status; + AlarmRecord alarmRecord[0]; + AlarmRecordRes() { + head.type = ALARMRECORD_RES; + head.len = sizeof(AlarmRecordRes); + } +}; +//鐓ょ熆浜ч噺璇锋眰 +struct YieldReq +{ + Head head; + YieldReq() { + head.type = YIELD_REQ; + head.len = sizeof(YieldReq); + } +}; +//鐓ょ熆浜ч噺鍝嶅簲 +struct Yield +{ + int month;//鏈堜唤 + int output;//浜ч噺 +}; +struct YieldRes +{ + Head head; + int status; + Yield yield[0]; + YieldRes() { + head.type = YIELD_RES; + head.len = sizeof(YieldRes); + } +}; + +//璀︽姤绠$悊 +// 璀︽姤璇锋眰缁撴瀯浣� +struct WarningReq { + Head head; + + float oxygenWarning; + float carbonWarning; + float tempWarning; + float humidityWarning; + + WarningReq() { + head.type = WARNING_REQ; + head.len = sizeof(WarningReq); + } +}; + + +struct DataThreshold { + //闃堝�� + float oxygenThreshold; + float carbonThreshold; + float tempThreshold; + float humidityThreshold; +}; + +struct Data { + float oxygen; // 姘ф皵娴撳害 + float carbon; // 涓�姘у寲纰虫祿搴� + float temp; // 娓╁害 + float humidity; // 婀垮害 +}; + +// 璀︽姤鍝嶅簲缁撴瀯浣� +struct WarningRes { + Head head; + int status; // 鍝嶅簲鐘舵�侊紙姣斿 0 琛ㄧず鎴愬姛锛�1 琛ㄧず澶辫触绛夛級 + const char* message; // 鍝嶅簲娑堟伅鎻忚堪 + + WarningRes(int stat, const char* msg) { + head.type = WARNING_RES; + head.len = sizeof(WarningRes); + status = stat; + message = msg; + } +}; + +//鐢熶骇璁″垝绠$悊 +struct PdplanInfo +{ + int planId;//璁㈠崟缂栧彿 + char planName[32];//璁㈠崟鍚嶅瓧 + char startDate[32];//璧峰鏃ユ湡 + char closingDate[32];//浜や粯鏃ユ湡 + char pdName[8];//浜у搧鍚� + double plannedPd;//璁″垝鐢熶骇閲� + double actualPd;//瀹為檯鐢熶骇閲� + double progress;//鐢熶骇杩涘害 + int finishOntime;//鏄惁鎸夋湡瀹屾垚 +}; + +struct MonoutputInfo +{ + int month;//鏈堜唤 + double aOutput;//a浜у搧鏈堜骇閲� + double bOutput;//b浜у搧鏈堜骇閲� + double cOutput;//c浜у搧鏈堜骇閲� +}; + +//娣诲姞涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣� +struct AddPdplanReq +{ + Head head; + PdplanInfo info[0]; + AddPdplanReq() { + head.type = ADD_PDPLAN_REQ; + head.len = sizeof(AddPdplanReq); + } +}; + +//娣诲姞涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣� +struct AddPdplanRes +{ + Head head; + int status;//琛ㄧず鏄惁娣诲姞鎴愬姛锛�0鍚�1鏄� + AddPdplanRes() { + head.type = ADD_PDPLAN_RES; + head.len = sizeof(AddPdplanRes); + } +}; + +//鍒犻櫎涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣� +struct DelPdplanReq +{ + Head head; + PdplanInfo info[0]; + DelPdplanReq() { + head.type = DEL_PDPLAN_REQ; + head.len = sizeof(DelPdplanReq); + } +}; + +//鍒犻櫎涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣� +struct DelPdplanRes +{ + Head head; + int status;//琛ㄧず鏄惁鍒犻櫎鎴愬姛锛�0鍚�1鏄� + DelPdplanRes() { + head.type = DEL_PDPLAN_RES; + head.len = sizeof(DelPdplanRes); + } +}; + +//鏇存敼涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�. +struct UpdatePdplanReq +{ + Head head; + PdplanInfo info[0]; + UpdatePdplanReq() { + head.type = UPDATE_PDPLAN_REQ; + head.len = sizeof(UpdatePdplanReq); + } +}; + +//鏇存敼涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣� +struct UpdatePdplanRes +{ + Head head; + int status;//琛ㄧず鏄惁鏇存柊鎴愬姛锛�0鍚�1鏄� + PdplanInfo info[0]; + UpdatePdplanRes() { + head.type = UPDATE_PDPLAN_RES; + head.len = sizeof(UpdatePdplanRes); + } +}; + +//鏌ヨ涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣� +struct QueryPdplanReq +{ + Head head; + int planId;//璁㈠崟缂栧彿 + char planName[32];//璁㈠崟鍒掑悕瀛� + char startDate[32];//璧峰鏃ユ湡 + char closingDate[32];//浜や粯鏃ユ湡 + char pdName[8];//浜у搧鍚� + double plannedPd;//璁″垝鐢熶骇閲� + double actualPd;//瀹為檯鐢熶骇閲� + double progress;//鐢熶骇杩涘害 + int finishOntime;//鏄惁鎸夋湡瀹屾垚 + QueryPdplanReq() { + head.type = QUERY_PDPLAN_REQ; + head.len = sizeof(QueryPdplanReq); + } +}; + +//鏌ヨ涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣� +struct QueryPdplanRes +{ + Head head; + int status;//琛ㄧず鏄惁娣诲姞鎴愬姛锛�0鍚�1鏄� + PdplanInfo info[0]; + QueryPdplanRes() { + head.type = QUERY_PDPLAN_RES; + head.len = sizeof(QueryPdplanRes); + } +}; + + +//娣诲姞鏈堜骇閲忕殑璇锋眰缁撴瀯浣� +struct AddMonoutputReq +{ + Head head; + MonoutputInfo info[0]; + AddMonoutputReq() { + head.type = ADD_MONOUTPUT_REQ; + head.len = sizeof(AddMonoutputReq); + } +}; + +//娣诲姞鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣� +struct AddMonoutputRes +{ + Head head; + int status;//琛ㄧず鏄惁娣诲姞鎴愬姛锛�0鍚�1鏄� + AddMonoutputRes() { + head.type = ADD_MONOUTPUT_RES; + head.len = sizeof(AddMonoutputRes); + } +}; + +//鍒犻櫎鏈堜骇閲忕殑璇锋眰缁撴瀯浣� +struct DelMonoutputReq +{ + Head head; + MonoutputInfo info[0]; + DelMonoutputReq() { + head.type = DEL_MONOUTPUT_REQ; + head.len = sizeof(DelMonoutputReq); + } +}; + +//鍒犻櫎鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣� +struct DelMonoutputRes +{ + Head head; + int status;//琛ㄧず鏄惁鍒犻櫎鎴愬姛锛�0鍚�1鏄� + DelMonoutputRes() { + head.type = DEL_MONOUTPUT_RES; + head.len = sizeof(DelMonoutputRes); + } +}; + +//鏇存敼鏈堜骇閲忕殑璇锋眰缁撴瀯浣�. +struct UpdateMonoutputReq +{ + Head head; + MonoutputInfo info[0]; + UpdateMonoutputReq() { + head.type = UPDATE_MONOUTPUT_REQ; + head.len = sizeof(UpdateMonoutputReq); + } +}; + +//鏇存敼鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣� +struct UpdateMonoutputRes +{ + Head head; + int status;//琛ㄧず鏄惁鏇存柊鎴愬姛锛�0鍚�1鏄� + MonoutputInfo info[0]; + UpdateMonoutputRes() { + head.type = UPDATE_MONOUTPUT_RES; + head.len = sizeof(UpdateMonoutputRes); + } +}; + +//鏌ヨ鏈堜骇閲忕殑璇锋眰缁撴瀯浣� +struct QueryMonoutputReq +{ + Head head; + int month;//鏈堜唤 + double aOutput;//a浜у搧鏈堜骇閲� + double bOutput;//b浜у搧鏈堜骇閲� + double cOutput;//c浜у搧鏈堜骇閲� + QueryMonoutputReq() { + head.type = QUERY_MONOUTPUT_REQ; + head.len = sizeof(QueryMonoutputReq); + } +}; + +//鏌ヨ鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣� +struct QueryMonoutputRes +{ + Head head; + int status;//琛ㄧず鏄惁娣诲姞鎴愬姛锛�0鍚�1鏄� + MonoutputInfo info[0]; + QueryMonoutputRes() { + head.type = QUERY_MONOUTPUT_RES; + head.len = sizeof(QueryMonoutputRes); + } +}; + + + +//鍘嗗彶鏌ヨ鍒嗘瀽 +// 鍘嗗彶鏌ヨ璇锋眰缁撴瀯浣� +struct HistoryQueryReq { + Head head; + //鏍规嵁鏃堕棿鑼冨洿鏌ヨ + char startTime[32]; + char endTime[32]; + //鍏抽敭瀛楁煡璇� + char keyWord[32]; + HistoryQueryReq() { + // 鍒濆鍖栨暟鎹ご + head.type = QUERY_MONOUTPUT_REQ; + head.len = sizeof(HistoryQueryReq); + // 鍒濆鍖栨煡璇㈡潯浠跺瓧娈� + memset(startTime, 0, sizeof(startTime)); + memset(endTime, 0, sizeof(endTime)); + + } +}; + +// 鍘嗗彶鏌ヨ鍝嶅簲缁撴瀯浣� + +// 绯荤粺杩愯鐘舵�佽〃鐩稿叧淇℃伅 +struct HistroyInfo { + WarningRes warn;//璀︽姤鏌ヨ + QDRes dev;//璁惧鏌ヨ + QueryPdplanRes pro;//鐢熶骇璁″垝鏌ヨ +}; +struct HistoryQueryRes { + Head head; + HistroyInfo sys[0]; + HistoryQueryRes() { + // 鍒濆鍖栨暟鎹ご + head.type = QUERY_MONOUTPUT_RES; + head.len = sizeof(HistoryQueryRes); + } +}; + + +//鑷姩鍗囩骇 +struct VersionNumReq // 鐗堟湰鍙疯姹� +{ + Head head; + VersionNumReq() { + head.type = VERSION_NUM_REQ; + head.len = sizeof(VersionNumReq); + } +}; + +struct VersionNumRes // 鐗堟湰鍙峰搷搴� +{ + Head head; + char versionId[64]; // 鐗堟湰鍙� + VersionNumRes() { + head.type = VERSION_NUM_RES; + head.len = sizeof(VersionNumRes); + } +}; + +// 鏂囦欢浼犺緭 +struct FileInfo +{ + char fileName[256]; + long long fileSize; + char s_filepath[128]; + char content[0]; +}; + +struct UploadFileReq // 涓婁紶鏂囦欢鐨勮姹� +{ + Head head; + FileInfo fileInfo; + UploadFileReq() { + head.type = UPLOAD_FILE_REQ; + head.len = sizeof(UploadFileReq); + } +}; + +struct UploadFileRes { // 涓婁紶鏂囦欢鐨勫搷搴� + Head head; + bool state = false; + char fileName[256]; + long long file_size; + UploadFileRes() + { + head.type = UPLOAD_FILE_RES; + head.len = sizeof(UploadFileRes); + } +}; + +// 鐗堟湰淇℃伅褰曞叆 +// 璇锋眰 +struct VersionInfoEntryReq { + Head head; + char versionId[64]; // 鐗堟湰鍙� + char versionIdOld[64]; // 涓婁竴涓増鏈彿 + int fileNum; + char context[0]; //鍖呭惈涓嬭浇鏂囦欢淇℃伅 + + VersionInfoEntryReq() + { + head.type = VERSION_INFOENTRY_REQ; + head.len = sizeof(VersionInfoEntryReq); + } +}; + +// 鐗堟湰淇℃伅褰曞叆鍝嶅簲 +struct VersionInfoEntryRes { + Head head; + bool state = false; + VersionInfoEntryRes() + { + head.type = VERSION_INFOENTRY_RES; + head.len = sizeof(VersionInfoEntryRes); + } +}; + +// 鐗堟湰鏇存柊璇锋眰 +struct VersionUpdateReq { + Head head; + + char curVersionId[64]; // 鐗堟湰鍙� + VersionUpdateReq() + { + head.type = VERSION_UPDATE_REQ; + head.len = sizeof(VersionUpdateReq); + } +}; + +// 鐗堟湰鏇存柊鍝嶅簲 +struct VersionUpdateRes { + Head head; + bool state = false; + char versionId[64]; // 鐗堟湰鍙� + char updateDate[32]; // 鏇存柊鏃堕棿 + char versionDescription[1024]; //鏇存柊鎻忚堪 + + VersionUpdateRes() + { + head.type = VERSION_UPDATE_RES; + head.len = sizeof(VersionUpdateRes); + } +}; + +// 鐗堟湰鏇存柊鏂囦欢涓嬭浇璇锋眰 +struct FileDownloadsReq { + Head head; + char versionId[64]; // 鐗堟湰鍙� + FileDownloadsReq() + { + head.type = FILE_DOWNLOADS_REQ; + head.len = sizeof(FileDownloadsReq); + } +}; + +// 鐗堟湰鏇存柊鏂囦欢涓嬭浇鍝嶅簲 +struct FileDownloadsRes { + Head head; + char versionId[64]; // 鐗堟湰鍙� + char filename[128]; //鏂囦欢鍚� + long long filesize; //鏂囦欢澶у皬 + char c_filepath[128]; //瀹㈡埛绔斁鏈�鏂扮増鏈殑鏈湴璺緞 + int fileNum; // 鏂囦欢鏁伴噺 + long long allFileSize; // 鏂囦欢鎬诲ぇ灏� + char content[0]; + FileDownloadsRes() + { + head.type = FILE_DOWNLOADS_RES; + head.len = sizeof(FileDownloadsRes); + } +}; + +// 鏇存柊鏂囦欢涓嬭浇鎴愬姛鐨勫搷搴� +struct DownloadSuccessfullyRes { + Head head; + bool state = false; + char fileName[256]; + long long fileSize; + DownloadSuccessfullyRes() + { + head.type = DOWNLOAD_SUCCESSFULLY_RES; + head.len = sizeof(DownloadSuccessfullyRes); + } +}; + + +//鏃ュ織 +struct ParsedLog { + int id; + char timeStamp[64]; // 鏃堕棿鎴� + char deviceId[64]; // 璁惧ID + char level[16]; // 鏃ュ織绾у埆 + char content[256]; // 鏃ュ織鍐呭 + char userId[64]; // 鐢ㄦ埛ID + char fileName[32]; //鏂囦欢鍚� + int problemLine; //浜х敓閿欒琛屽彿 + char functionName[32]; //鍑芥暟鍚� + +}; + +// 鏃ュ織鏌ヨ璇锋眰缁撴瀯浣� +struct LogQueryReq { + Head head; // 鏁版嵁澶� + char startTime[20]; // 鏍规嵁瀹為檯闇�瑕佽皟鏁村ぇ灏� + char endTime[20]; // 鏍规嵁瀹為檯闇�瑕佽皟鏁村ぇ灏� + char content[256]; // 鏃ュ織鍐呭 + char level[16]; //鏃ュ織绾у埆 + char deviceId[64]; // 璁惧ID + // 鏃犲弬鏋勯�犲嚱鏁� + LogQueryReq() { + head.type = LOGSEARCH_REQ; + head.len = sizeof(LogQueryReq); + } +}; + + +// 鏃ュ織鏌ヨ鍝嶅簲缁撴瀯浣� +struct LogQueryRes { + Head head; + int status; // 鍝嶅簲鐘舵�� (濡� 0 琛ㄧず鎴愬姛锛岄潪 0 琛ㄧず澶辫触) + ParsedLog parsedLog[0]; // 浣跨敤鏌旀�ф暟缁勫瓨鍌ㄦ煡璇㈢粨鏋� + + // 鏃犲弬鏋勯�犲嚱鏁� + LogQueryRes() { + head.type = LOGSEARCH_RES; + head.len = sizeof(LogQueryRes); + } +}; + + + + +#endif // COMMON_H diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro" "b/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro" new file mode 100644 index 0000000..f335c61 --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro" @@ -0,0 +1,39 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2024-11-04T19:54:13 +# +#------------------------------------------------- + +QT += core gui network + + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = kunlunclient +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + + +SOURCES += \ + main.cpp \ + clientmainwindow.cpp \ + logquery.cpp + +HEADERS += \ + clientmainwindow.h \ + logquery.h \ + common.h + +FORMS += \ + clientmainwindow.ui \ + logquery.ui diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro.user" "b/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro.user" new file mode 100644 index 0000000..0cd92fe --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro.user" @@ -0,0 +1,806 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE QtCreatorProject> +<!-- Written by QtCreator 4.5.0, 2024-11-06T21:44:24. --> +<qtcreator> + <data> + <variable>EnvironmentId</variable> + <value type="QByteArray">{197a2871-47a7-48be-824d-e8eb4f5b395c}</value> + </data> + <data> + <variable>ProjectExplorer.Project.ActiveTarget</variable> + <value type="int">0</value> + </data> + <data> + <variable>ProjectExplorer.Project.EditorSettings</variable> + <valuemap type="QVariantMap"> + <value type="bool" key="EditorConfiguration.AutoIndent">true</value> + <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value> + <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value> + <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0"> + <value type="QString" key="language">Cpp</value> + <valuemap type="QVariantMap" key="value"> + <value type="QByteArray" key="CurrentPreferences">CppGlobal</value> + </valuemap> + </valuemap> + <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1"> + <value type="QString" key="language">QmlJS</value> + <valuemap type="QVariantMap" key="value"> + <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value> + </valuemap> + </valuemap> + <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value> + <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value> + <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value> + <value type="int" key="EditorConfiguration.IndentSize">4</value> + <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value> + <value type="int" key="EditorConfiguration.MarginColumn">80</value> + <value type="bool" key="EditorConfiguration.MouseHiding">true</value> + <value type="bool" key="EditorConfiguration.MouseNavigation">true</value> + <value type="int" key="EditorConfiguration.PaddingMode">1</value> + <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value> + <value type="bool" key="EditorConfiguration.ShowMargin">false</value> + <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value> + <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value> + <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value> + <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value> + <value type="int" key="EditorConfiguration.TabSize">8</value> + <value type="bool" key="EditorConfiguration.UseGlobal">true</value> + <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value> + <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value> + <value type="bool" key="EditorConfiguration.cleanIndentation">true</value> + <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value> + <value type="bool" key="EditorConfiguration.inEntireDocument">false</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.PluginSettings</variable> + <valuemap type="QVariantMap"/> + </data> + <data> + <variable>ProjectExplorer.Project.Target.0</variable> + <valuemap type="QVariantMap"> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.9.4 MinGW 32bit</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.9.4 MinGW 32bit</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.594.win32_mingw53_kit</value> + <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> + <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> + <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MinGW_32bit-Debug</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MinGW_32bit-Release</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MinGW_32bit-Profile</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> + <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value> + <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value> + <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value> + <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value> + <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/> + <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value> + <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value> + <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value> + <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value> + <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value> + <value type="int" key="Analyzer.Valgrind.NumCallers">25</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/> + <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value> + <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> + <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value> + <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value> + <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds"> + <value type="int">0</value> + <value type="int">1</value> + <value type="int">2</value> + <value type="int">3</value> + <value type="int">4</value> + <value type="int">5</value> + <value type="int">6</value> + <value type="int">7</value> + <value type="int">8</value> + <value type="int">9</value> + <value type="int">10</value> + <value type="int">11</value> + <value type="int">12</value> + <value type="int">13</value> + <value type="int">14</value> + </valuelist> + <value type="int" key="PE.EnvironmentAspect.Base">2</value> + <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">kunlunclient</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:B:/Qt/QtProject/kunlunclient/kunlunclient.pro</value> + <value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value> + <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value> + <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">kunlunclient.pro</value> + <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value> + <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value> + <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MinGW_32bit-Debug</value> + <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> + <value type="bool" key="RunConfiguration.UseCppDebugger">false</value> + <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> + <value type="bool" key="RunConfiguration.UseMultiProcess">false</value> + <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> + <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.Target.1</variable> + <valuemap type="QVariantMap"> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.9.4 MSVC2015 32bit</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.9.4 MSVC2015 32bit</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.594.win32_msvc2015_kit</value> + <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> + <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> + <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_32bit-Debug</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_32bit-Release</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_32bit-Profile</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> + <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value> + <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value> + <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value> + <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value> + <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/> + <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value> + <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value> + <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value> + <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value> + <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value> + <value type="int" key="Analyzer.Valgrind.NumCallers">25</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/> + <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value> + <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> + <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value> + <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value> + <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds"> + <value type="int">0</value> + <value type="int">1</value> + <value type="int">2</value> + <value type="int">3</value> + <value type="int">4</value> + <value type="int">5</value> + <value type="int">6</value> + <value type="int">7</value> + <value type="int">8</value> + <value type="int">9</value> + <value type="int">10</value> + <value type="int">11</value> + <value type="int">12</value> + <value type="int">13</value> + <value type="int">14</value> + </valuelist> + <value type="int" key="PE.EnvironmentAspect.Base">-1</value> + <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value> + <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> + <value type="bool" key="RunConfiguration.UseCppDebugger">false</value> + <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> + <value type="bool" key="RunConfiguration.UseMultiProcess">false</value> + <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> + <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.Target.2</variable> + <valuemap type="QVariantMap"> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.9.4 MSVC2015 64bit</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.9.4 MSVC2015 64bit</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.594.win64_msvc2015_64_kit</value> + <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> + <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> + <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_64bit-Debug</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_64bit-Release</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_64bit-Profile</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> + <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value> + <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value> + <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value> + <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value> + <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/> + <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value> + <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value> + <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value> + <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value> + <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value> + <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value> + <value type="int" key="Analyzer.Valgrind.NumCallers">25</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/> + <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value> + <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> + <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value> + <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value> + <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value> + <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds"> + <value type="int">0</value> + <value type="int">1</value> + <value type="int">2</value> + <value type="int">3</value> + <value type="int">4</value> + <value type="int">5</value> + <value type="int">6</value> + <value type="int">7</value> + <value type="int">8</value> + <value type="int">9</value> + <value type="int">10</value> + <value type="int">11</value> + <value type="int">12</value> + <value type="int">13</value> + <value type="int">14</value> + </valuelist> + <value type="int" key="PE.EnvironmentAspect.Base">-1</value> + <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value> + <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> + <value type="bool" key="RunConfiguration.UseCppDebugger">false</value> + <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> + <value type="bool" key="RunConfiguration.UseMultiProcess">false</value> + <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> + <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.TargetCount</variable> + <value type="int">3</value> + </data> + <data> + <variable>ProjectExplorer.Project.Updater.FileVersion</variable> + <value type="int">18</value> + </data> + <data> + <variable>Version</variable> + <value type="int">18</value> + </data> +</qtcreator> diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.cpp" "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.cpp" new file mode 100644 index 0000000..cfc075c --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.cpp" @@ -0,0 +1,216 @@ +锘�#include "logquery.h" +#include "ui_logquery.h" +#include <QTcpSocket> +#include <QMessageBox> +#include <QStandardItemModel> +#pragma execution_character_set("utf-8") + + + +LogQuery::LogQuery(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::LogQuery) +{ + ui->setupUi(this); + + m_client = nullptr;//缃┖ + +} + +LogQuery::LogQuery(QTcpSocket *client, QWidget *parent): + QMainWindow(parent), + ui(new Ui::LogQuery) +{ + ui->setupUi(this); + + connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(onComboBoxIndexChanged(int))); + ui->dateTimeEdit_end->setDateTime(QDateTime::currentDateTime()); + //鎷変几 鏁堟灉 + ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + ui->spinBox->setValue(10); + +// int nWidth = ui->tableView->width(); +// ui->tableView->setColumnWidth(0, qRound(nWidth*0.1)); +// ui->tableView->setColumnWidth(1, qRound(nWidth*0.5)); +// ui->tableView->setColumnWidth(2, qRound(nWidth*0.3)); +// ui->tableView->setColumnWidth(3, qRound(nWidth*0.15)); +// ui->tableView->setColumnWidth(4, qRound(nWidth*0.15)); +// ui->tableView->setColumnWidth(5, qRound(nWidth*0.3)); +// ui->tableView->setColumnWidth(6, qRound(nWidth*0.3)); +// ui->tableView->setColumnWidth(7, qRound(nWidth*0.3)); +// ui->tableView->setColumnWidth(8, qRound(nWidth*0.3)); + + + + m_client = client;//鍏变韩濂楁帴瀛� +} + +LogQuery::~LogQuery() +{ + delete ui; +} + +void LogQuery::on_pushButton_search_clicked() +{ + QString selectedFilter = ui->comboBox->currentText(); + QByteArray request; + + // 鍔ㄦ�佸垎閰嶈姹傜粨鏋勪綋 + int size = sizeof(LogQueryReq) + sizeof(ParsedLog); + LogQueryReq* req = (LogQueryReq*)new char[size]; + + req->head.type = LOGSEARCH_REQ; + req->head.len = size; + + // 鍒濆鍖栬姹傛暟鎹� + initializeRequestData(req); + + // 鏍规嵁閫夊畾鐨勭瓫閫夋潯浠跺~鍏呰姹傛暟鎹� + if (selectedFilter == "鏃堕棿") { + + QString startTime = ui->dateTimeEdit_start->dateTime().toString("yyyy-MM-dd HH:mm:ss"); + QString endTime = ui->dateTimeEdit_end->dateTime().toString("yyyy-MM-dd HH:mm:ss"); + + // 灏嗗紑濮嬫椂闂村拰缁撴潫鏃堕棿璁剧疆鍒拌姹備腑 + strcpy(req->startTime, startTime.toLocal8Bit().constData()); + strcpy(req->endTime, endTime.toLocal8Bit().constData()); + } else if (selectedFilter == "鏃ュ織鍐呭" || selectedFilter == "鏃ュ織绾у埆" || selectedFilter == "璁惧ID") { + QString filterValue = ui->lineEdit->text(); + if (filterValue.isEmpty()) { + QMessageBox::warning(this, "璀﹀憡", "璇疯緭鍏ョ瓫閫夋潯浠讹紒"); + delete[] req; // 閲婃斁鍐呭瓨 + return; + } + + // 鏍规嵁绛涢�夋潯浠跺~鍏呯浉搴旂殑瀛楁 + if (selectedFilter == "鏃ュ織鍐呭") { + + strcpy(req->content, filterValue.toLocal8Bit().data()); + } else if (selectedFilter == "鏃ュ織绾у埆") { + + strcpy(req->level, filterValue.toLocal8Bit().data()); + } else if (selectedFilter == "璁惧ID") { + + strcpy(req->deviceId, filterValue.toLocal8Bit().data()); + } + } else { + QMessageBox::warning(this, "璀﹀憡", "璇烽�夋嫨鏈夋晥鐨勭瓫閫夋潯浠讹紒"); + delete[] req; // 閲婃斁鍐呭瓨 + return; + } + + // 灏嗙粨鏋勪綋杞负 QByteArray + request = QByteArray((char*)(req), req->head.len); + + // 鍙戦�佽姹� + if (m_client != nullptr) { + qDebug() << __FUNCTION__ << m_client->write(request); + } + + // 閲婃斁鍐呭瓨 + delete[] req; + currentPage = 1; + // 閲嶆柊璁$畻鎬婚〉鏁� + totalPages = (logs.size() + logsPerPage - 1) / logsPerPage; + displayCurrentPage(); + updatePageLabel(); + +} + +void LogQuery::queryResSlot(LogQueryRes *res) +{ + if (res->status == 1) { + // 瑙f瀽鏃ュ織鏁版嵁 + logs.clear(); + + int maxLogs = ui->spinBox->value(); + int logCount = (res->head.len - sizeof(LogQueryRes)) / sizeof(ParsedLog); + qDebug()<<"logcount = "<<logCount; + int displayCount = qMin(maxLogs, logCount); // 鏄剧ず鏁伴噺涓嶈秴杩囨渶澶у�� + for (int i = 0; i < displayCount; ++i) { + logs.append(res->parsedLog[i]); + } + + totalPages = (logs.size()+logsPerPage -1)/ logsPerPage;//璁$畻鎬婚〉鏁� + currentPage = 1; // 閲嶇疆椤电爜 + updatePageLabel();//鏇存柊鏍囩 + displayCurrentPage(); // 鏄剧ず绗竴椤� + } + else{ + ui->tableView->setModel(nullptr); + QMessageBox::warning(this, "璀﹀憡", "鏃犵浉鍏冲唴瀹�"); + + } +} + +void LogQuery::initializeRequestData(LogQueryReq *req) +{ + req->startTime[0] = '\0'; + req->endTime[0] = '\0'; + req->level[0] = '\0'; + req->deviceId[0] = '\0'; + req->content[0] = '\0'; +} + +void LogQuery::updatePageLabel() +{ + ui->label_currentPage->setText(QString("褰撳墠椤碉細%1 / %2").arg(currentPage).arg(totalPages)); + // 濡傛灉鍙湁涓�椤垫垨鑰呮病鏈夋暟鎹紝绂佺敤涓婁笅椤垫寜閽� + ui->pushButton_up->setEnabled(currentPage > 1); // 绂佺敤涓婁竴椤垫寜閽� + ui->pushButton_down->setEnabled(currentPage < totalPages); // 绂佺敤涓嬩竴椤垫寜閽� +} + + +void LogQuery::on_pushButton_up_clicked() +{ + if (currentPage > 0) { + --currentPage; + updatePageLabel(); + displayCurrentPage(); // 鏄剧ず涓婁竴椤� + } +} + +void LogQuery::on_pushButton_down_clicked() +{ + if (currentPage < totalPages) { + ++currentPage; + updatePageLabel(); + displayCurrentPage(); + } +} + +void LogQuery::onComboBoxIndexChanged(int index) +{ + ui->lineEdit->clear(); +} + +void LogQuery::displayCurrentPage() +{ + QStandardItemModel* model = new QStandardItemModel(); + model->setHorizontalHeaderLabels({"ID", "鏃堕棿", "璁惧ID", "鏃ュ織绾у埆", "鏃ュ織鍐呭", "鐢ㄦ埛ID", "閿欒鏂囦欢鍚�", "閿欒琛屽彿", "閿欒鍑芥暟鍚�"}); + + int start = (currentPage -1)* logsPerPage; + int end = qMin(start + logsPerPage, logs.size()); + + // 濉厖褰撳墠椤电殑鏃ュ織鏉$洰 + for (int i = start; i < end; ++i) { + ParsedLog parsedLog = logs[i]; + QList<QStandardItem *> rowItems; + + rowItems.append(new QStandardItem(QString::number(parsedLog.id))); + rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.timeStamp))); + rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.deviceId))); + rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.level))); + rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.content))); + rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.userId))); + rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.fileName))); + rowItems.append(new QStandardItem(QString::number(parsedLog.problemLine))); + rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.functionName))); + + model->appendRow(rowItems); + } + + // 鏇存柊琛ㄦ牸瑙嗗浘 + ui->tableView->setModel(model); + ui->tableView->resizeColumnsToContents(); +} diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.h" "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.h" new file mode 100644 index 0000000..4fe6a49 --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.h" @@ -0,0 +1,49 @@ +锘�#ifndef LOGQUERY_H +#define LOGQUERY_H + +#include <QMainWindow> +#include "common.h" +#include <QTcpSocket> +#pragma execution_character_set("utf-8") + + +namespace Ui { +class LogQuery; +} + +class LogQuery : public QMainWindow +{ + Q_OBJECT + +public: + explicit LogQuery(QWidget *parent = 0); + explicit LogQuery(QTcpSocket *client,QWidget *parent = 0); + ~LogQuery(); + +private slots: + void on_pushButton_search_clicked(); + + void queryResSlot(LogQueryRes *res); + + void on_pushButton_up_clicked(); + + void on_pushButton_down_clicked(); + + void onComboBoxIndexChanged(int index); + +private: + void displayCurrentPage(); + Ui::LogQuery *ui; + QTcpSocket *m_client; + + QVector<ParsedLog> logs; + + int currentPage = 1; // 褰撳墠椤电爜锛屼粠1寮�濮� + int totalPages = 1; // 鎬婚〉鏁� + const int logsPerPage = 10; // 姣忛〉鏄剧ず鐨勬棩蹇楁暟閲� + + void initializeRequestData(LogQueryReq* req);//鍒濆鍖栬姹傛暟鎹� + void updatePageLabel(); +}; + +#endif // LOGQUERY_H diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.ui" "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.ui" new file mode 100644 index 0000000..4bfb989 --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.ui" @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>LogQuery</class> + <widget class="QMainWindow" name="LogQuery"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>600</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="0" column="0"> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>鏌ヨ鏉′欢</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QComboBox" name="comboBox"> + <item> + <property name="text"> + <string>鏃堕棿</string> + </property> + </item> + <item> + <property name="text"> + <string>鏃ュ織鍐呭</string> + </property> + </item> + <item> + <property name="text"> + <string>鏃ュ織绾у埆</string> + </property> + </item> + <item> + <property name="text"> + <string>璁惧ID</string> + </property> + </item> + </widget> + </item> + <item> + <widget class="QLineEdit" name="lineEdit"/> + </item> + </layout> + </item> + <item row="1" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>寮�濮嬶細</string> + </property> + </widget> + </item> + <item> + <widget class="QDateTimeEdit" name="dateTimeEdit_start"> + <property name="calendarPopup"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>缁撴潫锛�</string> + </property> + </widget> + </item> + <item> + <widget class="QDateTimeEdit" name="dateTimeEdit_end"> + <property name="calendarPopup"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="2" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QPushButton" name="pushButton_search"> + <property name="text"> + <string>鏌ヨ</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QSpinBox" name="spinBox"/> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="QGroupBox" name="groupBox_2"> + <property name="title"> + <string>鏌ヨ缁撴灉</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QTableView" name="tableView"/> + </item> + </layout> + </widget> + </item> + <item row="2" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QLabel" name="label_currentPage"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="pushButton_up"> + <property name="text"> + <string>涓婁竴椤�</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_down"> + <property name="text"> + <string>涓嬩竴椤�</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>23</height> + </rect> + </property> + </widget> + <widget class="QStatusBar" name="statusbar"/> + </widget> + <resources/> + <connections/> +</ui> diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/main.cpp" "b/Client/\346\234\261\350\210\252/code/kunlunclient/main.cpp" new file mode 100644 index 0000000..10f11bd --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/main.cpp" @@ -0,0 +1,11 @@ +#include "clientmainwindow.h" +#include <QApplication> + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + ClientMainWindow w; + w.show(); + + return a.exec(); +} diff --git "a/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.cpp" "b/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.cpp" new file mode 100644 index 0000000..686d211 --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.cpp" @@ -0,0 +1,91 @@ +#include "stdafx.h" +#include "LogSearch.h" +#include <iostream> +#include "MysqlConn.h" +using namespace std; +LogSearch::LogSearch() +{ +} + + +LogSearch::~LogSearch() +{ +} + +bool LogSearch::searchLogBusiness(SOCKET client, LogQueryReq * req) +{ + //// 初始化 SQL 查询语句 + + string sql = "SELECT * FROM parsed_logs WHERE"; + + if (*(req->startTime) && *(req->endTime)) { + sql += " time_stamp BETWEEN '" + string(req->startTime) + "' AND '" + string(req->endTime) + "'"; + } + + if (*(req->level)) { + sql += " level LIKE '%" + string(req->level) + "%'"; + } + + if (*(req->deviceId)) { + sql += " device_id LIKE '%" + string(req->deviceId) + "%'"; + } + + if ((*req->content)) { + sql += " content LIKE '%" + string(req->content) + "%'"; + } + + // 打印构建的 SQL 语句,方便调试 + cout << "SQL: " << sql << endl; + + // 设置 MySQL 连接并执行查询 + + + MysqlConn conn; + vector<vector<string>> result; + bool querySuccess = conn.query(sql, result); + if (!querySuccess) { + cout << "查询失败" << endl; + return false; + } + + int len = sizeof(LogQueryRes) + result.size() * sizeof(ParsedLog); // 动态计算数据长度 + LogQueryRes* res = (LogQueryRes*)malloc(len); // 为 LogQueryRes 结构体及其柔性数组分配内存 + + // 初始化结构体 + res->head.type = LOGSEARCH_RES; + res->head.len = len; + res->status = (result.empty()) ? 0 : 1; // 如果结果为空,设置状态为 0 + + // 将查询结果填充到 parsedLog 数组中 + for (const auto& row : result) { + cout << "行:" << row.size() << endl; + for (const auto& item : row) { + cout << item << " "; + + } + } + cout << endl; + for (size_t i = 0; i < result.size(); ++i) { + const auto& row = result[i]; + ParsedLog parlog; + if (row.size() >= 9) { + parlog.id = stoi(row[0]); + strncpy(parlog.timeStamp, row[1].c_str(), sizeof(parlog.timeStamp)); + strncpy(parlog.deviceId, row[2].c_str(), sizeof(parlog.deviceId)); + strncpy(parlog.level, row[3].c_str(), sizeof(parlog.level)); + strncpy(parlog.content, row[4].c_str(), sizeof(parlog.content)); + strncpy(parlog.userId, row[5].c_str(), sizeof(parlog.userId)); + strncpy(parlog.fileName, row[6].c_str(), sizeof(parlog.fileName)); + parlog.problemLine = stoi(row[7]); + strncpy(parlog.functionName, row[8].c_str(), sizeof(parlog.functionName)); + res->parsedLog[i] = parlog; // 填充数据 + } + } + + // 发送响应 + cout << __FUNCTION__ << send(client, (char*)res, res->head.len, 0) << endl; + + // 释放内存 + free(res); // 释放分配的内存 + +} diff --git "a/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.h" "b/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.h" new file mode 100644 index 0000000..73684e1 --- /dev/null +++ "b/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.h" @@ -0,0 +1,17 @@ +#pragma once +#include "common.h" +#include <WinSock2.h> +#include "mysql1/include/jdbc/mysql_driver.h" +#include "mysql1/include/jdbc/mysql_connection.h" +#include "mysql1/include/jdbc/cppconn/prepared_statement.h" +#include "mysql1/include/jdbc/cppconn/resultset.h" +#include "mysql1/include/jdbc/cppconn//exception.h" +#include <iostream> +class LogSearch +{ +public: + LogSearch(); + virtual ~LogSearch(); + bool searchLogBusiness(SOCKET client, LogQueryReq* req); +}; + diff --git "a/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521105.doc" "b/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521105.doc" index 1d30c29..5d34d41 100644 --- "a/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521105.doc" +++ "b/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521105.doc" Binary files differ diff --git "a/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521106.doc" "b/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521106.doc" new file mode 100644 index 0000000..da123aa --- /dev/null +++ "b/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521106.doc" Binary files differ diff --git "a/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1102.doc" "b/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1104.doc" similarity index 100% rename from "Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1102.doc" rename to "Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1104.doc" Binary files differ diff --git "a/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1105.doc" "b/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1105.doc" new file mode 100644 index 0000000..52d368c --- /dev/null +++ "b/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1105.doc" Binary files differ diff --git "a/Client/\347\216\213\351\221\253\351\221\253/log/\346\227\245\345\277\227_\347\216\213\351\221\253\351\221\253_1106.doc" "b/Client/\347\216\213\351\221\253\351\221\253/log/\346\227\245\345\277\227_\347\216\213\351\221\253\351\221\253_1106.doc" new file mode 100644 index 0000000..0c5f5e7 --- /dev/null +++ "b/Client/\347\216\213\351\221\253\351\221\253/log/\346\227\245\345\277\227_\347\216\213\351\221\253\351\221\253_1106.doc" Binary files differ diff --git "a/Client/\351\273\216\345\274\230\351\234\226/log/\350\256\276\345\244\207\347\256\241\347\220\206_\351\273\216\345\274\230\351\234\226_1107.doc" "b/Client/\351\273\216\345\274\230\351\234\226/log/\350\256\276\345\244\207\347\256\241\347\220\206_\351\273\216\345\274\230\351\234\226_1107.doc" new file mode 100644 index 0000000..1dba3de --- /dev/null +++ "b/Client/\351\273\216\345\274\230\351\234\226/log/\350\256\276\345\244\207\347\256\241\347\220\206_\351\273\216\345\274\230\351\234\226_1107.doc" Binary files differ diff --git "a/Server/\346\235\216\350\275\254\350\275\254/log/\351\205\215\347\275\256\347\256\241\347\220\206_\346\235\216\350\275\254\350\275\254_1107.doc" "b/Server/\346\235\216\350\275\254\350\275\254/log/\351\205\215\347\275\256\347\256\241\347\220\206_\346\235\216\350\275\254\350\275\254_1107.doc" new file mode 100644 index 0000000..1a9bcc6 --- /dev/null +++ "b/Server/\346\235\216\350\275\254\350\275\254/log/\351\205\215\347\275\256\347\256\241\347\220\206_\346\235\216\350\275\254\350\275\254_1107.doc" Binary files differ diff --git "a/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.cpp" "b/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.cpp" index ce7acb2..2fff64c 100644 --- "a/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.cpp" +++ "b/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.cpp" @@ -1,125 +1,101 @@ #include "stdafx.h" #include "ConnectionPool.h" -#include <fstream> -#include <iostream> -#include <thread> - -ConnectionPool* ConnectionPool::getInstance() { - static ConnectionPool connPool; - return &connPool; -} ConnectionPool::ConnectionPool() { - // 加载配置文件 - if (!parseJsonFile()) { - std::cout << "parseJsonFile is failed!" << std::endl; - return; - } - for ( int i = 0 ; i < m_min_conn ; i++ ) { - addConnection( ); - } - // 创建一个线程,对连接数进行监控 ,连接数不足就再继续创建 - std::thread producer(&ConnectionPool::produce, this); - // 对连接数进行监控 ,如果有太多空闲得线程 ,那么就对其进行销毁 - std::thread recycler( &ConnectionPool::recycle, this); - // 线程分离 - producer.detach(); - recycler.detach(); + + m_min_conn = 5; // 假设最小连接数为 5 + m_max_conn = 10; // 假设最大连接数为 10 + m_timeout = 1000; // 假设连接超时时间为 1000 毫秒 + max_del_time = 60000; // 假设最大空闲时间为 60000 毫秒 + + for (int i = 0; i < m_min_conn; i++) { + addConnection(); + } + // 创建一个线程,对连接数进行监控 ,连接数不足就再继续创建 + thread producer(&ConnectionPool::produce, this); + // 对连接数进行监控 ,如果有太多空闲得线程 ,那么就对其进行销毁 + thread recycler(&ConnectionPool::recycle, this); + + // 线程分离 + producer.detach(); + recycler.detach(); } -bool ConnectionPool::parseJsonFile() { - - /*std::ifstream ifs("dbconf.json"); - Reader rd; - Value root; - rd.parse(ifs, root); - if ( root.isObject( ) ) { - m_ip = root["ip"].asString(); - m_port = root["port"].asInt(); - m_userName = root["userName"].asString(); - m_passwd = root["password"].asString(); - m_db = root["dbName"].asString(); - m_min_conn = root["minSize"].asInt(); - m_max_conn = root["maxSize"].asInt(); - max_del_time = root["maxDleTime"].asInt(); - m_timeout = root["timeout"].asInt(); - return true; - }*/ - return false; -} - -void ConnectionPool::description() { - std::cout << m_ip << ". " << m_userName << ". " << m_passwd << ". " << m_db << ". " - << m_port << ". " << m_max_conn << ". " << m_min_conn << ". " << m_timeout << ". " - << max_del_time << std::endl; -} ConnectionPool::~ConnectionPool() { - while (!m_connkQueue.empty()) { - MysqlConn* conn = m_connkQueue.front(); - m_connkQueue.pop(); - delete conn; - } - + while (!m_connkQueue.empty()) { + MysqlConn* conn = m_connkQueue.front(); + m_connkQueue.pop(); + delete conn; + } } void ConnectionPool::addConnection() { - MysqlConn* conn = new MysqlConn(); - if ( !conn->connect( m_ip, m_userName, m_passwd, m_db, m_port ) ) { - std::cout << "ConnectionPool connect to mysql is failed!" << std::endl; - delete conn; - return; - } - conn->refreshActiveTime( ); - m_connkQueue.push(conn); - m_cond.notify_one(); // 唤醒一个线程 + MysqlConn* conn = new MysqlConn(); + if (!conn->isConnected()) { + cout << "ConnectionPool connect to mysql is failed!" << endl; + delete conn; + return; + } + conn->refreshActiveTime(); + m_connkQueue.push(conn); + m_cond.notify_one(); // 唤醒一个线程 } -void ConnectionPool::produce(){ - while (true) { - std::unique_lock<std::mutex> lock(m_mutex); - while (m_connkQueue.size() >= m_min_conn) { // 连接队列的数量大于最小的连接数 - m_cond.wait(lock); - } - addConnection(); - } +void ConnectionPool::produce() { + while (true) { + unique_lock<mutex> lock(m_mutex); + while (m_connkQueue.size() >= m_min_conn) { // 连接队列的数量大于最小的连接数 + m_cond.wait(lock); + } + addConnection(); + } } // 删除空闲连接 void ConnectionPool::recycle() { - while ( true ) { - std::this_thread::sleep_for( std::chrono::milliseconds(500)); // 休眠500 ms - std::unique_lock<std::mutex>lock(m_mutex); - while ( m_connkQueue.size() > m_min_conn ) { - MysqlConn* conn = m_connkQueue.front( ); - if (conn->getActiveTime() >= max_del_time) { - m_connkQueue.pop(); - delete conn; - } - else { - break; - } - } - } + while (true) { + this_thread::sleep_for(chrono::milliseconds(500)); // 休眠 500 ms + unique_lock<mutex> lock(m_mutex); + while (m_connkQueue.size() > m_min_conn) { + MysqlConn* conn = m_connkQueue.front(); + if (conn->getActiveTime() >= max_del_time) { + m_connkQueue.pop(); + delete conn; + } + else { + break; + } + } + } } -std::shared_ptr<MysqlConn> ConnectionPool::getMysqlConn() { - - std::unique_lock<std::mutex>lock(m_mutex); - while ( m_connkQueue.empty()) { - // 如果等待一段时间后,队列还是为空,返回一个 null - if ( std::cv_status::timeout == m_cond.wait_for(lock, std::chrono::milliseconds(m_timeout)) ) { - if( m_connkQueue.empty( ) ) return nullptr; - } - } - std::shared_ptr<MysqlConn> connPtr(std::move(m_connkQueue.front()), [this](MysqlConn* conn) { - std::unique_lock <std::mutex>lock(m_mutex) ; - conn->refreshActiveTime(); - m_connkQueue.push(conn); - }); - m_connkQueue.pop(); - m_cond.notify_one(); // 唤醒阻塞的生产者线程,开始生产 - return connPtr; +shared_ptr<MysqlConn> ConnectionPool::getMysqlConn() { + unique_lock<mutex> lock(m_mutex); + while (m_connkQueue.empty()) { + // 如果等待一段时间后,队列还是为空,返回一个 null + if (cv_status::timeout == m_cond.wait_for(lock, chrono::milliseconds(m_timeout))) { + if (m_connkQueue.empty()) return nullptr; + } + } + shared_ptr<MysqlConn> connPtr(move(m_connkQueue.front()), [this](MysqlConn* conn) { + unique_lock<mutex> lock(m_mutex); + conn->refreshActiveTime(); + m_connkQueue.push(conn); + }); + m_connkQueue.pop(); + m_cond.notify_one(); // 唤醒阻塞的生产者线程,开始生产 + return connPtr; +} +void ConnectionPool::description() { + cout << m_ip << ". " << m_userName << ". " << m_passwd << ". " << m_db << ". " + << m_port << ". " << m_max_conn << ". " << m_min_conn << ". " << m_timeout << ". " + << max_del_time << endl; +} + +ConnectionPool* ConnectionPool::getInstance() { + static ConnectionPool connPool; + return &connPool; } \ No newline at end of file diff --git "a/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.h" "b/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.h" index bce6a07..c78a46e 100644 --- "a/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.h" +++ "b/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.h" @@ -1,50 +1,44 @@ #pragma once -#include <queue> -#include <mutex> -#include <condition_variable> -//#include <json/json.h> - #include "MysqlConn.h" - -//using namespace Json; class ConnectionPool { public: - static ConnectionPool* getInstance( ); + static ConnectionPool* getInstance(); - std::shared_ptr<MysqlConn> getMysqlConn(); // 从数据库连接池获取连接 + shared_ptr<MysqlConn> getMysqlConn(); // 从数据库连接池获取连接 - ConnectionPool(const ConnectionPool& other) = delete; - ConnectionPool& operator = (const ConnectionPool & other ) = delete; - - ~ConnectionPool(); + ConnectionPool(const ConnectionPool& other) = delete; + ConnectionPool& operator=(const ConnectionPool& other) = delete; - void description(); + ~ConnectionPool(); + + void description(); protected: - ConnectionPool( ); // 构造函数 + ConnectionPool(); // 构造函数 private: - bool parseJsonFile(); // 解析配置 + // 不再需要解析配置文件的函数 + // bool parseJsonFile(); // 解析配置 - void produce(); - void recycle(); - void addConnection(); // 增加连接数 + void produce(); + void recycle(); + void addConnection(); // 增加连接数 - std::string m_ip; - std::string m_userName; - std::string m_passwd; - std::string m_db; - unsigned short m_port; + // 写死的数据库连接参数 + string m_ip = "127.0.0.1"; + string m_userName = "root"; + string m_passwd = "123456"; + string m_db = "mayi_kunlun"; + unsigned short m_port = 3306; - int m_max_conn; - int m_min_conn; + int m_max_conn; + int m_min_conn; - int m_timeout; // 连接超时时间 - int max_del_time; // 最大删除时间( 连接空闲时间超过这个,就给当前连接关闭 ) - std::queue<MysqlConn*>m_connkQueue ; // 连接队列 - std::mutex m_mutex; // 互斥锁 - std::condition_variable m_cond; // 条件变量 + int m_timeout; // 连接超时时间 + int max_del_time; // 最大删除时间( 连接空闲时间超过这个,就给当前连接关闭 ) + queue<MysqlConn*> m_connkQueue; // 连接队列 + mutex m_mutex; // 互斥锁 + condition_variable m_cond; // 条件变量 }; - diff --git "a/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.cpp" "b/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.cpp" index 5725af8..071cf5f 100644 --- "a/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.cpp" +++ "b/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.cpp" @@ -1,37 +1,60 @@ #include "stdafx.h" #include "MysqlConn.h" -#include <regex> + // 初始化连接 +// 初始化连接 MysqlConn::MysqlConn() { - mysql_ = mysql_init(mysql_); - // 设置字符集 - if (mysql_) mysql_set_character_set(mysql_, "gbk"); -} - -// 连接数据库 -bool MysqlConn::connect(std::string ip, std::string userName, std::string passwd, std::string db, int port) { - mysql_ = mysql_real_connect(mysql_, ip.c_str(), userName.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0); - if (!mysql_) { - return false; + m_mysql = mysql_init(nullptr); + if (!m_mysql) { + cout << "Failed to initialize MySQL." << endl; + return; } - return true; + // 设置字符集 + if (m_mysql) mysql_set_character_set(m_mysql, "gbk"); + // 使用写死的参数连接数据库 + m_mysql = mysql_real_connect(m_mysql, "127.0.0.1", "root", "123456", "mayi_kunlun", 3306, nullptr, 0); + if (!m_mysql) { + cout << "MysqlConn connect to mysql is failed!" << endl; + // 确保在连接失败时正确清理资源 + mysql_close(m_mysql); + m_mysql = nullptr; + } + // 初始化 row_ 和 res_ + m_row = nullptr; + m_res = nullptr; } +bool MysqlConn::isConnected() { + return m_mysql != nullptr; +} +// 连接数据库 +//bool MysqlConn::connect() { +// string ip = "127.0.0.1"; +// string userName = "root"; +// string passwd = "123456"; +// string db = "mayi_kunlun"; +// int port = 3306; +// m_mysql = mysql_real_connect(mysql_, ip.c_str(), userName.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0); +// if (!m_mysql) { +// return false; +// } +// return true; +//} // 释放资源 MysqlConn::~MysqlConn() { - if (mysql_) { - mysql_close(mysql_); - mysql_ = nullptr; + if (m_mysql) { + mysql_close(m_mysql); + m_mysql = nullptr; } freeRes(); } // 更新数据 -bool MysqlConn::update(std::string sql) { +bool MysqlConn::update(string sql) { // 参数化查询优化后的安全检查 - MYSQL_STMT* stmt = mysql_stmt_init(mysql_); + MYSQL_STMT* stmt = mysql_stmt_init(m_mysql); if (!stmt) { return false; } @@ -53,11 +76,36 @@ return true; } +bool MysqlConn::query(string sql, vector<vector<string>>& result) +{ + freeRes(); + int ret = mysql_query(m_mysql, sql.c_str()); + if (ret != 0) { + fprintf(stderr, "Query failed: %s\n", mysql_error(m_mysql)); + return false; + } + // 获取查询结果 + m_res = mysql_store_result(m_mysql); + if (!m_res) return false; + //将结果集转到二维数组result里面 + //int col_cnt = m_mysql->field_count; + int col_cnt = mysql_field_count(m_mysql); + cout << col_cnt << endl; + while (m_row = mysql_fetch_row(m_res)) { + vector<string> tmp; + for (int i = 0; i < col_cnt; i++) { + tmp.push_back(m_row[i]); + } + result.push_back(tmp); + } + return true; +} + // 查询数据库 -bool MysqlConn::query(std::string sql) { +bool MysqlConn::query(string sql) { freeRes(); // 参数化查询优化后的安全检查 - MYSQL_STMT* stmt = mysql_stmt_init(mysql_); + MYSQL_STMT* stmt = mysql_stmt_init(m_mysql); if (!stmt) { return false; } @@ -75,8 +123,8 @@ mysql_stmt_close(stmt); return false; } - res_ = mysql_stmt_result_metadata(stmt); - if (!res_) { + m_res = mysql_stmt_result_metadata(stmt); + if (!m_row) { mysql_stmt_close(stmt); return false; } @@ -86,59 +134,60 @@ // 得到结果集 bool MysqlConn::getResult() { - if (res_) { - row_ = mysql_fetch_row(res_); - if (row_) return true; + if (m_row) { + m_row = mysql_fetch_row(m_res); + if (m_row) return true; } return false; } // 获取结果集的字段 -std::string MysqlConn::getField(int index) { - int cols = mysql_num_fields(res_); - if (index >= cols || index < 0) return std::string(""); +string MysqlConn::getField(int index) { + int cols = mysql_num_fields(m_res); + if (!m_res || index >= cols || index < 0) return string(""); - char* value = row_[index]; - unsigned long len = mysql_fetch_lengths(res_)[index]; - return std::string(value, len); + char* value = m_row[index]; + // 使用显式类型转换 + unsigned long len = static_cast<unsigned long>(mysql_fetch_lengths(m_res)[index]); + return string(value, len); } // 事务操作 bool MysqlConn::transaction() { - return mysql_autocommit(mysql_, false); + return mysql_autocommit(m_mysql, false); } // 提交事务 bool MysqlConn::commit() { - return mysql_commit(mysql_); + return mysql_commit(m_mysql); } // 事务回滚 bool MysqlConn::rollback() { - return mysql_rollback(mysql_); + return mysql_rollback(m_mysql); } void MysqlConn::refreshActiveTime() { - activeTime_ = std::chrono::steady_clock::now(); + m_activeTime = chrono::steady_clock::now(); } long long MysqlConn::getActiveTime() { // 纳米 - std::chrono::nanoseconds nased = std::chrono::steady_clock::now() - activeTime_; + chrono::nanoseconds nased = chrono::steady_clock::now() - m_activeTime; // 转换成毫米 - std::chrono::microseconds millsed = std::chrono::duration_cast<std::chrono::microseconds>(nased); + chrono::microseconds millsed = chrono::duration_cast<chrono::microseconds>(nased); return millsed.count(); // 多少毫秒 } // 安全校验实现,这里简单使用正则表达式判断是否包含危险字符 -bool MysqlConn::isSqlSafe(const std::string& sql) { - std::regex dangerousPattern(".*(['\";\\-+=]).*"); - return!std::regex_search(sql, dangerousPattern); +bool MysqlConn::isSqlSafe(const string& sql) { + regex dangerousPattern(".*(['\";\\-+=]).*"); + return!regex_search(sql, dangerousPattern); } void MysqlConn::freeRes() { - if (res_) { - mysql_free_result(res_); - res_ = nullptr; + if (m_res) { + mysql_free_result(m_res); + m_res = nullptr; } } \ No newline at end of file diff --git "a/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.h" "b/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.h" index 00c9917..a6506d1 100644 --- "a/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.h" +++ "b/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.h" @@ -2,48 +2,53 @@ #include <string> #include <WinSock2.h> -//#include <mysql.h> #include "MySQL/include/mysql.h" #include <string.h> #include <chrono> - +#include <iostream> +#include <memory> +#include <queue> +#include <mutex> +#include <condition_variable> +#include <regex> #pragma comment(lib,"./MySQL/lib/libmysql.lib") +using namespace std; class MysqlConn { public: // 初始化连接 MysqlConn(); // 连接数据库 - bool connect(std::string ip, std::string userName, std::string passwd, std::string db , int port = 3306); + //bool connect(); // 释放资源 - ~MysqlConn( ); + ~MysqlConn(); // 更新数据库 ( insert update delete ) - bool update(std::string sql); + bool update(string sql); // 查询数据库 - bool query(std::string sql); + bool query(string sql, vector<vector<string>>& result); + bool query(string sql); // 得到结果集 bool getResult(); // 获取结果集的字段 - std::string getField(int index); + string getField(int index); // 事务操作 bool transaction(); // 提交事务 - bool commit( ); + bool commit(); // 事务回滚 bool rollback(); - void refreshActiveTime( ); // 刷新活跃时间 + + void refreshActiveTime(); // 刷新活跃时间 long long getActiveTime(); // 获取当前活跃的时间间隔 // 安全校验接口 - bool isSqlSafe(const std::string& sql); - -private: - + bool isSqlSafe(const string& sql); + bool isConnected(); +protected: void freeRes(); - MYSQL* mysql_ = NULL ; - MYSQL_RES* res_ = NULL; - MYSQL_ROW row_ = nullptr; - std::chrono::steady_clock::time_point activeTime_; + MYSQL* m_mysql; + MYSQL_RES* m_res; + MYSQL_ROW m_row; + chrono::steady_clock::time_point m_activeTime; }; - diff --git "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1106.doc" "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1106.doc" new file mode 100644 index 0000000..6061666 --- /dev/null +++ "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1106.doc" Binary files differ diff --git "a/Server/\351\231\210\346\245\232\344\270\271/log/\346\227\245\345\277\227_\351\231\210\346\245\232\344\270\271_1106.doc" "b/Server/\351\231\210\346\245\232\344\270\271/log/\346\227\245\345\277\227_\351\231\210\346\245\232\344\270\271_1106.doc" new file mode 100644 index 0000000..d11a66b --- /dev/null +++ "b/Server/\351\231\210\346\245\232\344\270\271/log/\346\227\245\345\277\227_\351\231\210\346\245\232\344\270\271_1106.doc" Binary files differ diff --git "a/Server/\351\251\254\346\270\235\346\235\255/log/20241106\346\230\206\344\273\221\346\227\245\346\212\245.doc" "b/Server/\351\251\254\346\270\235\346\235\255/log/20241106\346\230\206\344\273\221\346\227\245\346\212\245.doc" new file mode 100644 index 0000000..38b1180 --- /dev/null +++ "b/Server/\351\251\254\346\270\235\346\235\255/log/20241106\346\230\206\344\273\221\346\227\245\346\212\245.doc" Binary files differ diff --git "a/Server/\351\251\254\346\270\235\346\235\255/log/\346\227\245\345\277\227_\351\251\254\346\270\235\346\235\255_20241106.doc" "b/Server/\351\251\254\346\270\235\346\235\255/log/\346\227\245\345\277\227_\351\251\254\346\270\235\346\235\255_20241106.doc" new file mode 100644 index 0000000..02219c4 --- /dev/null +++ "b/Server/\351\251\254\346\270\235\346\235\255/log/\346\227\245\345\277\227_\351\251\254\346\270\235\346\235\255_20241106.doc" Binary files differ diff --git a/common.h b/common.h index 6d36e1f..bb0a5f2 100644 --- a/common.h +++ b/common.h @@ -50,7 +50,11 @@ //璀︽姤绠$悊 WARNING_REQ, // 璀︽姤璇锋眰 - WARNING_RES, // 璀︽姤鍝嶅簲 + WARNING_RES, // 璀︽姤鍝嶅簲 + DATA_REQ, // 鏁版嵁璇锋眰 + DATA_RES, // 鏁版嵁鍝嶅簲 + THRESHOLD_REQ, //闃堝�艰姹� + THRESHOLD_RES, //闃堝�煎搷搴� //鐢熶骇璁″垝绠$悊 @@ -321,7 +325,7 @@ struct MDReq//淇敼璇锋眰 { Head head; - + DevicesInfo info; MDReq() { head.type = MD_REQ; head.len = sizeof(MDReq); @@ -351,6 +355,7 @@ { Head head; int status; + DevicesInfo info[0]; QDRes() { head.type = QD_RES; head.len = sizeof(QDRes); @@ -574,51 +579,99 @@ }; //璀︽姤绠$悊 -// 璀︽姤璇锋眰缁撴瀯浣� +struct warningInfo { + char device_name[32];//璁惧鍚嶇О + char des[32];//璀︽姤鎻忚堪 + char time[32];//璀︽姤鏃堕棿 + float warningdata;//璀︽姤鏁版嵁 + char type[16];//璀︽姤绫诲瀷 + char status[16];//璀︽姤鐘舵�� +}; + +struct dataInfo { + char device_name[32]; + char type[16];//鐜鏁版嵁绫诲瀷 + float data; + char time[32];//涓婁紶鏁版嵁鏃堕棿 +}; + +struct threshInfo { + char device_name[32]; + char type[16];//鐜绫诲瀷 + float min;//鏈�灏忛槇鍊� + float max;//鏈�澶ч槇鍊� + char time[32];//闃堝�间慨鏀规椂闂� +}; + +//璀︽姤璇锋眰缁撴瀯浣� struct WarningReq { - Head head; + Head head; + warningInfo info[0]; - float oxygenWarning; - float carbonWarning; - float tempWarning; - float humidityWarning; + WarningReq() { + head.type = WARNING_REQ; + head.len = sizeof(WarningReq); + } +}; - WarningReq() { - head.type = WARNING_REQ; - head.len = sizeof(WarningReq); - } +//鏁版嵁璇锋眰缁撴瀯浣� +struct DataReq { + Head head; + dataInfo Info[0]; + + DataReq() { + head.type = DATA_REQ; + head.len = sizeof(DataReq); + } +}; + +//闃堝�艰姹傜粨鏋勪綋 +struct ThresholdReq { + Head head; + threshInfo threInfo[0]; + + ThresholdReq() { + head.type = THRESHOLD_REQ; + head.len = sizeof(ThresholdReq); + } }; -struct DataThreshold { - //闃堝�� - float oxygenThreshold; - float carbonThreshold; - float tempThreshold; - float humidityThreshold; -}; - -struct Data { - float oxygen; // 姘ф皵娴撳害 - float carbon; // 涓�姘у寲纰虫祿搴� - float temp; // 娓╁害 - float humidity; // 婀垮害 -}; - -// 璀︽姤鍝嶅簲缁撴瀯浣� +//璀︽姤鍝嶅簲缁撴瀯浣� struct WarningRes { - Head head; - int status; // 鍝嶅簲鐘舵�侊紙姣斿 0 琛ㄧず鎴愬姛锛�1 琛ㄧず澶辫触绛夛級 - const char* message; // 鍝嶅簲娑堟伅鎻忚堪 + Head head; + int status;// 鍝嶅簲鐘舵�� + warningInfo warninginfo[0]; - WarningRes(int stat, const char* msg) { - head.type = WARNING_RES; - head.len = sizeof(WarningRes); - status = stat; - message = msg; - } + WarningRes() { + head.type = WARNING_RES; + head.len = sizeof(WarningRes); + } }; +struct DataRes { + Head head; + int status;// 鍝嶅簲鐘舵�� + dataInfo datainfo[0]; + + DataRes() { + head.type = DATA_RES; + head.len = sizeof(DataRes); + } +}; + +struct ThresholdRes { + Head head; + int status;// 鍝嶅簲鐘舵�� + threshInfo threInfo[0]; + + ThresholdRes() { + head.type = THRESHOLD_RES; + head.len = sizeof(ThresholdRes); + } +}; + + //鐢熶骇璁″垝绠$悊 struct PdplanInfo { diff --git a/kunlun.sql b/kunlun.sql index f3d7846..bb9d576 100644 --- a/kunlun.sql +++ b/kunlun.sql @@ -22,14 +22,17 @@ -- 瀵煎嚭 琛� mayi_kunlun.data_info 缁撴瀯 CREATE TABLE IF NOT EXISTS `data_info` ( `id` int NOT NULL AUTO_INCREMENT, - `device_id` int DEFAULT NULL, - `type` varchar(50) DEFAULT NULL, + `device_name` varchar(50) DEFAULT NULL, + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, `data` float DEFAULT NULL, - `time` datetime DEFAULT NULL, + `time` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='鏁版嵁'; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='鏁版嵁'; --- 姝e湪瀵煎嚭琛� mayi_kunlun.data_info 鐨勬暟鎹細~0 rows (澶х害) +-- 姝e湪瀵煎嚭琛� mayi_kunlun.data_info 鐨勬暟鎹細~2 rows (澶х害) +INSERT INTO `data_info` (`id`, `device_name`, `type`, `data`, `time`) VALUES + (1, '鍒�', '浣嗘槸', 1, '1'), + (2, '鐜�', ' 鐨�', 2, '2'); -- 瀵煎嚭 琛� mayi_kunlun.devices_management_info 缁撴瀯 CREATE TABLE IF NOT EXISTS `devices_management_info` ( @@ -47,13 +50,15 @@ `mark_name` varchar(50) DEFAULT NULL, `mark_time` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; --- 姝e湪瀵煎嚭琛� mayi_kunlun.devices_management_info 鐨勬暟鎹細~3 rows (澶х害) +-- 姝e湪瀵煎嚭琛� mayi_kunlun.devices_management_info 鐨勬暟鎹細~5 rows (澶х害) INSERT INTO `devices_management_info` (`id`, `devices_name`, `devices_type`, `devices_serial_number`, `devices_status`, `area`, `longitude`, `latitude`, `purchasing_time`, `install_time`, `manufacturer`, `mark_name`, `mark_time`) VALUES - (2, '12', '3', '2', '2', '3', 4, 6, '6', '3', '3', NULL, NULL), - (3, '3', '1', '3', '3', '1', 2, 5, '6', '3', '6', NULL, NULL), - (4, '10', '1', '3', '3', '1', 2, 5, '9', '3', '6', NULL, NULL); + (6, '6', '6', '6', '6', '8', 8, 8, '8', '8', '8', NULL, NULL), + (7, '1', '4', '4', '2', '6', 6, 9, '9', '2', '2', NULL, NULL), + (8, '1', '2', '3', '2', '3', 2, 2, '3', '3', '1', NULL, NULL), + (9, '10', '2', '3', '2', '3', 2, 2, '3', '3', '1', NULL, NULL), + (10, '6', '5', '5', '5', '5', 5, 5, '5', '5', '5', NULL, NULL); -- 瀵煎嚭 琛� mayi_kunlun.month_info 缁撴瀯 CREATE TABLE IF NOT EXISTS `month_info` ( @@ -70,7 +75,7 @@ -- 瀵煎嚭 琛� mayi_kunlun.parsed_logs 缁撴瀯 CREATE TABLE IF NOT EXISTS `parsed_logs` ( `id` int NOT NULL AUTO_INCREMENT, - `time_stamp` timestamp NOT NULL DEFAULT (0), + `time_stamp` varchar(50) NOT NULL DEFAULT '0', `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, `level` varchar(16) NOT NULL, `content` varchar(256) NOT NULL, @@ -79,9 +84,12 @@ `problem_line` int NOT NULL, `function_name` varchar(64) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; --- 姝e湪瀵煎嚭琛� mayi_kunlun.parsed_logs 鐨勬暟鎹細~0 rows (澶х害) +-- 姝e湪瀵煎嚭琛� mayi_kunlun.parsed_logs 鐨勬暟鎹細~2 rows (澶х害) +INSERT INTO `parsed_logs` (`id`, `time_stamp`, `device_id`, `level`, `content`, `user_id`, `file_name`, `problem_line`, `function_name`) VALUES + (1, '2024-05-10 10:05:06', '5', '5', '5', '5', '5', 7, '5'), + (2, '2020-05-01 11:05:02', '2', '3', '6', '3', '1', 2, '3'); -- 瀵煎嚭 琛� mayi_kunlun.production_plan 缁撴瀯 CREATE TABLE IF NOT EXISTS `production_plan` ( @@ -117,24 +125,14 @@ -- 姝e湪瀵煎嚭琛� mayi_kunlun.role_info 鐨勬暟鎹細~0 rows (澶х害) --- 瀵煎嚭 琛� mayi_kunlun.student 缁撴瀯 -CREATE TABLE IF NOT EXISTS `student` ( - `id` int NOT NULL AUTO_INCREMENT, - `name` varchar(50) DEFAULT NULL, - `age` int DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; - --- 姝e湪瀵煎嚭琛� mayi_kunlun.student 鐨勬暟鎹細~0 rows (澶х害) - -- 瀵煎嚭 琛� mayi_kunlun.threshold_info 缁撴瀯 CREATE TABLE IF NOT EXISTS `threshold_info` ( `id` int NOT NULL AUTO_INCREMENT, - `device_id` int DEFAULT NULL, - `min_threshold` float DEFAULT NULL, - `max_threshold` float DEFAULT NULL, + `device_name` varchar(50) DEFAULT NULL, `type` varchar(50) DEFAULT NULL, - `time` datetime DEFAULT NULL, + `min` float DEFAULT NULL, + `max` float DEFAULT NULL, + `time` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='闃堝��'; @@ -184,31 +182,30 @@ `version_description` char(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '', `version_creatime` datetime NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; --- 姝e湪瀵煎嚭琛� mayi_kunlun.version_info 鐨勬暟鎹細~2 rows (澶х害) +-- 姝e湪瀵煎嚭琛� mayi_kunlun.version_info 鐨勬暟鎹細~3 rows (澶х害) INSERT INTO `version_info` (`id`, `version_id`, `version_id_old`, `version_description`, `version_creatime`) VALUES (1, '1.3', '1.3', '225', '2024-10-29 15:47:00'), (2, '1.4', '1.4', '226', '2024-10-30 02:47:30'), (3, '1.5', '1.5', '227', '2024-11-01 15:48:18'); --- 瀵煎嚭 琛� mayi_kunlun.warningdata_info 缁撴瀯 -CREATE TABLE IF NOT EXISTS `warningdata_info` ( +-- 瀵煎嚭 琛� mayi_kunlun.warning_info 缁撴瀯 +CREATE TABLE IF NOT EXISTS `warning_info` ( `id` int NOT NULL AUTO_INCREMENT, - `device_id` int NOT NULL, + `device_name` varchar(50) NOT NULL DEFAULT '', + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `des` varchar(50) NOT NULL, - `time` datetime NOT NULL, - `warningdata` float NOT NULL, - `type` varchar(50) NOT NULL, + `warning_data` float NOT NULL, + `time` varchar(50) NOT NULL DEFAULT '', `status` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='璀︽姤鏁版嵁'; --- 姝e湪瀵煎嚭琛� mayi_kunlun.warningdata_info 鐨勬暟鎹細~0 rows (澶х害) +-- 姝e湪瀵煎嚭琛� mayi_kunlun.warning_info 鐨勬暟鎹細~0 rows (澶х害) /*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */; /*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; /*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */; -SELECT id,devices_name,longitude,latitude,devices_status FROM devices_management; \ No newline at end of file diff --git "a/\350\241\250.docx" "b/\350\241\250.docx" index 5a560d6..bc46585 100644 --- "a/\350\241\250.docx" +++ "b/\350\241\250.docx" Binary files differ -- Gitblit v1.8.0