Browse Source

增加遥测记录表

hfxc226 2 years ago
parent
commit
5d888e75c9

+ 132 - 0
platform-dao/src/main/java/com/platform/dao/dto/remote/RemoteMeasureLogDTO.java

@@ -0,0 +1,132 @@
+package com.platform.dao.dto.remote;
+
+import com.platform.common.bean.BaseDTO;
+import com.platform.common.validation.group.UpdateGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Transient;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 设备电度记录表DTO
+ * @Author xc
+ * @Date 2022-09-13 14:14:35
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class RemoteMeasureLogDTO extends BaseDTO implements Serializable {
+
+    /**
+     * json数据
+     */
+    private String info;
+    /**
+     * id
+     */
+    @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
+    private String id;
+    /**
+     * 设备id
+     */
+    private String sbId;
+    /**
+     * 设备名称
+     */
+    private String sbName;
+    /**
+     * 点位
+     */
+    private Integer positionNum;
+    /**
+     * 年
+     */
+    private Integer year;
+    /**
+     * 月
+     */
+    private Integer month;
+    /**
+     * 日
+     */
+    private Integer day;
+    /**
+     * 时
+     */
+    private Integer hour;
+    /**
+     * 分
+     */
+    private Integer minute;
+    /**
+     * 类型
+     */
+    private Integer type;
+    /**
+     * 描述
+     */
+    private String description;
+    /**
+     * 实时数值
+     */
+    private String result;
+    /**
+     * 系数
+     */
+    private BigDecimal ratio;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 创建人
+     */
+    private String createdUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserId;
+    /**
+     * 创建日期
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建日期开始
+     */
+    private LocalDateTime createdTimeStart;
+    /**
+     * 创建日期结束
+     */
+    private LocalDateTime createdTimeEnd;
+    /**
+     * 更新日期
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新日期开始
+     */
+    private LocalDateTime updateTimeStart;
+    /**
+     * 更新日期结束
+     */
+    private LocalDateTime updateTimeEnd;
+    /**
+     * 关键字
+     */
+    private String keyword;
+    /**
+     * 对应设备所属线路,用于分组统计
+     */
+    @Transient
+    private Integer baoyangTimes;
+}

+ 112 - 0
platform-dao/src/main/java/com/platform/dao/entity/remote/RemoteMeasureLog.java

@@ -0,0 +1,112 @@
+package com.platform.dao.entity.remote;
+
+import com.platform.common.bean.DataScope;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 设备遥测记录表实体类
+ * @Author xc
+ * @Date 2022-09-13 14:14:35
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@Table(name = "t_remote_measure_log")
+public class RemoteMeasureLog implements Serializable {
+
+    /**
+     * id
+     */
+    @Id
+    private String id;
+    /**
+     * 设备id
+     */
+    private String sbId;
+    /**
+     * 设备名称
+     */
+    private String sbName;
+    /**
+     * 点位
+     */
+    private Integer positionNum;
+    /**
+     * 年
+     */
+    private Integer year;
+    /**
+     * 月
+     */
+    private Integer month;
+    /**
+     * 日
+     */
+    private Integer day;
+    /**
+     * 时
+     */
+    private Integer hour;
+    /**
+     * 分
+     */
+    private Integer minute;
+    /**
+     * 类型
+     */
+    private Integer type;
+    /**
+     * 描述
+     */
+    private String description;
+    /**
+     * 实时数值
+     */
+    private String result;
+    /**
+     * 系数
+     */
+    private BigDecimal ratio;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 创建人
+     */
+    private String createdUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserId;
+    /**
+     * 创建日期
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 更新日期
+     */
+    private LocalDateTime updateTime;
+    /**
+     * json数据
+     */
+    private String info;
+    /**
+     * 数据权限
+     */
+    @Transient
+    private DataScope dataScope;
+
+}

+ 27 - 0
platform-dao/src/main/java/com/platform/dao/mapper/remote/RemoteMeasureLogMapper.java

@@ -0,0 +1,27 @@
+package com.platform.dao.mapper.remote;
+
+import com.platform.dao.config.MyMapper;
+import com.platform.dao.dto.remote.RemoteMeasureLogDTO;
+import com.platform.dao.entity.remote.RemoteMeasureLog;
+import com.platform.dao.vo.query.remote.RemoteMeasureLogVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @Description 设备遥测记录表 mapper
+ * @Author xc
+ * @Date 2022-09-13 14:14:35
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Component
+public interface RemoteMeasureLogMapper extends MyMapper<RemoteMeasureLog> {
+    /**
+     * 分页查询
+     * @param dto
+     * @return
+     */
+    List<RemoteMeasureLogVO> selectList(RemoteMeasureLogDTO dto);
+
+}

+ 126 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/remote/ExportRemoteMeasureLogVO.java

