Procházet zdrojové kódy

Merge branch 'master' of http://jiecheng2024.tpddns.cn:3000/liyuezong/SmartPDCode

guohui před 2 roky
rodič
revize
1094b3e77a

+ 5 - 4
pro/src/app.c

@@ -56,7 +56,7 @@ void* power_thread(void* arg)
     _PowerDSManage_t* _powerDsManageTemp = NULL ;
     dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strPower);       // 查询日志最大点
     dev_search_last_Index(_globalDeviceManager->db, &nSaveTacIndex, strTacPower); // 查询日志最大点
-    _globalDeviceManager->_global_alarmLanguage=create_hash_table(25);
+    _globalDeviceManager->_global_alarmLanguage=create_hash_table(28);
     InitHashTable(_globalDeviceManager->_global_alarmLanguage);
     unsigned int samp_time = _globalDeviceManager->_global_device_info->product_samp_time;
     unsigned int usleepTime = samp_time*1000;
@@ -952,7 +952,7 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
     bool *pSave = NULL;     //是否已报警
     float *pValthreshold = NULL;//阈值
     float *pValData = NULL;     //当前值
-    if (!_globalSensorMangerTemp)
+    if (!_globalSensorMangerTemp|| !_globalSensorMangerTemp->over_manager)
     {
         return;
     }
@@ -1078,6 +1078,7 @@ void* sensor_thread(void* arg)
         {
             dev_change_last_Index(_globalDeviceManager->db, &nSaveIndex, nDeleteNumber, strTable);
         }
+        pthread_mutex_lock(&__globalDeviceManage._sensor_update);
         list_for_each_entry(_globalSensorMangerTemp, &_globalDeviceManager->_globalSensorManger.list, list)
         {
             switch (_globalSensorMangerTemp->sensor_type)
@@ -1181,7 +1182,7 @@ void* sensor_thread(void* arg)
                 sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_LOWER);
             }
         }
-
+        pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
         sleep(1);
     }
 #endif
@@ -2155,7 +2156,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     
     sprintf(strLog,"%s$|$通道",language_alarm_Init_Success[_globalDeviceManager->_global_device_info->product_language]);
     char number[10];
-    sprintf(number,"%d",chn);
+    sprintf(number,"%d",chn-1);
     dev_Alarm_Run_message(_globalDeviceManager,strLog,number);
     //获取数据库中的定时数据
     ret=dev_get_power_ds(_globalDeviceManager->db,&_globalDeviceManager->_globalPowerManger,NULL);

+ 98 - 28
pro/src/appweb_handle.c

@@ -1402,6 +1402,7 @@ static void sensorStatusMonitoring(void* conn)
         
         #if(1)
         //链表初始化
+        pthread_mutex_lock(&__globalDeviceManage._sensor_update);
         INIT_LIST_HEAD(&_over_all_sensor_back_info.list);
         //获取传感器当前的最新值
         GlobalSensorManger* _globalSensorManagerTemp = NULL;
@@ -1474,6 +1475,7 @@ static void sensorStatusMonitoring(void* conn)
             //入队
             list_add_tail(&_overSensorBackInfoTemp->list,&_over_all_sensor_back_info.list);
         }    
+        pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
         //参数转换json
         ack_str = over_all_sensor_info_to_json(&_over_all_sensor_back_info,0);
 
@@ -1493,23 +1495,29 @@ static void sensorStatusMonitoring(void* conn)
         log_d("start delete handle.");
         int sensor_id_temp = _over_all_sensor_request.sensorId;
         
-        if(dev_delete_sensor_manage(__globalDeviceManage.db, 1,sensor_id_temp)!=0)
+        if(dev_delete_sensor_manage(__globalDeviceManage.db,  __globalDeviceManage._global_device_info->product_id,sensor_id_temp)!=0)
         {
             log_e("sensor delete failed.");
         }
-        //维护列表也需要删除
-        GlobalSensorManger* node;
-        GlobalSensorManger* next;
-        list_for_each_entry_safe(node, next, &__globalDeviceManage._globalSensorManger.list, list)
+        else
         {
-            if(node->sensor_id == sensor_id_temp)
+            // 维护列表也需要删除
+            pthread_mutex_lock(&__globalDeviceManage._sensor_update);
+            GlobalSensorManger *node;
+            GlobalSensorManger *next;
+            list_for_each_entry_safe(node, next, &__globalDeviceManage._globalSensorManger.list, list)
             {
-                list_del(&node->list);
-                free(node);
-                break;
+                if (node->sensor_id == sensor_id_temp)
+                {
+                    list_del(&node->list);
+                    free(node);
+                    break;
+                }
             }
+            pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
         }
 
