ProduceParamController.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package com.hb.proj.analysis.controller;
  2. import java.io.File;
  3. import java.util.Date;
  4. import java.util.List;
  5. import org.apache.commons.lang3.StringUtils;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.data.redis.core.RedisTemplate;
  8. import org.springframework.validation.annotation.Validated;
  9. import org.springframework.web.bind.annotation.PostMapping;
  10. import org.springframework.web.bind.annotation.RequestBody;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RequestParam;
  13. import org.springframework.web.bind.annotation.RestController;
  14. import com.hb.proj.allconfig.AccessToken;
  15. import com.hb.proj.allconfig.BusinessException;
  16. import com.hb.proj.allconfig.SysLog;
  17. import com.hb.proj.analysis.service.IPRService;
  18. import com.hb.proj.analysis.service.ProduceParamCalculator;
  19. import com.hb.proj.analysis.service.ProduceParamService;
  20. import com.hb.proj.model.WellAnalysisParamPO;
  21. import com.hb.proj.model.WellMeasurePO;
  22. import com.hb.proj.model.WellMeasureVO;
  23. import com.hb.proj.model.WellPumpPO;
  24. import com.hb.proj.utils.DownloadUtils;
  25. import com.hb.proj.utils.RespVO;
  26. import com.hb.proj.utils.RespVOBuilder;
  27. import com.hb.xframework.dao.util.PageModel;
  28. import com.hb.xframework.util.MapUtils;
  29. import jakarta.servlet.http.HttpServletRequest;
  30. import jakarta.servlet.http.HttpServletResponse;
  31. import jakarta.validation.Valid;
  32. import jakarta.validation.constraints.NotBlank;
  33. import jakarta.validation.constraints.NotNull;
  34. @RestController
  35. @RequestMapping("/analysis/produce")
  36. @Validated
  37. public class ProduceParamController {
  38. @Autowired
  39. private ProduceParamService service;
  40. @Autowired
  41. private RedisTemplate<String,Object> redisTemplate;
  42. @Autowired
  43. private IPRService iprService;
  44. /**
  45. * 下载测量数据导入模板
  46. * @param request
  47. * @param response
  48. */
  49. @RequestMapping("/downloadMeasureXlsTmp")
  50. public void download(HttpServletRequest request,HttpServletResponse response) {
  51. String basePath=request.getSession().getServletContext().getRealPath("");
  52. File downloadFile=new File(basePath+File.separator+"download/tmp/measure.xls");
  53. if(!downloadFile.exists()) {
  54. throw new BusinessException("文件不存在");
  55. }
  56. String displayName="计量数据导入模板";
  57. DownloadUtils.download(downloadFile, displayName,response);
  58. }
  59. /**
  60. * 分页查询测量数据(附加的独立测量数据管理页面)
  61. */
  62. @RequestMapping("/queryMeasureParamList")
  63. public RespVO<PageModel<WellMeasureVO>> queryMeasureParamList(String wellName,
  64. Date startTime,Date endTime,
  65. @RequestParam(value = "currentPage", defaultValue = "1") Integer pageNum,
  66. @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
  67. return RespVOBuilder.ok(service.queryMeasureParamList(wellName,startTime,endTime, pageNum, pageSize));
  68. }
  69. /**
  70. * 删除单个计量数据
  71. * @param measureId 待删除记录id
  72. * @return
  73. */
  74. @RequestMapping("/deleteMeasureParam")
  75. @SysLog("删除计量数据:{arg0}")
  76. public RespVO<Object> deleteMeasureParam(@NotBlank(message="缺少记录号") String measureId){
  77. service.deleteMeasureParam(measureId);
  78. return RespVOBuilder.ok();
  79. }
  80. /**
  81. * 分页查询测量数据
  82. */
  83. @RequestMapping("/queryMeasureParam")
  84. public RespVO<PageModel<WellMeasurePO>> queryMeasureParam(@NotBlank(message="缺少井号") String wellId,
  85. Date startTime,Date endTime,
  86. @RequestParam(value = "currentPage", defaultValue = "1") Integer pageNum,
  87. @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
  88. return RespVOBuilder.ok(service.queryMeasureParam(wellId,startTime,endTime, pageNum, pageSize));
  89. }
  90. /**
  91. * 分页查询抽油泵数据
  92. */
  93. @RequestMapping("/queryPump")
  94. public RespVO<PageModel<WellPumpPO>> queryPump(@NotBlank(message="缺少井号") String wellId,
  95. Date startTime,Date endTime,
  96. @RequestParam(value = "currentPage", defaultValue = "1") Integer pageNum,
  97. @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
  98. return RespVOBuilder.ok(service.queryPump(wellId,startTime,endTime, pageNum, pageSize));
  99. }
  100. /**
  101. * 分页查询分析参数
  102. */
  103. @RequestMapping("/queryAnalysisParam")
  104. public RespVO<PageModel<WellAnalysisParamPO>> queryAnalysisParam(@NotBlank(message="缺少井号") String wellId,
  105. Date startTime,Date endTime,
  106. @RequestParam(value = "currentPage", defaultValue = "1") Integer pageNum,
  107. @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
  108. return RespVOBuilder.ok(service.queryAnalysisParam(wellId,startTime,endTime, pageNum, pageSize));
  109. }
  110. /**
  111. * 获得指定井的最新生成动态参数
  112. * @param wellId
  113. * @return
  114. */
  115. @RequestMapping("/getLastParam")
  116. public RespVO<Object> getLastParam(@NotBlank(message="缺少井号") String wellId){
  117. return RespVOBuilder.ok(MapUtils.build("measure", service.getLastMeasureParam(wellId),
  118. "analysis",service.getLastAnalysisParam(wellId),
  119. "pump",service.getLastPumpParam(wellId),
  120. "regression",iprService.getLastRegression(wellId)
  121. ));
  122. }
  123. /**
  124. * 保存油井测量参数
  125. * @param measure
  126. * @param token
  127. * @return
  128. */
  129. @RequestMapping("/saveMeasure")
  130. public RespVO<Object> saveMeasure(@Validated WellMeasurePO measure,AccessToken token){
  131. if(measure.getWellBtmCompCoe()!=null && measure.getWellBtmCompCoe()!=0) {
  132. measure.setSurfaceCompCoe(1/measure.getWellBtmCompCoe());
  133. }
  134. measure.setModifyBy(token!=null?token.getUsName():"unknow");
  135. if(StringUtils.isBlank(measure.getMeasureId())) {
  136. measure.setCreateBy(token!=null?token.getUsName():"unknow");
  137. service.addMeasureParam(measure);
  138. }
  139. else {
  140. WellMeasurePO dbPO=service.getMeasureParam(measure.getMeasureId());
  141. if(dbPO==null) {
  142. return RespVOBuilder.error("记录已不存在");
  143. }
  144. measure.setCreateTime(dbPO.getCreateTime());
  145. service.updateMeasureParam(measure);
  146. }
  147. return RespVOBuilder.ok();
  148. }
  149. /**
  150. * 油井测量参数(独立菜单-计量数据 只维护:测量日期、井名、含水率、计量液量)
  151. * 修改:
  152. * 新增:
  153. * @param measures
  154. * @param token
  155. * @return
  156. */
  157. @PostMapping("/saveMeasureList")
  158. public RespVO<Object> saveMeasureList(@RequestBody @Valid List<WellMeasurePO> measures,@NotNull(message="缺少登录信息") AccessToken token){
  159. if(measures==null || measures.size()==0) {
  160. return RespVOBuilder.error("缺少计量数据");
  161. }
  162. for(WellMeasurePO measure : measures) {
  163. if(StringUtils.isNotBlank(measure.getMeasureId())) {
  164. WellMeasurePO dbPO=service.getMeasureParam(measure.getMeasureId());
  165. if(dbPO==null) {
  166. return RespVOBuilder.error("被更新记录已不存在");
  167. }
  168. dbPO.setWaterRatio(measure.getWaterRatio());
  169. dbPO.setMeteredLiquidYield(measure.getMeteredLiquidYield());
  170. dbPO.setStartTime(measure.getStartTime());
  171. dbPO.setModifyBy(token.getUsName());
  172. service.updateMeasureParam(measure);
  173. }
  174. else {
  175. measure.setModifyBy(token.getUsName());
  176. measure.setCreateBy(token.getUsName());
  177. service.addMeasureParam(measure);
  178. }
  179. }
  180. return RespVOBuilder.ok();
  181. }
  182. /**
  183. * 保存抽油泵参数
  184. * @param pump
  185. * @param token
  186. * @return
  187. */
  188. @RequestMapping("/savePump")
  189. public RespVO<Object> savePump(@Validated WellPumpPO pump,AccessToken token){
  190. pump.setModifyBy(token!=null?token.getUsName():"unknow");
  191. ProduceParamCalculator.calcPumpExtra(pump);
  192. if(StringUtils.isBlank(pump.getPumpId())) {
  193. pump.setCreateBy(token!=null?token.getUsName():"unknow");
  194. service.addPumpParam(pump);
  195. }
  196. else {
  197. WellPumpPO dbPO=service.getPumpParam(pump.getPumpId());
  198. if(dbPO==null) {
  199. return RespVOBuilder.error("记录已不存在");
  200. }
  201. pump.setCreateTime(dbPO.getCreateTime());
  202. service.updatePumpParam(pump);
  203. }
  204. return RespVOBuilder.ok();
  205. }
  206. /**
  207. * 保存分析参数(只新增)
  208. * @param pump
  209. * @param token
  210. * @return
  211. */
  212. @RequestMapping("/saveAnalysisParam")
  213. public RespVO<Object> saveAnalysisParam(@Validated WellAnalysisParamPO analysisParam,AccessToken token){
  214. analysisParam.setModifyBy(token!=null?token.getUsName():"unknow");
  215. analysisParam.setCreateBy(analysisParam.getModifyBy());
  216. service.addAnalysisParam(analysisParam);
  217. return RespVOBuilder.ok();
  218. }
  219. /**
  220. * 计算分析参数
  221. * @param wellId
  222. * @return
  223. */
  224. @RequestMapping("/calcParam")
  225. public RespVO<Object> calcParam(@NotBlank(message="缺少井号") String wellId){
  226. WellMeasurePO measure=service.getLastMeasureParam(wellId);
  227. if(measure==null) {
  228. return RespVOBuilder.error("缺少该井的测量数据");
  229. }
  230. WellPumpPO pump=service.getLastPumpParam(wellId);
  231. if(pump==null) {
  232. return RespVOBuilder.error("缺少该井的泵数据");
  233. }
  234. /*
  235. WellAnalysisParamPO analysis=service.getLastAnalysisParam(wellId);
  236. //引用相同数据计算过
  237. if(analysis!=null && analysis.getRefMeasureId().equals(measure.getMeasureId()) && analysis.getRefPumpId().equals(pump.getPumpId()) ) {
  238. return RespVOBuilder.ok();
  239. }*/
  240. //实时采集数据:冲次(要求单位 次/min)
  241. Double freq=(Double)redisTemplate.opsForHash().get(wellId,"freq");
  242. //计算出新的分析参数
  243. WellAnalysisParamPO analysis=ProduceParamCalculator.calc(measure, pump, freq);
  244. analysis.setWellId(wellId);
  245. service.addAnalysisParam(analysis);
  246. return RespVOBuilder.ok(analysis);
  247. }
  248. }