Browse Source

功率曲线功能

wangchangsheng 2 năm trước cách đây
mục cha
commit
504862e11d

+ 48 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/controller/performance/PerformanceCurvefittingController.java

@@ -0,0 +1,48 @@
+package com.gyee.runeconomy.controller.performance;
+
+
+import com.gyee.common.vo.curve.CurveVo;
+import com.gyee.runeconomy.dto.R;
+import com.gyee.runeconomy.dto.ResultMsg;
+import com.gyee.runeconomy.service.PerformanceCurvefittingService;
+import io.swagger.annotations.Api;
+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("//performance")
+@Api(value = "功率曲线拟合", tags = "功率曲线拟合")
+public class PerformanceCurvefittingController {
+
+
+    @Autowired
+    private PerformanceCurvefittingService performanceCurvefittingService;
+
+    @GetMapping("/curvefitting")
+    @ResponseBody
+    @CrossOrigin(origins = "*", maxAge = 3600)
+    public R curvefitting(@RequestParam(value = "windpowerstationIds", required = true) String windpowerstationIds,
+                          //单风机0,多风机1
+                          @RequestParam(value = "type", required = true) String type,
+                          @RequestParam(value = "dateType", required = true) String dateType
+    ) {
+        Map<String, List<CurveVo>> curvefitting = performanceCurvefittingService.curvefitting(windpowerstationIds, type, dateType);
+
+        if (null != curvefitting) {
+            return R.data(ResultMsg.ok(curvefitting));
+        } else {
+            return R.error(ResultMsg.error());
+        }
+    }
+}

+ 138 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/PerformanceCurvefittingService.java

@@ -0,0 +1,138 @@
+package com.gyee.runeconomy.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.gyee.common.util.DateUtils;
+import com.gyee.common.util.DoubleUtils;
+import com.gyee.common.util.SortUtils;
+import com.gyee.common.vo.curve.CurveVo;
+import com.gyee.runeconomy.init.CacheContext;
+import com.gyee.runeconomy.model.auto.*;
+import com.gyee.runeconomy.service.auto.IProEconWtCurveFittingMonthService;
+import com.gyee.runeconomy.service.auto.IProEconWtCurveFittingService;
+import com.gyee.runeconomy.service.auto.IProEconWtCurveFittingYearService;
+import com.gyee.runeconomy.util.redis.RedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+@Service
+public class PerformanceCurvefittingService {
+
+
+    @Resource
+    private RedisService redisService;
+
+    @Autowired
+    private IProEconWtCurveFittingService proEconWtCurveFittingService;
+
+
+    @Autowired
+    private IProEconWtCurveFittingMonthService proEconWtCurveFittingMonthService;
+
+    @Autowired
+    private IProEconWtCurveFittingYearService proEconWtCurveFittingYearService;
+
+
+    public Map<String, List<CurveVo>> curvefitting(String windpowerstationIds, String type,String dateType) {
+        Map<String, List<CurveVo>> resultMap = new HashMap<>();
+        Map<String, ProBasicEquipment> wtmap = CacheContext.wtmap;
+
+        String zbzgl = redisService.get("ZBZGL");
+        Map<String, Map<Double, Double>> zbzglMap = JSONObject.parseObject(zbzgl, new TypeReference<Map<String, Map<Double, Double>>>() {
+        });
+        Map<String,Map<Double,Double>> zzsglMap = getWtCurveFitting(windpowerstationIds,dateType);
+        if (type.equals("0")){
+            List<CurveVo> tempList = new ArrayList<>();
+            if (zzsglMap.containsKey(windpowerstationIds)){
+                Map<Double, Double> zsglmap = zzsglMap.get(windpowerstationIds);
+                Map<Double, Double> bzglmap = zbzglMap.get(wtmap.get(windpowerstationIds).getModelId());
+                Set<Double> speeds = zsglmap.keySet();
+                speeds.stream().forEach(speed->{
+                    CurveVo vo = new CurveVo();
+                    vo.setWtid(windpowerstationIds);
+                    vo.setSpeed(speed);
+                    vo.setTheorypower(DoubleUtils.keepPrecision(zsglmap.get(speed),2));
+                    vo.setEnsurepower(DoubleUtils.keepPrecision(bzglmap.containsKey(speed)?bzglmap.get(speed):zsglmap.get(speed),2));
+                    tempList.add(vo);
+                });
+                SortUtils.sort(tempList,"speed",SortUtils.ASC);
+                resultMap.put(windpowerstationIds,tempList);
+            }
+        }else {
+            String[] wts = windpowerstationIds.split(",");
+            Arrays.stream(wts).forEach(wt->{
+                List<CurveVo> tempList = new ArrayList<>();
+                if(zzsglMap.get(wt) == null || zzsglMap.size() == 0)
+                    return;
+                Map<Double, Double> zsglmap = zzsglMap.get(wt);
+                Set<Double> speeds = zsglmap.keySet();
+                speeds.stream().forEach(speed->{
+                    CurveVo vo = new CurveVo();
+                    vo.setWtid(wt);
+                    vo.setSpeed(speed);
+                    vo.setTheorypower(DoubleUtils.keepPrecision(zsglmap.get(speed),2));
+                    tempList.add(vo);
+                });
+                SortUtils.sort(tempList,"speed",SortUtils.ASC);
+                resultMap.put(wt,tempList);
+            });
+        }
+
+        return null;
+    }
+
+
+    /**
+     * 获取风机拟合曲线
+     *
+     * @return
+     */
+    private Map<String, Map<Double, Double>> getWtCurveFitting(String powerstationIds, String dateType) {
+
+        String[] wts = powerstationIds.split(",");
+        Map<String, Map<Double, Double>> zzsglMap = new HashMap<>();
+        String strdate = DateUtils.toDate1(new Date());
+        Date date = DateUtils.parseDate(strdate);
+        Calendar calendar = Calendar.getInstance();
+
+        int year = calendar.get(Calendar.YEAR);
+        int month = calendar.get(Calendar.MONTH) + 1;
+        Arrays.stream(wts).forEach(wt -> {
+            Map<Double, Double> doubleMap = new HashMap<>();
+            switch (dateType) {
+
+                case "1":
+                    List<ProEconWtCurveFitting> daylist = proEconWtCurveFittingService.getProEconWtCurveFittingList(wt,date);
+
+                    daylist.stream().forEach(w -> {
+                        doubleMap.put(w.getSpeed(), w.getActualPower());
+                    });
+                    zzsglMap.put(wt, doubleMap);
+                    break;
+                case "2":
+                    List<ProEconWtCurveFittingMonth> monthlist = proEconWtCurveFittingMonthService.getProEconWtCurveFittingMonthList(wt,String.valueOf(month),String.valueOf(year));
+
+                    monthlist.stream().forEach(w -> {
+                        doubleMap.put(w.getSpeed(), w.getActualPower());
+                    });
+                    zzsglMap.put(wt, doubleMap);
+                    break;
+                case "3":
+                    List<ProEconWtCurveFittingYear>  yearslist = proEconWtCurveFittingYearService.getProEconWtCurveFittingYearList(wt,String.valueOf(year));
+
+                    yearslist.stream().forEach(w -> {
+                        doubleMap.put(w.getSpeed(), w.getActualPower());
+                    });
+                    zzsglMap.put(wt, doubleMap);
+                    break;
+            }
+        });
+
+        return zzsglMap;
+    }
+
+
+}

