Browse Source

评估报告首页查询添加

jichaobo 3 years ago
parent
commit
76dfc60891

+ 24 - 6
fiveep-controller/src/main/java/com/bizmatics/controller/web/RtAnalogDataController.java

@@ -88,9 +88,9 @@ public class RtAnalogDataController {
     /**
      * 伍继PC1.0-数据报表
      *
-     * @param siteId 站点ID
+     * @param siteId    站点ID
      * @param startTime 开始时间
-     * @param endTime 结束时间
+     * @param endTime   结束时间
      * @param queryType 类型 日 月 年
      * @return
      */
@@ -104,9 +104,10 @@ public class RtAnalogDataController {
 
     /**
      * 伍继PC1.0-历史趋势数据查询
-     * @param siteId 站点ID
+     *
+     * @param siteId    站点ID
      * @param startTime 开始时间
-     * @param endTime 结束时间
+     * @param endTime   结束时间
      * @param queryType 类型 日 月 年
      * @return
      */
@@ -120,9 +121,10 @@ public class RtAnalogDataController {
 
     /**
      * 伍继PC1.0-数据报表导出
-     * @param siteId 站点ID
+     *
+     * @param siteId    站点ID
      * @param startTime 开始时间
-     * @param endTime 结束时间
+     * @param endTime   结束时间
      * @param queryType 类型 日 月 年
      * @return
      */
@@ -134,5 +136,21 @@ public class RtAnalogDataController {
         return ApiResult.success(rtAnalogDataService.DataReportExport(siteId, startTime, endTime, queryType));
     }
 
+
+    /**
+     * 电能质量(评估报告)
+     *
+     * @param siteId 站点ID
+     * @param time 时间 type为1时时间格式 yyyy-MM-dd type为2时时间格式 yyyy-MM
+     * @param type 类型 1:日 2:月
+     * @return
+     */
+    @GetMapping("evaluationReport")
+    public ApiResult<List<RealScoreVO>> evaluationReport(@RequestParam int siteId,
+                                                         @RequestParam Date time,
+                                                         @RequestParam int type) {
+        return ApiResult.success(rtAnalogDataService.evaluationReport(siteId, time, type));
+    }
+
 }
 

+ 91 - 0
fiveep-model/src/main/java/com/bizmatics/model/vo/EvaluationReporVo.java

@@ -0,0 +1,91 @@
+package com.bizmatics.model.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ya
+ * @since 2021-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class EvaluationReporVo implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 三相功率因数
+     */
+    private String deviceCode;
+
+    /**
+     * 三相功率因数
+     */
+    private String deviceName;
+
+    /**
+     * 三相正向有功电度
+     */
+    @TableField("COS")
+    private Double cos;
+
+    /**
+     * A相电流
+     */
+    @TableField("Ia")
+    private Double Ia;
+
+    /**
+     * B相电流
+     */
+    @TableField("Ib")
+    private Double Ib;
+
+    /**
+     * C相电流
+     */
+    @TableField("Ic")
+    private Double Ic;
+
+    /**
+     * A相电压
+     */
+    @TableField("Ua")
+    private Double Ua;
+
+    /**
+     * B相电压
+     */
+    @TableField("Ub")
+    private Double Ub;
+
+    /**
+     * C相电压
+     */
+    @TableField("Uc")
+    private Double Uc;
+
+    /**
+     * 电压等级
+     */
+    private String voltageLevel;
+
+    /**
+     * 额定电流(A)
+     */
+    private Double ratedCurrent;
+
+
+}

+ 21 - 11
fiveep-persistence/src/main/java/com/bizmatics/persistence/mapper/RtAnalogDataMapper.java

@@ -5,6 +5,7 @@ import com.bizmatics.model.Device;
 import com.bizmatics.model.HtAnalogData;
 import com.bizmatics.model.RtAnalogData;
 import com.bizmatics.common.mvc.base.CrudMapper;
+import com.bizmatics.model.vo.EvaluationReporVo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -14,7 +15,7 @@ import java.util.Map;
 
 /**
  * <p>
- *  Mapper 接口
+ * Mapper 接口
  * </p>
  *
  * @author ya
@@ -26,27 +27,36 @@ public interface RtAnalogDataMapper extends CrudMapper<RtAnalogData> {
 
     /**
      * 查询电力总负荷
+     *
      * @param userId
      * @param siteId
      * @return
      */
     Double selectTotalLoad(@Param("userId") Integer userId,
-                        @Param("siteId") Integer siteId);
-
+                           @Param("siteId") Integer siteId);
 
 
     List<RtAnalogData> list(@Param("userId") Integer userId);
 
 
