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 body = new HashMap<>(); body.put("account", eqHealthAccount); body.put("password", eqHealthPassword); Map head = new HashMap<>(); Map 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 data = new ArrayList<>(); if (StringUtils.isNotEmpty(token)) { String url = eqHealthUrl + "/RoadFlowApi/ZX/MeasureData/GetEquipmentFailureModeAlert"; Map params = new HashMap<>(); Map heads = new HashMap<>(); heads.put("roadflow-token", token); Map 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 = 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 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("(.*?)"); 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 GetRealAlarm() { try { List 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 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 ardAlarmEqHealths = ardAlarmEqHealthMapper.selectByExample(ardAlarmEqHealthExample); if (ardAlarmEqHealths.size() <= 0) { ardAlarmEqHealthMapper.insert(alarm); } } } catch (Exception ex) { log.error("入库异常:" + ex.getMessage()); } } }