소스 검색

三率列表代码提交

wangchangsheng 2 년 전
부모
커밋
1ca1545e71

+ 104 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/controller/threerate/ThreeRateController.java

@@ -0,0 +1,104 @@
+package com.gyee.runeconomy.controller.threerate;
+
+
+import com.gyee.common.model.StringUtils;
+import com.gyee.runeconomy.dto.R;
+import com.gyee.runeconomy.dto.response.FwjslDTO;
+import com.gyee.runeconomy.dto.response.QxjslDTO;
+import com.gyee.runeconomy.service.threerate.ThreeRateService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 三率 前端控制器
+ * </p>
+ *
+ * @author wang
+ * @since 2022-11-22
+ */
+@RestController
+@RequestMapping("//threerate")
+public class ThreeRateController {
+
+
+    @Autowired
+    private ThreeRateService threeRateService;
+
+
+    /**
+     * 复位及时率
+     *
+     * @param beginDate
+     * @param endDate
+     * @return
+     */
+    @GetMapping("/reset-timely-rate")
+    @ResponseBody
+    @CrossOrigin(origins = "*", maxAge = 3600)
+    public R getResetTimelyRateInfo(
+            @RequestParam(value = "regionId", required = false) String regionId,
+            @RequestParam(value = "companyId", required = false) String companyId,
+            @RequestParam(value = "windpowerstationId", required = false) String windpowerstationId,
+            @RequestParam(value = "projectId", required = false) String projectId,
+            @RequestParam(value = "beginDate", required = true) String beginDate,
+            @RequestParam(value = "endDate", required = true) String endDate
+    ) {
+
+        List<FwjslDTO> resultlist = threeRateService.getResetTimelyRateInfo(beginDate, endDate);
+        if (StringUtils.isNotNull(resultlist)) {
+            return R.ok(resultlist.size()).data(resultlist);
+        } else {
+            return R.error().message("访问失败");
+        }
+    }
+
+
+    /**
+     * 状态转换率
+     *
+     * @param beginDate
+     * @param endDate
+     * @return
+     */
+    @GetMapping("/state-conversion-rate")
+    @ResponseBody
+    @CrossOrigin(origins = "*", maxAge = 3600)
+    public R getStateConversionRateInfo(@RequestParam(value = "beginDate", required = true) String beginDate,
+                                        @RequestParam(value = "endDate", required = true) String endDate
+    ) {
+
+        Map<String, List<FwjslDTO>> resultlist = threeRateService.getStateConversionRateInfo(beginDate, endDate);
+        if (StringUtils.isNotNull(resultlist)) {
+            return R.ok(resultlist.size()).data(resultlist);
+        } else {
+            return R.error().message("访问失败");
+        }
+    }
+
+
+    /**
+     * 消缺及时率
+     *
+     * @param beginDate
+     * @param endDate
+     * @return
+     */
+    @GetMapping("/defects-eliminat-rate")
+    @ResponseBody
+    @CrossOrigin(origins = "*", maxAge = 3600)
+    public R getDefectsEliminatRateList(@RequestParam(value = "beginDate", required = true) String beginDate,
+                                        @RequestParam(value = "endDate", required = true) String endDate
+    ) {
+        List<QxjslDTO> resultlist = threeRateService.getDefectsEliminatRateList(beginDate, endDate);
+        if (StringUtils.isNotNull(resultlist)) {
+            return R.ok(resultlist.size()).data(resultlist);
+        } else {
+            return R.error().message("访问失败");
+        }
+    }
+
+}

+ 36 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/dto/response/FwjslDTO.java

@@ -0,0 +1,36 @@
+package com.gyee.runeconomy.dto.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName : FwjslVo
+ * @Author : admin
+ * @Date: 2022-11-23
+ * @Description : 复位及时率Dto
+ * */
+@Data
+public class FwjslDTO implements Serializable {
+    private static final long serialVersionUID = -9120640092604681619L;
+//	--5分钟复位及时次数
+//	--10分钟复位及时次数
+//	--15分钟复位及时次数
+//	--20分钟复位及时次数
+//    --总复位次数
+
+    private Integer ordernum;
+
+    private String wpid;
+    private Date date;
+    private double yfwcs;
+    private double wfz;
+    private double wfzfwl;
+    private double sfz;
+    private double sfzfwl;
+    private double swfz;
+    private double swfzfwl;
+    private double esfz;
+    private double esfzfwl;
+}

+ 17 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/dto/response/QxjslDTO.java

