Browse Source

Merge remote-tracking branch 'origin/master'

zhongwei
tyty 2 years ago
parent
commit
d54fbcb043
  1. 8
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/constants/AbnormalAlarmConstant.java
  2. 6
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/entity/HistoryAbnormalAlarmEntity.java
  3. 2
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/vo/AlarmDataVo.java
  4. 36
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/vo/AlarmMergeVo.java
  5. 2
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/defect/entity/OperDefectEntity.java
  6. 5
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/fill/entity/UseEntity.java
  7. 22
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/AreaMonthReportVo.java
  8. 2
      hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/areamonthly/vo/TaskListQuery.java
  9. 3
      hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/entity/CheckMonthEntity.java
  10. 7
      hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/areamonthly/vo/MaintenanceTaskWithAreaVo.java
  11. 20
      hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/areamonthly/vo/StandardTicketVo.java
  12. 6
      hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/areamonthly/vo/StandardTicketWithAreaVo.java
  13. 10
      hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/areamonthly/vo/StandardWorkVo.java
  14. 2
      hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/service/impl/EmInfoServiceImpl.java
  15. 6
      hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/systemlog/service/impl/StatisticsServiceImpl.java
  16. 2
      hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/systemlog/vo/SysLogStatisticsVo.java
  17. 13
      hzims-service/operational/pom.xml
  18. 1
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/OperationApplication.java
  19. 7
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/dto/OperAccessStatisticsDTO.java
  20. 15
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/AlarmMergeService.java
  21. 10
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/LevelAlarmService.java
  22. 1
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AlertDefectServiceImpl.java
  23. 106
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AlertMerageServiceImpl.java
  24. 1
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/HistoryAbnormalAlarmServiceImpl.java
  25. 18
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/LevelAlarmServiceImpl.java
  26. 60
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/Swagger2Config.java
  27. 25
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/config/WebSocketConfig.java
  28. 79
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/AlarmHandler.java
  29. 58
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/AlarmSessionManager.java
  30. 24
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/MessageHandler.java
  31. 16
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/MyInterceptor.java
  32. 7
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/SocketPool.java
  33. 93
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/WebSocketClientConfig.java
  34. 124
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/WebsocketConfigClient.java
  35. 13
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/WebsocketRun.java
  36. 9
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/fill/service/GenerateService.java
  37. 54
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/fill/service/impl/GenerateServiceImpl.java
  38. 9
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WebHomeController.java
  39. 79
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java
  40. 2
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/HydropowerService.java
  41. 406
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java
  42. 72
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/SideHustleServiceImpl.java
  43. 182
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WaterServiceImpl.java
  44. 165
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/station/service/impl/RealMonitorServiceImpl.java
  45. 2
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/station/service/impl/StationServiceImpl.java

8
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/constants/AbnormalAlarmConstant.java

@ -13,6 +13,13 @@ public interface AbnormalAlarmConstant {
/**通讯恢复*/ /**通讯恢复*/
String ABNORMAL_STATUS = "1"; String ABNORMAL_STATUS = "1";
/**事故**/
String FAULT = "2";
String WEBSOCKET_FAULT = "0";
List<String> ALARM_WARN_TYPES = Arrays.asList("0","1","2");
String[] TYPE_NAMES = {"默认", "系统", "告警", "故障", "用户操作", "遥测越限", "遥信变位", "注册信息", "信息提示", "设备巡检", "遥控操作", "遥测越限恢复","未定义","通讯中断","数据异常"}; String[] TYPE_NAMES = {"默认", "系统", "告警", "故障", "用户操作", "遥测越限", "遥信变位", "注册信息", "信息提示", "设备巡检", "遥控操作", "遥测越限恢复","未定义","通讯中断","数据异常"};
/**处理、延后、误报*/ /**处理、延后、误报*/
@ -22,4 +29,5 @@ public interface AbnormalAlarmConstant {
* 2-告警,3-故障,5-遥测越限,13-通讯异常,14-数据异常 * 2-告警,3-故障,5-遥测越限,13-通讯异常,14-数据异常
*/ */
List<Integer> SOE_TYPE_LIST = Arrays.asList(2,3,5,13,14); List<Integer> SOE_TYPE_LIST = Arrays.asList(2,3,5,13,14);
} }

6
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/entity/HistoryAbnormalAlarmEntity.java

