|
@@ -0,0 +1,280 @@
|
|
|
+package com.gyee.runeconomy.service.EarlyWarning;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+import com.gyee.runeconomy.dto.AlarmDataParser;
|
|
|
+import com.gyee.runeconomy.init.CacheContext;
|
|
|
+import com.gyee.runeconomy.model.ProEconAlarmPlan;
|
|
|
+import com.gyee.runeconomy.model.ProEconAlarmReal;
|
|
|
+import com.gyee.runeconomy.model.ReliabilityIssues;
|
|
|
+import com.gyee.runeconomy.model.auto.ProBasicEquipment;
|
|
|
+import com.gyee.runeconomy.model.auto.ProBasicPowerstation;
|
|
|
+import com.gyee.runeconomy.model.auto.TurbineInfoDay;
|
|
|
+import com.gyee.runeconomy.service.auto.ProEconAlarmPlanService;
|
|
|
+import com.gyee.runeconomy.service.auto.ProEconAlarmRealService;
|
|
|
+import com.gyee.runeconomy.service.auto.ReliabilityIssuesService;
|
|
|
+import com.gyee.runeconomy.service.auto.ITurbineInfoDayService;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.YearMonth;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class EarlyWarningReliableService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private ProEconAlarmRealService proEconAlarmRealService;
|
|
|
+ @Resource
|
|
|
+ private ProEconAlarmPlanService proEconAlarmPlanService;
|
|
|
+ @Resource
|
|
|
+ private ReliabilityIssuesService reliabilityIssuesService;
|
|
|
+ @Resource
|
|
|
+ private ITurbineInfoDayService turbineInfoDayService;
|
|
|
+ public void Electricity() throws Exception {
|
|
|
+ ApiClient client = new ApiClient();
|
|
|
+
|
|
|
+
|
|
|
+ DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
|
|
+ DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+
|
|
|
+ LocalDate currentDate = LocalDate.now();
|
|
|
+
|
|
|
+
|
|
|
+ LocalDate previousMonthDate = currentDate.minusMonths(1);
|
|
|
+
|
|
|
+
|
|
|
+ String time = previousMonthDate.format(inputFormatter);
|
|
|
+
|
|
|
+
|
|
|
+ YearMonth yearMonth = YearMonth.parse(time, inputFormatter);
|
|
|
+
|
|
|
+
|
|
|
+ String startOfMonth = yearMonth.atDay(1).atTime(0, 0, 0).format(outputFormatter);
|
|
|
+ String endOfMonth = yearMonth.atEndOfMonth().atTime(23, 59, 59).format(outputFormatter);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<ProBasicPowerstation> powerstationList = CacheContext.wpls;
|
|
|
+ List<ProBasicEquipment> wtlist = CacheContext.wtls;
|
|
|
+
|
|
|
+ for (ProBasicPowerstation p : powerstationList) {
|
|
|
+ List<ProBasicEquipment> equipments = wtlist.stream()
|
|
|
+ .filter(w -> p.getId().equals(w.getWindpowerstationId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<ReliabilityIssues> IssuesList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (ProBasicEquipment equipment : equipments) {
|
|
|
+
|
|
|
+ List<TurbineInfoDay> turbineList = turbineInfoDayService.getTurbineList(equipment.getId(), startOfMonth, endOfMonth);
|
|
|
+ int tjcssum = turbineList.stream()
|
|
|
+ .filter(turbine -> turbine.getTjcs() != null)
|
|
|
+ .mapToInt(TurbineInfoDay::getTjcs)
|
|
|
+ .sum();
|
|
|
+
|
|
|
+
|
|
|
+ String result = client.getDataFromApi(
|
|
|
+ startOfMonth,
|
|
|
+ endOfMonth,
|
|
|
+ equipment.getId(),
|
|
|
+ equipment.getModelId(),
|
|
|
+ "windturbine",
|
|
|
+ "",
|
|
|
+ "h"
|
|
|
+ );
|
|
|
+
|
|
|
+ if (result.trim().equals("[]")) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<AlarmDataParser.AlarmData> response = AlarmDataParser.parseResponse(result);
|
|
|
+ if (response.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ ReliabilityIssues issue = new ReliabilityIssues();
|
|
|
+ issue.setStationId(p.getId());
|
|
|
+ issue.setTurbineId(equipment.getAname());
|
|
|
+ issue.setRecordDate(time);
|
|
|
+ issue.setDowntimeCount(tjcssum);
|
|
|
+ IssuesList.add(issue);
|
|
|
+
|
|
|
+
|
|
|
+ for (AlarmDataParser.AlarmData alarmData : response) {
|
|
|
+
|
|
|
+ String planId = proEconAlarmRealService.getProEconAlarmReal(alarmData.getAlarmid())
|
|
|
+ .stream()
|
|
|
+ .findFirst()
|
|
|
+ .map(ProEconAlarmReal::getAlarmPlan)
|
|
|
+ .orElse("0");
|
|
|
+
|
|
|
+
|
|
|
+ ProEconAlarmPlan alarmPlan = proEconAlarmPlanService.selectAlarmPlanByProId(planId)
|
|
|
+ .stream()
|
|
|
+ .findFirst()
|
|
|
+ .orElse(null);
|
|
|
+
|
|
|
+ String yjType = (alarmPlan != null) ? alarmPlan.getTypedetails() : "0";
|
|
|
+ String bjType = (alarmPlan != null) ? alarmPlan.getTypes() : "0";
|
|
|
+
|
|
|
+
|
|
|
+ String alertText = alarmData.getAlertText();
|
|
|
+ String frequencyHours = alarmData.getCount() + "/" + alarmData.getTime();
|
|
|
+ String relateType = alarmData.getRelateParts();
|
|
|
+
|
|
|
+
|
|
|
+ if ("温度隐患".equals(yjType)) {
|
|
|
+ processTemperatureIssues(issue, relateType, alertText, frequencyHours);
|
|
|
+ } else if ("其它隐患".equals(yjType)) {
|
|
|
+ processOtherIssues(issue, bjType, alertText, frequencyHours);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<ReliabilityIssues> firstSortedIssues = IssuesList.stream()
|
|
|
+ .map(iss -> {
|
|
|
+ double totalFrequency = 0;
|
|
|
+
|
|
|
+ totalFrequency += parseFrequency(iss.getMainShaftFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getGeneratorFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getGearboxFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getPitchSystemFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getTemperatureOtherFrequencyHours());
|
|
|
+
|
|
|
+
|
|
|
+ iss.setReliabilityIssue(String.valueOf(totalFrequency));
|
|
|
+ return iss;
|
|
|
+ })
|
|
|
+ .sorted((i1, i2) -> Double.compare(parseFrequency(i2.getReliabilityIssue()), parseFrequency(i1.getReliabilityIssue())))
|
|
|
+ .limit(5)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ List<ReliabilityIssues> secondSortedIssues = IssuesList.stream()
|
|
|
+ .map(iss -> {
|
|
|
+ double totalFrequency = 0;
|
|
|
+
|
|
|
+ totalFrequency += parseFrequency(iss.getVibrationFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getMechanicalFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getElectricalFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getHydraulicFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getWindMeasurementFrequencyHours());
|
|
|
+ totalFrequency += parseFrequency(iss.getOtherFrequencyHours());
|
|
|
+
|
|
|
+
|
|
|
+ iss.setReliabilityIssue(String.valueOf(totalFrequency));
|
|
|
+ return iss;
|
|
|
+ })
|
|
|
+ .sorted((i1, i2) -> Double.compare(parseFrequency(i2.getReliabilityIssue()), parseFrequency(i1.getReliabilityIssue())))
|
|
|
+ .limit(5)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ List<ReliabilityIssues> topTenIssues = new ArrayList<>();
|
|
|
+ firstSortedIssues.forEach(iss -> {
|
|
|
+ iss.setReliabilityIssue("是");
|
|
|
+ iss.setReliabilityIs(1);});
|
|
|
+
|
|
|
+ secondSortedIssues.forEach(isc -> {
|
|
|
+ isc.setReliabilityIssue("是");
|
|
|
+
|
|
|
+ if (isc.getReliabilityIs() == 1) {
|
|
|
+ isc.setReliabilityIs(3);
|
|
|
+ } else {
|
|
|
+ isc.setReliabilityIs(2);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ IssuesList.stream()
|
|
|
+ .filter(iss -> !secondSortedIssues.contains(iss) && !firstSortedIssues.contains(iss))
|
|
|
+ .forEach(iss -> iss.setReliabilityIssue("否"));
|
|
|
+
|
|
|
+
|
|
|
+ boolean b = reliabilityIssuesService.saveBatch(IssuesList);
|
|
|
+ System.out.println("可靠性问题运行结束");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private double parseFrequency(String frequency) {
|
|
|
+ if (frequency != null && frequency.contains("/")) {
|
|
|
+ try {
|
|
|
+ String[] parts = frequency.split("/");
|
|
|
+ return Double.parseDouble(parts[0]);
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ * 处理温度隐患问题
|
|
|
+ */
|
|
|
+ private void processTemperatureIssues(ReliabilityIssues issue, String relateType, String alertText, String frequencyHours) {
|
|
|
+ switch (relateType) {
|
|
|
+ case "ZZ":
|
|
|
+ issue.setMainShaftType(alertText);
|
|
|
+ issue.setMainShaftFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ case "FDJ":
|
|
|
+ issue.setGeneratorType(alertText);
|
|
|
+ issue.setGeneratorFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ case "CLX":
|
|
|
+ issue.setGearboxType(alertText);
|
|
|
+ issue.setGearboxFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ case "BJXT":
|
|
|
+ issue.setPitchSystemType(alertText);
|
|
|
+ issue.setPitchSystemFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ issue.setTemperatureOtherIssues(alertText);
|
|
|
+ issue.setTemperatureOtherFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 处理其它隐患问题
|
|
|
+ */
|
|
|
+ private void processOtherIssues(ReliabilityIssues issue, String bjType, String alertText, String frequencyHours) {
|
|
|
+ switch (bjType) {
|
|
|
+ case "ZD":
|
|
|
+ issue.setVibrationType(alertText);
|
|
|
+ issue.setVibrationFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ case "JX":
|
|
|
+ issue.setElectricalType(alertText);
|
|
|
+ issue.setElectricalFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ case "YYXT":
|
|
|
+ issue.setWindMeasurementType(alertText);
|
|
|
+ issue.setWindMeasurementFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ issue.setOtherIssues(alertText);
|
|
|
+ issue.setOtherFrequencyHours(frequencyHours);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|