+
         char temp[100];
         //sprintf(temp,"$删除$|$传感器$|%d",sensor_id_temp);
         sprintf(temp,"Delete sensor %d",sensor_id_temp);
@@ -1560,10 +1568,15 @@ static void sensorStatusMonitoring(void* conn)
                 if (strcmp(_over_all_sensor_request.cgqtd, "RS485") == 0)
                 {
                     _globalSensorMangerTemp->sensor_interface_type = 1;
-                    if (_over_all_sensor_request.comSlogan)
+                    if (_over_all_sensor_request.sensorAddr)
                     {
-                        strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.comSlogan);
+                        _globalSensorMangerTemp->sensor_addr = strtol(_over_all_sensor_request.sensorAddr,NULL,10);
                     }
+                    //前端未传com口信息,暂且不改
+                    //if (_over_all_sensor_request.comSlogan)
+                   // {
+                   //     strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.comSlogan);
+                  //  }
                 }
                 else if (strcmp(_over_all_sensor_request.cgqtd, "IN3") == 0)
                 {
@@ -1648,27 +1661,72 @@ static void sensorStatusMonitoring(void* conn)
         //填充数据
         _globalSensorMangerTemp->product_id = __globalDeviceManage._global_device_info->product_id ;
         _globalSensorMangerTemp->sensor_id = _over_all_sensor_request.sensorId;
-        
+        strcpy( _globalSensorMangerTemp->sensor_name,_over_all_sensor_request.sensorName);
+
         if(_over_all_sensor_request.sensorType && strlen(_over_all_sensor_request.sensorType)) {
             _globalSensorMangerTemp->sensor_type = strtol(_over_all_sensor_request.sensorType,NULL,10);
         }
         else {
             wrong_param = 1;
         }
-
-        if(_over_all_sensor_request.sensorBaud && strlen(_over_all_sensor_request.sensorBaud)) {
-            _globalSensorMangerTemp->sensor_baud = strtol(_over_all_sensor_request.sensorBaud,NULL,10);
+        if (_over_all_sensor_request.cgqtd)
+        {
+            if (strcmp(_over_all_sensor_request.cgqtd, "RS485") == 0)
+            {
+                _globalSensorMangerTemp->sensor_interface_type = 1;
+                if (_over_all_sensor_request.sensorAddr)
+                {
+                    _globalSensorMangerTemp->sensor_addr = strtol(_over_all_sensor_request.sensorAddr, NULL, 10);
+                }
+               // if (_over_all_sensor_request.sensorBaud && strlen(_over_all_sensor_request.sensorBaud))
+              //  {
+                    _globalSensorMangerTemp->sensor_baud = 9600; // strtol(_over_all_sensor_request.sensorBaud,NULL,10);//默认9600
+              //  }
+                // 前端未传com口信息,暂且不改
+                // if (_over_all_sensor_request.comSlogan)
+                // {
+                       strcpy(_globalSensorMangerTemp->sensor_port_name, "COM");
+                //  }
+            }
+            else if (strcmp(_over_all_sensor_request.cgqtd, "IN3") == 0)
+            {
+                _globalSensorMangerTemp->sensor_interface_type = 2;
+                _globalSensorMangerTemp->sensor_addr = 3;
+                strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
+                 _globalSensorMangerTemp->sensor_baud = 0;
+            }
+            else if (strcmp(_over_all_sensor_request.cgqtd, "IN4") == 0)
+            {
+                _globalSensorMangerTemp->sensor_interface_type = 2;
+                _globalSensorMangerTemp->sensor_addr = 2;
+                strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
+                 _globalSensorMangerTemp->sensor_baud = 0;
+            }
+            else if (strcmp(_over_all_sensor_request.cgqtd, "IN2") == 0)
+            {
+                _globalSensorMangerTemp->sensor_interface_type = 2;
+                _globalSensorMangerTemp->sensor_addr = 1;
+                strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
+                 _globalSensorMangerTemp->sensor_baud = 0;
+            }
+            else if (strcmp(_over_all_sensor_request.cgqtd, "IN1") == 0)
+            {
+                _globalSensorMangerTemp->sensor_interface_type = 2;
+                _globalSensorMangerTemp->sensor_addr = 0;
+                strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
+                 _globalSensorMangerTemp->sensor_baud = 0;
+            }
         }
-        else {
+        else
+        {
             wrong_param = 1;
         }
-
-        if(_over_all_sensor_request.sensorAddr && strlen(_over_all_sensor_request.sensorAddr)) {
-            _globalSensorMangerTemp->sensor_addr = strtol(_over_all_sensor_request.sensorAddr,NULL,10);
-        }
-        else {
+        _globalSensorMangerTemp->over_manager = (GlobalSensorOverManage*)malloc(sizeof(GlobalSensorOverManage));
+        if (! _globalSensorMangerTemp->over_manager)
+        {
             wrong_param = 1;
         }
+        
 
         if(wrong_param) {
             cJSON_Delete(cjson);
@@ -1676,9 +1734,7 @@ static void sensorStatusMonitoring(void* conn)
             return ;   
         }
         
-        strcpy( _globalSensorMangerTemp->sensor_name,_over_all_sensor_request.sensorName);
-        strcpy(_globalSensorMangerTemp->sensor_port_name,_over_all_sensor_request.comSlogan);
-        
+         memset(_globalSensorMangerTemp->over_manager, 0, sizeof(GlobalSensorOverManage));
         _globalSensorMangerTemp->sensor_status = 0;
         switch( _globalSensorMangerTemp->sensor_type)
         {
@@ -1696,7 +1752,9 @@ static void sensorStatusMonitoring(void* conn)
             log_e("dev insert error.");
         }
         //全局接口体中也需要添加相关参数
+        pthread_mutex_lock(&__globalDeviceManage._sensor_update);
         list_add_tail(&_globalSensorMangerTemp->list,&__globalDeviceManage._globalSensorManger.list);
+        pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
 
         char temp[100];
        // sprintf(temp,"$新增$|$传感器$|%d",_over_all_sensor_request.sensorId);
@@ -1899,10 +1957,10 @@ static void alarmProtect(void *conn)
         int i = 0 ;
         //初始化表
         INIT_LIST_HEAD(&_alarm_ack_info.list);
-        //查询数据库
+        //查询数据库,最近的10个报警信息
         ret = dev_serarch_all_alarm(__globalDeviceManage.db,
             __globalDeviceManage._global_device_info->product_id,
-            -1,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
+            0,1,10,
             &_alarm_ack_info,&nAlarmNumber);
         if(ret!=0)
             log_e("get power alarm error.");
@@ -2366,14 +2424,26 @@ static void logInformation(void *conn)
     }    
     else if(strcmp(__logInformationRequestInfo.type,"listYxrzQuery")==0) //运行日志
     {
+                   struct tm* t ;
+            struct timeval tv;
+            char start_time[32] = {0};
+            char stop_time[32] = {0};
+
+            gettimeofday(&tv, NULL);
+            t = localtime(&tv.tv_sec);
+            sprintf(stop_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,23,59,59);    
+            log_d(stop_time);
+
+            sprintf(start_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,0,0,0);  
+            log_d(start_time);
         //初始化表
         INIT_LIST_HEAD(&_alarm_ack_info.list);
 
         dev_search_alarm_info(__globalDeviceManage.db,
                             __globalDeviceManage._global_device_info->product_id,
                             4,// alarm_type,        运行日志
-                            __logInformationRequestInfo.beginTime,
-                            __logInformationRequestInfo.endtime,
+                           start_time,
+                           stop_time,
                             __logInformationRequestInfo.pagenum-1,
                             __logInformationRequestInfo.pagesize,
                             &_alarm_ack_info,&nAlarmNum);

+ 1 - 2
pro/src/common.h

@@ -847,6 +847,7 @@ typedef struct
     smartPDU_shm_data* g_shm_Data;
     pthread_mutex_t     _power_ds;        //定时器锁 
     pthread_mutex_t     _power_update;        //数据刷新锁
+    pthread_mutex_t     _sensor_update;        //传感器刷新锁
     cascade_single_mmap_t *single_mmap;
     cascade_triphasic_mmap_t *triphasic_mmap;
 }GlobalDeviceManager;
@@ -890,8 +891,6 @@ int days_in_month(int year, int month);
 // 函数:增加一天到日期  
 void add_day_to_date(char *date_str, int *year, int *month, int *day);
 
-pthread_mutex_t Httplock; 
-
 void SetMenuAuthority(int RoleID);
 
 #endif

+ 19 - 2
pro/src/json_handle.c

@@ -2715,8 +2715,20 @@ char* alarm_info_to_json(_AlarmAckInfo* _alarm_ack_info,int nAllNumber)
 
         cJSON_AddStringToObject(data_filed,"alarmNumber",_temp->alarmNumber);
         cJSON_AddStringToObject(data_filed,"alarmDate",_temp->alarmDate);
-        sprintf(temp,"%d",_temp->alarmType);
-        cJSON_AddStringToObject(data_filed,"alarmType",temp);
+        if (_temp->alarmType==0)
+        {
+            cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Power[__globalDeviceManage._global_device_info->product_language]);
+        }
+        else if (_temp->alarmType==1)
+        {
+            cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Sensor[__globalDeviceManage._global_device_info->product_language]);
+        }
+        else if (_temp->alarmType==2)
+        {
+             cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Network[__globalDeviceManage._global_device_info->product_language]);
+        }
+        else cJSON_AddStringToObject(data_filed,"alarmType","Unknown");
+
         cJSON_AddStringToObject(data_filed,"deviceNumber",_temp->deviceNumber);
         cJSON_AddStringToObject(data_filed,"deviceName",_temp->deviceName);  
         
