diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java index c3e2327..e2f5cff 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.GasDectorDataDto; import com.casic.missiles.modular.system.model.PantiltDataDto; -import org.omg.CORBA.Object; public interface ThirdPartyDataService { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java index c3e2327..e2f5cff 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.GasDectorDataDto; import com.casic.missiles.modular.system.model.PantiltDataDto; -import org.omg.CORBA.Object; public interface ThirdPartyDataService { diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java index b2d0984..cd274a8 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java @@ -1,13 +1,19 @@ package com.casic.missiles.modular.system.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.system.dao.DeviceDataListMapper; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import com.casic.missiles.modular.system.service.DeviceDataListService; import com.casic.missiles.modular.system.service.IBusDeviceSupportService; import lombok.extern.slf4j.Slf4j; @@ -16,6 +22,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 数据统计分析 @@ -116,4 +123,16 @@ return this.baseMapper.getPantiltList(dataScope, devcode, beginTime, endTime, wellCode); } + @Override + public List> selectDeviceList(DeviceDataExportEnum exportEnum, LambdaQueryWrapper query) { + + return this.baseMapper.selectDeviceList(exportEnum.getTableName(),exportEnum.getTableColumns(),exportEnum.getOrderColumn()); + } + + @Override + public List> selectAlarmRecords(Integer deviceType, String startTime, String endTime) { + + return this.baseMapper.selectAlarmRecords(deviceType,startTime,endTime); + } + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java index c3e2327..e2f5cff 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.GasDectorDataDto; import com.casic.missiles.modular.system.model.PantiltDataDto; -import org.omg.CORBA.Object; public interface ThirdPartyDataService { diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java index b2d0984..cd274a8 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java @@ -1,13 +1,19 @@ package com.casic.missiles.modular.system.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.system.dao.DeviceDataListMapper; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import com.casic.missiles.modular.system.service.DeviceDataListService; import com.casic.missiles.modular.system.service.IBusDeviceSupportService; import lombok.extern.slf4j.Slf4j; @@ -16,6 +22,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 数据统计分析 @@ -116,4 +123,16 @@ return this.baseMapper.getPantiltList(dataScope, devcode, beginTime, endTime, wellCode); } + @Override + public List> selectDeviceList(DeviceDataExportEnum exportEnum, LambdaQueryWrapper query) { + + return this.baseMapper.selectDeviceList(exportEnum.getTableName(),exportEnum.getTableColumns(),exportEnum.getOrderColumn()); + } + + @Override + public List> selectAlarmRecords(Integer deviceType, String startTime, String endTime) { + + return this.baseMapper.selectAlarmRecords(deviceType,startTime,endTime); + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java index 38accbd..dc07580 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java @@ -1,17 +1,20 @@ package com.casic.missiles.modular.system.controller; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.ExcelModel.WellCoverDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; import com.casic.missiles.modular.system.model.DeviceImei; import com.casic.missiles.modular.system.service.IDeviceImeiService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.List; import java.util.Map; /** @@ -20,7 +23,7 @@ */ @RestController @RequestMapping("/device/simManage") -public class DeviceImeiController extends BaseController { +public class DeviceImeiController extends ExportController { private final IDeviceImeiService deviceImeiService; @@ -34,7 +37,7 @@ @RequestMapping(value = "/listPage") public Object deviceImeiListPage(String devcode) { // devcode 否 string 设备编号 - Page> page = PageFactory.defaultPage(); + Page> page = PageFactory.defaultPage(); ResponseData responseData = deviceImeiService.deviceImeiListPage(page, devcode); responseData.setData(super.packForBT(page)); return responseData; @@ -71,4 +74,17 @@ public Object importImei(@RequestParam("file") MultipartFile uploadFile) { return deviceImeiService.importImeiList(uploadFile); } + + /** + * 批量导出 + */ + @GetMapping(value = "/batchExport") + public void batchExport(String devcode) throws IOException { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + if (StrUtil.isNotEmpty(devcode)) { + query.like(DeviceImei::getDevcode, devcode); + } + List imeiList = deviceImeiService.list(query); + super.exportExcel(DeviceImei.class, imeiList, DeviceExportEnum.WELLDATA_EXPORT.getFileName()); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java index c3e2327..e2f5cff 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.GasDectorDataDto; import com.casic.missiles.modular.system.model.PantiltDataDto; -import org.omg.CORBA.Object; public interface ThirdPartyDataService { diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java index b2d0984..cd274a8 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java @@ -1,13 +1,19 @@ package com.casic.missiles.modular.system.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.system.dao.DeviceDataListMapper; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import com.casic.missiles.modular.system.service.DeviceDataListService; import com.casic.missiles.modular.system.service.IBusDeviceSupportService; import lombok.extern.slf4j.Slf4j; @@ -16,6 +22,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 数据统计分析 @@ -116,4 +123,16 @@ return this.baseMapper.getPantiltList(dataScope, devcode, beginTime, endTime, wellCode); } + @Override + public List> selectDeviceList(DeviceDataExportEnum exportEnum, LambdaQueryWrapper query) { + + return this.baseMapper.selectDeviceList(exportEnum.getTableName(),exportEnum.getTableColumns(),exportEnum.getOrderColumn()); + } + + @Override + public List> selectAlarmRecords(Integer deviceType, String startTime, String endTime) { + + return this.baseMapper.selectAlarmRecords(deviceType,startTime,endTime); + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java index 38accbd..dc07580 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java @@ -1,17 +1,20 @@ package com.casic.missiles.modular.system.controller; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.ExcelModel.WellCoverDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; import com.casic.missiles.modular.system.model.DeviceImei; import com.casic.missiles.modular.system.service.IDeviceImeiService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.List; import java.util.Map; /** @@ -20,7 +23,7 @@ */ @RestController @RequestMapping("/device/simManage") -public class DeviceImeiController extends BaseController { +public class DeviceImeiController extends ExportController { private final IDeviceImeiService deviceImeiService; @@ -34,7 +37,7 @@ @RequestMapping(value = "/listPage") public Object deviceImeiListPage(String devcode) { // devcode 否 string 设备编号 - Page> page = PageFactory.defaultPage(); + Page> page = PageFactory.defaultPage(); ResponseData responseData = deviceImeiService.deviceImeiListPage(page, devcode); responseData.setData(super.packForBT(page)); return responseData; @@ -71,4 +74,17 @@ public Object importImei(@RequestParam("file") MultipartFile uploadFile) { return deviceImeiService.importImeiList(uploadFile); } + + /** + * 批量导出 + */ + @GetMapping(value = "/batchExport") + public void batchExport(String devcode) throws IOException { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + if (StrUtil.isNotEmpty(devcode)) { + query.like(DeviceImei::getDevcode, devcode); + } + List imeiList = deviceImeiService.list(query); + super.exportExcel(DeviceImei.class, imeiList, DeviceExportEnum.WELLDATA_EXPORT.getFileName()); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java index ac11187..3dcfacc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java @@ -6,7 +6,6 @@ import com.casic.missiles.modular.system.model.BusConcentrator; import com.casic.missiles.core.datascope.DataScope; -import javax.xml.ws.Response; import java.util.List; /** diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java index c3e2327..e2f5cff 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.GasDectorDataDto; import com.casic.missiles.modular.system.model.PantiltDataDto; -import org.omg.CORBA.Object; public interface ThirdPartyDataService { diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java index b2d0984..cd274a8 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java @@ -1,13 +1,19 @@ package com.casic.missiles.modular.system.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.system.dao.DeviceDataListMapper; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import com.casic.missiles.modular.system.service.DeviceDataListService; import com.casic.missiles.modular.system.service.IBusDeviceSupportService; import lombok.extern.slf4j.Slf4j; @@ -16,6 +22,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 数据统计分析 @@ -116,4 +123,16 @@ return this.baseMapper.getPantiltList(dataScope, devcode, beginTime, endTime, wellCode); } + @Override + public List> selectDeviceList(DeviceDataExportEnum exportEnum, LambdaQueryWrapper query) { + + return this.baseMapper.selectDeviceList(exportEnum.getTableName(),exportEnum.getTableColumns(),exportEnum.getOrderColumn()); + } + + @Override + public List> selectAlarmRecords(Integer deviceType, String startTime, String endTime) { + + return this.baseMapper.selectAlarmRecords(deviceType,startTime,endTime); + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java index 38accbd..dc07580 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java @@ -1,17 +1,20 @@ package com.casic.missiles.modular.system.controller; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.ExcelModel.WellCoverDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; import com.casic.missiles.modular.system.model.DeviceImei; import com.casic.missiles.modular.system.service.IDeviceImeiService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.List; import java.util.Map; /** @@ -20,7 +23,7 @@ */ @RestController @RequestMapping("/device/simManage") -public class DeviceImeiController extends BaseController { +public class DeviceImeiController extends ExportController { private final IDeviceImeiService deviceImeiService; @@ -34,7 +37,7 @@ @RequestMapping(value = "/listPage") public Object deviceImeiListPage(String devcode) { // devcode 否 string 设备编号 - Page> page = PageFactory.defaultPage(); + Page> page = PageFactory.defaultPage(); ResponseData responseData = deviceImeiService.deviceImeiListPage(page, devcode); responseData.setData(super.packForBT(page)); return responseData; @@ -71,4 +74,17 @@ public Object importImei(@RequestParam("file") MultipartFile uploadFile) { return deviceImeiService.importImeiList(uploadFile); } + + /** + * 批量导出 + */ + @GetMapping(value = "/batchExport") + public void batchExport(String devcode) throws IOException { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + if (StrUtil.isNotEmpty(devcode)) { + query.like(DeviceImei::getDevcode, devcode); + } + List imeiList = deviceImeiService.list(query); + super.exportExcel(DeviceImei.class, imeiList, DeviceExportEnum.WELLDATA_EXPORT.getFileName()); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java index ac11187..3dcfacc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java @@ -6,7 +6,6 @@ import com.casic.missiles.modular.system.model.BusConcentrator; import com.casic.missiles.core.datascope.DataScope; -import javax.xml.ws.Response; import java.util.List; /** diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java index 0279f36..aaf9ad3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java @@ -1,13 +1,15 @@ package com.casic.missiles.modular.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.model.DeviceConcentrator; import com.casic.missiles.modular.system.model.DeviceImei; import org.springframework.web.multipart.MultipartFile; import java.util.Map; -public interface IDeviceImeiService { +public interface IDeviceImeiService extends IService { ResponseData deviceImeiListPage(Page> page, String devcode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java index c3e2327..e2f5cff 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.GasDectorDataDto; import com.casic.missiles.modular.system.model.PantiltDataDto; -import org.omg.CORBA.Object; public interface ThirdPartyDataService { diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java index b2d0984..cd274a8 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java @@ -1,13 +1,19 @@ package com.casic.missiles.modular.system.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.system.dao.DeviceDataListMapper; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import com.casic.missiles.modular.system.service.DeviceDataListService; import com.casic.missiles.modular.system.service.IBusDeviceSupportService; import lombok.extern.slf4j.Slf4j; @@ -16,6 +22,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 数据统计分析 @@ -116,4 +123,16 @@ return this.baseMapper.getPantiltList(dataScope, devcode, beginTime, endTime, wellCode); } + @Override + public List> selectDeviceList(DeviceDataExportEnum exportEnum, LambdaQueryWrapper query) { + + return this.baseMapper.selectDeviceList(exportEnum.getTableName(),exportEnum.getTableColumns(),exportEnum.getOrderColumn()); + } + + @Override + public List> selectAlarmRecords(Integer deviceType, String startTime, String endTime) { + + return this.baseMapper.selectAlarmRecords(deviceType,startTime,endTime); + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java index 38accbd..dc07580 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java @@ -1,17 +1,20 @@ package com.casic.missiles.modular.system.controller; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.ExcelModel.WellCoverDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; import com.casic.missiles.modular.system.model.DeviceImei; import com.casic.missiles.modular.system.service.IDeviceImeiService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.List; import java.util.Map; /** @@ -20,7 +23,7 @@ */ @RestController @RequestMapping("/device/simManage") -public class DeviceImeiController extends BaseController { +public class DeviceImeiController extends ExportController { private final IDeviceImeiService deviceImeiService; @@ -34,7 +37,7 @@ @RequestMapping(value = "/listPage") public Object deviceImeiListPage(String devcode) { // devcode 否 string 设备编号 - Page> page = PageFactory.defaultPage(); + Page> page = PageFactory.defaultPage(); ResponseData responseData = deviceImeiService.deviceImeiListPage(page, devcode); responseData.setData(super.packForBT(page)); return responseData; @@ -71,4 +74,17 @@ public Object importImei(@RequestParam("file") MultipartFile uploadFile) { return deviceImeiService.importImeiList(uploadFile); } + + /** + * 批量导出 + */ + @GetMapping(value = "/batchExport") + public void batchExport(String devcode) throws IOException { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + if (StrUtil.isNotEmpty(devcode)) { + query.like(DeviceImei::getDevcode, devcode); + } + List imeiList = deviceImeiService.list(query); + super.exportExcel(DeviceImei.class, imeiList, DeviceExportEnum.WELLDATA_EXPORT.getFileName()); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java index ac11187..3dcfacc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java @@ -6,7 +6,6 @@ import com.casic.missiles.modular.system.model.BusConcentrator; import com.casic.missiles.core.datascope.DataScope; -import javax.xml.ws.Response; import java.util.List; /** diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java index 0279f36..aaf9ad3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java @@ -1,13 +1,15 @@ package com.casic.missiles.modular.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.model.DeviceConcentrator; import com.casic.missiles.modular.system.model.DeviceImei; import org.springframework.web.multipart.MultipartFile; import java.util.Map; -public interface IDeviceImeiService { +public interface IDeviceImeiService extends IService { ResponseData deviceImeiListPage(Page> page, String devcode); diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java new file mode 100644 index 0000000..9647e1a --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.dto; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class DeviceExportDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @ExcelProperty("点位编号") + @Length(max = 15, min = 12) + private String wellCode; + @ExcelProperty("设备编号") + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + @ExcelProperty("设备类型") + private String deviceTypeName;//设备类型名称 +// @ExcelProperty("监控内容") + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + @ExcelProperty("权属单位") + private String deptName; + @ExcelProperty("设备安装日期") + private String installDate; + @ExcelProperty("设备位置") + private String position; + private Long concenId; +// @ExcelProperty("集中器编号") + private String concenCode; + private String onlineState; +// @ExcelProperty("在线状态") + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + @ExcelProperty("设备安装高度") + private String installHeight; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java index c3e2327..e2f5cff 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.GasDectorDataDto; import com.casic.missiles.modular.system.model.PantiltDataDto; -import org.omg.CORBA.Object; public interface ThirdPartyDataService { diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java index b2d0984..cd274a8 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java @@ -1,13 +1,19 @@ package com.casic.missiles.modular.system.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.system.dao.DeviceDataListMapper; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import com.casic.missiles.modular.system.service.DeviceDataListService; import com.casic.missiles.modular.system.service.IBusDeviceSupportService; import lombok.extern.slf4j.Slf4j; @@ -16,6 +22,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 数据统计分析 @@ -116,4 +123,16 @@ return this.baseMapper.getPantiltList(dataScope, devcode, beginTime, endTime, wellCode); } + @Override + public List> selectDeviceList(DeviceDataExportEnum exportEnum, LambdaQueryWrapper query) { + + return this.baseMapper.selectDeviceList(exportEnum.getTableName(),exportEnum.getTableColumns(),exportEnum.getOrderColumn()); + } + + @Override + public List> selectAlarmRecords(Integer deviceType, String startTime, String endTime) { + + return this.baseMapper.selectAlarmRecords(deviceType,startTime,endTime); + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java index 38accbd..dc07580 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java @@ -1,17 +1,20 @@ package com.casic.missiles.modular.system.controller; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.ExcelModel.WellCoverDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; import com.casic.missiles.modular.system.model.DeviceImei; import com.casic.missiles.modular.system.service.IDeviceImeiService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.List; import java.util.Map; /** @@ -20,7 +23,7 @@ */ @RestController @RequestMapping("/device/simManage") -public class DeviceImeiController extends BaseController { +public class DeviceImeiController extends ExportController { private final IDeviceImeiService deviceImeiService; @@ -34,7 +37,7 @@ @RequestMapping(value = "/listPage") public Object deviceImeiListPage(String devcode) { // devcode 否 string 设备编号 - Page> page = PageFactory.defaultPage(); + Page> page = PageFactory.defaultPage(); ResponseData responseData = deviceImeiService.deviceImeiListPage(page, devcode); responseData.setData(super.packForBT(page)); return responseData; @@ -71,4 +74,17 @@ public Object importImei(@RequestParam("file") MultipartFile uploadFile) { return deviceImeiService.importImeiList(uploadFile); } + + /** + * 批量导出 + */ + @GetMapping(value = "/batchExport") + public void batchExport(String devcode) throws IOException { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + if (StrUtil.isNotEmpty(devcode)) { + query.like(DeviceImei::getDevcode, devcode); + } + List imeiList = deviceImeiService.list(query); + super.exportExcel(DeviceImei.class, imeiList, DeviceExportEnum.WELLDATA_EXPORT.getFileName()); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java index ac11187..3dcfacc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java @@ -6,7 +6,6 @@ import com.casic.missiles.modular.system.model.BusConcentrator; import com.casic.missiles.core.datascope.DataScope; -import javax.xml.ws.Response; import java.util.List; /** diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java index 0279f36..aaf9ad3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java @@ -1,13 +1,15 @@ package com.casic.missiles.modular.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.model.DeviceConcentrator; import com.casic.missiles.modular.system.model.DeviceImei; import org.springframework.web.multipart.MultipartFile; import java.util.Map; -public interface IDeviceImeiService { +public interface IDeviceImeiService extends IService { ResponseData deviceImeiListPage(Page> page, String devcode); diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java new file mode 100644 index 0000000..9647e1a --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.dto; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class DeviceExportDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @ExcelProperty("点位编号") + @Length(max = 15, min = 12) + private String wellCode; + @ExcelProperty("设备编号") + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + @ExcelProperty("设备类型") + private String deviceTypeName;//设备类型名称 +// @ExcelProperty("监控内容") + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + @ExcelProperty("权属单位") + private String deptName; + @ExcelProperty("设备安装日期") + private String installDate; + @ExcelProperty("设备位置") + private String position; + private Long concenId; +// @ExcelProperty("集中器编号") + private String concenCode; + private String onlineState; +// @ExcelProperty("在线状态") + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + @ExcelProperty("设备安装高度") + private String installHeight; + +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/DeviceImei.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/DeviceImei.java index 5473f9c..8d8cfa4 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/DeviceImei.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/DeviceImei.java @@ -1,11 +1,22 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; - +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @Data @TableName("bus_imei_iccid") public class DeviceImei extends Model { @@ -17,13 +28,14 @@ */ @TableId(value = "ID", type = IdType.AUTO) private Long id; - + @ExcelProperty("设备编号") private String devcode; + @ExcelProperty("IMEI") private String imei; - + @ExcelProperty("ICCID") private String iccid; - + @ExcelProperty("记录时间") private String logtime; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java index fab6dc2..87e3533 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmLevelServiceImpl.java @@ -16,7 +16,6 @@ import com.casic.missiles.modular.system.dao.AlarmLevelMapper; import com.casic.missiles.modular.system.model.AlarmLevel; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.javafx.collections.MappingChange; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java index e842023..77f67d9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/BusMapOverviewController.java @@ -175,4 +175,4 @@ } -} +} \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java new file mode 100644 index 0000000..197fc63 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/controller/DataOpsExportController.java @@ -0,0 +1,186 @@ +package com.casic.missiles.modular.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.model.DataFieldDefine; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.system.converter.EasyExcelLocalDateConverter; +import com.casic.missiles.modular.system.enums.AlarmDataExportEnum; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.DeviceDataListService; +import com.casic.missiles.modular.system.service.IBusDeviceSupportService; +import com.casic.missiles.modular.system.service.IDataAnalysisService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备相关数据查询 + * + * @author lwh + */ +@Slf4j +@RestController +public class DataOpsExportController extends ExportController { + @Resource + private IDataAnalysisService deviceService; + @Resource + private AbstractPermissionContext permissionService; + @Resource + private IBusDeviceSupportService busDeviceSupportService; + @Resource + private DeviceDataListService deviceDataListService; + + @GetMapping(value = "/data/deviceExport") + public void simExport(Integer deviceType) throws IOException { + DeviceDataExportEnum exportEnum = DeviceDataExportEnum.typeOf(deviceType); + if (exportEnum == null) { + throw new ServiceException(500, "设备类型不存在"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List> list = deviceDataListService.selectDeviceList(exportEnum, query); + if (deviceType == 10) { + List> listTwo = deviceDataListService.selectDeviceList(DeviceDataExportEnum.DATA_GASLIQUID_1, query); + + List sheetDataList = new ArrayList<>(); + SheetData sheetData = new SheetData(); + sheetData.setData(list); + sheetData.setSheetName(exportEnum.getTableName()); + sheetData.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + SheetData sheetData1 = new SheetData(); + sheetData1.setData(listTwo); + sheetData1.setSheetName(DeviceDataExportEnum.DATA_GASLIQUID_1.getTableName()); + sheetData1.setDataFieldDefines(exportEnum.getDataFieldDefine()); + + sheetDataList.add(sheetData); + sheetDataList.add(sheetData1); + exportMuti(sheetDataList); + } else { + export(exportEnum.getDataFieldDefine(), list, exportEnum.getTableName()); + } + } + + @GetMapping(value = "/data/alarmExport") + public void alarmExport(Integer deviceType,String startTime,String endTime){ + //告警统计查询 + List> alarms = deviceDataListService.selectAlarmRecords(deviceType,startTime,endTime); + export(AlarmDataExportEnum.DATA_ALARM.getDefines(),alarms,AlarmDataExportEnum.DATA_ALARM.name()); + } + + @SneakyThrows + private void exportMuti(List sheetDataList) { + HttpServletResponse response = this.getHttpServletResponse(); + ExcelWriter excelWriter = null; + try { + Integer sheetNo = 0; + excelWriter = EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).build(); + for (SheetData sheetData : sheetDataList) { + sheetNo++; + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : sheetData.getDataFieldDefines()) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = sheetData.getData().stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + setExResponse(response); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetData.getSheetName()).head(heads).build(); + // 这里需要设置不关闭流 + excelWriter.write(dataList, writeSheet); + } + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + } + } + + @SneakyThrows + private void export(List dataFieldDefines, List> data, String sheetName) { + HttpServletResponse response = this.getHttpServletResponse(); + try { + //转换文件头设置 + List> heads = new ArrayList<>(); + for (DataFieldDefine dataFieldDefine : dataFieldDefines) { + heads.add(Arrays.asList(dataFieldDefine.getFieldName())); + } + //转换导出数据设置 + List> dataList = data.stream().map(map -> { + List list = new ArrayList<>(map.size()); + for (List head : heads) { + list.add(map.get(head.get(0))); + } + return list; + }).collect(Collectors.toList()); + + setExResponse(response); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream()).registerConverter(new EasyExcelLocalDateConverter()).head(heads).autoCloseStream(Boolean.FALSE) + .sheet(StrUtil.isNotEmpty(sheetName) ? sheetName : "数据") + .doWrite(dataList); + } catch (Exception e) { + log.error("文件导出失败", e); + // 重置response + setCatchResponse(response, e.getMessage()); + } + } + + class SheetData { + private List dataFieldDefines; + private List> data; + private String sheetName; + + public List getDataFieldDefines() { + return dataFieldDefines; + } + + public void setDataFieldDefines(List dataFieldDefines) { + this.dataFieldDefines = dataFieldDefines; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java new file mode 100644 index 0000000..aa4c75d --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/converter/EasyExcelLocalDateConverter.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.converter; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + + +public class EasyExcelLocalDateConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Timestamp.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Timestamp value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return new WriteCellData<>(DateUtil.format(value,"yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java index aeab8dd..a78f2c9 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/DeviceDataListMapper.java @@ -1,14 +1,19 @@ package com.casic.missiles.modular.system.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** *

@@ -49,4 +54,7 @@ List getPantiltList(@Param("dataScope") DataScope dataScope, @Param("devcode") String devcode, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("wellCode") String wellCode); + List> selectDeviceList(@Param("tableName") String tableName,@Param("tableColumns")String tableColumns,@Param("orderColumn")String orderColumn); + + List> selectAlarmRecords(@Param("deviceType")Integer deviceType,@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml index 5b2b89e..0d55105 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceDataListMapper.xml @@ -741,6 +741,45 @@ + + diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java new file mode 100644 index 0000000..be77903 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/AlarmDataExportEnum.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.ArrayList; +import java.util.List; + +public enum AlarmDataExportEnum { + DATA_ALARM(1, "井盖状态", new ArrayList() {{ + add(new DataFieldDefine("id", "id")); + add(new DataFieldDefine("devcode", "devcode")); + add(new DataFieldDefine("well_code", "well_code")); + add(new DataFieldDefine("position", "position")); + add(new DataFieldDefine("alarm_num", "alarm_num")); + }}); + String typeName; + Integer type; + List defines; + + AlarmDataExportEnum(Integer type, String typeName, List defines) { + this.type = type; + this.typeName = typeName; + this.defines = defines; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public List getDefines() { + return defines; + } + + public void setDefines(List defines) { + this.defines = defines; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java new file mode 100644 index 0000000..ec34c95 --- /dev/null +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/enums/DeviceDataExportEnum.java @@ -0,0 +1,147 @@ +package com.casic.missiles.modular.system.enums; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.model.DataFieldDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataExportEnum { + DATA_WELLCOVER(1, "data_wellcover", "井盖状态", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_LIQUID(2, "data_liquid", "井内水位", "id,well_code,devcode,logtime,cell,liquiddata,descn,uptime,pci,rsrp,snr", "logtime"), + DATA_HARMFUL_GAS(3, "data_harmful_gas", "井内有害气体", "id,well_code,devcode,co,ch4,h2s,o2,switch,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_GAS(4, "data_gas", "井内燃气浓度", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_TEMP_HUM(5, "data_temp_hum", "井内温湿度", "id,well_code,devcode,cell,temperature,humidity,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_DIG(6, "data_dig", "管线开挖状态", "id,well_code,devcode,cell,ddata,frequency,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_WELLCOVER_LOCA(7, "data_wellcover_loca", "井盖位置", "id,well_code,devcode,cell,lng,lat,descn,logtime,uptime", "logtime"), + DATA_NOISE(8, "data_noise", "管线噪声", "id,well_code,devcode,cell,ddata,frequency,uptime,logtime,pci,rsrp,snr,descn", "logtime"), + DATA_WELLCOVER_DATA(9, "data_temp_press", "温度压力", "id,wellc_code,devcode,cell,temperature,press,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + + DATA_GASLIQUID(10, "data_gasliquid_gas", "井内燃气浓度、水位", "id,well_code,devcode,cell,strength,descn,uptime,logtime", "logtime"), + DATA_GASLIQUID_1(-999, "data_gasliquid_liquid", "井内燃气浓度、水位", "id,well_code,devcode,cell,liquiddata,descn,uptime,logtime", "logtime"), + DATA_HYDRANT(11, "data_hydrant", "消防栓溢水情况", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_TUBE(12, "data_tube", "燃气泄漏", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), + DATA_WELLPLUS(13, "data_wellplus", "井盖和液位", "id,well_code,devcode,status,descn,logtime", "logtime"), + DATA_H2S(14, "data_h2s", "硫化氢", "id,well_code,devcode,cell,strength,uptime,logtime,descn", "logtime"), + + DATA_PANTILT(21, "data_pantilt", "甲烷浓度", "id,well_code,devcode,dircetion,potch,concentration,uptime,logtime,cell", "logtime"), + DATA_GAS_DECTOR(101, "data_gas_dector", "燃气浓度", "id,devcode,well_code,strength,sinr,rsrp,pci,uptime,logtime,descn", "logtime"); + + + public static DeviceDataExportEnum typeOf(Integer type) { + DeviceDataExportEnum exportEnum = null; + switch (type) { + case 1: + exportEnum = DATA_WELLCOVER; + break; + case 2: + exportEnum = DATA_LIQUID; + break; + case 3: + exportEnum = DATA_HARMFUL_GAS; + break; + case 4: + exportEnum = DATA_GAS; + break; + case 5: + exportEnum = DATA_TEMP_HUM; + break; + case 6: + exportEnum = DATA_DIG; + break; + case 7: + exportEnum = DATA_WELLCOVER_LOCA; + break; + case 8: + exportEnum = DATA_NOISE; + break; + case 9: + exportEnum = DATA_WELLCOVER_DATA; + break; + case 10: + exportEnum = DATA_GASLIQUID; + break; + case 11: + exportEnum = DATA_HYDRANT; + break; + case 12: + exportEnum = DATA_TUBE; + break; + case 13: + exportEnum = DATA_WELLPLUS; + break; + case 14: + exportEnum = DATA_H2S; + break; + case 21: + exportEnum = DATA_PANTILT; + break; + case 101: + exportEnum = DATA_GAS_DECTOR; + break; + default: + exportEnum = null; + } + return exportEnum; + } + + String typeName; + String tableName; + String tableColumns; + String orderColumn; + Integer type; + + DeviceDataExportEnum(Integer type, String tableName, String typeName, String tableColumns, String orderColumn) { + this.type = type; + this.typeName = typeName; + this.tableName = tableName; + this.tableColumns = tableColumns; + this.orderColumn = orderColumn;; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataExportEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + public String getTableColumns() { + return tableColumns; + } + + public List getDataFieldDefine() { + return StrUtil.split(tableColumns, ",").stream().map(column -> new DataFieldDefine(column, column)).collect(Collectors.toList()); + } + + public void setTableColumns(String tableColumns) { + this.tableColumns = tableColumns; + } + + public String getOrderColumn() { + return orderColumn; + } + + public void setOrderColumn(String orderColumn) { + this.orderColumn = orderColumn; + } +} diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java index b6c3c87..5bc86fd 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/DeviceDataListService.java @@ -1,13 +1,18 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.ExcelModel.*; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import java.util.List; +import java.util.Map; /** * 数据统计服务接口 @@ -65,5 +70,17 @@ List getPantiltList(DataScope dataScope, String devcode, String beginTime, String endTime, String wellCode); + /** + * 设备数据查询 + */ + List> selectDeviceList(DeviceDataExportEnum exportEnum,LambdaQueryWrapper query); + /** + * 告警信息查询 + * @param deviceType 设备类型 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return + */ + List> selectAlarmRecords(Integer deviceType, String startTime, String endTime); } \ No newline at end of file diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java index c3e2327..e2f5cff 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/ThirdPartyDataService.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.GasDectorDataDto; import com.casic.missiles.modular.system.model.PantiltDataDto; -import org.omg.CORBA.Object; public interface ThirdPartyDataService { diff --git a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java index b2d0984..cd274a8 100644 --- a/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java +++ b/casic-data-analysis/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceDataListServiceImpl.java @@ -1,13 +1,19 @@ package com.casic.missiles.modular.system.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.system.dao.DeviceDataListMapper; +import com.casic.missiles.modular.system.dto.DeviceExportDto; import com.casic.missiles.modular.system.dto.statistic.*; +import com.casic.missiles.modular.system.enums.DeviceDataExportEnum; import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.model.Device; import com.casic.missiles.modular.system.service.DeviceDataListService; import com.casic.missiles.modular.system.service.IBusDeviceSupportService; import lombok.extern.slf4j.Slf4j; @@ -16,6 +22,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 数据统计分析 @@ -116,4 +123,16 @@ return this.baseMapper.getPantiltList(dataScope, devcode, beginTime, endTime, wellCode); } + @Override + public List> selectDeviceList(DeviceDataExportEnum exportEnum, LambdaQueryWrapper query) { + + return this.baseMapper.selectDeviceList(exportEnum.getTableName(),exportEnum.getTableColumns(),exportEnum.getOrderColumn()); + } + + @Override + public List> selectAlarmRecords(Integer deviceType, String startTime, String endTime) { + + return this.baseMapper.selectAlarmRecords(deviceType,startTime,endTime); + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java index 38accbd..dc07580 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/DeviceImeiController.java @@ -1,17 +1,20 @@ package com.casic.missiles.modular.system.controller; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.ExcelModel.WellCoverDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; import com.casic.missiles.modular.system.model.DeviceImei; import com.casic.missiles.modular.system.service.IDeviceImeiService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.List; import java.util.Map; /** @@ -20,7 +23,7 @@ */ @RestController @RequestMapping("/device/simManage") -public class DeviceImeiController extends BaseController { +public class DeviceImeiController extends ExportController { private final IDeviceImeiService deviceImeiService; @@ -34,7 +37,7 @@ @RequestMapping(value = "/listPage") public Object deviceImeiListPage(String devcode) { // devcode 否 string 设备编号 - Page> page = PageFactory.defaultPage(); + Page> page = PageFactory.defaultPage(); ResponseData responseData = deviceImeiService.deviceImeiListPage(page, devcode); responseData.setData(super.packForBT(page)); return responseData; @@ -71,4 +74,17 @@ public Object importImei(@RequestParam("file") MultipartFile uploadFile) { return deviceImeiService.importImeiList(uploadFile); } + + /** + * 批量导出 + */ + @GetMapping(value = "/batchExport") + public void batchExport(String devcode) throws IOException { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + if (StrUtil.isNotEmpty(devcode)) { + query.like(DeviceImei::getDevcode, devcode); + } + List imeiList = deviceImeiService.list(query); + super.exportExcel(DeviceImei.class, imeiList, DeviceExportEnum.WELLDATA_EXPORT.getFileName()); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java index ac11187..3dcfacc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IBusConcentratorService.java @@ -6,7 +6,6 @@ import com.casic.missiles.modular.system.model.BusConcentrator; import com.casic.missiles.core.datascope.DataScope; -import javax.xml.ws.Response; import java.util.List; /** diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java index 0279f36..aaf9ad3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IDeviceImeiService.java @@ -1,13 +1,15 @@ package com.casic.missiles.modular.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.model.DeviceConcentrator; import com.casic.missiles.modular.system.model.DeviceImei; import org.springframework.web.multipart.MultipartFile; import java.util.Map; -public interface IDeviceImeiService { +public interface IDeviceImeiService extends IService { ResponseData deviceImeiListPage(Page> page, String devcode); diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java new file mode 100644 index 0000000..9647e1a --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/dto/DeviceExportDto.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.dto; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class DeviceExportDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @ExcelProperty("点位编号") + @Length(max = 15, min = 12) + private String wellCode; + @ExcelProperty("设备编号") + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + @ExcelProperty("设备类型") + private String deviceTypeName;//设备类型名称 +// @ExcelProperty("监控内容") + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + @ExcelProperty("权属单位") + private String deptName; + @ExcelProperty("设备安装日期") + private String installDate; + @ExcelProperty("设备位置") + private String position; + private Long concenId; +// @ExcelProperty("集中器编号") + private String concenCode; + private String onlineState; +// @ExcelProperty("在线状态") + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + @ExcelProperty("设备安装高度") + private String installHeight; + +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/DeviceImei.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/DeviceImei.java index 5473f9c..8d8cfa4 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/DeviceImei.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/DeviceImei.java @@ -1,11 +1,22 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; - +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @Data @TableName("bus_imei_iccid") public class DeviceImei extends Model { @@ -17,13 +28,14 @@ */ @TableId(value = "ID", type = IdType.AUTO) private Long id; - + @ExcelProperty("设备编号") private String devcode; + @ExcelProperty("IMEI") private String imei; - + @ExcelProperty("ICCID") private String iccid; - + @ExcelProperty("记录时间") private String logtime; } diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/service/IBusDeviceSupportService.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/service/IBusDeviceSupportService.java index 0b6fd75..5db8b7b 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/service/IBusDeviceSupportService.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/service/IBusDeviceSupportService.java @@ -1,7 +1,9 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.model.application.service.IRepositorySupportService; +import com.casic.missiles.modular.system.dto.DeviceDto; import com.casic.missiles.modular.system.dto.DeviceInWellInfo; import com.casic.missiles.modular.system.dto.DeviceInfoDto; import com.casic.missiles.modular.system.model.Device; @@ -39,4 +41,5 @@ * @return 井下设备信息 */ List getDeviceInWellInfo(Long id); + }