+ 5 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/IProEconWtCurveFittingMonthService.java

@@ -3,6 +3,8 @@ package com.gyee.runeconomy.service.auto;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gyee.runeconomy.model.auto.ProEconWtCurveFittingMonth;
 
+import java.util.List;
+
 /**
  * <p>
  * 风电机月拟合曲线 服务类
@@ -14,4 +16,7 @@ import com.gyee.runeconomy.model.auto.ProEconWtCurveFittingMonth;
 public interface IProEconWtCurveFittingMonthService extends IService<ProEconWtCurveFittingMonth> {
 
     public int deleteProEconWtCurveFittingByMonth(String year, String month);
+
+
+    List<ProEconWtCurveFittingMonth> getProEconWtCurveFittingMonthList(String windturbineId, String month,String year);
 }

+ 4 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/IProEconWtCurveFittingService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.gyee.runeconomy.model.auto.ProEconWtCurveFitting;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -16,4 +17,7 @@ import java.util.Date;
 public interface IProEconWtCurveFittingService extends IService<ProEconWtCurveFitting> {
 
     public int deleteProEconWtCurveFittingByDay(Date recodedate);
+
+
+    List<ProEconWtCurveFitting> getProEconWtCurveFittingList(String windturbineId,Date recordDate);
 }

+ 4 - 0
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/IProEconWtCurveFittingYearService.java

@@ -3,6 +3,8 @@ package com.gyee.runeconomy.service.auto;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gyee.runeconomy.model.auto.ProEconWtCurveFittingYear;
 
+import java.util.List;
+
 /**
  * <p>
  * 风电机年拟合曲线 服务类
@@ -14,4 +16,6 @@ import com.gyee.runeconomy.model.auto.ProEconWtCurveFittingYear;
 public interface IProEconWtCurveFittingYearService extends IService<ProEconWtCurveFittingYear> {
 
     public int deleteProEconWtCurveFittingByYear(String year);
+
+    List<ProEconWtCurveFittingYear> getProEconWtCurveFittingYearList(String windturbineId, String year);
 }

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

@@ -1,12 +1,15 @@
 package com.gyee.runeconomy.service.auto.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.common.model.StringUtils;
 import com.gyee.runeconomy.mapper.auto.ProEconWtCurveFittingMonthMapper;
 import com.gyee.runeconomy.model.auto.ProEconWtCurveFittingMonth;
 import com.gyee.runeconomy.service.auto.IProEconWtCurveFittingMonthService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * <p>
@@ -25,4 +28,25 @@ public class ProEconWtCurveFittingMonthServiceImpl extends ServiceImpl<ProEconWt
 
         return proEconWtCurveFittingMonthMapper.deleteProEconWtCurveFittingByMonth(year,month);
     }
+
+    @Override
+    public List<ProEconWtCurveFittingMonth> getProEconWtCurveFittingMonthList(String windturbineId, String month,String year) {
+
+        QueryWrapper<ProEconWtCurveFittingMonth> qw = new QueryWrapper<>();
+        if (StringUtils.isNotEmpty(windturbineId)) {
+            qw.lambda().eq(ProEconWtCurveFittingMonth::getWindturbineId, windturbineId);
+        }
+
+        if (StringUtils.isNotEmpty(month)) {
+            qw.lambda().eq(ProEconWtCurveFittingMonth::getMonth, month);
+        }
+
+        if (StringUtils.isNotEmpty(year)) {
+            qw.lambda().eq(ProEconWtCurveFittingMonth::getYear, year);
+        }
+        qw.lambda().orderByAsc(ProEconWtCurveFittingMonth::getSpeed);
+        List<ProEconWtCurveFittingMonth> list = baseMapper.selectList(qw);
+
+        return list;
+    }
 }

+ 21 - 1
web/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/impl/ProEconWtCurveFittingServiceImpl.java

@@ -1,5 +1,7 @@
 package com.gyee.runeconomy.service.auto.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.common.model.StringUtils;
 import com.gyee.runeconomy.model.auto.ProEconWtCurveFitting;
 import com.gyee.runeconomy.mapper.auto.ProEconWtCurveFittingMapper;
 import com.gyee.runeconomy.service.auto.IProEconWtCurveFittingService;
@@ -8,6 +10,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -26,6 +29,23 @@ public class ProEconWtCurveFittingServiceImpl extends ServiceImpl<ProEconWtCurve
 
     @Override
     public int deleteProEconWtCurveFittingByDay(Date recodedate) {
-        return  proEconWtCurveFittingMapper.deleteProEconWtCurveFittingByDay(recodedate);
+        return proEconWtCurveFittingMapper.deleteProEconWtCurveFittingByDay(recodedate);
+    }
+
+    @Override
+    public List<ProEconWtCurveFitting> getProEconWtCurveFittingList(String windturbineId, Date recordDate) {
+        QueryWrapper<ProEconWtCurveFitting> qw = new QueryWrapper<>();
+        if (StringUtils.isNotEmpty(windturbineId)) {
+            qw.lambda().eq(ProEconWtCurveFitting::getWindturbineId, windturbineId);
+        }
+
+        if (null != recordDate) {
+            qw.lambda().eq(ProEconWtCurveFitting::getRecordDate, recordDate);
+        }
+
+        qw.lambda().orderByAsc(ProEconWtCurveFitting::getSpeed);
+        List<ProEconWtCurveFitting> list = baseMapper.selectList(qw);
+
+        return list;
     }
 }

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

@@ -1,12 +1,15 @@
 package com.gyee.runeconomy.service.auto.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.common.model.StringUtils;
 import com.gyee.runeconomy.mapper.auto.ProEconWtCurveFittingYearMapper;
 import com.gyee.runeconomy.model.auto.ProEconWtCurveFittingYear;
 import com.gyee.runeconomy.service.auto.IProEconWtCurveFittingYearService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * <p>
@@ -24,4 +27,20 @@ public class ProEconWtCurveFittingYearServiceImpl extends ServiceImpl<ProEconWtC
     public int deleteProEconWtCurveFittingByYear(String year) {
         return proEconWtCurveFittingYearMapper.deleteProEconWtCurveFittingByYear(year);
     }
+
+    @Override
+    public List<ProEconWtCurveFittingYear> getProEconWtCurveFittingYearList(String windturbineId, String year) {
+        QueryWrapper<ProEconWtCurveFittingYear> qw = new QueryWrapper<>();
+        if (StringUtils.isNotEmpty(windturbineId)) {
+            qw.lambda().eq(ProEconWtCurveFittingYear::getWindturbineId, windturbineId);
+        }
+
+        if (StringUtils.isNotEmpty(year)) {
+            qw.lambda().eq(ProEconWtCurveFittingYear::getYear, year);
+        }
+        qw.lambda().orderByAsc(ProEconWtCurveFittingYear::getSpeed);
+        List<ProEconWtCurveFittingYear> list = baseMapper.selectList(qw);
+
+        return list;
+    }
 }