Browse Source

加入人数计算的大体框架

lishengyin 3 years ago
parent
commit
8da1d83d03

+ 4 - 0
build/CMakeFiles/main.dir/CXX.includecache

@@ -1107,6 +1107,10 @@ Util/logger.h
 ../modules/dataType/include/Util/logger.h
 time.h
 -
+ctime
+-
+list
+-
 
 ../modules/dataType/include/PIDSServerResultMsg.h
 iostream

BIN
build/CMakeFiles/main.dir/source/src/main.cpp.o


+ 4 - 0
build/modules/CMakeFiles/modules.dir/CXX.includecache

@@ -1107,6 +1107,10 @@ Util/logger.h
 ../modules/dataType/include/Util/logger.h
 time.h
 -
+ctime
+-
+list
+-
 
 ../modules/dataType/include/PIDSServerResultMsg.h
 iostream

BIN
build/modules/CMakeFiles/modules.dir/TCPClient/src/TCPClient.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/decoder/src/FFMpegDecoder.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/inifile/src/inifile.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/md5/src/md5.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o


BIN
lib/libmodules.so


+ 27 - 0
modules/dataType/include/PIDSDataDefine.h

@@ -4,6 +4,8 @@
 #include "Crc16.h"
 #include "Util/logger.h"
 #include <time.h>
+#include <ctime>
+#include <list>
 
 using namespace std;
 
@@ -19,6 +21,22 @@ using namespace std;
 #define HEX2BCD(x) (((x) % 10) + ((((x) / 10) % 10) << 4))  /*20 -> 20H*/
 
 
+struct CarLoadData{
+    int NoLoad;
+    int DynamicLoad;
+};
+
+struct CarInferData{
+    std::string uri;
+    int num;
+};
+
+struct CarData{
+    CarLoadData loadData;
+    std::list<CarInferData> inferData;
+};
+
+
 void getBCDTime(uint8_t *out)
 {
     time_t t;
@@ -33,4 +51,13 @@ void getBCDTime(uint8_t *out)
     out[i++] = HEX2BCD(tp->tm_hour);
     out[i++] = HEX2BCD(tp->tm_min);
     out[i++] = HEX2BCD(tp->tm_sec);
+}
+
+void getDataTime(char *ctime)
+{
+    time_t rawtime;
+    struct tm *info;
+    time(&rawtime);
+    info = localtime(&rawtime);
+    strftime(ctime, 80, "%Y-%m-%d %H:%M:%S", info);
 }

+ 0 - 2
modules/dataType/include/PIDSServerResultMsg.h

@@ -59,8 +59,6 @@ public:
         this->TimeFlag = data[13] ? true:false;
 
         // 时间
-
-
         // 标志
         this->DoorFlag = data[21];
         this->PIDSFlag = data[22];

+ 3 - 3
modules/userApp/include/user_app.h

@@ -57,7 +57,8 @@ namespace MIVA
         void Destroy();
         void StartTask();
         static void makeAddr(struct sockaddr *out,const char *ip,uint16_t port);
-        
+        static uint32_t DataCalculation(uint32_t noLoad, uint32_t dynamicLoad, int num);
+        static uint8_t GradeDetermination(int num);
     private:
         IniFile m_ini;
         std::string m_appName;
@@ -90,12 +91,11 @@ namespace MIVA
         Timer::Ptr m_timer0;
         Timer::Ptr m_timer1;
 
-
     private:
         void ListenInfer(int Source_id, int num);
         void ListenNettyData(const Buffer::Ptr &pBuf);
         void ListenPISData(const Buffer::Ptr &buf, struct sockaddr *addr);
-
+        void ListenClosed();
         void ConnectNetty();
         void ReportData();
     };

+ 78 - 5
modules/userApp/src/user_app.cpp

@@ -156,9 +156,11 @@ namespace MIVA
     // 监听推理广播
     void UserApp::ListenInfer(int Source_id, int num)
     {   
+        char ctime[80];
+        getDataTime(ctime);
         // 异步更新
-        SqlWriter updataSql("UPDATE MIVA_DB.Streams SET num = '?' WHERE Id = '?';");
-        updataSql << num << Source_id << endl;
+        SqlWriter updataSql("UPDATE MIVA_DB.Streams SET num = '?' DataTime = '?' WHERE Id = '?';");
+        updataSql << num << ctime << Source_id << endl;
     }   
 
     // 连接Netty