@@ -0,0 +1,126 @@
+package com.platform.dao.vo.export.remote;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 设备电度记录表导出VO
+ * @Author xc
+ * @Date 2022-09-13 14:14:35
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportRemoteMeasureLogVO implements Serializable {
+
+    /**
+     * id
+     */
+    @Excel(name = "id", orderNum = "1")
+    private String id;
+
+    /**
+     * 设备id
+     */
+    @Excel(name = "设备id", orderNum = "2")
+    private String sbId;
+
+    /**
+     * 设备名称
+     */
+    @Excel(name = "设备名称", orderNum = "3")
+    private String sbName;
+
+    /**
+     * 点位
+     */
+    @Excel(name = "点位", orderNum = "4")
+    private Integer positionNum;
+
+    /**
+     * 类型
+     */
+    @Excel(name = "类型", orderNum = "5")
+    private Integer type;
+
+    /**
+     * 描述
+     */
+    @Excel(name = "描述", orderNum = "6")
+    private String description;
+
+    /**
+     * 实时数值
+     */
+    @Excel(name = "实时数值", orderNum = "7")
+    private String value;
+
+    /**
+     * 年
+     */
+    @Excel(name = "年", orderNum = "8")
+    private Integer year;
+    /**
+     * 月
+     */
+    @Excel(name = "月", orderNum = "9")
+    private Integer month;
+    /**
+     * 日
+     */
+    @Excel(name = "日", orderNum = "10")
+    private Integer day;
+    /**
+     * 时
+     */
+    @Excel(name = "时", orderNum = "11")
+    private Integer hour;
+    /**
+     * 系数
+     */
+    @Excel(name = "系数", orderNum = "12")
+    private BigDecimal ratio;
+
+    /**
+     * 单位
+     */
+    @Excel(name = "单位", orderNum = "13")
+    private String unit;
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注", orderNum = "14")
+    private String remark;
+
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", orderNum = "15")
+    private String createdUserId;
+
+    /**
+     * 更新人
+     */
+    @Excel(name = "更新人", orderNum = "16")
+    private String updateUserId;
+
+    /**
+     * 创建日期
+     */
+    @Excel(name = "创建日期", orderNum = "17")
+    private LocalDateTime createdTime;
+
+    /**
+     * 更新日期
+     */
+    @Excel(name = "更新日期", orderNum = "18")
+    private LocalDateTime updateTime;
+
+
+}

+ 112 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/remote/RemoteMeasureLogVO.java

@@ -0,0 +1,112 @@
+package com.platform.dao.vo.query.remote;
+
+import com.platform.common.bean.BaseVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 设备电度记录表VO结果类
+ * @Author xc
+ * @Date 2022-09-13 14:14:35
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class RemoteMeasureLogVO extends BaseVO implements Serializable {
+
+    /**
+     * json数据
+     */
+    private String info;
+    /**
+     * id
+     */
+    private String id;
+    /**
+     * 设备id
+     */
+    private String sbId;
+    /**
+     * 设备名称
+     */
+    private String sbName;
+    /**
+     * 设备名称
+     */
+    private String sbNo;
+    /**
+     * 点位
+     */
+    private Integer positionNum;
+    /**
+     * 类型:1正向有功,2正向无功
+     */
+    private Integer type;
+    /**
+     * 描述
+     */
+    private String description;
+    /**
+     * 实时数值
+     */
+    private String result;
+    /**
+     * 年
+     */
+    private Integer year;
+    /**
+     * 月
+     */
+    private Integer month;
+    /**
+     * 日
+     */
+    private Integer day;
+    /**
+     * 时
+     */
+    private Integer hour;
+    /**
+     * 分
+     */
+    private Integer minute;
+    /**
+     * 系数
+     */
+    private BigDecimal ratio;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 备注:保存原始点位推送的全量数据
+     */
+    private String remark;
+    /**
+     * 创建人
+     */
+    private String createdUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserId;
+    /**
+     * 创建日期
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 更新日期
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 对应设备所属线路,用于分组统计
+     */
+    private Integer baoyangTimes;
+
+}

+ 138 - 0
platform-dao/src/main/resources/mapper/remote/RemoteMeasureLogMapper.xml