@@ -0,0 +1,17 @@
+package com.gyee.runeconomy.dto.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class QxjslDTO implements Serializable {
+    private static final long serialVersionUID = 6002241313346335418L;
+
+    private Integer ordernum;
+
+    private String wpid;
+    private Long gzCount;
+    private Long xqCount;
+    private Double xqjsl;
+}

+ 29 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/mapper/auto/ProEconEquipmentInfoDay5Mapper.java

@@ -2,6 +2,11 @@ package com.gyee.runeconomy.mapper.auto;
 
 import com.gyee.runeconomy.model.auto.ProEconEquipmentInfoDay5;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,28 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ProEconEquipmentInfoDay5Mapper extends BaseMapper<ProEconEquipmentInfoDay5> {
 
+
+    @Select("select windpowerstation_id," +
+            "sum(TIMERATE20) TIMERATE20," +
+            "sum(TIMERATE16) TIMERATE16," +
+            "sum(TIMERATE17) TIMERATE17," +
+            "sum(TIMERATE18) TIMERATE18," +
+            "sum(TIMERATE19) TIMERATE19 " +
+            "from pro_econ_equipment_info_day5 where " +
+            "record_date>= #{beginDate} and record_date<= #{endDate}" +
+            " group by windpowerstation_id")
+    List<ProEconEquipmentInfoDay5>  selectResetTimelyRateList(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
+
+
+
+    @Select(" select windpowerstation_id," +
+            " sum(TIMERATE13) TIMERATE13,sum(TIMERATE1) TIMERATE1,sum(TIMERATE2) TIMERATE2,sum(TIMERATE3) TIMERATE3,sum(TIMERATE4) TIMERATE4," +
+            " sum(TIMERATE14) TIMERATE14,sum(TIMERATE5) TIMERATE5,sum(TIMERATE6) TIMERATE6,sum(TIMERATE7) TIMERATE7,sum(TIMERATE8)  TIMERATE8," +
+            " sum(TIMERATE15) TIMERATE15,sum(TIMERATE9) TIMERATE9,sum(TIMERATE10) TIMERATE10,sum(TIMERATE11) TIMERATE11,sum(TIMERATE12) TIMERATE12" +
+            " from pro_econ_equipment_info_day5  where" +
+            " record_date>= #{beginDate} and record_date<= #{endDate}" +
+            " group by windpowerstation_id")
+    List<ProEconEquipmentInfoDay5> selectStateConversionRateList(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
 }
+
+

+ 22 - 22
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/model/auto/ProEconEquipmentInfoDay5.java

@@ -66,112 +66,112 @@ public class ProEconEquipmentInfoDay5 extends Model {
     /**
      * 小于3米5分钟转换及时次数
      */
-    private Double timerate1;
+    private double timerate1;
 
     /**
      * 小于3米10分钟转换及时次数
      */
-    private Double timerate2;
+    private double timerate2;
 
     /**
      * 小于3米15分钟转换及时次数
      */
-    private Double timerate3;
+    private double timerate3;
 
     /**
      * 小于3米20分钟转换及时次数
      */
-    private Double timerate4;
+    private double timerate4;
 
     /**
      * 大于3米5分钟转换及时次数
      */
-    private Double timerate5;
+    private double timerate5;
 
     /**
      * 大于3米10分钟转换及时次数
      */
-    private Double timerate6;
+    private double timerate6;
 
     /**
      * 大于3米15分钟转换及时次数
      */
-    private Double timerate7;
+    private double timerate7;
 
     /**
      * 大于3米20分钟转换及时次数
      */
-    private Double timerate8;
+    private double timerate8;
 
     /**
      * 大于4米5分钟转换及时次数
      */
-    private Double timerate9;
+    private double timerate9;
 
     /**
      * 大于4米10分钟转换及时次数
      */
-    private Double timerate10;
+    private double timerate10;
 
     /**
      * 大于4米15分钟转换及时次数
      */
-    private Double timerate11;
+    private double timerate11;
 
     /**
      * 大于4米20分钟转换及时次数
      */
-    private Double timerate12;
+    private double timerate12;
 
     /**
      * 小于3米状态转换总次数
      */
-    private Double timerate13;
+    private double timerate13;
 
     /**
      * 大于3米状态转换总次数
      */
-    private Double timerate14;
+    private double timerate14;
 
     /**
      * 大于4米状态转换总次数
      */
-    private Double timerate15;
+    private double timerate15;
 
     /**
      * 5分钟复位及时次数
      */
-    private Double timerate16;
+    private double timerate16;
 
     /**
      * 10分钟复位及时次数
      */
-    private Double timerate17;
+    private double timerate17;
 
     /**
      * 15分钟复位及时次数
      */
-    private Double timerate18;
+    private double timerate18;
 
     /**
      * 20分钟复位及时次数
      */
-    private Double timerate19;
+    private double timerate19;
 
     /**
      * 总复位次数
      */
-    private Double timerate20;
+    private double timerate20;
 
     /**
      * 故障消缺及时次数
      */
-    private Double timerate21;
+    private double timerate21;
 
     /**
      * 故障消缺总次数
      */
-    private Double timerate22;
+    private double timerate22;
 
 
 }

+ 6 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/IProEconEquipmentInfoDay5Service.java

@@ -3,6 +3,8 @@ package com.gyee.runeconomy.service.auto;
 import com.gyee.runeconomy.model.auto.ProEconEquipmentInfoDay5;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 三率 服务类
@@ -13,4 +15,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IProEconEquipmentInfoDay5Service extends IService<ProEconEquipmentInfoDay5> {
 
+    List<ProEconEquipmentInfoDay5> getResetTimelyRateList(String beginDate, String endDate);
+
+    List<ProEconEquipmentInfoDay5> getStateConversionRateList(String beginDate, String endDate);
+
 }

+ 18 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/impl/ProEconEquipmentInfoDay5ServiceImpl.java

@@ -1,11 +1,15 @@
 package com.gyee.runeconomy.service.auto.impl;
 
+import com.gyee.common.util.DateUtils;
 import com.gyee.runeconomy.model.auto.ProEconEquipmentInfoDay5;
 import com.gyee.runeconomy.mapper.auto.ProEconEquipmentInfoDay5Mapper;
 import com.gyee.runeconomy.service.auto.IProEconEquipmentInfoDay5Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 三率 服务实现类
@@ -17,4 +21,18 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProEconEquipmentInfoDay5ServiceImpl extends ServiceImpl<ProEconEquipmentInfoDay5Mapper, ProEconEquipmentInfoDay5> implements IProEconEquipmentInfoDay5Service {
 
+    @Autowired
+    private ProEconEquipmentInfoDay5Mapper proEconEquipmentInfoDay5Mapper;
+
+    @Override
+    public List<ProEconEquipmentInfoDay5> getResetTimelyRateList(String beginDate, String endDate) {
+        List<ProEconEquipmentInfoDay5> list = proEconEquipmentInfoDay5Mapper.selectResetTimelyRateList(DateUtils.parseDate(beginDate), DateUtils.parseDate(endDate));
+        return list;
+    }
+
+    @Override
+    public List<ProEconEquipmentInfoDay5> getStateConversionRateList(String beginDate, String endDate) {
+        List<ProEconEquipmentInfoDay5> list = proEconEquipmentInfoDay5Mapper.selectStateConversionRateList(DateUtils.parseDate(beginDate), DateUtils.parseDate(endDate));
+        return list;
+    }
 }

+ 28 - 24
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/homepage/EconomyPointHomePageService.java

@@ -82,7 +82,7 @@ public class EconomyPointHomePageService {
 
     private Map<String,BigDecimal> wsdlfx = null;//五损电量分析
 
-    private List<Map<String,BigDecimal>> zhcydl = null;//综合场用电率
+    private List<Map<String,Object>> zhcydl = null;//综合场用电率
 
     private List<Map<String,Object>> dltjfxList = null;//电量统计分析
 
@@ -250,7 +250,7 @@ public class EconomyPointHomePageService {
     private void currThreeRateCurve() {
         threeRateCurvelist.stream().forEach(i->{
             Map<String, Object> m = new HashMap<>();
-            m.put("fejsl",i.getRfwjsl());
+            m.put("fwjsl",i.getRfwjsl());
             m.put("ztzhjsl",i.getRztzhjsl());
             m.put("gzxqjsl",i.getRgzxqjsl());
             m.put("date",DateUtils.toDate1(i.getRecordDate()));
@@ -261,7 +261,7 @@ public class EconomyPointHomePageService {
     private void monthThreeRateCurve() {
         threeRateCurvelist.stream().forEach(i->{
             Map<String, Object> m = new HashMap<>();
-            m.put("fejsl",i.getYfwjsl());
+            m.put("fwjsl",i.getYfwjsl());
             m.put("ztzhjsl",i.getYztzhjsl());
             m.put("gzxqjsl",i.getYgzxqjsl());
             m.put("date",DateUtils.toDate1(i.getRecordDate()));
@@ -272,7 +272,7 @@ public class EconomyPointHomePageService {
     private void yearThreeRateCurve() {
         threeRateCurvelist.stream().forEach(i->{
             Map<String, Object> m = new HashMap<>();
-            m.put("fejsl",i.getNfwjsl());
+            m.put("fwjsl",i.getNfwjsl());
             m.put("ztzhjsl",i.getNztzhjsl());
             m.put("gzxqjsl",i.getNgzxqjsl());
             m.put("date",DateUtils.toDate1(i.getRecordDate()));
@@ -295,7 +295,7 @@ public class EconomyPointHomePageService {
             m.put("sldl", i.getRcwsldwssdl().add(i.getRcwsltqssdl()));  //受累
             m.put("jxdl", i.getRjxssdl()); //检修
             m.put("xddl", i.getRxdtjssdl().add(i.getRxdjclssdl()));//限电
-            m.put("fgzdl", i.getRgzssdl());      //故障
+            m.put("gzdl", i.getRgzssdl());      //故障
             m.put("xndl", i.getRxnssdl());//性能
             m.put("date",DateUtils.toDate1(i.getRecordDate()));
             dltjfxList.add(m);
@@ -309,7 +309,7 @@ public class EconomyPointHomePageService {
             m.put("sldl", i.getYcwsldwssdl().add(i.getRcwsltqssdl()));  //受累
             m.put("jxdl", i.getYjxssdl()); //检修
             m.put("xddl", i.getYxdtjssdl().add(i.getRxdjclssdl()));//限电
-            m.put("fgzdl", i.getYgzssdl());      //故障
+            m.put("gzdl", i.getYgzssdl());      //故障
             m.put("xndl", i.getYxnssdl());//性能
             m.put("date",DateUtils.toDate1(i.getRecordDate()));
             dltjfxList.add(m);
@@ -323,7 +323,7 @@ public class EconomyPointHomePageService {
             m.put("sldl", i.getNcwsldwssdl().add(i.getRcwsltqssdl()));  //受累
             m.put("jxdl", i.getNjxssdl()); //检修
             m.put("xddl", i.getNxdtjssdl().add(i.getRxdjclssdl()));//限电
-            m.put("fgzdl", i.getNgzssdl());      //故障
+            m.put("gzdl", i.getNgzssdl());      //故障
             m.put("xndl", i.getNxnssdl());//性能
             m.put("date",DateUtils.toDate1(i.getRecordDate()));
             dltjfxList.add(m);
@@ -336,11 +336,13 @@ public class EconomyPointHomePageService {
     /**综合厂用电率 */
     private void currZhcydl(){
         zhcydllist.stream().forEach(i->{
-            Map<String,BigDecimal> m = new HashMap<>();
+            Map<String,Object> m = new HashMap<>();
             if(compare0(i.getRfdldb())){
-                m.put(DateUtils.toDate1(i.getRecordDate()), compare100(i.getRzhcydldb().divide(i.getRfdldb(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))));
+                m.put("key",DateUtils.toDate1(i.getRecordDate()));
+                m.put("value", compare100(i.getRzhcydldb().divide(i.getRfdldb(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))));
             }else {
-                m.put(DateUtils.toDate1(i.getRecordDate()),new BigDecimal(0));
+                m.put("key",DateUtils.toDate1(i.getRecordDate()));
+                m.put("value",0);
             }
             zhcydl.add(m);
         });
@@ -348,13 +350,13 @@ public class EconomyPointHomePageService {
 
     private void monthZhcydl(){
         zhcydllist.stream().forEach(i->{
-            Map<String,BigDecimal> m = new HashMap<>();
-
-            if(compare0(i.getRfdldb())){
-                m.put(DateUtils.toDate1(i.getRecordDate()), compare100(i.getYzhcydldb().divide(i.getYfdldb(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))));
-
+            Map<String,Object> m = new HashMap<>();
+            if(compare0(i.getYfdldb())){
+                m.put("key",DateUtils.toDate1(i.getRecordDate()));
+                m.put("value", compare100(i.getYzhcydldb().divide(i.getYfdldb(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))));
             }else {
-                m.put(DateUtils.toDate1(i.getRecordDate()),new BigDecimal(0));
+                m.put("key",DateUtils.toDate1(i.getRecordDate()));
+                m.put("value",0);
             }
             zhcydl.add(m);
         });
@@ -362,11 +364,13 @@ public class EconomyPointHomePageService {
 
     private void yearZhcydl(){
         zhcydllist.stream().forEach(i->{
-            Map<String,BigDecimal> m = new HashMap<>();
-            if(compare0(i.getRfdldb())){
-                m.put(DateUtils.toDate1(i.getRecordDate()), compare100(i.getNzhcydldb().divide(i.getNfdldb(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))));
+            Map<String,Object> m = new HashMap<>();
+            if(compare0(i.getNfdldb())){
+                m.put("key",DateUtils.toDate1(i.getRecordDate()));
+                m.put("value", compare100(i.getNzhcydldb().divide(i.getNfdldb(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))));
             }else {
-                m.put(DateUtils.toDate1(i.getRecordDate()),new BigDecimal(0));
+                m.put("key",DateUtils.toDate1(i.getRecordDate()));
+                m.put("value",0);
             }
             zhcydl.add(m);
         });
@@ -783,13 +787,13 @@ public class EconomyPointHomePageService {
 
         if (null != currTimeInfo) {
 
-            int currhours = DateUtils.hoursDiff(DateUtils.getStartOfDay(new Date()), new Date());
-            BigDecimal currhours2 = new BigDecimal(0.00).valueOf((int) currhours);
+            double currhours = DateUtils.hoursDiff1(new Date(),DateUtils.getStartOfDay(new Date()));
+            BigDecimal currhours2 = new BigDecimal(0.00).valueOf(currhours);
             BigDecimal currSbklyl = currhours2.subtract((currTimeInfo.getRhjgzxsmx().add(currTimeInfo.getRhjjxtjxs()))).divide(currhours2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
             dto.setCurrSbklyl(currSbklyl);
             if (null != ringTimeInfo) {
 
-                int ringhours = DateUtils.hoursDiff(DateUtils.getMonthFirstZero(), new Date());
+                int ringhours = DateUtils.hoursDiff(new Date(),DateUtils.getMonthFirstZero());
                 BigDecimal ringhours2 = new BigDecimal(0.00).valueOf((int) ringhours);
                 BigDecimal ringSbklyl = ringhours2.subtract((ringTimeInfo.getRhjgzxsmx().add(ringTimeInfo.getRhjjxtjxs()))).divide(ringhours2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
                 BigDecimal ringSbklyzzl = (currSbklyl.subtract(ringSbklyl)).divide(ringSbklyl, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
@@ -797,7 +801,7 @@ public class EconomyPointHomePageService {
             }
             if (null != withTimeInfo) {
 
-                int withhours = DateUtils.hoursDiff(DateUtils.getMonthFirstZero(), new Date());
+                int withhours = DateUtils.hoursDiff(new Date(),DateUtils.getYearFirstZero());
                 BigDecimal withhours2 = new BigDecimal(0.00).valueOf((int) withhours);
                 BigDecimal withSbklyl = withhours2.subtract((withTimeInfo.getRhjgzxsmx().add(withTimeInfo.getRhjjxtjxs()))).divide(withhours2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
                 BigDecimal withSbklyzzl = (currSbklyl.subtract(withSbklyl)).divide(withSbklyl, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));

+ 343 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/threerate/ThreeRateService.java

@@ -0,0 +1,343 @@
+package com.gyee.runeconomy.service.threerate;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.common.util.DateUtils;
+import com.gyee.common.util.DoubleUtils;
+import com.gyee.common.util.SortUtils;
+import com.gyee.runeconomy.dto.response.FwjslDTO;
+import com.gyee.runeconomy.dto.response.QxjslDTO;
+import com.gyee.runeconomy.init.CacheContext;
+import com.gyee.runeconomy.model.auto.ProBasicPowerstation;
+import com.gyee.runeconomy.model.auto.ProEconEquipmentInfoDay5;
+import com.gyee.runeconomy.model.auto.ProEconFaultLiminatedefects;
+import com.gyee.runeconomy.service.auto.IProBasicPowerstationService;
+import com.gyee.runeconomy.service.auto.IProEconEquipmentInfoDay5Service;
+import com.gyee.runeconomy.service.auto.IProEconFaultLiminatedefectsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+@Service
+public class ThreeRateService {
+
+    @Autowired
+    private IProEconEquipmentInfoDay5Service proEconEquipmentInfoDay5Service;
+
+    @Autowired
+    private IProBasicPowerstationService proBasicPowerstationService;
+
+    @Autowired
+    private IProEconFaultLiminatedefectsService proEconFaultLiminatedefectsService;
+
+
+    /**
+     * 复位及时率
+     * @param beginDate
+     * @param endDate
+     * @return
+     */
+    public  List<FwjslDTO> getResetTimelyRateInfo(String beginDate, String endDate) {
+        List<FwjslDTO> resultList = new ArrayList<>();
+        List<ProEconEquipmentInfoDay5> list =  proEconEquipmentInfoDay5Service.getResetTimelyRateList( beginDate,  endDate);
+        getData(resultList, list);
+        SortUtils.sort(resultList,"ordernum",SortUtils.ASC);
+        return resultList;
+
+    }
+
+
+
+
+    /**
+     * 状态转换率
+     * @param beginDate
+     * @param endDate
+     * @return
+     */
+    public Map<String, List<FwjslDTO>> getStateConversionRateInfo(String beginDate, String endDate) {
+        Map<String, List<FwjslDTO>> resultMap = new HashMap<>();
+        List<FwjslDTO> resultList1 = new ArrayList<>();
+        List<FwjslDTO> resultList2 = new ArrayList<>();
+        List<FwjslDTO> resultList3 = new ArrayList<>();
+        resultMap.put("小于3米风速",resultList1);
+        resultMap.put("大于3米风速",resultList2);
+        resultMap.put("大于4米风速",resultList3);
+        QueryWrapper<ProEconEquipmentInfoDay5> qw = new QueryWrapper<>();
+        List<ProEconEquipmentInfoDay5> list = proEconEquipmentInfoDay5Service.getStateConversionRateList(beginDate, endDate);
+
+        getData1(resultList1, list);
+        getData2(resultList2, list);
+        getData3(resultList3, list);
+
+
+        SortUtils.sort(resultList1,"ordernum",SortUtils.ASC);
+        SortUtils.sort(resultList2,"ordernum",SortUtils.ASC);
+        SortUtils.sort(resultList3,"ordernum",SortUtils.ASC);
+
+
+        return resultMap;
+    }
+
+
+    /**
+     * 消缺及时率
+     * @param beginDate
+     * @param endDate
+     * @return
+     */
+    public List<QxjslDTO> getDefectsEliminatRateList(String beginDate, String endDate) {
+
+
+        Map<String, Integer> station =  proBasicPowerstationService.list()
+                .stream().collect(Collectors.toMap(ProBasicPowerstation::getId,ProBasicPowerstation::getOrderNum));
+
+
+
+        List<QxjslDTO> resultList = new ArrayList<>();
+        QueryWrapper<ProEconFaultLiminatedefects> qw = new QueryWrapper<>();
+        qw.select("windpowerstation_id,sum(fault_count) faultcount,sum(right_count) rightcount");
+        qw.ge("date_time", DateUtils.parseDate(beginDate)).le("date_time",DateUtils.parseDate(endDate));
+        qw.groupBy("windpowerstation_id");
+        List<ProEconFaultLiminatedefects> faulteliminatedefectsList = proEconFaultLiminatedefectsService.list(qw);
+        AtomicReference<Long> gzCount= new AtomicReference<>((long) 0);
+        AtomicReference<Long> xqCount= new AtomicReference<>((long) 0);
+        faulteliminatedefectsList.stream().forEach(i->{
+            gzCount.updateAndGet(v -> new Long((long) (v + i.getFaultCount())));
+            xqCount.updateAndGet(v -> new Long((long) (v + i.getRightCount())));
+            QxjslDTO vo = new QxjslDTO();
+
+            vo.setOrdernum(station.get(i.getWindpowerstationId()));
+
+
+            vo.setWpid(CacheContext.wpmap.get(i.getWindpowerstationId()).getName());
+            vo.setGzCount(i.getFaultCount().longValue());
+            vo.setXqCount(i.getRightCount().longValue());
+            vo.setXqjsl(i.getFaultCount()!=0? DoubleUtils.getRoundingNum(((double)(i.getRightCount())/(double) (i.getFaultCount())*100.0),2):0.0);
+            resultList.add(vo);
+        });
+        QxjslDTO vo = new QxjslDTO();
+        vo.setWpid("合计");
+
+
+        vo.setOrdernum(station.size()+1);
+
+
+        vo.setGzCount(gzCount.get());
+        vo.setXqCount(xqCount.get());
+        vo.setXqjsl(gzCount.get()!=0?DoubleUtils.getRoundingNum(((double)(xqCount.get())/(double) (gzCount.get())*100.0),2):0.0);
+
+        SortUtils.sort(resultList,"ordernum",SortUtils.ASC);
+
+
+        return resultList;
+    }
+
+
+    private void getData(List<FwjslDTO> resultList, List<ProEconEquipmentInfoDay5> list) {
+
+        Map<String, Integer> station =  proBasicPowerstationService.list()
+                .stream().collect(Collectors.toMap(ProBasicPowerstation::getId,ProBasicPowerstation::getOrderNum));
+
+        AtomicReference<Double> wfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> sfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> swfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> esfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> yfwcs = new AtomicReference<>((double) 0);
+        list.stream().forEach(i -> {
+            wfz.updateAndGet(v -> new Double((double) (v + i.getTimerate16())));
+            sfz.updateAndGet(v -> new Double((double) (v + i.getTimerate17())));
+            swfz.updateAndGet(v -> new Double((double) (v + i.getTimerate18())));
+            esfz.updateAndGet(v -> new Double((double) (v + i.getTimerate19())));
+            yfwcs.updateAndGet(v -> new Double((double) (v + i.getTimerate20())));
+            FwjslDTO vo = new FwjslDTO();
+            vo.setOrdernum(station.get(i.getWindpowerstationId()));
+            vo.setWpid(CacheContext.wpmap.get(i.getWindpowerstationId()).getName());
+            vo.setYfwcs(i.getTimerate20());
+
+            vo.setWfz(i.getTimerate16());
+            vo.setSfz(i.getTimerate17());
+            vo.setSwfz(i.getTimerate18());
+            vo.setEsfz(i.getTimerate19());
+
+            vo.setWfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getWfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setSfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setSwfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSwfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setEsfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getEsfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            resultList.add(vo);
+        });
+        FwjslDTO vo = new FwjslDTO();
+        vo.setWpid("合计");
+
+        vo.setOrdernum(station.size()+1);
+
+        vo.setYfwcs(yfwcs.get());
+        vo.setWfz(wfz.get());
+        vo.setSfz(sfz.get());
+        vo.setSwfz(swfz.get());
+        vo.setEsfz(esfz.get());
+        vo.setWfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getWfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setSfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setSwfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSwfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setEsfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getEsfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        resultList.add(vo);
+    }
+
+    private void getData1(List<FwjslDTO> resultList, List<ProEconEquipmentInfoDay5> list) {
+
+        Map<String, Integer> station =  proBasicPowerstationService.list()
+                .stream().collect(Collectors.toMap(ProBasicPowerstation::getId,ProBasicPowerstation::getOrderNum));
+
+        AtomicReference<Double> wfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> sfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> swfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> esfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> yfwcs = new AtomicReference<>((double) 0);
+        list.stream().forEach(i -> {
+            wfz.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate1() ? 0.00 : i.getTimerate1()))));
+            sfz.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate2() ? 0.00 : i.getTimerate2()))));
+            swfz.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate3() ? 0.00 : i.getTimerate3()))));
+            esfz.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate4() ? 0.00 : i.getTimerate4()))));
+            yfwcs.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate13() ? 0.00 : i.getTimerate13()))));
+            FwjslDTO vo = new FwjslDTO();
+            vo.setOrdernum(station.get(i.getWindpowerstationId()));
+            vo.setWpid(CacheContext.wpmap.get(i.getWindpowerstationId()).getName());
+            vo.setYfwcs(i.getTimerate13());
+
+            vo.setWfz(i.getTimerate1());
+            vo.setSfz(i.getTimerate2());
+            vo.setSwfz(i.getTimerate3());
+            vo.setEsfz(i.getTimerate4());
+
+            vo.setWfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getWfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setSfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setSwfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSwfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setEsfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getEsfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            resultList.add(vo);
+        });
+        FwjslDTO vo = new FwjslDTO();
+        vo.setWpid("合计");
+
+        vo.setOrdernum(station.size()+1);
+        vo.setYfwcs(yfwcs.get());
+        vo.setWfz(wfz.get());
+        vo.setSfz(sfz.get());
+        vo.setSwfz(swfz.get());
+        vo.setEsfz(esfz.get());
+        vo.setWfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getWfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setSfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setSwfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSwfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setEsfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getEsfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        resultList.add(vo);
+    }
+
+    private void getData2(List<FwjslDTO> resultList, List<ProEconEquipmentInfoDay5> list) {
+
+
+        Map<String, Integer> station =  proBasicPowerstationService.list()
+                .stream().collect(Collectors.toMap(ProBasicPowerstation::getId,ProBasicPowerstation::getOrderNum));
+        AtomicReference<Double> wfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> sfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> swfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> esfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> yfwcs = new AtomicReference<>((double) 0);
+        list.stream().forEach(i -> {
+            wfz.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate5() ? 0.00 : i.getTimerate5()))));
+            sfz.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate6() ? 0.00 : i.getTimerate6()))));
+            swfz.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate7() ? 0.00 : i.getTimerate7()))));
+            esfz.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate8() ? 0.00 : i.getTimerate8()))));
+            yfwcs.updateAndGet(v -> new Double((double) (v + (0 == i.getTimerate14() ? 0.00 : i.getTimerate14()))));
+            FwjslDTO vo = new FwjslDTO();
+
+
+            vo.setOrdernum(station.get(i.getWindpowerstationId()));
+            vo.setWpid(CacheContext.wpmap.get(i.getWindpowerstationId()).getName());
+            vo.setYfwcs(i.getTimerate14());
+
+            vo.setWfz(i.getTimerate5());
+            vo.setSfz(i.getTimerate6());
+            vo.setSwfz(i.getTimerate7());
+            vo.setEsfz(i.getTimerate8());
+
+            vo.setWfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getWfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setSfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setSwfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSwfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setEsfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getEsfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            resultList.add(vo);
+        });
+        FwjslDTO vo = new FwjslDTO();
+        vo.setWpid("合计");
+
+        vo.setOrdernum(station.size()+1);
+
+
+        vo.setYfwcs(yfwcs.get());
+        vo.setWfz(wfz.get());
+        vo.setSfz(sfz.get());
+        vo.setSwfz(swfz.get());
+        vo.setEsfz(esfz.get());
+        vo.setWfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getWfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setSfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setSwfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSwfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setEsfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getEsfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        resultList.add(vo);
+    }
+
+    private void getData3(List<FwjslDTO> resultList, List<ProEconEquipmentInfoDay5> list) {
+
+
+        Map<String, Integer> station =  proBasicPowerstationService.list()
+                .stream().collect(Collectors.toMap(ProBasicPowerstation::getId,ProBasicPowerstation::getOrderNum));
+
+
+        AtomicReference<Double> wfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> sfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> swfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> esfz = new AtomicReference<>((double) 0);
+        AtomicReference<Double> yfwcs = new AtomicReference<>((double) 0);
+        list.stream().forEach(i -> {
+            wfz.updateAndGet(v -> new Double((double) (v + i.getTimerate9())));
+            sfz.updateAndGet(v -> new Double((double) (v + i.getTimerate10())));
+            swfz.updateAndGet(v -> new Double((double) (v + i.getTimerate11())));
+            esfz.updateAndGet(v -> new Double((double) (v + i.getTimerate12())));
+            yfwcs.updateAndGet(v -> new Double((double) (v + i.getTimerate15())));
+            FwjslDTO vo = new FwjslDTO();
+
+            vo.setOrdernum(station.get(i.getWindpowerstationId()));
+
+
+            vo.setWpid(CacheContext.wpmap.get(i.getWindpowerstationId()).getName());
+            vo.setYfwcs(i.getTimerate15());
+
+            vo.setWfz(i.getTimerate9());
+            vo.setSfz(i.getTimerate10());
+            vo.setSwfz(i.getTimerate11());
+            vo.setEsfz(i.getTimerate12());
+
+            vo.setWfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getWfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setSfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setSwfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSwfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            vo.setEsfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getEsfz() / vo.getYfwcs() * 100, 2) : 0.0);
+            resultList.add(vo);
+        });
+        FwjslDTO vo = new FwjslDTO();
+        vo.setWpid("合计");
+        vo.setOrdernum(station.size()+1);
+        vo.setYfwcs(yfwcs.get());
+        vo.setWfz(wfz.get());
+        vo.setSfz(sfz.get());
+        vo.setSwfz(swfz.get());
+        vo.setEsfz(esfz.get());
+        vo.setWfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getWfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setSfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setSwfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getSwfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        vo.setEsfzfwl(vo.getYfwcs() != 0 ? DoubleUtils.getRoundingNum(vo.getEsfz() / vo.getYfwcs() * 100, 2) : 0.0);
+        resultList.add(vo);
+    }
+
+}