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.ArdAlarmpointsWellDeptVo; import com.ruoyi.common.core.domain.HealthVo; import com.ruoyi.alarmpoints.well.service.IArdAlarmpointsWellService; import com.ruoyi.common.core.domain.TreeDeptWell; import com.ruoyi.common.core.domain.TreeSelectWell; import com.ruoyi.common.core.domain.TreeSelectWellJson; 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.*; /** * @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(){ //查询用户ID 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); //等级 int count0 = 0,count1 = 0,count2 = 0; //装数据 List treeDeptWells = new ArrayList<>(); if ((int) mapResult.get("code") == 200) { List> listResult = (List>) JSON.parse((String) mapResult.get("resdata")); // System.out.println(String.valueOf(listResult)); //循环得到权限下匹配数据 for (int i = 0; i < listResult.size(); i++) { String equipNumber = (String) listResult.get(i).get("EquipNumber"); if(equipNumber!=null){ for (int j = 0; j < list.size(); j++) { String wellId = list.get(j).getWellId(); if(wellId!=null){ if(wellId.equals(equipNumber)){ //返回设备数据 TreeDeptWell treeDeptWell = new TreeDeptWell(); treeDeptWell.setId((Integer) listResult.get(i).get("id")); treeDeptWell.setEquipName((String) listResult.get(i).get("EquipName")); treeDeptWell.setEquipNumber((String) listResult.get(i).get("EquipNumber")); treeDeptWell.setEquipLevel((String) listResult.get(i).get("EquipLevel")); treeDeptWell.setEquipKey((String) listResult.get(i).get("EquipKey")); treeDeptWell.setMeasureDate((String) listResult.get(i).get("MeasureDate")); treeDeptWell.setLongitude(list.get(j).getLongitude()); treeDeptWell.setLatitude(list.get(j).getLatitude()); treeDeptWell.setAltitude(list.get(j).getAltitude()); treeDeptWell.setDeptId(list.get(j).getDeptId()); treeDeptWell.setAncestors(list.get(j).getAncestors()); treeDeptWell.setParentId(list.get(j).getParentId()); treeDeptWell.setDeptName(list.get(j).getDeptName()); treeDeptWells.add(treeDeptWell); 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; } } } } } //根据deptList查询出用户及以下的所有部门信息 List sysDepts = sysDeptService.allByUser(deptList); //循环查询出该用户的所有上级ID List userParentId = new ArrayList<>(); for (int i = 0; i < sysDepts.size(); i++) { Long userDeptId = sysDepts.get(i).getDeptId(); if(usersId.equals(userDeptId)){ String ancestors = sysDepts.get(i).getAncestors(); if(ancestors.contains(",")){ userParentId = Arrays.asList(ancestors.split(",")); }else { userParentId.add(ancestors); } break; } } //把部门层级和数据结合 // List treeDeptWells = new ArrayList<>(); for (int i = 0; i < sysDepts.size(); i++) { //部门ID SysDept sysDept = sysDepts.get(i); Long deptId = sysDept.getDeptId(); for (int j = 0; j < treeDeptWells.size(); j++) { //设备的部门ID TreeDeptWell healthVo = treeDeptWells.get(j); Long healthDeptId = healthVo.getDeptId(); if(deptId.equals(healthDeptId)){ //父级结构赋值 String thisAncestors = healthVo.getAncestors(); List ancestorsA = Arrays.asList(thisAncestors.split(",")); ancestorsA.removeAll(userParentId); for (int k = 0; k < ancestorsA.size(); k++) { Long ancestor = Long.parseLong(ancestorsA.get(k)); //循环最终List判断是否有该数据的父级,如果没有就填进去 boolean wellTrue = false; if(ancestor==0){ //父类集合为0则是最顶级上面没有 wellTrue = true; }else { for (int l = 0; l < treeDeptWells.size(); l++) { //如果该父类集合在结构中已经存在并且不是设备数据就不用重复添加了 Long treeId = treeDeptWells.get(l).getDeptId(); Integer id = treeDeptWells.get(l).getId(); if(ancestor.equals(treeId) && id==null){ wellTrue = true; } } } if(!wellTrue){ SysDept sysDept1 = sysDeptService.selectDeptById(ancestor); TreeDeptWell treeDeptWell = new TreeDeptWell(); treeDeptWell.setDeptId(ancestor); treeDeptWell.setAncestors(sysDept1.getAncestors()); treeDeptWell.setDeptName(sysDept1.getDeptName()); treeDeptWell.setParentId(sysDept1.getParentId()); treeDeptWells.add(treeDeptWell); } } } } } if(treeDeptWells.size()>0){ List tree = sysDeptService.wellTree(treeDeptWells); TreeSelectWellJson treeSelectWellJson = new TreeSelectWellJson(); treeSelectWellJson.setWellList(tree); treeSelectWellJson.setCount0(count0); treeSelectWellJson.setCount1(count1); treeSelectWellJson.setCount2(count2); return Results.succeed(treeSelectWellJson); }else { return Results.error("无匹配数据"); } } 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 JSONObject 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)){ j.put("msg", "没有测点信息"); j.put("code", 500); } 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")); if(listResult.size()>0){ for(int i = 0 ; i mapTemp = listResult.get(i); //BigDecimal value = (BigDecimal)mapTemp.get("Value"); //数值 BigDecimal value = null; //数值 try{ value = (BigDecimal)mapTemp.get("Value"); }catch(Exception e){ value = BigDecimal.valueOf(((Number)mapTemp.get("Value")).floatValue()); } 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); mapTemp.put("Value", value.setScale(2, BigDecimal.ROUND_HALF_UP)); } j.put("data",listResult); }else { j.put("data",new ArrayList<>()); } }else{ //错误提示 j.put("msg", mapResult.get("errmsg")); j.put("code", mapResult.get("code")); } return 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); } }