@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.platform.dao.mapper.remote.RemoteMeasureLogMapper">
+    <sql id="Base_Column_List">
+        measure_log
+        .
+        id
+        ,
+                                     measure_log.sb_id,
+                                     measure_log.sb_name,
+                                     measure_log.position_num,
+                                     measure_log.type,
+                                     measure_log.description,
+                                     measure_log.result,
+                                     measure_log.ratio,
+                                     measure_log.unit,
+                                     measure_log.remark,
+                                     measure_log.year,
+                                     measure_log.month,
+                                     measure_log.day,
+                                     measure_log.hour,
+                                     measure_log.minute,
+                                     measure_log.info,
+                                     measure_log.created_user_id,
+                                     measure_log.update_user_id,
+                                     measure_log.created_time,
+                                     measure_log.update_time
+    </sql>
+    <sql id="Ref_Column_List">
+        measure_log
+        .
+        sb_id
+        ,
+                                     measure_log.sb_name,
+                                     measure_log.position_num,
+                                     measure_log.type,
+                                     measure_log.description,
+                                     measure_log.result,
+                                     measure_log.year,
+                                     measure_log.month,
+                                     measure_log.day,
+                                     measure_log.hour,
+                                     measure_log.minute,
+                                     measure_log.info,
+                                     measure_log.ratio,
+                                     measure_log.unit,
+                                     measure_log.remark,
+    </sql>
+    <sql id="List_Condition">
+        <if test="id != null and id != ''">
+            and measure_log.id = #{id}
+        </if>
+        <if test="sbId != null and sbId != ''">
+            and measure_log.sb_id = #{sbId}
+        </if>
+        <if test="year != null">
+            and measure_log.year = #{year}
+        </if>
+        <if test="month != null">
+            and measure_log.month = #{month}
+        </if>
+        <if test="day != null">
+            and measure_log.day = #{day}
+        </if>
+        <if test="hour != null">
+            and measure_log.hour = #{hour}
+        </if>
+        <if test="minute != null">
+            and measure_log.minute = #{minute}
+        </if>
+        <if test="sbName != null and sbName != ''">
+            and measure_log.sb_name = #{sbName}
+        </if>
+        <if test="positionNum != null">
+            and measure_log.position_num = #{positionNum}
+        </if>
+        <if test="type != null">
+            and measure_log.type = #{type}
+        </if>
+        <if test="description != null and description != ''">
+            and measure_log.description = #{description}
+        </if>
+        <if test="result != null and result != ''">
+            and measure_log.result = #{result}
+        </if>
+        <if test="ratio != null">
+            and measure_log.ratio = #{ratio}
+        </if>
+        <if test="unit != null and unit != ''">
+            and measure_log.unit = #{unit}
+        </if>
+        <if test="remark != null and remark != ''">
+            and measure_log.remark = #{remark}
+        </if>
+        <if test="createdUserId != null and createdUserId != ''">
+            and measure_log.created_user_id = #{createdUserId}
+        </if>
+        <if test="updateUserId != null and updateUserId != ''">
+            and measure_log.update_user_id = #{updateUserId}
+        </if>
+        <if test="createdTimeStart != null">
+            and measure_log.created_time <![CDATA[>=]]>; #{createdTimeStart}
+        </if>
+        <if test="createdTimeEnd != null">
+            and measure_log.created_time <![CDATA[<=]]> #{createdTimeEnd}
+        </if>
+        <if test="createdTime != null">
+            and measure_log.created_time = #{createdTime}
+        </if>
+        <if test="updateTimeStart != null">
+            and measure_log.update_time <![CDATA[>=]]>; #{updateTimeStart}
+        </if>
+        <if test="updateTimeEnd != null">
+            and measure_log.update_time <![CDATA[<=]]> #{updateTimeEnd}
+        </if>
+        <if test="updateTime != null">
+            and measure_log.update_time = #{updateTime}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            and (
+            measure_log.id like concat(concat('%',#{keyword}),'%')
+            or measure_log.position_num like concat(concat('%',#{keyword}),'%')
+            )
+        </if>
+    </sql>
+    <select id="selectList" parameterType="com.platform.dao.dto.remote.RemoteMeasureLogDTO"
+            resultType="com.platform.dao.vo.query.remote.RemoteMeasureLogVO">
+        select measure_log.*, sbInfo.baoyang_times baoyangTimes, sbInfo.no sbNo
+        from t_remote_measure_log as measure_log
+        left join t_sb_info sbInfo on measure_log.sb_id = sbInfo.id
+        <where>
+            <include refid="List_Condition"/>
+            <if test="baoyangTimes != null">
+                and sbInfo.baoyang_times = #{baoyangTimes}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 4 - 4
platform-iec/src/main/java/com/ydl/iec/iec104/core/Decoder104.java

@@ -31,8 +31,8 @@ public class Decoder104 {
      * @return
      */
     public static MessageDetail encoder(byte[] bytes) {
-        log.info("解码器: " + ByteUtil.byteArrayToHexString(bytes));
-        log.info("解码器完善: " + ByteUtil.testStr(ByteUtil.byteArrayToHexString(bytes)));
+        // log.info("解码器: " + ByteUtil.byteArrayToHexString(bytes));
+        // log.info("解码器完善: " + ByteUtil.testStr(ByteUtil.byteArrayToHexString(bytes)));
         MessageDetail ruleDetail104 = new MessageDetail();
         int index = 0;
         ruleDetail104.setStart(bytes[index++]);
@@ -235,11 +235,11 @@ public class Decoder104 {
      */
     private static int getMessageLength(MessageDetail ruleDetail104) {
         //log.info("根据类型标识返回消息长度: " + JSON.toJSONString(ruleDetail104));
-        log.info("返回消息长度: " + ruleDetail104.getMeasgLength());
+        /*log.info("返回消息长度: " + ruleDetail104.getMeasgLength());
         if (ruleDetail104.getMessages() != null) {
             log.info("返回message size: " + ruleDetail104.getMessages().size());
         }
-        log.info("返回消息byte长度: " + ruleDetail104.getTypeIdentifier().getMessageLength());
+        log.info("返回消息byte长度: " + ruleDetail104.getTypeIdentifier().getMessageLength());*/
         return ruleDetail104.getTypeIdentifier().getMessageLength();
 //		int messageLength = 0;
 //		switch (ruleDetail104.getTypeIdentifier().getValue()) {

+ 54 - 2
platform-iec/src/main/java/com/ydl/iec/util/MySqlUtil.java

@@ -79,6 +79,7 @@ public class MySqlUtil {
         int minute = time.getMinute();
         List<MessageInfo> addMessage = new ArrayList<>();
         List<MessageInfo> updateMessage = new ArrayList<>();
+        List<MessageInfo> addMessageMeasure = new ArrayList<>();
         for (int i = 0; i < ruleDetail104.getMeasgLength(); i++) {
             MessageInfo messageInfo = ruleDetail104.getMessages().get(i);
             if (messageInfo.getMessageAddress() >= remote_config_degree_min && messageInfo.getMessageAddress() <= remote_config_degree_max) {
@@ -87,6 +88,7 @@ public class MySqlUtil {
             } else if (messageInfo.getMessageAddress() >= remote_config_measure_min && messageInfo.getMessageAddress() <= remote_config_measure_max) {
                 //log.info("遥测点位:" + messageInfo.getMessageAddress() + "byteHex:" + messageInfo.getByteHex() + "数值:" + messageInfo.getValue());
                 updateMessage.add(messageInfo);
+                addMessageMeasure.add(messageInfo);
             } else {
                 // log.info("数据点位不在采集范围内,不处理" + messageInfo.getMessageAddress());
             }
@@ -100,6 +102,7 @@ public class MySqlUtil {
         if (!CollectionUtils.isEmpty(updateMessage)) {
             // log.info("更新遥测数量:" + updateMessage.size());
             updateBatch(updateMessage, time);
+            addBatchMeasureLog(addMessageMeasure, time, year, month, day, hour, minute);
         }
     }
 
@@ -177,7 +180,7 @@ public class MySqlUtil {
                 ps.setObject(5, day);
                 ps.setObject(6, hour);
                 ps.setObject(7, minute);
-                ps.setObject(8, "" + changeMeassInfosToFloat(messageInfo.getMessageInfos()));
+                ps.setObject(8, "" + messageInfo.getValue());
                 ps.setObject(9, JSON.toJSONString(messageInfo));
                 ps.setObject(10, DateUtils.dateToString(time, DateUtils.PATTERN_YMD_HMS));
                 ps.setObject(11, "1");
@@ -203,7 +206,56 @@ public class MySqlUtil {
         }
     }
 
-
+    /**
+     * 记录遥测数据-每一条新增保存
+     *
+     * @param list
+     * @param time
+     * @param year
+     * @param month
+     * @param day
+     * @param hour
+     */
+    public static void addBatchMeasureLog(List<MessageInfo> list, LocalDateTime time, Integer year, Integer month, Integer day, Integer hour, Integer minute) {
+        PreparedStatement ps = null;
+        try {
+            String sql = "insert into t_remote_measure_log (id,position_num,year,month,day,hour,minute,result,info,created_time,created_user_id) values (?,?,?,?,?,?,?,?,?,?,?)";
+            conn = getConnection();
+            ps = conn.prepareStatement(sql);
+            for (int i = 0; i < list.size(); i++) {
+                MessageInfo messageInfo = list.get(i);
+                ps.setObject(1, IdGeneratorUtils.getObjectId());
+                ps.setObject(2, messageInfo.getMessageAddress());
+                ps.setObject(3, year);
+                ps.setObject(4, month);
+                ps.setObject(5, day);
+                ps.setObject(6, hour);
+                ps.setObject(7, minute);
+                ps.setObject(8, "" + messageInfo.getValue());
+                ps.setObject(9, JSON.toJSONString(messageInfo));
+                ps.setObject(10, DateUtils.dateToString(time, DateUtils.PATTERN_YMD_HMS));
+                ps.setObject(11, "1");
+                ps.addBatch();
+            }
+            int[] num = ps.executeBatch();
+            if (num.length == 0) {
+                throw new BusinessException("批量新增t_remote_measure_log失败");
+                // 找不到定位数据,属于新增,则对应新增进入库,但是没有系数也不好处理
+            } else {
+                log.info("已新增:" + num.length);
+            }
+            // ps.clearBatch();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                ps.close();
+                closeConn();
+            } catch (Exception e1) {
+                e1.printStackTrace();
+            }
+        }
+    }
 
     public static void testAddBatch() {
         LocalDateTime time = LocalDateTime.now();

+ 152 - 0
platform-rest/src/main/java/com/platform/rest/controller/remote/RemoteMeasureLogController.java

@@ -0,0 +1,152 @@
+package com.platform.rest.controller.remote;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.R;
+import com.platform.common.validation.group.AddGroup;
+import com.platform.common.validation.group.UpdateGroup;
+import com.platform.dao.dto.remote.RemoteMeasureLogDTO;
+import com.platform.dao.entity.remote.RemoteMeasureLog;
+import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.remote.ExportRemoteMeasureLogVO;
+import com.platform.dao.vo.query.remote.RemoteMeasureLogVO;
+import com.platform.rest.log.annotation.SysLog;
+import com.platform.service.remote.RemoteMeasureLogService;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @Description 设备遥测记录表 控制器
+ * @Author xc
+ * @Date 2022-09-13 14:14:35
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/remote/measure-logs")
+public class RemoteMeasureLogController {
+
+    private final RemoteMeasureLogService remoteMeasureLogService;
+
+    /**
+     * 通过id查询单条记录
+     *
+     * @param id 主键
+     * @return R
+     */
+    @GetMapping("/{id}")
+    public R<RemoteMeasureLog> getById(@PathVariable("id") String id) {
+        return new R<>(remoteMeasureLogService.getModelById(id));
+    }
+
+    /**
+     * 新增记录
+     *
+     * @param remoteDegreeLogDTO 设备遥测记录表DTO
+     * @return R
+     */
+    @SysLog("新增设备遥测记录表")
+    @PostMapping
+    @PreAuthorize("@pms.hasPermission('remote-measure-logs-add')")
+    public R save(@Validated({AddGroup.class}) @RequestBody RemoteMeasureLogDTO remoteDegreeLogDTO) {
+        return new R<>(remoteMeasureLogService.saveModelByDTO(remoteDegreeLogDTO));
+    }
+
+    /**
+     * 修改记录
+     *
+     * @param remoteDegreeLogDTO 设备遥测记录表DTO
+     * @return R
+     */
+    @SysLog("修改设备遥测记录表")
+    @PutMapping("/{id}")
+    @PreAuthorize("@pms.hasPermission('remote-measure-logs-edit')")
+    public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody RemoteMeasureLogDTO remoteDegreeLogDTO) {
+        remoteMeasureLogService.modModelByDTO(remoteDegreeLogDTO);
+        return new R<>();
+    }
+
+
+    /**
+     * 通过id删除一条记录
+     *
+     * @param id 主键
+     * @return R
+     */
+    @SysLog("删除设备遥测记录表")
+    @DeleteMapping("/{id}")
+    @PreAuthorize("@pms.hasPermission('remote-measure-logs-del')")
+    public R removeById(@PathVariable String id) {
+        remoteMeasureLogService.deleteByPrimaryKey(id);
+        return new R<>();
+    }
+
+    /**
+     * 批量记录
+     *
+     * @param ids 主键
+     * @return R
+     */
+    @SysLog("批量删除设备遥测记录表")
+    @DeleteMapping("")
+    @PreAuthorize("@pms.hasPermission('remote-measure-logs-del')")
+    public R removeIds(@RequestBody List<String> ids) {
+        remoteMeasureLogService.batchDelete(ids);
+        return new R<>();
+    }
+
+    /**
+     * 获取分页
+     *
+     * @param pageNum            当前页码
+     * @param pageSize           每页条数
+     * @param remoteDegreeLogDTO 设备遥测记录表DTO
+     * @return R
+     */
+    @GetMapping("/page")
+    public R<AbstractPageResultBean<RemoteMeasureLogVO>> query(RemoteMeasureLogDTO remoteDegreeLogDTO, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
+        return new R<>(remoteMeasureLogService.selectPageList(remoteDegreeLogDTO, pageNum, pageSize));
+    }
+
+    /**
+     * 获取列表
+     *
+     * @param remoteDegreeLogDTO 设备遥测记录表DTO
+     * @return R
+     */
+    @GetMapping("")
+    public R query(RemoteMeasureLogDTO remoteDegreeLogDTO) {
+        return new R<>(remoteMeasureLogService.getModelListByDTO(remoteDegreeLogDTO));
+    }
+
+    /**
+     * 月报表,日报表
+     *
+     * @param remoteDegreeLogDTO 设备遥测记录表DTO
+     * @return R
+     */
+    @GetMapping("/report/{isDay}")
+    public R queryMonthOrDay(RemoteMeasureLogDTO remoteDegreeLogDTO, @PathVariable("isDay") Integer isDay) {
+        return new R<>(remoteMeasureLogService.getMonthOrDayReport(remoteDegreeLogDTO, isDay == 1 ? true : false));
+    }
+
+    /**
+     * 设备遥测记录表导出
+     *
+     * @param remoteDegreeLogDTO 设备遥测记录表DTO
+     * @return R
+     */
+    @GetMapping("/export")
+    @SysLog("设备遥测记录表导出")
+    @PreAuthorize("@pms.hasPermission('remote-measure-logs-export')")
+    public void export(HttpServletResponse response, RemoteMeasureLogDTO remoteDegreeLogDTO) {
+        List<RemoteMeasureLog> list = remoteMeasureLogService.getModelListByDTO(remoteDegreeLogDTO);
+        ExcelUtil.exportResponseDict(response, ExportRemoteMeasureLogVO.class, BeanConverterUtil.copyListProperties(list, ExportRemoteMeasureLogVO.class), "设备遥测记录表");
+    }
+
+}

+ 46 - 0
platform-service/src/main/java/com/platform/service/remote/RemoteMeasureLogService.java

@@ -0,0 +1,46 @@
+package com.platform.service.remote;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.dao.dto.remote.RemoteMeasureLogDTO;
+import com.platform.dao.entity.remote.RemoteMeasureLog;
+import com.platform.dao.vo.query.remote.RemoteMeasureLogVO;
+import com.platform.service.base.IBaseService;
+
+import java.util.List;
+
+/**
+ * @Description 设备电度记录表 service
+ * @Author xc
+ * @Date 2022-09-13 14:14:35
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+public interface RemoteMeasureLogService extends IBaseService<RemoteMeasureLog, RemoteMeasureLogDTO> {
+
+   /**
+    * 批量删除
+    *
+    * @param ids :
+    * @return :
+    */
+    int batchDelete(List<String> ids);
+
+    /**
+     * 分页查询
+     * @param record
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    AbstractPageResultBean<RemoteMeasureLogVO> selectPageList(RemoteMeasureLogDTO record, int pageNum, int pageSize);
+
+    /**
+     * 根据点位新增电度结果数据
+     *
+     * @param positionNum:
+     * @param result:
+     * @return :
+     */
+    void addByPositionNum(Integer positionNum, String result) ;
+
+    Object getMonthOrDayReport(RemoteMeasureLogDTO remoteDegreeLogDTO, Boolean isDay);
+}

+ 205 - 0
platform-service/src/main/java/com/platform/service/remote/impl/RemoteMeasureLogServiceImpl.java

@@ -0,0 +1,205 @@
+package com.platform.service.remote.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.enums.DictTypeEnum;
+import com.platform.common.exception.BusinessException;
+import com.platform.common.util.IdGeneratorUtils;
+import com.platform.dao.bean.MyPage;
+import com.platform.dao.dto.remote.RemoteMeasureLogDTO;
+import com.platform.dao.entity.remote.RemoteMeasureLog;
+import com.platform.dao.entity.upms.SysDict;
+import com.platform.dao.mapper.remote.RemoteMeasureLogMapper;
+import com.platform.dao.mapper.upms.SysDictMapper;
+import com.platform.dao.vo.query.remote.RemoteMeasureLogVO;
+import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.remote.RemoteMeasureLogService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * @Description 设备电度记录表 service 实现类
+ * @Author xc
+ * @Date 2022-09-13 14:14:35
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@AllArgsConstructor
+@Service("remoteMeasureLogService")
+public class RemoteMeasureLogServiceImpl extends BaseServiceImpl<RemoteMeasureLogMapper, RemoteMeasureLog, RemoteMeasureLogDTO> implements RemoteMeasureLogService {
+
+    private final SysDictMapper sysDictMapper;
+
+    @Override
+    public int batchDelete(List<String> ids) {
+        Weekend<RemoteMeasureLog> weekend = new Weekend<>(RemoteMeasureLog.class);
+        WeekendCriteria<RemoteMeasureLog, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andIn(RemoteMeasureLog::getId, ids);
+        mapper.deleteByExample(weekend);
+        return 1;
+    }
+
+    @Override
+    public AbstractPageResultBean<RemoteMeasureLogVO> selectPageList(RemoteMeasureLogDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public void addByPositionNum(Integer positionNum, String result) {
+        RemoteMeasureLog remoteDegreeLog = new RemoteMeasureLog();
+        remoteDegreeLog.setPositionNum(positionNum);
+        remoteDegreeLog.setId(IdGeneratorUtils.getObjectId());
+        remoteDegreeLog.setResult(result);
+        remoteDegreeLog.setCreatedTime(LocalDateTime.now());
+        mapper.insert(remoteDegreeLog);
+    }
+
+    /**
+     * 参数:
+     * 查询月报表、日报表
+     * 1:根据线路分组,线路1,线路2
+     * 2:日报表
+     * 根据年、月,日,查询出来
+     * 根据小时分组,循环24小时分组
+     * 根据线路分组:累加
+     * <p>
+     * 3:月报表
+     * 根据年、月,查询出来
+     * 根据天分组,循环到当前月有多少天,
+     * 根据月分组:累加
+     * <p>
+     * 日报格式, 月报没有negative数据
+     * [{
+     * time: “00:00”,
+     * lines: [
+     * {name:"line1", "positive ": “00:00”, "negative": “00:00”},
+     * {name:"line2", "positive": “00:00”, "negative": “00:00”},
+     * {name:"line3", "positive": “00:00”, "negative": “00:00”},
+     * {name:"line4", "positive": “00:00”, "negative": “00:00”},
+     * {name:"line5", "positive": “00:00”, "negative": “00:00”},
+     * {name:"line6", "positive": “00:00”, "negative": “00:00”},
+     * ]
+     * },
+     * {
+     * time: “01:00”,
+     * lines: [
+     * {name:"line1", "positive ": “00:00”, "negative": “00:00”},
+     * {name:"line2", "positive": “00:00”, "negative": “00:00”},
+     * {name:"line3", "positive": “00:00”, "negative": “00:00”},
+     * {name:"line4", "positive": “00:00”, "negative": “00:00”},
+     * {name:"line5", "positive": “00:00”, "negative": “00:00”},
+     * {name:"line6", "positive": “00:00”, "negative": “00:00”},
+     * ]
+     * }
+     * ]
+     *
+     * @param record
+     * @return
+     */
+    @Override
+    public Object getMonthOrDayReport(RemoteMeasureLogDTO record, Boolean isDay) {
+        if (record.getYear() == null) {
+            throw new BusinessException("请选择年份");
+        }
+        if (record.getMonth() == null) {
+            throw new BusinessException("请选择月份");
+        }
+        Weekend<SysDict> weekend = new Weekend<>(SysDict.class);
+        WeekendCriteria<SysDict, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andEqualTo(SysDict::getType, DictTypeEnum.REMOTE_LINE);
+        List<SysDict> sysDictList = sysDictMapper.selectByExample(weekend);
+        if (CollectionUtils.isEmpty(sysDictList)) {
+            throw new BusinessException("请在数据字典配置设备电力线路");
+        }
+        sysDictList.sort(Comparator.comparing(SysDict::getSort));
+        List<RemoteMeasureLogVO> list = mapper.selectList(record);
+        JSONArray jSONArray = new JSONArray();
+        if (isDay) {//
+            for (int i = 0; i < 24; i++) {
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("time", i + ":00");
+                JSONArray lineArray = new JSONArray();
+                for (SysDict dict : sysDictList) {
+                    JSONObject dictJsonObject = new JSONObject();
+                    dictJsonObject.put("name", dict.getLabel());
+                    BigDecimal positiveTotal = new BigDecimal(0.00);// 正向有功
+                    BigDecimal negativeTotal = new BigDecimal(0.00);// 正向无功
+                    for (RemoteMeasureLogVO log : list) {
+                        if (log.getBaoyangTimes().toString().equals(dict.getValue())) {
+                            if (log.getHour().equals(i)) {
+                                if (log.getType().equals(1)) {
+                                    positiveTotal = positiveTotal.add(new BigDecimal(log.getResult()));
+                                } else {
+                                    negativeTotal = negativeTotal.add(new BigDecimal(log.getResult()));
+                                }
+                            }
+                        }
+                    }
+                    dictJsonObject.put("positive", positiveTotal);
+                    dictJsonObject.put("negative", negativeTotal);
+                    lineArray.add(dictJsonObject);
+                }
+                jsonObject.put("lines", lineArray);
+                jSONArray.add(jsonObject);
+            }
+        } else {
+            LocalDate localDate = LocalDate.of(record.getYear(), record.getMonth(), 1);
+            int days = localDate.lengthOfMonth();
+            for (int i = 1; i <= days; i++) {
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("time", i);
+                JSONArray lineArray = new JSONArray();
+                for (SysDict dict : sysDictList) {
+                    JSONObject dictJsonObject = new JSONObject();
+                    dictJsonObject.put("name", dict.getLabel());
+                    BigDecimal positiveTotal = new BigDecimal(0.00);// 正向有功
+                    BigDecimal negativeTotal = new BigDecimal(0.00);// 正向无功,不需要吗,后面可以删除,先保存
+                    for (RemoteMeasureLogVO log : list) {
+                        if(log.getBaoyangTimes() == null){
+                            throw new BusinessException("设备未设置电力线路, 设备名称:" + log.getSbName() + ", 设备编号:" + log.getSbNo());
+                        }
+                        if (log.getBaoyangTimes().toString().equals(dict.getValue())) {
+                            if (log.getDay().equals(i)) {
+                                if (log.getType().equals(1)) {
+                                    positiveTotal = positiveTotal.add(new BigDecimal(log.getResult()));
+                                } else {
+                                    negativeTotal = negativeTotal.add(new BigDecimal(log.getResult()));
+                                }
+                            }
+                        }
+                    }
+                    dictJsonObject.put("positive", positiveTotal);
+                    dictJsonObject.put("negative", negativeTotal);
+                    lineArray.add(dictJsonObject);
+                }
+                jsonObject.put("lines", lineArray);
+                jSONArray.add(jsonObject);
+            }
+        }
+        return jSONArray;
+    }
+
+    public static void main(String[] args) {
+        LocalDate localDate = LocalDate.of(2022, 10, 1);
+        int days = localDate.lengthOfMonth();
+        System.out.println(days);
+    }
+
+    @Override
+    public AbstractPageResultBean<RemoteMeasureLog> selectPageInfo(RemoteMeasureLogDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+}

+ 15 - 12
platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java

@@ -781,7 +781,6 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
      * 2:筛选
      * a) 检定状态为正常的
      * b) 当前日期+预警天数>有效期的
-     *
      */
     @Override
     public void generateSbMeasureLog() {
@@ -1397,7 +1396,11 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         }
         PageHelper.startPage(pageNum, pageSize);
         List<SbInfoVO> sbList = mapper.selectVOList(model);
-        if (SbInfoChildEnum.IS_PARENT.getValue().equals(model.getIsChild()) && !CollectionUtils.isEmpty(sbList)) {
+        for (SbInfoVO vo : sbList) {
+            vo.setChildren(new ArrayList<>());
+        }
+
+          /*if (SbInfoChildEnum.IS_PARENT.getValue().equals(model.getIsChild()) && !CollectionUtils.isEmpty(sbList)) {
             for (SbInfoVO vo : sbList) {
                 if (SbInfoChildEnum.IS_PARENT.getValue().equals(vo.getIsChild())) {
                     SbInfoDTO infoDTO = new SbInfoDTO();
@@ -1408,9 +1411,9 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                     }
                 }
             }
-        }
+        }*/
 
-        List<SysUser> userList = sysUserMapper.selectAll();
+        /*List<SysUser> userList = sysUserMapper.selectAll();
         for (SbInfoVO vo : sbList) {
             if (vo.getRepairUser() != null) {
                 userList.forEach(sysUser -> {
@@ -1428,7 +1431,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                     }
                 });
             }
-        }
+        }*/
         return new MyVOPage<>(sbList);
     }
 
@@ -2186,9 +2189,9 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                         }
 
                         // 如果是仪表组,则是自检
-                        if (StringUtils.isNotEmpty(vo.getDph()) && vo.getDph().equals("仪表组") ) {
+                        if (StringUtils.isNotEmpty(vo.getDph()) && vo.getDph().equals("仪表组")) {
                             tempInfo.setIsSelf(YesNoEnum.YES.getValue());
-                        }else{
+                        } else {
                             tempInfo.setIsSelf(YesNoEnum.NO.getValue());
                         }
                     }
@@ -2278,8 +2281,8 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                         }
                     }
                     String param = paramList.toString();
-                    if(param.length() > 1){
-                        param = param.substring(0,param.length()-1);
+                    if (param.length() > 1) {
+                        param = param.substring(0, param.length() - 1);
                     }
                     param += "]";
                     tempInfo.setParamList(param);
@@ -2298,7 +2301,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         }
     }
 
-    public String getGetMethod(String fieldName){
+    public String getGetMethod(String fieldName) {
         char cha = fieldName.charAt(0);
         return "get" + Character.toUpperCase(cha) + fieldName.substring(1);
     }
@@ -2385,9 +2388,9 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                         }
 
                         // 如果是仪表组,则是自检
-                        if (StringUtils.isNotEmpty(vo.getDph()) && vo.getDph().equals("仪表组") ) {
+                        if (StringUtils.isNotEmpty(vo.getDph()) && vo.getDph().equals("仪表组")) {
                             tempInfo.setIsSelf(YesNoEnum.YES.getValue());
-                        }else{
+                        } else {
                             tempInfo.setIsSelf(YesNoEnum.NO.getValue());
                         }
                     }