@ -9,6 +9,9 @@ import org.springblade.core.mp.base.BaseEntity;
import java.util.Date; import java.util.Date;
/**
* @author ysj
*/
@Data @Data
@TableName("hzims_history_abnormal_alarm") @TableName("hzims_history_abnormal_alarm")
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@ -24,6 +27,9 @@ public class HistoryAbnormalAlarmEntity extends BaseEntity {
@ApiModelProperty("站点名称") @ApiModelProperty("站点名称")
private String stationName; private String stationName;
@ApiModelProperty("告警编码")
private Long alarmId;
@ApiModelProperty("检查点") @ApiModelProperty("检查点")
private String realId; private String realId;

2
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/vo/AlarmDataVo.java

@ -3,12 +3,14 @@ package com.hnac.hzims.operational.alert.vo;
import com.hnac.hzinfo.datasearch.soe.domian.SoeData; import com.hnac.hzinfo.datasearch.soe.domian.SoeData;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
/** /**
* @author ysj * @author ysj
* @date 2023/03/23 14:06:27 * @date 2023/03/23 14:06:27
* @version 4.0.0 * @version 4.0.0
*/ */
@EqualsAndHashCode(callSuper = true)
@Data @Data
public class AlarmDataVo extends SoeData { public class AlarmDataVo extends SoeData {

36
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/vo/AlarmMergeVo.java

@ -0,0 +1,36 @@
package com.hnac.hzims.operational.alert.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author ysj
* @date 2023/03/17 10:02:33
* @version 4.0.0
*/
@Data
public class AlarmMergeVo{
@ApiModelProperty("站点编号")
private String stationCode;
@ApiModelProperty("站点名称")
private String stationName;
@ApiModelProperty("检测点位")
private String realId;
@ApiModelProperty("告警编号")
private String alarmCode;
@ApiModelProperty("告警类型: 0 - 事故 、 1 - 一级告警、 2 - 二级告警")
private String type;
@ApiModelProperty("告警内容: 0 - 事故 、 1 - 一级告警、 2 - 二级告警")
private String content;
@ApiModelProperty("告警时间")
private Date date;
}

2
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/defect/entity/OperDefectEntity.java

@ -104,11 +104,13 @@ public class OperDefectEntity extends TenantEntity {
/** /**
* 区域Id * 区域Id
*/ */
@ApiModelProperty(value = "区域Id")
@TableField(exist = false) @TableField(exist = false)
private String areaId; private String areaId;
/** /**
* 年月 * 年月
*/ */
@ApiModelProperty(value = "年月")
@TableField(exist = false) @TableField(exist = false)
private YearMonth yearMonth; private YearMonth yearMonth;
} }

5
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/fill/entity/UseEntity.java

@ -5,12 +5,17 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity; import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
/**
* @author usj
*/
@EqualsAndHashCode(callSuper = true)
@Data @Data
@TableName("hzims_fill_use") @TableName("hzims_fill_use")
@ApiModel(value="UseEntity", description="保存用电量填报数据对象") @ApiModel(value="UseEntity", description="保存用电量填报数据对象")

22
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/AreaMonthReportVo.java

@ -1,5 +1,7 @@
package com.hnac.hzims.operational.main.vo; package com.hnac.hzims.operational.main.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.NullSerializer;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -10,65 +12,85 @@ import lombok.Data;
public class AreaMonthReportVo { public class AreaMonthReportVo {
@ApiModelProperty(value = "区域Id") @ApiModelProperty(value = "区域Id")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Long areaId; private Long areaId;
@ApiModelProperty(value = "区域名称") @ApiModelProperty(value = "区域名称")
private String areaName; private String areaName;
@ApiModelProperty(value = "计划发电量") @ApiModelProperty(value = "计划发电量")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Float planPower; private Float planPower;
@ApiModelProperty(value = "实际发电量") @ApiModelProperty(value = "实际发电量")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Float actualPower; private Float actualPower;
@ApiModelProperty(value = "发电完成率") @ApiModelProperty(value = "发电完成率")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Double powerFinishRate; private Double powerFinishRate;
@ApiModelProperty(value = "同比") @ApiModelProperty(value = "同比")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Double comparePowerRate; private Double comparePowerRate;
@ApiModelProperty(value = "发电计划预测") @ApiModelProperty(value = "发电计划预测")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Double predictPlanPower; private Double predictPlanPower;
@ApiModelProperty(value = "操作票") @ApiModelProperty(value = "操作票")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer operate; private Integer operate;
@ApiModelProperty(value = "操作票合格率") @ApiModelProperty(value = "操作票合格率")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Double operaQualifyRate; private Double operaQualifyRate;
@ApiModelProperty(value = "工作票") @ApiModelProperty(value = "工作票")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer work; private Integer work;
@ApiModelProperty(value = "工作票合格率") @ApiModelProperty(value = "工作票合格率")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Double workQualifyRate; private Double workQualifyRate;
@ApiModelProperty(value = "日常维护") @ApiModelProperty(value = "日常维护")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer routineMaintenance; private Integer routineMaintenance;
@ApiModelProperty(value = "巡检任务") @ApiModelProperty(value = "巡检任务")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer inspect; private Integer inspect;
@ApiModelProperty(value = "缺陷数") @ApiModelProperty(value = "缺陷数")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer defect; private Integer defect;
@ApiModelProperty(value = "消缺率") @ApiModelProperty(value = "消缺率")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Double defectRate; private Double defectRate;
@ApiModelProperty(value = "检修任务数量") @ApiModelProperty(value = "检修任务数量")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer maintenanceTasks; private Integer maintenanceTasks;
@ApiModelProperty(value = "安全生产会议次数") @ApiModelProperty(value = "安全生产会议次数")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer safetyMeeting; private Integer safetyMeeting;
@ApiModelProperty(value = "月度自查报告") @ApiModelProperty(value = "月度自查报告")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer selfReport; private Integer selfReport;
@ApiModelProperty(value = "设备试验") @ApiModelProperty(value = "设备试验")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer deviceTry; private Integer deviceTry;
@ApiModelProperty(value = "技能培训") @ApiModelProperty(value = "技能培训")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer skillTrainy; private Integer skillTrainy;
@ApiModelProperty(value = "安全大检查") @ApiModelProperty(value = "安全大检查")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer securityCheck; private Integer securityCheck;
} }

2
hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/areamonthly/vo/TaskListQuery.java

@ -126,11 +126,13 @@ public class TaskListQuery implements Serializable {
/** /**
* 月份 * 月份
*/ */
@ApiModelProperty("月份")
private YearMonth yearmonth; private YearMonth yearmonth;
/** /**
* 区域Id * 区域Id
*/ */
@ApiModelProperty("区域Id")
private String areaId; private String areaId;

3
hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/entity/CheckMonthEntity.java

@ -47,6 +47,7 @@ public class CheckMonthEntity extends TenantEntity implements Serializable {
* 年月 * 年月
*/ */
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty("月份")
private YearMonth yearMonth; private YearMonth yearMonth;
@ -55,6 +56,4 @@ public class CheckMonthEntity extends TenantEntity implements Serializable {
private String itemName; private String itemName;
} }

7
hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/areamonthly/vo/MaintenanceTaskWithAreaVo.java

@ -1,5 +1,6 @@
package com.hnac.hzims.ticket.areamonthly.vo; package com.hnac.hzims.ticket.areamonthly.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.time.YearMonth; import java.time.YearMonth;
@ -17,33 +18,39 @@ public class MaintenanceTaskWithAreaVo {
/** /**
* 区域编号 * 区域编号
*/ */
@ApiModelProperty("区域编号")
private String areaId; private String areaId;
/** /**
* 月份 * 月份
*/ */
@ApiModelProperty("月份")
private java.time.YearMonth YearMonth; private java.time.YearMonth YearMonth;
/** /**
* 项目名称 * 项目名称
*/ */
@ApiModelProperty("项目名称")
private String title; private String title;
/** /**
* 维护内容 * 维护内容
*/ */
@ApiModelProperty("维护内容")
private String content; private String content;
/** /**
* 执行状态 * 执行状态
*/ */
@ApiModelProperty("执行状态")
private Integer status; private Integer status;
/** /**
* 任务类型 * 任务类型
*/ */
@ApiModelProperty("执行状态")
private String taskType; private String taskType;
} }

20
hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/areamonthly/vo/StandardTicketVo.java

@ -1,5 +1,6 @@
package com.hnac.hzims.ticket.areamonthly.vo; package com.hnac.hzims.ticket.areamonthly.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -18,6 +19,7 @@ import java.util.Date;
*/ */
@EqualsAndHashCode @EqualsAndHashCode
@Data @Data
@ApiModel("操作票对象")
public class StandardTicketVo implements Serializable { public class StandardTicketVo implements Serializable {
private static final long serialVersionUID = -8870464581684939369L; private static final long serialVersionUID = -8870464581684939369L;
@ -26,91 +28,109 @@ public class StandardTicketVo implements Serializable {
/** /**
* 编号 * 编号
*/ */
@ApiModelProperty("编号")
private Long id; private Long id;
/** /**
* 开票种类 * 开票种类
*/ */
@ApiModelProperty("开票种类")
private String ticketType; private String ticketType;
/** /**
* 单位 * 单位
*/ */
@ApiModelProperty("单位")
private String company; private String company;
/** /**
* 编号 * 编号
*/ */
@ApiModelProperty("编号")
private String code; private String code;
/** /**
* 开票来源 * 开票来源
*/ */
@ApiModelProperty("开票来源")
private String taskType; private String taskType;
/** /**
* 开票来源名称 * 开票来源名称
*/ */
@ApiModelProperty("开票来源名称")
private String taskTypeName; private String taskTypeName;
/** /**
* 开票任务来源 * 开票任务来源
*/ */
@ApiModelProperty("开票任务来源")
private String taskName; private String taskName;
/** /**
* 发令人 * 发令人
*/ */
@ApiModelProperty("发令人")
private Long issueOrderPerson; private Long issueOrderPerson;
/** /**
* 发令人名称 * 发令人名称
*/ */
@ApiModelProperty("发令人名称")
private String issueOrderPersonName; private String issueOrderPersonName;
/** /**
* 受令人 * 受令人
*/ */
@ApiModelProperty("受令人")
private Long accessOrderPerson; private Long accessOrderPerson;
/** /**
* 受令人名称 * 受令人名称
*/ */
@ApiModelProperty("受令人名称")
private String accessOrderPersonName; private String accessOrderPersonName;
/** /**
* 监护人 * 监护人
*/ */
@ApiModelProperty("监护人")
private Long guardian; private Long guardian;
/** /**
* 监护人名称 * 监护人名称
*/ */
@ApiModelProperty("监护人名称")
private String guardianName; private String guardianName;
/** /**
* 值班负责人 * 值班负责人
*/ */
@ApiModelProperty("值班负责人")
private Long principal; private Long principal;
/** /**
* 值班负责人 * 值班负责人
*/ */
@ApiModelProperty("值班负责人名称")
private String principalName; private String principalName;
/** /**
* 开票时间 * 开票时间
*/ */
@ApiModelProperty("开票时间")
private Date createTime; private Date createTime;
/** /**
* 状态 * 状态
*/ */
@ApiModelProperty("状态")
private Integer status; private Integer status;
/** /**
* 是否评价 * 是否评价
*/ */
@ApiModelProperty("是否评价")
private Integer isEvaluate; private Integer isEvaluate;
} }

6
hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/areamonthly/vo/StandardTicketWithAreaVo.java

@ -21,34 +21,40 @@ public class StandardTicketWithAreaVo {
/** /**
* 区域编号 * 区域编号
*/ */
@ApiModelProperty("区域编号")
private String areaId; private String areaId;
/** /**
* 月份 * 月份
*/ */
@ApiModelProperty("月份")
private YearMonth YearMonth; private YearMonth YearMonth;
/** /**
* 开票种类 * 开票种类
*/ */
@ApiModelProperty("开票种类")
private String ticketType; private String ticketType;
/** /**
* 编号 * 编号
*/ */
@ApiModelProperty("编号")
private String code; private String code;
/** /**
* 开票来源 * 开票来源
*/ */
@ApiModelProperty("开票来源")
private String taskType; private String taskType;
/** /**
* 状态 * 状态
*/ */
@ApiModelProperty("状态")
private Integer status; private Integer status;

10
hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/areamonthly/vo/StandardWorkVo.java

@ -1,5 +1,6 @@
package com.hnac.hzims.ticket.areamonthly.vo; package com.hnac.hzims.ticket.areamonthly.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -22,45 +23,54 @@ public class StandardWorkVo implements Serializable {
/** /**
* 编号 * 编号
*/ */
@ApiModelProperty("编号")
private Long id; private Long id;
/** /**
* 开票种类 * 开票种类
*/ */
@ApiModelProperty("开票种类")
private String type; private String type;
/** /**
* 单位 * 单位
*/ */
@ApiModelProperty("单位")
private String company; private String company;
/** /**
* 编号 * 编号
*/ */
@ApiModelProperty("编号")
private String code; private String code;
/** /**
* 开票来源 * 开票来源
*/ */
@ApiModelProperty("开票来源")
private String taskType; private String taskType;
/** /**
* 开票任务来源 * 开票任务来源
*/ */
@ApiModelProperty("开票任务来源")
private String taskName; private String taskName;
/** /**
* 开票时间 * 开票时间
*/ */
@ApiModelProperty("开票时间")
private Date createTime; private Date createTime;
/** /**
* 状态 * 状态
*/ */
@ApiModelProperty("状态")
private Integer status; private Integer status;
/** /**
* 是否评价 * 是否评价
*/ */
@ApiModelProperty("是否评价")
private Integer isEvaluate; private Integer isEvaluate;
} }

2
hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/service/impl/EmInfoServiceImpl.java

@ -472,7 +472,7 @@ public class EmInfoServiceImpl extends BaseServiceImpl<EmInfoMapper, EmInfoEntit
private void validEmInfo(EmInfoAddVo em_info) { private void validEmInfo(EmInfoAddVo em_info) {
// 验证设备名称 // 验证设备名称
List<EmInfoEntity> existName = this.list( List<EmInfoEntity> existName = this.list(
Wrappers.<EmInfoEntity>lambdaQuery().eq(EmInfoEntity::getName, em_info.getInfo().getName()) Wrappers.<EmInfoEntity>lambdaQuery().eq(EmInfoEntity::getName, em_info.getInfo().getName()).eq(EmInfoEntity::getDepartment, em_info.getInfo().getDepartment())
); );
Assert.isTrue(CollectionUtil.isEmpty(existName),()-> { Assert.isTrue(CollectionUtil.isEmpty(existName),()-> {
throw new ServiceException("设备名称已存在"); throw new ServiceException("设备名称已存在");

6
hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/systemlog/service/impl/StatisticsServiceImpl.java

@ -54,10 +54,16 @@ public class StatisticsServiceImpl extends ServiceImpl<StatisticsMapper, Statist
statistics = new Statistics(); statistics = new Statistics();
statistics.setDateCalculated(sysLogStatisticsVo.getOperationTime()); statistics.setDateCalculated(sysLogStatisticsVo.getOperationTime());
statistics.setModuleNameNum(sysLogStatisticsVo.getModuleNameCount()); statistics.setModuleNameNum(sysLogStatisticsVo.getModuleNameCount());
statistics.setTitle(sysLogStatisticsVo.getTitle());
statistics.setModuleName(sysLogStatisticsVo.getModuleName());
statistics.setPath(sysLogStatisticsVo.getPath());
statistics.setTitleNum(sysLogStatisticsVo.getTitleCount()); statistics.setTitleNum(sysLogStatisticsVo.getTitleCount());
statistics.setPathNum(sysLogStatisticsVo.getPathCount()); statistics.setPathNum(sysLogStatisticsVo.getPathCount());
statisticsService.save(statistics); statisticsService.save(statistics);
} else { } else {
statistics.setTitle(sysLogStatisticsVo.getTitle());
statistics.setModuleName(sysLogStatisticsVo.getModuleName());
statistics.setPath(sysLogStatisticsVo.getPath());
statistics.setModuleNameNum(sysLogStatisticsVo.getModuleNameCount()); statistics.setModuleNameNum(sysLogStatisticsVo.getModuleNameCount());
statistics.setTitleNum(sysLogStatisticsVo.getTitleCount()); statistics.setTitleNum(sysLogStatisticsVo.getTitleCount());
statistics.setPathNum(sysLogStatisticsVo.getPathCount()); statistics.setPathNum(sysLogStatisticsVo.getPathCount());

2
hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/systemlog/vo/SysLogStatisticsVo.java

@ -43,7 +43,7 @@ public class SysLogStatisticsVo {
/** /**
* 根据路径统计 * 根据路径统计
*/ */
private Integer path; private String path;
/** /**
* 根据路径统计 * 根据路径统计

13
hzims-service/operational/pom.xml

@ -14,6 +14,7 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<documents4j.version>1.0.3</documents4j.version> <documents4j.version>1.0.3</documents4j.version>
<swagger-bootstrap-ui.version>1.9.6</swagger-bootstrap-ui.version>
</properties> </properties>
<dependencies> <dependencies>
@ -214,6 +215,18 @@
<groupId>com.hnac.hzinfo.data</groupId> <groupId>com.hnac.hzinfo.data</groupId>
<artifactId>hzinfo-data-sdk</artifactId> <artifactId>hzinfo-data-sdk</artifactId>
</dependency> </dependency>
<!--swagger-bootstrap-ui-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger-bootstrap-ui.version}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

1
hzims-service/operational/src/main/java/com/hnac/hzims/operational/OperationApplication.java

@ -48,7 +48,6 @@ public class OperationApplication extends SpringBootServletInitializer {
} }
public static void main(String[] args) { public static void main(String[] args) {
BladeApplication.run(OperationalConstants.APP_NAME, OperationApplication.class, args); BladeApplication.run(OperationalConstants.APP_NAME, OperationApplication.class, args);
} }

7
hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/dto/OperAccessStatisticsDTO.java

@ -27,14 +27,15 @@ public class OperAccessStatisticsDTO extends OperAccessStatisticsEntity {
private List<Long> deptIds; private List<Long> deptIds;
/** /**
* *
*/ */
private YearMonth yearMonth; @ApiModelProperty("月份")
private YearMonth yearmonth;
/** /**
* 区域Id * 区域Id
*/ */
@ApiModelProperty("区域Id")
private String areaId; private String areaId;

15
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/AlarmMergeService.java

@ -0,0 +1,15 @@
package com.hnac.hzims.operational.alert.service;
import com.hnac.hzims.operational.config.vo.MessageParamVo;
import org.springframework.web.socket.TextMessage;
/**
* @author ysj
* @date 2023/03/09 09:19:13
* @version 4.0.0
*/
public interface AlarmMergeService {
// 获取发送消息
TextMessage getSendMessage(MessageParamVo param);
}

10
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/LevelAlarmService.java

@ -0,0 +1,10 @@
package com.hnac.hzims.operational.alert.service;
/**
* 告警处理接口
* @author ysj
*/
public interface LevelAlarmService {
}

1
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AlertDefectServiceImpl.java

@ -27,6 +27,7 @@ import java.util.stream.Collectors;
/** /**
* 告警缺陷处理实现类 * 告警缺陷处理实现类
* @author ysj
*/ */
@Slf4j @Slf4j
@Service @Service

106
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AlertMerageServiceImpl.java

@ -0,0 +1,106 @@
package com.hnac.hzims.operational.alert.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hnac.hzims.operational.alert.constants.AbnormalAlarmConstant;
import com.hnac.hzims.operational.alert.entity.AlarmHandleEntity;
import com.hnac.hzims.operational.alert.entity.HistoryAbnormalAlarmEntity;
import com.hnac.hzims.operational.alert.service.AlarmHandleService;
import com.hnac.hzims.operational.alert.service.AlarmMergeService;
import com.hnac.hzims.operational.alert.service.HistoryAbnormalAlarmService;
import com.hnac.hzims.operational.alert.service.LevelAlarmService;
import com.hnac.hzims.operational.alert.vo.AlarmMergeVo;
import com.hnac.hzims.operational.config.vo.MessageParamVo;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.operational.station.service.IStationService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.TextMessage;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 告警合并处理实现类
* @author ysj
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AlertMerageServiceImpl implements AlarmMergeService {
private final IStationService stationService;
private final LevelAlarmService levelAlarmService;
private final AlarmHandleService alarmHandleService;
private final HistoryAbnormalAlarmService faultAlarmService;
/**
* 根据用户获取hz3000事故告警平台一级告警二级告警
* @param param
* @return
*/
@Override
public TextMessage getSendMessage(MessageParamVo param) {
// 查询用户
if(ObjectUtil.isEmpty(param)){
return null;
}
List<Long> depts = param.getDeptIds();
if(CollectionUtil.isEmpty(depts)){
return null;
}
// 查询站点
List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery()
.in(StationEntity::getRefDept,depts)
.eq(StationEntity::getServeType, HomePageConstant.HYDROPOWER_SERVETYPE)
);
if(CollectionUtil.isEmpty(stations)){
return null;
}
String start = DateUtil.format(new Date(),DateUtil.PATTERN_DATE) + " 00:00:00";
String end = DateUtil.format(new Date(),DateUtil.PATTERN_DATE) + " 23:59:59";
// hz3000事故告警
List<HistoryAbnormalAlarmEntity> faults = faultAlarmService.list(Wrappers.<HistoryAbnormalAlarmEntity>lambdaQuery()
.in(HistoryAbnormalAlarmEntity::getStationId,stations.stream().map(StationEntity::getCode).collect(Collectors.toList()))
.eq(HistoryAbnormalAlarmEntity::getType, AbnormalAlarmConstant.FAULT)
.between(HistoryAbnormalAlarmEntity::getStartTime,start,end)
);
// 处理告警记录
List<AlarmHandleEntity> handles = alarmHandleService.list(Wrappers.<AlarmHandleEntity>lambdaQuery()
.in(AlarmHandleEntity::getStationCode,stations.stream().map(StationEntity::getCode).collect(Collectors.toList()))
.in(AlarmHandleEntity::getAlarmType, AbnormalAlarmConstant.ALARM_WARN_TYPES)
.between(AlarmHandleEntity::getCreateTime,start,end)
);
List<AlarmMergeVo> alarms = new ArrayList<>();
if(CollectionUtil.isNotEmpty(faults)){
alarms.addAll(faults.stream().filter(o -> CollectionUtil.isEmpty(handles)
|| handles.stream().map(AlarmHandleEntity::getAlarmId).collect(Collectors.toList()).contains(o.getAlarmId())).
map(fault->{
AlarmMergeVo alarm = new AlarmMergeVo();
alarm.setStationCode(fault.getStationId());
alarm.setStationName(fault.getStationName());
alarm.setContent(fault.getSoeExplain());
alarm.setDate(fault.getStartTime());
alarm.setRealId(fault.getRealId());
alarm.setType(AbnormalAlarmConstant.WEBSOCKET_FAULT);
return alarm;
}).collect(Collectors.toList()));
}
// hz3000事故告警
// faultAlarmService.list();
return new TextMessage(JSONObject.toJSONString(alarms.stream().sorted(Comparator.comparing(AlarmMergeVo::getDate)).collect(Collectors.toList())));
}
}

1
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/HistoryAbnormalAlarmServiceImpl.java

@ -49,6 +49,7 @@ import java.util.stream.Collectors;
/** /**
* 历史告警实现类 * 历史告警实现类
* @author ysj
*/ */
@Slf4j @Slf4j
@Service @Service

18
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/LevelAlarmServiceImpl.java

@ -0,0 +1,18 @@
package com.hnac.hzims.operational.alert.service.impl;
import com.hnac.hzims.operational.alert.service.LevelAlarmService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 等级告警实现类
* @author ysj
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class LevelAlarmServiceImpl implements LevelAlarmService {
}

60
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/Swagger2Config.java

@ -0,0 +1,60 @@
package com.hnac.hzims.operational.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/4/13 13:40
*/
@Configuration
@EnableSwagger2
public class Swagger2Config implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/");
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Bean
public Docket webApiConfig(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("operationApplication")
.apiInfo(webApiInfo())
.select()
//只显示api路径下的页面
.paths(Predicates.and(PathSelectors.regex("/areaMonthlyDetails/.*")))
.build();
}
private ApiInfo webApiInfo() {
return new ApiInfoBuilder()
.title("网站-API文档")
.description("本文档描述了网站微服务接口定义")
.version("1.0")
.contact(new Contact("WL", "http://localhost:8501/", "55317332@qq.com"))
.build();
}
}

25
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/config/WebSocketConfig.java

@ -1,10 +1,8 @@
package com.hnac.hzims.operational.config.config; package com.hnac.hzims.operational.config.config;
import com.hnac.hzims.operational.config.ws.AlarmHandler;
import com.hnac.hzims.operational.config.ws.MessageHandler; import com.hnac.hzims.operational.config.ws.MessageHandler;
import com.hnac.hzims.operational.vRView.service.IHzImsRealDataService;
import com.hnac.hzims.operational.vRView.ws.HzWebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketHandler;
@ -13,27 +11,32 @@ import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServerEndpointExporter; import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* @author ysj
*/
@Configuration @Configuration
@EnableWebSocket @EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer{ public class WebSocketConfig implements WebSocketConfigurer{
@Override @Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myHandler(), "/comprehensiveD/{uid}") // 集中监控处理器
.setAllowedOrigins("*"); registry.addHandler(monitorHandler(), "/comprehensiveD/{uid}").setAllowedOrigins("*");
// 告警处理器
registry.addHandler(alarmHandler(), "/alarmHandler/{uid}").setAllowedOrigins("*");
} }
@Bean @Bean
public WebSocketHandler myHandler() { public WebSocketHandler monitorHandler() {
return new MessageHandler(); return new MessageHandler();
} }
@Bean @Bean
public ServerEndpointExporter serverEndpointExporter() { public WebSocketHandler alarmHandler() {
return new ServerEndpointExporter(); return new AlarmHandler();
} }
@Autowired @Bean
public void hzImsRealDataService(IHzImsRealDataService realDataService) { public ServerEndpointExporter serverEndpointExporter() {
HzWebSocketServer.hzImsRealDataService = realDataService; return new ServerEndpointExporter();
} }
} }

79
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/AlarmHandler.java

@ -0,0 +1,79 @@
package com.hnac.hzims.operational.config.ws;
import com.alibaba.fastjson.JSONObject;
import com.hnac.hzims.operational.alert.service.AlarmHandleService;
import com.hnac.hzims.operational.alert.service.AlarmMergeService;
import com.hnac.hzims.operational.config.vo.MessageParamVo;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import java.io.IOException;
/**
* @author ysj
*/
@Slf4j
public class AlarmHandler extends TextWebSocketHandler {
private final Long defaultRealDataRefreshTime = 20000L;
@Autowired
private AlarmMergeService alarmMergeService;
//WebSocket连接建立成功之后调用
@Override
public void afterConnectionEstablished(WebSocketSession session) {
String[] split = session.getUri().toString().split("/");
String uid = split[split.length - 1];
// session 参数设置用户进行标识
session.getAttributes().put("userId", uid);
AlarmSessionManager.add(uid, session);
SocketPool.alarm_pool.put(session.getId(), this);
}
// 连接关闭时调用
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
// 移除会话
AlarmSessionManager.removeAndClose(session.getId());
// map移除用户
SocketPool.alarm_pool.remove(session.getId());
}
// 消息传输错误触发
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) {
// 移除会话
SessionManager.removeAndClose(session.getId());
// map移除用户
SocketPool.pool.remove(session.getId());
}
// 接收消息触发
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) throws IOException {
// 获取会话用户编号
String userId = (String) session.getAttributes().get("userId");
String message = textMessage.getPayload();
if(StringUtil.isBlank(message)){
return;
}
MessageParamVo depts = JSONObject.parseObject(message, MessageParamVo.class);
if(ObjectUtil.isEmpty(depts)){
return;
}
TextMessage sendMessage = alarmMergeService.getSendMessage(depts);
if(ObjectUtil.isEmpty(sendMessage)){
return;
}
session.sendMessage(sendMessage);
}
}

58
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/AlarmSessionManager.java

@ -0,0 +1,58 @@
package com.hnac.hzims.operational.config.ws;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.socket.WebSocketSession;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author Lch
*/
@Slf4j
public class AlarmSessionManager {
public static ConcurrentHashMap<String, WebSocketSession> SESSION_POOL = new ConcurrentHashMap<>();
/**
* 添加会话
* @param uid 用户
* @param session 会话对象
*/
public static void add(String uid, WebSocketSession session) {
if (SESSION_POOL.containsKey(uid)) {
AlarmSessionManager.removeAndClose(uid);
}
SESSION_POOL.put(uid, session);
log.info("添加 WebSocketSession 会话成功,uid=" + uid);
}
/**
* 获取会话
* @param uid 用户
* @return
*/
public static WebSocketSession get(String uid) {
return SESSION_POOL.get(uid);
}
/**
* 移除会话并关闭会话
* @param uid 用户
*/
public static void removeAndClose(String uid) {
WebSocketSession session = SESSION_POOL.get(uid);
if (session != null) {
try {
//关闭连接
session.close();
} catch (IOException ex) {
throw new RuntimeException("关闭ws会话失败!", ex);
}
}
SESSION_POOL.remove(uid);
}
}

24
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/MessageHandler.java

@ -3,7 +3,6 @@ package com.hnac.hzims.operational.config.ws;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.hnac.hzims.operational.config.vo.MessageParamVo; import com.hnac.hzims.operational.config.vo.MessageParamVo;
import com.hnac.hzims.operational.station.service.IRealMonitorService; import com.hnac.hzims.operational.station.service.IRealMonitorService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringUtil; import org.springblade.core.tool.utils.StringUtil;
@ -14,25 +13,20 @@ import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler; import org.springframework.web.socket.handler.TextWebSocketHandler;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author ysj
*/
@Slf4j @Slf4j
public class MessageHandler extends TextWebSocketHandler { public class MessageHandler extends TextWebSocketHandler {
private ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); private final Long defaultRealDataRefreshTime = 20000L;
private Long defaultRealDataRefreshTime = 20000L;
@Autowired @Autowired
private IRealMonitorService monitorService; private IRealMonitorService monitorService;
private WebSocketSession session;
@Override @Override
public void afterConnectionEstablished(WebSocketSession session) { public void afterConnectionEstablished(WebSocketSession session) {
this.session = session;
String[] split = session.getUri().toString().split("/"); String[] split = session.getUri().toString().split("/");
String uid = split[split.length - 1]; String uid = split[split.length - 1];
SessionManager.add(uid, session); SessionManager.add(uid, session);
@ -45,20 +39,16 @@ public class MessageHandler extends TextWebSocketHandler {
@Override @Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
SessionManager.removeAndClose(session.getId()); SessionManager.removeAndClose(session.getId());
if (SocketPool.pool.containsKey(session.getId())) { SocketPool.pool.remove(session.getId());
SocketPool.pool.remove(session.getId());
}
log.info("sessionId: " + session.getId()); log.info("sessionId: " + session.getId());
log.info("uri: " + session.getUri()); log.info("uri: " + session.getUri());
log.info("session closed successful!"); log.info("session closed successful!");
} }
@Override @Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { public void handleTransportError(WebSocketSession session, Throwable exception) {
SessionManager.removeAndClose(session.getId()); SessionManager.removeAndClose(session.getId());
if (SocketPool.pool.containsKey(session.getId())) { SocketPool.pool.remove(session.getId());
SocketPool.pool.remove(session.getId());
}
} }
@Override @Override

16
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/MyInterceptor.java

@ -8,37 +8,34 @@ import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor; import org.springframework.web.socket.server.HandshakeInterceptor;
import java.nio.charset.Charset; import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* @author ysj
*/
@Component @Component
public class MyInterceptor implements HandshakeInterceptor { public class MyInterceptor implements HandshakeInterceptor {
/** /**
* 握手前 * 握手前
*
* @param request * @param request
* @param response * @param response
* @param wsHandler * @param wsHandler
* @param attributes * @param attributes
* @return * @return
* @throws Exception
*/ */
@Override @Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
System.out.println("握手开始");
// 获得请求参数 // 获得请求参数
HashMap<String, String> paramMap = (HashMap<String, String>) HttpUtil.decodeParamMap(request.getURI().getQuery(), StandardCharsets.UTF_8);
HashMap<String, String> paramMap = (HashMap<String, String>) HttpUtil.decodeParamMap(request.getURI().getQuery(), Charset.forName("utf-8"));
String uid = paramMap.get("token"); String uid = paramMap.get("token");
if (StrUtil.isNotBlank(uid)) { if (StrUtil.isNotBlank(uid)) {
// 放入属性域 // 放入属性域
attributes.put("token", uid); attributes.put("token", uid);
System.out.println("用户 token " + uid + " 握手成功!");
return true; return true;
} }
System.out.println("用户登录已失效");
return false; return false;
} }
@ -52,7 +49,6 @@ public class MyInterceptor implements HandshakeInterceptor {
*/ */
@Override @Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
System.out.println("握手完成");
} }
} }

7
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/SocketPool.java

@ -3,8 +3,13 @@ package com.hnac.hzims.operational.config.ws;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/**
* @author ysj
*/
public class SocketPool { public class SocketPool {
public static Map<String, MessageHandler> pool = new ConcurrentHashMap<String, MessageHandler>(); public static Map<String, MessageHandler> pool = new ConcurrentHashMap<>();
public static Map<String, AlarmHandler> alarm_pool = new ConcurrentHashMap<>();
} }

93
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/WebSocketClientConfig.java

@ -1,93 +0,0 @@
/*
package com.hnac.hzims.operational.config.ws;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.hnac.hzims.operational.config.service.StFocusPropertiesService;
import com.hnac.hzims.operational.config.vo.StationRealVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Slf4j
@EnableScheduling
@Component
public class WebSocketClientConfig {
@Value("${hzims.config.ws-url}")
String wsUrl;
List<WebsocketConfigClient> clientList;
@Autowired
private StFocusPropertiesService stFocusPropertiesService;
private static final Integer MAX_SEND = 40;
*/
/**
* 定时30秒推送一次消息
*//*
@Scheduled(cron = "0/30 * * * * ?")
private void keepAlive() throws InterruptedException, URISyntaxException {
*/
/*try {
List<StationRealVo> message = stFocusPropertiesService.getStationRealIds();
if (CollectionUtil.isEmpty(message)) {
return;
}
int limit = countStep(message.size());
List<List<StationRealVo>> list = Stream.iterate(0, n -> n + 1).limit(limit).parallel().map(a -> message.stream().skip(a * MAX_SEND).limit(MAX_SEND).parallel().collect(Collectors.toList())).collect(Collectors.toList());
if (CollectionUtil.isEmpty(list)) {
return;
}
if (CollectionUtil.isEmpty(clientList)) {
clientList = new ArrayList<>();
for (int i = 0; i < limit; i++) {
WebsocketConfigClient client = new WebsocketConfigClient(new URI(wsUrl));
if (client.connectBlocking()) {
String json = JSONObject.toJSONString(list.get(i));
client.send(json);
clientList.add(client);
}
}
return;
}
if(CollectionUtil.isNotEmpty(clientList.stream().filter(o->!o.isOpen()).collect(Collectors.toList()))){
clientList.clear();
return;
}
for (int i = 0; i < limit; i++) {
String json = JSONObject.toJSONString(list.get(i));
WebsocketConfigClient client = clientList.get(i);
client.send(json);
}
}catch (Exception e){
log.error("[WebsocketConfigClient] 错误={}",e.toString());
}*//*
}
*/
/**
* 计算切分次数
*//*
private static Integer countStep(Integer size) {
return (size + MAX_SEND - 1) / MAX_SEND;
}
}
*/

124
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/WebsocketConfigClient.java

@ -1,124 +0,0 @@
/*
package com.hnac.hzims.operational.config.ws;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.hnac.hzims.operational.config.service.StAlamRecordService;
import com.hnac.hzims.operational.station.service.IRealMonitorService;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.springblade.core.tool.utils.SpringUtil;
import org.springframework.beans.factory.annotation.Value;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.net.URI;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@Slf4j
public class WebsocketConfigClient extends WebSocketClient {
@Value("${hzims.config.ws-url}")
String wsUrl;
StAlamRecordService stAlamRecordService;
private static final String MSG_SUCCESS_STATUS = "200";
public WebsocketConfigClient(URI serverUri) {
super(serverUri);
stAlamRecordService = SpringUtil.getBean(StAlamRecordService.class);
if (serverUri.toString().contains("wss://") && serverUri.toString().contains("/data")) {
trustAllHosts(this);
}
}
@Override
public void onOpen(ServerHandshake handshakedata) {
System.out.println("onOpen");
}
@Override
public void onMessage(String message) {
try {
manageHandleMsg(message);
} catch (Exception e) {
log.error("websocketConfigClient error{}",message,e);
}
log.error("onMessage");
}
@Override
public void onClose(int code, String reason, boolean remote) {
log.error("-----------------------------------------------,123,onClose");
}
@Override
public void onError(Exception ex) {
log.error("------------------onError");
}
private void manageHandleMsg(String message) {
if(StringUtil.isBlank(message)) {
return;
}
// 将信息转换成json
JSONObject msg = JSONObject.parseObject(message);
String status = msg.getString("status");
String result = msg.getString("result");
if(StringUtil.isBlank(result)){
return;
}
if(StringUtil.isBlank(status) || !MSG_SUCCESS_STATUS.equals(status)){
return;
}
// 将结果响应结果转换成嵌套Map格式
Map<String, Map<String, String>> resultMap = JSONObject.parseObject(result, new TypeReference<Map<String, Map<String, String>>>(){});
if(MapUtils.isEmpty(resultMap)) {
return;
}
// 存储redis
stAlamRecordService.receiveDataStorage(resultMap);
}
void trustAllHosts(WebsocketConfigClient appClient) {
log.info("[websocket] wss 连接 ----- ");
try {
// wss需添加
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, new SecureRandom());
SSLSocketFactory factory = sslContext.getSocketFactory();
appClient.setSocket(factory.createSocket());
} catch (Exception e) {
log.error("[websocket] trustAllHosts 错误 - " + e.toString());
}
}
}
*/

13
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/ws/WebsocketRun.java

@ -1,13 +0,0 @@
package com.hnac.hzims.operational.config.ws;
public class WebsocketRun extends Thread{
@Override
public void run() {
super.run();
}
}

9
hzims-service/operational/src/main/java/com/hnac/hzims/operational/fill/service/GenerateService.java

@ -6,12 +6,15 @@ import com.hnac.hzims.operational.fill.entity.RainfallEntity;
import com.hnac.hzims.operational.fill.vo.GenerateVo; import com.hnac.hzims.operational.fill.vo.GenerateVo;
import com.hnac.hzims.operational.fill.vo.QueryVo; import com.hnac.hzims.operational.fill.vo.QueryVo;
import com.hnac.hzims.operational.fill.vo.RainfallVo; import com.hnac.hzims.operational.fill.vo.RainfallVo;
import com.hnac.hzims.operational.main.vo.GenerationPowerVo;
import com.hnac.hzims.operational.main.vo.PowerMonthVo; import com.hnac.hzims.operational.main.vo.PowerMonthVo;
import com.hnac.hzims.operational.main.vo.UsrPowerVo;
import org.springblade.core.mp.base.BaseService; import org.springblade.core.mp.base.BaseService;
import org.springblade.core.mp.support.Query; import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author ysj * @author ysj
@ -26,6 +29,12 @@ public interface GenerateService extends BaseService<GenerateEntity> {
// 新增/修改发电量填报数据 // 新增/修改发电量填报数据
boolean saveUpdate(GenerateEntity entity); boolean saveUpdate(GenerateEntity entity);
// 查询填报用电量
Float generate(String date,String station);
// 查询30天填报用电量
List<GenerationPowerVo> generate30Day(String day, String station);
// 获取站点填报发电量 // 获取站点填报发电量
List<PowerMonthVo> generateThreeYear(String start, String end, String station); List<PowerMonthVo> generateThreeYear(String start, String end, String station);
} }

