From b40afe63ad506e158185bd110b32bee24932ecff Mon Sep 17 00:00:00 2001
From: lzz <xiguabobo_2020@qq.com>
Date: 星期三, 06 十一月 2024 12:13:18 +0800
Subject: [PATCH] Merge branch 'master' of ssh://115.28.86.8:29418/~admin/昆仑_1025

---
 Client/姜可庚/code/2024kunlun_project_permisson/2024kunlun_project_permisson.pro.user |    2 
 Client/姜可庚/log/姜可庚_1106.doc                                                        |    0 
 Client/姜可庚/code/服务端业务代码/common.h                                                   | 1064 +++++++++++++++++++++++++++
 Client/姜可庚/code/2024kunlun_project_permisson/PmsClientSocket.cpp                   |  100 +-
 表.docx                                                                             |    0 
 Client/姜可庚/code/2024kunlun_project_permisson/PmsClientSocket.h                     |   71 +
 Client/姜可庚/code/2024kunlun_project_permisson/qcomboxdelegate.cpp                   |   16 
 Client/姜可庚/code/服务端业务代码/ServerSocket.cpp                                           |  166 ++++
 Client/姜可庚/code/2024kunlun_project_permisson/permissondialog.cpp                   |   31 
 Client/冀浩昶/log/日志_冀浩昶_1105.doc                                                     |    0 
 Client/姜可庚/code/2024kunlun_project_permisson/pmsqueryresult.h                      |   83 +
 Client/姜可庚/code/服务端业务代码/PermissonManage.h                                          |   16 
 Client/姜可庚/code/2024kunlun_project_permisson/syncdatatodb.cpp                      |   52 
 Client/姜可庚/code/服务端业务代码/PermissonManage.cpp                                        |  152 +++
 Client/姜可庚/code/2024kunlun_project_permisson/pmsparam.h                            |   19 
 Client/姜可庚/document/权限管理需求分析.docx                                                  |    0 
 Client/姜可庚/code/2024kunlun_project_permisson/pmsplusparam.h                        |   62 +
 Client/姜可庚/code/2024kunlun_project_permisson/permissonwindow.h                     |    4 
 Client/姜可庚/code/2024kunlun_project_permisson/permissonwindow.cpp                   |   99 +-
 common.h                                                                           |  142 ++-
 Client/姜可庚/code/2024kunlun_project_permisson/permissondialog.ui                    |  241 ++++-
 Client/姜可庚/code/2024kunlun_project_permisson/qcomboxdelegate.h                     |    6 
 22 files changed, 2,028 insertions(+), 298 deletions(-)

