ソースを参照

量液异常信息报警

gxt_xa_000000 3 年 前
コミット
9bba0af8e0

+ 13 - 0
src/main/java/com/gct/aoid/feignclient/WarningClint.java

@@ -0,0 +1,13 @@
1
+package com.gct.aoid.feignclient;
2
+
3
+import org.springframework.cloud.openfeign.FeignClient;
4
+import org.springframework.web.bind.annotation.PathVariable;
5
+import org.springframework.web.bind.annotation.RequestMapping;
6
+import org.springframework.web.bind.annotation.RequestMethod;
7
+
8
+@FeignClient(value = "warning",fallback = WarningHystrix.class)
9
+public interface WarningClint {
10
+
11
+    @RequestMapping(value = "/wnGkMsg/extractWorkingConditionDiagnosis/{WellID}",method = RequestMethod.GET)
12
+    String extractWorkingConditionDiagnosis(@PathVariable("WellID") String wellID,@PathVariable("date") String date) ;
13
+}

+ 9 - 0
src/main/java/com/gct/aoid/feignclient/WarningHystrix.java

@@ -0,0 +1,9 @@
1
+package com.gct.aoid.feignclient;
2
+
3
+public class WarningHystrix implements WarningClint{
4
+
5
+    @Override
6
+    public String extractWorkingConditionDiagnosis(String wellID, String date) {
7
+        return "error";
8
+    }
9
+}

+ 46 - 0
src/main/java/com/gct/aoid/job/AoidWarningJobDetail.java

@@ -0,0 +1,46 @@
1
+package com.gct.aoid.job;
2
+
3
+import com.gct.aoid.mapper.SumDataTaskMapper;
4
+import com.gct.aoid.service.AoidWarningService;
5
+import lombok.extern.slf4j.Slf4j;
6
+import org.quartz.JobExecutionContext;
7
+import org.quartz.JobExecutionException;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import org.springframework.scheduling.quartz.QuartzJobBean;
10
+
11
+import java.time.LocalDateTime;
12
+import java.time.format.DateTimeFormatter;
13
+
14
+/**
15
+ * class name: CalLiqDailyJobDetail
16
+ *
17
+ * @author lloyd
18
+ * @version 1.0
19
+ * @since 2021/5/21 上午10:24
20
+ */
21
+@Slf4j
22
+public class AoidWarningJobDetail extends QuartzJobBean {
23
+    @Autowired
24
+    public AoidWarningService aoidWarningService;
25
+
26
+    @Override
27
+    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
28
+        //sumDataTaskMapper= (SumDataTaskMapper)jobExecutionContext.getJobDetail().getJobDataMap().get("dao");
29
+        String jobName = jobExecutionContext.getJobDetail().getJobDataMap().getString(JobDataKey.JobName.getDec());
30
+        String jobGroup = jobExecutionContext.getJobDetail().getJobDataMap().getString(JobDataKey.JobGroup.getDec());
31
+        LocalDateTime localDateTime = LocalDateTime.now();
32
+        log.info("*===>AoidWarningJobDetail--JobName:{}--JobGroup:{},Time:{}", jobName, jobGroup, localDateTime.format(DateTimeFormatter.ISO_DATE_TIME));
33
+        //String date = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(localDateTime);
34
+       // String dateTime = date + " 00:00:00";
35
+        try {
36
+            String isWarning = aoidWarningService.isWarning("H257", "2021-05-15");
37
+            System.out.println(isWarning);
38
+        } catch (Exception e) {
39
+            e.printStackTrace();
40
+            throw new RuntimeException("aoidWaring error");
41
+        } finally {
42
+            log.info("<===*AoidWarningJobDetail,Time:{}", localDateTime.format(DateTimeFormatter.ISO_DATE_TIME));
43
+        }
44
+    }
45
+
46
+}

+ 1 - 0
src/main/java/com/gct/aoid/mapper/AoidDailyYieldMapper.java

@@ -17,4 +17,5 @@ public interface AoidDailyYieldMapper extends BaseMapper<AoidDailyYield> {
17 17
 
18 18
 
19 19
     List<AoidDailyYield> getAoidDailyYieldInfoByWellIdAndPorDatePeriod(@Param("wellId") String wellId,@Param("startDate") String startDate,@Param("endDate") String endDate);
20
+    String getAVGForA2LiqProdDaily(@Param("wellId") String wellId,@Param("date") String date);
20 21
 }

+ 4 - 0
src/main/java/com/gct/aoid/mapper/AoidDailyYieldMapper.xml