54
hzims-service/operational/src/main/java/com/hnac/hzims/operational/fill/service/impl/GenerateServiceImpl.java

@ -5,12 +5,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hnac.hzims.operational.fill.entity.GenerateEntity; import com.hnac.hzims.operational.fill.entity.GenerateEntity;
import com.hnac.hzims.operational.fill.entity.UseEntity;
import com.hnac.hzims.operational.fill.mapper.GenerateMapper; import com.hnac.hzims.operational.fill.mapper.GenerateMapper;
import com.hnac.hzims.operational.fill.service.GenerateService; import com.hnac.hzims.operational.fill.service.GenerateService;
import com.hnac.hzims.operational.fill.vo.GenerateVo; import com.hnac.hzims.operational.fill.vo.GenerateVo;
import com.hnac.hzims.operational.fill.vo.QueryVo; import com.hnac.hzims.operational.fill.vo.QueryVo;
import com.hnac.hzims.operational.fill.wrapper.GenerateWrapper; import com.hnac.hzims.operational.fill.wrapper.GenerateWrapper;
import com.hnac.hzims.operational.main.vo.GenerationPowerVo;
import com.hnac.hzims.operational.main.vo.PowerMonthVo; import com.hnac.hzims.operational.main.vo.PowerMonthVo;
import com.hnac.hzims.operational.main.vo.UsrPowerVo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.core.log.exception.ServiceException; import org.springblade.core.log.exception.ServiceException;
@ -25,6 +28,7 @@ import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -88,6 +92,56 @@ public class GenerateServiceImpl extends BaseServiceImpl<GenerateMapper, Generat
} }
/** /**
* 根据时间机构查询用电量
* @param date 时间: - yyyy/ yyyy-mm/ yyyy-mm-dd
* @param station 所属机构
* @return
*/
@Override
public Float generate(String date, String station) {
List<GenerateEntity> powers = this.list(Wrappers.<GenerateEntity>lambdaQuery()
.likeRight(GenerateEntity::getFillDate,date)
.eq(GenerateEntity::getStationCode,station)
);
if(CollectionUtil.isEmpty(powers)){
return 0f;
}
return (float) powers.stream().mapToDouble(GenerateEntity::getGenerate).sum();
}
/**
* 查询30天填报用电量
* @param day : 结束日期 yyyy-MM-dd
* @param station 站点编码
* @return
*/
@Override
public List<GenerationPowerVo> generate30Day(String day, String station) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(DateUtil.parse(day,DateUtil.PATTERN_DATE));
String end = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE);
calendar.add(Calendar.DAY_OF_MONTH,-29);
String start = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE);
List<GenerateEntity> records = this.list(Wrappers.<GenerateEntity>lambdaQuery()
.between(GenerateEntity::getFillDate,start,end)
.eq(GenerateEntity::getStationCode,station)
);
if(CollectionUtil.isEmpty(records)){
return new ArrayList<>();
}
return records.stream().map(record->{
GenerationPowerVo generate = new GenerationPowerVo();
generate.setDate(record.getFillDate());
if(Math.abs(record.getGenerate()) <= 0){
generate.setGenerate(0f);
}else{
generate.setGenerate(Float.parseFloat(record.getGenerate().toString()));
}
return generate;
}).collect(Collectors.toList());
}
/**
* *
* @param start 时间: - yyyy/ yyyy-mm/ yyyy-mm-dd * @param start 时间: - yyyy/ yyyy-mm/ yyyy-mm-dd
* @param end 时间: - yyyy/ yyyy-mm/ yyyy-mm-dd * @param end 时间: - yyyy/ yyyy-mm/ yyyy-mm-dd

9
hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/WebHomeController.java

@ -17,6 +17,9 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
/**
* @author ysj
*/
@RestController @RestController
@RequestMapping("/webHome") @RequestMapping("/webHome")
@Api(value = "app首页", tags = "app-首页") @Api(value = "app首页", tags = "app-首页")
@ -24,12 +27,13 @@ import java.util.List;
public class WebHomeController extends BladeController { public class WebHomeController extends BladeController {
private final HydropowerService service; private final HydropowerService service;
@ApiLog @ApiLog
@ApiOperation("水电站站点统计") @ApiOperation("水电站站点统计")
@GetMapping("/webStation") @GetMapping("/webStation")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
public R<HydropowerStationVo> hydropowerStation(@ApiParam(value = "站点机构ID") Long deptId) { public R<HydropowerStationVo> hydropowerStation(@ApiParam(value = "站点机构ID") Long deptId) {
HydropowerStationVo response = service.webStation(deptId); HydropowerStationVo response = service.station(deptId);
return R.data(response); return R.data(response);
} }
@ApiLog @ApiLog
@ -41,7 +45,6 @@ public class WebHomeController extends BladeController {
return R.data(list); return R.data(list);
} }
@ApiLog @ApiLog
@ApiOperation("水电站站点列表") @ApiOperation("水电站站点列表")
@GetMapping("/webStationList") @GetMapping("/webStationList")
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@ -49,4 +52,4 @@ public class WebHomeController extends BladeController {
return R.data(service.webStationList(deptId)); return R.data(service.webStationList(deptId));
} }
} }

79
hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java

