Standard.cpp 12 KB

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