@@ -4702,4 +4714,9 @@ void InitHashTable(HashTable *table)
     insert_Newhash(table,(const char*)language_alarm_ctrl_CloseCH[0],language_alarm_ctrl_CloseCH,nMaxSize);
     insert_Newhash(table,(const char*)language_alarm_ctrl_Alarm[0],language_alarm_ctrl_Alarm,nMaxSize);
     //25
+    insert_Newhash(table,(const char*)language_alarm_Type_Power[0],language_alarm_Type_Power,nMaxSize);
+    insert_Newhash(table,(const char*)language_alarm_Type_Sensor[0],language_alarm_Type_Sensor,nMaxSize);
+    insert_Newhash(table,(const char*)language_alarm_Type_Network[0],language_alarm_Type_Network,nMaxSize);
+    //28
+
 }

+ 24 - 0
pro/src/language_common.c

@@ -361,6 +361,29 @@ const char language_log_Power[LANGUAGE_TYPE][LANGUAGE_SIZE] =
     " "
 } ;
 
+const char language_alarm_Type_Power[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "电源类警告",
+    " Power alarm",
+    "Энергетическая тревога",
+    " "
+} ;
+
+const char language_alarm_Type_Sensor[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "传感器类警告",
+    " Sensor alarm",
+    "Предупреждение типа датчиков",
+    " "
+} ;
+
+const char language_alarm_Type_Network[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "网络类警告",
+    " Network alarm",
+    "Сетевое предупреждение",
+    " "
+} ;
 const char language_opera_log_operation[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
 {
     "操作日志",
@@ -541,3 +564,4 @@ const char language_Role_User[LANGUAGE_TYPE][LANGUAGE_SIZE] =
     " "
 } ;
 
+

+ 6 - 0
pro/src/language_common.h

@@ -139,4 +139,10 @@ extern const char language_Role_Admin[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
 extern const char language_Role_User[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
+extern const char language_alarm_Type_Power[LANGUAGE_TYPE][LANGUAGE_SIZE] ;
+
+extern const char language_alarm_Type_Sensor[LANGUAGE_TYPE][LANGUAGE_SIZE] ;
+
+extern const char language_alarm_Type_Network[LANGUAGE_TYPE][LANGUAGE_SIZE] ;
+
 #endif

+ 2 - 0
pro/src/websocket_handle.c

@@ -177,7 +177,9 @@ static void web_update(ws_handle_t *wh)
 
         //sensor info
         {
+            //pthread_mutex_lock(&__globalDeviceManage._sensor_update);
             json_str = ws_sensor_status_ack_to_json(&gdm->_globalSensorManger);
+           // pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
             ws_send_data(wh, json_str, strlen(json_str));
             cJSON_free(json_str);
         }