NettyHttpCarInfo.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*
  2. * @Description:
  3. * @Version: 1.0
  4. * @Autor: lishengyin
  5. * @Date: 2021-11-24 15:15:35
  6. * @LastEditors: lishengyin
  7. * @LastEditTime: 2021-11-29 09:16:45
  8. */
  9. #include "NettyHttpCarInfo.h"
  10. NettyHttpCarInfo::NettyHttpCarInfo(){}
  11. NettyHttpCarInfo::~NettyHttpCarInfo(){}
  12. bool NettyHttpCarInfo::jsonToObject(const rapidjson::Value& object){
  13. const auto end = object.MemberEnd();
  14. if(end == object.FindMember("id") || !object["id"].IsString()){
  15. return false;
  16. }else{
  17. id = object["id"].GetString();
  18. }
  19. // if(end == object.FindMember("pid") || !object["pid"].IsString()){
  20. // return false;
  21. // }else{
  22. // pid = object["pid"].GetString();
  23. // }
  24. if(end == object.FindMember("label") || !object["label"].IsString()){
  25. return false;
  26. }else{
  27. label = object["label"].GetString();
  28. }
  29. if(end == object.FindMember("attr") || !object["attr"].IsObject()){
  30. return false;
  31. }else{
  32. const rapidjson::Value& obj = object["attr"];
  33. if(!attr.jsonToObject(obj)){
  34. return false;
  35. }
  36. }
  37. if(end == object.FindMember("children")|| !(object["children"].IsArray())){
  38. return false;
  39. }else{
  40. const rapidjson::Value& objs = object["children"];
  41. for (size_t i = 0; i < objs.Size(); i++) {
  42. const rapidjson::Value& obj = objs[i];
  43. NettyHttpCarDevData data;
  44. if(!(data.jsonToObject(obj))){
  45. return false;
  46. }
  47. children.push_back(data);
  48. }
  49. }
  50. return true;
  51. }
  52. /**
  53. * @description: 数据同步
  54. * @param {*}
  55. * @return {*}
  56. */
  57. bool NettyHttpCarInfo::NettyClientDataSync()
  58. {
  59. vector<vector<string>> sqlRet;
  60. // 更新TrainInfo表
  61. SqlWriter sqlSelectTrain("SELECT * FROM MIVA_DB.TrainInfo WHERE carId='?'");
  62. sqlSelectTrain << attr.carId << sqlRet;
  63. if(sqlRet.size() != 0){
  64. SqlWriter sqlUpdate("UPDATE MIVA_DB.TrainInfo SET carCode='?',carName='?',enableFlag='?' WHERE carId='?'");
  65. sqlUpdate << attr.carCode << attr.carName << attr.enableFlag << attr.carId << sqlRet;
  66. }else{
  67. SqlWriter sqlInstert("INSERT INTO MIVA_DB.TrainInfo(carId,carCode, carName, enableFlag) VALUES('?', '?', '?', '?')");
  68. sqlInstert << attr.carId << attr.carCode << attr.carName << attr.enableFlag << sqlRet;
  69. }
  70. // 更新CarData表
  71. vector<int> CarIds;
  72. CarIds.clear();
  73. vector<NettyHttpCarDevData>::iterator iter;
  74. for(iter=children.begin();iter!=children.end();iter++){
  75. std::string sql = "SELECT * FROM MIVA_DB.CarData WHERE CarId='?'";
  76. SqlWriter sqlSelect(sql.c_str());
  77. sqlSelect << iter->attr.carId << sqlRet;
  78. if(sqlRet.size() != 0){
  79. SqlWriter sqlUpdate("UPDATE MIVA_DB.CarData SET label='?',PId='?',enableFlag='?',addTime='?',updateTime='?',carriageCode='?' WHERE CarId='?'");
  80. sqlUpdate << iter->label << iter->pid << iter->attr.enableFlag << iter->attr.addTime << iter->attr.updateTime << iter->id << iter->attr.carId << sqlRet;
  81. }else{
  82. SqlWriter sqlInstert("INSERT INTO MIVA_DB.CarData(NoLoad,DynamicLoad,Grade,Num,label,PId,CarId,enableFlag,addTime,carriageCode,updateTime)\
  83. VALUES('?','?','?','?','?','?','?','?','?','?','?')");
  84. sqlInstert << 0 << 0 << 0 << 0 << iter->label << iter->pid << iter->attr.carId << iter->attr.enableFlag << iter->attr.addTime << iter->id << iter->attr.updateTime << sqlRet;
  85. }
  86. CarIds.push_back(iter->attr.carId);
  87. }
  88. if(CarIds.empty()){
  89. SqlWriter sqlDel("DELETE FROM MIVA_DB.CarData");
  90. sqlDel << sqlRet;
  91. }else{
  92. std::string sql = "DELETE FROM MIVA_DB.CarData WHERE carId NOT IN (";
  93. vector<int>::iterator iter1;
  94. int i = 0;
  95. for(iter1=CarIds.begin();iter1!=CarIds.end();iter1++){
  96. if(i == (int)CarIds.size() - 1) sql += to_string(*iter1);
  97. else sql += to_string(*iter1) + ",";
  98. i++;
  99. }
  100. sql += ")";
  101. SqlWriter sqlDel(sql.c_str());
  102. sqlDel << sqlRet;
  103. }
  104. CarIds.clear();
  105. // 更新DataSources表
  106. for(iter=children.begin();iter!=children.end();iter++)
  107. {
  108. vector<CarBasicData>::iterator iter1;
  109. for(iter1=iter->children.begin(); iter1!=iter->children.end();iter1++){
  110. std::string sql = "SELECT * FROM MIVA_DB.DataSources WHERE dv_Id='?'";
  111. SqlWriter sqlSelect(sql.c_str());
  112. sqlSelect << iter1->attr.dvId << sqlRet;
  113. if(sqlRet.size() != 0){
  114. SqlWriter sqlUpdate("UPDATE MIVA_DB.DataSources SET CarId='?',Uri='?',PId='?',label='?',Del='?',addTime='?',updateTime='?',IP='?' WHERE dv_Id='?'");
  115. sqlUpdate << iter->attr.carId << iter1->attr.stream << iter1->pid << iter1->label << 0 << iter1->attr.addTime << iter1->attr.updateTime << iter1->attr.localIp << iter1->attr.dvId << sqlRet;
  116. }else{
  117. SqlWriter sqlInstert("INSERT INTO MIVA_DB.DataSources(CarId,Uri,Play,PId,label,Num,Del,addTime,updateTime,IP,dv_Id)\
  118. VALUES('?','?','?','?','?','?','?','?','?','?','?')");
  119. sqlInstert << iter->attr.carId<< iter1->attr.stream << 0 << iter1->pid << iter1->label << 0 << 0 << iter1->attr.addTime << iter1->attr.updateTime << iter1->attr.localIp << iter1->attr.dvId << sqlRet;
  120. }
  121. CarIds.push_back(iter1->attr.dvId);
  122. }
  123. }
  124. if(CarIds.empty()){
  125. SqlWriter sqlUpdate("UPDATE MIVA_DB.DataSources SET Del=1");
  126. sqlUpdate << sqlRet;
  127. }else{
  128. std::string sql = "UPDATE MIVA_DB.DataSources SET Del=1 WHERE dv_Id NOT IN (";
  129. vector<int>::iterator iter1;
  130. int i = 0;
  131. for(iter1=CarIds.begin();iter1!=CarIds.end();iter1++){
  132. if(i == (int)CarIds.size() - 1) sql += to_string(*iter1);
  133. else sql += to_string(*iter1) + ",";
  134. i++;
  135. }
  136. sql += ")";
  137. SqlWriter sqlUpdate(sql.c_str());
  138. sqlUpdate << sqlRet;
  139. }
  140. return true;
  141. }