|
@@ -1,18 +1,32 @@
|
|
package com.cpp.web.controller.stationDataQuery;
|
|
package com.cpp.web.controller.stationDataQuery;
|
|
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
|
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.cpp.common.core.domain.R;
|
|
import com.cpp.common.core.domain.R;
|
|
|
|
+import com.cpp.web.domain.regulation.TempShortRegulation;
|
|
|
|
+import com.cpp.web.domain.regulation.TempShortRegulationDetail;
|
|
|
|
+import com.cpp.web.domain.station.ElectricField;
|
|
|
|
+import com.cpp.web.domain.station.WindTurbineInfo;
|
|
import com.cpp.web.domain.station.WindTurbineStatusData;
|
|
import com.cpp.web.domain.station.WindTurbineStatusData;
|
|
|
|
+import com.cpp.web.dto.TableColumn;
|
|
|
|
+import com.cpp.web.service.station.ElectricFieldService;
|
|
|
|
+import com.cpp.web.service.station.WindTurbineInfoService;
|
|
import com.cpp.web.service.station.WindTurbineStatusDataService;
|
|
import com.cpp.web.service.station.WindTurbineStatusDataService;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
|
-import java.util.List;
|
|
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
+import java.io.BufferedOutputStream;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.net.URLEncoder;
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -25,9 +39,12 @@ import java.util.List;
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
@RequestMapping("/windturbinestatusdata")
|
|
@RequestMapping("/windturbinestatusdata")
|
|
@Api(value = "windturbinestatusdata", tags = "idp_wind_turbine_status_data管理")
|
|
@Api(value = "windturbinestatusdata", tags = "idp_wind_turbine_status_data管理")
|
|
|
|
+@Slf4j
|
|
public class WindTurbineStatusDataController {
|
|
public class WindTurbineStatusDataController {
|
|
|
|
|
|
private final WindTurbineStatusDataService windTurbineStatusDataService;
|
|
private final WindTurbineStatusDataService windTurbineStatusDataService;
|
|
|
|
+ private final ElectricFieldService electricFieldService;
|
|
|
|
+ private final WindTurbineInfoService windTurbineInfoService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 分页查询
|
|
* 分页查询
|
|
@@ -56,4 +73,111 @@ public class WindTurbineStatusDataController {
|
|
page.setMaxLimit((long) -1);
|
|
page.setMaxLimit((long) -1);
|
|
return R.ok(windTurbineStatusDataService.page(page, windTurbineStatusDataService.getByStationCodeAndEquipmentIdAndTimeBetween(stationCode, equipmentId, new Date(startTime), new Date(endTime))));
|
|
return R.ok(windTurbineStatusDataService.page(page, windTurbineStatusDataService.getByStationCodeAndEquipmentIdAndTimeBetween(stationCode, equipmentId, new Date(startTime), new Date(endTime))));
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @GetMapping("/export")
|
|
|
|
+ public void export(String stationCode, String equipmentId, Long startTime, Long endTime, HttpServletResponse response){
|
|
|
|
+ BufferedOutputStream bos = null;
|
|
|
|
+ try {
|
|
|
|
+ ElectricField electricField = electricFieldService.findByStationCode(stationCode);
|
|
|
|
+ List<WindTurbineInfo> windTurbineInfoList = windTurbineInfoService.findByStationCode(stationCode);
|
|
|
|
+ List<WindTurbineStatusData> list = windTurbineStatusDataService.list(windTurbineStatusDataService.getByStationCodeAndEquipmentIdAndTimeBetween(stationCode, equipmentId, new Date(startTime), new Date(endTime)));
|
|
|
|
+ StringBuilder templateContent = new StringBuilder();
|
|
|
|
+ response.setCharacterEncoding("UTF-8");
|
|
|
|
+
|
|
|
|
+ List<String> tableColumns = new ArrayList<>();
|
|
|
|
+ tableColumns.add("所属场站");
|
|
|
|
+ tableColumns.add("设备名称");
|
|
|
|
+ tableColumns.add("时间");
|
|
|
|
+ tableColumns.add("状态");
|
|
|
|
+ tableColumns.add("有功(KW)");
|
|
|
|
+ tableColumns.add("无功(KVar)");
|
|
|
|
+ tableColumns.add("电压(V)");
|
|
|
|
+ tableColumns.add("电流(A)");
|
|
|
|
+ tableColumns.add("转速(rpm)");
|
|
|
|
+ tableColumns.add("风速(m/s)");
|
|
|
|
+ tableColumns.add("风向(°)");
|
|
|
|
+ tableColumns.add("环境温度(℃)");
|
|
|
|
+ tableColumns.add("桨距角(°)");
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ String header = "";
|
|
|
|
+ StringBuilder content = new StringBuilder();
|
|
|
|
+
|
|
|
|
+ for (String tableColumn : tableColumns) {
|
|
|
|
+ header += "\"" + tableColumn + "\",";
|
|
|
|
+ }
|
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
+ // 设备名称集合
|
|
|
|
+ Set<String> nameList = new TreeSet<>();
|
|
|
|
+ if (!list.isEmpty()){
|
|
|
|
+ list.sort(Comparator.comparing(WindTurbineStatusData::getEquipmentId).thenComparing(WindTurbineStatusData::getTime));
|
|
|
|
+ }
|
|
|
|
+ for (WindTurbineStatusData windTurbineStatusData : list) {
|
|
|
|
+ content.append(electricField.getName() + "," );
|
|
|
|
+ Optional<String> name = windTurbineInfoList.stream()
|
|
|
|
+ .filter(w -> w.getId().longValue()==windTurbineStatusData.getEquipmentId().longValue())
|
|
|
|
+ .map(WindTurbineInfo::getName)
|
|
|
|
+ .findFirst();
|
|
|
|
+ content.append(name.get() + "," );
|
|
|
|
+ nameList.add(name.get());
|
|
|
|
+ content.append(DateUtil.format(windTurbineStatusData.getTime(),"yyyy-MM-dd HH:mm") + "," );
|
|
|
|
+ int statusValue = windTurbineStatusData.getStatus();
|
|
|
|
+ if (statusValue == 1) {
|
|
|
|
+ content.append("运行,");
|
|
|
|
+ } else if (statusValue == 2) {
|
|
|
|
+ content.append("待机,");
|
|
|
|
+ } else if (statusValue == 3) {
|
|
|
|
+ content.append("停用,");
|
|
|
|
+ } else if (statusValue == 4) {
|
|
|
|
+ content.append("故障,");
|
|
|
|
+ }
|
|
|
|
+ content.append(windTurbineStatusData.getActivePower() + "," );
|
|
|
|
+ content.append(windTurbineStatusData.getReactivePower() + "," );
|
|
|
|
+ content.append(windTurbineStatusData.getVoltage() + "," );
|
|
|
|
+ content.append(windTurbineStatusData.getElectricalCurrent() + "," );
|
|
|
|
+ content.append(windTurbineStatusData.getWindWheelRatedSpeed() + "," );
|
|
|
|
+ content.append(windTurbineStatusData.getWs() + "," );
|
|
|
|
+ content.append(windTurbineStatusData.getWd() + "," );
|
|
|
|
+ content.append(windTurbineStatusData.getT() + "," );
|
|
|
|
+ content.append(windTurbineStatusData.getPitchAngle() + "," );
|
|
|
|
+ content.append("\r\n");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ header += "\r\n";
|
|
|
|
+ templateContent.append(header);
|
|
|
|
+
|
|
|
|
+ templateContent.append(content.toString());
|
|
|
|
+
|
|
|
|
+ String fileName = "";
|
|
|
|
+ String fileNameDeviceName = "";
|
|
|
|
+ for (String name : nameList) {
|
|
|
|
+ fileNameDeviceName += name + "-";
|
|
|
|
+ }
|
|
|
|
+ if (sdf.format(startTime).equals(sdf.format(endTime))) {
|
|
|
|
+ fileName = electricField.getName() + sdf.format(startTime) + "[" +fileNameDeviceName.substring(0,fileNameDeviceName.length()-1) + "].csv";
|
|
|
|
+ } else {
|
|
|
|
+ fileName = electricField.getName() + sdf.format(startTime) + "至" + sdf.format(endTime) + "[" +fileNameDeviceName.substring(0,fileNameDeviceName.length()-1) + "].csv";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ response.setContentType("application/x-msdownload;charset=UTF-8");
|
|
|
|
+ response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
|
|
|
+ byte[] templateContentBytes = templateContent.toString().getBytes("UTF-8");
|
|
|
|
+ bos = new BufferedOutputStream(response.getOutputStream());
|
|
|
|
+ bos.write(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});
|
|
|
|
+ bos.write(templateContentBytes);
|
|
|
|
+ response.flushBuffer();
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("系统错误:" + e.getMessage(), e);
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ } finally {
|
|
|
|
+ if (bos != null) {
|
|
|
|
+ try {
|
|
|
|
+ bos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ log.error("系统错误:" + e.getMessage(), e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|