package com.gyee.impala.controller.diagnose; import com.alibaba.fastjson.JSONObject; import com.gyee.impala.common.feign.RemoteServiceBuilder; import com.gyee.impala.common.result.JsonResult; import com.gyee.impala.common.result.ResultCode; import com.gyee.impala.common.util.DateUtil; import com.gyee.impala.model.custom.diagnose.FaultInfo; import com.gyee.impala.model.master.Casefaultalg; import com.gyee.impala.service.custom.diagnose.AutoCmdService; import com.gyee.impala.service.master.CasefaultalgService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; /** * 离线故障诊断 */ @CrossOrigin @RestController @RequestMapping("/api/diagnosefault") public class DiagnoseFaultController { @Autowired private AutoCmdService autoCmdService; @Autowired private CasefaultalgService casefaultalgService; @Autowired private RemoteServiceBuilder remoteServiceBuilder; /** * 离线列表数据 * @return */ @GetMapping("/offline") public JSONObject offline(@RequestParam(value = "station", required = false) String station, @RequestParam(value = "windturbineid", required = false) String wtId, @RequestParam(value = "id", required = false) String[] id, @RequestParam(value = "faultid", required = false) Long[] faultid, @RequestParam(value = "model", required = false) String[] model, @RequestParam(value = "faultcode", required = false) String[] faultcode, @RequestParam(value = "st", required = false) String st, @RequestParam(value = "et", required = false) String et, @RequestParam(value = "algcode", required = false) String algcode, @RequestParam(value = "confirm", required = false) Optional confirm){ boolean conf = confirm.isPresent() ? confirm.get() : false; List list = casefaultalgService.getAll(station, wtId, id, faultid, model, faultcode, st, et, algcode, conf); if (conf){ return JsonResult.successData(ResultCode.SUCCESS, list); }else{ List array = new ArrayList<>(); Map> map = list.stream().collect(Collectors.groupingBy(Casefaultalg::getFaultid)); List faults = remoteServiceBuilder.sharding().getFaultInfoList("FJ", "GZ", st, et, station, 1); for (int i = 0; i < faults.size(); i++){ FaultInfo info = faults.get(i); if (!map.containsKey(info.getId())) array.add(format(info)); } return JsonResult.successData(ResultCode.SUCCESS, array); } } /** * 离线诊断 * @return */ @PostMapping("/offlinediagnose") public JSONObject offlineDiagnose(@RequestBody JSONObject json){ if (json == null) return JsonResult.error(ResultCode.PARAM_IS_BLANK); String model = json.getString("model"); List faults = JSONObject.parseArray(json.getJSONArray("faults").toString(), Casefaultalg.class); faults.stream().forEach(obj -> { FaultInfo info = new FaultInfo(); info.setStationId(obj.getStationen()); info.setModelId(obj.getModel()); info.setId(Long.valueOf(obj.getFaultid())); autoCmdService.exec(info); }); return JsonResult.success(ResultCode.SUCCESS); } /** * 诊断准确率统计 * @return */ @GetMapping("/statistic") public JSONObject statistic(String[] station, String st, String et){ if (StringUtils.isEmpty(st) || StringUtils.isEmpty(et)){ Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); st = year + "-01-01 00:00:00"; et = year + "-12-30 23:59:59"; } List list = new ArrayList<>(); for (String pt : station){ List faults = casefaultalgService.getAll(pt, null, null, null, null, null, st, et, null, null); List collect = faults.stream().filter(a -> a.getConfirm()).collect(Collectors.toList()); int size = collect.size(); int count = collect.stream().filter(f -> !StringUtils.isEmpty(f.getDiagnosecode()) && !StringUtils.isEmpty(f.getFaultcode()) && f.getDiagnosecode().equalsIgnoreCase(f.getFaultcode())).collect(Collectors.toList()).size(); double accuracy = size > 0 ? (double)count / (double)size : -1; Map map = new HashMap<>(); map.put("station", pt); map.put("accuracy", accuracy); list.add(map); } return JsonResult.successData(ResultCode.SUCCESS, list); } private Casefaultalg format(FaultInfo info){ Casefaultalg fault = new Casefaultalg(); fault.setStationcn(info.getStationName()); fault.setStationen(info.getStationId()); fault.setTag(0); fault.setFaultid(info.getId()); fault.setWindturbineid(info.getWindturbineId()); fault.setDiagnosetype(info.getAlertText()); fault.setStarttime(info.getFaultTime()); fault.setModel(info.getModelId()); fault.setCategory("0"); return fault; } }