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 0000000..3a0c427 Binary files /dev/null and b/device_cars/src/main/resources/file/XlsExport3.xls differ 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: