package com.ard.work.health.service.impl;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.ard.common.core.utils.StringUtils;
|
import com.ard.system.api.factory.RemoteUserFallbackFactory;
|
import com.ard.work.health.domain.ArdAlarmEqHealth;
|
import com.ard.work.health.domain.ArdAlarmEqHealthExample;
|
import com.ard.work.health.mapper.ArdAlarmEqHealthMapper;
|
import com.ard.work.health.service.ArdAlarmEqHealthService;
|
import com.ard.work.health.task.ArdAlarmpointsExample;
|
import com.ard.work.health.util.OkhttpUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
|
import jakarta.annotation.Resource;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.UUID;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
import static com.ard.work.health.util.OkhttpUtils.getAllAlarmData;
|
|
@Service
|
public class ArdAlarmEqHealthServiceImpl implements ArdAlarmEqHealthService {
|
|
private static final String eqHealthUrl = "http://112.98.106.22:15028";
|
|
private static final String eqHealthAccount = "rf";
|
|
private static final String eqHealthPassword = "111";
|
|
private static final String refreshTime = "480";
|
|
private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);
|
|
// @Resource
|
// ArdAlarmpointsMapper ardAlarmpointsMapper;
|
//
|
// @Resource
|
// ArdAlarmpointsHeightMapper ardAlarmpointsHeightMapper;
|
|
@Resource
|
ArdAlarmEqHealthMapper ardAlarmEqHealthMapper;
|
|
/**
|
* @描述 获取登录token
|
* @参数 []
|
* @返回值 java.lang.String
|
* @创建人 刘苏义
|
* @创建时间 2023/5/6 15:27
|
* @修改人和其它信息
|
*/
|
@Override
|
public String getToken() {
|
String token = "";
|
try {
|
String url = eqHealthUrl + "/RoadFlowApi/Home/ValidLogin";
|
Map<String, String> body = new HashMap<>();
|
body.put("account", eqHealthAccount);
|
body.put("password", eqHealthPassword);
|
Map<String, Object> head = new HashMap<>();
|
Map<String, Object> treeJson = OkhttpUtils.postAllAlarmData(url, body, head);
|
if (treeJson != null) {
|
JSONObject jsonObj = (JSONObject) treeJson.get("data");
|
JSONObject data = jsonObj.getJSONObject("data");
|
token = data.getString("token");
|
}
|
} catch (Exception ex) {
|
log.error("获取token异常:" + ex.getMessage());
|
}
|
return token;
|
}
|
|
@Override
|
public void getAlarmDataByApi() {
|
try {
|
String token = getToken();
|
List<ArdAlarmEqHealth> data = new ArrayList<>();
|
if (StringUtils.isNotEmpty(token)) {
|
String url = eqHealthUrl + "/RoadFlowApi/ZX/MeasureData/GetEquipmentFailureModeAlert";
|
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> heads = new HashMap<>();
|
heads.put("roadflow-token", token);
|
Map<String, Object> allAlarmData = getAllAlarmData(url, params, heads);
|
if (allAlarmData.get("data") != null) {
|
JSONArray jsonArrays = (JSONArray) allAlarmData.get("data");
|
for (int i = 0; i < jsonArrays.size(); i++) {
|
JSONObject jsonObj = jsonArrays.getJSONObject(i);
|
String wellNo = jsonObj.getString("EquipNumber");
|
String wellName = jsonObj.getString("EquipNameZH");
|
String MeasureKey = jsonObj.getString("MeasureKey");
|
String PartName = jsonObj.getString("PartName");
|
String type = jsonObj.getString("MeasureType");
|
String problem = jsonObj.getString("ModeDesc");
|
String levelHtml = jsonObj.getString("AlertLevel");
|
String MeasureDate = jsonObj.getString("MeasureDate");
|
String Suggestion = jsonObj.getString("Suggestion");
|
ArdAlarmEqHealth ardAlarmEqHealth = new ArdAlarmEqHealth();
|
ardAlarmEqHealth.setId(UUID.randomUUID().toString().replace("-", ""));
|
ardAlarmEqHealth.setCommand(2001);
|
/*获取井号井名称测点*/
|
ardAlarmEqHealth.setWellNo(wellNo);
|
ardAlarmEqHealth.setWellName(wellName);
|
ardAlarmEqHealth.setMeasureKey(MeasureKey);
|
/*获取报警时间*/
|
|
ardAlarmEqHealth.setAlarmTime(MeasureDate);
|
/*获取经纬度*/
|
ArdAlarmpointsExample ardAlarmpointsExample = new ArdAlarmpointsExample();
|
ardAlarmpointsExample.createCriteria().andNameEqualTo(wellNo);
|
// List<ArdAlarmpoints> ardAlarmpoints = ardAlarmpointsMapper.selectByExample(ardAlarmpointsExample);
|
// if (ardAlarmpoints.size() > 0) {
|
// ardAlarmEqHealth.setLongitude(ardAlarmpoints.get(0).getLongitude());
|
// ardAlarmEqHealth.setLatitude(ardAlarmpoints.get(0).getLatitude());
|
// Integer alarmPointId = ardAlarmpoints.get(0).getId();
|
// /*获取高层*/
|
// ArdAlarmpointsHeightExample ardAlarmpointsHeightExample = new ArdAlarmpointsHeightExample();
|
// ardAlarmpointsHeightExample.createCriteria().andAlarmpointsIdEqualTo(alarmPointId);
|
// List<ArdAlarmpointsHeight> ardAlarmpointsHeights = ardAlarmpointsHeightMapper.selectByExample(ardAlarmpointsHeightExample);
|
// if (ardAlarmpointsHeights.size() > 0) {
|
// ardAlarmEqHealth.setAltitude(ardAlarmpointsHeights.get(0).getHeight());
|
// }
|
// }
|
/*获取传感器类型*/
|
ardAlarmEqHealth.setType(type);
|
/*获取故障信息*/
|
ardAlarmEqHealth.setPosition(PartName);
|
ardAlarmEqHealth.setProblem(problem);
|
ardAlarmEqHealth.setSuggestion(Suggestion);
|
|
Pattern pattern = Pattern.compile("<span.*?>(.*?)</span>");
|
Matcher matcher = pattern.matcher(levelHtml);
|
if (matcher.find()) {
|
String level = matcher.group(1);
|
ardAlarmEqHealth.setLevel(level);
|
}
|
data.add(ardAlarmEqHealth);
|
}
|
}
|
/*插入本地库*/
|
insertAlarmData(data);
|
}
|
}catch (Exception e){
|
log.error("从接口获取报警数据异常" + e.getMessage());
|
}
|
}
|
|
@Override
|
public List<ArdAlarmEqHealth> GetRealAlarm() {
|
try {
|
List<ArdAlarmEqHealth> ardAlarmEqHealths = ardAlarmEqHealthMapper.selectRealByCondition(refreshTime);
|
return ardAlarmEqHealths;
|
} catch (Exception ex) {
|
log.error(ex.getMessage());
|
return null;
|
}
|
}
|
|
/**
|
* @描述 入库方法
|
* @参数 [data]
|
* @返回值 void
|
* @创建人 刘苏义
|
* @创建时间 2023/5/6 15:34
|
* @修改人和其它信息
|
*/
|
private void insertAlarmData(List<ArdAlarmEqHealth> data) {
|
try {
|
data.sort(Comparator.comparing(ArdAlarmEqHealth::getAlarmTime));
|
for (ArdAlarmEqHealth alarm : data) {
|
SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
Date parse = fmt.parse(alarm.getAlarmTime());
|
SimpleDateFormat newfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String alarmTime = newfmt.format(parse);
|
alarm.setAlarmTime(alarmTime);
|
ArdAlarmEqHealthExample ardAlarmEqHealthExample = new ArdAlarmEqHealthExample();
|
ardAlarmEqHealthExample
|
.createCriteria()
|
.andWellNoEqualTo(alarm.getWellNo())
|
.andTypeEqualTo(alarm.getType())
|
.andAlarmTimeGreaterThanOrEqualTo(alarmTime)
|
.andProblemEqualTo(alarm.getProblem());
|
List<ArdAlarmEqHealth> ardAlarmEqHealths = ardAlarmEqHealthMapper.selectByExample(ardAlarmEqHealthExample);
|
if (ardAlarmEqHealths.size() <= 0) {
|
ardAlarmEqHealthMapper.insert(alarm);
|
}
|
}
|
} catch (Exception ex) {
|
log.error("入库异常:" + ex.getMessage());
|
}
|
}
|
|
}
|