Standard.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. #include "Standard.h"
  2. #include <QDebug>
  3. #include <QJsonDocument>
  4. #include <QJsonArray>
  5. #include <QJsonObject>
  6. #include <QByteArray>
  7. #include <QFile>
  8. //#define JSON_FILE_NAME "standards"
  9. //#define JSON_FILE_TAG "STANDARDS_JLWL"
  10. #define JSON_FILE_VERSION "V1.0"
  11. static StandardManager* _standardmanager = nullptr;
  12. StandardManager::StandardManager(QObject* parent)
  13. :QObject(parent)
  14. {
  15. }
  16. StandardManager::~StandardManager(){
  17. }
  18. StandardManager* StandardManager::instance(){
  19. if(nullptr == _standardmanager){
  20. _standardmanager = new StandardManager();
  21. }
  22. return _standardmanager;
  23. }
  24. void StandardManager::add_GB()
  25. {
  26. Standard std;
  27. std.standard_name = "国标";
  28. std.positive_target = 4.5;
  29. std.negative_target = -1.5;
  30. std.interval_time = 300;
  31. std.item_count = 4;
  32. std.item[0].oilcompartment_volume = 9500;
  33. std.item[0].system_threshold = 0.25;
  34. std.item[0].valve_threshold = 1.30;
  35. std.item[1].oilcompartment_volume = 5500;
  36. std.item[1].system_threshold = 0.38;
  37. std.item[1].valve_threshold = 1.30;
  38. std.item[2].oilcompartment_volume = 3800;
  39. std.item[2].system_threshold = 0.50;
  40. std.item[2].valve_threshold = 1.30;
  41. std.item[3].oilcompartment_volume = 0;
  42. std.item[3].system_threshold = 0.65;
  43. std.item[3].valve_threshold = 1.30;
  44. m_standard.push_back(std);
  45. }
  46. void StandardManager::load_standards()
  47. {
  48. QFile file("./standards.json");
  49. if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){
  50. //QJsonObject jsonObject;
  51. //jsonObject["name"] =""
  52. qDebug() << "load_standards file open failed ";
  53. return ;
  54. }
  55. QTextStream jsonstream(&file);
  56. jsonstream.setCodec("UTF-8");
  57. //jsonstream.readAll();
  58. qDebug() << "load_standards enter";
  59. QString jsonString = jsonstream.readAll();
  60. file.close();
  61. QJsonParseError json_error;
  62. QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8(), &json_error);
  63. if(json_error.error == QJsonParseError::NoError){
  64. QJsonObject rootObj = jsonDoc.object();
  65. QJsonArray jsonArray;
  66. QString str;
  67. qDebug() << "load_standards enter 22222222";
  68. if(rootObj.contains("version") && rootObj.value("version").isString()){
  69. str = rootObj.value("version").toString();
  70. //qDebug() << str ;
  71. if(str != JSON_FILE_VERSION){
  72. qDebug() << str << " not equal:" << JSON_FILE_VERSION;
  73. return;
  74. }
  75. }
  76. if(rootObj.contains("standards") && rootObj.value("standards").isArray()){
  77. jsonArray = rootObj.value("standards").toArray();
  78. for(int i=0; i < jsonArray.size(); i++){
  79. Standard std;
  80. std.item_count = 0;
  81. QJsonObject childObj = jsonArray[i].toObject();
  82. if(childObj.contains("name") && childObj.value("name").isString()){
  83. std.standard_name = childObj.value("name").toString();
  84. }
  85. if(childObj.contains("pt_v") && childObj.value("pt_v").isDouble()){
  86. std.positive_target = childObj.value("pt_v").toDouble();
  87. }
  88. if(childObj.contains("nt_v") && childObj.value("nt_v").isDouble()){
  89. std.negative_target = childObj.value("nt_v").toDouble();
  90. }
  91. if(childObj.contains("intervals") && childObj.value("intervals").isDouble()){
  92. std.interval_time = childObj.value("intervals").toInt();
  93. }
  94. if(childObj.contains("items") && childObj.value("items").isArray()){
  95. QJsonArray jsonArray_i;
  96. jsonArray_i = childObj.value("items").toArray();
  97. std.item_count = jsonArray_i.size();
  98. if(std.item_count > 4){
  99. std.item_count = 4;
  100. }
  101. qDebug() << "item_count:" << std.item_count;
  102. for(int j =0 ; j<std.item_count; j++){
  103. QJsonObject itemObj = jsonArray_i[j].toObject();
  104. if(itemObj.contains("volume") && itemObj.value("volume").isDouble()){
  105. std.item[j].oilcompartment_volume = itemObj.value("volume").toInt();
  106. }
  107. if(itemObj.contains("s_threshold") && itemObj.value("s_threshold").isDouble()){
  108. std.item[j].system_threshold = itemObj.value("s_threshold").toDouble();
  109. }
  110. if(itemObj.contains("v_threshold") && itemObj.value("v_threshold").isDouble()){
  111. std.item[j].valve_threshold = itemObj.value("v_threshold").toDouble();
  112. }
  113. }
  114. }
  115. if(true != std.standard_name.isEmpty() && std.item_count > 0){
  116. m_standard.push_back(std);
  117. qDebug() << " m_standard.push_back(std)" ;
  118. }
  119. }
  120. }
  121. }else{
  122. qDebug() << "json_error.error occurred";
  123. }
  124. }
  125. void StandardManager::save_standards()
  126. {
  127. QJsonArray stdArray;
  128. //QJsonArray itemArray;
  129. QJsonObject rootObj;
  130. rootObj.insert("version", JSON_FILE_VERSION);
  131. for(int i=0; i < static_cast<int>(m_standard.size()); i++){
  132. QJsonObject stdObj;
  133. QJsonArray itemArray;
  134. stdObj.insert("name", m_standard[i].standard_name);
  135. stdObj.insert("pt_v", m_standard[i].positive_target);
  136. stdObj.insert("nt_v", m_standard[i].negative_target);
  137. stdObj.insert("intervals", m_standard[i].interval_time);
  138. for(int j=0; j < m_standard[i].item_count; j++){
  139. QJsonObject itemObj;
  140. itemObj.insert("volume", m_standard[i].item[j].oilcompartment_volume);
  141. itemObj.insert("s_threshold", m_standard[i].item[j].system_threshold);
  142. itemObj.insert("v_threshold", m_standard[i].item[j].valve_threshold);
  143. itemArray.append(itemObj);
  144. }
  145. stdObj.insert("items", itemArray);
  146. stdArray.append(stdObj);
  147. }
  148. rootObj.insert("standards", stdArray);
  149. QJsonDocument jsonDoc;
  150. jsonDoc.setObject(rootObj);
  151. QByteArray byteArray = jsonDoc.toJson(QJsonDocument::Indented);
  152. QFile file("./standards.json");
  153. if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
  154. {
  155. qDebug() << QString("fail to open the file: %1, %2, %3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__);
  156. return;
  157. }
  158. QTextStream out(&file);
  159. out.setCodec("UTF-8");
  160. out << byteArray;
  161. file.close();
  162. qDebug() << QString("save standards ok : %1, %2, %3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__);
  163. }
  164. void StandardManager::init()
  165. {
  166. m_standard.clear();
  167. qDebug()<< QString("init enter : %1, %2, %3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__);
  168. load_standards();
  169. //check GB
  170. QString gb_name = "国标";
  171. bool gb_inside = false;
  172. for(int i=0; i < static_cast<int>(m_standard.size()); i++){
  173. if(gb_name == m_standard[i].standard_name){
  174. gb_inside = true;
  175. }
  176. }
  177. if(false == gb_inside){
  178. add_GB();
  179. }
  180. }
  181. QJsonObject StandardManager::get_names()
  182. {
  183. QJsonObject jsonObj;
  184. QJsonArray nameArray;
  185. //int num = static_cast<int>m_standard.size();
  186. jsonObj.insert("num", static_cast<int>(m_standard.size()));
  187. for(int i=0; i < static_cast<int>(m_standard.size()); i++){
  188. nameArray.append(m_standard[i].standard_name);
  189. }
  190. jsonObj.insert("names", nameArray);
  191. return jsonObj;
  192. }
  193. QJsonObject StandardManager::get_standard(const QString name)
  194. {
  195. QJsonObject stdObj;
  196. for(int i=0; i < static_cast<int>(m_standard.size()); i++){
  197. if(name == m_standard[i].standard_name){
  198. stdObj.insert("name", m_standard[i].standard_name);
  199. stdObj.insert("ptv", m_standard[i].positive_target);
  200. stdObj.insert("ntv", m_standard[i].negative_target);
  201. stdObj.insert("intervals", m_standard[i].interval_time);
  202. stdObj.insert("count", m_standard[i].item_count);
  203. QJsonArray itemArray;
  204. for(int j=0; j < m_standard[i].item_count; j++){
  205. QJsonObject itemObj;
  206. itemObj.insert("volume", m_standard[i].item[j].oilcompartment_volume);
  207. itemObj.insert("s_threshold", m_standard[i].item[j].system_threshold);
  208. itemObj.insert("v_threshold", m_standard[i].item[j].valve_threshold);
  209. itemArray.append(itemObj);
  210. }
  211. stdObj.insert("item", itemArray);
  212. break;
  213. }
  214. }
  215. return stdObj;
  216. }
  217. void StandardManager::remove_standard(const QString name)
  218. {
  219. bool bExist = false;
  220. for(int i=0; i < static_cast<int>(m_standard.size()); i++){
  221. if(name == m_standard[i].standard_name){
  222. bExist = true;
  223. m_standard.erase(m_standard.begin()+i);
  224. break;
  225. }
  226. }
  227. if(true == bExist){
  228. save_standards();
  229. }
  230. }
  231. bool StandardManager::add_standard(const QString& jsonStr )
  232. {
  233. bool bExist = false;
  234. Standard std;
  235. qDebug() << jsonStr;
  236. QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonStr.toUtf8());
  237. QJsonObject jsonObj = jsonDoc.object();
  238. std.item_count = 0;
  239. //QJsonObject childObj = jsonArray[i].toObject();
  240. if(jsonObj.contains("name") && jsonObj.value("name").isString()){
  241. std.standard_name = jsonObj.value("name").toString();
  242. }else{
  243. qDebug() << "add_standard no name";
  244. return false;
  245. }
  246. if(jsonObj.contains("ptv") && jsonObj.value("ptv").isDouble()){
  247. std.positive_target = jsonObj.value("ptv").toDouble();
  248. }else{
  249. qDebug() << "add_standard no ptv";
  250. return false;
  251. }
  252. if(jsonObj.contains("ntv") && jsonObj.value("ntv").isDouble()){
  253. std.negative_target = jsonObj.value("ntv").toDouble();
  254. }else{
  255. qDebug() << "add_standard no ntv";
  256. return false;
  257. }
  258. if(jsonObj.contains("intervals") && jsonObj.value("intervals").isDouble()){
  259. std.interval_time = jsonObj.value("intervals").toInt();
  260. }else{
  261. qDebug() << "add_standard no ntv";
  262. return false;
  263. }
  264. if(jsonObj.contains("count") && jsonObj.value("count").isDouble()){
  265. std.item_count = jsonObj.value("count").toInt();
  266. }else{
  267. qDebug() << "add_standard no count";
  268. return false;
  269. }
  270. if(jsonObj.contains("item") && jsonObj.value("item").isArray()){
  271. QJsonArray jsonArray_i;
  272. jsonArray_i = jsonObj.value("item").toArray();
  273. if(std.item_count > 4){
  274. std.item_count = 4;
  275. }
  276. for(int j =0 ; j<std.item_count; j++){
  277. QJsonObject itemObj = jsonArray_i[j].toObject();
  278. if(itemObj.contains("volume") && itemObj.value("volume").isDouble()){
  279. std.item[j].oilcompartment_volume = itemObj.value("volume").toInt();
  280. }
  281. if(itemObj.contains("s_threshold") && itemObj.value("s_threshold").isDouble()){
  282. std.item[j].system_threshold = itemObj.value("s_threshold").toDouble();
  283. }
  284. if(itemObj.contains("v_threshold") && itemObj.value("v_threshold").isDouble()){
  285. std.item[j].valve_threshold = itemObj.value("v_threshold").toDouble();
  286. }
  287. }
  288. }else{
  289. qDebug() << "add_standard no item";
  290. return false;
  291. }
  292. //check standard is exist?
  293. for(int i=0; i < static_cast<int>(m_standard.size()); i++){
  294. if(std.standard_name == m_standard[i].standard_name){
  295. bExist = true;
  296. m_standard[i].positive_target = std.positive_target;
  297. m_standard[i].negative_target = std.negative_target;
  298. m_standard[i].interval_time = std.interval_time;
  299. m_standard[i].item_count = std.item_count;
  300. for(int j=0; j< std.item_count; j++){
  301. m_standard[i].item[j].oilcompartment_volume = std.item[j].oilcompartment_volume;
  302. m_standard[i].item[j].system_threshold = std.item[j].system_threshold;
  303. m_standard[i].item[j].valve_threshold = std.item[j].valve_threshold;
  304. }
  305. }
  306. }
  307. if(false == bExist){
  308. m_standard.push_back(std);
  309. }
  310. save_standards();
  311. qDebug() << "add_standard ok";
  312. return true;
  313. }
  314. bool StandardManager::getStandard(const QString& name, Standard& standard)
  315. {
  316. for(int i=0; i < static_cast<int>(m_standard.size()); i++){
  317. if(name == m_standard[i].standard_name){
  318. standard = m_standard.at(i);
  319. return true;
  320. }
  321. }
  322. return false;
  323. }