-    Map<String,Object> getOneMap(@Param("siteId")Integer siteId);
+    Map<String, Object> getOneMap(@Param("siteId") Integer siteId);
+
+    List<HtAnalogData> getDataReportMap(@Param("siteId") Integer siteId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    List<Device> getDeviceListMap(@Param("siteId") Integer siteId);
+
+    List<HtAnalogData> getDataReportDMap(@Param("deviceCode") List deviceCode, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    List<HtAnalogData> getDataReportMMap(@Param("deviceCode") List deviceCode, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    Page<HtAnalogData> getDataReportMap1(Page<HtAnalogData> page, @Param("siteId") Integer siteId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    Page<HtAnalogData> getDataReportDMap1(Page<HtAnalogData> page, @Param("deviceCode") List deviceCode, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
 
-    List<HtAnalogData> getDataReportMap(@Param("siteId")Integer siteId, @Param("startTime") Date startTime, @Param("endTime")Date endTime);
-    List<Device> getDeviceListMap(@Param("siteId")Integer siteId);
-    List<HtAnalogData> getDataReportDMap(@Param("deviceCode")List deviceCode, @Param("startTime") Date startTime, @Param("endTime")Date endTime);
-    List<HtAnalogData> getDataReportMMap(@Param("deviceCode")List deviceCode, @Param("startTime") Date startTime, @Param("endTime")Date endTime);
+    Page<HtAnalogData> getDataReportMMap1(Page<HtAnalogData> page, @Param("deviceCode") List deviceCode, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
 
-    Page<HtAnalogData> getDataReportMap1(Page<HtAnalogData> page, @Param("siteId")Integer siteId, @Param("startTime") Date startTime, @Param("endTime")Date endTime);
-    Page<HtAnalogData> getDataReportDMap1(Page<HtAnalogData> page, @Param("deviceCode")List deviceCode, @Param("startTime") Date startTime, @Param("endTime")Date endTime);
-    Page<HtAnalogData> getDataReportMMap1(Page<HtAnalogData> page, @Param("deviceCode")List deviceCode, @Param("startTime") Date startTime, @Param("endTime")Date endTime);
+    List<EvaluationReporVo> evaluationReportList(@Param("siteId") Integer siteId,
+                                                 @Param("startTime") String startTime,
+                                                 @Param("endtime") String endtime);
 
 }

+ 29 - 1
fiveep-persistence/src/main/resources/mapper/mysql/RtAnalogDataMapper.xml

@@ -757,5 +757,33 @@
 
     </select>
 
-
+    <select id="evaluationReportList" resultType="com.bizmatics.model.vo.EvaluationReporVo">
+        SELECT
+        a.id,
+        a.device_code,
+        a.device_name,
+        AVG(b.COS) AS COS,
+        AVG(b.Ia) AS Ia,
+        AVG(b.Ib) AS Ib,
+        AVG(b.Ic) AS Ic,
+        AVG(b.Ua) AS Ua,
+        AVG(b.Ub) AS Ub,
+        AVG(b.Uc) AS Uc,
+        c.voltage_level,
+        d.rated_current
+        FROM
+        device AS a
+        LEFT JOIN ht_analog_data AS b ON a.device_code = b.deviceName
+        LEFT JOIN site_dynamic_properties AS c ON a.site_id = c.site_id
+        LEFT JOIN device_attribute AS d ON a.device_code = d.monitor_device_code
+        <where>
+            AND a.enable = 1
+            AND a.device_type = 1
+            AND a.site_id = #{siteId}
+            AND b.dataTime BETWEEN #{startTime}
+            AND #{endtime}
+        </where>
+        GROUP BY
+        a.device_code
+    </select>
 </mapper>

+ 6 - 0
fiveep-service/src/main/java/com/bizmatics/service/RtAnalogDataService.java

@@ -4,6 +4,7 @@ import com.bizmatics.common.mvc.base.CrudService;
 import com.bizmatics.model.DeviceAttribute;
 import com.bizmatics.model.RtAnalogData;
 import com.bizmatics.model.SiteDynamicProperties;
+import com.bizmatics.model.vo.EvaluationReporVo;
 import com.bizmatics.service.vo.RadCountVO;
 import com.bizmatics.service.vo.RealScoreOneVO;
 import com.bizmatics.service.vo.RealScoreVO;
@@ -98,4 +99,9 @@ public interface RtAnalogDataService extends CrudService<RtAnalogData> {
      */
     String DataReportExport(Integer siteId,Date startTime, Date endTime,String queryType);
 
+
+    List<RealScoreVO> fillRealScoreDataTwo(List<EvaluationReporVo> evaluationReporVo);
+
+    List<RealScoreVO> evaluationReport(int siteId, Date time, int type);
+
 }

+ 161 - 49
fiveep-service/src/main/java/com/bizmatics/service/impl/RtAnalogDataServiceImpl.java

@@ -11,6 +11,7 @@ import com.bizmatics.common.core.util.*;
 import com.bizmatics.common.mvc.base.AbstractCrudService;
 import com.bizmatics.common.spring.util.GlobalUtils;
 import com.bizmatics.model.*;
+import com.bizmatics.model.vo.EvaluationReporVo;
 import com.bizmatics.persistence.mapper.RtAnalogDataMapper;
 import com.bizmatics.service.DeviceAttributeService;
 import com.bizmatics.service.DeviceService;
@@ -29,6 +30,7 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -115,7 +117,7 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
             return "次";
         } else if (name.endsWith("电度") || name.endsWith("有功")) {
             return "KWh";
-        }else if (name.endsWith("THD")){
+        } else if (name.endsWith("THD")) {
             return "%";
         }
         return "";
@@ -129,7 +131,7 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
             for (String name : rad.keySet()) {
                 Map<String, Object> map = new HashMap<>();
                 map.put("name", name);
-                map.put("value",rad.get(name)+""+addUnitOne(name));
+                map.put("value", rad.get(name) + "" + addUnitOne(name));
                 list.add(map);
             }
         });
@@ -145,50 +147,50 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
     @Override
     public RealScoreVO realScore(String deviceCode) {
         LambdaQueryWrapper<RtAnalogData> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(RtAnalogData::getDeviceName,deviceCode);
+        queryWrapper.eq(RtAnalogData::getDeviceName, deviceCode);
         RtAnalogData rtAnalogData = getOne(queryWrapper);
         Optional.ofNullable(rtAnalogData).orElseThrow(() -> new BusinessException("设备实时信息不存在"));
         //查询设备
         LambdaQueryWrapper<Device> deviceQuery = Wrappers.lambdaQuery();
-        deviceQuery.eq(Device::getDeviceCode,deviceCode);
+        deviceQuery.eq(Device::getDeviceCode, deviceCode);
         Device device = deviceService.getOne(deviceQuery);
         Optional.ofNullable(device).orElseThrow(() -> new BusinessException("设备不存在"));
         //查询sd
         LambdaQueryWrapper<SiteDynamicProperties> sdQuery = Wrappers.lambdaQuery();
-        sdQuery.eq(SiteDynamicProperties::getSiteId,device.getSiteId());
+        sdQuery.eq(SiteDynamicProperties::getSiteId, device.getSiteId());
         SiteDynamicProperties siteDynamicProperties = siteDynamicPropertiesService.getOne(sdQuery);
         Optional.ofNullable(siteDynamicProperties).orElseThrow(() -> new BusinessException("sd不存在"));
         LambdaQueryWrapper<DeviceAttribute> adQuery = Wrappers.lambdaQuery();
-        adQuery.eq(DeviceAttribute::getSiteId,device.getSiteId());
+        adQuery.eq(DeviceAttribute::getSiteId, device.getSiteId());
         List<DeviceAttribute> deviceAttributes = deviceAttributeService.list(adQuery);
-        if (CollectionUtils.isEmpty(deviceAttributes)){
+        if (CollectionUtils.isEmpty(deviceAttributes)) {
             throw new BusinessException("da不存在");
         }
         DeviceAttribute deviceAttribute = deviceAttributes.stream().min(Comparator.comparing(DeviceAttribute::getId)).get();
-        return  fillRealScoreData(rtAnalogData,siteDynamicProperties,deviceAttribute);
+        return fillRealScoreData(rtAnalogData, siteDynamicProperties, deviceAttribute);
     }
 
     @Override
     public RealScoreOneVO realScoreOne(String deviceCode) {
         LambdaQueryWrapper<RtAnalogData> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(RtAnalogData::getDeviceName,deviceCode);
+        queryWrapper.eq(RtAnalogData::getDeviceName, deviceCode);
         RtAnalogData rtAnalogData = getOne(queryWrapper);
         Optional.ofNullable(rtAnalogData).orElseThrow(() -> new BusinessException("设备实时信息不存在"));
         //查询设备
         LambdaQueryWrapper<Device> deviceQuery = Wrappers.lambdaQuery();
-        deviceQuery.eq(Device::getDeviceCode,deviceCode);
+        deviceQuery.eq(Device::getDeviceCode, deviceCode);
         Device device = deviceService.getOne(deviceQuery);
         Optional.ofNullable(device).orElseThrow(() -> new BusinessException("设备不存在"));
         //查询sd
         LambdaQueryWrapper<SiteDynamicProperties> sdQuery = Wrappers.lambdaQuery();
-        sdQuery.eq(SiteDynamicProperties::getSiteId,device.getSiteId());
+        sdQuery.eq(SiteDynamicProperties::getSiteId, device.getSiteId());
         SiteDynamicProperties siteDynamicProperties = siteDynamicPropertiesService.getOne(sdQuery);
         Optional.ofNullable(siteDynamicProperties).orElseThrow(() -> new BusinessException("sd不存在"));
-        return  fillRealScoreDataOne(rtAnalogData,siteDynamicProperties);
+        return fillRealScoreDataOne(rtAnalogData, siteDynamicProperties);
     }
 
     @Override
-    public RealScoreOneVO fillRealScoreDataOne(RtAnalogData rtAnalogData, SiteDynamicProperties siteDynamicProperties){
+    public RealScoreOneVO fillRealScoreDataOne(RtAnalogData rtAnalogData, SiteDynamicProperties siteDynamicProperties) {
         List<Double> checkList = new ArrayList<>();
         RealScoreOneVO realScoreVo = BeanMapperUtils.map(rtAnalogData, RealScoreOneVO.class);
 
@@ -205,14 +207,14 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
         checkList.add(realScoreVo.getUc());
         //ABC三相电压占比
         Double max = checkList.stream().max(Double::compareTo).get();
-        if(max==0.00){
+        if (max == 0.00) {
             realScoreVo.setUaPercentage(0.00);
             realScoreVo.setUbPercentage(0.00);
             realScoreVo.setUcPercentage(0.00);
-        }else {
-            realScoreVo.setUaPercentage(Arith.div(realScoreVo.getUa(),(max/100*20+max)*100));
-            realScoreVo.setUbPercentage(Arith.div(realScoreVo.getUb(),(max/100*20+max)*100));
-            realScoreVo.setUcPercentage(Arith.div(realScoreVo.getUc(),(max/100*20+max)*100));
+        } else {
+            realScoreVo.setUaPercentage(Arith.div(realScoreVo.getUa(), (max / 100 * 20 + max) * 100));
+            realScoreVo.setUbPercentage(Arith.div(realScoreVo.getUb(), (max / 100 * 20 + max) * 100));
+            realScoreVo.setUcPercentage(Arith.div(realScoreVo.getUc(), (max / 100 * 20 + max) * 100));
         }
 
 
@@ -221,25 +223,25 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
         //当前频率
         realScoreVo.setF(realScoreVo.getF());
         //频率偏差
-        if (realScoreVo.getF()==0.00){
+        if (realScoreVo.getF() == 0.00) {
             realScoreVo.setFdeviation(0.00);
-        }else {
+        } else {
             checkList.clear();
             checkList.add(50.00);
             checkList.add(realScoreVo.getF());
             Double max1 = checkList.stream().max(Double::compareTo).get();
             Double min1 = checkList.stream().min(Double::compareTo).get();
-            realScoreVo.setFdeviation(Arith.sub(max1,min1)/50*100);
+            realScoreVo.setFdeviation(Arith.sub(max1, min1) / 50 * 100);
         }
-        if (realScoreVo.getP()==0.00){
+        if (realScoreVo.getP() == 0.00) {
             realScoreVo.setPpercentage(0.00);
-        }else {
-            realScoreVo.setPpercentage(Arith.div(realScoreVo.getP(),realScoreVo.getP()/100*20+realScoreVo.getP()));
+        } else {
+            realScoreVo.setPpercentage(Arith.div(realScoreVo.getP(), realScoreVo.getP() / 100 * 20 + realScoreVo.getP()));
         }
-        if (realScoreVo.getQ()==0.00){
+        if (realScoreVo.getQ() == 0.00) {
             realScoreVo.setQpercentage(0.00);
-        }else {
-            realScoreVo.setQpercentage(Arith.div(realScoreVo.getQ(),realScoreVo.getQ()/100*20+realScoreVo.getQ()));
+        } else {
+            realScoreVo.setQpercentage(Arith.div(realScoreVo.getQ(), realScoreVo.getQ() / 100 * 20 + realScoreVo.getQ()));
         }
 
         realScoreVo.setVoltageLevel(siteDynamicProperties.getVoltageLevel());
@@ -250,11 +252,11 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
      * 填充实时数据
      */
     @Override
-    public RealScoreVO fillRealScoreData(RtAnalogData rtAnalogData, SiteDynamicProperties siteDynamicProperties,DeviceAttribute deviceAttribute){
+    public RealScoreVO fillRealScoreData(RtAnalogData rtAnalogData, SiteDynamicProperties siteDynamicProperties, DeviceAttribute deviceAttribute) {
         List<Double> checkList = new ArrayList<>();
         Integer score = 0;
         RealScoreVO realScoreVo = BeanMapperUtils.map(rtAnalogData, RealScoreVO.class);
-        if (null == realScoreVo.getCos()){
+        if (null == realScoreVo.getCos()) {
             realScoreVo.setCos(0.00);
         }
         checkList.add(realScoreVo.getIa());
@@ -271,13 +273,13 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
         //电压合格率
         double voltageLevel = Double.parseDouble(siteDynamicProperties.getVoltageLevel());
         realScoreVo.setUaQualified(Arith.sub(rtAnalogData.getUa(), voltageLevel));
-        realScoreVo.setUbQualified(Arith.sub(rtAnalogData.getUb(),voltageLevel));
+        realScoreVo.setUbQualified(Arith.sub(rtAnalogData.getUb(), voltageLevel));
         realScoreVo.setUcQualified(Arith.sub(rtAnalogData.getUc(), voltageLevel));
         //电流负载率
         Double ratedCurrent = deviceAttribute.getRatedCurrent();
-        realScoreVo.setIaLoad(Arith.div(realScoreVo.getIa(),ratedCurrent));
-        realScoreVo.setIbLoad(Arith.div(realScoreVo.getIb(),ratedCurrent));
-        realScoreVo.setIcLoad(Arith.div(realScoreVo.getIc(),ratedCurrent));
+        realScoreVo.setIaLoad(Arith.div(realScoreVo.getIa(), ratedCurrent));
+        realScoreVo.setIbLoad(Arith.div(realScoreVo.getIb(), ratedCurrent));
+        realScoreVo.setIcLoad(Arith.div(realScoreVo.getIc(), ratedCurrent));
         //计算分数
         //电压分数
         realScoreVo.setUaQ(computeUScore(realScoreVo.getUaQualified(), voltageLevel));
@@ -285,34 +287,34 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
         realScoreVo.setUcQ(computeUScore(realScoreVo.getUcQualified(), voltageLevel));
         if (realScoreVo.getUaQ() && realScoreVo.getUbQ() && realScoreVo.getUcQ()) {
             realScoreVo.setUQ(true);
-            score+=20;
-        }else {
+            score += 20;
+        } else {
             realScoreVo.setUQ(false);
         }
         //电流分数
         realScoreVo.setIaLoadQ(realScoreVo.getIaLoad() <= 0.8);
         realScoreVo.setIbLoadQ(realScoreVo.getIbLoad() <= 0.8);
         realScoreVo.setIcLoadQ(realScoreVo.getIcLoad() <= 0.8);
-        if (realScoreVo.getIaLoadQ() && realScoreVo.getIbLoadQ() && realScoreVo.getIcLoadQ()){
+        if (realScoreVo.getIaLoadQ() && realScoreVo.getIbLoadQ() && realScoreVo.getIcLoadQ()) {
             realScoreVo.setILoadQ(true);
-            score+=20;
-        }else {
+            score += 20;
+        } else {
             realScoreVo.setILoadQ(false);
         }
         //电压平衡分数
         realScoreVo.setElBalunQ(realScoreVo.getElBalun() <= 0.15);
-        if (realScoreVo.getElBalunQ()){
-            score+=20;
+        if (realScoreVo.getElBalunQ()) {
+            score += 20;
         }
         //电流平衡分数
         realScoreVo.setVtBalunQ(realScoreVo.getVtBalun() <= 0.15);
-        if (realScoreVo.getVtBalunQ()){
-            score+=20;
+        if (realScoreVo.getVtBalunQ()) {
+            score += 20;
         }
         //功率
         realScoreVo.setCosQ(realScoreVo.getCos() <= 0.15);
-        if (realScoreVo.getCosQ()){
-            score+=20;
+        if (realScoreVo.getCosQ()) {
+            score += 20;
         }
         realScoreVo.setScore(score);
         return realScoreVo;
@@ -320,11 +322,12 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
 
     /**
      * 计算电压分数
+     *
      * @return
      */
-    public Boolean computeUScore(Double qualified,Double voltageLevel){
+    public Boolean computeUScore(Double qualified, Double voltageLevel) {
         double mul = Arith.mul(qualified, voltageLevel);
-        if (mul <= 0.07 && mul >= -0.07){
+        if (mul <= 0.07 && mul >= -0.07) {
             return true;
         }
         return false;
@@ -333,17 +336,18 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
 
     /**
      * 计算电流/电压不平衡
+     *
      * @param list
      * @return
      */
-    public Double checkBalun(List<Double> list){
+    public Double checkBalun(List<Double> list) {
         long count = list.stream().filter(code -> 0.00 == code).count();
-        if (3 == count){
+        if (3 == count) {
             return 0.00;
         }
         Double max = list.stream().max(Double::compareTo).get();
         Double min = list.stream().min(Double::compareTo).get();
-        return Arith.div(Arith.sub(max,min),max);
+        return Arith.div(Arith.sub(max, min), max);
     }
 
     /**
@@ -1095,6 +1099,114 @@ public class RtAnalogDataServiceImpl extends AbstractCrudService<RtAnalogDataMap
         return file.getName();
     }
 
+    public static Date getLastDayOfMonth(Date sDate1) {
+        Calendar cDay1 = Calendar.getInstance();
+        cDay1.setTime(sDate1);
+        final int lastDay = cDay1.getActualMaximum(Calendar.DAY_OF_MONTH);
+        Date lastDate = cDay1.getTime();
+        lastDate.setDate(lastDay);
+        return lastDate;
+    }
+
+    @Override
+    public List<RealScoreVO> evaluationReport(int siteId, Date time, int type) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM");
+        String startTime = null;
+        String endtime = null;
+        if (type == 1) {
+            startTime = sdf.format(time) + " 00:00:00";
+            endtime = sdf.format(time) + " 23:59:59";
+        } else {
+            startTime = sdf1.format(time) + "-01 00:00:00";
+            String time1 = sdf1.format(time) + "-01";
+            try {
+                Date yq = getLastDayOfMonth(sdf.parse(time1));
+                endtime = sdf.format(yq) + " 23:59:59";
+            } catch (Exception e) {
+                throw new BusinessException("时间错误");
+            }
+        }
+
+        List<EvaluationReporVo> evaluationReporVo = baseMapper.evaluationReportList(siteId, startTime, endtime);
+        return fillRealScoreDataTwo(evaluationReporVo);
+    }
+
+    @Override
+    public List<RealScoreVO> fillRealScoreDataTwo(List<EvaluationReporVo> evaluationReporVo) {
+        List<RealScoreVO> realScoreVoList = new ArrayList<>();
+        if (evaluationReporVo.size() > 0) {
+            for (int i = 0; i < evaluationReporVo.size(); i++) {
+                List<Double> checkList = new ArrayList<>();
+                Integer score = 0;
+                RealScoreVO realScoreVo = BeanMapperUtils.map(evaluationReporVo.get(i), RealScoreVO.class);
+                if (null == realScoreVo.getCos()) {
+                    realScoreVo.setCos(0.00);
+                }
+                checkList.clear();
+                checkList.add(realScoreVo.getIa());
+                checkList.add(realScoreVo.getIb());
+                checkList.add(realScoreVo.getIc());
+                //电流不平衡
+                realScoreVo.setElBalun(checkBalun(checkList));
+                checkList.clear();
+                checkList.add(realScoreVo.getUa());
+                checkList.add(realScoreVo.getUb());
+                checkList.add(realScoreVo.getUc());
+                //电压不平衡
+                realScoreVo.setVtBalun(checkBalun(checkList));
+                //电压合格率
+                double voltageLevel = Double.parseDouble(evaluationReporVo.get(i).getVoltageLevel());
+                realScoreVo.setUaQualified(Arith.sub(evaluationReporVo.get(i).getUa(), voltageLevel));
+                realScoreVo.setUbQualified(Arith.sub(evaluationReporVo.get(i).getUb(), voltageLevel));
+                realScoreVo.setUcQualified(Arith.sub(evaluationReporVo.get(i).getUc(), voltageLevel));
+                //电流负载率
+                Double ratedCurrent = evaluationReporVo.get(i).getRatedCurrent();
+                realScoreVo.setIaLoad(Arith.div(realScoreVo.getIa(), ratedCurrent));
+                realScoreVo.setIbLoad(Arith.div(realScoreVo.getIb(), ratedCurrent));
+                realScoreVo.setIcLoad(Arith.div(realScoreVo.getIc(), ratedCurrent));
+                //计算分数
+                //电压分数
+                realScoreVo.setUaQ(computeUScore(realScoreVo.getUaQualified(), voltageLevel));
+                realScoreVo.setUbQ(computeUScore(realScoreVo.getUbQualified(), voltageLevel));
+                realScoreVo.setUcQ(computeUScore(realScoreVo.getUcQualified(), voltageLevel));
+                if (realScoreVo.getUaQ() && realScoreVo.getUbQ() && realScoreVo.getUcQ()) {
+                    realScoreVo.setUQ(true);
+                    score += 20;
+                } else {
+                    realScoreVo.setUQ(false);
+                }
+                //电流分数
+                realScoreVo.setIaLoadQ(realScoreVo.getIaLoad() <= 0.8);
+                realScoreVo.setIbLoadQ(realScoreVo.getIbLoad() <= 0.8);
+                realScoreVo.setIcLoadQ(realScoreVo.getIcLoad() <= 0.8);
+                if (realScoreVo.getIaLoadQ() && realScoreVo.getIbLoadQ() && realScoreVo.getIcLoadQ()) {
+                    realScoreVo.setILoadQ(true);
+                    score += 20;
+                } else {
+                    realScoreVo.setILoadQ(false);
+                }
+                //电压平衡分数
+                realScoreVo.setElBalunQ(realScoreVo.getElBalun() <= 0.15);
+                if (realScoreVo.getElBalunQ()) {
+                    score += 20;
+                }
+                //电流平衡分数
+                realScoreVo.setVtBalunQ(realScoreVo.getVtBalun() <= 0.15);
+                if (realScoreVo.getVtBalunQ()) {
+                    score += 20;
+                }
+                //功率
+                realScoreVo.setCosQ(realScoreVo.getCos() <= 0.15);
+                if (realScoreVo.getCosQ()) {
+                    score += 20;
+                }
+                realScoreVo.setScore(score);
+                realScoreVoList.add(realScoreVo);
+            }
+        }
+        return realScoreVoList;
+    }
 
 //    @Override
 //    public String DataReportExport(Integer siteId,Date startTime, Date endTime,String queryType){