package com.ruoyi.health.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell; import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWellDeptVo; import com.ruoyi.alarmpoints.well.service.IArdAlarmpointsWellService; import com.ruoyi.common.core.domain.entity.SysConfig; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.health.client.EquipmentsHealthClient; import com.ruoyi.health.param.GetEquipmentAlertInfoParam; import com.ruoyi.health.param.GetFMTrendParam; import com.ruoyi.health.param.GetTrendParam; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.utils.result.Results; import com.ruoyi.utils.soap.ARDSoapUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Administrator */ @RestController @RequestMapping("/health") @Api(tags = "设备健康管理") public class HealthController { @Autowired ISysConfigService configService; @Resource private IArdAlarmpointsWellService ardAlarmpointsWellService; @Autowired private ISysUserService sysUserService; @Autowired private ISysDeptService sysDeptService; @PreAuthorize("@ss.hasPermi('sy:syCar:getEquipmentListByUser')") @ApiOperation("根据权限获取设备列表") @GetMapping("getEquipmentListByUser") public Results getEquipmentListByUser(){ String usersId = SecurityUtils.getUserId(); //根据userId查询部门Id SysUser sysUser = sysUserService.selectUserById(usersId); //根据当前deptId或者当前及所属下级的所有deptId List deptList = sysDeptService.deptIdBySub(sysUser.getDeptId()); //根据deptId获取对应所有兴趣点数据 List list = ardAlarmpointsWellService.wellListDept(deptList); //查询接口返回的设备列表 String url = configService.getHealth(); Map map = new HashMap(); String result = ARDSoapUtil.postSoapResult(url, "GetEquipmentList", map); if ("".equals(result)) { //返回结果为空 return Results.succeed("没有设备信息"); } Map mapResult = (Map) JSON.parse((String) result); JSONArray jsonArray = new JSONArray(); //ancestors字段最长的数据 String longest = ""; //等级 int count0 = 0,count1 = 0,count2 = 0; if ((int) mapResult.get("code") == 200) { List> listResult = (List>) JSON.parse((String) mapResult.get("resdata")); for (int i = 0; i < listResult.size(); i++) { JSONObject jsonObject = new JSONObject(); String equipNumber = (String) listResult.get(i).get("EquipNumber"); if(equipNumber!=null){ for (int j = 0; j < list.size(); j++) { String ancestors = list.get(j).getAncestors(); if (ancestors.length() > longest.length()) { longest = ancestors; } String wellId = list.get(j).getWellId(); if(wellId!=null){ if(wellId.equals(equipNumber)){ String[] ancestorsArray = ancestors.split(","); int max = ancestorsArray.length; jsonObject.put("id",listResult.get(i).get("id")); jsonObject.put("EquipName",listResult.get(i).get("EquipName")); jsonObject.put("EquipNumber",listResult.get(i).get("EquipNumber")); jsonObject.put("EquipLevel",listResult.get(i).get("EquipLevel")); jsonObject.put("MeasureDate",listResult.get(i).get("MeasureDate")); jsonObject.put("EquipKey",listResult.get(i).get("EquipKey")); jsonObject.put("longitude",list.get(j).getLongitude()); jsonObject.put("latitude",list.get(j).getLatitude()); jsonObject.put("altitude",list.get(j).getAltitude()); jsonObject.put("deptId",list.get(j).getDeptId()); jsonObject.put("deptName",list.get(j).getDeptName()); jsonObject.put("parentId",list.get(j).getParentId()); jsonObject.put("ancestors",list.get(j).getAncestors()); jsonObject.put("tier",max); jsonArray.add(jsonObject); if(listResult.get(i).get("EquipLevel").equals("0")){ count0++; }else if(listResult.get(i).get("EquipLevel").equals("1")){ count1++; }else if(listResult.get(i).get("EquipLevel").equals("2")){ count2++; } break; } } } } } //用逗号分隔字符后的size为最大的结构层数 String[] ancestorsArray = longest.split(","); int max = ancestorsArray.length; JSONObject j = new JSONObject(); j.put("count0",count0); j.put("count1",count1); j.put("count2",count2); return Results.succeed(jsonArray); } else { //错误提示 return Results.error((String) mapResult.get("errmsg")); } } @PreAuthorize("@ss.hasPermi('sy:syCar:getEquipmentList')") @ApiOperation("获取设备列表") @GetMapping("getEquipmentList") public Results getEquipmentList(){ String url = configService.getHealth(); JSONObject j = new JSONObject(); Map map = new HashMap(); String result = ARDSoapUtil.postSoapResult(url, "GetEquipmentList", map); if ("".equals(result)) { //返回结果为空 return Results.succeed("没有设备信息"); } Map mapResult = (Map) JSON.parse((String) result); if ((int) mapResult.get("code") == 200) { j.put("code", mapResult.get("code")); List> listResult = (List>) JSON.parse((String) mapResult.get("resdata")); for (int i = 0; i < listResult.size(); i++) { Map mapTemp = listResult.get(i); int id = (Integer) mapTemp.get("id"); //主键id // String equipKey = (String) mapTemp.get("EquipKey"); //设备Key // String equipNumber = (String) mapTemp.get("EquipNumber"); //设备编号 // String equipName = (String) mapTemp.get("EquipName"); //设备名称 // String equipLevel = (String) mapTemp.get("EquipLevel"); //设备报警等级 0正常 1注意 2严重 // String measureDate = (String) mapTemp.get("MeasureDate"); //最近一次测量时间 j.put(id + "", mapTemp); } } else { //错误提示 j.put("errmsg", mapResult.get("errmsg")); j.put("code", mapResult.get("code")); } return Results.succeed(j); } @PreAuthorize("@ss.hasPermi('sy:syCar:getMeasureByEquipName')") @ApiOperation("根据name获取某个油井测点列表") @GetMapping("getMeasureByEquipName") public Results getMeasureByEquipName(String equipNumber){ String url = configService.getHealth(); JSONObject j = new JSONObject(); Map map = new HashMap(); String result = ARDSoapUtil.postSoapResult(url, "GetEquipmentList", map); String equipKey = ""; if ("".equals(result)) { //返回结果为空 return Results.succeed("没有设备信息"); } Map mapResult = (Map) JSON.parse((String) result); if ((int) mapResult.get("code") == 200) { j.put("code", mapResult.get("code")); List> listResult = (List>) JSON.parse((String) mapResult.get("resdata")); for (int i = 0; i < listResult.size(); i++) { Map mapTemp = listResult.get(i); String equipNumberTemp = (String) mapTemp.get("EquipNumber"); //设备名称 if (equipNumberTemp.equals(equipNumber)) { //名称匹配,即为要获取的设备; equipKey = (String) mapTemp.get("EquipKey"); //设备Key } } if ("".equals(equipKey)) { return Results.succeed("没有测点信息"); } //获取设备的测点列表 Map hashMap = new HashMap(); hashMap.put("EquipKey", equipKey); String eResult = ARDSoapUtil.postSoapResult(url, "GetMeasureByEquipKey", hashMap); if ("".equals(eResult)) { //返回结果为空 return Results.succeed("没有测点信息"); } Map map1 = (Map) JSON.parse((String) eResult); if ((int) map1.get("code") == 200) { j.put("code", map1.get("code")); List> list = (List>) JSON.parse((String) map1.get("resdata")); // for (int i = 0; i < listResult.size(); i++) { // Map mapTemp = listResult.get(i); // int id = (Integer) mapTemp.get("id"); //主键id // String measureKey = (String) mapTemp.get("MeasureKey"); //测点key // String measureNumber = (String) mapTemp.get("MeasureNumber"); //测点编号 // String measureName = (String) mapTemp.get("MeasureName"); //测点名称 // String measureLevel = (String) mapTemp.get("MeasureLevel"); //测点报警等级 0正常 1注意 2严重 // String sensorType = (String) mapTemp.get("SensorType"); //传感器类型 // String betry = (String) mapTemp.get("BETRY");//电量 // } j.put("listResult", list); } else { //错误提示 j.put("errmsg", mapResult.get("errmsg")); j.put("code", mapResult.get("code")); } } else { //错误提示 j.put("errmsg", mapResult.get("errmsg")); j.put("code", mapResult.get("code")); } return Results.succeed(j); } @PreAuthorize("@ss.hasPermi('sy:syCar:getTrend')") @ApiOperation("获取某油井一段时间的测量趋势") @GetMapping("getTrend") public Results getTrend(GetTrendParam getTrendParam){ String url = configService.getHealth(); Map map = new HashMap(); map.put("MeasureKey", getTrendParam.getMeasureKey()); map.put("StartTime", getTrendParam.getStartTime()); map.put("EndTime", getTrendParam.getEndTime()); JSONObject j = new JSONObject(); String result = ARDSoapUtil.postSoapResult(url ,"GetTrend" , map); if ("".equals(result)){ return Results.succeed("没有测点信息"); } Map mapResult = (Map) JSON.parse((String)result); if ( (int) mapResult.get("code") == 200){ j.put("code", mapResult.get("code")); List> listResult = (List>)JSON.parse((String)mapResult.get("resdata")); for(int i = 0 ; i mapTemp = listResult.get(i); int id = (Integer)mapTemp.get("id"); //主键id BigDecimal value = (BigDecimal)mapTemp.get("Value"); //数值 String measureStr = (String)mapTemp.get("MeasureDate"); //测量时间 measureStr = measureStr.substring(measureStr.indexOf("(")+1, measureStr.indexOf(")",2)); SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String measureDate = f.format(Long.valueOf(measureStr)); mapTemp.put("MeasureDate", measureDate); j.put(id +"" , mapTemp); } }else{ //错误提示 j.put("errmsg", mapResult.get("errmsg")); j.put("code", mapResult.get("code")); } return Results.succeed(j); } @PreAuthorize("@ss.hasPermi('sy:syCar:getWaveDataByIndex')") @ApiOperation("获取某次测量数据的图谱") @GetMapping("getWaveDataByIndex") public Results getWaveDataByIndex(String id){ String url = configService.getHealth(); Map map = new HashMap(); map.put("id", id); JSONObject j = new JSONObject(); String result = ARDSoapUtil.postSoapResult(url ,"GetWaveDataByIndex" , map); if ("".equals(result)){ return Results.succeed("没有测点信息"); } Map mapResult = (Map) JSON.parse((String) result); if ((int) mapResult.get("code") == 200) { j.put("code", mapResult.get("code")); List> listResult = (List>) JSON.parse((String) mapResult.get("resdata")); int frequency = (Integer) listResult.get(0).get("Frequency"); //频宽 int lines = (Integer) listResult.get(0).get("Lines");//线数 int measureCycle = (Integer) listResult.get(0).get("MeasureCycle");//采样时间 List waveDataImage = (List) listResult.get(0).get("WaveDataImage");//时域图谱 List FrequencyDataImage = (List) listResult.get(0).get("FrequencyDataImage"); //频域图谱 j.put("frequency", frequency); j.put("lines", lines); j.put("measureCycle", measureCycle); j.put("waveDataImage", waveDataImage); j.put("FrequencyDataImage", FrequencyDataImage); } else { //错误提示 j.put("errmsg", mapResult.get("errmsg")); j.put("code", mapResult.get("code")); } return Results.succeed(j); } @PreAuthorize("@ss.hasPermi('sy:syCar:getAlertInfo')") @ApiOperation("获取某个测点的最后一次报警信息") @GetMapping("getAlertInfo") public Results getAlertInfo(String number){ String url = configService.getHealth(); Map map = new HashMap(); map.put("WellNumber", number); JSONObject j = new JSONObject(); String result = ARDSoapUtil.postSoapResult(url ,"GetWellAlertInfo" , map); if ("".equals(result)){ return Results.succeed("没有测点信息"); } Map mapResult = (Map) JSON.parse((String) result); if ((int) mapResult.get("code") == 200) { j.put("code", mapResult.get("code")); List> listResult = (List>) JSON.parse((String) mapResult.get("resdata")); j.put("listResult", listResult); for (int i = 0; i < listResult.size(); i++) { Map mapTemp = listResult.get(i); int id = (Integer) mapTemp.get("id"); //主键id String position = (String) mapTemp.get("position"); //异常部位 String problem = (String) mapTemp.get("problem"); //异常问题(失效模式) String suggestion = (String) mapTemp.get("suggestion"); //改善建议 } } else { //错误提示 j.put("errmsg", mapResult.get("errmsg")); j.put("code", mapResult.get("code")); } return Results.succeed(j); } @PreAuthorize("@ss.hasPermi('sy:syCar:getFMTrend')") @ApiOperation("获取某异常问题(失效模式)的趋势") @GetMapping("getFMTrend") public Results getFMTrend(GetFMTrendParam getFMTrendParam){ String url = configService.getHealth(); Map map = new HashMap(); map.put("id", getFMTrendParam.getId()); map.put("StartTime", getFMTrendParam.getStartTime()); map.put("EndTime", getFMTrendParam.getEndTime()); JSONObject j = new JSONObject(); String result = ARDSoapUtil.postSoapResult(url ,"GetFMTrend" , map); if ("".equals(result)){ return Results.succeed("没有测点信息"); } Map mapResult = (Map) JSON.parse((String) result); if ((int) mapResult.get("code") == 200) { j.put("code", mapResult.get("code")); List> listResult = (List>) JSON.parse((String) mapResult.get("resdata")); j.put("listResult", listResult); for (int i = 0; i < listResult.size(); i++) { Map mapTemp = listResult.get(i); int id = (Integer) mapTemp.get("id"); //主键id String value = (String) mapTemp.get("Value"); //数值 String measureStr = (String) mapTemp.get("MeasureDate"); //测量时间 } } else { //错误提示 j.put("errmsg", mapResult.get("errmsg")); j.put("code", mapResult.get("code")); } return Results.succeed(j); } @PreAuthorize("@ss.hasPermi('sy:syCar:getMeasureByEquipKey')") @ApiOperation("根据key获取某个油井测点列表") @GetMapping("getMeasureByEquipKey") public Results getMeasureByEquipKey(String equipKey){ JSONObject j = new JSONObject(); String url = configService.getHealth(); //获取设备的测点列表 Map hashMap = new HashMap(); hashMap.put("EquipKey", equipKey); String eResult = ARDSoapUtil.postSoapResult(url, "GetMeasureByEquipKey", hashMap); if ("".equals(eResult)) { //返回结果为空 return Results.succeed("没有测点信息"); } Map map1 = (Map) JSON.parse((String) eResult); if ((int) map1.get("code") == 200) { j.put("code", map1.get("code")); List> list = (List>) JSON.parse((String) map1.get("resdata")); j.put("listResult", list); } return Results.succeed(j); } @PreAuthorize("@ss.hasPermi('sy:syCar:GetPartsAlertLeve')") @ApiOperation("获取ID获取点位") @GetMapping("GetPartsAlertLevel") public Results GetPartsAlertLevel(Integer id){ List sysConfigs = configService.getAccPwd(); String account = null,password = null,url = null; for (int i = 0; i < sysConfigs.size(); i++) { SysConfig sysConfig = sysConfigs.get(i); if("eqHealthUrl".equals(sysConfig.getConfigKey())){ url = sysConfig.getConfigValue(); } if("eqHealthAccount".equals(sysConfig.getConfigKey())){ account = sysConfig.getConfigValue(); } if("eqHealthPassword".equals(sysConfig.getConfigKey())){ password = sysConfig.getConfigValue(); } } String tokenUrl = url+"/RoadFlowApi/Home/ValidLogin"; Map loginResult = EquipmentsHealthClient.getToken(tokenUrl, account, password); String token = (String) ((Map) ((Map) loginResult.get("data")).get("data")).get("token"); String GetPartsAlertLeveUrl = url + "/RoadFlowApi/ZX/MeasureData/GetPartsAlertLevel"; Map map = EquipmentsHealthClient.GetPartsAlertLeve(GetPartsAlertLeveUrl, token,id); return Results.succeed(map); } @PreAuthorize("@ss.hasPermi('sy:syCar:GetEquipmentAlertInfo')") @ApiOperation("根据ID获取详细说明") @GetMapping("GetEquipmentAlertInfo") public Results GetEquipmentAlertInfo(GetEquipmentAlertInfoParam param){ Integer id = param.getId(); String key = param.getPosition(); List sysConfigs = configService.getAccPwd(); String account = null,password = null,url = null; for (int i = 0; i < sysConfigs.size(); i++) { SysConfig sysConfig = sysConfigs.get(i); if("eqHealthUrl".equals(sysConfig.getConfigKey())){ url = sysConfig.getConfigValue(); } if("eqHealthAccount".equals(sysConfig.getConfigKey())){ account = sysConfig.getConfigValue(); } if("eqHealthPassword".equals(sysConfig.getConfigKey())){ password = sysConfig.getConfigValue(); } } String tokenUrl = url+"/RoadFlowApi/Home/ValidLogin"; Map loginResult = EquipmentsHealthClient.getToken(tokenUrl, account, password); String token = (String) ((Map) ((Map) loginResult.get("data")).get("data")).get("token"); String GetEquipmentAlertInfoUrl = url + "/RoadFlowApi/ZX/MeasureData/GetEquipmentAlertInfo"; Map map = EquipmentsHealthClient.GetEquipmentAlertInfo(GetEquipmentAlertInfoUrl, token,id); List list = (List) ((Map) map.get("data")).get("rows"); List> rList = new ArrayList<>(); if(list.size()>0){ for (int i = 0; i < list.size(); i++) { Map listMap = (Map) list.get(i); String position = (String) listMap.get("position"); if(key.equals(position)){ rList.add(listMap); } } } return Results.succeed(rList); } }