@@ -54,5 +54,9 @@
54 54
         where well_id=#{wellId} and prod_date >= #{startDate}::timestamp and  #{endDate}::timestamp >= prod_date
55 55
 
56 56
     </select>
57
+    <select id="getAVGForA2LiqProdDaily" resultType="string">
58
+        select avg(liq_prod_daily) from aoid_daily_yield where well_id= #{wellId} and
59
+            prod_date>=#{date}::timestamp - interval '30 day';
60
+    </select>
57 61
 
58 62
 </mapper>

+ 6 - 0
src/main/java/com/gct/aoid/service/AoidWarningService.java

@@ -0,0 +1,6 @@
1
+package com.gct.aoid.service;
2
+
3
+public interface AoidWarningService {
4
+
5
+    String isWarning(String wellId,String date);
6
+}

+ 62 - 0
src/main/java/com/gct/aoid/service/impl/AoidWarningServiceImpl.java

@@ -0,0 +1,62 @@
1
+package com.gct.aoid.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.gct.aoid.entity.AoidDailyYield;
5
+import com.gct.aoid.feignclient.WarningClint;
6
+import com.gct.aoid.mapper.AoidDailyYieldMapper;
7
+import com.gct.aoid.service.AoidWarningService;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+
10
+import java.math.BigDecimal;
11
+
12
+public class AoidWarningServiceImpl implements AoidWarningService {
13
+
14
+    @Autowired
15
+    AoidDailyYieldMapper aoidDailyYieldMapper;
16
+    @Autowired
17
+    WarningClint warningClint;
18
+    @Override
19
+    public String isWarning(String wellId,String date) {
20
+
21
+        //获取前一个月的平均产液量
22
+        String avgForA2LiqProdDaily = aoidDailyYieldMapper.getAVGForA2LiqProdDaily(wellId, date);
23
+        //获取当前的产液量
24
+        QueryWrapper<AoidDailyYield> wrapper = new QueryWrapper<>();
25
+        wrapper.eq("well_id",wellId).eq("prod_date",date);
26
+        AoidDailyYield aoidDailyYield = aoidDailyYieldMapper.selectOne(wrapper);
27
+        Double aDouble = Double.valueOf(avgForA2LiqProdDaily);
28
+        double liqProdDaily = aoidDailyYield.getLiqProdDaily();
29
+        double difference = aDouble-liqProdDaily;
30
+        String result = "";
31
+        int[] num = {15,10,5,1,0};
32
+        double[] coefficient = {0.1,0.15,0.2,0.25,0.5};
33
+        for (int i = 0 ;i< num.length; i++){
34
+            if (aDouble>=num[i]){
35
+                if (aDouble * (1-coefficient[i]) > liqProdDaily){
36
+                    result = "液量异常";
37
+                    break;
38
+                }else {
39
+                    result = "液量正常";
40
+                    break;
41
+                }
42
+            }
43
+        }
44
+        //液量异常井 提取工况诊断是否正常,不正常 进入油井工况诊断 得出结论并输出 yuancheng wn_gk_msg context
45
+        if (result.equals("液量异常")){
46
+            String extractWorkingConditionDiagnosis = warningClint.extractWorkingConditionDiagnosis(wellId,date);
47
+            if(extractWorkingConditionDiagnosis.equals("正常")){
48
+                //正常 提取该井压力库数据,判断是否在高压区 默认 低压区
49
+                //如处在低压区,查看 平均值与当日值的差是否大于0 ,大于0 分析为油井见效,输出结果;小于0 分析为能量不足,输出结果
50
+                //如在高压区,查看 平均值与当日值的差是否大于0 ,大于0 分析为油井见效,输出结果;小于0分析为地层堵塞,输出结果
51
+                if (difference > 0){
52
+                    result = "油井见效";
53
+                }else {
54
+                    result = "能量不足";
55
+                }
56
+            }else{
57
+                result = extractWorkingConditionDiagnosis;
58
+            }
59
+        }
60
+        return result;
61
+    }
62
+}

+ 6 - 0
src/main/resources/application-dev.yml

@@ -83,6 +83,12 @@ spring:
83 83
         JobGroup: CAL_TASK
84 84
         DelayMilliseconds: 1000
85 85
         IsRepeatable: true
86
+      jt2:
87
+        IntervalInSeconds: 600
88
+        JobName: AoidWarningJobDetail
89
+        JobGroup: AoidWarning
90
+        DelayMilliseconds: 1000
91
+        IsRepeatable: true
86 92
 # swagger 相关配置
87 93
 swagger:
88 94
   authorization: