BaseDataController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package com.gct.tools.etlcamelhuge.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.gct.tools.etlcamelhuge.entity.BaseDataBody;
  4. import io.swagger.annotations.Api;
  5. import io.swagger.annotations.ApiOperation;
  6. import org.omg.CORBA.IRObject;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import org.springframework.web.bind.annotation.PostMapping;
  9. import org.springframework.web.bind.annotation.RequestBody;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import javax.annotation.Resource;
  13. import javax.sql.DataSource;
  14. import java.math.BigDecimal;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.stream.Collectors;
  19. /**
  20. * class name: BaseDataController
  21. *
  22. * @author gxt
  23. * @version 1.0
  24. * @since 2021/8/30 下午3:51 周一
  25. */
  26. @RestController
  27. @RequestMapping("/BaseData")
  28. @Api(value = "BaseDataController", description = "基础数据操作controller")
  29. public class BaseDataController {
  30. private JdbcTemplate jdbcTemplate;
  31. @Resource(name = "oracle")
  32. DataSource oracleDataSource;
  33. @Resource(name = "centralbase")
  34. DataSource baseDataSource;
  35. @Resource(name = "gtsj")
  36. DataSource gtsjDataSource;
  37. @PostMapping("/saveDataToStatusDaily")
  38. @ApiOperation("从 A2 获取 数据插入到 centrlBase-StatusDaily 中,只需要传入查询时间")
  39. public JSONObject saveDataToStatusDaily(@RequestBody BaseDataBody baseDataBody) {
  40. JSONObject jsonObject = new JSONObject();
  41. int insertCount = 0;
  42. int updateDYMCount = 0;
  43. int updateCMDCount = 0;
  44. int updateOLiNozzleCount = 0;
  45. try {
  46. jdbcTemplate = new JdbcTemplate(oracleDataSource);
  47. String date = baseDataBody.getDate();
  48. String sql = "select distinct jh,rq,cyfs,yz,hysx , yysx ,tysx,bs,dym from DBA01 where rq = to_date('" + date + "','yyyy-MM-dd') and qyrq is not null ";
  49. List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
  50. for (Map<String, Object> map : list) {
  51. if (map.get("YZ") == null) map.put("YZ", "0.0");
  52. if (map.get("HYSX") == null) map.put("HYSX", "0.0");
  53. if (map.get("YYSX") == null) map.put("YYSX", "0.0");
  54. if (map.get("TYSX") == null) map.put("TYSX", "0.0");
  55. if (map.get("BS") == null) map.put("BS", "0.0");
  56. sql = "insert into centralbase.cb_pc_pro_wellbore_status_daily(well_id,prod_date,oil_prod_method,oil_nozzle,back_pres,tubing_pres,casing_pres,pump_depth) " +
  57. "values (?,?,?,?,?,?,?,?)";
  58. insertCount = insertBaseDataSourceOfStatusDaily(sql, map);
  59. sql = "select distinct jh , rq , dym from DBA01 where (jh,rq) in (SELECT jh,max(rq) rq FROM DBA01 WHERE dym is not null and rq<=to_date('"+date+"','yyyy-MM-dd') group by jh)";
  60. List<Map<String, Object>> dymIsNotNUllList = selectA2DataOfNotIsNullDYMOrBJ(sql);
  61. for (Map<String, Object> stringObjectMap : dymIsNotNUllList) {
  62. sql = "update centralbase.cb_pc_pro_wellbore_status_daily set start_pump_liq_level = '" + stringObjectMap.get("DYM") + "' where well_id = '" + stringObjectMap.get("JH") + "' and prod_date::date = '" + stringObjectMap.get("RQ") + "' ";
  63. updateDYMCount = updateBaseDataSourceOfStatusDaily(sql) + updateDYMCount;
  64. }
  65. sql = "select well_id,prod_date,start_pump_liq_level,pump_depth from centralbase.cb_pc_pro_wellbore_status_daily where prod_date = '" + map.get("RQ") + "' ";
  66. List<Map<String, Object>> CMDDataList = selectBaseDataSourceStatusDaily(sql);
  67. for (Map<String, Object> stringObjectMap : CMDDataList) {
  68. stringObjectMap.put("submergence_depth", null);
  69. if (stringObjectMap.get("start_pump_liq_level") != null && stringObjectMap.get("pump_depth") != null) {
  70. double cmd = Double.valueOf(stringObjectMap.get("pump_depth").toString()) - Double.valueOf(stringObjectMap.get("start_pump_liq_level").toString()) / 10;
  71. BigDecimal bd = new BigDecimal(cmd);
  72. double cmd1 = bd.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
  73. stringObjectMap.put("submergence_depth", cmd1);
  74. }
  75. //修改为batch 执行,用一个list 接受,在执行那个batchUpdate
  76. sql = " update centralbase.cb_pc_pro_wellbore_status_daily set submergence_depth = '" + stringObjectMap.get("submergence_depth") + "' where well_id = '" + stringObjectMap.get("well_id") + "' and prod_date = '" + stringObjectMap.get("prod_date") + "' ";
  77. updateCMDCount = updateBaseDataSourceOfStatusDaily(sql) + updateCMDCount;
  78. }
  79. sql = "select distinct jh , rq , bj from DBA01 where (jh,rq) in (SELECT jh,max(rq) rq FROM DBA01 WHERE bj is not null and rq<= to_date('"+date+"','yyyy-MM-dd') group by jh)";
  80. List<Map<String, Object>> oilNozzleList = selectA2DataOfNotIsNullDYMOrBJ(sql);
  81. for (Map<String, Object> stringObjectMap : oilNozzleList) {
  82. sql = " update centralbase.cb_pc_pro_wellbore_status_daily set oil_nozzle = '" + stringObjectMap.get("BJ") + "' where well_id ='" + stringObjectMap.get("JH") + "' and prod_date='" + stringObjectMap.get("RQ") + "' ";
  83. updateOLiNozzleCount = updateBaseDataSourceOfStatusDaily(sql) + updateOLiNozzleCount;
  84. }
  85. insertCount++;
  86. }
  87. } catch (Exception e) {
  88. e.printStackTrace();
  89. jsonObject.put("error", e.getMessage());
  90. } finally {
  91. jsonObject.put("插入条数", insertCount);
  92. jsonObject.put("修改DYM条数", updateDYMCount);
  93. jsonObject.put("修改CMD条数", updateCMDCount);
  94. jsonObject.put("修改OliNozzle条数", updateOLiNozzleCount);
  95. }
  96. return jsonObject;
  97. }
  98. public int insertBaseDataSourceOfStatusDaily(String sql, Map<String, Object> map) {
  99. jdbcTemplate = new JdbcTemplate(baseDataSource);
  100. if (map.isEmpty()) return 0;
  101. return jdbcTemplate.update(sql, map.get("JH"), map.get("RQ"), map.get("CYFS"), map.get("YZ"), map.get("HYSX"), map.get("YYSX"), map.get("BS"), map.get("DYM"));
  102. }
  103. public List<Map<String, Object>> selectA2DataOfNotIsNullDYMOrBJ(String sql) {
  104. jdbcTemplate = new JdbcTemplate(oracleDataSource);
  105. return jdbcTemplate.queryForList(sql);
  106. }
  107. public List<Map<String, Object>> selectBaseDataSourceStatusDaily(String sql) {
  108. jdbcTemplate = new JdbcTemplate(baseDataSource);
  109. return jdbcTemplate.queryForList(sql);
  110. }
  111. public int updateBaseDataSourceOfStatusDaily(String sql) {
  112. jdbcTemplate = new JdbcTemplate(baseDataSource);
  113. return jdbcTemplate.update(sql);
  114. }
  115. @PostMapping("/saveDataToVolDaily")
  116. @ApiOperation("从 A2 获取 数据插入到 centrlBase-VolDaily 中,只需要传入查询时间")
  117. public JSONObject saveVolDaily(@RequestBody BaseDataBody baseDataBody) {
  118. JSONObject jsonObject = new JSONObject();
  119. int insertCount = 0;
  120. int updateLiqOliDailyCount = 0;
  121. try {
  122. jdbcTemplate = new JdbcTemplate(oracleDataSource);
  123. String date = baseDataBody.getDate();
  124. String sql = " select distinct jh,rq,scsj, rcyl1,rcyl,rcql,hs, bz from DBA01 where rq = to_date('" + date + "','yyyy-MM-dd') and qyrq is not null ";
  125. List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
  126. for (Map<String, Object> map : list) {
  127. if (map.get("SCSJ") == null) map.put("SCSJ", "0.0");
  128. if (map.get("RCYL1") == null) map.put("RCYL1", "0.0");
  129. if (map.get("RCYL") == null) map.put("RCYL", "0.0");
  130. if (map.get("RCQL") == null) map.put("RCQL", "0.0");
  131. if (map.get("HS") == null) map.put("HS", "0.0");
  132. if (map.get("BZ") == null) map.put("BZ", "");
  133. map.put("RCSL", -1);
  134. map.put("QYB", -1);
  135. map.put("SQB", -1);
  136. if (map.get("RCQL") != null && map.get("RCYL") != null && !map.get("RCYL").equals("0.0") && map.get("RCYL") != "0.0") {
  137. double qyb = Double.valueOf(map.get("RCQL").toString()) / Double.valueOf(map.get("RCYL").toString());
  138. if (!Double.isNaN(qyb) && !Double.isInfinite(qyb)) {
  139. BigDecimal bd = new BigDecimal(qyb);
  140. double d1 = bd.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
  141. map.put("QYB", d1);
  142. }
  143. }
  144. if (map.get("RCYL1") != null && map.get("HS") != null && !map.get("HS").equals("0.0") && map.get("HS") != "0.0") {
  145. double rcsl = (Double.valueOf(map.get("RCYL1").toString()) * Double.valueOf(map.get("HS").toString())) / 100;
  146. if (!Double.isNaN(rcsl) && !Double.isInfinite(rcsl)) {
  147. BigDecimal bd = new BigDecimal(rcsl);
  148. double d1 = bd.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
  149. map.put("RCSL", d1);
  150. }
  151. }
  152. if (map.get("RCQL") != null && map.get("RCSL") != null && !map.get("RCQL").equals("0.0") && map.get("RCQL") != "0.0") {
  153. double sqb = Double.valueOf(map.get("RCSL").toString()) / Double.valueOf(map.get("RCQL").toString());
  154. if (!Double.isNaN(sqb) && !Double.isInfinite(sqb)) {
  155. BigDecimal bd = new BigDecimal(sqb);
  156. double d1 = bd.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
  157. map.put("SQB", d1);
  158. }
  159. }
  160. if (!map.containsKey("SMD")) {
  161. map.put("SMD", 1);
  162. }
  163. if (!map.containsKey("YMD")) {
  164. map.put("YMD", 0.85);
  165. }
  166. sql = "insert into centralbase.cb_pc_pro_wellbore_vol_daily(well_id,prod_date,prod_time,liq_prod_daily,oil_prod_daily,gas_prod_daily,water_cut,remarks,gas_oil_ratio,water_prod_daily,water_gas_ratio,surface_crude_water_density,surface_crude_oil_density) " +
  167. "values(?,?,?,?,?,?,?,?,?,?,?,?,?) ";
  168. insertCount = insertBaseDataVolDaily(sql, map) + insertCount;
  169. sql = "select distinct jh,rq,scsj, rcyl1,rcyl,rcql,hs, bz from DBA01 where rq = to_date('" + date + "','yyyy-MM-dd') and qyrq is not null ";
  170. updateLiqOliDailyCount = updateBaseDataVolDaily(sql) + updateLiqOliDailyCount;
  171. }
  172. } catch (Exception e) {
  173. jsonObject.put("error", e.getMessage());
  174. } finally {
  175. jsonObject.put("插入条数", insertCount);
  176. jsonObject.put("修改liqOliDaily条数", updateLiqOliDailyCount);
  177. }
  178. return jsonObject;
  179. }
  180. public int insertBaseDataVolDaily(String sql, Map<String, Object> map) {
  181. jdbcTemplate = new JdbcTemplate(baseDataSource);
  182. if (map.isEmpty()) return 0;
  183. return jdbcTemplate.update(sql, map.get("JH"), map.get("RQ"), map.get("SCSJ"), map.get("RCYL1"), map.get("RCYL"), map.get("RCQL"), map.get("HS"), map.get("BZ"), map.get("QYB"), map.get("RCSL"), map.get("SQB"), map.get("SMD"), map.get("YMD"));
  184. }
  185. public int updateBaseDataVolDaily(String sql) {
  186. jdbcTemplate = new JdbcTemplate(baseDataSource);
  187. return jdbcTemplate.update(sql);
  188. }
  189. @PostMapping("/getNeedRunTimeData")
  190. @ApiOperation("查询天安的数据库 只需要传过来 需要查询的sql 就行")
  191. public JSONObject getNeedRunTimeData(@RequestBody BaseDataBody baseDataBody){
  192. JSONObject jsonObject = new JSONObject();
  193. jdbcTemplate = new JdbcTemplate(gtsjDataSource);
  194. try{
  195. List<Map<String, Object>> list = jdbcTemplate.queryForList(baseDataBody.getSql());
  196. jsonObject.put("RunTimedata",list);
  197. }catch (Exception e){
  198. jsonObject.put("error",e.getMessage());
  199. }
  200. return jsonObject;
  201. }
  202. @PostMapping("/getNeedA2Data")
  203. @ApiOperation("查询A2数据库 只需要传过来 需要查询的sql 就行")
  204. public JSONObject getNeedA2Data(@RequestBody BaseDataBody baseDataBody){
  205. JSONObject jsonObject = new JSONObject();
  206. jdbcTemplate = new JdbcTemplate(oracleDataSource);
  207. try{
  208. List<Map<String, Object>> list = jdbcTemplate.queryForList(baseDataBody.getSql());
  209. jsonObject.put("A2data",list);
  210. }catch (Exception e){
  211. jsonObject.put("error",e.getMessage());
  212. }
  213. return jsonObject;
  214. }
  215. @PostMapping("/getA2WellSorceData")
  216. @ApiOperation("查询A2数据库 并且和 wellSource 做对比 只填写需要查询A2Data 的时间就行")
  217. public JSONObject getA2WellSorceData(@RequestBody BaseDataBody baseDataBody){
  218. JSONObject jsonObject = new JSONObject();
  219. jdbcTemplate = new JdbcTemplate(oracleDataSource);
  220. try{
  221. String sql = "select distinct jh from DBA01 where rq = to_date('"+baseDataBody.getDate()+"','yyyy-MM-dd') and qyrq is not null ";
  222. List<Map<String, Object>> A2DataList = jdbcTemplate.queryForList(sql);
  223. List<Map<String, Object>> wellSourceList = getWellSource();
  224. Object collect = A2DataList.stream().filter(item -> !wellSourceList.contains(item)).collect(Collectors.toList());
  225. Object collect1 = wellSourceList.stream().filter(item -> !A2DataList.contains(item)).collect(Collectors.toList());
  226. jsonObject.put("wellSource 中不存在 A2 的井号为",collect);
  227. jsonObject.put("A2 中不存在 wellSource 的井号为",collect1);
  228. }catch (Exception e){
  229. jsonObject.put("error",e.getMessage());
  230. }
  231. return jsonObject;
  232. }
  233. public List<Map<String, Object>> getWellSource(){
  234. List<Map<String, Object>> list = new ArrayList<>();
  235. try{
  236. jdbcTemplate = new JdbcTemplate(baseDataSource);
  237. String sql = " select distinct well_id from centralbase.cb_cd_well_source ";
  238. list = jdbcTemplate.queryForList(sql);
  239. }catch (Exception e){
  240. e.printStackTrace();
  241. }
  242. return list;
  243. }
  244. }