123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #include "wsclient.h"
- #include "ytservicecore.h"
- #include <QCryptographicHash>
- WSClient::WSClient(QWebSocket *so, QObject *parent) : QObject(parent)
- {
- CompanyCodeList.clear();
- CompanyIdxList.clear();
- m_client = so;
- connect(m_client, &QWebSocket::textMessageReceived, this, &WSClient::processTextMessage);
- connect(m_client, &QWebSocket::disconnected, this, &WSClient::socketDisconnected);
- }
- WSClient::~WSClient()
- {
- CompanyCodeList.clear();
- CompanyIdxList.clear();
- m_client->abort();
- m_client->deleteLater();
- emit closed();
- }
- void WSClient::socketDisconnected()
- {
- CompanyCodeList.clear();
- CompanyIdxList.clear();
- m_client->abort();
- m_client->deleteLater();
- emit closed();
- }
- void WSClient::chkLastNote(QString company_code)
- {
- for(int i=0;i<CompanyCodeList.length();i++){
- if(QString::compare(company_code,CompanyCodeList.at(i))==0){
- sendLastStatus();
- break;
- }
- }
- }
- QJsonArray WSClient::getAlarmListByCompanyIdx(unsigned int idx)
- {
- QJsonArray list;
- if(idx<webData->CompanysCount){
- for(quint8 dwIdx=1;dwIdx<6;dwIdx++){
- QJsonObject alarm;
- if(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].ShowFlag==0x01){
- alarm.insert("company_code",QJsonValue(webData->companys[idx].CompanyCode));
- alarm.insert("company_name",QJsonValue(webData->companys[idx].CompanyName));
- alarm.insert("dwtype",QJsonValue(QString("%1").arg(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].dwType)));
- alarm.insert("data",QJsonValue(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].Data));
- alarm.insert("name",QJsonValue(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].DevName));
- alarm.insert("time",QJsonValue(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].Time));
- }else{
- alarm.insert("company_name",QJsonValue(""));
- alarm.insert("dwtype",QJsonValue(QString("%1").arg(dwIdx==1?1:(dwIdx==2?2:(dwIdx==3?6:(dwIdx==4?7:16))))));
- alarm.insert("data",QJsonValue(""));
- alarm.insert("name",QJsonValue(""));
- alarm.insert("time",QJsonValue(""));
- }
- list.append(alarm);
- }
- }
- return list;
- }
- void WSClient::chkCompanyAlarmList(QString loginname, QString company_code)
- {
- QJsonDocument jdoc;
- QJsonObject root;
- root.insert("action",QJsonValue("getAlarmList"));
- root.insert("check",QJsonValue("true"));
- root.insert("update",QJsonValue(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
- QJsonArray alarmList;
- if(QString::compare(loginname,QString("admin"))==0){
- for(unsigned int i=0;i<webData->CompanysCount;i++){
- if(QString::compare(company_code,QString(webData->companys[i].CompanyCode))==0){
- alarmList = getAlarmListByCompanyIdx(i);
- break;
- }
- }
- }else{
- for(unsigned int i=0;i<webData->UserCompanyCount;i++){
- if((QString::compare(loginname,QString(webData->userCompanys[i].Loginname))==0)
- &&(QString::compare(company_code,QString(webData->userCompanys[i].CompanyCode))==0)){
- for(unsigned int j=0;j<webData->CompanysCount;j++){
- if(QString::compare(company_code,QString(webData->companys[j].CompanyCode))==0){
- alarmList = getAlarmListByCompanyIdx(j);
- break;
- }
- }
- break;
- }
- }
- }
- root.insert("ALARM",alarmList);
- jdoc.setObject(root);
- m_client->sendTextMessage(QString(jdoc.toJson()));
- }
- void WSClient::sendLastStatus()
- {
- QJsonDocument jdoc;
- QJsonObject root;
- QJsonArray alarmList,companyList;
- QString alarmCompanyName, alarmData, alarmDwtype, alarmTime, alarmName, alarmCompanyCode;
- uint time_T;
- root.insert("action",QJsonValue("getFrontpageQuery"));
- root.insert("check",QJsonValue("true"));
- root.insert("ServerName",QJsonValue("www.jd-ioe.com/UskyIoT"));
- root.insert("update",QJsonValue(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
- if((CompanyCodeList.length()>0)&&(CompanyIdxList.length()==CompanyCodeList.length())){
- for(quint8 dwIdx=1;dwIdx<6;dwIdx++){
- if(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].ShowFlag==0x01){
- alarmCompanyCode = CompanyCodeList.at(0);
- alarmName = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].DevName);
- alarmCompanyName = QString::fromUtf8(webData->companys[CompanyIdxList.at(0)].CompanyName);
- alarmData = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].Data);
- alarmDwtype = QString("%1").arg(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].dwType);
- alarmTime = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].Time);
- time_T = webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].Time_T;
- }else{
- alarmData="";
- time_T = 0;
- }
- for(int i=1;i<CompanyCodeList.length();i++){
- if((webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].ShowFlag==0x01)
- &&(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].Time_T>time_T)){
- alarmCompanyCode = CompanyCodeList.at(i);
- alarmCompanyName = QString::fromUtf8(webData->companys[CompanyIdxList.at(i)].CompanyName);
- alarmName = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].DevName);
- alarmData = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].Data);
- alarmDwtype = QString("%1").arg(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].dwType);
- alarmTime = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].Time);
- time_T = webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].Time_T;
- }
- }
- if(alarmData.length()>0){
- QJsonObject alarm;
- alarm.insert("company_code",QJsonValue(alarmCompanyCode));
- alarm.insert("company_name",QJsonValue(alarmCompanyName));
- alarm.insert("dwtype",QJsonValue(alarmDwtype));
- alarm.insert("data",QJsonValue(alarmData));
- alarm.insert("name",QJsonValue(alarmName));
- alarm.insert("time",QJsonValue(alarmTime));
- alarmList.append(alarm);
- }
- }
- for(int i=0;i<CompanyIdxList.length();i++){
- QJsonObject company;
- for(unsigned int j=0;j<webData->BuildingsCount;j++){
- if(QString::compare(CompanyCodeList.at(i),QString(webData->buildings[j].CompanyCode))==0){
- company.insert("address",QJsonValue(QString::fromUtf8(webData->buildings[j].Address)));
- company.insert("building_name",QJsonValue(QString::fromUtf8(webData->buildings[j].BuildingName)));
- company.insert("fulladdress",QJsonValue(QString::fromUtf8(webData->buildings[j].FullAddress)));
- company.insert("lat",QJsonValue(static_cast<double>(webData->buildings[j].Lat)));
- company.insert("lng",QJsonValue(static_cast<double>(webData->buildings[j].Lng)));
- break;
- }
- }
- company.insert("company_code",QJsonValue(CompanyCodeList.at(i)));
- company.insert("company_name",QJsonValue(QString::fromUtf8(webData->companys[CompanyIdxList.at(i)].CompanyName)));
- company.insert("username",QJsonValue(QString::fromUtf8(webData->companys[CompanyIdxList.at(i)].UserName)));
- company.insert("phone",QJsonValue(QString::fromUtf8(webData->companys[CompanyIdxList.at(i)].Phone)));
- company.insert("d0",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevCount)));
- company.insert("d0a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevAlarmCount)));
- company.insert("d0ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevAlarmConfirmCount)));
- company.insert("d0o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevOutLineCount)));
- company.insert("d0oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevOutConfirmCount)));
- company.insert("d1",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevCount)));
- company.insert("d1a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevAlarmCount)));
- company.insert("d1ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevAlarmConfirmCount)));
- company.insert("d1o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevOutLineCount)));
- company.insert("d1oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevOutConfirmCount)));
- company.insert("d2",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevCount)));
- company.insert("d2a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevAlarmCount)));
- company.insert("d2ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevAlarmConfirmCount)));
- company.insert("d2o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevOutLineCount)));
- company.insert("d2oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevOutConfirmCount)));
- company.insert("d6",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevCount)));
- company.insert("d6a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevAlarmCount)));
- company.insert("d6ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevAlarmConfirmCount)));
- company.insert("d6o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevOutLineCount)));
- company.insert("d6oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevOutConfirmCount)));
- company.insert("d7",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevCount)));
- company.insert("d7a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevAlarmCount)));
- company.insert("d7ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevAlarmConfirmCount)));
- company.insert("d7o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevOutLineCount)));
- company.insert("d7oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevOutConfirmCount)));
- company.insert("d16",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevCount)));
- company.insert("d16a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevAlarmCount)));
- company.insert("d16ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevAlarmConfirmCount)));
- company.insert("d16o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevOutLineCount)));
- company.insert("d16oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevOutConfirmCount)));
- companyList.append(company);
- }
- }
- root.insert("ALARM",alarmList);
- root.insert("LIST",companyList);
- root.insert("company_count",QJsonValue(CompanyIdxList.length()));
- jdoc.setObject(root);
- m_client->sendTextMessage(QString(jdoc.toJson()));
- }
- void WSClient::processTextMessage(QString message)
- {
- QJsonParseError json_error;
- QJsonDocument jsonDoc(QJsonDocument::fromJson(message.toUtf8(),&json_error));
- if(json_error.error==QJsonParseError::NoError){
- QJsonObject jquery = jsonDoc.object();
- QString V_LOGINNAME = jquery.value("V_LOGINNAME").isString()?jquery.value("V_LOGINNAME").toString():"";
- QString V_PASSWORD = jquery.value("V_PASSWORD").isString()?jquery.value("V_PASSWORD").toString():"";
- QString V_COMMAND = jquery.value("V_COMMAND").isString()?jquery.value("V_COMMAND").toString():"";
- QString V_COMPANYID = jquery.value("V_COMPANYID").isString()?jquery.value("V_COMPANYID").toString():"";
- if((V_LOGINNAME.length()>0)&&(V_PASSWORD.length()>0)){
- QString pass_md5 = QString(QCryptographicHash::hash(QCryptographicHash::hash(V_PASSWORD.toUtf8(),QCryptographicHash::Md5).toHex(),QCryptographicHash::Md5).toHex());
- for(unsigned int i=0;i<webData->UsersCount;i++){
- if((QString::compare(V_LOGINNAME,QString(webData->users[i].LoginName))==0)
- &&(QString::compare(pass_md5,QString(webData->users[i].Password))==0)){
- if(webData->users[i].Status==0x01){
- if(QString::compare(V_COMMAND,QString("FRONTPAGE"))==0){
- chkCompanyCodeList(V_LOGINNAME);
- if((CompanyCodeList.length()>0)&&(CompanyIdxList.length()==CompanyCodeList.length())){
- sendLastStatus();
- }
- }else if((QString::compare(V_COMMAND,QString("getAlarmList"))==0)
- &&(V_COMPANYID.length()>0)){
- chkCompanyAlarmList(V_LOGINNAME, V_COMPANYID);
- }
- }
- }
- }
- }
- }
- }
- void WSClient::chkCompanyCodeList(QString loginname)
- {
- if(QString::compare(loginname,QString("admin"))==0){
- for(unsigned int i=0;i<webData->CompanysCount;i++){
- CompanyCodeList.append(QString(webData->companys[i].CompanyCode));
- CompanyIdxList.append(i);
- }
- }else{
- for(unsigned int i=0;i<webData->UserCompanyCount;i++){
- if(QString::compare(loginname,QString(webData->userCompanys[i].Loginname))==0){
- QString cCode = QString(webData->userCompanys[i].CompanyCode);
- CompanyCodeList.append(cCode);
- for(unsigned int j=0;j<webData->CompanysCount;j++){
- if(QString::compare(cCode,QString(webData->companys[j].CompanyCode))==0){
- CompanyIdxList.append(j);
- break;
- }
- }
- }
- }
- }
- }
|