@@ -181,7 +183,6 @@ namespace MIVA
         }
         PIDSClientResultMsg clentResultMsg;
 
-
         for(auto &line : sqlRet){
             vector<vector<std::string>> sqlRet0;
             SqlWriter sqlSelect0("SELECT Crowdedness,num FROM MIVA_DB.`Crowdedness` where CarId = ?");
@@ -241,7 +242,7 @@ namespace MIVA
                 num++;
             }else
             {
-                // 纪律动态载荷
+                // 记录动态载荷
                 SqlWriter updataSql("UPDATE MIVA_DB.CarId SET DynamicLoad = '?' WHERE CarId = '?';");
                 for(int id=1; id <= 6 ; id ++){
                     updataSql << serverResultMag.DynamicLoad[id] << id << sqlRet;
@@ -250,7 +251,7 @@ namespace MIVA
             // 获取到关好门的信号
             if((serverResultMag.DoorFlag & 0x80))
             { 
-                // 广播收到管好门的信号
+                // 广播收到门的信号
                 NoticeCenter::Instance().emitEvent(NOTICE_CLOSED);
             }
         }
@@ -265,4 +266,76 @@ namespace MIVA
         bzero(&(servaddr.sin_zero), sizeof servaddr.sin_zero);
     }
 
+    //监听关门信号
+    void UserApp::ListenClosed()
+    {
+        // 收到关门信号
+        // 获取CarId、空载荷值、动态载荷值
+        std::map<int, CarData> carDatas;
+        
+        vector<vector<string>> sqlRet;
+        SqlWriter sqlSelect0("SELECT CarId,NoLoad,DynamicLoad FROM MIVA_DB.`CarId`");
+        sqlSelect0 << sqlRet;
+        if(sqlRet.empty()){
+            ErrorL << "Car data not found.";
+            return;
+        }
+        for(auto &line : sqlRet){
+            CarData data;
+            data.loadData.NoLoad = atoi(line[1].c_str());    
+            data.loadData.DynamicLoad = atoi(line[2].c_str());
+            carDatas[atoi(line[0].c_str())] = data;
+        }
+        SqlWriter sqlSelect1("SELECT CarId,Stream,Num FROM MIVA_DB.`Streams` WHERE Play = 1");
+        sqlRet.clear();
+        sqlSelect1 << sqlRet;
+        for (auto &line : sqlRet)
+        {
+            CarInferData data;
+            data.uri = line[1];
+            data.num = atoi(line[2].c_str());
+            carDatas[atoi(line[0].c_str())].inferData.push_back(data);
+        }
+        // 提取所需的数据成功
+        // 数据计算
+        sqlRet.clear();
+        std::map<int, CarData>::iterator iter;
+        for(iter=carDatas.begin(); iter!=carDatas.end(); iter++)
+        {
+            SqlWriter sqlUpdata("UPDATA MIVA_DB.Streams SET Crowdedness = '?', num = '?' WHERE CarId = '?'");
+
+            int sum = 0;
+            std::list<CarInferData>::iterator it;
+            for (it = (iter->second.inferData.begin()); it != (iter->second.inferData.end()); it++){
+                sum += it->num;
+            }
+            int result = DataCalculation(iter->second.loadData.NoLoad, iter->second.loadData.DynamicLoad, sum);
+            int grade = GradeDetermination(result);
+
+            // 更新数据
+            sqlUpdata << grade << result << iter->first << sqlRet;
+        }
+    }
+
+    // 数据计算
+    uint32_t UserApp::DataCalculation(uint32_t noLoad, uint32_t dynamicLoad, int num)
+    {
+        uint32_t result;
+
+
+
+        return result;
+    }
+
+    // 拥挤度等级判定
+    uint8_t UserApp::GradeDetermination(int num)
+    {
+        // 等级1 - 4
+        uint8_t grade = 1;
+
+        
+
+        return grade;
+    }
+
 }

BIN
source/bin/main