|
@@ -10,9 +10,13 @@ import org.springframework.context.annotation.Configuration;
|
10
|
10
|
import org.springframework.util.StringUtils;
|
11
|
11
|
|
12
|
12
|
import javax.annotation.Resource;
|
|
13
|
+import java.io.IOException;
|
|
14
|
+import java.io.Reader;
|
13
|
15
|
import java.lang.management.MemoryMXBean;
|
14
|
16
|
import java.math.BigDecimal;
|
15
|
17
|
import java.math.RoundingMode;
|
|
18
|
+import java.sql.Clob;
|
|
19
|
+import java.sql.SQLException;
|
16
|
20
|
import java.time.LocalDateTime;
|
17
|
21
|
import java.time.format.DateTimeFormatter;
|
18
|
22
|
import java.util.*;
|
|
@@ -63,6 +67,7 @@ public class CamelJDBCCofRealTimeConfiguration {
|
63
|
67
|
public void sendDataToRocketMQ(String wellName, String wellId, String prodDate, Double stroke_length, Double stroke_frequency, String sgt) {
|
64
|
68
|
String orgId = "0";
|
65
|
69
|
DiagnoseMsg diagnoseMsg = new DiagnoseMsg(wellId, wellName, orgId, prodDate, sgt, LocalDateTime.now().toString(), stroke_length, stroke_frequency);
|
|
70
|
+ System.out.println(diagnoseMsg);
|
66
|
71
|
sendMsgRunTime++;
|
67
|
72
|
producer.send(diagnoseMsg);
|
68
|
73
|
}
|
|
@@ -70,6 +75,25 @@ public class CamelJDBCCofRealTimeConfiguration {
|
70
|
75
|
@Resource(name = "diagnoseMessageProducer")
|
71
|
76
|
private MessageProducer producer;
|
72
|
77
|
|
|
78
|
+ private String clobToString(Clob clob){
|
|
79
|
+ StringBuilder sb = new StringBuilder();
|
|
80
|
+ if (clob != null) {
|
|
81
|
+ try (Reader reader = clob.getCharacterStream()) {
|
|
82
|
+ char[] buffer = new char[1024];
|
|
83
|
+ int bytesRead;
|
|
84
|
+ while ((bytesRead = reader.read(buffer)) != -1) {
|
|
85
|
+ sb.append(buffer, 0, bytesRead);
|
|
86
|
+ }
|
|
87
|
+ } catch (SQLException e) {
|
|
88
|
+ throw new RuntimeException(e);
|
|
89
|
+ } catch (IOException e) {
|
|
90
|
+ throw new RuntimeException(e);
|
|
91
|
+ }
|
|
92
|
+ }
|
|
93
|
+ return sb.toString();
|
|
94
|
+
|
|
95
|
+ }
|
|
96
|
+
|
73
|
97
|
@Bean
|
74
|
98
|
public RouteBuilder routeBuilderWithRealTime() {
|
75
|
99
|
return new RouteBuilder() {
|
|
@@ -82,10 +106,14 @@ public class CamelJDBCCofRealTimeConfiguration {
|
82
|
106
|
.split(body()).process(exchange -> {
|
83
|
107
|
HashMap body = exchange.getIn().getBody(HashMap.class);
|
84
|
108
|
exchange.getIn().setHeader("well_id", body.get("well_id"));
|
85
|
|
- exchange.getIn().setHeader("sgt_last_time", body.get("sgt_last_time"));
|
|
109
|
+// System.out.println(body.get("well_id"));
|
|
110
|
+ if (Objects.isNull(body.get("sgt_last_time")))body.put("sgt_last_time"
|
|
111
|
+ ,LocalDateTime.now().minusHours(4).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
112
|
+ exchange.getIn().setHeader("sgt_last_time", body.get("sgt_last_time").toString().substring(0,19));
|
86
|
113
|
})
|
87
|
|
- .setBody(simple("select distinct well_name,dyna_create_time,check_date,displacement,disp_load,stroke,frequency,susp_max_load,susp_min_load" +
|
88
|
|
- " from DEFAULT_GONGTU where well_name='${header.well_id}' and dyna_create_time >= '${header.sgt_last_time}' limit 50 "))
|
|
114
|
+ .setBody(simple("select WELL_ID,WELL_NAME,DYNA_CREATE_TIME,CHECK_DATE,DISPLACEMENT,DISP_LOAD,STROKE,FREQUENCY,SUSP_MAX_LOAD,SUSP_MIN_LOAD" +
|
|
115
|
+ " from DEFAULT_GONGTU where CHECK_DATE >= to_date('${header.sgt_last_time}','yyyy-mm-dd hh24:mi:ss') " +
|
|
116
|
+ "and well_id='${header.well_id}' and rownum<50 "))
|
89
|
117
|
.to("jdbc:oracle")
|
90
|
118
|
.process(exchange -> {
|
91
|
119
|
sendMsgRunTime = 0;
|
|
@@ -93,14 +121,22 @@ public class CamelJDBCCofRealTimeConfiguration {
|
93
|
121
|
.split(body()).process(exchange -> {
|
94
|
122
|
Message in = exchange.getIn();
|
95
|
123
|
HashMap<String, Object> aRow = in.getBody(HashMap.class);
|
96
|
|
- String prod_date = aRow.get("dyna_create_time").toString().split("\\+")[0];
|
97
|
|
- aRow.put("dyna_create_time", prod_date);
|
|
124
|
+ String prod_date = aRow.get("DYNA_CREATE_TIME").toString().split("\\+")[0];
|
|
125
|
+ aRow.put("DYNA_CREATE_TIME", prod_date);
|
98
|
126
|
aRow.put("sgt", "");
|
99
|
|
- if (!StringUtils.isEmpty(aRow.get("displacement")) && !StringUtils.isEmpty(aRow.get("disp_load"))) {
|
100
|
|
- String[] displacements = aRow.get("displacement").toString().split(";");//10 四舍五入
|
101
|
|
- String[] disp_loads = aRow.get("disp_load").toString().split(";");
|
102
|
|
- Double susp_max_load = max(disp_loads);
|
103
|
|
- Double susp_min_load = min(disp_loads);
|
|
127
|
+ //swap table error design column
|
|
128
|
+ Object tempObj = aRow.get("STROKE");
|
|
129
|
+ aRow.put("STROKE",aRow.get("FREQUENCY"));
|
|
130
|
+ aRow.put("FREQUENCY",tempObj);
|
|
131
|
+ if (!StringUtils.isEmpty(aRow.get("DISPLACEMENT")) && !StringUtils.isEmpty(aRow.get("DISP_LOAD"))) {
|
|
132
|
+ String[] displacements = clobToString((Clob) aRow.get("DISPLACEMENT")).split(",");//10 四舍五入
|
|
133
|
+ for (int i = 0; i < displacements.length; i++) {
|
|
134
|
+ displacements[i] = Double.toString(Double.parseDouble(displacements[i])/10);
|
|
135
|
+ }
|
|
136
|
+// System.out.println("disp="+Arrays.deepToString(displacements));
|
|
137
|
+ String[] disp_loads = clobToString((Clob) aRow.get("DISP_LOAD")).split(",");
|
|
138
|
+ Double SUSP_MAX_LOAD = max(disp_loads);
|
|
139
|
+ Double SUSP_MIN_LOAD = min(disp_loads);
|
104
|
140
|
String sgt = "";
|
105
|
141
|
for (int i = 0; i < displacements.length; i++) {
|
106
|
142
|
sgt = sgt + displacements[i] + "," + disp_loads[i] + ",";
|
|
@@ -112,15 +148,15 @@ public class CamelJDBCCofRealTimeConfiguration {
|
112
|
148
|
}
|
113
|
149
|
Double[][] doubles = SGTUtil.encodeToDoubleArray(w);
|
114
|
150
|
aRow.put("sgt", SGTUtil.encodeToString(doubles));
|
115
|
|
- aRow.put("susp_max_load", susp_max_load);
|
116
|
|
- aRow.put("susp_min_load", susp_min_load);
|
|
151
|
+ aRow.put("SUSP_MAX_LOAD", SUSP_MAX_LOAD);
|
|
152
|
+ aRow.put("SUSP_MIN_LOAD", SUSP_MIN_LOAD);
|
117
|
153
|
}
|
118
|
154
|
//对于位移没有数据,所有数据都在载荷中的特殊数据做特别处理
|
119
|
|
- if (StringUtils.isEmpty(aRow.get("displacement")) && !StringUtils.isEmpty(aRow.get("disp_load"))) {
|
120
|
|
- String disp_load = aRow.get("disp_load").toString().replaceAll(";", ",");
|
121
|
|
- Double[][] doubles = SGTUtil.encodeToDoubleArray(disp_load);
|
|
155
|
+ if (StringUtils.isEmpty(aRow.get("DISPLACEMENT")) && !StringUtils.isEmpty(aRow.get("DISP_LOAD"))) {
|
|
156
|
+ String DISP_LOAD = aRow.get("DISP_LOAD").toString().replaceAll(";", ",");
|
|
157
|
+ Double[][] doubles = SGTUtil.encodeToDoubleArray(DISP_LOAD);
|
122
|
158
|
aRow.put("sgt", SGTUtil.encodeToString(doubles));
|
123
|
|
- String[] split = disp_load.split(",");
|
|
159
|
+ String[] split = DISP_LOAD.split(",");
|
124
|
160
|
List<String> list = new ArrayList<>();
|
125
|
161
|
for (int i = 0; i < split.length; i++) {
|
126
|
162
|
if (i % 2 != 0) {
|
|
@@ -129,43 +165,44 @@ public class CamelJDBCCofRealTimeConfiguration {
|
129
|
165
|
}
|
130
|
166
|
}
|
131
|
167
|
String[] loads = list.toArray(new String[0]);
|
132
|
|
- Double susp_max_load = null;
|
133
|
|
- Double susp_min_load = null;
|
|
168
|
+ Double SUSP_MAX_LOAD = null;
|
|
169
|
+ Double SUSP_MIN_LOAD = null;
|
134
|
170
|
if (loads.length > 0) {
|
135
|
|
- susp_max_load = max(loads);
|
136
|
|
- susp_min_load = min(loads);
|
|
171
|
+ SUSP_MAX_LOAD = max(loads);
|
|
172
|
+ SUSP_MIN_LOAD = min(loads);
|
137
|
173
|
}
|
138
|
|
- aRow.put("susp_max_load", susp_max_load);
|
139
|
|
- aRow.put("susp_min_load", susp_min_load);
|
|
174
|
+ aRow.put("SUSP_MAX_LOAD", SUSP_MAX_LOAD);
|
|
175
|
+ aRow.put("SUSP_MIN_LOAD", SUSP_MIN_LOAD);
|
140
|
176
|
}
|
141
|
|
- aRow.putIfAbsent("stroke", "0.0");
|
142
|
|
- aRow.putIfAbsent("frequency", "0.0");
|
143
|
|
- aRow.putIfAbsent("susp_max_load", "0.0");
|
144
|
|
- aRow.putIfAbsent("susp_min_load", "0.0");
|
145
|
|
- if (!StringUtils.isEmpty(aRow.get("frequency"))) {
|
146
|
|
- BigDecimal bd = new BigDecimal(aRow.get("frequency").toString());
|
147
|
|
- double frequency = bd.setScale(1, RoundingMode.HALF_UP).doubleValue();
|
148
|
|
- aRow.put("frequency", frequency);
|
|
177
|
+ aRow.putIfAbsent("STROKE", "0.0");
|
|
178
|
+ aRow.putIfAbsent("FREQUENCY", "0.0");
|
|
179
|
+ aRow.putIfAbsent("SUSP_MAX_LOAD", "0.0");
|
|
180
|
+ aRow.putIfAbsent("SUSP_MIN_LOAD", "0.0");
|
|
181
|
+ if (!StringUtils.isEmpty(aRow.get("FREQUENCY"))) {
|
|
182
|
+ BigDecimal bd = new BigDecimal(aRow.get("FREQUENCY").toString());
|
|
183
|
+ double FREQUENCY = bd.setScale(1, RoundingMode.HALF_UP).doubleValue();
|
|
184
|
+ aRow.put("FREQUENCY", FREQUENCY);
|
149
|
185
|
}
|
150
|
|
- if (!StringUtils.isEmpty(aRow.get("stroke"))) {
|
151
|
|
- double stroke1 = Double.parseDouble(aRow.get("stroke").toString());
|
|
186
|
+ if (!StringUtils.isEmpty(aRow.get("STROKE"))) {
|
|
187
|
+ double stroke1 = Double.parseDouble(aRow.get("STROKE").toString());
|
152
|
188
|
BigDecimal bd = new BigDecimal(stroke1);
|
153
|
|
- double stroke = bd.setScale(1, RoundingMode.HALF_UP).doubleValue();
|
154
|
|
- aRow.put("stroke", stroke);
|
|
189
|
+ double STROKE = bd.setScale(1, RoundingMode.HALF_UP).doubleValue();
|
|
190
|
+ aRow.put("STROKE", STROKE);
|
155
|
191
|
}
|
156
|
|
- String wellName = aRow.get("well_name").toString();
|
157
|
|
- String wellId = aRow.get("well_name").toString();
|
158
|
|
- String prodDate = aRow.get("dyna_create_time").toString().substring(0, 19);
|
159
|
|
- Double strokeLength = Double.valueOf(aRow.get("stroke").toString());
|
160
|
|
- Double strokeFrequency = Double.valueOf(aRow.get("frequency").toString());
|
|
192
|
+ String wellName = aRow.get("WELL_NAME").toString();
|
|
193
|
+ String wellId = aRow.get("WELL_ID").toString();
|
|
194
|
+ String prodDate = aRow.get("DYNA_CREATE_TIME").toString().substring(0, 19);
|
|
195
|
+ Double strokeLength = Double.valueOf(aRow.get("STROKE").toString());
|
|
196
|
+ Double strokeFrequency = Double.valueOf(aRow.get("FREQUENCY").toString());
|
161
|
197
|
String sgt = aRow.get("sgt").toString();
|
|
198
|
+// System.out.println(sgt);
|
162
|
199
|
in.setHeader("sgt_last_time", prodDate);
|
163
|
200
|
in.setHeader("well_id", wellId);
|
164
|
201
|
sendDataToRocketMQ(wellName, wellId, prodDate, strokeLength, strokeFrequency, sgt);
|
165
|
202
|
})
|
166
|
|
- .setBody(simple("insert into centralbase.cb_temp_well_mech_runtime(well_id,prod_date,susp_max_load,susp_min_load,sgt) " +
|
167
|
|
- "select '${body[well_name]}','${body[dyna_create_time]}','${body[susp_max_load]}','${body[susp_min_load]}','${body[sgt]}' " +
|
168
|
|
- "where NOT EXISTS (SELECT * FROM centralbase.cb_temp_well_mech_runtime WHERE well_id = '${body[well_name]}' and prod_date = '${body[dyna_create_time]}' )"))
|
|
203
|
+ .setBody(simple("insert into centralbase.cb_temp_well_mech_runtime(well_id,prod_date,SUSP_MAX_LOAD,SUSP_MIN_LOAD,sgt,stroke_length,stroke_frequency) " +
|
|
204
|
+ "select '${body[WELL_ID]}','${body[DYNA_CREATE_TIME]}','${body[SUSP_MAX_LOAD]}','${body[SUSP_MIN_LOAD]}','${body[sgt]}','${body[STROKE]}','${body[FREQUENCY]}' " +
|
|
205
|
+ "where NOT EXISTS (SELECT * FROM centralbase.cb_temp_well_mech_runtime WHERE well_id = '${body[WELL_ID]}' and prod_date = '${body[DYNA_CREATE_TIME]}' )"))
|
169
|
206
|
.to("jdbc:centralbase")
|
170
|
207
|
.setBody(simple("update centralbase.sys_access_well_control set sgt_last_time = '${header.sgt_last_time}' where well_id ='${header.well_id}' "))
|
171
|
208
|
.to("jdbc:centralbase")
|