// // Created by lloyd on 2020/12/8. // #include #include #include "gtaoiddao.h" #include "aoid_config_data.h" #include "../gtrunconf.h" #include "aoid_singlewell_config.h" #include "aoid_gk_model.h" #include "yaml-cpp/yaml.h" #include "iostream" #include "pthread.h" #include "../md5lib/MD5.h" #include "unistd.h" /* * * create:wsy * date:2020.12.10 * */ void *gtaoiddao::input_welldata_yml_path_update(void *args) { MD5 md5; aoid_config_data data; while (1) { //md5.reset(); std::string filename = input_welldata_yml_path; auto m = std::ifstream(filename.c_str()); md5.update3(m); std::string md5_temp_str = md5.toString(); //if (std::strcmp(input_welldata_yml_path_md5_str.c_str(),md5_temp_str.c_str())>=0)continue; if (input_welldata_yml_path_md5_str == md5_temp_str) {} else { input_welldata_yml_path_md5_str = md5.toString(); std::cout << "insert yaml content !" << std::endl; YAML::Node config = YAML::LoadFile(input_welldata_yml_path); data.jh = config["井号"].as(); data.bj = config["泵径"].as(); data.bs = config["泵深"].as(); data.hsl = config["含水率"].as(); data.smd = config["水密度"].as(); data.qyb = config["气液比"].as(); data.dym = config["动液面"].as(); data.yy = config["油压"].as(); data.ty = config["套压"].as(); data.hy = config["回压"].as(); add_aoid_config_data_toDB(data); } sleep(3); } } std::string gtaoiddao::input_welldata_yml_path_md5_str = ""; pthread_t gtaoiddao::hotupdateymlfilecontentthread_pid = 0; /* * add * aoid_singlegt_yield */ bool gtaoiddao::add_aoid_singlegt_yield(aoid_singlegt_yield d) { bool r = false; std::vector insertsql_fields_name; std::vector insertsql_fields_value; /*if (!d.well_id.empty()) { insertsql_fields_name.push_back("well_id"); insertsql_fields_value.push_back("'" + d.well_id + "'"); } else { std::cout << "Warning:必须指定well_id【唯一标识】" << std::endl; return r; }*/ if (!d.sgt.empty() && d.sgt.size() > 0) { std::string sgt_str = d.gt_trans_arraytostr(d.sgt); if (!sgt_str.empty()) { insertsql_fields_value.push_back("'" + sgt_str + "'"); insertsql_fields_name.push_back("sgt"); } } // bgt : beng gt if (!d.bgt.empty() && d.bgt.size() > 0) { std::string bgt_str = d.gt_trans_arraytostr(d.bgt); if (!bgt_str.empty()) { insertsql_fields_value.push_back("'" + bgt_str + "'"); insertsql_fields_name.push_back("bgt"); } } // refrencesgt : compare sgt if (!d.refrencesgt.empty() && d.refrencesgt.size() > 0) { std::string refrencesgt_str = d.gt_trans_arraytostr(d.refrencesgt); if (!refrencesgt_str.empty()) { insertsql_fields_value.push_back("'" + refrencesgt_str + "'"); insertsql_fields_name.push_back("refrencesgt"); } } { insertsql_fields_name.push_back("stroke"); insertsql_fields_value.push_back(std::to_string(d.stroke)); insertsql_fields_name.push_back("frequence"); insertsql_fields_value.push_back(std::to_string(d.frequence)); insertsql_fields_name.push_back("bj"); insertsql_fields_value.push_back(std::to_string(d.bj)); insertsql_fields_name.push_back("bs"); insertsql_fields_value.push_back(std::to_string(d.bs)); insertsql_fields_name.push_back("cmd"); insertsql_fields_value.push_back(std::to_string(d.cmd)); insertsql_fields_name.push_back("yzzj"); insertsql_fields_value.push_back(std::to_string(d.yzzj)); insertsql_fields_name.push_back("sxzh"); insertsql_fields_value.push_back(std::to_string(d.sxzh)); insertsql_fields_name.push_back("xxzh"); insertsql_fields_value.push_back(std::to_string(d.xxzh)); insertsql_fields_name.push_back("zdjg"); insertsql_fields_value.push_back("'" + d.zdjg + "'"); insertsql_fields_name.push_back("refrencewell_id"); insertsql_fields_value.push_back("'" + d.refrencewell_id + "'"); insertsql_fields_name.push_back("refrencecjsj"); insertsql_fields_value.push_back(d.refrencecjsj == "" ? "NULL" : "'" + d.refrencecjsj + "'"); insertsql_fields_name.push_back("liq_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.liq_prod_daily)); insertsql_fields_name.push_back("oil_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.oil_prod_daily)); insertsql_fields_name.push_back("gas_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.gas_prod_daily)); insertsql_fields_name.push_back("eczdjg"); insertsql_fields_value.push_back("'" + d.eczdjg + "'"); insertsql_fields_name.push_back("bx"); insertsql_fields_value.push_back(std::to_string(d.bx)); insertsql_fields_name.push_back("hsl"); insertsql_fields_value.push_back(std::to_string(d.hsl)); insertsql_fields_name.push_back("flag"); insertsql_fields_value.push_back(std::to_string(d.flag)); insertsql_fields_name.push_back("bdxs"); insertsql_fields_value.push_back(std::to_string(d.bdxs)); insertsql_fields_name.push_back("llpl"); insertsql_fields_value.push_back(std::to_string(d.llpl)); insertsql_fields_name.push_back("zcc"); insertsql_fields_value.push_back(std::to_string(d.zcc)); insertsql_fields_name.push_back("ycc"); insertsql_fields_value.push_back(std::to_string(d.ycc)); insertsql_fields_name.push_back("sjcc"); insertsql_fields_value.push_back(std::to_string(d.sjcc)); insertsql_fields_name.push_back("yxcc"); insertsql_fields_value.push_back(std::to_string(d.yxcc)); insertsql_fields_name.push_back("ccss"); insertsql_fields_value.push_back(std::to_string(d.ccss)); insertsql_fields_name.push_back("lsss"); insertsql_fields_value.push_back(std::to_string(d.lsss)); insertsql_fields_name.push_back("gyss"); insertsql_fields_value.push_back(std::to_string(d.gyss)); insertsql_fields_name.push_back("pumpdepth"); insertsql_fields_value.push_back(std::to_string(d.pumpdepth)); insertsql_fields_name.push_back("hy"); insertsql_fields_value.push_back(std::to_string(d.hy)); insertsql_fields_name.push_back("yy"); insertsql_fields_value.push_back(std::to_string(d.yy)); insertsql_fields_name.push_back("ty"); insertsql_fields_value.push_back(std::to_string(d.ty)); insertsql_fields_name.push_back("water_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.water_prod_daily)); insertsql_fields_name.push_back("scsj"); insertsql_fields_value.push_back(std::to_string(d.scsj)); insertsql_fields_name.push_back("qyb"); insertsql_fields_value.push_back(std::to_string(d.qyb)); insertsql_fields_name.push_back("stroke_ratio"); insertsql_fields_value.push_back(std::to_string(d.stroke_ratio)); insertsql_fields_name.push_back("djdy"); insertsql_fields_value.push_back(std::to_string(d.djdy)); insertsql_fields_name.push_back("hjwd"); insertsql_fields_value.push_back(std::to_string(d.hjwd)); insertsql_fields_name.push_back("ybdl"); insertsql_fields_value.push_back(std::to_string(d.ybdl)); insertsql_fields_name.push_back("xhqd"); insertsql_fields_value.push_back(std::to_string(d.xhqd)); insertsql_fields_name.push_back("sbh"); insertsql_fields_value.push_back("'" + d.sbh + "'"); insertsql_fields_name.push_back("prod_date"); insertsql_fields_value.push_back("'"+d.prod_date+"'"); } if (insertsql_fields_name.size() == 0)return r; std::string addsql = "insert into gtly.aoid_singlegt_yield("; std::string valuessql = "values("; for (int i = 0; i < insertsql_fields_name.size(); ++i) { if (i > 0) { addsql += ","; valuessql += ","; } addsql += insertsql_fields_name[i]; valuessql += insertsql_fields_value[i]; } addsql = addsql + ")" + valuessql + ")"; gtpgcnn _gtpgcnn; _gtpgcnn.openCnn(); r = _gtpgcnn.writeContent(addsql); _gtpgcnn.clearRes(); _gtpgcnn.closeCnn(); return r; } /* * add * add_aoid_daily_yield */ bool gtaoiddao::add_aoid_daily_yield(aoid_daily_yield d) { bool r = false; std::vector insertsql_fields_name; std::vector insertsql_fields_value; if (!d.well_id.empty()) { insertsql_fields_name.push_back("well_id"); insertsql_fields_value.push_back("'" + d.well_id + "'"); } else { std::cout << "Warning:必须指定well_id【唯一标识】" << std::endl; return r; } { insertsql_fields_name.push_back("liq_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.liq_prod_daily)); insertsql_fields_name.push_back("oil_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.oil_prod_daily)); insertsql_fields_name.push_back("water_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.water_prod_daily)); insertsql_fields_name.push_back("gas_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.gas_prod_daily)); insertsql_fields_name.push_back("bx"); insertsql_fields_value.push_back(std::to_string(d.bx)); insertsql_fields_name.push_back("llpl"); insertsql_fields_value.push_back(std::to_string(d.llpl)); insertsql_fields_name.push_back("prod_time"); insertsql_fields_value.push_back(std::to_string(d.prod_time)); insertsql_fields_name.push_back("clxs"); insertsql_fields_value.push_back(std::to_string(d.clxs)); insertsql_fields_name.push_back("stroke"); insertsql_fields_value.push_back(std::to_string(d.stroke)); insertsql_fields_name.push_back("frequence"); insertsql_fields_value.push_back(std::to_string(d.frequence)); insertsql_fields_name.push_back("water_cut"); insertsql_fields_value.push_back(std::to_string(d.water_cut)); insertsql_fields_name.push_back("bj"); insertsql_fields_value.push_back(std::to_string(d.bj)); insertsql_fields_name.push_back("bs"); insertsql_fields_value.push_back(std::to_string(d.bs)); insertsql_fields_name.push_back("cmd"); insertsql_fields_value.push_back(std::to_string(d.cmd)); insertsql_fields_name.push_back("yz"); insertsql_fields_value.push_back(std::to_string(d.yz)); insertsql_fields_name.push_back("scsj"); insertsql_fields_value.push_back(std::to_string(d.scsj)); insertsql_fields_name.push_back("yy"); insertsql_fields_value.push_back(std::to_string(d.yy)); insertsql_fields_name.push_back("hy"); insertsql_fields_value.push_back(std::to_string(d.hy)); insertsql_fields_name.push_back("ty"); insertsql_fields_value.push_back(std::to_string(d.ty)); insertsql_fields_name.push_back("bz"); insertsql_fields_value.push_back("'" + d.bz + "'"); insertsql_fields_name.push_back("sfyc"); insertsql_fields_value.push_back(std::to_string(d.sfyc)); insertsql_fields_name.push_back("dym"); insertsql_fields_value.push_back(std::to_string(d.dym)); insertsql_fields_name.push_back("rcy2"); insertsql_fields_value.push_back(std::to_string(d.rcy2)); insertsql_fields_name.push_back("rcu2"); insertsql_fields_value.push_back(std::to_string(d.rcu2)); insertsql_fields_name.push_back("rcs2"); insertsql_fields_value.push_back(std::to_string(d.rcs2)); insertsql_fields_name.push_back("a2_liq_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.a2_liq_prod_daily)); insertsql_fields_name.push_back("a2_oil_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.a2_oil_prod_daily)); insertsql_fields_name.push_back("a2_water_prod_daily"); insertsql_fields_value.push_back(std::to_string(d.a2_water_prod_daily)); insertsql_fields_name.push_back("yxgts"); insertsql_fields_value.push_back(std::to_string(d.yxgts)); insertsql_fields_name.push_back("errorgts"); insertsql_fields_value.push_back(std::to_string(d.errorgts)); insertsql_fields_name.push_back("zdjg"); insertsql_fields_value.push_back(d.zdjg); insertsql_fields_name.push_back("djdy"); insertsql_fields_value.push_back(std::to_string(d.djdy)); insertsql_fields_name.push_back("zyq"); insertsql_fields_value.push_back("'" + d.zyq + "'"); insertsql_fields_name.push_back("jlz"); insertsql_fields_value.push_back("'" + d.jlz + "'"); insertsql_fields_name.push_back("hjwd"); insertsql_fields_value.push_back(std::to_string(d.hjwd)); insertsql_fields_name.push_back("ybdl"); insertsql_fields_value.push_back(std::to_string(d.ybdl)); insertsql_fields_name.push_back("sbh"); insertsql_fields_value.push_back("'" + d.sbh + "'"); insertsql_fields_name.push_back("xhqd"); insertsql_fields_value.push_back(std::to_string(d.xhqd)); insertsql_fields_name.push_back("yl"); insertsql_fields_value.push_back(std::to_string(d.yl)); insertsql_fields_name.push_back("rzbz"); insertsql_fields_value.push_back("'" + d.rzbz + "'"); } if (insertsql_fields_name.size() == 0)return r; std::string addsql = "insert into gtly.aoid_daily_yield("; std::string valuessql = "values("; for (int i = 0; i < insertsql_fields_name.size(); ++i) { if (i > 0) { addsql += ","; valuessql += ","; } addsql += insertsql_fields_name[i]; valuessql += insertsql_fields_value[i]; } addsql = addsql + ")" + valuessql + ")"; gtpgcnn _gtpgcnn; _gtpgcnn.openCnn(); r = _gtpgcnn.writeContent(addsql); _gtpgcnn.clearRes(); _gtpgcnn.closeCnn(); return r; } /** * start a thread to listen yml file changes * wsy * @param data * @return */ bool gtaoiddao::get_aoid_config_data_and_open_hotupdate(aoid_config_data &data) { //auto r=get_aoid_config_data_fromDB(data); /*if (hotupdateymlfilecontentthread_pid == 0) { if (pthread_create((&hotupdateymlfilecontentthread_pid), NULL, input_welldata_yml_path_update, NULL) < 0) { printf("井筒基础数据:yaml配置失败\n"); } }*/ //input_welldata_yml_path_update(nullptr); bool r = false; try { YAML::Node config = YAML::LoadFile(input_welldata_yml_path); data.jh = config["井号"].as(); data.bj = config["泵径"].as(); data.bs = config["泵深"].as(); data.hsl = config["含水率"].as(); data.smd = config["水密度"].as(); data.qyb = config["气液比"].as(); data.dym = config["动液面"].as(); data.yy = config["油压"].as(); data.ty = config["套压"].as(); data.hy = config["回压"].as(); data.totalgtnum=config["一天内功图数量"].as(); r = true; } catch (const std::exception &e) { printf("井筒基础数据:yaml配置失败\n"); r = false; std::cerr << "Error:" << e.what() << std::endl; } return r; } /* * search * * aoid_config_data */ bool gtaoiddao::get_aoid_config_data_fromDB(aoid_config_data &data) { std::string sql = "select jh,bj,bs,hsl,smd,ymd,qyb,dym from gtly.aoid_config_data order by createtime limit 1"; bool r = false; gtpgcnn _gtpgcnn; _gtpgcnn.openCnn(); r = _gtpgcnn.readContent(sql); if (r) { int rows = _gtpgcnn.getRowsNumFromResult(); if (rows > 0) { rows = 0; data.jh = _gtpgcnn.getValueFromResultChar(rows, 0); data.bj = std::atof(_gtpgcnn.getValueFromResult(rows, 1).c_str()); data.bs = std::atof(_gtpgcnn.getValueFromResult(rows, 2).c_str()); data.hsl = std::atof(_gtpgcnn.getValueFromResult(rows, 3).c_str()); data.smd = std::atof(_gtpgcnn.getValueFromResult(rows, 4).c_str()); data.qyb = std::atof(_gtpgcnn.getValueFromResult(rows, 5).c_str()); data.dym = std::atof(_gtpgcnn.getValueFromResult(rows, 6).c_str()); r = true; } else r = false; } _gtpgcnn.clearRes(); _gtpgcnn.closeCnn(); return r; } /* * add * * aoid_config_data */ bool gtaoiddao::add_aoid_config_data_toDB(aoid_config_data data) { bool r = false; if (data.jh.empty()) { std::cout << "Warning:add gtly.aoid_config_data must--->jh" << std::endl; return r; } std::vector insertsql_fields_name; std::vector insertsql_fields_value; { insertsql_fields_name.push_back("jh"); insertsql_fields_value.push_back("'" + data.jh + "'"); insertsql_fields_name.push_back("bj"); insertsql_fields_value.push_back(std::to_string(data.bj)); insertsql_fields_name.push_back("bs"); insertsql_fields_value.push_back(std::to_string(data.bs)); insertsql_fields_name.push_back("hsl"); insertsql_fields_value.push_back(std::to_string(data.hsl)); insertsql_fields_name.push_back("smd"); insertsql_fields_value.push_back(std::to_string(data.smd)); insertsql_fields_name.push_back("ymd"); insertsql_fields_value.push_back(std::to_string(data.ymd)); insertsql_fields_name.push_back("qyb"); insertsql_fields_value.push_back(std::to_string(data.qyb)); insertsql_fields_name.push_back("dym"); insertsql_fields_value.push_back(std::to_string(data.dym)); } if (insertsql_fields_name.size() == 0)return r; std::string addsql = "insert into gtly.aoid_config_data("; std::string valuessql = "values("; for (int i = 0; i < insertsql_fields_name.size(); ++i) { if (i > 0) { addsql += ","; valuessql += ","; } addsql += insertsql_fields_name[i]; valuessql += insertsql_fields_value[i]; } addsql = addsql + ")" + valuessql + ")"; gtpgcnn _gtpgcnn; _gtpgcnn.openCnn(); r = _gtpgcnn.writeContent(addsql); _gtpgcnn.clearRes(); _gtpgcnn.closeCnn(); return r; } /* * update * * aoid_config_data */ bool gtaoiddao::udpate_aoid_config_data_toDB(aoid_config_data data) { bool r = false; std::vector updatesql_fields_name; std::vector updatesql_fields_value; if (!data.jh.empty()) { updatesql_fields_name.push_back("jh="); updatesql_fields_value.push_back("'" + data.jh + "'"); } else { std::cout << "Warning:update gtly.aoid_config_data must--->jh" << std::endl; return r; } if (updatesql_fields_name.size() == 0) return r; std::string updatesql = "update gtly.aoid_config_data set "; { updatesql_fields_name.push_back("bj="); updatesql_fields_value.push_back(std::to_string(data.bj)); updatesql_fields_name.push_back("bs="); updatesql_fields_value.push_back(std::to_string(data.bs)); updatesql_fields_name.push_back("hsl="); updatesql_fields_value.push_back(std::to_string(data.hsl)); updatesql_fields_name.push_back("smd="); updatesql_fields_value.push_back(std::to_string(data.smd)); updatesql_fields_name.push_back("ymd="); updatesql_fields_value.push_back(std::to_string(data.ymd)); updatesql_fields_name.push_back("dym="); updatesql_fields_value.push_back(std::to_string(data.dym)); } for (int i = 0; i < updatesql_fields_name.size(); ++i) { if (i > 0) { updatesql += ","; } updatesql += updatesql_fields_name[i]; updatesql += updatesql_fields_value[i]; } gtpgcnn _gtpgcnn; _gtpgcnn.openCnn(); r = _gtpgcnn.writeContent(updatesql); _gtpgcnn.clearRes(); _gtpgcnn.closeCnn(); return r; } /* * create:wsy * date:2020.12.09 * */ bool gtaoiddao::get_aoid_singlewell_config_fromDB(int funcid, aoid_singlewell_config &data) { std::string sql = "select gradient_1,gradient_2,gradient_3,gradient_4,gradient_5," "gradient_6,gradient_7,gradient_8,gradient_9,gradient_10," "dividenum_1,dividenum_2,dividenum_3,dividenum_4,dividenum_5," "dividenum_6,dividenum_7,dividenum_8,dividenum_9,dividenum_10 from gtly.aoid_singlewell_config where 1=1"; bool r = false; if (funcid <= 0) return r; gtpgcnn _gtpgcnn; _gtpgcnn.openCnn(); r = _gtpgcnn.readContent(sql); if (r) { int rows = _gtpgcnn.getRowsNumFromResult(); for (int i = 0; i < rows; ++i) { data.gradient_1 = std::atof(_gtpgcnn.getValueFromResult(i, 0).c_str()); data.gradient_2 = std::atof(_gtpgcnn.getValueFromResult(i, 1).c_str()); data.gradient_3 = std::atof(_gtpgcnn.getValueFromResult(i, 2).c_str()); data.gradient_4 = std::atof(_gtpgcnn.getValueFromResult(i, 3).c_str()); data.gradient_5 = std::atof(_gtpgcnn.getValueFromResult(i, 4).c_str()); data.gradient_6 = std::atof(_gtpgcnn.getValueFromResult(i, 5).c_str()); data.gradient_7 = std::atof(_gtpgcnn.getValueFromResult(i, 6).c_str()); data.gradient_8 = std::atof(_gtpgcnn.getValueFromResult(i, 7).c_str()); data.gradient_9 = std::atof(_gtpgcnn.getValueFromResult(i, 8).c_str()); data.gradient_10 = std::atof(_gtpgcnn.getValueFromResult(i, 9).c_str()); data.dividenum_1 = std::atof(_gtpgcnn.getValueFromResult(i, 10).c_str()); data.dividenum_2 = std::atof(_gtpgcnn.getValueFromResult(i, 11).c_str()); data.dividenum_3 = std::atof(_gtpgcnn.getValueFromResult(i, 12).c_str()); data.dividenum_4 = std::atof(_gtpgcnn.getValueFromResult(i, 13).c_str()); data.dividenum_5 = std::atof(_gtpgcnn.getValueFromResult(i, 14).c_str()); data.dividenum_6 = std::atof(_gtpgcnn.getValueFromResult(i, 15).c_str()); data.dividenum_7 = std::atof(_gtpgcnn.getValueFromResult(i, 16).c_str()); data.dividenum_8 = std::atof(_gtpgcnn.getValueFromResult(i, 17).c_str()); data.dividenum_9 = std::atof(_gtpgcnn.getValueFromResult(i, 18).c_str()); data.dividenum_10 = std::atof(_gtpgcnn.getValueFromResult(i, 19).c_str()); } } _gtpgcnn.clearRes(); _gtpgcnn.closeCnn(); /** * * TODO:wsy * get data from db ;where id */ return r; } /* * create:wsy * date:2020.12.09 * */ bool gtaoiddao::get_aoid_gk_model_fromDB(std::string gkname, aoid_gk_model &data) { bool r = false; if (gkname.empty()) return r; std::string sql = "select gkxs,result from gtly.aoid_gk_model where result='" + gkname + "' "; gtpgcnn _gtpgcnn; _gtpgcnn.openCnn(); r = _gtpgcnn.readContent(sql); if (r) { int rows = _gtpgcnn.getRowsNumFromResult(); r = rows > 0; int i = 0; data.gkxs = std::atof(_gtpgcnn.getValueFromResult(i, 0).c_str()); data.result = _gtpgcnn.getValueFromResult(i, 1); } _gtpgcnn.clearRes(); _gtpgcnn.closeCnn(); return r; }