@ -28,7 +28,9 @@ import com.hnac.hzims.ticket.areamonthly.vo.*;
import com.hnac.hzinfo.inspect.areamonthly.vo.TaskListQuery; import com.hnac.hzinfo.inspect.areamonthly.vo.TaskListQuery;
import com.hnac.hzinfo.inspect.areamonthly.vo.TaskVo; import com.hnac.hzinfo.inspect.areamonthly.vo.TaskVo;
import com.hnac.hzinfo.inspect.task.entity.TaskEntity; import com.hnac.hzinfo.inspect.task.entity.TaskEntity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseEntity;
@ -49,6 +51,7 @@ import java.util.List;
* @Serial 1.0 * @Serial 1.0
* @Date 2023/4/10 11:21 * @Date 2023/4/10 11:21
*/ */
@Api(tags = "水电生成报告详情数据")
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@ -66,12 +69,16 @@ public class AreaMonthlyDetailsController {
private final IOperAccessStatisticsService accessStatisticsService; private final IOperAccessStatisticsService accessStatisticsService;
/** /**
* 操作票 根据月份区域 获取操作详情数据 * 操作票 根据月份区域 获取操作详情数据
* *
* @return * @return
*/ */
@ApiOperation("操作票 根据月份,区域 获取操作详情数据")
@GetMapping("/areaMonthlyWithOperation/{page}/{size}") @GetMapping("/areaMonthlyWithOperation/{page}/{size}")
public R areaMonthlyWithOperation(@PathVariable("page") Long page, @PathVariable("size") Long size, StandardTicketWithAreaVo areaMonthly) { public R areaMonthlyWithOperation(
@ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
@ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
StandardTicketWithAreaVo areaMonthly) {
BladePage<StandardTicketVo> standardTicketInfoVoIPage = areaMonthlyDetailsService.areaMonthlyWithOperation(page, size, areaMonthly); BladePage<StandardTicketVo> standardTicketInfoVoIPage = areaMonthlyDetailsService.areaMonthlyWithOperation(page, size, areaMonthly);
return R.data(standardTicketInfoVoIPage); return R.data(standardTicketInfoVoIPage);
} }
@ -82,6 +89,7 @@ public class AreaMonthlyDetailsController {
* *
* @return * @return
*/ */
@ApiOperation("操作票 根据月份,区域 获取操作详情数据")
@GetMapping("/areaMonthlyWithOperation/detail/{id}") @GetMapping("/areaMonthlyWithOperation/detail/{id}")
public R areaMonthlyWithOperationDetail(@PathVariable("id") Long id) { public R areaMonthlyWithOperationDetail(@PathVariable("id") Long id) {
StandardTicketInfoVO standardTicketInfoVoIPage = areaMonthlyDetailsService.areaMonthlyWithOperationDetail(id); StandardTicketInfoVO standardTicketInfoVoIPage = areaMonthlyDetailsService.areaMonthlyWithOperationDetail(id);
@ -92,6 +100,7 @@ public class AreaMonthlyDetailsController {
/** /**
* 查询工作票评论 * 查询工作票评论
*/ */
@ApiOperation("查询工作票评论")
@GetMapping("/areaMonthlyWithOperation/workTicketCommentList") @GetMapping("/areaMonthlyWithOperation/workTicketCommentList")
public R<List<TicketInfoEvaluateVO>> workTicketCommentList(TicketInfoEvaluateEntity req) { public R<List<TicketInfoEvaluateVO>> workTicketCommentList(TicketInfoEvaluateEntity req) {
List<TicketInfoEvaluateVO> ticketInfoEvaluateVOS = areaMonthlyDetailsService.workTicketCommentList(req); List<TicketInfoEvaluateVO> ticketInfoEvaluateVOS = areaMonthlyDetailsService.workTicketCommentList(req);
@ -102,6 +111,7 @@ public class AreaMonthlyDetailsController {
/** /**
* 保存评论信息 * 保存评论信息
*/ */
@ApiOperation("保存评论信息")
@PostMapping("/saveComment") @PostMapping("/saveComment")
public R saveComment(@RequestBody TicketInfoEvaluateDto req) { public R saveComment(@RequestBody TicketInfoEvaluateDto req) {
return R.data(areaMonthlyDetailsService.saveComment(req)); return R.data(areaMonthlyDetailsService.saveComment(req));
@ -110,8 +120,12 @@ public class AreaMonthlyDetailsController {
/** /**
* 根据月份和区域查询工作票列表详情 * 根据月份和区域查询工作票列表详情
*/ */
@ApiOperation("根据月份和区域查询工作票列表详情")
@GetMapping("/workTicketListByMonthAndArea/{page}/{size}") @GetMapping("/workTicketListByMonthAndArea/{page}/{size}")
R<BladePage<StandardWorkVo>> workTicketListByMonthAndArea(@PathVariable Long page, @PathVariable Long size, @SpringQueryMap StandardTicketWithAreaVo areaMonthlyVo) { R<BladePage<StandardWorkVo>> workTicketListByMonthAndArea(
@ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
@ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
@SpringQueryMap StandardTicketWithAreaVo areaMonthlyVo) {
BladePage<StandardWorkVo> standardWorkVoIPage = areaMonthlyDetailsService.workTicketListByMonthAndArea(page, size, areaMonthlyVo); BladePage<StandardWorkVo> standardWorkVoIPage = areaMonthlyDetailsService.workTicketListByMonthAndArea(page, size, areaMonthlyVo);
return R.data(standardWorkVoIPage); return R.data(standardWorkVoIPage);
} }
@ -121,9 +135,12 @@ public class AreaMonthlyDetailsController {
* 根据区域和月份分页查询日志维护列表 * 根据区域和月份分页查询日志维护列表
*/ */
@ApiOperationSupport(order = 100) @ApiOperationSupport(order = 100)
@ApiOperation(value = "日志维护列表分页查询") @ApiOperation(value = "根据区域和月份分页查询日志维护列表")
@GetMapping("/queryLogMaintenancePageList/{page}/{size}") @GetMapping("/queryLogMaintenancePageList/{page}/{size}")
public R<IPage<MaintenanceTaskVo>> queryLogMaintenancePageList(@PathVariable Long page, @PathVariable Long size, MaintenanceTaskWithAreaVo maintenanceTaskVo) { public R<IPage<MaintenanceTaskVo>> queryLogMaintenancePageList(
@ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
@ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
MaintenanceTaskWithAreaVo maintenanceTaskVo) {
Page<OperMaintenanceTaskEntity> pageParam = new Page<>(page, size); Page<OperMaintenanceTaskEntity> pageParam = new Page<>(page, size);
IPage<MaintenanceTaskVo> taskList = taskService.queryLogMaintenancePageList(pageParam, maintenanceTaskVo); IPage<MaintenanceTaskVo> taskList = taskService.queryLogMaintenancePageList(pageParam, maintenanceTaskVo);
return R.data(taskList); return R.data(taskList);
@ -135,7 +152,7 @@ public class AreaMonthlyDetailsController {
*/ */
@GetMapping("/queryLogMaintenancePageList/detail/{id}") @GetMapping("/queryLogMaintenancePageList/detail/{id}")
@ApiOperationSupport(order = 40) @ApiOperationSupport(order = 40)
@ApiOperation(value = "详情") @ApiOperation(value = "根据区域和月份分页查询日志维护 根据id获取详情")
public R<OperMaintenanceTaskEntity> detail(@PathVariable Long id) { public R<OperMaintenanceTaskEntity> detail(@PathVariable Long id) {
return taskService.detail(id); return taskService.detail(id);
} }
@ -145,7 +162,7 @@ public class AreaMonthlyDetailsController {
* 根据区域和月份分页查询巡检任务 * 根据区域和月份分页查询巡检任务
*/ */
@ApiOperationSupport(order = 50) @ApiOperationSupport(order = 50)
@ApiOperation(value = "分页查询") @ApiOperation(value = "根据区域和月份分页查询巡检任务")
@GetMapping("/queryCheckTaskPageList") @GetMapping("/queryCheckTaskPageList")
public R<BladePage<TaskVo>> queryCheckTaskPageList(TaskListQuery task, Query query) { public R<BladePage<TaskVo>> queryCheckTaskPageList(TaskListQuery task, Query query) {
BladePage<TaskVo> taskVoIPage = areaMonthlyDetailsService.queryCheckTaskPageList(task, query); BladePage<TaskVo> taskVoIPage = areaMonthlyDetailsService.queryCheckTaskPageList(task, query);
@ -156,9 +173,9 @@ public class AreaMonthlyDetailsController {
/** /**
* 根据id查询巡检任务 * 根据id查询巡检任务
*/ */
@ApiOperation(value = "根据id查询巡检任务")
@GetMapping("/queryCheckTaskById/{id}") @GetMapping("/queryCheckTaskById/{id}")
@ApiOperationSupport(order = 60) @ApiOperationSupport(order = 60)
@ApiOperation(value = "详情")
public R<TaskEntity> queryCheckTaskById(@PathVariable Long id) { public R<TaskEntity> queryCheckTaskById(@PathVariable Long id) {
TaskEntity task = areaMonthlyDetailsService.queryCheckTaskById(id); TaskEntity task = areaMonthlyDetailsService.queryCheckTaskById(id);
return R.data(task); return R.data(task);
@ -169,11 +186,11 @@ public class AreaMonthlyDetailsController {
* 根据区域和月份分页查询缺陷库 * 根据区域和月份分页查询缺陷库
*/ */
@ApiOperationSupport(order = 70) @ApiOperationSupport(order = 70)
@ApiOperation(value = "分页查询") @ApiOperation(value = "根据区域和月份分页查询缺陷库")
@GetMapping("/queryDefectPageList/{page}/{size}") @GetMapping("/queryDefectPageList/{page}/{size}")
public R<IPage<OperDefectVO>> queryDefectPageList( public R<IPage<OperDefectVO>> queryDefectPageList(
@PathVariable Long page, @ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
@PathVariable Long size, @ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
OperDefectEntity defect) { OperDefectEntity defect) {
Page<OperDefectEntity> operDefectEntityPage = new Page<>(page, size); Page<OperDefectEntity> operDefectEntityPage = new Page<>(page, size);
IPage<OperDefectEntity> pages = defectService.selectPage(operDefectEntityPage, defect); IPage<OperDefectEntity> pages = defectService.selectPage(operDefectEntityPage, defect);
@ -187,7 +204,7 @@ public class AreaMonthlyDetailsController {
*/ */
@GetMapping("queryDefectPageDetail/detail") @GetMapping("queryDefectPageDetail/detail")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiOperation(value = "详情", notes = "传入defect") @ApiOperation(value = "根据区域和月份分页查询缺陷库 详情", notes = "传入defect")
public R<OperDefectVO> queryDefectPageDetail(OperDefectEntity defect) { public R<OperDefectVO> queryDefectPageDetail(OperDefectEntity defect) {
return defectService.detail(defect); return defectService.detail(defect);
} }
@ -200,7 +217,8 @@ public class AreaMonthlyDetailsController {
@ApiOperation(value = "根据区域和月份分页查询检修任务") @ApiOperation(value = "根据区域和月份分页查询检修任务")
@GetMapping("/queryReconditionPageList/{page}/{size}") @GetMapping("/queryReconditionPageList/{page}/{size}")
public R<IPage<OperAccessStatisticsVO>> queryReconditionPageList( public R<IPage<OperAccessStatisticsVO>> queryReconditionPageList(
@PathVariable Long page, @PathVariable Long size, @ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
@ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
OperAccessStatisticsDTO result) { OperAccessStatisticsDTO result) {
Page<OperAccessStatisticsVO> dbPage = new Page<>(page, size); Page<OperAccessStatisticsVO> dbPage = new Page<>(page, size);
R<IPage<OperAccessStatisticsVO>> r = accessStatisticsService.list(result, dbPage); R<IPage<OperAccessStatisticsVO>> r = accessStatisticsService.list(result, dbPage);
@ -226,8 +244,10 @@ public class AreaMonthlyDetailsController {
@GetMapping("/queryProduceNumByAreaCode/{page}/{size}") @GetMapping("/queryProduceNumByAreaCode/{page}/{size}")
@ApiOperationSupport(order = 90) @ApiOperationSupport(order = 90)
@ApiOperation(value = "根据区域编号查询安全生产会议次数") @ApiOperation(value = "根据区域编号查询安全生产会议次数")
public R<BladePage<CheckMonthVo>> queryProduceNumByAreaCode(@PathVariable Long page, @PathVariable Long size, public R<BladePage<CheckMonthVo>> queryProduceNumByAreaCode(
CheckMonthEntity req) { @ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
@ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
CheckMonthEntity req) {
req.setItemName("现场每月1次安全生产会议"); req.setItemName("现场每月1次安全生产会议");
BladePage<CheckMonthVo> checkMonthVoBladePage = areaMonthlyDetailsService.queryProduceByAreaCode(page, size, BladePage<CheckMonthVo> checkMonthVoBladePage = areaMonthlyDetailsService.queryProduceByAreaCode(page, size,
req); req);
@ -240,7 +260,10 @@ public class AreaMonthlyDetailsController {
@GetMapping("/querySkillByAreaCode/{page}/{size}") @GetMapping("/querySkillByAreaCode/{page}/{size}")
@ApiOperationSupport(order = 100) @ApiOperationSupport(order = 100)
@ApiOperation(value = "根据区域编号查询技能培训") @ApiOperation(value = "根据区域编号查询技能培训")
public R<BladePage<CheckMonthVo>> querySkillByAreaCode(@PathVariable Long page, @PathVariable Long size, CheckMonthEntity req) { public R<BladePage<CheckMonthVo>> querySkillByAreaCode(
@ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
@ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
CheckMonthEntity req) {
req.setItemName("每月开展1次技能培训"); req.setItemName("每月开展1次技能培训");
BladePage<CheckMonthVo> checkMonthVoBladePage = areaMonthlyDetailsService.queryProduceByAreaCode(page, size, BladePage<CheckMonthVo> checkMonthVoBladePage = areaMonthlyDetailsService.queryProduceByAreaCode(page, size,
req); req);
@ -254,21 +277,23 @@ public class AreaMonthlyDetailsController {
@GetMapping("/queryProduceByAreaCode/{page}/{size}") @GetMapping("/queryProduceByAreaCode/{page}/{size}")
@ApiOperationSupport(order = 100) @ApiOperationSupport(order = 100)
@ApiOperation(value = "根据区域编号查询技能培训") @ApiOperation(value = "根据区域编号查询技能培训")
public R<BladePage<CheckMonthVo>> queryProduceByAreaCode(@PathVariable Long page, @PathVariable Long size, CheckMonthEntity req) { public R<BladePage<CheckMonthVo>> queryProduceByAreaCode(
@ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
@ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
CheckMonthEntity req) {
BladePage<CheckMonthVo> checkMonthVoBladePage = areaMonthlyDetailsService.queryProduceByAreaCode(page, size, BladePage<CheckMonthVo> checkMonthVoBladePage = areaMonthlyDetailsService.queryProduceByAreaCode(page, size,
req); req);
return R.data(checkMonthVoBladePage); return R.data(checkMonthVoBladePage);
} }
/** /**
* 根据区域编号查询 月度自查 技能培训 安全生产会议次数 * 根据区域编号查询 月度自查 技能培训 安全生产会议次数
*/ */
@GetMapping("/queryProduceByAreaCodeDetail/detail/{id}") @GetMapping("/queryProduceByAreaCodeDetail/detail/{id}")
@ApiOperationSupport(order = 40) @ApiOperationSupport(order = 40)
@ApiOperation(value = "详情", notes = "传入id") @ApiOperation(value = "根据区域编号查询 月度自查 技能培训 安全生产会议次数", notes = "传入id")
public R<CheckMonthVo> queryProduceByAreaCodeDetail(@PathVariable Long id){ public R<CheckMonthVo> queryProduceByAreaCodeDetail(@PathVariable Long id) {
CheckMonthVo checkMonthVo = areaMonthlyDetailsService.queryProduceByAreaCodeDetail(id); CheckMonthVo checkMonthVo = areaMonthlyDetailsService.queryProduceByAreaCodeDetail(id);
return R.data(checkMonthVo); return R.data(checkMonthVo);
} }
@ -280,9 +305,10 @@ public class AreaMonthlyDetailsController {
@GetMapping("/querySecurityAreaCode/{page}/{size}") @GetMapping("/querySecurityAreaCode/{page}/{size}")
@ApiOperationSupport(order = 100) @ApiOperationSupport(order = 100)
@ApiOperation(value = "根据区域编号查询安全检查") @ApiOperation(value = "根据区域编号查询安全检查")
public R<BladePage<CheckCompanyVo>> querySecurityAreaCode(@PathVariable Long page, public R<BladePage<CheckCompanyVo>> querySecurityAreaCode(
@PathVariable Long size, @ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page,
CheckCompanyEntity req) { @ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size,
CheckCompanyEntity req) {
BladePage<CheckCompanyVo> checkMonthVoBladePage = areaMonthlyDetailsService.querySecurityAreaCode(page, size, BladePage<CheckCompanyVo> checkMonthVoBladePage = areaMonthlyDetailsService.querySecurityAreaCode(page, size,
req); req);
return R.data(checkMonthVoBladePage); return R.data(checkMonthVoBladePage);
@ -301,7 +327,6 @@ public class AreaMonthlyDetailsController {
} }
/** /**
* 根据区域编号查询设备试验 * 根据区域编号查询设备试验
*/ */
@ -309,11 +334,11 @@ public class AreaMonthlyDetailsController {
@ApiOperationSupport(order = 100) @ApiOperationSupport(order = 100)
@ApiOperation(value = "根据区域编号查询设备试验") @ApiOperation(value = "根据区域编号查询设备试验")
public R<BladePage<SafeEquipmentTrialVO>> queryEquipmentAreaCode( public R<BladePage<SafeEquipmentTrialVO>> queryEquipmentAreaCode(
@PathVariable Long page, @ApiParam(name = "page",value = "当前页",required = true) @PathVariable("page") Long page,
@PathVariable Long size, @ApiParam(name = "size",value = "每页记录数",required = true) @PathVariable("size") Long size,
SafeEquipmentTrialDTO safeEquipmentTrialDTO) { SafeEquipmentTrialDTO safeEquipmentTrialDTO) {
BladePage<SafeEquipmentTrialVO> checkMonthVoBladePage = areaMonthlyDetailsService.queryEquipmentAreaCode(page BladePage<SafeEquipmentTrialVO> checkMonthVoBladePage = areaMonthlyDetailsService.queryEquipmentAreaCode(page
,size,safeEquipmentTrialDTO); , size, safeEquipmentTrialDTO);
return R.data(checkMonthVoBladePage); return R.data(checkMonthVoBladePage);
} }

2
hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/HydropowerService.java

@ -14,7 +14,7 @@ public interface HydropowerService {
void loadHydropowerTarget(String param); void loadHydropowerTarget(String param);
HydropowerStationVo webStation(Long deptId); HydropowerStationVo station(Long deptId);
List<HydropowerUnitVo> hydropowerDevice(Long deptId); List<HydropowerUnitVo> hydropowerDevice(Long deptId);

406
hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java

@ -2,6 +2,7 @@ package com.hnac.hzims.operational.main.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hnac.hzims.EquipmentConstants; import com.hnac.hzims.EquipmentConstants;
import com.hnac.hzims.equipment.feign.IPlanGenertionClient; import com.hnac.hzims.equipment.feign.IPlanGenertionClient;
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo;
@ -9,9 +10,10 @@ import com.hnac.hzims.equipment.vo.PlanPowerYearVo;
import com.hnac.hzims.hzimsweather.response.weather.Daily; import com.hnac.hzims.hzimsweather.response.weather.Daily;
import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse; import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse;
import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherNowResponse; import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherNowResponse;
import com.hnac.hzims.operational.fill.service.GenerateService;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.main.service.*; import com.hnac.hzims.operational.main.service.*;
import com.hnac.hzims.operational.main.vo.*; import com.hnac.hzims.operational.main.vo.*;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.operational.station.service.IStationAttributeService; import com.hnac.hzims.operational.station.service.IStationAttributeService;
import com.hnac.hzims.operational.station.service.IStationService; import com.hnac.hzims.operational.station.service.IStationService;
@ -44,23 +46,25 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class HydropowerServiceImpl implements HydropowerService { public class HydropowerServiceImpl implements HydropowerService {
private final IAnalyseDataService analyseDataService; private final IWaterService waterService;
private final IHomePageService homePageService;
private final IMainSystemMonitoringService maintenanceTaskService; private final IWeatherService weatherService;
private final IStationService stationService; private final IStationService stationService;
private final IStationAttributeService attributeService; private final GenerateService generateService;
private final IWaterService waterService; private final IHomePageService homePageService;
private final IPlanGenertionClient planGenertionClient; private final IAnalyseDataService analyseDataService;
private final IStationAttributeService attributeService;
private final IMainSystemMonitoringService maintenanceTaskService;
private final ISoeClient soeClient; private final ISoeClient soeClient;
private final IWeatherService weatherService; private final IPlanGenertionClient planGenertionClient;
private final RedisTemplate redisTemplate; private final RedisTemplate redisTemplate;
@ -79,63 +83,54 @@ public class HydropowerServiceImpl implements HydropowerService {
*/ */
@Override @Override
public void loadHydropowerReal(String param) { public void loadHydropowerReal(String param) {
// 有效设备 // 水电站站点
List<EminfoAndEmParamVo> valid = this.getValidDeviceList(); List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery()
if(CollectionUtil.isEmpty(valid)){ .eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE)
.eq(StationEntity::getType,HomePageConstant.HYDROPOWER)
);
if(CollectionUtil.isEmpty(stations)){
return;
}
// 水电站设备
List<EminfoAndEmParamVo> devices = this.pumpDevices(stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList()));
if(CollectionUtil.isEmpty(devices)){
return; return;
} }
// 实时数据 // 实时数据
Map<String, String> map = this.getRealMap(); Map<String, String> map = this.getRealMap();
// 单位 // 单位
Map<String, String> unitMap = this.attributeService.getPointUnit(); Map<String, String> unitMap = this.attributeService.getPointUnit();
List<HydropowerUnitRealVo> list = new ArrayList<>(); // 实时数据
valid.forEach(device->{ List<HydropowerUnitRealVo> reals = devices.stream().map(device->{
HydropowerUnitRealVo realVo = new HydropowerUnitRealVo(); HydropowerUnitRealVo real = new HydropowerUnitRealVo();
realVo.setDeptId(device.getCreateDept()); real.setDeptId(device.getCreateDept());
realVo.setDeviceCode(device.getEmCode()); real.setDeviceCode(device.getEmCode());
realVo.setDeptName(device.getName()); real.setDeptName(device.getName());
realVo.setDeviceName(device.getName()); real.setDeviceName(device.getName());
// 开关机状态 // 开关机状态
String state = this.getSignageValue(device,map,HomePageConstant.JOINT_RELAY); real.setState(this.getSignageValue(device,map,HomePageConstant.JOINT_RELAY));
realVo.setState(state);
// 有功功率 // 有功功率
String activePower = this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_ACTIVE_POWER); real.setActivePower(this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_ACTIVE_POWER));
realVo.setActivePower(activePower);
// 无功功率 // 无功功率
String reactivePower = this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_REACTIVE_POWER); real.setReactivePower(this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_REACTIVE_POWER));
realVo.setReactivePower(reactivePower);
// 功率因数 // 功率因数
String powerFactor = this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_POWERFACTOR); real.setPowerFactor(this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_POWERFACTOR));
realVo.setPowerFactor(powerFactor);
// 机组频率 // 机组频率
String frequency = this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_FREQUENCY); real.setFrequency(this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_FREQUENCY));
realVo.setFrequency(frequency);
// 导叶开度 // 导叶开度
String guideOpen = this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_GUIDEOPEN); real.setGuideOpen(this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_GUIDEOPEN));
realVo.setGuideOpen(guideOpen);
// 定子电压 // 定子电压
String statorVoltage = this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_VOLTAGE); real.setStatorVoltage(this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_VOLTAGE));
realVo.setStatorVoltage(statorVoltage);
// 定子电流 // 定子电流
String statorCurrent = this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_CURRENT); real.setStatorCurrent(this.getSignageValue(device,map,HomePageConstant.HYDROPOWER_CURRENT));
realVo.setStatorCurrent(statorCurrent);
// 单位设置 // 单位设置
this.setttingUnit(device,unitMap,realVo); this.setttingUnit(device,unitMap,real);
list.add(realVo); return real;
}); }).collect(Collectors.toList());
redisTemplate.opsForValue().set(load_hydropower_unit_real_key,list); if(CollectionUtil.isEmpty(reals)){
} return;
/**
* 获取实时数据
* @return
*/
private Map<String, String> getRealMap() {
String json = (String) redisTemplate.opsForValue().get(real_id_key);
if(StringUtil.isBlank(json)){
return null;
} }
return JSONObject.parseObject(json, new TypeReference<Map<String, String>>() {}); redisTemplate.opsForValue().set(load_hydropower_unit_real_key,reals);
} }
/** /**
@ -144,59 +139,98 @@ public class HydropowerServiceImpl implements HydropowerService {
*/ */
@Override @Override
public void loadHydropowerTarget(String param) { public void loadHydropowerTarget(String param) {
// 有效设备 // 水电站站点
List<EminfoAndEmParamVo> valid = this.getValidDeviceList(); List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery()
if(CollectionUtil.isEmpty(valid)){ .eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE)
.eq(StationEntity::getType,HomePageConstant.HYDROPOWER)
);
if(CollectionUtil.isEmpty(stations)){
return;
}
// 补充填补发电指标
List<HydropowerUnitTargetVo> targets = this.generteFill(stations);
// 水电站设备
List<EminfoAndEmParamVo> devices = this.pumpDevices(stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList()));
if(CollectionUtil.isNotEmpty(devices)){
targets.addAll(devices.stream().map(device->{
HydropowerUnitTargetVo target = new HydropowerUnitTargetVo();
target.setDeptId(device.getCreateDept());
target.setDeviceCode(device.getEmCode());
target.setDeviceName(device.getName());
target.setDeptName(device.getName());
// 当年发电量
target.setPowerYear(this.getGenerationPower(device,0));
// 当月发电量
target.setPowerMon(this.getGenerationPower(device,1));
// 当日发电量
target.setPowerDay(this.getGenerationPower(device,2));
// 当天有功功率
target.setActivePowerVoList(waterService.getActivePowerVoList(device));
// 30天发电量
target.setGenerationPowerVoList(this.getGenerationPowerList(device));
return target;
}).collect(Collectors.toList()));
}
// 站点指标数据为空
if(CollectionUtil.isEmpty(targets)){
return; return;
} }
List<HydropowerUnitTargetVo> list = new ArrayList<>(); redisTemplate.opsForValue().set(load_hydropower_unit_target_key,targets);
valid.forEach(device->{ }
HydropowerUnitTargetVo targetVo = new HydropowerUnitTargetVo();
targetVo.setDeptId(device.getCreateDept()); /**
targetVo.setDeviceCode(device.getEmCode()); * 获取填报用电量
targetVo.setDeviceName(device.getName()); * @param stations
targetVo.setDeptName(device.getName()); * @return
*/
private List<HydropowerUnitTargetVo> generteFill(List<StationEntity> stations) {
Calendar calendar = Calendar.getInstance();
String day = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE);
String mon = DateUtil.format(calendar.getTime(),"yyyy-MM");
String year = String.valueOf(calendar.get(Calendar.YEAR));
return stations.stream().map(station ->{
HydropowerUnitTargetVo target = new HydropowerUnitTargetVo();
target.setDeptId(station.getRefDept());
target.setDeptName(station.getName());
// 当年发电量 // 当年发电量
float powerYear = this.getGenerationPower(device,0); target.setPowerYear(generateService.generate(year,station.getCode()));
targetVo.setPowerYear(powerYear);
// 当月发电量 // 当月发电量
float powerMon = this.getGenerationPower(device,1); target.setPowerMon(generateService.generate(mon,station.getCode()));
targetVo.setPowerMon(powerMon);
// 当日发电量 // 当日发电量
float powerDay = this.getGenerationPower(device,2); target.setPowerDay(generateService.generate(day,station.getCode()));
// 当天有功功率
List<ActivePowerVo> activePowerVoList = waterService.getActivePowerVoList(device);
targetVo.setActivePowerVoList(activePowerVoList);
// 30天发电量 // 30天发电量
List<GenerationPowerVo> generationPowerVoList = this.getGenerationPowerList(device); target.setGenerationPowerVoList(generateService.generate30Day(day,station.getCode()));
targetVo.setGenerationPowerVoList(generationPowerVoList); return target;
targetVo.setPowerDay(powerDay); }).collect(Collectors.toList());
list.add(targetVo);
});
redisTemplate.opsForValue().set(load_hydropower_unit_target_key,list);
} }
/** /**
* 获取有效设备 * 泵站设备
* @param stations
* @return * @return
*/ */
private List<EminfoAndEmParamVo> getValidDeviceList() { private List<EminfoAndEmParamVo> pumpDevices(List<Long> stations){
// 水利站点(All) if(CollectionUtil.isEmpty(stations)){
List<StationEntity> stationList = stationService.getStationType(HomePageConstant.HYDROPOWER_SERVETYPE, Collections.singletonList(HomePageConstant.HYDROPOWER), null); return new ArrayList<>();
if(CollectionUtil.isEmpty(stationList)){
return null;
} }
// 获取所有设备 List<EminfoAndEmParamVo> devices = maintenanceTaskService.getEmInfoList();
List<EminfoAndEmParamVo> deviceList = maintenanceTaskService.getEmInfoList(); if(CollectionUtil.isEmpty(devices)){
if(CollectionUtil.isEmpty(deviceList)){ return new ArrayList<>();
return null;
} }
// 有效泵租设备 return devices.stream().filter(device->stations.contains(device.getCreateDept())).collect(Collectors.toList());
List<Long> deptIdList = stationList.stream().map(StationEntity::getRefDept).collect(Collectors.toList()); }
if(CollectionUtil.isEmpty(deptIdList)){
/**
* 获取实时数据
* @return
*/
private Map<String, String> getRealMap() {
String json = (String) redisTemplate.opsForValue().get(real_id_key);
if(StringUtil.isBlank(json)){
return null; return null;
} }
return deviceList.stream().filter(o->deptIdList.contains(o.getCreateDept())).collect(Collectors.toList()); return JSONObject.parseObject(json, new TypeReference<Map<String, String>>() {});
} }
@ -334,7 +368,7 @@ public class HydropowerServiceImpl implements HydropowerService {
* @return * @return
*/ */
@Override @Override
public HydropowerStationVo webStation(Long deptId) { public HydropowerStationVo station(Long deptId) {
if(ObjectUtil.isEmpty(deptId)){ if(ObjectUtil.isEmpty(deptId)){
return null; return null;
} }
@ -343,86 +377,76 @@ public class HydropowerServiceImpl implements HydropowerService {
if(ObjectUtil.isEmpty(station)){ if(ObjectUtil.isEmpty(station)){
return null; return null;
} }
List<HydropowerStationVo> list = this.getHydropowerStationList(Collections.singletonList(station)); // 实时监测点数据
if(CollectionUtil.isEmpty(list)){ List<HydropowerUnitRealVo> realList = (List<HydropowerUnitRealVo>) redisTemplate.opsForValue().get(load_hydropower_unit_real_key);
return null; // 获取站点机组指标数据
} List<HydropowerUnitTargetVo> targetList = (List<HydropowerUnitTargetVo>) redisTemplate.opsForValue().get(load_hydropower_unit_target_key);
return list.get(0); // 所有设备
List<EminfoAndEmParamVo> deviceList = maintenanceTaskService.getEmInfoList();
// 实时天气
Map<String, HeWeatherWeatherNowResponse> weather = this.getWeather(Collections.singletonList(station.getCode()));
// 七天天气
Map<String, HeWeatherWeatherDailyResponse> weekWeather = this.getWeekWeather(Collections.singletonList(station.getCode()));
HydropowerStationVo response = new HydropowerStationVo();
response.setDeptId(station.getRefDept());
response.setDeptName(station.getName());
response.setStationCode(station.getCode());
// 站点状态
List<SoeData> soeDataList = soeClient.getByLastLimitTime(null, station.getCode(), 1).getData();
response.setStationStatus(!CollectionUtil.isNotEmpty(soeDataList));
// 站点实时天气
response.setTemp(this.getTemp(weather,station.getCode()));
// 站点七天天气
response.setWeather(this.getDailyList(weekWeather,station.getCode()));
// 限制水位
response.setLimitWaterLevel(station.getLimitWaterLevel());
// 运行天数
response.setRunDay(this.getRunDay(station));
// 装机容量
response.setInstalledCapacity(this.getInstalledCapacity(deviceList,station.getRefDept()));
// 总有功功率(总发电负荷)
response.setPowerSum(this.getPowerSum(realList,station.getRefDept()));
// 总有功单位
response.setPowerUnit(this.getPowerUnit(realList,station.getRefDept()));
// 月计划发电量
response.setPlanPowerMon(this.getPlanPowerrMon(station.getCode()));
// 年计划发电量
response.setPlanPowerYear(this.getPlanPowerYear(station.getCode()));
// 月发电量、年发电量、年发电完成率
this.handleStationInfo(station.getRefDept(),response);
// 水位、水位曲线
this.handleWaterLeve(station.getCode(),response);
// 年发电量完成百分比
response.setPowerYearMap(this.handlePowerFinish(station));
// 设备信息
response.setDeviceList(this.getDevices(station,realList,targetList));
return response;
} }
/** /**
* 获取首页站点信息 * 水电站-机组列表
* @param list * @param deptId
* @return * @return
*/ */
private List<HydropowerStationVo> getHydropowerStationList(List<StationEntity> list) { @Override
if(CollectionUtil.isEmpty(list)){ public List<HydropowerUnitVo> hydropowerDevice(Long deptId) {
if(ObjectUtil.isEmpty(deptId)){
return null;
}
// 查询站点
StationEntity station = stationService.getStationByCodeOrRefDept(null,deptId);
if(ObjectUtil.isEmpty(station)){
return null; return null;
} }
// 实时监测点数据 // 实时监测点数据
List<HydropowerUnitRealVo> realList = (List<HydropowerUnitRealVo>) redisTemplate.opsForValue().get(load_hydropower_unit_real_key); List<HydropowerUnitRealVo> realList = (List<HydropowerUnitRealVo>) redisTemplate.opsForValue().get(load_hydropower_unit_real_key);
// 获取站点机组指标数据 // 获取站点机组指标数据
List<HydropowerUnitTargetVo> targetList = (List<HydropowerUnitTargetVo>) redisTemplate.opsForValue().get(load_hydropower_unit_target_key); List<HydropowerUnitTargetVo> targetList = (List<HydropowerUnitTargetVo>) redisTemplate.opsForValue().get(load_hydropower_unit_target_key);
// 所有设备 return this.getDevices(station,realList,targetList);
List<EminfoAndEmParamVo> deviceList = maintenanceTaskService.getEmInfoList();
// 实时天气
Map<String, HeWeatherWeatherNowResponse> weather = this.getWeather(list.stream().map(StationEntity::getCode).collect(Collectors.toList()));
// 七天天气
Map<String, HeWeatherWeatherDailyResponse> weekWeather = this.getWeekWeather(list.stream().map(StationEntity::getCode).collect(Collectors.toList()));
List<HydropowerStationVo> result = new ArrayList<>();
list.forEach(station ->{
HydropowerStationVo response = new HydropowerStationVo();
response.setDeptId(station.getRefDept());
response.setDeptName(station.getName());
response.setStationCode(station.getCode());
// 站点状态
List<SoeData> soeDataList = soeClient.getByLastLimitTime(null, station.getCode(), 1).getData();
if (CollectionUtil.isNotEmpty(soeDataList)) {
response.setStationStatus(false);
} else {
response.setStationStatus(true);
}
// 站点实时天气
String temp = this.getTemp(weather,station.getCode());
response.setTemp(temp);
// 站点七天天气
List<Daily> dailys = this.getDailyList(weekWeather,station.getCode());
response.setWeather(dailys);
// 限制水位
response.setLimitWaterLevel(station.getLimitWaterLevel());
// 运行天数
int runDay = this.getRunDay(station);
response.setRunDay(runDay);
// 装机容量
double installedCapacity = this.getInstalledCapacity(deviceList,station.getRefDept());
response.setInstalledCapacity(installedCapacity);
// 总有功功率(总发电负荷)
double powerSum = this.getPowerSum(realList,station.getRefDept());
response.setPowerSum(powerSum);
// 总有功单位
String unit = this.getPowerUnit(realList,station.getRefDept());
response.setPowerUnit(unit);
// 月计划发电量
float planPowerMon = this.getPlanPowerrMon(station.getCode());
response.setPlanPowerMon(planPowerMon);
// 年计划发电量
float planPowerYear = this.getPlanPowerYear(station.getCode());
response.setPlanPowerYear(planPowerYear);
// 月发电量、年发电量、年发电完成率
this.handleStationInfo(station.getRefDept(),response);
// 水位、水位曲线
this.handleWaterLeve(station.getCode(),response);
// 年发电量完成百分比
List<PowerMonthVo> powerYearList = this.handlePowerFinish(station);
response.setPowerYearMap(powerYearList);
// 设备信息
List<HydropowerUnitVo> devices = this.getDevices(station,realList,targetList);
response.setDeviceList(devices);
result.add(response);
});
return result;
} }
/** /**
* 获取站点设备信息 * 获取站点设备信息
* @param station * @param station
@ -705,39 +729,63 @@ public class HydropowerServiceImpl implements HydropowerService {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
/** /**
* 水电站-机组列表 * 水电站站点列表
* @param deptId * @param deptId
* @return * @return
*/ */
@Override @Override
public List<HydropowerUnitVo> hydropowerDevice(Long deptId) { public List<HydropowerStationVo> webStationList(Long deptId) {
if(ObjectUtil.isEmpty(deptId)){ List<StationEntity> stations = stationService.getStationType(HomePageConstant.HYDROPOWER_SERVETYPE,Collections.singletonList(HomePageConstant.HYDROPOWER),null);
return null; if(CollectionUtil.isEmpty(stations)){
}
// 查询站点
StationEntity station = stationService.getStationByCodeOrRefDept(null,deptId);
if(ObjectUtil.isEmpty(station)){
return null; return null;
} }
// 实时监测点数据 // 实时监测点数据
List<HydropowerUnitRealVo> realList = (List<HydropowerUnitRealVo>) redisTemplate.opsForValue().get(load_hydropower_unit_real_key); List<HydropowerUnitRealVo> realList = (List<HydropowerUnitRealVo>) redisTemplate.opsForValue().get(load_hydropower_unit_real_key);
// 获取站点机组指标数据 // 获取站点机组指标数据
List<HydropowerUnitTargetVo> targetList = (List<HydropowerUnitTargetVo>) redisTemplate.opsForValue().get(load_hydropower_unit_target_key); List<HydropowerUnitTargetVo> targetList = (List<HydropowerUnitTargetVo>) redisTemplate.opsForValue().get(load_hydropower_unit_target_key);
return this.getDevices(station,realList,targetList); // 所有设备
} List<EminfoAndEmParamVo> deviceList = maintenanceTaskService.getEmInfoList();
// 实时天气
/** Map<String, HeWeatherWeatherNowResponse> weather = this.getWeather(stations.stream().map(StationEntity::getCode).collect(Collectors.toList()));
* 水电站站点列表 // 七天天气
* @param deptId Map<String, HeWeatherWeatherDailyResponse> weekWeather = this.getWeekWeather(stations.stream().map(StationEntity::getCode).collect(Collectors.toList()));
* @return return stations.stream().map(station->{
*/ HydropowerStationVo hydropower = new HydropowerStationVo();
@Override hydropower.setDeptId(station.getRefDept());
public List<HydropowerStationVo> webStationList(Long deptId) { hydropower.setDeptName(station.getName());
List<StationEntity> list = stationService.getStationType(null,Collections.singletonList(HomePageConstant.HYDROPOWER),null); hydropower.setStationCode(station.getCode());
if(CollectionUtil.isEmpty(list)){ // 站点状态
return null; List<SoeData> soeDataList = soeClient.getByLastLimitTime(null, station.getCode(), 1).getData();
} hydropower.setStationStatus(!CollectionUtil.isNotEmpty(soeDataList));
return this.getHydropowerStationList(list); // 站点实时天气
hydropower.setTemp(this.getTemp(weather,station.getCode()));
// 站点七天天气
hydropower.setWeather(this.getDailyList(weekWeather,station.getCode()));
// 限制水位
hydropower.setLimitWaterLevel(station.getLimitWaterLevel());
// 运行天数
hydropower.setRunDay(this.getRunDay(station));
// 装机容量
hydropower.setInstalledCapacity(this.getInstalledCapacity(deviceList,station.getRefDept()));
// 总有功功率(总发电负荷)
hydropower.setPowerSum(this.getPowerSum(realList,station.getRefDept()));
// 总有功单位
hydropower.setPowerUnit(this.getPowerUnit(realList,station.getRefDept()));
// 月计划发电量
hydropower.setPlanPowerMon(this.getPlanPowerrMon(station.getCode()));
// 年计划发电量
hydropower.setPlanPowerYear(this.getPlanPowerYear(station.getCode()));
// 月发电量、年发电量、年发电完成率
this.handleStationInfo(station.getRefDept(),hydropower);
// 水位、水位曲线
this.handleWaterLeve(station.getCode(),hydropower);
// 年发电量完成百分比
hydropower.setPowerYearMap(this.handlePowerFinish(station));
// 设备信息
hydropower.setDeviceList(this.getDevices(station,realList,targetList));
return hydropower;
}).collect(Collectors.toList());
} }
} }

72
hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/SideHustleServiceImpl.java

@ -23,9 +23,9 @@ import com.hnac.hzims.operational.duty.service.IImsDutyMainService;
import com.hnac.hzims.operational.duty.vo.DutyInfoVo; import com.hnac.hzims.operational.duty.vo.DutyInfoVo;
import com.hnac.hzims.operational.duty.vo.DutyTaskVo; import com.hnac.hzims.operational.duty.vo.DutyTaskVo;
import com.hnac.hzims.operational.duty.vo.NextDutyInfoVo; import com.hnac.hzims.operational.duty.vo.NextDutyInfoVo;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.main.service.*; import com.hnac.hzims.operational.main.service.*;
import com.hnac.hzims.operational.main.vo.*; import com.hnac.hzims.operational.main.vo.*;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.maintenance.constants.MaintenanceConstant; import com.hnac.hzims.operational.maintenance.constants.MaintenanceConstant;
import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity; import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity;
import com.hnac.hzims.operational.maintenance.service.IOperMaintenanceTaskService; import com.hnac.hzims.operational.maintenance.service.IOperMaintenanceTaskService;
@ -66,6 +66,9 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* @author ysj
*/
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
@ -308,13 +311,6 @@ public class SideHustleServiceImpl implements ISideHustleService {
}}); }});
List<String> faultList = operPhenomenonEntityList.stream().map(OperPhenomenonEntity::getEmCode).distinct().collect(Collectors.toList()); List<String> faultList = operPhenomenonEntityList.stream().map(OperPhenomenonEntity::getEmCode).distinct().collect(Collectors.toList());
deviceClassifyMap.put(HomePageConstant.FAULT,faultList); deviceClassifyMap.put(HomePageConstant.FAULT,faultList);
// 保养
/*List<OperMaintenanceTaskEntity> operMaintenanceTaskEntityList = operMaintenanceTaskService.list(new QueryWrapper<OperMaintenanceTaskEntity>() {{
in("EM_CODE", deviceCodeList);
ne("STATUS", MaintenanceConstant.TASK_STATUS_5);
}});
List<String> maintainList = operMaintenanceTaskEntityList.stream().map(OperMaintenanceTaskEntity::getEmCode).collect(Collectors.toList());
deviceClassifyMap.put(HomePageConstant.MAINTAIN,maintainList);*/
// 检修 // 检修
List<OperAccessTaskEntity> operAccessTaskEntityList = operAccessTaskService.list(new QueryWrapper<OperAccessTaskEntity>() {{ List<OperAccessTaskEntity> operAccessTaskEntityList = operAccessTaskService.list(new QueryWrapper<OperAccessTaskEntity>() {{
in("EM_CODE", deviceCodeList); in("EM_CODE", deviceCodeList);
@ -506,11 +502,11 @@ public class SideHustleServiceImpl implements ISideHustleService {
areaDutyVo.setGeneratingCapacity(generatingCapacity); areaDutyVo.setGeneratingCapacity(generatingCapacity);
} }
/** /***
* 根据当班时间查询发电量 * 根据当班时间查询发电量
* @param devices * @param devices
* @param startDate * @param start
* @param endDate * @param end
* @return * @return
*/ */
private float generateByDuty(List<EminfoAndEmParamVo> devices, Date start, Date end) { private float generateByDuty(List<EminfoAndEmParamVo> devices, Date start, Date end) {
@ -520,7 +516,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
} }
for(EminfoAndEmParamVo device : devices ){ for(EminfoAndEmParamVo device : devices ){
generate += analyseDataService.periodTargetFloat(DateUtil.format(start,DateUtil.PATTERN_DATETIME),DateUtil.format(end,DateUtil.PATTERN_DATETIME),3,5,device.getEmCode(),device.getRideCount(),HomePageConstant.HYDROPOWER_GENERATE_POWER); generate += analyseDataService.periodTargetFloat(DateUtil.format(start,DateUtil.PATTERN_DATETIME),DateUtil.format(end,DateUtil.PATTERN_DATETIME),3,5,device.getEmCode(),device.getRideCount(),HomePageConstant.HYDROPOWER_GENERATE_POWER);
}; }
return generate; return generate;
} }
@ -585,7 +581,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
dateCal.set(Calendar.MINUTE, timeCal.get(Calendar.MINUTE)); dateCal.set(Calendar.MINUTE, timeCal.get(Calendar.MINUTE));
dateCal.set(Calendar.SECOND, timeCal.get(Calendar.SECOND)); dateCal.set(Calendar.SECOND, timeCal.get(Calendar.SECOND));
return dateCal.getTime(); return dateCal.getTime();
}; }
/** /**
* 获取结束时间 * 获取结束时间
@ -608,7 +604,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
dateCal.set(Calendar.MINUTE, endCal.get(Calendar.MINUTE)); dateCal.set(Calendar.MINUTE, endCal.get(Calendar.MINUTE));
dateCal.set(Calendar.SECOND, endCal.get(Calendar.SECOND)); dateCal.set(Calendar.SECOND, endCal.get(Calendar.SECOND));
return dateCal.getTime(); return dateCal.getTime();
}; }
/** /**
* 当班运行数据 * 当班运行数据
@ -840,7 +836,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
return null; return null;
} }
Map<Long, Map<String, Float>> powerMap = (Map<Long, Map<String, Float>>) redisTemplate.opsForValue().get(RECENT_YEAR_POWER_DATA); Map<Long, Map<String, Float>> powerMap = (Map<Long, Map<String, Float>>) redisTemplate.opsForValue().get(RECENT_YEAR_POWER_DATA);
List<String> monList = homePageService.getMonthList(0,12,false);; List<String> monList = homePageService.getMonthList(0,12,false);
// 获取总发电量 // 获取总发电量
float sumPower = this.getSumPower(map.values(),powerMap,monList); float sumPower = this.getSumPower(map.values(),powerMap,monList);
List<AreaPowerScaleVo> list = new ArrayList<>(); List<AreaPowerScaleVo> list = new ArrayList<>();
@ -854,7 +850,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
} }
areaPowerScaleVo.setPower(power); areaPowerScaleVo.setPower(power);
// 发电量占比 // 发电量占比
double scale = this.getPowerScale(power,sumPower);; double scale = this.getPowerScale(power,sumPower);
areaPowerScaleVo.setScale(scale); areaPowerScaleVo.setScale(scale);
list.add(areaPowerScaleVo); list.add(areaPowerScaleVo);
}); });
@ -874,7 +870,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
return null; return null;
} }
// 获取站点编码集合 // 获取站点编码集合
List<String> codes = map.entrySet().stream().map(o-> o.getValue().get(0).getCode()).collect(Collectors.toList()); List<String> codes = map.values().stream().map(stationEntities -> stationEntities.get(0).getCode()).collect(Collectors.toList());
// 获取站点实时天气 // 获取站点实时天气
Map<String, HeWeatherWeatherNowResponse> nowWeather = this.weatherService.getNowWeather( codes); Map<String, HeWeatherWeatherNowResponse> nowWeather = this.weatherService.getNowWeather( codes);
// 获取站点7日天气 // 获取站点7日天气
@ -974,7 +970,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
* @return * @return
*/ */
private List<StationBodyVo> getStationData() { private List<StationBodyVo> getStationData() {
Map<String, StationBodyVo> map = new HashMap<>(); Map<String, StationBodyVo> map;
Object json = redisTemplate.opsForValue().get(station_data_key); Object json = redisTemplate.opsForValue().get(station_data_key);
if (ObjectUtil.isNotEmpty(json)) { if (ObjectUtil.isNotEmpty(json)) {
map = JSONObject.parseObject(json.toString(), new TypeReference<Map<String, StationBodyVo>>() { map = JSONObject.parseObject(json.toString(), new TypeReference<Map<String, StationBodyVo>>() {
@ -1166,9 +1162,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
} }
List<String> codeList = new ArrayList<>(); List<String> codeList = new ArrayList<>();
// 添加所有站点Code // 添加所有站点Code
map.values().forEach(item->{ map.values().forEach(item-> codeList.addAll(item.stream().map(StationEntity::getCode).collect(Collectors.toList())));
codeList.addAll(item.stream().map(StationEntity::getCode).collect(Collectors.toList()));
});
if(CollectionUtil.isEmpty(codeList)){ if(CollectionUtil.isEmpty(codeList)){
return null; return null;
} }
@ -1214,7 +1208,6 @@ public class SideHustleServiceImpl implements ISideHustleService {
return; return;
} }
// 存放设备信息集合 // 存放设备信息集合
List<DeviceVo> deviceVoList = new ArrayList<>();
List<String> equipmentCodeList = R.getData().stream().map(EmInfoEntity::getNumber).collect(Collectors.toList()); List<String> equipmentCodeList = R.getData().stream().map(EmInfoEntity::getNumber).collect(Collectors.toList());
// 总数 // 总数
@ -1224,7 +1217,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
// 故障 // 故障
List<DeviceVo> fault = this.handlerDeviceStatus(faultList,equipmentCodeList,"故障"); List<DeviceVo> fault = this.handlerDeviceStatus(faultList,equipmentCodeList,"故障");
equipmentCountVo.setFaultCount((long) fault.size()); equipmentCountVo.setFaultCount((long) fault.size());
deviceVoList.addAll(fault); List<DeviceVo> deviceVoList = new ArrayList<>(fault);
// 检修 // 检修
List<DeviceVo> overhaul = this.handlerDeviceStatus(overhaultList,equipmentCodeList,"检修"); List<DeviceVo> overhaul = this.handlerDeviceStatus(overhaultList,equipmentCodeList,"检修");
equipmentCountVo.setOverhaulCount((long) overhaul.size()); equipmentCountVo.setOverhaulCount((long) overhaul.size());
@ -1266,7 +1259,7 @@ public class SideHustleServiceImpl implements ISideHustleService {
if(CollectionUtil.isEmpty(statusList) || CollectionUtil.isEmpty(equipmentCodeList)){ if(CollectionUtil.isEmpty(statusList) || CollectionUtil.isEmpty(equipmentCodeList)){
return new ArrayList<>(); return new ArrayList<>();
} }
List<String> statusDevice = statusList.stream().filter(o->equipmentCodeList.contains(o)).distinct().collect(Collectors.toList()); List<String> statusDevice = statusList.stream().filter(equipmentCodeList::contains).distinct().collect(Collectors.toList());
if(CollectionUtil.isEmpty(statusDevice)){ if(CollectionUtil.isEmpty(statusDevice)){
return new ArrayList<>(); return new ArrayList<>();
} }
@ -1340,37 +1333,6 @@ public class SideHustleServiceImpl implements ISideHustleService {
} }
/** /**
* 递归查询子站点
*
* @param departList
* @param parentPart
* @param list
* @return
*/
private List<Dept> getAreaStation(List<Dept> departList, Dept parentPart, List<Dept> list) {
departList.forEach(dept -> {
if (dept.getParentId().equals(parentPart.getId())) {
// FIXME 是否只需要添加站点
if (dept.getDeptCategory().equals(4)) {
list.add(dept);
}
getAreaStation(departList, dept, list);
}
});
if(CollectionUtil.isEmpty(list)){
return null;
}
List<Long> deptList = list.stream().map(Dept::getId).collect(Collectors.toList());
List<StationEntity> stationList = this.getStation(Collections.singletonList(HomePageConstant.HYDROPOWER), deptList);
if(CollectionUtil.isEmpty(stationList)){
return null;
}
List<Long> refDeptList = stationList.stream().map(StationEntity::getRefDept).collect(Collectors.toList());
return list.stream().filter(o->refDeptList.contains(o.getId())).collect(Collectors.toList());
}
/**
* 区域机构下是否存在水电站 * 区域机构下是否存在水电站
* @param deptAuthList * @param deptAuthList
* @param area * @param area

182
hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WaterServiceImpl.java

@ -100,41 +100,42 @@ public class WaterServiceImpl implements IWaterService {
*/ */
@Override @Override
public void loadWaterPumpReal(String param) { public void loadWaterPumpReal(String param) {
// 有效设备 // 水利站点
List<EminfoAndEmParamVo> valid = this.getValidDeviceList(); List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery()
if(CollectionUtil.isEmpty(valid)){ .eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE)
.in(StationEntity::getType,HomePageConstant.waterList)
);
if(CollectionUtil.isEmpty(stations)){
return;
}
// 泵站设备
List<EminfoAndEmParamVo> devices = this.pumpDevices(stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList()));
if(CollectionUtil.isEmpty(devices)){
return; return;
} }
// 实时数据 // 实时数据
Map<String, String> map = this.getRealMap(); Map<String, String> map = this.getRealMap();
List<WaterPumpRealVo> list = new ArrayList<>(); List<WaterPumpRealVo> list = devices.stream().map(device->{
valid.forEach(device->{ WaterPumpRealVo real = new WaterPumpRealVo();
WaterPumpRealVo waterPumpRealVo = new WaterPumpRealVo(); real.setDeptId(device.getCreateDept());
waterPumpRealVo.setDeptId(device.getCreateDept()); real.setDeviceCode(device.getEmCode());
waterPumpRealVo.setDeviceCode(device.getEmCode()); real.setDeptName(device.getName());
waterPumpRealVo.setDeptName(device.getName());
// 装机容量 // 装机容量
waterPumpRealVo.setInstalledCapacity(device.getInstalledCapacity()); real.setInstalledCapacity(device.getInstalledCapacity());
// 开机状态 // 开机状态
int state = this.getPumpState(device,map); real.setState(this.getPumpState(device,map));
waterPumpRealVo.setState(state);
// 功率因数 // 功率因数
double powerFactor = this.getPowerFactor(device,map); real.setPowerFactor(this.getPowerFactor(device,map));
waterPumpRealVo.setPowerFactor(powerFactor);
// 有功功率 // 有功功率
float activePower = this.getActivePower(device,map); real.setActivePower(this.getActivePower(device,map));
waterPumpRealVo.setActivePower(activePower);
// 无功功率 // 无功功率
float reactivePower = this.getReactivePower(device,map); real.setReactivePower(this.getReactivePower(device,map));
waterPumpRealVo.setReactivePower(reactivePower);
// 电压 // 电压
double voltage = this.getVoltage(device,map); real.setVoltage(this.getVoltage(device,map));
waterPumpRealVo.setVoltage(voltage);
// 电流 // 电流
double current = this.getCurrent(device,map); real.setCurrent(this.getCurrent(device,map));
waterPumpRealVo.setCurrent(current); return real;
list.add(waterPumpRealVo); }).collect(Collectors.toList());
});
redisTemplate.opsForValue().set(loadwaterpump_real_key,list); redisTemplate.opsForValue().set(loadwaterpump_real_key,list);
} }
@ -144,50 +145,47 @@ public class WaterServiceImpl implements IWaterService {
*/ */
@Override @Override
public void loadWaterPumpTarget(String param) { public void loadWaterPumpTarget(String param) {
List<EminfoAndEmParamVo> valid = this.getValidDeviceList(); // 水利站点
List<WaterPumpTargetVo> list = new ArrayList<>(); List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery()
if(CollectionUtil.isNotEmpty(valid)){ .eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE)
valid.forEach(device->{ .in(StationEntity::getType,HomePageConstant.waterList)
WaterPumpTargetVo waterPumpTargetVo = new WaterPumpTargetVo(); );
waterPumpTargetVo.setDeptId(device.getCreateDept()); if(CollectionUtil.isEmpty(stations)){
waterPumpTargetVo.setDeviceCode(device.getEmCode()); return;
waterPumpTargetVo.setDeptName(device.getName()); }
// 泵站设备
List<EminfoAndEmParamVo> devices = this.pumpDevices(stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList()));
// 补充站点填报发电量
List<WaterPumpTargetVo> list = this.useFill(stations);
// 站点设备数据统计
if(CollectionUtil.isNotEmpty(devices)){
list.addAll(devices.stream().map(device->{
WaterPumpTargetVo target = new WaterPumpTargetVo();
target.setDeptId(device.getCreateDept());
target.setDeviceCode(device.getEmCode());
target.setDeptName(device.getName());
// 当年用电量 // 当年用电量
float usrPowerYear = this.getUsrPowerYear(device); target.setUsrPowerYear(this.getUsrPowerYear(device));
waterPumpTargetVo.setUsrPowerYear(usrPowerYear);
// 当月用电量 // 当月用电量
float usrPowerMon = this.getUsrPowerMon(device); target.setUsrPowerMon(this.getUsrPowerMon(device));
waterPumpTargetVo.setUsrPowerMon(usrPowerMon);
// 当日用电量 // 当日用电量
float usrPowerDay = this.getUsrPowerDay(device); target.setUsrPowerDay(this.getUsrPowerDay(device));
waterPumpTargetVo.setUsrPowerDay(usrPowerDay); // 当日机组有功功率
target.setActivePowerVoList(this.getActivePowerVoList(device));
// 近30天用电量
target.setUsrPowerVoList(this.getUsrPowerVoList(device));
// 近3年用电量
target.setUsrYearMap(this.getUsrYearMap(device));
// 月运行次数、时长 // 月运行次数、时长
WaterRunVo runMon = this.getRunData(device,1); WaterRunVo runMon = this.getRunData(device,1);
waterPumpTargetVo.setRunCountMon(runMon.getCount()); target.setRunCountMon(runMon.getCount());
waterPumpTargetVo.setRunDurationMon(runMon.getHour()); target.setRunDurationMon(runMon.getHour());
// 年运行次数、时长 // 年运行次数、时长
WaterRunVo runYear = this.getRunData(device,0); WaterRunVo runYear = this.getRunData(device,0);
waterPumpTargetVo.setRunCountYear(runYear.getCount()); target.setRunCountYear(runYear.getCount());
waterPumpTargetVo.setRunDurationYear(runYear.getHour()); target.setRunDurationYear(runYear.getHour());
// 当日机组有功功率 return target;
List<ActivePowerVo> activePowerVoList = this.getActivePowerVoList(device); }).collect(Collectors.toList()));
waterPumpTargetVo.setActivePowerVoList(activePowerVoList);
// 近30天用电量
List<UsrPowerVo> usrPowerVoList = this.getUsrPowerVoList(device);
waterPumpTargetVo.setUsrPowerVoList(usrPowerVoList);
// 近3年用电量
Map<String,Float> usrYearMap = this.getUsrYearMap(device);
waterPumpTargetVo.setUsrYearMap(usrYearMap);
list.add(waterPumpTargetVo);
});
}
// 补充站点填报发电量
List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery()
.in(StationEntity::getType, HomePageConstant.waterList)
.eq(StationEntity::getServeType, HomePageConstant.HYDROPOWER_SERVETYPE)
);
if(CollectionUtil.isNotEmpty(stations)){
list.addAll(this.useFill(stations));
} }
redisTemplate.opsForValue().set(loadwaterpump_target_key,list); redisTemplate.opsForValue().set(loadwaterpump_target_key,list);
} }
@ -234,22 +232,19 @@ public class WaterServiceImpl implements IWaterService {
} }
/** /**
* 获取监测点位是否配置 * 泵站设备
* @param instanceCode * @param stations
* @return * @return
*/ */
private boolean getSetting(String instanceCode) { private List<EminfoAndEmParamVo> pumpDevices(List<Long> stations){
// 获取设备监测点位:未配置监测点位不进行统计设备 if(CollectionUtil.isEmpty(stations)){
List<MultiAnalyzeCodePO> list = new ArrayList<>(); return new ArrayList<>();
MultiAnalyzeCodePO po = new MultiAnalyzeCodePO();
po.setDeviceCode(instanceCode);
po.setSignages(Collections.singletonList(HomePageConstant.FRONT_WATER_LEVEL));
list.add(po);
R<List<AnalyzeCodeBySignagesVO>> result = analyseDataSearchClient.getAnalyzeCodeBySignages(list);
if(!result.isSuccess() || CollectionUtil.isEmpty(result.getData())){
return true;
} }
return false; List<EminfoAndEmParamVo> devices = maintenanceTaskService.getEmInfoList();
if(CollectionUtil.isEmpty(devices)){
return new ArrayList<>();
}
return devices.stream().filter(device->stations.contains(device.getCreateDept())).collect(Collectors.toList());
} }
/** /**
@ -264,7 +259,7 @@ public class WaterServiceImpl implements IWaterService {
List<String> signages = Collections.singletonList(signage); List<String> signages = Collections.singletonList(signage);
realData.setSignages(signages); realData.setSignages(signages);
// 调用fegin接口查询实时数据 // 调用fegin接口查询实时数据
R<List<FieldsData>> R = null; R<List<FieldsData>> R;
try { try {
R = analyseDataSearchClient.getRealDataByAnalyzeCode(realData); R = analyseDataSearchClient.getRealDataByAnalyzeCode(realData);
} catch (Exception e) { } catch (Exception e) {
@ -333,29 +328,6 @@ public class WaterServiceImpl implements IWaterService {
} }
/** /**
* 获取有效设备
* @return
*/
private List<EminfoAndEmParamVo> getValidDeviceList() {
// 水利站点(All)
List<StationEntity> stationList = stationService.getStationType(HomePageConstant.HYDROPOWER_SERVETYPE, HomePageConstant.waterList, null);
if(CollectionUtil.isEmpty(stationList)){
return null;
}
// 获取所有设备
List<EminfoAndEmParamVo> deviceList = maintenanceTaskService.getEmInfoList();
if(CollectionUtil.isEmpty(deviceList)){
return null;
}
// 有效泵租设备
List<Long> deptIdList = stationList.stream().map(StationEntity::getRefDept).collect(Collectors.toList());
if(CollectionUtil.isEmpty(deptIdList)){
return null;
}
return deviceList.stream().filter(o->deptIdList.contains(o.getCreateDept())).collect(Collectors.toList());
}
/**
* 获取有效站点模型 * 获取有效站点模型
* @return * @return
*/ */
@ -793,7 +765,7 @@ public class WaterServiceImpl implements IWaterService {
PowerMonthVo generate = new PowerMonthVo(); PowerMonthVo generate = new PowerMonthVo();
Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss.s"); Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss.s");
generate.setStrMonth(DateUtil.format(time, DateUtil.PATTERN_DATE)); generate.setStrMonth(DateUtil.format(time, DateUtil.PATTERN_DATE));
generate.setPower(Float.valueOf(Optional.ofNullable(record.getVal()).orElse("0")) * device.getRideCount()); generate.setPower(Float.parseFloat(Optional.ofNullable(record.getVal()).orElse("0")) * device.getRideCount());
return generate; return generate;
}).collect(Collectors.toMap(PowerMonthVo::getStrMonth,PowerMonthVo::getPower)); }).collect(Collectors.toMap(PowerMonthVo::getStrMonth,PowerMonthVo::getPower));
} }
@ -809,8 +781,6 @@ public class WaterServiceImpl implements IWaterService {
String day = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); String day = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE);
String mon = DateUtil.format(calendar.getTime(),"yyyy-MM"); String mon = DateUtil.format(calendar.getTime(),"yyyy-MM");
String year = String.valueOf(calendar.get(Calendar.YEAR)); String year = String.valueOf(calendar.get(Calendar.YEAR));
//calendar.add(Calendar.DAY_OF_MONTH,-1);
//String yesterday = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE);
return stations.stream().map(station ->{ return stations.stream().map(station ->{
WaterPumpTargetVo target = new WaterPumpTargetVo(); WaterPumpTargetVo target = new WaterPumpTargetVo();
target.setDeptId(station.getRefDept()); target.setDeptId(station.getRefDept());
@ -929,7 +899,7 @@ public class WaterServiceImpl implements IWaterService {
return null; return null;
} }
// 获取站点编码集合 // 获取站点编码集合
List<String> codes = map.entrySet().stream().map(o-> o.getValue().get(0).getCode()).collect(Collectors.toList()); List<String> codes = map.values().stream().map(stationEntities -> stationEntities.get(0).getCode()).collect(Collectors.toList());
// 获取实时天气 // 获取实时天气
Map<String, HeWeatherWeatherNowResponse> nowWeather = this.weatherService.getNowWeather(codes); Map<String, HeWeatherWeatherNowResponse> nowWeather = this.weatherService.getNowWeather(codes);
// 获取七天天气 // 获取七天天气
@ -1018,7 +988,7 @@ public class WaterServiceImpl implements IWaterService {
* @return * @return
*/ */
private List<StationEntity> getStationList(Map<Dept, List<StationEntity>> map) { private List<StationEntity> getStationList(Map<Dept, List<StationEntity>> map) {
return map.values().stream().collect(Collectors.toList()).get(0); return new ArrayList<>(map.values()).get(0);
} }
/** /**
@ -1102,7 +1072,7 @@ public class WaterServiceImpl implements IWaterService {
if(CollectionUtil.isEmpty(stationList)){ if(CollectionUtil.isEmpty(stationList)){
return null; return null;
} }
List<String> codeList = stationList.stream().filter(o->StringUtil.isNotBlank(o.getCode())).map(StationEntity::getCode).collect(Collectors.toList()); List<String> codeList = stationList.stream().map(StationEntity::getCode).filter(StringUtil::isNotBlank).collect(Collectors.toList());
if(CollectionUtil.isEmpty(codeList)){ if(CollectionUtil.isEmpty(codeList)){
return null; return null;
} }
@ -1331,12 +1301,12 @@ public class WaterServiceImpl implements IWaterService {
response.setUsePowerMon((float) kwhMon); response.setUsePowerMon((float) kwhMon);
// 月运行时长 // 月运行时长
Optional<WaterPumpTargetVo> waterPumpTargetVoOptional = validTaget.stream().max(Comparator.comparing(WaterPumpTargetVo::getRunDurationMon)); Optional<WaterPumpTargetVo> waterPumpTargetVoOptional = validTaget.stream().max(Comparator.comparing(WaterPumpTargetVo::getRunDurationMon));
double monRunTime = waterPumpTargetVoOptional.isPresent() ? waterPumpTargetVoOptional.map(WaterPumpTargetVo::getRunDurationMon).orElse(0.0) : 0.0; double monRunTime = waterPumpTargetVoOptional.map(WaterPumpTargetVo::getRunDurationMon).orElse(0.0);
//double monRunTime = validTaget.stream().max(Comparator.comparing(WaterPumpTargetVo::getRunDurationMon)).get().getRunDurationMon(); //double monRunTime = validTaget.stream().max(Comparator.comparing(WaterPumpTargetVo::getRunDurationMon)).get().getRunDurationMon();
response.setRunDurationMon(monRunTime); response.setRunDurationMon(monRunTime);
// 年运行时长 // 年运行时长
Optional<WaterPumpTargetVo> optionalWaterPumpTargetVo = validTaget.stream().max(Comparator.comparing(WaterPumpTargetVo::getRunDurationYear)); Optional<WaterPumpTargetVo> optionalWaterPumpTargetVo = validTaget.stream().max(Comparator.comparing(WaterPumpTargetVo::getRunDurationYear));
double yearRunTime = optionalWaterPumpTargetVo.isPresent() ? optionalWaterPumpTargetVo.map(WaterPumpTargetVo::getRunDurationYear).orElse(0.0) : 0.0; double yearRunTime = optionalWaterPumpTargetVo.map(WaterPumpTargetVo::getRunDurationYear).orElse(0.0);
//double yearRunTime = validTaget.stream().max(Comparator.comparing(WaterPumpTargetVo::getRunDurationYear)).get().getRunDurationYear(); //double yearRunTime = validTaget.stream().max(Comparator.comparing(WaterPumpTargetVo::getRunDurationYear)).get().getRunDurationYear();
response.setRunDurationYear(yearRunTime); response.setRunDurationYear(yearRunTime);
// 水位曲线/年用电量 // 水位曲线/年用电量

165
hzims-service/operational/src/main/java/com/hnac/hzims/operational/station/service/impl/RealMonitorServiceImpl.java

@ -50,8 +50,6 @@ import org.springframework.web.socket.TextMessage;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -163,45 +161,43 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
} }
// 数据切割 // 数据切割
int limit = countStep(stationRealVos.size()); int limit = countStep(stationRealVos.size());
List<List<StationRealVo>> list = Stream.iterate(0, n -> n + 1).limit(limit).parallel().map(a -> stationRealVos.stream().skip(a * MAX_SEND).limit(MAX_SEND).parallel().collect(Collectors.toList())).collect(Collectors.toList()); List<List<StationRealVo>> list = Stream.iterate(0, n -> n + 1).limit(limit).parallel().map(a -> stationRealVos.stream().skip((long) a * MAX_SEND).limit(MAX_SEND).parallel().collect(Collectors.toList())).collect(Collectors.toList());
ExecutorService pool = Executors.newFixedThreadPool(limit); ExecutorService pool = Executors.newFixedThreadPool(limit);
// <real,value> // <real,value>
Map<String,String> valueMap = new ConcurrentHashMap<>(); Map<String,String> valueMap = new ConcurrentHashMap<>();
// <real,<attribute,value>> // <real,<attribute,value>>
Map<String,Map<String,String>> keyMap = new ConcurrentHashMap<>(); Map<String,Map<String,String>> keyMap = new ConcurrentHashMap<>();
CountDownLatch countDownLatch = new CountDownLatch(limit); CountDownLatch countDownLatch = new CountDownLatch(limit);
pool.execute(()->{ pool.execute(()-> list.forEach(stations -> {
list.forEach(stations -> { stations.forEach(stationReal -> {
stations.forEach(stationReal -> { String[] realIdArr = stationReal.getRealId();
String[] realIdArr = stationReal.getRealId(); List<String> realIds = Stream.of(realIdArr).collect(Collectors.toList());
List<String> realIds = Stream.of(realIdArr).collect(Collectors.toList()); if(CollectionUtil.isEmpty(realIds)){
if(CollectionUtil.isEmpty(realIds)){ return;
return; }
} List<String> objects = redisClient.getBatchRealDataByRealId(stationReal.getStation(),realIds);
List<String> objects = redisClient.getBatchRealDataByRealId(stationReal.getStation(),realIds); if(CollectionUtil.isEmpty(objects)){
if(CollectionUtil.isEmpty(objects)){ return;
return; }
} for(int i = 0; i < objects.size() ;i++){
for(int i = 0; i < objects.size() ;i++){ if(ObjectUtil.isEmpty(objects.get(i))){
if(ObjectUtil.isEmpty(objects.get(i))){ log.error(realIds.get(i) + "is null");
log.error(realIds.get(i) + "is null"); continue;
continue;
}
Map<String,String> attribute = (Map<String, String>) JSONObject.parse(objects.get(i));
attribute.put("realId",attribute.get("k"));
attribute.put("value",attribute.get("v"));
attribute.put("time",attribute.get("t"));
attribute.remove("v");
attribute.remove("k");
attribute.remove("t");
this.getCheckMap(attribute,switchOnOff);
valueMap.put(realIdArr[i],attribute.get("value"));
keyMap.put(realIdArr[i],attribute);
} }
}); Map<String,String> attribute = (Map<String, String>) JSONObject.parse(objects.get(i));
countDownLatch.countDown(); attribute.put("realId",attribute.get("k"));
attribute.put("value",attribute.get("v"));
attribute.put("time",attribute.get("t"));
attribute.remove("v");
attribute.remove("k");
attribute.remove("t");
this.getCheckMap(attribute,switchOnOff);
valueMap.put(realIdArr[i],attribute.get("value"));
keyMap.put(realIdArr[i],attribute);
}
}); });
}); countDownLatch.countDown();
}));
// 等待所有线程执行完成 // 等待所有线程执行完成
try { try {
countDownLatch.await(); countDownLatch.await();
@ -224,24 +220,19 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
* @return * @return
*/ */
private void getCheckMap(Map<String, String> value,List<String> switchOnOff){ private void getCheckMap(Map<String, String> value,List<String> switchOnOff){
try{ // 不处理开机状态监测点
// 不处理开机状态监测点 if(switchOnOff.contains(value.get("realId"))){
if(switchOnOff.contains(value.get("realId"))){
return;
}
String time = value.get("time");
if(StringUtil.isEmpty(time)){
return;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.PATTERN_DATETIME);
Date date = simpleDateFormat.parse(time);
// 实时数据超出10分钟未刷新,值置为 0 显示
if(System.currentTimeMillis() - date.getTime() > 10 * 60 * 1000L){
value.put("value","0");
}
}catch (ParseException e){
return; return;
} }
String time = value.get("time");
if(StringUtil.isEmpty(time)){
return;
}
Date date = DateUtil.parse(time,DateUtil.PATTERN_DATETIME);
// 实时数据超出10分钟未刷新,值置为 0 显示
if(System.currentTimeMillis() - date.getTime() > 10 * 60 * 1000L){
value.put("value","0");
}
} }
/** /**
@ -285,45 +276,23 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
// key->机构编号 value -> 设备集合 // key->机构编号 value -> 设备集合
Map<Long,List<EminfoAndEmParamVo>> deviceMap = devices.stream().collect(Collectors.groupingBy(EminfoAndEmParamVo::getCreateDept)); Map<Long,List<EminfoAndEmParamVo>> deviceMap = devices.stream().collect(Collectors.groupingBy(EminfoAndEmParamVo::getCreateDept));
Map<Long, JointRelayVo> data = new HashMap<>(); Map<Long, JointRelayVo> data = new HashMap<>();
deviceMap.entrySet().forEach(entry -> { deviceMap.forEach((key, value) -> {
JointRelayVo value = new JointRelayVo(); JointRelayVo jointRelay = new JointRelayVo();
List<String> relays = entry.getValue().stream().filter(o-> MapUtils.isNotEmpty(o.getPoint()) && !StringUtil.isEmpty(o.getPoint().get(HomePageConstant.JOINT_RELAY))).map(relay-> map.get(relay.getPoint().get(HomePageConstant.JOINT_RELAY))).collect(Collectors.toList()); List<String> relays = value.stream().filter(o -> MapUtils.isNotEmpty(o.getPoint()) && !StringUtil.isEmpty(o.getPoint().get(HomePageConstant.JOINT_RELAY))).map(relay -> map.get(relay.getPoint().get(HomePageConstant.JOINT_RELAY))).collect(Collectors.toList());
if(CollectionUtil.isEmpty(relays)){ if (CollectionUtil.isEmpty(relays)) {
value.setUnitSum(0); jointRelay.setUnitSum(0);
value.setShutdownCount(0); jointRelay.setShutdownCount(0);
value.setStartingUpCount(0); jointRelay.setStartingUpCount(0);
}else{ } else {
value.setUnitSum(relays.size()); jointRelay.setUnitSum(relays.size());
Optional<List<String>> off = Optional.ofNullable(relays.stream().filter(relay -> "0".equals(relay)).collect(Collectors.toList())); Optional<List<String>> off = Optional.ofNullable(relays.stream().filter("0"::equals).collect(Collectors.toList()));
value.setShutdownCount(off.map(o->o.size()).orElse(0)); jointRelay.setShutdownCount(off.map(List::size).orElse(0));
Optional<List<String>> on = Optional.ofNullable(relays.stream().filter(relay -> "1".equals(relay)).collect(Collectors.toList())); Optional<List<String>> on = Optional.ofNullable(relays.stream().filter("1"::equals).collect(Collectors.toList()));
value.setStartingUpCount(on.map(o->o.size()).orElse(0)); jointRelay.setStartingUpCount(on.map(List::size).orElse(0));
} }
data.put(entry.getKey(),value); data.put(key, jointRelay);
}); });
redisTemplate.opsForValue().set(joint_relay_key, data); redisTemplate.opsForValue().set(joint_relay_key, data);
/*List<AnalyzeCodeBySignagesVO> jointRelayInfo = alertService.getJointRelayInfo();
//根据站点统计开关机
Map<String, List<AnalyzeCodeBySignagesVO>> jointRelayMap = jointRelayInfo.stream().collect(Collectors.groupingBy(AnalyzeCodeBySignagesVO::getStation));
jointRelayMap.forEach((key, value) -> {
List<String> readIdList = value.stream().map(AnalyzeCodeBySignagesVO::getRealId).collect(Collectors.toList());
vo = new JointRelayVo();
readIdList.forEach(iter -> {
String jointRelay = map.get(iter);
if ("0".equals(jointRelay)) {//关机
vo.setShutdownCount(vo.getShutdownCount() + 1);
vo.setShutdownRealId(iter + "," + vo.getShutdownRealId());
vo.setUnitSum(vo.getUnitSum() + 1);
} else if ("1".equals(jointRelay)) {//开机
vo.setStartingUpCount(vo.getStartingUpCount() + 1);
vo.setStartingUpRealId(iter + "," + vo.getStartingUpRealId());
vo.setUnitSum(vo.getUnitSum() + 1);
}
});
stationJointRelayMap.put(key, vo);
});*/
} }
/** /**
@ -393,7 +362,7 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
*/ */
@Override @Override
public void centralizedMonitoring(String param) { public void centralizedMonitoring(String param) {
Long beginTime = System.currentTimeMillis(); long beginTime = System.currentTimeMillis();
Thread thread = Thread.currentThread(); Thread thread = Thread.currentThread();
Object json = redisTemplate.opsForValue().get(real_id_key_gather_path); Object json = redisTemplate.opsForValue().get(real_id_key_gather_path);
if (ObjectUtil.isEmpty(json)) { if (ObjectUtil.isEmpty(json)) {
@ -440,19 +409,17 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
// 根据站点分组 // 根据站点分组
Map<String, List<StationAttributeEntity>> stationAttbtMap = list.stream().collect(Collectors.groupingBy(StationAttributeEntity::getStationId)); Map<String, List<StationAttributeEntity>> stationAttbtMap = list.stream().collect(Collectors.groupingBy(StationAttributeEntity::getStationId));
// 获取站点列表 // 获取站点列表
List<StationEntity> stationEntityList = stationService.getStationByInCode(stationAttbtMap.keySet().stream().collect(Collectors.toList())); List<StationEntity> stationEntityList = stationService.getStationByInCode(new ArrayList<>(stationAttbtMap.keySet()));
log.info(thread.getName() + "步骤8站点列表 耗时 : {}",System.currentTimeMillis() - beginTime); log.info(thread.getName() + "步骤8站点列表 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis(); beginTime = System.currentTimeMillis();
// 隐藏设备列表 // 隐藏设备列表
List<String> hideList = stationAttrConfigService.getHideList(); List<String> hideList = stationAttrConfigService.getHideList();
// 分割,每个map限制10个长度 // 分割,每个map限制10个长度
List<Map<String, List<StationAttributeEntity>>> handleList = this.mapChunk(stationAttbtMap,MAX_SEND); List<Map<String, List<StationAttributeEntity>>> handleList = this.mapChunk(stationAttbtMap);
log.info(thread.getName() + "步骤9监测点数据切割 耗时 : {}",System.currentTimeMillis() - beginTime); log.info(thread.getName() + "步骤9监测点数据切割 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis(); beginTime = System.currentTimeMillis();
// 创建线程池 // 创建线程池
ExecutorService pool = Executors.newFixedThreadPool(handleList.size()); ExecutorService pool = Executors.newFixedThreadPool(handleList.size());
//ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("centralized_monitor-pool-%d").build();
//ExecutorService pool = new ThreadPoolExecutor(5, handleList.size(), 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
CountDownLatch countDownLatch = new CountDownLatch(handleList.size()); CountDownLatch countDownLatch = new CountDownLatch(handleList.size());
log.info(thread.getName() +"步骤10创建线程 耗时 : {}",System.currentTimeMillis() - beginTime); log.info(thread.getName() +"步骤10创建线程 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis(); beginTime = System.currentTimeMillis();
@ -521,14 +488,14 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
/** /**
* map分割 * map分割
* @param chunkMap *
* @param chunkNum
* @return
* @param <k> * @param <k>
* @param <v> * @param <v>
* @param chunkMap
* @return
*/ */
private <k, v> List<Map<k, v>> mapChunk(Map<k, v> chunkMap, int chunkNum) { private <k, v> List<Map<k, v>> mapChunk(Map<k, v> chunkMap) {
if (chunkMap == null || chunkNum <= 0) { if (chunkMap == null || RealMonitorServiceImpl.MAX_SEND <= 0) {
List<Map<k, v>> list = new ArrayList<>(); List<Map<k, v>> list = new ArrayList<>();
list.add(chunkMap); list.add(chunkMap);
return list; return list;
@ -541,7 +508,7 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
while (iterator.hasNext()) { while (iterator.hasNext()) {
k next = iterator.next(); k next = iterator.next();
tem.put(next, chunkMap.get(next)); tem.put(next, chunkMap.get(next));
if (i == chunkNum) { if (i == RealMonitorServiceImpl.MAX_SEND) {
total.add(tem); total.add(tem);
tem = new HashMap<>(); tem = new HashMap<>();
i = 0; i = 0;
@ -677,9 +644,9 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
// 正常状态 // 正常状态
attest.setStatus(ConfigStatus.ConfigStatusEnum.NORMAL.getStatus()); attest.setStatus(ConfigStatus.ConfigStatusEnum.NORMAL.getStatus());
int quality = Optional.ofNullable(attest.getQuality()).orElse(-1); int quality = Optional.ofNullable(attest.getQuality()).orElse(-1);
String time = Optional.ofNullable(attest.getTime()).orElse(null); String time = Optional.ofNullable(attest.getTime()).orElse("");
// 延时状态 :质量为空 && 时间为空 // 延时状态 :质量为空 && 时间为空
if (-1 == quality && StringUtil.isBlank(time)) { if (-1 == quality && StringUtil.isEmpty(time)) {
attest.setStatus(ConfigStatus.ConfigStatusEnum.GRAY.getStatus()); attest.setStatus(ConfigStatus.ConfigStatusEnum.GRAY.getStatus());
} }
int type = item.getAttributeType(); int type = item.getAttributeType();
@ -842,7 +809,7 @@ public class RealMonitorServiceImpl implements IRealMonitorService {
*/ */
@Override @Override
public TextMessage getSendMessage(MessageParamVo message) { public TextMessage getSendMessage(MessageParamVo message) {
Long beginTime = System.currentTimeMillis(); long beginTime = System.currentTimeMillis();
Thread thread = Thread.currentThread(); Thread thread = Thread.currentThread();
// 权限机构过滤 // 权限机构过滤
if(ObjectUtil.isEmpty(message) || CollectionUtil.isEmpty(message.getDeptIds())){ if(ObjectUtil.isEmpty(message) || CollectionUtil.isEmpty(message.getDeptIds())){

2
hzims-service/operational/src/main/java/com/hnac/hzims/operational/station/service/impl/StationServiceImpl.java

@ -141,6 +141,8 @@ public class StationServiceImpl extends BaseServiceImpl<StationMapper, StationEn
} }
// 删除智能诊断站点 // 删除智能诊断站点
questionClient.deleteStationInfo(stationEntity.getCode()); questionClient.deleteStationInfo(stationEntity.getCode());
//删除所属机构信息
deptClient.deleteDeptById(stationEntity.getRefDept());
} }
return saveFlag; return saveFlag;
} }

Loading…
Cancel
Save