diff --git "a/Client/\345\206\200\346\265\251\346\230\266/log/\346\227\245\345\277\227_\345\206\200\346\265\251\346\230\266_1105.doc" "b/Client/\345\206\200\346\265\251\346\230\266/log/\346\227\245\345\277\227_\345\206\200\346\265\251\346\230\266_1105.doc"
new file mode 100644
index 0000000..eb6f7e2
--- /dev/null
+++ "b/Client/\345\206\200\346\265\251\346\230\266/log/\346\227\245\345\277\227_\345\206\200\346\265\251\346\230\266_1105.doc"
Binary files differ
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/2024kunlun_project_permisson.pro.user" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/2024kunlun_project_permisson.pro.user"
index afa3031..7049102 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/2024kunlun_project_permisson.pro.user"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/2024kunlun_project_permisson.pro.user"
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.5.0, 2024-10-31T16:02:45. -->
+<!-- Written by QtCreator 4.5.0, 2024-11-04T20:34:52. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/PmsClientSocket.cpp" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/PmsClientSocket.cpp"
index 8449947..aca2755 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/PmsClientSocket.cpp"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/PmsClientSocket.cpp"
@@ -5,7 +5,7 @@
 PmsClientSocket::PmsClientSocket(QWidget * parent):QWidget(parent)
 {
     client = new QTcpSocket(this);
-
+    connect(client,SIGNAL(connected()),this,SLOT(connected_Slot()));
     client->connectToHost(targetIp,port);
     if(!client->waitForConnected(3000)){
 
@@ -14,14 +14,12 @@
     }
     connectSuccess = true;
     qDebug()<< "QT缃戠粶閫氫俊鎴愬姛宸茶繛鎺ユ湇鍔″櫒锛�";
-    connect(client,SIGNAL(connected()),this,SLOT(connected_Slot()));
-
 }
 
 void PmsClientSocket::queryAllUserAboutUser()
 {
     if(connectSuccess){
-        QueryPmsRequest req;
+        QueryPmsReq req;
         client->write((char *)&req,req.head.len);
         qDebug() << "鏌ヨ鍏ㄩ儴鏉冮檺璇锋眰鍙戦�佹垚鍔�";
     }
@@ -30,10 +28,10 @@
 void PmsClientSocket::queryPmsByParam(PmsParam param)
 {
     if(connectSuccess){
-        QueryPmsRequest req;
-        strcpy(req.name,param.getName().c_str());
-        strcpy(req.permissonType,param.getPermissonType().c_str());
-        strcpy(req.userNo,param.getUserNo().c_str());
+        QueryPmsReq req;
+        strcpy(req.name,param.getName().toLocal8Bit().data());
+        strcpy(req.permissonType,param.getPermissonType().toLocal8Bit().data());
+        strcpy(req.userNo,param.getUserNo().toLocal8Bit().data());
         client->write((char *)&req,req.head.len);
         qDebug() << "鏉′欢鏌ヨ鏉冮檺璇锋眰鍙戦�佹垚鍔�";
     }
@@ -41,12 +39,23 @@
 
 void PmsClientSocket::updatePmsByParam(PmsPlusParma param)
 {
-    UpdatePmsRequest upReq;
-    upReq.devManage = param.getDevManage();
-    upReq.loggerSearch = param.getLoggerSearch();
-    upReq.mapMark = param.getMapMark();
-    upReq.productPlan = param.getProductPlan();
-    upReq.roleId = param.getRoleId();
+    UpdatePmsReq upReq;
+
+    upReq.id = param.getId();
+    if(param.getPermissonType().isEmpty()){
+        upReq.devManage = param.getDevManage();
+        upReq.loggerSearch = param.getLoggerSearch();
+        upReq.mapMark = param.getMapMark();
+        upReq.productPlan = param.getProductPlan();
+        upReq.warningManage = param.getWarninManage();
+        upReq.versionManage = param.getVersionManage();
+        upReq.admin = param.getAdmin();
+        upReq.queryHistory = param.getQueryHistory();
+
+        memset(upReq.permissonType,0,32);
+    }else {
+        strcpy(upReq.permissonType,param.getPermissonType().toLocal8Bit().data());
+    }
     client->write((char *)&upReq,upReq.head.len);
     qDebug() << "鏇存柊鏉冮檺璇锋眰鍙戦�佹垚鍔�";
 }
@@ -59,40 +68,45 @@
 void PmsClientSocket::readyRead_Slot()
 {
     QByteArray buf = client->readAll();
-    QString recvData = QString::fromLocal8Bit(buf);
-    qDebug()<< "client鏀跺埌鐨勬暟鎹�" << recvData;
-    QueryPmsResponse * res;
-    UpdatePmsResponse * upRes;
-    int type = *(int *)buf.data();
-    if(type == QUERY_PMS_REQ){
-          res = (QueryPmsResponse *)buf.data();
+    qDebug()<< "client鏀跺埌浜嗙殑鏁版嵁";
+    QueryPmsRes * res;
+    UpdatePmsRes * upRes;
+    Head head = *(Head *)buf.data();
+    if(head.type == QUERY_PMS_RES){
+        qDebug()<< "鏌ヨ鍝嶅簲";
+          res = (QueryPmsRes *)buf.data();
           if(res->success){
               vector<PmsQueryResult> vecs;
-              int pmsLen = res->head.len-sizeof(QueryPmsResponse);
-              for(int i =0;i<pmsLen;i+=sizeof(PmsRes)){
-                  PmsRes structRes = *(PmsRes*)(res + sizeof(QueryPmsResponse) + i*sizeof(PmsRes));
-                      PmsQueryResult res;
-                      res.setName(string(structRes.name));
-                      res.setUserNo(string(structRes.userNo));
-                      res.setRoleId(structRes.roleId);
-                      res.setStartDateTime(string(structRes.startDateTime));
-                      res.setEndDateTime(string(structRes.endDateTime));
-                      res.setLoggerSearch(structRes.loggerSearch);
-                      res.setMapMark(structRes.mapMark);
-                      res.setDevManage(structRes.devManage);
-                      res.setProductPlan(structRes.productPlan);
-                      res.setQueryHistory(structRes.queryHistory);
-                      res.setPermissonType(string(structRes.permissonType));
-                      vecs.push_back(res);
+              int pmsLen = (res->head.len-sizeof(QueryPmsRes))/sizeof(PmsRes);
+              for(int i =0;i<pmsLen;i++){
+                  PmsRes structRes = res->pmsList[i];
+                      PmsQueryResult qres;
+                      qres.setName(QString::fromLocal8Bit(structRes.name));
+                      qres.setUserNo(QString::fromLocal8Bit(structRes.userNo));
+                      qres.setId(structRes.id);
+                      qres.setLoginTime(string(structRes.loginTime));
+                      qres.setRegisterTime(string(structRes.registerTime));
+                      qres.setLoggerSearch(structRes.loggerSearch);
+                      qres.setMapMark(structRes.mapMark);
+                      qres.setDevManage(structRes.devManage);
+                      qres.setProductPlan(structRes.productPlan);
+                      qres.setQueryHistory(structRes.queryHistory);
+                      qres.setPermissonType(QString::fromLocal8Bit(structRes.permissonType));
+                      qres.setWarninManage(structRes.warningManage);
+                      qres.setVersionManage(structRes.versionManage);
+                      qres.setAdmin(structRes.admin);
+                      vecs.push_back(qres);
               }
-              if(!vecs.empty()){
-                  emit notifyDateChange(vecs);
-              }
+              emit notifyDateChange(vecs);
+          }else{
+              // 鏌ヨ澶辫触鏁版嵁涓虹┖娓呴櫎琛ㄦ牸鏁版嵁
+              emit notifyDateChange(vector<PmsQueryResult>());
           }
     }
-    if(type == UPDATE_PMS_REQ){
-        res = (QueryPmsResponse *)buf.data();
-        if(res->success){
+    if(head.type == UPDATE_PMS_RES){
+        upRes = (UpdatePmsRes *)buf.data();
+        qDebug()<< "鏇存柊鍝嶅簲";
+        if(upRes->success){
             QString dlgTitle = "鏇存柊缁撴灉";
             QString strInfo = "鏉冮檺淇℃伅鏇存柊鎴愬姛";
             QMessageBox::information(this,dlgTitle,strInfo,
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/PmsClientSocket.h" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/PmsClientSocket.h"
index 0a0e535..3a17733 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/PmsClientSocket.h"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/PmsClientSocket.h"
@@ -16,7 +16,7 @@
 };
 
 enum option{
-    QUERY_PMS_REQ,
+    QUERY_PMS_REQ=6,
     UPDATE_PMS_REQ,
     QUERY_PMS_RES,
     UPDATE_PMS_RES,
@@ -24,73 +24,84 @@
 
 
 // 鎸夊憳宸ョ紪鍙枫�佸悕瀛楁垨鑱屼綅鏌ヨ浜哄憳鏉冮檺淇℃伅璇锋眰
-typedef struct QueryPmsRequest{
+typedef struct QueryPmsReq{
     Head head;
     char userNo[32];
     char name[32];
     char permissonType[32];
-    QueryPmsRequest(){
+    QueryPmsReq(){
         head.type=QUERY_PMS_REQ;
         memset(userNo,0,32);
         memset(permissonType,0,32);
         memset(name,0,32);
-        head.len = sizeof(QueryPmsRequest);
+        head.len = sizeof(QueryPmsReq);
     }
-} QueryPmsRequest;
+} QueryPmsReq;
 
 // 鎸夎鑹瞚d鏇存柊鏉冮檺淇℃伅璇锋眰
-typedef struct UpdatePmsRequest{
+typedef struct UpdatePmsReq{
     Head head;
-    int roleId;
+    // 浜哄憳琛ㄤ富閿甶d
+    int id;
     int queryHistory;
     int loggerSearch;
     int mapMark;
     int devManage;
     int productPlan;
-    UpdatePmsRequest(){
-        head.type=QUERY_PMS_RES;
-        head.len = sizeof(UpdatePmsRequest);
-    }
-} UpdatePmsRequest;
+    int warningManage;
+    int versionManage; //鐗堟湰绠$悊
+    int admin; //绯荤粺绠$悊鍛�
 
-// 鍗曚釜浜哄憳鏉冮檺缁撴瀯浣�
-typedef struct UserAboutPms{
+    char permissonType[32];
+    UpdatePmsReq(){
+        head.type=UPDATE_PMS_REQ;
+        head.len = sizeof(UpdatePmsReq);
+    }
+} UpdatePmsReq;
+
+// 鍗曚釜浜哄憳鍜屾潈闄愯仈鍚堟煡璇㈢粨鏋勪綋
+typedef struct PmsRes{
     int queryHistory;
     int loggerSearch;
     int mapMark;
     int devManage;
     int productPlan;
-    int roleId;
+    int versionManage; //鐗堟湰绠$悊
+    int warningManage;
+    int admin; //绯荤粺绠$悊鍛�
+
+    int id;
+
     char userNo[32];
     char name[32];
-    char permissonType[32];
-    char startDateTime[32];
-    char endDateTime[32];
+
+    char permissonType[32];  // 瑙掕壊绫诲瀷
+
+    char department[32];
+    char loginTime[32];
+    char registerTime[32];
 } PmsRes;
 
 // 鏌ヨ浜哄憳鍜岃鑹蹭俊鎭殑鍝嶅簲缁撴瀯浣�
-typedef struct UserAboutPmsResponse{
+typedef struct QueryPmsRes{
     Head head;
     int success; // 1涓烘垚鍔� ,0涓哄け璐�
-    //PmsRes pmsList[100];
-    char pmsList[0];
-    UserAboutPmsResponse(){
+    PmsRes pmsList[0];
+    QueryPmsRes(){
         head.type=QUERY_PMS_RES;
-//        memset(pmsList,0,sizeof(PmsRes));
-//        head.len = sizeof(UserAboutPmsResponse);
     }
-} QueryPmsResponse;
+} QueryPmsRes;
 
 // 鏉冮檺鏇存柊缁撴灉鍝嶅簲浣�
-typedef struct UpdatePmsResponse{
+typedef struct UpdatePmsRes{
     Head head;
     int success; // 1涓烘垚鍔� ,0涓哄け璐�
-    UpdatePmsResponse(){
+    UpdatePmsRes(){
         head.type = UPDATE_PMS_RES;
-        head.len = sizeof(UpdatePmsResponse);
+        head.len = sizeof(UpdatePmsRes);
     }
 
-} UpdatePmsResponse ;
+} UpdatePmsRes ;
 
 
 class PmsClientSocket : public QWidget
@@ -99,7 +110,7 @@
 
     QTcpSocket *client;
 
-    int port=88888;
+    int port=16888;
     QString targetIp = "127.0.0.1";
 
     bool connectSuccess= false;
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissondialog.cpp" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissondialog.cpp"
index 98d0f81..ab7a404 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissondialog.cpp"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissondialog.cpp"
@@ -34,11 +34,29 @@
     map5[2]=ui->radioButton_15;
 
 
+    map<int,QRadioButton *> warningMap;
+    warningMap[0]=ui->radioButton_16;
+    warningMap[1]=ui->radioButton_17;
+    warningMap[2]=ui->radioButton_18;
+
+    map<int,QRadioButton *> versionMap;
+    versionMap[0]=ui->radioButton_19;
+    versionMap[1]=ui->radioButton_20;
+    versionMap[2]=ui->radioButton_21;
+
+    map<int,QRadioButton *> superManager;
+    // 1涓鸿秴绾х鐞嗗憳
+    superManager[0]=ui->radioButton_23;
+    superManager[1]=ui->radioButton_22;
+
     btnList.push_back(map1);
     btnList.push_back(map2);
     btnList.push_back(map3);
     btnList.push_back(map4);
     btnList.push_back(map5);
+    btnList.push_back(warningMap);
+    btnList.push_back(versionMap);
+    btnList.push_back(superManager);
 
 }
 
@@ -50,7 +68,7 @@
 int PermissonDialog::findBoxCheck(map<int, QRadioButton *> map)
 {
     for(int i =0;i<map.size();i++){
-        if(btnList[0][i]->isChecked()){
+        if(map[i]->isChecked()){
             return i;
         }
     }
@@ -65,6 +83,12 @@
     btnList[2][res.getMapMark()]->setChecked(true);
     btnList[3][res.getDevManage()]->setChecked(true);
     btnList[4][res.getProductPlan()]->setChecked(true);
+
+    btnList[5][res.getWarninManage()]->setChecked(true);
+
+    btnList[6][res.getVersionManage()]->setChecked(true);
+
+    btnList[7][res.getAdmin()]->setChecked(true);
 
     curRes = res;
 
@@ -81,8 +105,11 @@
     param.setMapMark(findBoxCheck(btnList[2]));
     param.setDevManage(findBoxCheck(btnList[3]));
     param.setProductPlan(findBoxCheck(btnList[4]));
+    param.setWarninManage(findBoxCheck(btnList[5]));
+    param.setVersionManage(findBoxCheck(btnList[6]));
+    param.setAdmin(findBoxCheck(btnList[7]));
 
-    param.setRoleId(curRes.getRoleId());
+    param.setId(curRes.getId());
     client->updatePmsByParam(param);
 
 }
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissondialog.ui" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissondialog.ui"
index 2701441..6599cc5 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissondialog.ui"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissondialog.ui"
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>421</width>
-    <height>361</height>
+    <width>560</width>
+    <height>492</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -16,54 +16,18 @@
   <layout class="QGridLayout" name="gridLayout_3">
    <item row="0" column="0">
     <layout class="QGridLayout" name="gridLayout_2">
+     <item row="3" column="0">
+      <widget class="QDialogButtonBox" name="buttonBox">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+       </property>
+      </widget>
+     </item>
      <item row="0" column="0">
       <layout class="QGridLayout" name="gridLayout">
-       <item row="0" column="0">
-        <widget class="QGroupBox" name="groupBox">
-         <property name="title">
-          <string>鍘嗘椂鏌ヨ</string>
-         </property>
-         <widget class="QRadioButton" name="radioButton">
-          <property name="geometry">
-           <rect>
-            <x>20</x>
-            <y>20</y>
-            <width>115</width>
-            <height>19</height>
-           </rect>
-          </property>
-          <property name="text">
-           <string>鏃犳潈闄�</string>
-          </property>
-         </widget>
-         <widget class="QRadioButton" name="radioButton_2">
-          <property name="geometry">
-           <rect>
-            <x>150</x>
-            <y>20</y>
-            <width>115</width>
-            <height>19</height>
-           </rect>
-          </property>
-          <property name="text">
-           <string>鍙煡鐪�</string>
-          </property>
-         </widget>
-         <widget class="QRadioButton" name="radioButton_3">
-          <property name="geometry">
-           <rect>
-            <x>280</x>
-            <y>20</y>
-            <width>115</width>
-            <height>19</height>
-           </rect>
-          </property>
-          <property name="text">
-           <string>鍙慨鏀�</string>
-          </property>
-         </widget>
-        </widget>
-       </item>
        <item row="1" column="0">
         <widget class="QGroupBox" name="groupBox_2">
          <property name="title">
@@ -96,6 +60,52 @@
           </property>
          </widget>
          <widget class="QRadioButton" name="radioButton_6">
+          <property name="geometry">
+           <rect>
+            <x>280</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鍙慨鏀�</string>
+          </property>
+         </widget>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QGroupBox" name="groupBox">
+         <property name="title">
+          <string>鍘嗘椂鏌ヨ</string>
+         </property>
+         <widget class="QRadioButton" name="radioButton">
+          <property name="geometry">
+           <rect>
+            <x>20</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鏃犳潈闄�</string>
+          </property>
+         </widget>
+         <widget class="QRadioButton" name="radioButton_2">
+          <property name="geometry">
+           <rect>
+            <x>150</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鍙煡鐪�</string>
+          </property>
+         </widget>
+         <widget class="QRadioButton" name="radioButton_3">
           <property name="geometry">
            <rect>
             <x>280</x>
@@ -248,17 +258,132 @@
          </widget>
         </widget>
        </item>
+       <item row="5" column="0">
+        <widget class="QGroupBox" name="groupBox_6">
+         <property name="title">
+          <string>璀︽姤绠$悊</string>
+         </property>
+         <widget class="QRadioButton" name="radioButton_16">
+          <property name="geometry">
+           <rect>
+            <x>20</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鏃犳潈闄�</string>
+          </property>
+         </widget>
+         <widget class="QRadioButton" name="radioButton_17">
+          <property name="geometry">
+           <rect>
+            <x>150</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鍙煡鐪�</string>
+          </property>
+         </widget>
+         <widget class="QRadioButton" name="radioButton_18">
+          <property name="geometry">
+           <rect>
+            <x>280</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鍙慨鏀�</string>
+          </property>
+         </widget>
+        </widget>
+       </item>
+       <item row="6" column="0">
+        <widget class="QGroupBox" name="groupBox_7">
+         <property name="title">
+          <string>鐗堟湰绠$悊</string>
+         </property>
+         <widget class="QRadioButton" name="radioButton_19">
+          <property name="geometry">
+           <rect>
+            <x>20</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鏃犳潈闄�</string>
+          </property>
+         </widget>
+         <widget class="QRadioButton" name="radioButton_20">
+          <property name="geometry">
+           <rect>
+            <x>150</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鍙煡鐪�</string>
+          </property>
+         </widget>
+         <widget class="QRadioButton" name="radioButton_21">
+          <property name="geometry">
+           <rect>
+            <x>280</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鍙慨鏀�</string>
+          </property>
+         </widget>
+        </widget>
+       </item>
+       <item row="7" column="0">
+        <widget class="QGroupBox" name="groupBox_8">
+         <property name="title">
+          <string>瓒呯骇绠$悊鍛�</string>
+         </property>
+         <widget class="QRadioButton" name="radioButton_22">
+          <property name="geometry">
+           <rect>
+            <x>20</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鏄�</string>
+          </property>
+         </widget>
+         <widget class="QRadioButton" name="radioButton_23">
+          <property name="geometry">
+           <rect>
+            <x>150</x>
+            <y>20</y>
+            <width>115</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>鍚�</string>
+          </property>
+         </widget>
+        </widget>
+       </item>
       </layout>
-     </item>
-     <item row="1" column="0">
-      <widget class="QDialogButtonBox" name="buttonBox">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="standardButtons">
-        <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-       </property>
-      </widget>
      </item>
     </layout>
    </item>
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissonwindow.cpp" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissonwindow.cpp"
index 71580ef..212aa8a 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissonwindow.cpp"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissonwindow.cpp"
@@ -11,46 +11,20 @@
     ui(new Ui::PermissonWindow)
 {
     ui->setupUi(this);
-    clientSocket = new PmsClientSocket(this);
-
-    dia = new PermissonDialog(this,clientSocket);
-
-
-
-    connect(this,SIGNAL(sendUserNo(PmsQueryResult)),dia,SLOT(recvUserNo(PmsQueryResult)));
-    connect(clientSocket,SIGNAL(notifyDateChange(vector<PmsQueryResult>)),this,SLOT(renderItemData(vector<PmsQueryResult>)));
-
-    roleMap["鏅�氶噰鐭垮憳宸�"] = 1;
-    roleMap["鎶�鏈淮鎶や汉鍛�"] = 2;
-    roleMap["绯荤粺绠$悊鍛�"] = 3;
-    roleMap["瀹夊叏绠$悊浜哄憳"] = 4;
-
     this->setWindowTitle("鏉冮檺绠$悊");
     vector<QString> lableList;
     lableList.push_back("鍛樺伐缂栧彿");
     lableList.push_back("濮撳悕");
-    lableList.push_back("褰撳ぉ宸ヤ綔鏃堕棿");
-    lableList.push_back("褰撳ぉ缁撴潫鏃堕棿");
+    lableList.push_back("閮ㄩ棬");
+    lableList.push_back("鐧诲綍鏃堕棿");
+    lableList.push_back("娉ㄥ唽鏃堕棿");
+
     lableList.push_back("鑱屼綅");
+    clientSocket = new PmsClientSocket(this);
 
-
+    dia = new PermissonDialog(this,clientSocket);
 
     m_model = new QStandardItemModel(globalPms.size(),lableList.size(),this);
-
-    ui->tableView->setModel(m_model);
-
-    for(int i=0;i<m_model->rowCount();i++){
-        PmsQueryResult curRes = globalPms[i];
-        m_model->setItem(i,0,new QStandardItem(QString::fromStdString(curRes.getUserNo())));
-        m_model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit(curRes.getName().c_str())));
-        m_model->setItem(i,2,new QStandardItem(QString::fromStdString(curRes.getStartDateTime())));
-        m_model->setItem(i,3,new QStandardItem(QString::fromStdString(curRes.getEndDateTime())));
-        m_model->setItem(i,4,new QStandardItem(QString::fromLocal8Bit(curRes.getPermissonType().c_str())));
-
-    }
-
-    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
-    ui->tableView->verticalHeader()->hide();
 
 
     QStringList lable;
@@ -60,11 +34,22 @@
 
     m_model->setHorizontalHeaderLabels(lable);
 
+    ui->tableView->setModel(m_model);
+    ui->tableView->verticalHeader()->hide();
+
+    connect(this,SIGNAL(sendUserNo(PmsQueryResult)),dia,SLOT(recvUserNo(PmsQueryResult)));
+    connect(clientSocket,SIGNAL(notifyDateChange(vector<PmsQueryResult>)),this,SLOT(renderItemData(vector<PmsQueryResult>)));
+    connect(m_model,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(listenItemChange(QStandardItem*)));
+
+
+    // 鍙戜竴娆℃煡璇㈠叏閮ㄦ暟鎹姹�
+    clientSocket->queryAllUserAboutUser();
+
+
+
+
     QComBoxDelegate * qc = new QComBoxDelegate(this);
-
-
-
-    ui->tableView->setItemDelegateForColumn(4,qc);
+    ui->tableView->setItemDelegateForColumn(5,qc);
 
 
     m = new QMenu(this);
@@ -82,17 +67,13 @@
     connect(ac1,&QAction::triggered,[=]{
          int row = ui->tableView->currentIndex().row();
          qDebug() << "鏇存柊褰撳墠鍛樺伐淇℃伅"
-                  <<  QString::fromStdString( globalPms[row].getUserNo());
+                  << globalPms[row].getUserNo();
          // 鍙戦�佸憳宸ョ紪鍙蜂俊鎭�
          emit sendUserNo(globalPms[row]);
 
          dia->setModal(true);
          dia->show();
     });
-
-
-    connect(m_model,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(listenItemChange(QStandardItem*)));
-
 
 }
 
@@ -123,44 +104,50 @@
 
 void PermissonWindow::on_pushButton_clicked()
 {
-    qDebug() << "鍙戦�佹煡璇㈣姹�";
+
     PmsParam pm;
-    pm.setName(ui->lineEdit->text().toStdString());
-    pm.setPermissonType(ui->lineEdit_2->text().toStdString());
-    pm.setUserNo(ui->lineEdit_3->text().toStdString());
+    pm.setName(ui->lineEdit->text());
+    pm.setPermissonType(ui->lineEdit_2->text());
+    pm.setUserNo(ui->lineEdit_3->text());
 
     clientSocket->queryPmsByParam(pm);
-    qDebug() << "鏌ヨ涓�";
 
 }
 
 void PermissonWindow::listenItemChange(QStandardItem *item)
 {
-    QString localText = item->text();
-    if(roleMap.count(localText.toStdString())){
-        qDebug() << "鍙戣捣鑱屼綅鏇存柊璇锋眰";
+    if(item->column()==m_model->columnCount()-1){
+        QString localText = item->text();
+
         PmsPlusParma pm;
-        pm.setPermissonType(localText.toStdString());
-        pm.setRoleId(roleMap[localText.toStdString()]);
+        pm.setPermissonType(localText);
+
+        int id = globalPms[item->row()].getId();
+        pm.setId(id);
         clientSocket->updatePmsByParam(pm);
     }
 }
 
 void PermissonWindow::renderItemData(vector<PmsQueryResult> res)
 {
+
     globalPms = res;
     m_model->setRowCount(globalPms.size());
 
     for(int i=0;i<m_model->rowCount();i++){
         PmsQueryResult curRes = globalPms[i];
-        m_model->setItem(i,0,new QStandardItem(QString::fromStdString(curRes.getUserNo())));
-        m_model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit(curRes.getName().c_str())));
-        m_model->setItem(i,2,new QStandardItem(QString::fromStdString(curRes.getStartDateTime())));
-        m_model->setItem(i,3,new QStandardItem(QString::fromStdString(curRes.getEndDateTime())));
-        m_model->setItem(i,4,new QStandardItem(QString::fromLocal8Bit(curRes.getPermissonType().c_str())));
+        m_model->setItem(i,0,new QStandardItem(curRes.getUserNo()));
+        m_model->setItem(i,1,new QStandardItem(curRes.getName()));
+        m_model->setItem(i,2,new QStandardItem(QString::fromStdString(curRes.getDepartment())));
+        m_model->setItem(i,3,new QStandardItem(QString::fromStdString(curRes.getLoginTime())));
+        m_model->setItem(i,4,new QStandardItem(QString::fromStdString(curRes.getRegisterTime())));
 
+        m_model->blockSignals(true);
+        m_model->setItem(i,5,new QStandardItem(curRes.getPermissonType()));
+        m_model->blockSignals(false);
     }
     ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
+
     qDebug() << "鏌ヨ鍒扮殑鏁伴噺 " << globalPms.size();
 }
 
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissonwindow.h" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissonwindow.h"
index a9f57be..d0e8f30 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissonwindow.h"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/permissonwindow.h"
@@ -46,11 +46,13 @@
     QMenu * m;
     PermissonDialog *dia;
     SyncDataToDB * dbInfo;
-    map<string,int> roleMap;
+
 
     vector<PmsQueryResult> globalPms;
     PmsClientSocket * clientSocket;
 
+    bool isRenderData;
+
 
 };
 
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsparam.h" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsparam.h"
index 0683706..a3ac943 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsparam.h"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsparam.h"
@@ -1,32 +1,33 @@
 锘�#ifndef PMSPARAM_H
 #define PMSPARAM_H
+#include <QString>
 #include <string>
 using namespace std;
 
 
 class PmsParam {
 protected:
-    string userNo;
-    string name;
-    string permissonType;
+    QString userNo;
+    QString name;
+    QString permissonType;
 public:
-    void setUserNo(string id){
+    void setUserNo(QString id){
         this->userNo = id;
     }
-    void setName(string name){
+    void setName(QString name){
         this->name = name;
     }
-    void setPermissonType(string permissonType){
+    void setPermissonType(QString permissonType){
         this->permissonType = permissonType;
     }
 
-    string getUserNo(){
+    QString getUserNo(){
         return userNo;
     }
-    string getName(){
+    QString getName(){
         return name;
     }
-    string getPermissonType(){
+    QString getPermissonType(){
         return permissonType;
     }
 
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsplusparam.h" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsplusparam.h"
index 23885dd..789bdc7 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsplusparam.h"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsplusparam.h"
@@ -1,15 +1,19 @@
-#ifndef PMSPLUSPARAM_H
+锘�#ifndef PMSPLUSPARAM_H
 #define PMSPLUSPARAM_H
 #include "pmsparam.h"
 
 class PmsPlusParma : public PmsParam{
-    int roleId;
+    int id;
 
     int queryHistory;
     int loggerSearch;
     int mapMark;
     int devManage;
     int productPlan;
+
+    int warninManage;
+    int versionManage; //鐗堟湰绠$悊
+    int admin; //绯荤粺绠$悊鍛�
 public:
     void setQueryHistory(int val){
         this->queryHistory = val;
@@ -27,8 +31,8 @@
         this->productPlan = val;
     }
 
-    void setRoleId(int val){
-        this->roleId = val;
+    void setId(int val){
+        this->id = val;
     }
 
     int getQueryHistory(){
@@ -47,19 +51,51 @@
         return productPlan;
     }
 
-    int getRoleId(){
-        return roleId;
+    int getId(){
+        return id;
+    }
+
+    PmsPlusParma(){
+        id = 0;
+        queryHistory = 0;
+        loggerSearch = 0;
+        mapMark = 0;
+        devManage = 0;
+        productPlan = 0;
     }
 
 
-    PmsPlusParma(){
-        roleId = -1;
-        queryHistory = -1;
-        loggerSearch = -1;
-        mapMark = -1;
-        devManage = -1;
-        productPlan = -1;
+    int getVersionManage() const
+    {
+        return versionManage;
+    }
+
+    void setVersionManage(int value)
+    {
+        versionManage = value;
+    }
+
+    int getAdmin() const
+    {
+    return admin;
+    }
+
+    void setAdmin(int value)
+    {
+    admin = value;
+    }
+
+    int getWarninManage() const
+    {
+        return warninManage;
+    }
+
+    void setWarninManage(int value)
+    {
+        warninManage = value;
     }
 };
 
 #endif // PMSPLUSPARAM_H
+
+
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsqueryresult.h" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsqueryresult.h"
index e35b54f..602a8ed 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsqueryresult.h"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/pmsqueryresult.h"
@@ -1,10 +1,8 @@
-#ifndef PMSQUERYRESULT_H
+锘�#ifndef PMSQUERYRESULT_H
 #define PMSQUERYRESULT_H
 
 #include "pmsparam.h"
 class PmsQueryResult : public PmsParam{
-    string startDateTime;
-    string endDateTime;
 
     int queryHistory;
     int loggerSearch;
@@ -12,13 +10,22 @@
     int devManage;
     int productPlan;
 
+    int warninManage;
+    int versionManage; //鐗堟湰绠$悊
+    int admin; //绯荤粺绠$悊鍛�
+
+    int id;
     int roleId;
+
+    string department;
+    string loginTime;
+    string registerTime;
 public:
-    void setStartDateTime(string time){
-        this->startDateTime = time;
+    void setLoginTime(string time){
+        this->loginTime = time;
     }
-    void setEndDateTime(string time){
-        this->endDateTime = time;
+    void setRegisterTime(string time){
+        this->registerTime = time;
     }
 
     void setQueryHistory(int val){
@@ -36,16 +43,16 @@
     void setProductPlan(int val){
         this->productPlan = val;
     }
-    void setRoleId(int val){
-        this->roleId = val;
+    void setId(int val){
+        this->id = val;
     }
 
 
-    string getStartDateTime(){
-        return startDateTime;
+    string getLoginTime(){
+        return loginTime;
     }
-    string getEndDateTime(){
-        return endDateTime;
+    string getRegisterTime(){
+        return registerTime;
     }
     int getQueryHistory(){
         return queryHistory;
@@ -62,12 +69,58 @@
     int getProductPlan(){
         return productPlan;
     }
-    int getRoleId(){
-        return roleId;
+    int getId(){
+        return id;
     }
 
+
+
+
+    int getVersionManage() const
+    {
+        return versionManage;
+    }
+
+    void setVersionManage(int value)
+    {
+        versionManage = value;
+    }
+
+    int getAdmin() const
+    {
+    return admin;
+    }
+
+    void setAdmin(int value)
+    {
+    admin = value;
+    }
+
+    int getWarninManage() const
+    {
+        return warninManage;
+    }
+
+    void setWarninManage(int value)
+    {
+        warninManage = value;
+    }
+
+
+
+    string getDepartment() const
+    {
+        return department;
+    }
+
+    void setDepartment(const string &value)
+    {
+        department = value;
+    }
 
 };
 
 
 #endif // PMSQUERYRESULT_H
+
+
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/qcomboxdelegate.cpp" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/qcomboxdelegate.cpp"
index 8eab6b3..01d0fde 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/qcomboxdelegate.cpp"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/qcomboxdelegate.cpp"
@@ -16,7 +16,21 @@
 {
     QComboBox * box = new QComboBox(parent);
     QStringList text;
-    text << "鏅�氶噰鐭垮憳宸�" << "鎶�鏈淮鎶や汉鍛�" << "绯荤粺绠$悊鍛�"<< "瀹夊叏绠$悊浜哄憳";
+
+    QString curText = qvariant_cast<QString>(index.data());
+
+    vector<QString> vecq;
+    vecq.push_back("鎶�鏈淮鎶や汉鍛�");
+    vecq.push_back("绯荤粺绠$悊鍛�");
+    vecq.push_back("瀹夊叏绠$悊浜哄憳");
+    vecq.push_back("鏅�氶噰鐭垮憳宸�");
+
+    text << curText;
+    for(QString role : vecq){
+        if(curText!=role){
+            text << role;
+        }
+    }
     box->addItems(text);
 
     return box;
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/qcomboxdelegate.h" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/qcomboxdelegate.h"
index d9e575e..5e31c91 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/qcomboxdelegate.h"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/qcomboxdelegate.h"
@@ -1,12 +1,14 @@
-#ifndef QCOMBOXDELEGATE_H
+锘�#ifndef QCOMBOXDELEGATE_H
 #define QCOMBOXDELEGATE_H
 
 #include <QItemDelegate>
 #include <QComboBox>
-#pragma execution_character_set("utf-8")
+#include <vector>
+using namespace std;
 
 class QComBoxDelegate : public QItemDelegate
 {
+
 public:
     QComBoxDelegate();
     QComBoxDelegate(QObject * p=0);
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/syncdatatodb.cpp" "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/syncdatatodb.cpp"
index 96ca144..47d836c 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/syncdatatodb.cpp"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/2024kunlun_project_permisson/syncdatatodb.cpp"
@@ -23,17 +23,17 @@
 {
     string sql = "SELECT * FROM user_info AS u, employee_permisson AS e WHERE u.role_id=e.id";
 
-    if(!param.getUserNo().empty()){
-        sql += " and u.user_no='" + param.getUserNo() + "'";
-    }
+//    if(!param.getUserNo().empty()){
+//        sql += " and u.user_no='" + param.getUserNo() + "'";
+//    }
 
-    if(!param.getName().empty()){
-        sql += " and u.name='" + param.getName()+ "'";
-    }
+//    if(!param.getName().empty()){
+//        sql += " and u.name='" + param.getName()+ "'";
+//    }
 
-    if(!param.getPermissonType().empty()){
-        sql += " and e.permission_type='" + param.getPermissonType()+ "'";
-    }
+//    if(!param.getPermissonType().empty()){
+//        sql += " and e.permission_type='" + param.getPermissonType()+ "'";
+//    }
 
     qDebug() << "sql璇彞" << QString::fromStdString(sql);
 
@@ -56,16 +56,16 @@
     string sql = "update employee_permisson";
 
     // 鍙洿鏀硅亴浣�
-    if(!param.getPermissonType().empty()){
-        sql.append(" set permission_type='" + param.getPermissonType())+ "'";
-    }else{
-        sql.append(" set query_history=") + to_string(param.getQueryHistory());
-        sql.append(",logger_search=") + to_string(param.getLoggerSearch());
-        sql.append(",map_mark=") + to_string(param.getMapMark());
-        sql.append(",dev_manage=") + to_string(param.getDevManage());
-        sql.append(",product_plan=") + to_string(param.getProductPlan());
-    }
-    sql.append(" where e.id=" + param.getRoleId());
+//    if(!param.getPermissonType().empty()){
+//        sql.append(" set permission_type='" + param.getPermissonType())+ "'";
+//    }else{
+//        sql.append(" set query_history=") + to_string(param.getQueryHistory());
+//        sql.append(",logger_search=") + to_string(param.getLoggerSearch());
+//        sql.append(",map_mark=") + to_string(param.getMapMark());
+//        sql.append(",dev_manage=") + to_string(param.getDevManage());
+//        sql.append(",product_plan=") + to_string(param.getProductPlan());
+//    }
+    //sql.append(" where e.id=" + param.getRoleId());
 
     mysql_real_query(&mysql, sql.c_str(), sql.size());
     mysql_store_result(&mysql);
@@ -76,13 +76,13 @@
 
 void SyncDataToDB::setPmsResult(PmsQueryResult &res, char **row)
 {
-    res.setName(string(row[1]));
-    res.setUserNo(string(row[5]));
-    res.setStartDateTime(string(row[2]));
-    res.setEndDateTime(string(row[3]));
-    res.setRoleId(stoi(string(row[4])));
+//    res.setName(string(row[1]));
+//    res.setUserNo(string(row[5]));
+//    res.setStartDateTime(string(row[2]));
+//    res.setEndDateTime(string(row[3]));
+//    res.setRoleId(stoi(string(row[4])));
 
-    res.setPermissonType(string(row[8]));
+   // res.setPermissonType(string(row[8]));
     res.setQueryHistory(stoi(string(row[9])));
     res.setLoggerSearch(stoi(string(row[10])));
     res.setMapMark(stoi(string(row[11])));
@@ -90,5 +90,5 @@
     res.setProductPlan(stoi(string(row[13])));
 
 
-    qDebug() << QString::fromStdString(res.getUserNo());
+    //qDebug() << QString::fromStdString(res.getUserNo());
 }
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/PermissonManage.cpp" "b/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/PermissonManage.cpp"
new file mode 100644
index 0000000..45d78a0
--- /dev/null
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/PermissonManage.cpp"
@@ -0,0 +1,152 @@
+#include "stdafx.h"
+#include "PermissonManage.h"
+#include <iostream>
+#include "MysqlConn.h"
+#include <string.h>
+#include <vector>
+using namespace std;
+
+
+PermissonManage::PermissonManage()
+{
+}
+
+
+PermissonManage::~PermissonManage()
+{
+}
+
+bool PermissonManage::queryPmsByParam(SOCKET client, QueryPmsReq * req)
+{
+	// 组装SQL语句
+	string sql = "SELECT * FROM user_info AS u, role_info AS e WHERE u.role_id=e.id";
+
+	if (*(req->userNo)) {
+		sql += " and u.user_no='" + string(req->userNo) + "'";
+	}
+
+	if (*(req->name)) {
+		sql += " and u.name='" + string(req->name) + "'";
+	}
+
+	if (*(req->permissonType)) {
+		sql += " and e.permission_type='" + string(req->permissonType) + "'";
+	}
+
+	cout << "sql:" << sql << endl;
+
+	// 调用MySQL API 执行SQL语句,根据返回值组装响应结构体
+	MysqlConn conn;
+	conn.connect("127.0.0.1", "root", "root", "mydb");
+
+
+	bool ret = conn.query (sql);
+
+	vector<PmsRes> pmsTempList;
+	while (conn.getResult()){
+		PmsRes pmsRes;
+		pmsRes.admin = stoi(conn.getField(22));
+		strcpy_s(pmsRes.department, conn.getField(1).c_str());
+
+		pmsRes.devManage = stoi(conn.getField(18));
+		pmsRes.id = stoi(conn.getField(0));
+		pmsRes.loggerSearch = stoi(conn.getField(16));
+		strcpy_s(pmsRes.loginTime, conn.getField(11).c_str());
+		pmsRes.mapMark = stoi(conn.getField(17));
+
+		strcpy_s(pmsRes.name, conn.getField(2).c_str());
+		strcpy_s(pmsRes.permissonType, conn.getField(14).c_str());
+		pmsRes.productPlan = stoi(conn.getField(19));
+		pmsRes.queryHistory = stoi(conn.getField(15));
+		strcpy_s(pmsRes.registerTime, conn.getField(12).c_str());
+		strcpy_s(pmsRes.userNo, conn.getField(4).c_str());
+		pmsRes.versionManage = stoi(conn.getField(21));
+		pmsRes.warningManage = stoi(conn.getField(20));
+		pmsTempList.push_back(pmsRes);
+
+
+		cout << "获取结果集2" <<  conn.getField(0) << conn.getField(1) << conn.getField(2);
+	}
+	
+	QueryPmsRes  *res;
+	int len = sizeof(QueryPmsRes) + pmsTempList.size() * sizeof(PmsRes);
+	res = (QueryPmsRes *)malloc(len);
+
+	
+	PmsRes * pmArr = new PmsRes[pmsTempList.size()];
+	for (int i = 0; i < pmsTempList.size();i++) {
+		pmArr[i] = pmsTempList[i];	
+	}
+
+	memcpy(res->pmsList,pmArr, pmsTempList.size() * sizeof(PmsRes));
+
+
+	res->head.type = QUERY_PMS_RES;
+	res->head.len = len;
+
+	if (ret > 0) {
+		res->success = 1; // 成功
+	}
+	else {
+		res->success = 0; // 失败
+	}
+	cout <<  "id="<< res->pmsList[0].id << endl;
+	// 发送结构体给客户端
+	cout << __FUNCTION__ << send(client, (char*)res, res->head.len, 0) << endl;
+
+	delete[] pmArr;
+	delete res;
+	return true;
+}
+
+bool PermissonManage::updatePms(SOCKET client, UpdatePmsReq * req)
+{
+	// 调用MySQL API 执行SQL语句,根据返回值组装响应结构体
+	MysqlConn conn;
+	conn.connect("127.0.0.1", "root", "root", "mydb");
+
+	char sql[512] = { 0 };
+
+	UpdatePmsRes res;
+	if (*(req->permissonType)) {
+
+		// 先用角色类型查一遍角色表id
+		sprintf(sql, "select id from role_info where permission_type='%s'", req->permissonType);
+		bool ret = conn.query(sql);
+		bool retRes = conn.getResult();
+		if (!ret || !retRes) {
+			res.success = 0;
+		}
+		else {
+			int roleId = stoi(conn.getField(0));
+			memset(sql, 0, 512);
+			sprintf(sql, "update user_info set role_id=%d where id=%d", roleId, req->id);
+			ret = conn.update(sql);
+			res.success = ret;
+		}
+	}
+	else {
+		// 先用id查一遍角色id
+		sprintf(sql,"select role_id from user_info where id=%d", req->id);
+
+		bool ret = conn.query(sql);
+		bool retRes = conn.getResult();
+		if (!ret || !retRes) {
+			res.success = 0;
+		}else {
+			int roleId = stoi(conn.getField(0));
+			memset(sql, 0, 512);
+			sprintf(sql, "update  role_info set query_history=%d,logger_search=%d,map_mark=%d,dev_manage=%d"
+							",product_plan=%d,warning_manage=%d,version_manage=%d,role_info.admin=%d where id=%d",req->queryHistory,req->loggerSearch,
+								req->mapMark,req->devManage,req->productPlan,req->warningManage,req->versionManage,req->admin,roleId);
+
+			cout << "更新权限sql:" << sql << endl;
+			ret = conn.update(sql);
+			res.success = ret;
+		}
+	}
+	// 发送结构体给客户端
+	cout << __FUNCTION__ << send(client, (char*)&res, res.head.len, 0) << endl;
+
+	return true;
+}
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/PermissonManage.h" "b/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/PermissonManage.h"
new file mode 100644
index 0000000..2c9335d
--- /dev/null
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/PermissonManage.h"
@@ -0,0 +1,16 @@
+#pragma once
+
+#include "common.h"
+#include <WinSock2.h>
+#include <string>
+using namespace std;
+
+class PermissonManage
+{
+public:
+	PermissonManage();
+	~PermissonManage();
+	bool queryPmsByParam(SOCKET client, QueryPmsReq * req);
+	bool updatePms(SOCKET client, UpdatePmsReq * req);
+};
+
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/ServerSocket.cpp" "b/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/ServerSocket.cpp"
new file mode 100644
index 0000000..9b7c45a
--- /dev/null
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/ServerSocket.cpp"
@@ -0,0 +1,166 @@
+#include "stdafx.h"
+#include "ServerSocket.h"
+#include "common.h"
+#include "DeviceManage.h"
+#include "PermissonManage.h"
+
+#define HEART_CHECK_TIMES 60  // 心跳检测的次数
+
+struct TestData
+{
+	int type;
+	int len;
+	char data[32];
+};
+
+ServerSocket::ServerSocket(bool openHeartCheck):m_openHeartCheck(openHeartCheck)
+{
+	if (initSocket()) {
+		cout << "init socket ok" << endl;
+	}
+	else {
+		cout << "init socket fail" << endl;
+	}
+}
+
+
+ServerSocket::~ServerSocket()
+{
+	closesocket(m_server); //  关闭服务端套接字
+	WSACleanup(); // 关闭网络环境
+}
+
+bool ServerSocket::initSocket()
+{
+	WSAData wsa = { 0 };
+	WSAStartup(MAKEWORD(2, 2), &wsa); // 启动网络环境
+	// SOCK_STREAM:TCP协议
+	// SOCK_DGRAM:UDP协议
+	m_server = socket(AF_INET, SOCK_STREAM, 0);
+	SOCKADDR_IN addr;
+	addr.sin_family = AF_INET;
+	addr.sin_port = htons(16888);
+	addr.sin_addr.S_un.S_addr = 0;
+	int ret_bind = ::bind(m_server, (sockaddr*)&addr, sizeof(addr));
+	if (ret_bind) {
+		cout << "bind fail:" << WSAGetLastError() << endl;
+		return false;
+	}
+	int ret_listen = listen(m_server, 5);
+	if (ret_listen) {
+		cout << "listen fail:" << WSAGetLastError() << endl;
+		return false;
+	}
+	// 正常,成功初始化
+	// 启动accept线程
+	thread accept_thread(&ServerSocket::acceptThread, this);
+	accept_thread.detach(); // 剥离线程,防止异常结束
+	// 启动心跳检测线程
+	thread heart_check_thread(&ServerSocket::heartCheckThread, this);
+	heart_check_thread.detach();
+
+	return true;
+}
+
+void ServerSocket::acceptThread()
+{
+	while (true)
+	{
+		SOCKADDR_IN addr;
+		SOCKET client; // 当前连接上的客户端套接字
+		int len = sizeof(addr);
+
+		cout << "wait for conn..." << endl;
+		client = accept(m_server, (sockaddr*)&addr, &len);
+		cout << "conn client:" << client << endl;
+
+		if (client == SOCKET_ERROR) {
+			cout << "socket error:" << WSAGetLastError() << endl;
+			break;
+		}
+		else if (client == 0) {
+			cout << "socket close:" << WSAGetLastError() << endl;
+			break;
+		}
+		// 正常
+			// 建立新的键值对
+		m_clientsMap[client] = HEART_CHECK_TIMES;
+		// 创建长连接的线程
+		thread recv_send_thread(&ServerSocket::recvAndSendThread, this, client);
+		recv_send_thread.detach();
+	}
+}
+void ServerSocket::recvAndSendThread(SOCKET client)
+{
+	while (true) {
+		char buffer[1024] = { 0 };
+		int len_recv = recv(client, buffer, sizeof(buffer), 0);
+		cout << "len_recv:" << len_recv << " client:" << client << endl;
+		if (len_recv <= 0) {
+			cout << "client socket 已关闭或异常结束:" << WSAGetLastError() << endl;
+			break;
+		}
+		// 正常
+			// 重置心跳阈值
+		m_clientsMap[client] = HEART_CHECK_TIMES; 
+		// 解包处理
+		cout << "buffer:" << buffer << endl;
+		
+		int type = *(int*)buffer;
+		if (type == 100) {
+			TestData* td = (TestData*)buffer;
+			cout << "收到结构体:" << td->len << " " << td->data << endl;
+		}
+		else if (type == AD_REQ) {
+			// 添加设备
+			cout << "收到添加设备请求" << endl;
+			ADReq *req = (ADReq*)buffer;
+			cout << "设备名称" << req->devInfo[0].deviceName << endl;
+
+			// 调用 添加设备 业务API
+			DeviceManage devMan;
+			devMan.addDeviceBusiness(client, req);
+		}
+		else if (type == QUERY_PMS_REQ) {
+			cout << "查询权限请求" << endl;
+			QueryPmsReq * req = (QueryPmsReq *)buffer;
+			PermissonManage pmsManage;
+			pmsManage.queryPmsByParam(client, req);
+		
+		}
+		else if (type == UPDATE_PMS_REQ) {
+			cout << "更新权限请求" << endl;
+			UpdatePmsReq * req = (UpdatePmsReq *)buffer;
+			PermissonManage pmsManage;
+			pmsManage.updatePms(client, req);
+
+		}
+
+		// 原封不动的回收到的内容给对应客户端
+		//send(client, buffer, len_recv, 0);
+	}
+	closesocket(client);
+}
+
+void ServerSocket::heartCheckThread()
+{
+	while (m_openHeartCheck)
+	{
+		// 轮询map
+		for (auto iter = m_clientsMap.begin();iter != m_clientsMap.end();) {
+			iter->second--; // 阈值递减
+			cout << "client:" << iter->first << " 阈值:" << iter->second << endl;
+			if (iter->second == 0) {
+				// 连接无效了,关闭连接,再删除
+				cout << "发现无效客户端连接:" << iter->first << endl;
+				closesocket(iter->first);
+				iter = m_clientsMap.erase(iter); // 接收返回值,防止迭代器失效
+			}
+			else {
+				++iter;
+			}
+		}
+		// 间隔5秒
+		Sleep(5 * 1000); // 睡眠5000毫秒,就是5秒
+	}
+}
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/common.h" "b/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/common.h"
new file mode 100644
index 0000000..bc4085c
--- /dev/null
+++ "b/Client/\345\247\234\345\217\257\345\272\232/code/\346\234\215\345\212\241\347\253\257\344\270\232\345\212\241\344\273\243\347\240\201/common.h"
@@ -0,0 +1,1064 @@
+锘�#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);
+	}
+};
+
+//鏉冮檺绠$悊
+// 鎸夊憳宸ョ紪鍙枫�佸悕瀛楁垨鑱屼綅鏌ヨ浜哄憳鏉冮檺淇℃伅璇锋眰
+typedef 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);
+	}
+} QueryPmsReq;
+
+// 鎸夎鑹瞚d鏇存柊鏉冮檺淇℃伅璇锋眰
+typedef struct UpdatePmsReq {
+	Head head;
+	// 浜哄憳琛ㄤ富閿甶d
+	int id;
+	int queryHistory;
+	int loggerSearch;
+	int mapMark;
+	int devManage;
+	int productPlan;
+	int warningManage;
+	int versionManage; //鐗堟湰绠$悊
+	int admin; //绯荤粺绠$悊鍛�
+
+	char permissonType[32];
+	UpdatePmsReq() {
+		head.type = QUERY_PMS_RES;
+		head.len = sizeof(UpdatePmsReq);
+	}
+} UpdatePmsReq;
+
+// 鍗曚釜浜哄憳鍜屾潈闄愯仈鍚堟煡璇㈢粨鏋勪綋
+typedef struct PmsRes {
+	int queryHistory;
+	int loggerSearch;
+	int mapMark;
+	int devManage;
+	int productPlan;
+	int versionManage; //鐗堟湰绠$悊
+	int warningManage;
+	int admin; //绯荤粺绠$悊鍛�
+
+	int id;
+
+	char userNo[32];
+	char name[32];
+
+	char permissonType[32];  // 瑙掕壊绫诲瀷
+
+	char department[32];
+	char loginTime[32];
+	char registerTime[32];
+} PmsRes;
+
+// 鏌ヨ浜哄憳鍜岃鑹蹭俊鎭殑鍝嶅簲缁撴瀯浣�
+typedef struct QueryPmsRes {
+	Head head;
+	int success; // 1涓烘垚鍔� ,0涓哄け璐�
+	PmsRes pmsList[0];
+	QueryPmsRes() {
+		head.type = QUERY_PMS_REQ;
+	}
+} QueryPmsRes;
+
+// 鏉冮檺鏇存柊缁撴灉鍝嶅簲浣�
+struct UpdatePmsRes {
+	Head head;
+	int success; // 1涓烘垚鍔� ,0涓哄け璐�
+	UpdatePmsRes() {
+		head.type = UPDATE_PMS_RES;
+		head.len = sizeof(UpdatePmsRes);
+	}
+
+};
+
+
+
+
+//璁惧绠$悊
+struct DevicesInfo
+{
+	char deviceName[32];//璁惧鍚嶇О
+	char deviceStatus[32];//璁惧鐘舵��
+    char area[32]; // 鍦板尯
+    double longitude;//缁忓害
+    double latitude;//绾害
+    char purchasingTime[15];//璐拱鏃堕棿
+    char installTime[15];//瀹夎鏃堕棿
+	char manufacturer[100];//鍘傚
+    char devicesSerialNumber[32];//璁惧缂栫爜
+	char devicesType[32];//璁惧绫诲瀷
+};
+//娣诲姞璁惧
+struct ADReq//娣诲姞璇锋眰
+{
+	Head head;
+    DevicesInfo devInfo[0];
+
+	ADReq() {
+		head.type = AD_REQ;
+		head.len = sizeof(ADReq);
+	}
+
+};
+
+struct ADRes//娣诲姞鍝嶅簲
+{
+	Head head;
+	int status;
+	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 {
+	char timeStamp[64]; // 鏃堕棿鎴�
+	char deviceId[64]; // 璁惧ID
+	char level[16];    // 鏃ュ織绾у埆
+	char content[256];  // 鏃ュ織鍐呭
+	char userId[64];    // 鐢ㄦ埛ID
+	char fileName[32];   //鏂囦欢鍚�
+	char functionName[32];  //鍑芥暟鍚�
+	int problemLine;    //浜х敓閿欒琛屽彿
+};
+
+// 鏃ュ織鏌ヨ璇锋眰缁撴瀯浣�
+// 鏃ュ織鏌ヨ璇锋眰缁撴瀯浣�
+struct LogQueryReq {
+	Head head;                      // 鏁版嵁澶�
+	char timeStamp[64];             // 鏃堕棿鎴�
+	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 琛ㄧず澶辫触)
+	char errorMessage[256];        // 閿欒淇℃伅锛堝鏋滄湁锛�
+
+	// 鏃犲弬鏋勯�犲嚱鏁�
+	LogQueryRes() {
+		head.type = LOGSEARCH_RES;
+		head.len = sizeof(LogQueryRes);
+	}
+};
+
+
+
+
+#endif // COMMON_H
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/document/\346\235\203\351\231\220\347\256\241\347\220\206\351\234\200\346\261\202\345\210\206\346\236\220.docx" "b/Client/\345\247\234\345\217\257\345\272\232/document/\346\235\203\351\231\220\347\256\241\347\220\206\351\234\200\346\261\202\345\210\206\346\236\220.docx"
index a879fd2..b53130b 100644
--- "a/Client/\345\247\234\345\217\257\345\272\232/document/\346\235\203\351\231\220\347\256\241\347\220\206\351\234\200\346\261\202\345\210\206\346\236\220.docx"
+++ "b/Client/\345\247\234\345\217\257\345\272\232/document/\346\235\203\351\231\220\347\256\241\347\220\206\351\234\200\346\261\202\345\210\206\346\236\220.docx"
Binary files differ
diff --git "a/Client/\345\247\234\345\217\257\345\272\232/log/\345\247\234\345\217\257\345\272\232_1106.doc" "b/Client/\345\247\234\345\217\257\345\272\232/log/\345\247\234\345\217\257\345\272\232_1106.doc"
new file mode 100644
index 0000000..ced568e
--- /dev/null
+++ "b/Client/\345\247\234\345\217\257\345\272\232/log/\345\247\234\345\217\257\345\272\232_1106.doc"
Binary files differ
diff --git a/common.h b/common.h
index fb8ffa3..6d36e1f 100644
--- a/common.h
+++ b/common.h
@@ -90,6 +90,14 @@
 	//鏃ュ織
 	LOGSEARCH_REQ,//鏃ュ織鏌ヨ璇锋眰
 	LOGSEARCH_RES,//鏃ュ織鏌ヨ鍝嶅簲
+	
+	//鍘嗗彶鏌ヨ鍒嗘瀽
+	HISTORY_DEV_REQ,        //鍘嗗彶鏌ヨ纭欢璇锋眰
+	HISTORY_DEV_RES,        //鍘嗗彶鏌ヨ纭欢鍝嶅簲
+	HISTORY_PRODUCE_REQ,    //鍘嗗彶鏌ヨ鐢熶骇璇锋眰
+	HISTORY_PRODUCE_RES,    //鍘嗗彶鏌ヨ鐢熶骇鍝嶅簲
+	HISTORY_ENV_REQ,    //鍘嗗彶鏌ヨ鐜璇锋眰
+	HISTORY_ENV_RES,    //鍘嗗彶鏌ヨ鐜鍝嶅簲
 
 };
 
@@ -276,22 +284,22 @@
 //璁惧绠$悊
 struct DevicesInfo
 {
-	int deviceID;
 	char deviceName[32];//璁惧鍚嶇О
 	char deviceStatus[32];//璁惧鐘舵��
+    char area[32]; // 鍦板尯
+    double longitude;//缁忓害
+    double latitude;//绾害
+    char purchasingTime[15];//璐拱鏃堕棿
+    char installTime[15];//瀹夎鏃堕棿
 	char manufacturer[100];//鍘傚
+    char devicesSerialNumber[32];//璁惧缂栫爜
 	char devicesType[32];//璁惧绫诲瀷
-	double longitude;//缁忓害
-	double latitude;//绾害
-	char purchasingTime[15];//璐拱鏃堕棿
-	char installTime[15];//瀹夎鏃堕棿
-	char devicesSerialNumber[32];//璁惧缂栫爜
 };
 //娣诲姞璁惧
 struct ADReq//娣诲姞璇锋眰
 {
 	Head head;
-	char deviceName[32];
+	DevicesInfo devInfo[0];
 	ADReq() {
 		head.type = AD_REQ;
 		head.len = sizeof(ADReq);
@@ -302,7 +310,7 @@
 struct ADRes//娣诲姞鍝嶅簲
 {
 	Head head;
-	int type;
+	int status;
 	ADRes() {
 		head.type = AD_RES;
 		head.len = sizeof(ADRes);
@@ -310,22 +318,23 @@
 
 };
 //淇敼璁惧
-struct MDRes//淇敼璇锋眰
+struct MDReq//淇敼璇锋眰
 {
 	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 MDRes//淇敼鍝嶅簲
+{
+	Head head;
+	DevicesInfo info;
+	int status;
+	MDRes() {
+		head.type = MD_RES;
+		head.len = sizeof(MDRes);
 	}
 };
 //鏌ヨ璁惧
@@ -341,7 +350,7 @@
 struct QDRes//鏌ヨ鍝嶅簲
 {
 	Head head;
-	int type;
+	int status;
 	QDRes() {
 		head.type = QD_RES;
 		head.len = sizeof(QDRes);
@@ -827,40 +836,91 @@
 
 
 //鍘嗗彶鏌ヨ鍒嗘瀽
-// 鍘嗗彶鏌ヨ璇锋眰缁撴瀯浣�
-struct HistoryQueryReq {
+
+//鍘嗗彶鏌ヨ鍒嗘瀽
+
+struct warningInfo {
+	int device_id;
+	char des[32];
+	char time[32];
+	float data;
+	char type[16];
+	char status[16];
+};
+// 鍘嗗彶鏌ヨ璁惧淇℃伅璇锋眰缁撴瀯浣�
+struct HistoryDevReq {
 	Head head;
 	//鏍规嵁鏃堕棿鑼冨洿鏌ヨ
 	char startTime[32];
 	char endTime[32];
 	//鍏抽敭瀛楁煡璇�
 	char keyWord[32];
-	HistoryQueryReq() {
+	HistoryDevReq() {
 		// 鍒濆鍖栨暟鎹ご
-		head.type = QUERY_MONOUTPUT_REQ;
-		head.len = sizeof(HistoryQueryReq);
+		head.type = HISTORY_DEV_REQ;
+		head.len = sizeof(HISTORY_DEV_REQ);
 		// 鍒濆鍖栨煡璇㈡潯浠跺瓧娈�
-		std::memset(startTime, 0, sizeof(startTime));
-		std::memset(endTime, 0, sizeof(endTime));
-
+	}
+};
+// 鍘嗗彶鏌ヨ鐢熶骇璁″垝璇锋眰缁撴瀯浣�
+struct HistoryProReq {
+	Head head;
+	//鏍规嵁鏃堕棿鑼冨洿鏌ヨ
+	char startTime[32];
+	char endTime[32];
+	//鍏抽敭瀛楁煡璇�
+	char keyWord[32];
+	HistoryProReq() {
+		// 鍒濆鍖栨暟鎹ご
+		head.type = HISTORY_PRODUCE_REQ;
+		head.len = sizeof(HistoryProReq);
+		// 鍒濆鍖栨煡璇㈡潯浠跺瓧娈�
+	}
+};
+// 鍘嗗彶鏌ヨ鐜淇℃伅璇锋眰缁撴瀯浣�
+struct HistoryEnvReq {
+	Head head;
+	//鏍规嵁鏃堕棿鑼冨洿鏌ヨ
+	char startTime[32];
+	char endTime[32];
+	//鍏抽敭瀛楁煡璇�
+	char keyWord[32];
+	HistoryEnvReq() {
+		// 鍒濆鍖栨暟鎹ご
+		head.type = HISTORY_ENV_REQ;
+		head.len = sizeof(HistoryEnvReq);
+		// 鍒濆鍖栨煡璇㈡潯浠跺瓧娈�
 	}
 };
 
-// 鍘嗗彶鏌ヨ鍝嶅簲缁撴瀯浣�
-
-// 绯荤粺杩愯鐘舵�佽〃鐩稿叧淇℃伅
-struct HistroyInfo {
-	WarningRes warn;//璀︽姤鏌ヨ
-	QDRes dev;//璁惧鏌ヨ
-	QueryPdplanRes  pro;//鐢熶骇璁″垝鏌ヨ
-};
-struct HistoryQueryRes {
+//鏌ヨ璁惧淇℃伅鍝嶅簲缁撴瀯浣�
+struct HistoryDevRes {
 	Head head;
-	HistroyInfo sys[0];
-	HistoryQueryRes() {
+	DevicesInfo dev[0];
+	HistoryDevRes() {
 		// 鍒濆鍖栨暟鎹ご
-		head.type = QUERY_MONOUTPUT_RES;
-		head.len = sizeof(HistoryQueryRes);
+		head.type = HISTORY_DEV_RES;
+		head.len = sizeof(HistoryDevRes);
+	}
+};
+//鏌ヨ鐢熶骇璁″垝鍝嶅簲缁撴瀯浣�
+struct HistoryProRes {
+	Head head;
+	PdplanInfo pro[0];
+	HistoryProRes() {
+		// 鍒濆鍖栨暟鎹ご
+		head.type = HISTORY_PRODUCE_RES;
+		head.len = sizeof(HistoryProRes);
+	}
+};
+//鏌ヨ鐜淇℃伅鍝嶅簲缁撴瀯浣�
+struct HistoryEnvRes {
+	Head head;
+	warningInfo env[0];
+	HistoryEnvRes() {
+		// 鍒濆鍖栨暟鎹ご
+		head.type = HISTORY_ENV_RES;
+		head.len = sizeof(HistoryEnvRes);
 	}
 };
 
diff --git "a/\350\241\250.docx" "b/\350\241\250.docx"
index bb4ce96..02d41c8 100644
--- "a/\350\241\250.docx"
+++ "b/\350\241\250.docx"
Binary files differ

--
Gitblit v1.8.0