From 141f123017a4731dacd6d8ee1c2d3a951660430f Mon Sep 17 00:00:00 2001 From: yj <913944315@qq.com> Date: Wed, 31 Jul 2024 10:55:00 +0800 Subject: [PATCH] =?UTF-8?q?eureka=E4=BF=AE=E6=94=B9=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=90=83=E6=9C=BA=E6=97=8B=E8=BD=AC?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E7=82=B9=E4=BD=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/common/MyBatisPlusConfig.java | 2 +- .../device_car/config/common/WebConfig.java | 3 +- .../xr/device_car/config/utils/DateUtils.java | 13 + .../FocalLengthConfigController.java | 25 +- .../MeterInitializationController.java | 28 +- .../modules/analysis/entity/SnExport.java | 61 +++ .../analysis/entity/SnMeterHistory.java | 130 ++++++ .../modules/analysis/entity/SnMeterShow.java | 130 ++++++ .../modules/analysis/entity/XlsExport1.java | 35 ++ .../analysis/mapper/SnExportMapper.java | 20 + .../analysis/mapper/SnMeterHistoryMapper.java | 20 + .../analysis/mapper/SnMeterShowMapper.java | 20 + .../analysis/service/SnExportService.java | 17 + .../service/SnMeterHistoryService.java | 18 + .../analysis/service/SnMeterShowService.java | 20 + .../service/impl/SnExportServiceImpl.java | 45 ++ .../impl/SnMeterHistoryServiceImpl.java | 48 ++ .../service/impl/SnMeterShowServiceImpl.java | 44 ++ .../largescreen/SnMeterHistoryController.java | 75 ++++ .../largescreen/SnMeterShowController.java | 73 +++ .../largescreen/XlsDataController.java | 417 ++++++++++++++++++ .../src/main/resources/file/XlsExport3.xls | Bin 0 -> 40448 bytes .../java/com/xr/device/netty/NettyConfig.java | 5 +- .../java/com/xr/device/netty/NettyServer.java | 7 +- .../xr/device/schedule/GetMeterSchedule.java | 7 + .../src/main/resources/application-dev.yml | 2 +- 26 files changed, 1256 insertions(+), 9 deletions(-) create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnExport.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnMeterHistory.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnMeterShow.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/XlsExport1.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnExportMapper.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnMeterHistoryMapper.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnMeterShowMapper.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnExportService.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnMeterHistoryService.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnMeterShowService.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnExportServiceImpl.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnMeterHistoryServiceImpl.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnMeterShowServiceImpl.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/largescreen/SnMeterHistoryController.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/largescreen/SnMeterShowController.java create mode 100644 device_cars/src/main/java/com/xr/device_car/modules/largescreen/XlsDataController.java create mode 100644 device_cars/src/main/resources/file/XlsExport3.xls diff --git a/device_cars/src/main/java/com/xr/device_car/config/common/MyBatisPlusConfig.java b/device_cars/src/main/java/com/xr/device_car/config/common/MyBatisPlusConfig.java index 1b840f0..2e1118d 100644 --- a/device_cars/src/main/java/com/xr/device_car/config/common/MyBatisPlusConfig.java +++ b/device_cars/src/main/java/com/xr/device_car/config/common/MyBatisPlusConfig.java @@ -9,7 +9,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement -@MapperScan("com.xr.device_car.analysis.mapper") +@MapperScan("com.xr.device_car.modules.analysis.mapper") @Configuration public class MyBatisPlusConfig { diff --git a/device_cars/src/main/java/com/xr/device_car/config/common/WebConfig.java b/device_cars/src/main/java/com/xr/device_car/config/common/WebConfig.java index 97c5953..a861d1c 100644 --- a/device_cars/src/main/java/com/xr/device_car/config/common/WebConfig.java +++ b/device_cars/src/main/java/com/xr/device_car/config/common/WebConfig.java @@ -18,6 +18,7 @@ public class WebConfig implements WebMvcConfigurer { public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor()) .addPathPatterns("/**").excludePathPatterns("/user/webLogin") - .excludePathPatterns("/user/login","/user/getUserByToken","/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**"); + .excludePathPatterns("/user/login","/user/getUserByToken","/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**" + ,"/models/sn-meter-history/list","/models/sn-meter-show/list"); } } \ No newline at end of file diff --git a/device_cars/src/main/java/com/xr/device_car/config/utils/DateUtils.java b/device_cars/src/main/java/com/xr/device_car/config/utils/DateUtils.java index c8f81c0..99a050a 100644 --- a/device_cars/src/main/java/com/xr/device_car/config/utils/DateUtils.java +++ b/device_cars/src/main/java/com/xr/device_car/config/utils/DateUtils.java @@ -1,6 +1,7 @@ package com.xr.device_car.config.utils; import org.apache.commons.lang3.time.DateFormatUtils; +import org.joda.time.DateTime; import java.lang.management.ManagementFactory; import java.text.ParseException; @@ -214,4 +215,16 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils } return dateList; } + + /** + * 对日期的【天】进行加/减 + * + * @param date 日期 + * @param days 天数,负数为减 + * @return 加/减几天后的日期 + */ + public static Date addDateDays(Date date, int days) { + DateTime dateTime = new DateTime(date); + return dateTime.plusDays(days).toDate(); + } } \ No newline at end of file diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/FocalLengthConfigController.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/FocalLengthConfigController.java index 6867836..df01549 100644 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/FocalLengthConfigController.java +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/FocalLengthConfigController.java @@ -14,6 +14,10 @@ import com.xr.device_car.modules.analysis.service.FocalLengthConfigService; import com.xr.device_car.modules.analysis.service.MeterConfigService; import com.xr.device_car.modules.analysis.service.MeterTypeService; import com.xr.device_car.modules.system.entity.UserInfo; +import com.xr.onvifhk.entity.BallheadPT; +import com.xr.onvifhk.entity.DeviceInfo; +import com.xr.onvifhk.entity.OnvifAuthBean; +import com.xr.onvifhk.util.HkComUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestBody; @@ -250,7 +254,26 @@ public class FocalLengthConfigController { bufferedImage = Files.urlByImage(buffered); } if(deviceCamera.getDeviceType().equals("3") || deviceCamera.getDeviceType().equals("4")){ // 拉取球机 - bufferedImage= HkComUtil.getBole(deviceCamera); + DeviceInfo info = new DeviceInfo(); + info.setAccount(deviceCamera.getAccount()); + info.setPassword(deviceCamera.getPassword()); + info.setIp(deviceCamera.getDeviceIp()); + info.setPort(deviceCamera.getDevicePort()); + BallheadPT ball=new BallheadPT(); + if(StringUtils.isNotEmpty(meterConfig.getCameraX()) && + StringUtils.isNotEmpty(meterConfig.getCameraY())&& + StringUtils.isNotEmpty(meterConfig.getCameraZ())){ + ball.setX(meterConfig.getCameraX()); + ball.setY(meterConfig.getCameraY()); + ball.setZ(meterConfig.getCameraZ()); + String uri = HkComUtil.getBole(info,ball); + try{ + bufferedImage = Files.urlByImage(uri); + }catch (Exception e){ + uri = uri.replace(deviceCamera.getAccount()+":"+deviceCamera.getPassword()+"@",""); + bufferedImage = Files.urlByImages(uri,deviceCamera.getAccount(),deviceCamera.getPassword()); + } + } } byte [] bytes= Files.bufferedImageToByte(bufferedImage); focalLengthConfig.setFocalPicture(bytes); diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterInitializationController.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterInitializationController.java index c886595..4a23fa4 100644 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterInitializationController.java +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterInitializationController.java @@ -13,6 +13,9 @@ import com.xr.device_car.modules.analysis.service.DeviceCameraService; import com.xr.device_car.modules.analysis.service.IMeterInitializationService; import com.xr.device_car.modules.analysis.service.MeterConfigService; import com.xr.device_car.modules.analysis.service.MeterTypeService; +import com.xr.onvifhk.entity.BallheadPT; +import com.xr.onvifhk.entity.DeviceInfo; +import com.xr.onvifhk.util.HkComUtil; import io.minio.MinioClient; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RequestMapping; @@ -59,7 +62,22 @@ public class MeterInitializationController { bufferedImage= AdbUtil.getCamDevice(); } if(deviceCamera.getDeviceType().equals("3") || deviceCamera.getDeviceType().equals("4")){ // 拉取球机 - bufferedImage= HkComUtil.getBole(deviceCamera); + DeviceInfo info = getDeviceInfo(deviceCamera); + if(StringUtils.isNotEmpty(config.getCameraX()) && + StringUtils.isNotEmpty(config.getCameraY())&& + StringUtils.isNotEmpty(config.getCameraZ())){ + BallheadPT ball=new BallheadPT(); + ball.setX(config.getCameraX()); + ball.setY(config.getCameraY()); + ball.setZ(config.getCameraZ()); + String uri = HkComUtil.getBole(info,ball); + try{ + bufferedImage = Files.urlByImage(uri); + }catch (Exception e){ + uri = uri.replace(deviceCamera.getAccount()+":"+deviceCamera.getPassword()+"@",""); + bufferedImage = Files.urlByImages(uri,deviceCamera.getAccount(),deviceCamera.getPassword()); + } + } } long l = new Date().getTime(); String path = StaticPropUtil.imagePath +l+".png"; @@ -171,5 +189,13 @@ public class MeterInitializationController { return Result.OK("初始化完成"); } + private DeviceInfo getDeviceInfo(DeviceCamera camera){ + DeviceInfo info=new DeviceInfo(); + info.setAccount(camera.getAccount()); + info.setIp(camera.getDeviceIp()); + info.setPassword(camera.getPassword()); + info.setPort(camera.getDevicePort()); + return info; + } } diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnExport.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnExport.java new file mode 100644 index 0000000..9ef3ad0 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnExport.java @@ -0,0 +1,61 @@ +package com.xr.device_car.modules.analysis.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * 导出表配置 + * @TableName sn_export + */ +@TableName(value ="sn_export") +@Data +public class SnExport implements Serializable { + /** + * 主键ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 标题 + */ + private String title; + + /** + * 导出表名称 + */ + private String exportName; + + /** + * 创建时间 + */ + private LocalDateTime createAt; + + /** + * 修改时间 + */ + private LocalDateTime updateAt; + + /** + * 默认0正常,1删除 + */ + private Integer deletedFlag; + + /** + * 标题ID + */ + private Integer titleId; + + /** + * 排序 + */ + private Integer orderNum; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnMeterHistory.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnMeterHistory.java new file mode 100644 index 0000000..9d1391b --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnMeterHistory.java @@ -0,0 +1,130 @@ +package com.xr.device_car.modules.analysis.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * + * @TableName sn_meter_history + */ +@TableName(value ="sn_meter_history") +@Data +public class SnMeterHistory implements Serializable { + /** + * 主键id + */ + private Integer id; + + /** + * 表计id + */ + private Integer meterId; + + /** + * 设备类型 + */ + private String deviceType; + + /** + * 表计类型配置编号 + */ + private Integer meterType; + + /** + * 表计类型名称 + */ + private String meterTypeId; + + /** + * 建模模型Id + */ + private String meterCode; + + /** + * 安装位置 + */ + private String meterPosition; + + /** + * 变电站名称 + */ + private String standName; + + /** + * 所属站 + */ + private Integer stationId; + + /** + * 电压等级(1安全电压2低压3高压4超高压5特高压) + */ + private String voltageClass; + + /** + * 识别间隔 + */ + private String room; + + /** + * 回路名称 + */ + private String loopName; + + /** + * 相别 + */ + private String mutually; + + /** + * 0读取异常 1正常 2越线告警 + */ + private Integer status; + + /** + * 读数时间 + */ + private LocalDateTime recognitionTime; + + /** + * 表计照片 + */ + private String url; + + /** + * 告警最小值 + */ + private Double max; + + /** + * 告警最大值 + */ + private Double min; + + /** + * 读数值 + */ + private String reading2; + + /** + * 读数值 + */ + private String readingValue; + + /** + * 报警确认值0默认 1已经确认 + */ + private Integer alarmConfirm; + + /** + * 读数单位 + */ + private String unit; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnMeterShow.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnMeterShow.java new file mode 100644 index 0000000..92f47cd --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SnMeterShow.java @@ -0,0 +1,130 @@ +package com.xr.device_car.modules.analysis.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * + * @TableName sn_meter_show + */ +@TableName(value ="sn_meter_show") +@Data +public class SnMeterShow implements Serializable { + /** + * 主键id + */ + private Integer id; + + /** + * 表计id + */ + private Integer meterId; + + /** + * 设备类型 + */ + private String deviceType; + + /** + * 表计类型配置编号 + */ + private Integer meterType; + + /** + * 表计类型名称 + */ + private String meterTypeId; + + /** + * 建模模型Id + */ + private String meterCode; + + /** + * 安装位置 + */ + private String meterPosition; + + /** + * 变电站名称 + */ + private String standName; + + /** + * 所属站 + */ + private Integer stationId; + + /** + * 电压等级(1安全电压2低压3高压4超高压5特高压) + */ + private String voltageClass; + + /** + * 识别间隔 + */ + private String room; + + /** + * 回路名称 + */ + private String loopName; + + /** + * 相别 + */ + private String mutually; + + /** + * 0读取异常 1正常 2越线告警 + */ + private Integer status; + + /** + * 读数时间 + */ + private LocalDateTime recognitionTime; + + /** + * 表计照片 + */ + private String url; + + /** + * 告警最小值 + */ + private Double max; + + /** + * 告警最大值 + */ + private Double min; + + /** + * 读数值 + */ + private String reading2; + + /** + * 读数值 + */ + private String readingValue; + + /** + * 报警确认值0默认 1已经确认 + */ + private Integer alarmConfirm; + + /** + * 读数单位 + */ + private String unit; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/XlsExport1.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/XlsExport1.java new file mode 100644 index 0000000..4fb9cbe --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/XlsExport1.java @@ -0,0 +1,35 @@ +package com.xr.device_car.modules.analysis.entity; + +import lombok.Data; + +@Data +public class XlsExport1 { + + private static final long serialVersionUID = 1L; + private String reading1 = "*"; + private String reading2 = "*"; + private String reading3 = "*"; + private String reading4 = "*"; + private String reading5 = "*"; + private String reading6 = "*"; + private String reading7 = "*"; + private String reading8 = "*"; + private String reading9 = "*"; + private String reading10 = "*"; + private String reading11 = "*"; + private String reading12 = "*"; + private String reading13 = "*"; + private String reading14 = "*"; + private String reading15 = "*"; + private String reading16 = "*"; + private String reading17 = "*"; + private String reading18 = "*"; + private String reading19 = "*"; + private String reading20 = "*"; + private String reading21 = "*"; + private String reading22 = "*"; + private String reading23 = "*"; + private String reading24 = "*"; + private String reading25 = "*"; + private String reading26 = "*"; +} diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnExportMapper.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnExportMapper.java new file mode 100644 index 0000000..fdf4468 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnExportMapper.java @@ -0,0 +1,20 @@ +package com.xr.device_car.modules.analysis.mapper; + +import com.xr.device_car.modules.analysis.entity.SnExport; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author 范亚杰 +* @description 针对表【sn_export(导出表配置)】的数据库操作Mapper +* @createDate 2024-07-30 17:03:43 +* @Entity com.xr.device_car.modules.analysis.entity.SnExport +*/ +@Mapper +public interface SnExportMapper extends BaseMapper { + +} + + + + diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnMeterHistoryMapper.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnMeterHistoryMapper.java new file mode 100644 index 0000000..38f65cf --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnMeterHistoryMapper.java @@ -0,0 +1,20 @@ +package com.xr.device_car.modules.analysis.mapper; + +import com.xr.device_car.modules.analysis.entity.SnMeterHistory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author 范亚杰 +* @description 针对表【sn_meter_history】的数据库操作Mapper +* @createDate 2024-07-30 13:31:51 +* @Entity com.xr.device_car.modules.analysis.entity.SnMeterHistory +*/ +@Mapper +public interface SnMeterHistoryMapper extends BaseMapper { + +} + + + + diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnMeterShowMapper.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnMeterShowMapper.java new file mode 100644 index 0000000..340e087 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/SnMeterShowMapper.java @@ -0,0 +1,20 @@ +package com.xr.device_car.modules.analysis.mapper; + +import com.xr.device_car.modules.analysis.entity.SnMeterShow; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author 范亚杰 +* @description 针对表【sn_meter_show】的数据库操作Mapper +* @createDate 2024-07-30 15:14:34 +* @Entity com.xr.device_car.modules.analysis.entity.SnMeterShow +*/ +@Mapper +public interface SnMeterShowMapper extends BaseMapper { + +} + + + + diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnExportService.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnExportService.java new file mode 100644 index 0000000..1965a92 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnExportService.java @@ -0,0 +1,17 @@ +package com.xr.device_car.modules.analysis.service; + +import com.xr.device_car.modules.analysis.entity.SnExport; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** +* @author 范亚杰 +* @description 针对表【sn_export(导出表配置)】的数据库操作Service +* @createDate 2024-07-30 17:03:43 +*/ +public interface SnExportService extends IService { + + List getListByName(SnExport param); + +} diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnMeterHistoryService.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnMeterHistoryService.java new file mode 100644 index 0000000..acb68e4 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnMeterHistoryService.java @@ -0,0 +1,18 @@ +package com.xr.device_car.modules.analysis.service; + +import com.xr.device_car.modules.analysis.entity.SnMeterHistory; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.Date; +import java.util.List; + +/** +* @author 范亚杰 +* @description 针对表【sn_meter_history】的数据库操作Service +* @createDate 2024-07-30 13:31:51 +*/ +public interface SnMeterHistoryService extends IService { + List getListByRoomIds(List circuitIds, Date checkDate); + + List getListByCircuitIds(List circuitIds, Date checkDate, SnMeterHistory param); +} diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnMeterShowService.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnMeterShowService.java new file mode 100644 index 0000000..1c8f2ba --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/SnMeterShowService.java @@ -0,0 +1,20 @@ +package com.xr.device_car.modules.analysis.service; + +import com.xr.device_car.modules.analysis.entity.SnMeterShow; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.Date; +import java.util.List; + +/** +* @author 范亚杰 +* @description 针对表【sn_meter_show】的数据库操作Service +* @createDate 2024-07-30 15:14:34 +*/ +public interface SnMeterShowService extends IService { + + List getListByCircuitIds(List loopName, Date checkDate); + + List getListByCircuitIds(List loopName, Date checkDate, SnMeterShow param); + +} diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnExportServiceImpl.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnExportServiceImpl.java new file mode 100644 index 0000000..24e6427 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnExportServiceImpl.java @@ -0,0 +1,45 @@ +package com.xr.device_car.modules.analysis.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xr.device_car.modules.analysis.entity.SnExport; +import com.xr.device_car.modules.analysis.service.SnExportService; +import com.xr.device_car.modules.analysis.mapper.SnExportMapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** +* @author 范亚杰 +* @description 针对表【sn_export(导出表配置)】的数据库操作Service实现 +* @createDate 2024-07-30 17:03:43 +*/ +@Service +@DS("db2") +public class SnExportServiceImpl extends ServiceImpl + implements SnExportService{ + + @Override + public List getListByName(SnExport param) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda() + // 标题/ID + .eq(StringUtils.isNotEmpty(param.getTitle()), SnExport::getTitle, param.getTitle()) + // 导出表名称 + .eq(StringUtils.isNotEmpty(param.getExportName()), SnExport::getExportName, param.getExportName()) + // 创建时间 + .eq(param.getCreateAt() != null, SnExport::getCreateAt, param.getCreateAt()) + // 修改时间 + .eq(param.getUpdateAt() != null, SnExport::getUpdateAt, param.getUpdateAt()) + .orderByAsc(SnExport::getOrderNum) + ; + return list(queryWrapper); + } + +} + + + + diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnMeterHistoryServiceImpl.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnMeterHistoryServiceImpl.java new file mode 100644 index 0000000..696d575 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnMeterHistoryServiceImpl.java @@ -0,0 +1,48 @@ +package com.xr.device_car.modules.analysis.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xr.device_car.modules.analysis.entity.SnMeterHistory; +import com.xr.device_car.modules.analysis.service.SnMeterHistoryService; +import com.xr.device_car.modules.analysis.mapper.SnMeterHistoryMapper; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +/** +* @author 范亚杰 +* @description 针对表【sn_meter_history】的数据库操作Service实现 +* @createDate 2024-07-30 13:31:51 +*/ +@Service +@DS("db2") +public class SnMeterHistoryServiceImpl extends ServiceImpl + implements SnMeterHistoryService{ + + @Override + public List getListByRoomIds(List roomIds, Date checkDate) { + QueryWrapper queryWrapper = new QueryWrapper<>(); +// String idsStr = "ORDER BY FIELD (id,"+ String.join(",", circuitIds.stream().map(Object::toString).collect(Collectors.toList()))+")"; + queryWrapper.lambda().in(SnMeterHistory::getMeterId, roomIds) + .ge(checkDate !=null, SnMeterHistory::getRecognitionTime, checkDate); +// .le(checkDate !=null, SnMeterHistory::getRecognitionTime, DateUtils.addDateDays(checkDate,1)); + return list(queryWrapper); + } + + @Override + public List getListByCircuitIds(List circuitIds, Date checkDate, SnMeterHistory param) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(SnMeterHistory::getDeviceType, circuitIds) + .eq(param.getDeviceType()!=null, SnMeterHistory::getDeviceType, param.getDeviceType()) + .ge(checkDate !=null, SnMeterHistory::getRecognitionTime, checkDate); +// .le(checkDate !=null, SnMeterHistory::getRecognitionTime, DateUtils.addDateDays(checkDate,1)); + return list(queryWrapper); + } + +} + + + + diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnMeterShowServiceImpl.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnMeterShowServiceImpl.java new file mode 100644 index 0000000..aebc7ab --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/SnMeterShowServiceImpl.java @@ -0,0 +1,44 @@ +package com.xr.device_car.modules.analysis.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xr.device_car.config.utils.DateUtils; +import com.xr.device_car.modules.analysis.entity.SnMeterShow; +import com.xr.device_car.modules.analysis.service.SnMeterShowService; +import com.xr.device_car.modules.analysis.mapper.SnMeterShowMapper; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +/** +* @author 范亚杰 +* @description 针对表【sn_meter_show】的数据库操作Service实现 +* @createDate 2024-07-30 15:14:34 +*/ +@Service +@DS("db2") +public class SnMeterShowServiceImpl extends ServiceImpl + implements SnMeterShowService{ + + @Override + public List getListByCircuitIds(List loopName, Date checkDate) { + return getListByCircuitIds( loopName, checkDate, new SnMeterShow()); + } + + @Override + public List getListByCircuitIds(List loopName, Date checkDate, SnMeterShow param) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(SnMeterShow::getLoopName, loopName) + .eq(param.getDeviceType()!=null, SnMeterShow::getDeviceType, param.getDeviceType()) + .ge(checkDate !=null, SnMeterShow::getRecognitionTime, checkDate) + .le(checkDate !=null, SnMeterShow::getRecognitionTime, DateUtils.addDateDays(checkDate,1)); + return list(queryWrapper); + } + +} + + + + diff --git a/device_cars/src/main/java/com/xr/device_car/modules/largescreen/SnMeterHistoryController.java b/device_cars/src/main/java/com/xr/device_car/modules/largescreen/SnMeterHistoryController.java new file mode 100644 index 0000000..b785fa8 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/largescreen/SnMeterHistoryController.java @@ -0,0 +1,75 @@ +package com.xr.device_car.modules.largescreen; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.xr.device_car.config.common.Result; +import com.xr.device_car.config.utils.StaticPropUtil; +import com.xr.device_car.config.utils.StringUtils; +import com.xr.device_car.modules.analysis.entity.SnMeterHistory; +import com.xr.device_car.modules.analysis.entity.SnMeterHistory; +import com.xr.device_car.modules.analysis.service.SnMeterHistoryService; +import com.xr.device_car.modules.analysis.service.SnMeterHistoryService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.List; + +@RestController +@RequestMapping("/models/sn-meter-history") +@RequiredArgsConstructor +public class SnMeterHistoryController { + + private final SnMeterHistoryService snMeterHistoryService; + + @PostMapping(value = "/list") + public Result> info(@Valid @RequestBody SnMeterHistory param) { + param.setStationId(StaticPropUtil.stationId); + QueryWrapper query=new QueryWrapper<>(); + query.lambda() + // 表计ID + .eq(param.getMeterId() != null, SnMeterHistory::getMeterId, param.getMeterId()) + // 设备类型 + .eq(StringUtils.isNotEmpty(param.getDeviceType()), SnMeterHistory::getDeviceType, param.getDeviceType()) + // 表计类型id + .eq(param.getMeterTypeId() != null, SnMeterHistory::getMeterTypeId, param.getMeterTypeId()) + // 1油温表2油位表3有载档位4SF6密度表5开关动作计数器6避雷器泄漏电流表7压力表8水位表 + .eq(StringUtils.isNotEmpty(param.getMeterType()), SnMeterHistory::getMeterType, param.getMeterType()) + // 表计编号 + .eq(StringUtils.isNotEmpty(param.getMeterCode()), SnMeterHistory::getMeterCode, param.getMeterCode()) + // 表计安装位置 + .eq(StringUtils.isNotEmpty(param.getMeterPosition()), SnMeterHistory::getMeterPosition, param.getMeterPosition()) + // 站点名称 + .eq(StringUtils.isNotEmpty(param.getStandName()), SnMeterHistory::getStandName, param.getStandName()) + // 站点ID + .eq(StringUtils.isNotEmpty(param.getStationId()), SnMeterHistory::getStationId, param.getStationId()) + // 电压等级(kv) + .eq(StringUtils.isNotEmpty(param.getVoltageClass()), SnMeterHistory::getVoltageClass, param.getVoltageClass()) + // 房间 + .eq(StringUtils.isNotEmpty(param.getRoom()), SnMeterHistory::getRoom, param.getRoom()) + // 回路名称 + .eq(StringUtils.isNotEmpty(param.getLoopName()), SnMeterHistory::getLoopName, param.getLoopName()) + // 相别 + .eq(StringUtils.isNotEmpty(param.getMutually()), SnMeterHistory::getMutually, param.getMutually()) + // 0读取异常 1正常 2越线告警 + .eq(param.getStatus() != null, SnMeterHistory::getStatus, param.getStatus()) + // 识别时间 + .eq(param.getRecognitionTime() != null, SnMeterHistory::getRecognitionTime, param.getRecognitionTime()) + // 图片地址 + .eq(StringUtils.isNotEmpty(param.getUrl()), SnMeterHistory::getUrl, param.getUrl()) + // 阈值最小值 + .eq(StringUtils.isNotEmpty(param.getMax()), SnMeterHistory::getMax, param.getMax()) + // 阈值最大值 + .eq(StringUtils.isNotEmpty(param.getMin()), SnMeterHistory::getMin, param.getMin()) + // 读数值2 + .eq(StringUtils.isNotEmpty(param.getReading2()), SnMeterHistory::getReading2, param.getReading2()) + // 读数值 + .eq(param.getAlarmConfirm() != null, SnMeterHistory::getAlarmConfirm, param.getAlarmConfirm()); + List data = snMeterHistoryService.list(query); + return Result.OK(data); + } + +} diff --git a/device_cars/src/main/java/com/xr/device_car/modules/largescreen/SnMeterShowController.java b/device_cars/src/main/java/com/xr/device_car/modules/largescreen/SnMeterShowController.java new file mode 100644 index 0000000..6566709 --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/largescreen/SnMeterShowController.java @@ -0,0 +1,73 @@ +package com.xr.device_car.modules.largescreen; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.xr.device_car.config.common.Result; +import com.xr.device_car.config.utils.StaticPropUtil; +import com.xr.device_car.config.utils.StringUtils; +import com.xr.device_car.modules.analysis.entity.SnMeterShow; +import com.xr.device_car.modules.analysis.entity.SnMeterShow; +import com.xr.device_car.modules.analysis.service.SnMeterShowService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.List; + +@RestController +@RequestMapping("/models/sn-meter-show") +@RequiredArgsConstructor +public class SnMeterShowController { + + private final SnMeterShowService snMeterShowService; + + @PostMapping(value = "/list") + public Result> info(@Valid @RequestBody SnMeterShow param) { + param.setStationId(StaticPropUtil.stationId); + QueryWrapper query=new QueryWrapper<>(); + query.lambda() + // 表计ID + .eq(param.getMeterId() != null, SnMeterShow::getMeterId, param.getMeterId()) + // 设备类型 + .eq(StringUtils.isNotEmpty(param.getDeviceType()), SnMeterShow::getDeviceType, param.getDeviceType()) + // 表计类型id + .eq(param.getMeterTypeId() != null, SnMeterShow::getMeterTypeId, param.getMeterTypeId()) + // 1油温表2油位表3有载档位4SF6密度表5开关动作计数器6避雷器泄漏电流表7压力表8水位表 + .eq(StringUtils.isNotEmpty(param.getMeterType()), SnMeterShow::getMeterType, param.getMeterType()) + // 表计编号 + .eq(StringUtils.isNotEmpty(param.getMeterCode()), SnMeterShow::getMeterCode, param.getMeterCode()) + // 表计安装位置 + .eq(StringUtils.isNotEmpty(param.getMeterPosition()), SnMeterShow::getMeterPosition, param.getMeterPosition()) + // 站点名称 + .eq(StringUtils.isNotEmpty(param.getStandName()), SnMeterShow::getStandName, param.getStandName()) + // 站点ID + .eq(StringUtils.isNotEmpty(param.getStationId()), SnMeterShow::getStationId, param.getStationId()) + // 电压等级(kv) + .eq(StringUtils.isNotEmpty(param.getVoltageClass()), SnMeterShow::getVoltageClass, param.getVoltageClass()) + // 房间 + .eq(StringUtils.isNotEmpty(param.getRoom()), SnMeterShow::getRoom, param.getRoom()) + // 回路名称 + .eq(StringUtils.isNotEmpty(param.getLoopName()), SnMeterShow::getLoopName, param.getLoopName()) + // 相别 + .eq(StringUtils.isNotEmpty(param.getMutually()), SnMeterShow::getMutually, param.getMutually()) + // 0读取异常 1正常 2越线告警 + .eq(param.getStatus() != null, SnMeterShow::getStatus, param.getStatus()) + // 识别时间 + .eq(param.getRecognitionTime() != null, SnMeterShow::getRecognitionTime, param.getRecognitionTime()) + // 图片地址 + .eq(StringUtils.isNotEmpty(param.getUrl()), SnMeterShow::getUrl, param.getUrl()) + // 阈值最小值 + .eq(StringUtils.isNotEmpty(param.getMax()), SnMeterShow::getMax, param.getMax()) + // 阈值最大值 + .eq(StringUtils.isNotEmpty(param.getMin()), SnMeterShow::getMin, param.getMin()) + // 读数值2 + .eq(StringUtils.isNotEmpty(param.getReading2()), SnMeterShow::getReading2, param.getReading2()) + // 读数值 + .eq(param.getAlarmConfirm() != null, SnMeterShow::getAlarmConfirm, param.getAlarmConfirm()); + List data = snMeterShowService.list(query); + return Result.OK(data); + } + +} diff --git a/device_cars/src/main/java/com/xr/device_car/modules/largescreen/XlsDataController.java b/device_cars/src/main/java/com/xr/device_car/modules/largescreen/XlsDataController.java new file mode 100644 index 0000000..e462daa --- /dev/null +++ b/device_cars/src/main/java/com/xr/device_car/modules/largescreen/XlsDataController.java @@ -0,0 +1,417 @@ +package com.xr.device_car.modules.largescreen; + +import com.alibaba.excel.util.StringUtils; +import com.xr.device_car.modules.analysis.entity.SnExport; +import com.xr.device_car.modules.analysis.entity.SnMeterHistory; +import com.xr.device_car.modules.analysis.entity.XlsExport1; +import com.xr.device_car.modules.analysis.service.SnExportService; +import com.xr.device_car.modules.analysis.service.SnMeterHistoryService; +import com.xr.device_car.modules.analysis.service.SnMeterShowService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + + +@RestController +@RequestMapping("/models/xls") +@RequiredArgsConstructor +public class XlsDataController { + + private final SnMeterHistoryService snMeterHistoryService; + + private final SnMeterShowService snMeterShowService; + + private final SnExportService snExportService; + + @GetMapping(value = "/export3/{date}") + public void export3(@PathVariable(required = false) String date, HttpServletResponse response) { + this.hisExport(date,response); + } + + private void hisExport( String date, HttpServletResponse response) { + String fileName = "数字化表计全面巡视作业卡"; + getResponseHeader(response, fileName, date); + List roomIds = getTitleId(fileName+"-s1"); + Date checkDate = new Date(); + if(StringUtils.isNotBlank(date)) { + //checkDate = DateUtils.stringToDate(date, DATE_PATTERN); + } + List showList = snMeterHistoryService.getListByRoomIds(roomIds,checkDate); + HashMap tmp1 = new HashMap<>(); + //油温表 1 油位表 2 档位表 3 + showList.forEach(r->{ + if( !tmp1.containsKey(r.getMeterId()) ) { + tmp1.put(r.getMeterId(),new XlsExport1()); + } + if ( r.getMeterTypeId().equals(1) && r.getMeterPosition().equals("本体") ) { + tmp1.get(r.getMeterId()).setReading1("本体油温表:"+r.getReadingValue()); + } else if ( r.getMeterTypeId().equals(1) && r.getMeterPosition().equals("本体南侧") ) { + tmp1.get(r.getMeterId()).setReading1("本体南侧油温表1:"+r.getReadingValue()); + } else if( r.getMeterTypeId().equals(1) && r.getMeterPosition().equals("本体北侧") ){ + tmp1.get(r.getMeterId()).setReading2("本体北侧油温表2:"+r.getReadingValue()); + }else if( r.getMeterTypeId().equals(2) && r.getMeterPosition().equals("本体") ){ + tmp1.get(r.getMeterId()).setReading3("本体油位:"+r.getReadingValue()); + }else if( r.getMeterTypeId().equals(2) && r.getMeterPosition().equals("有载") ){ + tmp1.get(r.getMeterId()).setReading4("有载油位:"+r.getReadingValue()); + }else if( r.getMeterTypeId().equals(3) && r.getMeterPosition().equals("有载") ){ + tmp1.get(r.getMeterId()).setReading5("有载档位:"+r.getReadingValue()); + } + }); + + List sheet1List = new ArrayList<>(); + roomIds.forEach (r->{ + sheet1List.add(tmp1.get(r)); + }); + + //组合电器(GIS)1 + List distinctionId = getTitleId(fileName+"-s2"); + SnMeterHistory p = new SnMeterHistory(); + p.setDeviceType("组合电器"); + showList = snMeterHistoryService.getListByCircuitIds(distinctionId,checkDate,p); + HashMap tmp2 = new HashMap<>(); + showList.forEach(r->{ +// //林上2B79/1号主变 +// if(r.getCircuitId().equals(2) || r.getCircuitId().equals(9)){ +// r.setCircuitId(1900); +// } +// //康上2B80/2号主变 +// if(r.getCircuitId().equals(10) || r.getCircuitId().equals(6)){ +// r.setCircuitId(1700); +// } +// if( !tmp2.containsKey(r.getCircuitId()) ) { +// tmp2.put(r.getCircuitId(),new XlsExport1()); +// } +// +// if ( r.getMeterPosition().equals("通管气室") && r.getDistinctionId().equals(1) && StringUtils.isNotBlank(r.getReadingValue()) ) { +// tmp2.get(r.getCircuitId()).setReading1("A相:"+r.getReadingValue()); +// } else if ( r.getMeterPosition().equals("通管气室") && r.getDistinctionId().equals(2) ) { +// tmp2.get(r.getCircuitId()).setReading2("B相:"+r.getReadingValue()); +// } else if ( r.getMeterPosition().equals("通管气室") && r.getDistinctionId().equals(3) ) { +// tmp2.get(r.getCircuitId()).setReading3("C相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("GIS室通管气室") && r.getDistinctionId().equals(1) ){ +// tmp2.get(r.getCircuitId()).setReading4("A相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("GIS室通管气室") && r.getDistinctionId().equals(2) ){ +// tmp2.get(r.getCircuitId()).setReading5("B相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("GIS室通管气室") && r.getDistinctionId().equals(3) ){ +// tmp2.get(r.getCircuitId()).setReading6("C相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("开关气室") && r.getDistinctionId().equals(1) ){ +// tmp2.get(r.getCircuitId()).setReading7("A相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("开关气室") && r.getDistinctionId().equals(2) ){ +// tmp2.get(r.getCircuitId()).setReading8("B相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("开关气室") && r.getDistinctionId().equals(3) ){ +// tmp2.get(r.getCircuitId()).setReading9("C相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("开关变压器侧流变气室") ){ +// tmp2.get(r.getCircuitId()).setReading10(r.getReadingValue()); +// }else if( r.getMeterPosition().equals("开关线路侧流变气室") ){ +// tmp2.get(r.getCircuitId()).setReading11(r.getReadingValue()); +// }else if( r.getMeterPosition().equals("避雷器气室")){ +// tmp2.get(r.getCircuitId()).setReading12(r.getReadingValue()); +// }else if( r.getMeterPosition().equals("过渡气室")){ +// tmp2.get(r.getCircuitId()).setReading13(r.getReadingValue()); +// }else if( r.getMeterPosition().equals("压变气室")){ +// tmp2.get(r.getCircuitId()).setReading14(r.getReadingValue()); +// }else if( r.getMeterPosition().equals("线路电缆端筒体气室")){ +// tmp2.get(r.getCircuitId()).setReading15(r.getReadingValue()); +// }else if( r.getMeterPosition().equals("母刀气室")){ +// tmp2.get(r.getCircuitId()).setReading16(r.getReadingValue()); +// }else if( r.getMeterPosition().equals("变刀气室")){ +// tmp2.get(r.getCircuitId()).setReading17(r.getReadingValue()); +// }else if( r.getMeterPosition().equals("开关") && r.getDistinctionId().equals(1) ){ +// tmp2.get(r.getCircuitId()).setReading18("A相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("开关") && r.getDistinctionId().equals(2) ){ +// tmp2.get(r.getCircuitId()).setReading19("B相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("开关") && r.getDistinctionId().equals(3) ){ +// tmp2.get(r.getCircuitId()).setReading20("C相:"+r.getReadingValue()); +// }else if( r.getMeterPosition().equals("避雷器") && r.getDistinctionId().equals(1) ){ +// tmp2.get(r.getCircuitId()).setReading21("A相:"+r.getReadingValue()); +// tmp2.get(r.getCircuitId()).setReading24("A相:"+r.getReading2()); +// }else if( r.getMeterPosition().equals("避雷器") && r.getDistinctionId().equals(2) ){ +// tmp2.get(r.getCircuitId()).setReading22("B相:"+r.getReadingValue()); +// tmp2.get(r.getCircuitId()).setReading25("B相:"+r.getReading2()); +// }else if( r.getMeterPosition().equals("避雷器") && r.getDistinctionId().equals(3) ){ +// tmp2.get(r.getCircuitId()).setReading23("C相:"+r.getReadingValue()); +// tmp2.get(r.getCircuitId()).setReading26("C相:"+r.getReading2()); +// } + }); + List sheet2List = new ArrayList<>(); + + distinctionId.forEach (r->{ + if(r.equals(2) || r.equals(6)){ + return; + } + //林上2B79/1号主变 + if(r.equals(2) || r.equals(9)){ + r=1900; + }else if(r.equals(10) || r.equals(6)){ + r=1700; + } + sheet2List.add(tmp2.get(r)); + }); + + // + List s3 = getTitleId(fileName+"-s3"); + showList = snMeterHistoryService.getListByCircuitIds(s3,checkDate, p); + HashMap tmp3 = new HashMap<>(); + showList.forEach(r->{ +// if( !tmp3.containsKey(r.getCircuitId()) ) { +// tmp3.put(r.getCircuitId(),new XlsExport1()); +// } +// if ( r.getMeterPosition().equals("开关气室") ) { +// tmp3.get(r.getCircuitId()).setReading1(r.getReadingValue()); +// } else if ( r.getMeterPosition().equals("开关线路侧流变") ) { +// tmp3.get(r.getCircuitId()).setReading2(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("母刀气室") ) { +// tmp3.get(r.getCircuitId()).setReading3(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("线刀气室") ) { +// tmp3.get(r.getCircuitId()).setReading4(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("开关") ) { +// tmp3.get(r.getCircuitId()).setReading5(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("一母刀气室") ) { +// tmp3.get(r.getCircuitId()).setReading6(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("一母侧流变气室") ) { +// tmp3.get(r.getCircuitId()).setReading7(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("二母刀气室") ) { +// tmp3.get(r.getCircuitId()).setReading8(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("二母侧流变气室") ) { +// tmp3.get(r.getCircuitId()).setReading9(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("三母刀气室") ) { +// tmp3.get(r.getCircuitId()).setReading10(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("三母侧流变气室") ) { +// tmp3.get(r.getCircuitId()).setReading11(r.getReadingValue()); +// }else if ( r.getMeterPosition().equals("三母扩展气室") ) { +// tmp3.get(r.getCircuitId()).setReading12(r.getReadingValue()); +// } + }); + List sheet3List = new ArrayList<>(); + s3.forEach (r->{ + sheet3List.add(tmp3.get(r)); + }); + + // + List s41 = getTitleId(fileName+"-s41"); + //showList = snMeterHistoryService.getListByCircuitIds(s41,checkDate); + XlsExport1 sheet41List = new XlsExport1(); + //动作计数器 5 //58 //59 //60 //61 + showList.forEach(r->{ +// if ( r.getDistinctionId().equals(1) && r.getCircuitId().equals(58) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())){ +// sheet41List.setReading1("A相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading13("A相:" + r.getReading2()); +// } +// } else if ( r.getDistinctionId().equals(2) && r.getCircuitId().equals(58) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading2("B相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading14("B相:"+r.getReading2()); +// } +// } else if ( r.getDistinctionId().equals(3) && r.getCircuitId().equals(58) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading3("C相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading15("C相:"+r.getReading2()); +// } +// }else if ( r.getDistinctionId().equals(1) && r.getCircuitId().equals(59) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading4("A相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading16("A相:"+r.getReading2()); +// } +// } else if ( r.getDistinctionId().equals(2) && r.getCircuitId().equals(59) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading5("B相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading17("B相:"+r.getReading2()); +// } +// } else if ( r.getDistinctionId().equals(3) && r.getCircuitId().equals(59) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading6("C相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading18("C相:"+r.getReading2()); +// } +// }else if ( r.getDistinctionId().equals(1) && r.getCircuitId().equals(60) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading7("A相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading19("A相:"+r.getReading2()); +// } +// } else if ( r.getDistinctionId().equals(2) && r.getCircuitId().equals(60) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading8("B相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading20("B相:"+r.getReading2()); +// } +// } else if ( r.getDistinctionId().equals(3) && r.getCircuitId().equals(60) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading9("C相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading21("C相:"+r.getReading2()); +// } +// } else if ( r.getDistinctionId().equals(2) && r.getCircuitId().equals(61) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading10("A相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading22("A相:"+r.getReading2()); +// } +// } else if ( r.getDistinctionId().equals(3) && r.getCircuitId().equals(61) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading11("B相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading23("B相:"+r.getReading2()); +// } +// }else if ( r.getDistinctionId().equals(1) && r.getCircuitId().equals(61) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// sheet41List.setReading12("C相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// sheet41List.setReading24("C相:"+r.getReading2()); +// } +// } + }); + + //回路+相别+设备类型 +// SnExport param = new SnExport(); +// param.setExportName(fileName+"-s4"); +// List exporList = snExportService.getListByName(param); +// List circuitIds = new ArrayList<>(); +// HashMap readMap = new HashMap<>(); +// exporList.forEach(r->{ +// readMap.put(r.getTitleId().toString(),r.getOrderNum().toString()); +// circuitIds.add(r.getTitleId()); +// }); +// +// showList = snMeterHistoryService.getListByCircuitIds(circuitIds,checkDate); +// //动作计数器 5 泄漏电流表 6 +// showList.forEach(r->{ +// String mk = r.getCircuitId().toString(); +// if( readMap.containsKey(mk)){ +// readMap.put("readmap"+ readMap.get(mk),r.getReadingValue()); +// } +// }); +// XlsExport3 readMapBean = new XlsExport3(); +// try { +// BeanUtils.copyProperties(readMapBean,readMap); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// //---- +// List s5 = getTitleId(fileName+"-s5"); +// showList = snMeterHistoryService.getListByCircuitIds(s5,checkDate); +// HashMap tmp6 = new HashMap<>(); +// showList.forEach(r->{ +// if( !tmp6.containsKey(r.getCircuitId()) ) { +// tmp6.put(r.getCircuitId(),new XlsExport1()); +// } +// //动作计数器 5 泄漏电流表 6 +// if ( r.getMeterTypeId().equals(6) && r.getDistinctionId().equals(1) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())){ +// tmp6.get(r.getCircuitId()).setReading1("A相:"+r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// tmp6.get(r.getCircuitId()).setReading4("A相:" + r.getReading2()); +// } +// } else if ( r.getMeterTypeId().equals(6) && r.getDistinctionId().equals(2) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// tmp6.get(r.getCircuitId()).setReading2("B相:" + r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// tmp6.get(r.getCircuitId()).setReading5("B相:" + r.getReading2()); +// } +// }else if ( r.getMeterTypeId().equals(6) && r.getDistinctionId().equals(3) ) { +// if(StringUtils.isNotBlank(r.getReadingValue())) { +// tmp6.get(r.getCircuitId()).setReading3("C相:" + r.getReadingValue()); +// } +// if(StringUtils.isNotBlank(r.getReading2())) { +// tmp6.get(r.getCircuitId()).setReading6("C相:" + r.getReading2()); +// } +// } +// }); +// List sheet5List = new ArrayList<>(); +// s5.forEach (r->{ +// sheet5List.add(tmp6.get(r)); +// }); +// +// try { +// String templateFileName = this.templateFileName + "file/XlsExport3.xls"; +// // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹 +// // 方案1 根据对象填充 +// try ( ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateFileName).build() ) { +// FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); +// +// WriteSheet sheet1 = EasyExcel.writerSheet("变压器").build(); +// excelWriter.fill(new FillWrapper("data1", sheet1List), fillConfig,sheet1); +// +// WriteSheet sheet2 = EasyExcel.writerSheet("组合电器(GIS)1").build(); +// excelWriter.fill(new FillWrapper("data2", sheet2List), fillConfig,sheet2); +// +// WriteSheet sheet3 = EasyExcel.writerSheet("组合电器(GIS)2").build(); +// excelWriter.fill(new FillWrapper("data3", sheet3List), fillConfig,sheet3); +// +// WriteSheet sheet4 = EasyExcel.writerSheet("开关柜").build(); +// excelWriter.fill(readMapBean, sheet4); +// excelWriter.fill(sheet41List, sheet4); +// +// WriteSheet sheet5 = EasyExcel.writerSheet("敞开式避雷器").build(); +// excelWriter.fill(new FillWrapper("data6", sheet5List), fillConfig,sheet5); +// +// excelWriter.finish(); +// } +// } catch (IOException e) { +// throw new RuntimeException(e); +// } + } + + private HttpServletResponse getResponseHeader(HttpServletResponse response, String fileName, String date){ + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodeStr(fileName+"-"+date) + ".xlsx"); + return response; + } + + private List getTitleId(String fileName){ + SnExport param = new SnExport(); + param.setExportName(fileName); + List exporList = snExportService.getListByName(param); + List ids = new ArrayList<>(); + exporList.forEach(r->{ + ids.add(r.getTitleId()); + }); + return ids; + } + + /** + * 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 + * @param str + * @return + */ + private String encodeStr(String str){ + try { + return URLEncoder.encode(str, "UTF-8").replaceAll("\\+", "%20"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/device_cars/src/main/resources/file/XlsExport3.xls b/device_cars/src/main/resources/file/XlsExport3.xls new file mode 100644 index 0000000000000000000000000000000000000000..3a0c4272ae512610725005cc73ad8283dc0eb262 GIT binary patch literal 40448 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 literal 0 HcmV?d00001 diff --git a/device_gather/src/main/java/com/xr/device/netty/NettyConfig.java b/device_gather/src/main/java/com/xr/device/netty/NettyConfig.java index 3d15615..5a9618c 100644 --- a/device_gather/src/main/java/com/xr/device/netty/NettyConfig.java +++ b/device_gather/src/main/java/com/xr/device/netty/NettyConfig.java @@ -1,5 +1,6 @@ package com.xr.device.netty; +import com.xr.device.websocket.DeviceWebSocketHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -12,7 +13,7 @@ public class NettyConfig { } @Bean - public NettyServer nettyServer(HeartbeatService heartbeatService) { - return new NettyServer(heartbeatService); + public NettyServer nettyServer(HeartbeatService heartbeatService, DeviceWebSocketHandler deviceWebSocketHandler) { + return new NettyServer(heartbeatService,deviceWebSocketHandler); } } diff --git a/device_gather/src/main/java/com/xr/device/netty/NettyServer.java b/device_gather/src/main/java/com/xr/device/netty/NettyServer.java index 2f6957e..830f461 100644 --- a/device_gather/src/main/java/com/xr/device/netty/NettyServer.java +++ b/device_gather/src/main/java/com/xr/device/netty/NettyServer.java @@ -1,5 +1,6 @@ package com.xr.device.netty; +import com.xr.device.websocket.DeviceWebSocketHandler; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; @@ -13,9 +14,11 @@ public class NettyServer { private final int port = 8520; private final HeartbeatService heartbeatService; + private final DeviceWebSocketHandler deviceWebSocketHandler; - public NettyServer(HeartbeatService heartbeatService) { + public NettyServer(HeartbeatService heartbeatService,DeviceWebSocketHandler deviceWebSocketHandler) { this.heartbeatService = heartbeatService; + this.deviceWebSocketHandler=deviceWebSocketHandler; } public void start() throws InterruptedException { @@ -29,7 +32,7 @@ public class NettyServer { .childHandler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel ch) { - ch.pipeline().addLast(new DeviceHandler(heartbeatService)); + ch.pipeline().addLast(new DeviceHandler(heartbeatService,deviceWebSocketHandler)); } }) .option(ChannelOption.SO_BACKLOG, 128) diff --git a/device_gather/src/main/java/com/xr/device/schedule/GetMeterSchedule.java b/device_gather/src/main/java/com/xr/device/schedule/GetMeterSchedule.java index 729cbd2..bfcf073 100644 --- a/device_gather/src/main/java/com/xr/device/schedule/GetMeterSchedule.java +++ b/device_gather/src/main/java/com/xr/device/schedule/GetMeterSchedule.java @@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import javax.annotation.PreDestroy; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; @@ -202,4 +203,10 @@ public class GetMeterSchedule { return Files.uploadImageForPath(image, StaticPropUtil.imgPath,sfm.format(date)+"\\\\"+date.getTime()+".jpg"); } + @PreDestroy + public void cleanup() { + // 清理资源的逻辑,例如关闭数据库连接池等 + log.info("Cleaning up resources..."); + } + } diff --git a/drone_data/src/main/resources/application-dev.yml b/drone_data/src/main/resources/application-dev.yml index e307e96..f8ce491 100644 --- a/drone_data/src/main/resources/application-dev.yml +++ b/drone_data/src/main/resources/application-dev.yml @@ -50,7 +50,7 @@ work: password: public clientId: publish_client broker: tcp://localhost:1883 - topic: mqtt/test + topic: camera/heartbeat timeout: 30000 interval: 20 #work: