wsclient.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. #include "wsclient.h"
  2. #include "ytservicecore.h"
  3. #include <QCryptographicHash>
  4. WSClient::WSClient(QWebSocket *so, QObject *parent) : QObject(parent)
  5. {
  6. CompanyCodeList.clear();
  7. CompanyIdxList.clear();
  8. m_client = so;
  9. connect(m_client, &QWebSocket::textMessageReceived, this, &WSClient::processTextMessage);
  10. connect(m_client, &QWebSocket::disconnected, this, &WSClient::socketDisconnected);
  11. }
  12. WSClient::~WSClient()
  13. {
  14. CompanyCodeList.clear();
  15. CompanyIdxList.clear();
  16. m_client->abort();
  17. m_client->deleteLater();
  18. emit closed();
  19. }
  20. void WSClient::socketDisconnected()
  21. {
  22. CompanyCodeList.clear();
  23. CompanyIdxList.clear();
  24. m_client->abort();
  25. m_client->deleteLater();
  26. emit closed();
  27. }
  28. void WSClient::chkLastNote(QString company_code)
  29. {
  30. for(int i=0;i<CompanyCodeList.length();i++){
  31. if(QString::compare(company_code,CompanyCodeList.at(i))==0){
  32. sendLastStatus();
  33. break;
  34. }
  35. }
  36. }
  37. QJsonArray WSClient::getAlarmListByCompanyIdx(unsigned int idx)
  38. {
  39. QJsonArray list;
  40. if(idx<webData->CompanysCount){
  41. for(quint8 dwIdx=1;dwIdx<6;dwIdx++){
  42. QJsonObject alarm;
  43. if(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].ShowFlag==0x01){
  44. alarm.insert("company_code",QJsonValue(webData->companys[idx].CompanyCode));
  45. alarm.insert("company_name",QJsonValue(webData->companys[idx].CompanyName));
  46. alarm.insert("dwtype",QJsonValue(QString("%1").arg(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].dwType)));
  47. alarm.insert("data",QJsonValue(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].Data));
  48. alarm.insert("name",QJsonValue(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].DevName));
  49. alarm.insert("time",QJsonValue(webData->LastAlarmRec[idx][0].alarmRec[dwIdx].Time));
  50. }else{
  51. alarm.insert("company_name",QJsonValue(""));
  52. alarm.insert("dwtype",QJsonValue(QString("%1").arg(dwIdx==1?1:(dwIdx==2?2:(dwIdx==3?6:(dwIdx==4?7:16))))));
  53. alarm.insert("data",QJsonValue(""));
  54. alarm.insert("name",QJsonValue(""));
  55. alarm.insert("time",QJsonValue(""));
  56. }
  57. list.append(alarm);
  58. }
  59. }
  60. return list;
  61. }
  62. void WSClient::chkCompanyAlarmList(QString loginname, QString company_code)
  63. {
  64. QJsonDocument jdoc;
  65. QJsonObject root;
  66. root.insert("action",QJsonValue("getAlarmList"));
  67. root.insert("check",QJsonValue("true"));
  68. root.insert("update",QJsonValue(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
  69. QJsonArray alarmList;
  70. if(QString::compare(loginname,QString("admin"))==0){
  71. for(unsigned int i=0;i<webData->CompanysCount;i++){
  72. if(QString::compare(company_code,QString(webData->companys[i].CompanyCode))==0){
  73. alarmList = getAlarmListByCompanyIdx(i);
  74. break;
  75. }
  76. }
  77. }else{
  78. for(unsigned int i=0;i<webData->UserCompanyCount;i++){
  79. if((QString::compare(loginname,QString(webData->userCompanys[i].Loginname))==0)
  80. &&(QString::compare(company_code,QString(webData->userCompanys[i].CompanyCode))==0)){
  81. for(unsigned int j=0;j<webData->CompanysCount;j++){
  82. if(QString::compare(company_code,QString(webData->companys[j].CompanyCode))==0){
  83. alarmList = getAlarmListByCompanyIdx(j);
  84. break;
  85. }
  86. }
  87. break;
  88. }
  89. }
  90. }
  91. root.insert("ALARM",alarmList);
  92. jdoc.setObject(root);
  93. m_client->sendTextMessage(QString(jdoc.toJson()));
  94. }
  95. void WSClient::sendLastStatus()
  96. {
  97. QJsonDocument jdoc;
  98. QJsonObject root;
  99. QJsonArray alarmList,companyList;
  100. QString alarmCompanyName, alarmData, alarmDwtype, alarmTime, alarmName, alarmCompanyCode;
  101. uint time_T;
  102. root.insert("action",QJsonValue("getFrontpageQuery"));
  103. root.insert("check",QJsonValue("true"));
  104. root.insert("ServerName",QJsonValue("www.jd-ioe.com/UskyIoT"));
  105. root.insert("update",QJsonValue(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
  106. if((CompanyCodeList.length()>0)&&(CompanyIdxList.length()==CompanyCodeList.length())){
  107. for(quint8 dwIdx=1;dwIdx<6;dwIdx++){
  108. if(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].ShowFlag==0x01){
  109. alarmCompanyCode = CompanyCodeList.at(0);
  110. alarmName = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].DevName);
  111. alarmCompanyName = QString::fromUtf8(webData->companys[CompanyIdxList.at(0)].CompanyName);
  112. alarmData = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].Data);
  113. alarmDwtype = QString("%1").arg(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].dwType);
  114. alarmTime = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].Time);
  115. time_T = webData->LastAlarmRec[CompanyIdxList.at(0)][0].alarmRec[dwIdx].Time_T;
  116. }else{
  117. alarmData="";
  118. time_T = 0;
  119. }
  120. for(int i=1;i<CompanyCodeList.length();i++){
  121. if((webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].ShowFlag==0x01)
  122. &&(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].Time_T>time_T)){
  123. alarmCompanyCode = CompanyCodeList.at(i);
  124. alarmCompanyName = QString::fromUtf8(webData->companys[CompanyIdxList.at(i)].CompanyName);
  125. alarmName = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].DevName);
  126. alarmData = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].Data);
  127. alarmDwtype = QString("%1").arg(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].dwType);
  128. alarmTime = QString::fromUtf8(webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].Time);
  129. time_T = webData->LastAlarmRec[CompanyIdxList.at(i)][0].alarmRec[dwIdx].Time_T;
  130. }
  131. }
  132. if(alarmData.length()>0){
  133. QJsonObject alarm;
  134. alarm.insert("company_code",QJsonValue(alarmCompanyCode));
  135. alarm.insert("company_name",QJsonValue(alarmCompanyName));
  136. alarm.insert("dwtype",QJsonValue(alarmDwtype));
  137. alarm.insert("data",QJsonValue(alarmData));
  138. alarm.insert("name",QJsonValue(alarmName));
  139. alarm.insert("time",QJsonValue(alarmTime));
  140. alarmList.append(alarm);
  141. }
  142. }
  143. for(int i=0;i<CompanyIdxList.length();i++){
  144. QJsonObject company;
  145. for(unsigned int j=0;j<webData->BuildingsCount;j++){
  146. if(QString::compare(CompanyCodeList.at(i),QString(webData->buildings[j].CompanyCode))==0){
  147. company.insert("address",QJsonValue(QString::fromUtf8(webData->buildings[j].Address)));
  148. company.insert("building_name",QJsonValue(QString::fromUtf8(webData->buildings[j].BuildingName)));
  149. company.insert("fulladdress",QJsonValue(QString::fromUtf8(webData->buildings[j].FullAddress)));
  150. company.insert("lat",QJsonValue(static_cast<double>(webData->buildings[j].Lat)));
  151. company.insert("lng",QJsonValue(static_cast<double>(webData->buildings[j].Lng)));
  152. break;
  153. }
  154. }
  155. company.insert("company_code",QJsonValue(CompanyCodeList.at(i)));
  156. company.insert("company_name",QJsonValue(QString::fromUtf8(webData->companys[CompanyIdxList.at(i)].CompanyName)));
  157. company.insert("username",QJsonValue(QString::fromUtf8(webData->companys[CompanyIdxList.at(i)].UserName)));
  158. company.insert("phone",QJsonValue(QString::fromUtf8(webData->companys[CompanyIdxList.at(i)].Phone)));
  159. company.insert("d0",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevCount)));
  160. company.insert("d0a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevAlarmCount)));
  161. company.insert("d0ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevAlarmConfirmCount)));
  162. company.insert("d0o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevOutLineCount)));
  163. company.insert("d0oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[0].DevOutConfirmCount)));
  164. company.insert("d1",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevCount)));
  165. company.insert("d1a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevAlarmCount)));
  166. company.insert("d1ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevAlarmConfirmCount)));
  167. company.insert("d1o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevOutLineCount)));
  168. company.insert("d1oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[1].DevOutConfirmCount)));
  169. company.insert("d2",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevCount)));
  170. company.insert("d2a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevAlarmCount)));
  171. company.insert("d2ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevAlarmConfirmCount)));
  172. company.insert("d2o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevOutLineCount)));
  173. company.insert("d2oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[2].DevOutConfirmCount)));
  174. company.insert("d6",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevCount)));
  175. company.insert("d6a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevAlarmCount)));
  176. company.insert("d6ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevAlarmConfirmCount)));
  177. company.insert("d6o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevOutLineCount)));
  178. company.insert("d6oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[6].DevOutConfirmCount)));
  179. company.insert("d7",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevCount)));
  180. company.insert("d7a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevAlarmCount)));
  181. company.insert("d7ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevAlarmConfirmCount)));
  182. company.insert("d7o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevOutLineCount)));
  183. company.insert("d7oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[7].DevOutConfirmCount)));
  184. company.insert("d16",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevCount)));
  185. company.insert("d16a",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevAlarmCount)));
  186. company.insert("d16ac",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevAlarmConfirmCount)));
  187. company.insert("d16o",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevOutLineCount)));
  188. company.insert("d16oc",QJsonValue(static_cast<int>(webData->companys[CompanyIdxList.at(i)].subType[16].DevOutConfirmCount)));
  189. companyList.append(company);
  190. }
  191. }
  192. root.insert("ALARM",alarmList);
  193. root.insert("LIST",companyList);
  194. root.insert("company_count",QJsonValue(CompanyIdxList.length()));
  195. jdoc.setObject(root);
  196. m_client->sendTextMessage(QString(jdoc.toJson()));
  197. }
  198. void WSClient::processTextMessage(QString message)
  199. {
  200. QJsonParseError json_error;
  201. QJsonDocument jsonDoc(QJsonDocument::fromJson(message.toUtf8(),&json_error));
  202. if(json_error.error==QJsonParseError::NoError){
  203. QJsonObject jquery = jsonDoc.object();
  204. QString V_LOGINNAME = jquery.value("V_LOGINNAME").isString()?jquery.value("V_LOGINNAME").toString():"";
  205. QString V_PASSWORD = jquery.value("V_PASSWORD").isString()?jquery.value("V_PASSWORD").toString():"";
  206. QString V_COMMAND = jquery.value("V_COMMAND").isString()?jquery.value("V_COMMAND").toString():"";
  207. QString V_COMPANYID = jquery.value("V_COMPANYID").isString()?jquery.value("V_COMPANYID").toString():"";
  208. if((V_LOGINNAME.length()>0)&&(V_PASSWORD.length()>0)){
  209. QString pass_md5 = QString(QCryptographicHash::hash(QCryptographicHash::hash(V_PASSWORD.toUtf8(),QCryptographicHash::Md5).toHex(),QCryptographicHash::Md5).toHex());
  210. for(unsigned int i=0;i<webData->UsersCount;i++){
  211. if((QString::compare(V_LOGINNAME,QString(webData->users[i].LoginName))==0)
  212. &&(QString::compare(pass_md5,QString(webData->users[i].Password))==0)){
  213. if(webData->users[i].Status==0x01){
  214. if(QString::compare(V_COMMAND,QString("FRONTPAGE"))==0){
  215. chkCompanyCodeList(V_LOGINNAME);
  216. if((CompanyCodeList.length()>0)&&(CompanyIdxList.length()==CompanyCodeList.length())){
  217. sendLastStatus();
  218. }
  219. }else if((QString::compare(V_COMMAND,QString("getAlarmList"))==0)
  220. &&(V_COMPANYID.length()>0)){
  221. chkCompanyAlarmList(V_LOGINNAME, V_COMPANYID);
  222. }
  223. }
  224. }
  225. }
  226. }
  227. }
  228. }
  229. void WSClient::chkCompanyCodeList(QString loginname)
  230. {
  231. if(QString::compare(loginname,QString("admin"))==0){
  232. for(unsigned int i=0;i<webData->CompanysCount;i++){
  233. CompanyCodeList.append(QString(webData->companys[i].CompanyCode));
  234. CompanyIdxList.append(i);
  235. }
  236. }else{
  237. for(unsigned int i=0;i<webData->UserCompanyCount;i++){
  238. if(QString::compare(loginname,QString(webData->userCompanys[i].Loginname))==0){
  239. QString cCode = QString(webData->userCompanys[i].CompanyCode);
  240. CompanyCodeList.append(cCode);
  241. for(unsigned int j=0;j<webData->CompanysCount;j++){
  242. if(QString::compare(cCode,QString(webData->companys[j].CompanyCode))==0){
  243. CompanyIdxList.append(j);
  244. break;
  245. }
  246. }
  247. }
  248. }
  249. }
  250. }