123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740 |
- package com.gyee.generation.service;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.gyee.common.contant.ContantXk;
- import com.gyee.common.model.PointData;
- import com.gyee.generation.init.CacheContext;
- import com.gyee.generation.model.auto.*;
- import com.gyee.generation.model.vo.*;
- import com.gyee.generation.service.auto.*;
- import com.gyee.generation.util.DateUtils;
- import com.gyee.generation.util.StringUtils;
- import com.gyee.generation.util.realtimesource.IEdosUtil;
- import com.gyee.generation.util.realtimesource.math.LineUtil;
- import com.gyee.generation.util.redis.RedisService;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.util.*;
- import java.util.stream.Collectors;
- @Service
- public class PowerCurveFittingByTimeService {
- private static final Logger logger = LoggerFactory.getLogger(PowerCurveFittingByTimeService.class);
- @Resource
- private IEdosUtil edosUtil;
- @Value("${curvefitting.dimension}")
- private Integer dimension;
- @Value("${curvefitting.scale}")
- private Double scale;
- @Value("${initialcode}")
- private String initialcode;
- public Map<String, Double> windturbineCapacity;
- @Resource
- private RedisService redisService;
- @Resource
- private IProEconWtCurveFittingMonthService proEconWtCurveFittingMonthService;
- @Resource
- private IProEconWtCurveFittingYearService proEconWtCurveFittingYearService;
- @Resource
- private IProEconWtCurveFittingService proEconWtCurveFittingService;
- @Resource
- private IProEconCurveFittingMainService proEconCurveFittingMainService;
- @Resource
- private IProEconCurveFittingSubService proEconCurveFittingSubService;
- @Resource
- private IProEconCurveFittMonthMainService proEconCurveFittMonthMainService;
- @Resource
- private IProEconCurveFittMonthSubService proEconCurveFittMonthSubService;
- @Resource
- private IProEconWtPowerCurveFittingService proEconWtPowerCurveFittingService;
- @Resource
- private IProEconCurveFittYearSubService proEconCurveFittYearSubService;
- @Resource
- private IProEconCurveFittYearMainService proEconCurveFittYearMainService;
- public void cureFittingDay(Date recordDate) throws Exception {
- //日期变为昨天
- Date end = DateUtils.addDays(DateUtils.truncate(recordDate), -1);
- Calendar c = Calendar.getInstance();
- c.setTime(end);
- Date begin = DateUtils.addDays(end, -6);
- proEconWtCurveFittingService.deleteProEconWtCurveFittingFByDay(DateUtils.truncate(recordDate));
- proEconCurveFittingMainService.deleteProEconCurveFittingMainFByDay(DateUtils.truncate(recordDate));
- proEconCurveFittingSubService.deleteProEconCurveFittingSubFByDay(DateUtils.truncate(recordDate));
- Map<String, CureFittingVo> windMap = new HashMap<>();
- //初始化风机装机容量
- if (windturbineCapacity == null) {
- windturbineCapacity = new HashMap<>();
- Map<String, ProEconEquipmentmodel> modelMap = CacheContext.modelMap;
- for (ProBasicEquipment windturbine : CacheContext.wtls) {
- if (modelMap.containsKey(windturbine.getModelId())) {
- windturbineCapacity.put(windturbine.getId(), modelMap.get(windturbine.getModelId()).getPowerProduction());
- }
- }
- }
- for (ProBasicEquipment wt : CacheContext.wtls) {
- String windturbineId = wt.getId();
- if(wt.getWindpowerstationId().contains(WpType.GDC.id))
- {
- continue;
- }
- Map<String, ProBasicEquipmentPoint> windturbinetestingpointnewMap = CacheContext.wtpAimap.get(wt.getId());
- //设备有功功率
- String pointIdGL = null;
- //设备明细状态
- String pointIdZT = null;
- String pointIdFS = null;
- if (windturbinetestingpointnewMap.containsKey(ContantXk.CJ_SSFS)) {
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.CJ_SSFS).getNemCode();
- }
- if (windturbinetestingpointnewMap.containsKey(ContantXk.CJ_SSGL)) {
- pointIdGL = windturbinetestingpointnewMap.get(ContantXk.CJ_SSGL).getNemCode();
- }
- if (windturbinetestingpointnewMap.containsKey(ContantXk.MXZT)) {
- pointIdZT = windturbinetestingpointnewMap.get(ContantXk.MXZT).getNemCode();
- }
- CureFittingVo item = new CureFittingVo();
- item.setPointIdFS(pointIdFS);
- item.setPointIdZT(pointIdZT);
- item.setPointIdGL(pointIdGL);
- //获取标杆风机编号
- if (CacheContext.wtstandardmap.containsKey(wt.getId())) {
- item.setStandardId(CacheContext.wtstandardmap.get(wt.getId()));
- } else {
- item.setStandardId(wt.getId());
- }
- windMap.put(windturbineId, item);
- }
- for (String key : windMap.keySet()) {
- //初始化集合
- windMap.get(key).setYsjglPoints(new ArrayList<>());
- windMap.get(key).setYzyglPoints(new ArrayList<>());
- windMap.get(key).setRsjglPoints(new ArrayList<>());
- windMap.get(key).setRzyglPoints(new ArrayList<>());
- windMap.get(key).setNsjglPoints(new ArrayList<>());
- windMap.get(key).setNzyglPoints(new ArrayList<>());
- if (windMap.get(key).getPointIdGL() == null || windMap.get(key).getPointIdFS() == null || windMap.get(key).getPointIdZT() == null) {
- logger.info(key);
- continue;
- }
- //拟合日功率曲线
- curveFittingBuilder(begin, end, dimension, scale, windMap.get(key).getPointIdGL(), windMap.get(key).getPointIdFS(), windMap.get(key).getPointIdZT(), windMap.get(key).getRsjglPoints(), windMap.get(key).getRzyglPoints(), key);
- List<PointVo> vos = windMap.get(key).getRsjglPoints().stream().filter(it -> it.getX() >= 0 && it.getX() <= 25).sorted(Comparator.comparing(PointVo::getX)).collect(Collectors.toList());
- windMap.get(key).setRsjglPoints(vos);
- vos = windMap.get(key).getRzyglPoints().stream().filter(it -> it.getX() >= 0 && it.getX() <= 25).sorted(Comparator.comparing(PointVo::getX)).collect(Collectors.toList());
- windMap.get(key).setRzyglPoints(vos);
- }
- List<ProEconCurveFittingMain> mainls=new ArrayList<>();
- for (String key : windMap.keySet()) {
- Double modelpower = 1500.0;
- if (windturbineCapacity.containsKey(key)) {
- modelpower = windturbineCapacity.get(key);
- }
- //日的昨天
- List<PointVo> dayLastMonthPoints = new ArrayList<>();
- //日的去年同期
- List<PointVo> dayLastYearPoints = new ArrayList<>();
- //日标准功率
- List<PointVo> dayStandardPoints = new ArrayList<>();
- //保证功率
- List<PointVo> bzglpowerPoints = new ArrayList<>();
- if (CacheContext.wtstandardmap.containsKey(key)) {
- String standardId = CacheContext.wtstandardmap.get(key);
- if (StringUtils.notEmp(standardId)) {
- if (windMap.containsKey(key)) {
- dayStandardPoints = windMap.get(standardId).getRsjglPoints();
- }
- }
- }
- //*********************************************日曲线偏差上个日和上一年记录**********************************************************/
- Date d1 = DateUtils.addDays(recordDate, -1);
- Date d2 = DateUtils.addYears(recordDate, -1);
- QueryWrapper<ProEconWtCurveFitting> queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("record_date",d1).eq("windturbine_id",key);
- List<ProEconWtCurveFitting> wcfls = proEconWtCurveFittingService.list(queryWrapper)
- .stream()
- // .filter(i -> i.getWindturbineId().equals(key) &&
- // i.getRecordDate().compareTo(d1) == 0)
- .sorted(Comparator.comparing(ProEconWtCurveFitting::getSpeed)).collect(Collectors.toList());
- dayBuildPoints(wcfls, dayLastMonthPoints);
- QueryWrapper<ProEconWtCurveFitting> queryWrapper2 = new QueryWrapper<>();
- queryWrapper2.eq("record_date",d2).eq("windturbine_id",key);
- wcfls = proEconWtCurveFittingService.list(queryWrapper2).stream()
- // .filter(i -> i.getWindturbineId().equals(key) &&
- // i.getRecordDate().compareTo(d2) == 0)
- .sorted(Comparator.comparing(ProEconWtCurveFitting::getSpeed)).collect(Collectors.toList());
- //与轶总的原始代码对比不一致,临时修改测试
- dayBuildPoints(wcfls, dayLastMonthPoints);
- //*********************************************日曲线偏差上个月和上一年记录**********************************************************/
- if (CacheContext.wtmap.containsKey(key)) {
- String modelid = CacheContext.wtmap.get(key).getModelId();
- if (StringUtils.notEmp(modelid)) {
- //获取模型功率曲线
- if (CacheContext.theoreticalPowerMap.containsKey(modelid)) {
- for (Double speed : CacheContext.theoreticalPowerMap.get(modelid).keySet()) {
- PointVo point = new PointVo();
- point.setX(speed);
- point.setY(CacheContext.theoreticalPowerMap.get(modelid).get(speed).getEnsurePower());
- bzglpowerPoints.add(point);
- }
- }
- }
- }
- //*********************************************当日曲线偏差记录**********************************************************/
- QueryWrapper<ProEconCurveFittingMain> queryWrapper3 = new QueryWrapper<>();
- queryWrapper3.eq("record_date",recordDate).eq("windturbine_id",key);
- Optional<ProEconCurveFittingMain> cfmdayo = proEconCurveFittingMainService.list(queryWrapper3).stream()
- // .filter(i -> i.getWindturbineId().equals(key)
- // && i.getRecordDate().compareTo(recordDate) == 0)
- .findFirst();
- ProEconCurveFittingMain cfmday;
- if (cfmdayo.isPresent()) {
- cfmday = cfmdayo.get();
- QueryWrapper<ProEconCurveFittingMain> wrapper = new QueryWrapper<>();
- wrapper.eq("id", cfmday.getId());
- proEconCurveFittingMainService.remove(wrapper);
- }
- cfmday = new ProEconCurveFittingMain();
- cfmday.setWindturbineId(key);
- cfmday.setRecordDate(DateUtils.truncate(recordDate));
- //日---实际/最优
- cfmday.setDeviationRate1(pcl(windMap.get(key).getRsjglPoints(), windMap.get(key).getRzyglPoints(), modelpower));
- //日---实际/保证
- cfmday.setDeviationRate2(pcl(windMap.get(key).getRsjglPoints(), bzglpowerPoints, modelpower));
- //日---最优/保证
- cfmday.setDeviationRate3(pcl(windMap.get(key).getRzyglPoints(), bzglpowerPoints, modelpower));
- //日---实际/上日实际
- cfmday.setMonthDeviationRate(pcl(windMap.get(key).getRsjglPoints(), dayLastMonthPoints, modelpower));
- //日---实际/同期实际
- cfmday.setYearDeviationRate(pcl(windMap.get(key).getRsjglPoints(), dayLastYearPoints, modelpower));
- //日---实际/标杆实际
- cfmday.setStandardDeviationRate(pcl(windMap.get(key).getRsjglPoints(), dayStandardPoints, modelpower));
- mainls.add(cfmday);
- //proEconCurveFittingMainService.save(cfmday);
- //*********************************************当日曲线偏差记录**********************************************************/
- List<ProEconCurveFittingSub> subls=new ArrayList<>();
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 3, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 4, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 5, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 6, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 7, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 8, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 9, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 10, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 11, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 12, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- subls.add(pLCBuild(key, recordDate, windMap, modelpower, 13, bzglpowerPoints, dayLastMonthPoints, dayLastYearPoints, dayStandardPoints));
- proEconCurveFittingSubService.saveBatch(subls);
- insertPoints(recordDate, windMap.get(key).getRsjglPoints(), windMap.get(key).getRzyglPoints(), key);
- logger.info(key);
- //
- // logger.info(String.format("{1}:更新sqlserver数据库记录数:{0}", z, new Date()));
- }
- proEconCurveFittingMainService.saveBatch(mainls);
- }
- public void cureFittingMonth(Date recordDate,String type) throws Exception {
- //日期变为昨天
- Date end = DateUtils.addDays(DateUtils.truncate(recordDate), -1);
- Calendar c = Calendar.getInstance();
- c.setTime(recordDate);
- int day_year = c.get(Calendar.YEAR);
- int day_month = c.get(Calendar.MONTH) + 1;
- proEconWtCurveFittingMonthService.deleteProEconWtCurveFittingFByMonth(String.valueOf(day_year),String.valueOf(day_month));
- proEconCurveFittMonthMainService.deleteProEconCurveFittMonthMainFByMonth(String.valueOf(day_year),String.valueOf(day_month));
- proEconCurveFittMonthSubService.deleteProEconCurveFittMonthSubFByMonth(String.valueOf(day_year),String.valueOf(day_month));
- c.set(Calendar.DAY_OF_MONTH, 1);
- Date begin = c.getTime();
- //上个月
- c.setTime(DateUtils.addMonths(begin, -1));
- int month_year = c.get(Calendar.YEAR);
- int month_month = c.get(Calendar.MONTH) + 1;
- //去年同期
- c.setTime(DateUtils.addYears(begin, -1));
- int year_year = c.get(Calendar.YEAR);
- int year_month = c.get(Calendar.MONTH) + 1;
- Map<String, CureFittingVo> windMap = new HashMap<>();
- if (windturbineCapacity == null) {
- windturbineCapacity = new HashMap<>();
- Map<String, ProEconEquipmentmodel> modelMap = CacheContext.modelMap;
- for (ProBasicEquipment windturbine : CacheContext.wtls) {
- if (modelMap.containsKey(windturbine.getModelId())) {
- windturbineCapacity.put(windturbine.getId(), modelMap.get(windturbine.getModelId()).getPowerProduction());
- }
- }
- }
- for (ProBasicEquipment wt : CacheContext.wtls) {
- String windturbineId = wt.getId();
- if(wt.getWindpowerstationId().contains(WpType.GDC.id))
- {
- continue;
- }
- Map<String, ProBasicEquipmentPoint> windturbinetestingpointnewMap = CacheContext.wtpAimap.get(wt.getId());
- //设备有功功率
- String pointIdGL = windturbinetestingpointnewMap.get(ContantXk.CJ_SSGL).getNemCode();
- //设备明细状态
- String pointIdZT = windturbinetestingpointnewMap.get(ContantXk.MXZT).getNemCode();
- String pointIdFS;
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) { //测风塔70米风速
- if (windturbinetestingpointnewMap.containsKey(ContantXk.FCCFTFS70)) {
- ProBasicEquipmentPoint point = windturbinetestingpointnewMap.get(ContantXk.FCCFTFS70);
- if (StringUtils.notEmp(point.getNemCode()) && !point.getNemCode().equals(initialcode)) {
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.FCCFTFS70).getNemCode();
- } else {
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.CJ_SSFS).getNemCode();
- }
- } else {
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.CJ_SSFS).getNemCode();
- }
- } else { //设备风速
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.CJ_SSFS).getNemCode();
- }
- CureFittingVo item = new CureFittingVo();
- item.setPointIdFS(pointIdFS);
- item.setPointIdZT(pointIdZT);
- item.setPointIdGL(pointIdGL);
- //获取标杆风机编号
- if (CacheContext.wtstandardmap.containsKey(wt.getId())) {
- item.setStandardId(CacheContext.wtstandardmap.get(wt.getId()));
- } else {
- item.setStandardId(wt.getId());
- }
- windMap.put(windturbineId, item);
- }
- for (String key : windMap.keySet()) {
- //初始化集合
- windMap.get(key).setYsjglPoints(new ArrayList<>());
- windMap.get(key).setYzyglPoints(new ArrayList<>());
- windMap.get(key).setRsjglPoints(new ArrayList<>());
- windMap.get(key).setRzyglPoints(new ArrayList<>());
- windMap.get(key).setNsjglPoints(new ArrayList<>());
- windMap.get(key).setNzyglPoints(new ArrayList<>());
- if (windMap.get(key).getPointIdGL() == null || windMap.get(key).getPointIdFS() == null || windMap.get(key).getPointIdZT() == null) {
- logger.info(key);
- continue;
- }
- //拟合月功率曲线
- curveFittingBuilder(begin, end, dimension, scale, windMap.get(key).getPointIdGL(), windMap.get(key).getPointIdFS(), windMap.get(key).getPointIdZT(), windMap.get(key).getYsjglPoints(), windMap.get(key).getYzyglPoints(), key);
- List<PointVo> vos = windMap.get(key).getYsjglPoints().stream().filter(it -> it.getX() >= 0 && it.getX() <= 25).sorted(Comparator.comparing(PointVo::getX)).collect(Collectors.toList());
- windMap.get(key).setYsjglPoints(vos);
- vos = windMap.get(key).getYzyglPoints().stream().filter(it -> it.getX() >= 0 && it.getX() <= 25).sorted(Comparator.comparing(PointVo::getX)).collect(Collectors.toList());
- windMap.get(key).setYzyglPoints(vos);
- }
- List<ProEconCurveFittMonthMain> mainls=new ArrayList<>();
- for (String key : windMap.keySet()) {
- Double modelpower = 1500.0;
- if (windturbineCapacity.containsKey(key)) {
- modelpower = windturbineCapacity.get(key);
- }
- //月的上月
- List<PointVo> monthLastMonthPoints = new ArrayList<>();
- //月的去年同期
- List<PointVo> monthLastYearPoints = new ArrayList<>();
- //月标准功率
- List<PointVo> monthStandardPoints = new ArrayList<>();
- //保证功率
- List<PointVo> bzglpowerPoints = new ArrayList<>();
- if (CacheContext.wtstandardmap.containsKey(key)) {
- String standardId = CacheContext.wtstandardmap.get(key);
- if (StringUtils.notEmp(standardId)) {
- if (windMap.containsKey(key)) {
- monthStandardPoints = windMap.get(standardId).getYsjglPoints();
- }
- }
- }
- String stringyear = String.valueOf(day_year);
- String stringmonth = String.valueOf(day_month);
- String stringyear2 = String.valueOf(month_year);
- String stringmonth2 = String.valueOf(month_month);
- String stringyear3 = String.valueOf(year_year);
- String stringmonth3 = String.valueOf(year_month);
- //*********************************************月曲线偏差上个月和上一年记录**********************************************************/
- QueryWrapper<ProEconWtCurveFittingMonth> queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("year",stringyear2).eq("month",stringmonth2).eq("windturbine_id",key);
- List<ProEconWtCurveFittingMonth> wcfmls = proEconWtCurveFittingMonthService.list(queryWrapper).stream()
- // .filter(i -> i.getWindturbineId().equals(key) &&
- // i.getYear().equals(stringyear2) && i.getMonth().equals(stringmonth2))
- .sorted(Comparator.comparing(ProEconWtCurveFittingMonth::getSpeed)).collect(Collectors.toList());
- monthBuildPoints(wcfmls, monthLastMonthPoints);
- QueryWrapper<ProEconWtCurveFittingMonth> queryWrapper2 = new QueryWrapper<>();
- queryWrapper2.eq("year",stringyear3).eq("month",stringmonth3).eq("windturbine_id",key);
- wcfmls = proEconWtCurveFittingMonthService.list(queryWrapper2).stream()
- // .filter(i -> i.getWindturbineId().equals(key) &&
- // i.getYear().equals(stringyear3) && i.getMonth().equals(stringmonth3))
- .sorted(Comparator.comparing(ProEconWtCurveFittingMonth::getSpeed)).collect(Collectors.toList());
- monthBuildPoints(wcfmls, monthLastYearPoints);
- //*********************************************月曲线偏差上个月和上一年记录**********************************************************/
- if (CacheContext.wtmap.containsKey(key)) {
- String modelid = CacheContext.wtmap.get(key).getModelId();
- if (StringUtils.notEmp(modelid)) {
- //获取模型功率曲线
- if (CacheContext.theoreticalPowerMap.containsKey(modelid)) {
- for (Double speed : CacheContext.theoreticalPowerMap.get(modelid).keySet()) {
- PointVo point = new PointVo();
- point.setX(speed);
- point.setY(CacheContext.theoreticalPowerMap.get(modelid).get(speed).getEnsurePower());
- bzglpowerPoints.add(point);
- }
- }
- }
- }
- //*********************************************年曲线偏差记录**********************************************************/
- //*********************************************当月曲线偏差记录**********************************************************/
- QueryWrapper<ProEconCurveFittMonthMain> queryWrapper3 = new QueryWrapper<>();
- queryWrapper3.eq("year",stringyear).eq("month",stringmonth).eq("windturbine_id",key);
- Optional<ProEconCurveFittMonthMain> cfmmontho = proEconCurveFittMonthMainService.list(queryWrapper3).stream()
- // .filter(i -> i.getWindturbineId().equals(key)
- // && i.getYear().equals(stringyear) && i.getMonth().equals(stringmonth))
- .findFirst();
- ProEconCurveFittMonthMain cfmmonth;
- if (cfmmontho.isPresent()) {
- cfmmonth = cfmmontho.get();
- QueryWrapper<ProEconCurveFittMonthMain> wrapper = new QueryWrapper<>();
- wrapper.eq("id", cfmmonth.getId());
- proEconCurveFittMonthMainService.remove(wrapper);
- }
- cfmmonth = new ProEconCurveFittMonthMain();
- cfmmonth.setWindturbineId(key);
- cfmmonth.setYear(String.valueOf(day_year));
- cfmmonth.setMonth(String.valueOf(day_month));
- //月---实际/最优
- cfmmonth.setDeviationRate1(pcl(windMap.get(key).getYsjglPoints(), windMap.get(key).getYzyglPoints(), modelpower));
- //月---实际/保证
- cfmmonth.setDeviationRate2(pcl(windMap.get(key).getYsjglPoints(), bzglpowerPoints, modelpower));
- //月---最优/保证
- cfmmonth.setDeviationRate3(pcl(windMap.get(key).getYzyglPoints(), bzglpowerPoints, modelpower));
- //月---实际/上月实际
- cfmmonth.setMonthDeviationRate(pcl(windMap.get(key).getYsjglPoints(), monthLastMonthPoints, modelpower));
- //月---实际/同期实际
- cfmmonth.setYearDeviationRate(pcl(windMap.get(key).getYsjglPoints(), monthLastYearPoints, modelpower));
- //月---实际/标杆实际
- cfmmonth.setStandardDeviationRate(pcl(windMap.get(key).getYsjglPoints(), monthStandardPoints, modelpower));
- mainls.add(cfmmonth);
- // proEconCurveFittMonthMainService.save(cfmmonth);
- //*********************************************当月曲线偏差记录**********************************************************/
- List<ProEconCurveFittMonthSub> subls=new ArrayList<>();
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 3, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 4, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 5, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 6, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 7, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 8, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 9, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 10, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 11, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 12, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- subls.add(pLCBuild(key, stringyear, stringmonth, windMap, modelpower, 13, bzglpowerPoints, monthLastMonthPoints, monthLastYearPoints, monthStandardPoints));
- proEconCurveFittMonthSubService.saveBatch(subls);
- insertPoints(stringyear, stringmonth, windMap.get(key).getYsjglPoints(), windMap.get(key).getYzyglPoints(), key);
- if(type.equals("1"))
- {
- insertPoints2( windMap.get(key).getYsjglPoints(), windMap.get(key).getYzyglPoints(), key);
- }
- logger.info(key);
- //
- // logger.info(String.format("{1}:更新sqlserver数据库记录数:{0}", z, new Date()));
- }
- proEconCurveFittMonthMainService.saveBatch(mainls);
- }
- public void cureFittingYear(Date recordDate) throws Exception {
- //日期变为昨天
- Date end = DateUtils.addDays(DateUtils.truncate(recordDate), -1);
- Calendar c = Calendar.getInstance();
- c.setTime(recordDate);
- int day_year = c.get(Calendar.YEAR);
- proEconWtCurveFittingYearService.deleteProEconWtCurveFittingFByYear(String.valueOf(day_year));
- proEconCurveFittYearMainService.deleteProEconCurveFittYearMainFByYear(String.valueOf(day_year));
- proEconCurveFittYearSubService.deleteProEconCurveFittYearSubFByYear(String.valueOf(day_year));
- c.set(Calendar.DAY_OF_MONTH, 1);
- c.set(Calendar.MONTH, 0);
- Date begin = c.getTime();
- //去年同期
- c.setTime(DateUtils.addYears(begin, -1));
- int year_year = c.get(Calendar.YEAR);
- Map<String, CureFittingVo> windMap = new HashMap<>();
- if (windturbineCapacity == null) {
- windturbineCapacity = new HashMap<>();
- Map<String, ProEconEquipmentmodel> modelMap = CacheContext.modelMap;
- for (ProBasicEquipment windturbine : CacheContext.wtls) {
- if (modelMap.containsKey(windturbine.getModelId())) {
- windturbineCapacity.put(windturbine.getId(), modelMap.get(windturbine.getModelId()).getPowerProduction());
- }
- }
- }
- for (ProBasicEquipment wt : CacheContext.wtls) {
- String windturbineId = wt.getId();
- if(wt.getWindpowerstationId().contains(WpType.GDC.id))
- {
- continue;
- }
- Map<String, ProBasicEquipmentPoint> windturbinetestingpointnewMap = CacheContext.wtpAimap.get(wt.getId());
- //设备有功功率
- String pointIdGL = windturbinetestingpointnewMap.get(ContantXk.CJ_SSGL).getNemCode();
- //设备明细状态
- String pointIdZT = windturbinetestingpointnewMap.get(ContantXk.MXZT).getNemCode();
- String pointIdFS;
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) { //测风塔70米风速
- if (windturbinetestingpointnewMap.containsKey(ContantXk.FCCFTFS70)) {
- ProBasicEquipmentPoint point = windturbinetestingpointnewMap.get(ContantXk.FCCFTFS70);
- if (StringUtils.notEmp(point.getNemCode()) && !point.getNemCode().equals(initialcode)) {
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.FCCFTFS70).getNemCode();
- } else {
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.CJ_SSFS).getNemCode();
- }
- } else {
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.CJ_SSFS).getNemCode();
- }
- } else { //设备风速
- pointIdFS = windturbinetestingpointnewMap.get(ContantXk.CJ_SSFS).getNemCode();
- }
- CureFittingVo item = new CureFittingVo();
- item.setPointIdFS(pointIdFS);
- item.setPointIdZT(pointIdZT);
- item.setPointIdGL(pointIdGL);
- //获取标杆风机编号
- if (CacheContext.wtstandardmap.containsKey(wt.getId())) {
- item.setStandardId(CacheContext.wtstandardmap.get(wt.getId()));
- } else {
- item.setStandardId(wt.getId());
- }
- windMap.put(windturbineId, item);
- }
- for (String key : windMap.keySet()) {
- //初始化集合
- windMap.get(key).setYsjglPoints(new ArrayList<>());
- windMap.get(key).setYzyglPoints(new ArrayList<>());
- windMap.get(key).setRsjglPoints(new ArrayList<>());
- windMap.get(key).setRzyglPoints(new ArrayList<>());
- windMap.get(key).setNsjglPoints(new ArrayList<>());
- windMap.get(key).setNzyglPoints(new ArrayList<>());
- // if (windMap.get(key).getPointIdGL() == null || windMap.get(key).getPointIdFS() == null || windMap.get(key).getPointIdZT() == null) {
- // logger.info(key);
- // continue;
- // }
- //拟合年功率曲线
- // curveFittingBuilder(begin, end, dimension, scale, windMap.get(key).getPointIdGL(), windMap.get(key).getPointIdFS(), windMap.get(key).getPointIdZT(), windMap.get(key).getNsjglPoints(), windMap.get(key).getNzyglPoints(), key);
- QueryWrapper<ProEconWtPowerCurveFitting> queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("windturbine_id",key);
- List<ProEconWtPowerCurveFitting> wtpowerls= proEconWtPowerCurveFittingService.list(queryWrapper)
- .stream()
- // .filter(i->i.getWindturbineId().equals(key))
- .sorted(Comparator.comparing(ProEconWtPowerCurveFitting::getSpeed)).collect(Collectors.toList());
- List<PointVo> zyglls=new ArrayList<>();
- List<PointVo> sjglls=new ArrayList<>();
- if(!wtpowerls.isEmpty())
- {
- for(ProEconWtPowerCurveFitting wtp:wtpowerls)
- {
- PointVo zyvo=new PointVo();
- zyvo.setX(wtp.getSpeed());
- zyvo.setY(wtp.getOptimalPower());
- zyglls.add(zyvo);
- PointVo sjvo=new PointVo();
- sjvo.setX(wtp.getSpeed());
- sjvo.setY(wtp.getActualPower());
- sjglls.add(sjvo);
- }
- }
- // List<PointVo> vos = windMap.get(key).getNsjglPoints().stream().filter(it -> it.getX() >= 0 && it.getX() <= 25).sorted(Comparator.comparing(PointVo::getX)).collect(Collectors.toList());
- // windMap.get(key).setNsjglPoints(vos);
- // vos = windMap.get(key).getNzyglPoints().stream().filter(it -> it.getX() >= 0 && it.getX() <= 25).sorted(Comparator.comparing(PointVo::getX)).collect(Collectors.toList());
- // windMap.get(key).setNzyglPoints(vos);
- windMap.get(key).setNsjglPoints(sjglls);
- windMap.get(key).setNzyglPoints(zyglls);
- }
- List<ProEconCurveFittYearMain> mainls=new ArrayList<>();
- for (String key : windMap.keySet()) {
- Double modelpower = 1500.0;
- if (windturbineCapacity.containsKey(key)) {
- modelpower = windturbineCapacity.get(key);
- }
- //年的上月
- List<PointVo> yearLastMonthPoints = new ArrayList<>();
- //年的去年同期
- List<PointVo> yearLastYearPoints;
- //年标准功率
- List<PointVo> yearStandardPoints = new ArrayList<>();
- //日的昨天
- //保证功率
- List<PointVo> bzglpowerPoints = new ArrayList<>();
- if (CacheContext.wtstandardmap.containsKey(key)) {
- String standardId = CacheContext.wtstandardmap.get(key);
- if (StringUtils.notEmp(standardId)) {
- if (windMap.containsKey(key)) {
- yearStandardPoints = windMap.get(standardId).getNsjglPoints();
- }
- }
- }
- String stringyear = String.valueOf(day_year);
- String stringyear3 = String.valueOf(year_year);
- // /*********************************************年曲线偏差上个月和上一年记录**********************************************************/
- QueryWrapper<ProEconWtCurveFittingYear> queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("year",stringyear3).eq("windturbine_id",key);
- List<ProEconWtCurveFittingYear> wcfyls = proEconWtCurveFittingYearService.list(queryWrapper).stream()
- // .filter(i -> i.getWindturbineId().equals(key) &&
- // i.getYear().equals(stringyear3))
- .sorted(Comparator.comparing(ProEconWtCurveFittingYear::getSpeed)).collect(Collectors.toList());
- //与轶总的原始代码对比不一致,新增代码修改测试
- yearBuildPoints(wcfyls, yearLastMonthPoints);
- yearLastYearPoints = yearLastMonthPoints;
- //*********************************************年曲线偏差上个月和上一年记录**********************************************************/
- if (CacheContext.wtmap.containsKey(key)) {
- String modelid = CacheContext.wtmap.get(key).getModelId();
- if (StringUtils.notEmp(modelid)) {
- //获取模型功率曲线
- if (CacheContext.theoreticalPowerMap.containsKey(modelid)) {
- for (Double speed : CacheContext.theoreticalPowerMap.get(modelid).keySet()) {
- PointVo point = new PointVo();
- point.setX(speed);
- point.setY(CacheContext.theoreticalPowerMap.get(modelid).get(speed).getEnsurePower());
- bzglpowerPoints.add(point);
- }
- }
- }
- }
- //*********************************************年曲线偏差记录**********************************************************/
- //*********************************************当年曲线偏差记录**********************************************************/
- QueryWrapper<ProEconCurveFittYearMain> queryWrapper2 = new QueryWrapper<>();
- queryWrapper2.eq("year",stringyear).eq("windturbine_id",key);
- Optional<ProEconCurveFittYearMain> cfmyearo = proEconCurveFittYearMainService.list(queryWrapper2)
- .stream()
- // .filter(i -> i.getWindturbineId().equals(key)
- // && i.getYear().equals(stringyear))
- .findFirst();
- ProEconCurveFittYearMain cfmyear;
- if (cfmyearo.isPresent()) {
- cfmyear = cfmyearo.get();
- QueryWrapper<ProEconCurveFittMonthMain> wrapper = new QueryWrapper<>();
- wrapper.eq("id", cfmyear.getId());
- proEconCurveFittMonthMainService.remove(wrapper);
- }
- cfmyear = new ProEconCurveFittYearMain();
- cfmyear.setWindturbineId(key);
- cfmyear.setYear(String.valueOf(day_year));
- //年---实际/最优
- cfmyear.setDeviationRate1(pcl(windMap.get(key).getNsjglPoints(), windMap.get(key).getNzyglPoints(), modelpower));
- //年---实际/保证
- cfmyear.setDeviationRate2(pcl(windMap.get(key).getNsjglPoints(), bzglpowerPoints, modelpower));
- //年---最优/保证
- cfmyear.setDeviationRate3(pcl(windMap.get(key).getNzyglPoints(), bzglpowerPoints, modelpower));
- //年---实际/上月实际
- cfmyear.setMonthDeviationRate(pcl(windMap.get(key).getNsjglPoints(), yearLastMonthPoints, modelpower));
- //年---实际/同期实际
- cfmyear.setYearDeviationRate(pcl(windMap.get(key).getNsjglPoints(), yearLastYearPoints, modelpower));
- //年---实际/标杆实际
- cfmyear.setStandardDeviationRate(pcl(windMap.get(key).getNsjglPoints(), yearStandardPoints, modelpower));
- mainls.add(cfmyear);
- // proEconCurveFittYearMainService.save(cfmyear);
- //*********************************************当年曲线偏差记录**********************************************************/
- List<ProEconCurveFittYearSub> subls=new ArrayList<>();
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 3, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 4, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 5, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 6, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 7, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 8, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 9, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 10, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 11, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 12, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- subls.add(pLCBuild(key, stringyear, windMap, modelpower, 13, bzglpowerPoints, yearLastMonthPoints, yearLastYearPoints, yearStandardPoints));
- proEconCurveFittYearSubService.saveBatch(subls);
- insertPoints(stringyear, windMap.get(key).getNsjglPoints(), windMap.get(key).getNzyglPoints(), key);
- logger.info(key);
- //
- // logger.info(String.format("{1}:更新sqlserver数据库记录数:{0}", z, new Date()));
- }
- proEconCurveFittYearMainService.saveBatch(mainls);
- }
- public ProEconCurveFittingSub pLCBuild(String key, Date current, Map<String, CureFittingVo> windMap, Double modelpower, double speed,
- List<PointVo> bzglpowerPoints, List<PointVo> lastMonthPoints, List<PointVo> lastYearPoints, List<PointVo> lastStandardPoints
- ) {
- // String speedStr = String.valueOf(speed);
- //*********************************************当日曲线偏差子表记录**********************************************************/
- QueryWrapper<ProEconCurveFittingSub> queryWrapper2 = new QueryWrapper<>();
- queryWrapper2.eq("record_date",current).eq("speed",speed).eq("windturbine_id",key);
- Optional<ProEconCurveFittingSub> cfmso = proEconCurveFittingSubService.list(queryWrapper2)
- .stream()
- // .filter(i -> i.getWindturbineId().equals(key)
- // && i.getRecordDate().compareTo(current) == 0 && i.getSpeed().equals(speedStr))
- .findFirst();
- ProEconCurveFittingSub cfms;
- if (cfmso.isPresent()) {
- cfms = cfmso.get();
- QueryWrapper<ProEconCurveFittingSub> wrapper = new QueryWrapper<>();
- wrapper.eq("id", cfms.getId());
- proEconCurveFittingSubService.remove(wrapper);
- }
- cfms = new ProEconCurveFittingSub();
- cfms.setWindturbineId(key);
- cfms.setSpeed(speed);
- cfms.setRecordDate(DateUtils.truncate(current));
- cfms.setDeviationRate1(pcl2(windMap.get(key).getRsjglPoints(), windMap.get(key).getRzyglPoints(), modelpower, speed));
- //日---实际/保证
- cfms.setDeviationRate2(pcl2(windMap.get(key).getRsjglPoints(), bzglpowerPoints, modelpower, speed));
- //日---最优/保证
- cfms.setDeviationRate3(pcl2(windMap.get(key).getRzyglPoints(), bzglpowerPoints, modelpower, speed));
- //日---实际/上日实际
- cfms.setMonthDeviationRate(pcl2(windMap.get(key).getRsjglPoints(), lastMonthPoints, modelpower, speed));
- //日---实际/同期实际
- cfms.setYearDeviationRate(pcl2(windMap.get(key).getRsjglPoints(), lastYearPoints, modelpower, speed));
- //日---实际/标杆实际
- cfms.setStandardDeviationRate(pcl2(windMap.get(key).getRsjglPoints(), lastStandardPoints, modelpower, speed));
- return cfms;
- //proEconCurveFittingSubService.save(cfms);
- //*********************************************当日曲线偏差子表记录**********************************************************/
- }
- public ProEconCurveFittMonthSub pLCBuild(String key, String stringyear, String stringmonth, Map<String, CureFittingVo> windMap, Double modelpower, double speed,
- List<PointVo> bzglpowerPoints, List<PointVo> lastMonthPoints, List<PointVo> lastYearPoints, List<PointVo> lastStandardPoints
- ) {
- // String speedStr = String.valueOf(speed);
- //*********************************************当月曲线偏差子表记录**********************************************************/
- QueryWrapper<ProEconCurveFittMonthSub> queryWrapper2 = new QueryWrapper<>();
- queryWrapper2.eq("year",stringyear).eq("month",stringmonth).eq("speed",speed).eq("windturbine_id",key);
- Optional<ProEconCurveFittMonthSub> cfmsmontho = proEconCurveFittMonthSubService.list(queryWrapper2).stream()
- // .filter(i -> i.getWindturbineId().equals(key)
- // && i.getYear().equals(stringyear) && i.getMonth().equals(stringmonth) && i.getSpeed().equals(speedStr))
- .findFirst();
- ProEconCurveFittMonthSub cfmsmonth;
- if (cfmsmontho.isPresent()) {
- cfmsmonth = cfmsmontho.get();
- QueryWrapper<ProEconCurveFittMonthSub> wrapper = new QueryWrapper<>();
- wrapper.eq("id", cfmsmonth.getId());
- proEconCurveFittMonthSubService.remove(wrapper);
- }
- cfmsmonth = new ProEconCurveFittMonthSub();
- cfmsmonth.setWindturbineId(key);
- cfmsmonth.setYear(stringyear);
- cfmsmonth.setMonth(stringmonth);
- cfmsmonth.setSpeed(speed);
- //月---实际/最优
- cfmsmonth.setDeviationRate1(pcl2(windMap.get(key).getYsjglPoints(), windMap.get(key).getYzyglPoints(), modelpower, speed));
- //月---实际/保证
- cfmsmonth.setDeviationRate2(pcl2(windMap.get(key).getYsjglPoints(), bzglpowerPoints, modelpower, speed));
- //月---最优/保证
- cfmsmonth.setDeviationRate3(pcl2(windMap.get(key).getYzyglPoints(), bzglpowerPoints, modelpower, speed));
- //月---实际/上月实际
- cfmsmonth.setMonthDeviationRate(pcl2(windMap.get(key).getYsjglPoints(), lastMonthPoints, modelpower, speed));
- //月---实际/同期实际
- cfmsmonth.setYearDeviationRate(pcl2(windMap.get(key).getYsjglPoints(), lastYearPoints, modelpower, speed));
- //月---实际/标杆实际
- cfmsmonth.setStandardDeviationRate(pcl2(windMap.get(key).getYsjglPoints(), lastStandardPoints, modelpower, speed));
- // proEconCurveFittMonthSubService.save(cfmsmonth);
- return cfmsmonth;
- //*********************************************当月曲线偏差子表记录**********************************************************/
- }
- public ProEconCurveFittYearSub pLCBuild(String key, String stringyear, Map<String, CureFittingVo> windMap, Double modelpower, double speed,
- List<PointVo> bzglpowerPoints, List<PointVo> lastMonthPoints, List<PointVo> lastYearPoints, List<PointVo> lastStandardPoints
- ) {
- // String speedStr = String.valueOf(speed);
- //*********************************************当年曲线偏差子表记录**********************************************************/
- QueryWrapper<ProEconCurveFittYearSub> queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("year",stringyear).eq("speed",speed).eq("windturbine_id",key);
- Optional<ProEconCurveFittYearSub> cfmsyearo = proEconCurveFittYearSubService.list(queryWrapper).stream()
- // .filter(i -> i.getWindturbineId().equals(key)
- // && i.getYear().equals(stringyear) && i.getSpeed().equals(speedStr))
- .findFirst();
- ProEconCurveFittYearSub cfmsyear;
- if (cfmsyearo.isPresent()) {
- cfmsyear = cfmsyearo.get();
- QueryWrapper<ProEconCurveFittYearSub> wrapper = new QueryWrapper<>();
- wrapper.eq("id", cfmsyear.getId());
- proEconCurveFittYearSubService.remove(wrapper);
- }
- cfmsyear = new ProEconCurveFittYearSub();
- cfmsyear.setWindturbineId(key);
- cfmsyear.setYear(stringyear);
- cfmsyear.setSpeed(speed);
- // proEconCurveFittYearSubService.save(cfmsyear);
- //年---实际/最优
- cfmsyear.setDeviationRate1(pcl2(windMap.get(key).getNsjglPoints(), windMap.get(key).getNzyglPoints(), modelpower, speed));
- //年---实际/保证
- cfmsyear.setDeviationRate2(pcl2(windMap.get(key).getNsjglPoints(), bzglpowerPoints, modelpower, speed));
- //年---最优/保证
- cfmsyear.setDeviationRate3(pcl2(windMap.get(key).getNzyglPoints(), bzglpowerPoints, modelpower, speed));
- //年---实际/上月实际
- cfmsyear.setMonthDeviationRate(pcl2(windMap.get(key).getNsjglPoints(), lastMonthPoints, modelpower, speed));
- //年---实际/同期实际
- cfmsyear.setYearDeviationRate(pcl2(windMap.get(key).getNsjglPoints(), lastYearPoints, modelpower, speed));
- //年---实际/标杆实际
- cfmsyear.setStandardDeviationRate(pcl2(windMap.get(key).getNsjglPoints(), lastStandardPoints, modelpower, speed));
- // proEconCurveFittYearSubService.save(cfmsyear);
- return cfmsyear;
- //*********************************************当年曲线偏差子表记录**********************************************************/
- }
- private void insertPoints(Date current, List<PointVo> sjglls, List<PointVo> zyglls, String windturbineId) {
- //*********************************************当日曲线偏差记录**********************************************************/
- // List<Long> wtcfidls = proEconWtCurveFittingService.list().stream().filter(i -> i.getWindturbineId().equals(windturbineId) &&
- // i.getRecordDate().compareTo(current) == 0).map(ProEconWtCurveFitting::getId).collect(Collectors.toList());
- //
- //
- // for (int i = 0; i < wtcfidls.size(); i++) {
- // proEconWtCurveFittingService.removeByIds(wtcfidls);
- // }
- List<ProEconWtCurveFitting> wtcfls=new ArrayList<>();
- if (sjglls.size() == zyglls.size()) {
- for (int i = 0; i < sjglls.size(); i++) {
- ProEconWtCurveFitting item = new ProEconWtCurveFitting();
- item.setWindturbineId(windturbineId);
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- continue;
- // item.SPEED = Double.Truncate(pointsF2[i].X);
- } else {
- // boolean l = String.valueOf(sjglls.get(i).getX()).contains(".");
- // if (l) {
- // continue;
- // }
- item.setSpeed(sjglls.get(i).getX());
- }
- item.setActualPower(sjglls.get(i).getY());
- item.setOptimalPower(zyglls.get(i).getY());
- item.setRecordDate(DateUtils.truncate(current));
- wtcfls.add(item);
- //proEconWtCurveFittingService.save(item);
- }
- }
- } else {
- logger.warn(String.format("下标不一致的风机编号:{0},实际功率:{1},最有功率:{2}", windturbineId, sjglls.size(), zyglls.size()));
- for (int i = 0; i < sjglls.size(); i++) {
- ProEconWtCurveFitting item = new ProEconWtCurveFitting();
- item.setWindturbineId(windturbineId);
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- continue;
- //item.SPEED = Double.Truncate(pointsF2[i].X);
- } else {
- boolean l = String.valueOf(sjglls.get(i).getX()).contains(".");
- if (l) {
- continue;
- }
- item.setSpeed(sjglls.get(i).getX());
- }
- int finalI = i;
- OptionalDouble op = zyglls.stream().filter(x -> Objects.equals(x.getX(), sjglls.get(finalI).getX())).mapToDouble(PointVo::getY).findFirst();
- if (op.isPresent()) {
- item.setOptimalPower(op.getAsDouble());
- } else {
- item.setOptimalPower(0.0);
- }
- item.setActualPower(sjglls.get(i).getY());
- item.setRecordDate(current);
- wtcfls.add(item);
- //proEconWtCurveFittingService.save(item);
- }
- }
- //*********************************************当日曲线偏差记录**********************************************************/
- }
- proEconWtCurveFittingService.saveBatch(wtcfls);
- String s = JSONObject.toJSONString(wtcfls);
- redisService.set(CurveType.dayCurve.id+"_"+windturbineId, s);
- }
- private void insertPoints(String year, String month, List<PointVo> sjglls, List<PointVo> zyglls, String windturbineId) {
- //*********************************************当月曲线偏差记录**********************************************************/
- // List<Long> wtcfmmonthidls = proEconWtCurveFittingMonthService.list().stream().filter(i -> i.getWindturbineId().equals(windturbineId) &&
- // i.getYear().equals(year) && i.getMonth().equals(month)).map(ProEconWtCurveFittingMonth::getId).collect(Collectors.toList());
- //
- //
- // for (int i = 0; i < wtcfmmonthidls.size(); i++) {
- // proEconWtCurveFittingMonthService.removeByIds(wtcfmmonthidls);
- // }
- List<ProEconWtCurveFittingMonth> wtcfls=new ArrayList<>();
- if (sjglls.size() == zyglls.size()) {
- for (int i = 0; i < sjglls.size(); i++) {
- ProEconWtCurveFittingMonth item = new ProEconWtCurveFittingMonth();
- item.setWindturbineId(windturbineId);
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- continue;
- // item.SPEED = Double.Truncate(pointsF1[i].X);
- } else {
- item.setSpeed(sjglls.get(i).getX());
- }
- item.setActualPower(sjglls.get(i).getY());
- item.setOptimalPower(zyglls.get(i).getY());
- item.setYear(String.valueOf(year));
- item.setMonth(String.valueOf(month));
- wtcfls.add(item);
- // proEconWtCurveFittingMonthService.save(item);
- }
- }
- } else {
- logger.warn(String.format("下标不一致的风机编号:{0},实际功率:{1},最有功率:{2}", windturbineId, sjglls.size(), zyglls.size()));
- for (int i = 0; i < sjglls.size(); i++) {
- ProEconWtCurveFittingMonth item = new ProEconWtCurveFittingMonth();
- item.setWindturbineId(windturbineId);
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- continue;
- //item.SPEED = Double.Truncate(pointsF1[i].X);
- } else {
- item.setSpeed(sjglls.get(i).getX());
- }
- item.setActualPower(sjglls.get(i).getY());
- int finalI = i;
- OptionalDouble op = zyglls.stream().filter(x -> Objects.equals(x.getX(), sjglls.get(finalI).getX())).mapToDouble(PointVo::getY).findFirst();
- if (op.isPresent()) {
- item.setOptimalPower(op.getAsDouble());
- } else {
- item.setOptimalPower(0.0);
- }
- item.setYear(String.valueOf(year));
- item.setMonth(String.valueOf(month));
- wtcfls.add(item);
- //proEconWtCurveFittingMonthService.save(item);
- }
- }
- }
- //*********************************************当月曲线偏差记录**********************************************************/
- proEconWtCurveFittingMonthService.saveBatch(wtcfls);
- String s = JSONObject.toJSONString(wtcfls);
- redisService.set(CurveType.monthCurve.id+"_"+windturbineId, s);
- }
- private void insertPoints(String year, List<PointVo> sjglls, List<PointVo> zyglls, String windturbineId) {
- //*********************************************当年曲线偏差记录**********************************************************/
- // List<Long> wtcfmyearidls = proEconWtCurveFittingYearService.list().stream().filter(i -> i.getWindturbineId().equals(windturbineId) &&
- // i.getYear().equals(year)).map(ProEconWtCurveFittingYear::getId).collect(Collectors.toList());
- //
- // for (int i = 0; i < wtcfmyearidls.size(); i++) {
- // proEconWtCurveFittingYearService.removeByIds(wtcfmyearidls);
- // }
- List<ProEconWtCurveFittingYear> wtcfls=new ArrayList<>();
- if (sjglls.size() == zyglls.size()) {
- for (int i = 0; i < sjglls.size(); i++) {
- ProEconWtCurveFittingYear item = new ProEconWtCurveFittingYear();
- item.setWindturbineId(windturbineId);
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- continue;
- // item.SPEED = Double.Truncate(pointsF1[i].X);
- } else {
- item.setSpeed(sjglls.get(i).getX());
- }
- item.setActualPower(sjglls.get(i).getY());
- item.setOptimalPower(zyglls.get(i).getY());
- item.setYear(String.valueOf(year));
- wtcfls.add(item);
- // proEconWtCurveFittingYearService.save(item);
- }
- }
- } else {
- logger.warn(String.format("下标不一致的风机编号:{0},实际功率:{1},最有功率:{2}", windturbineId, sjglls.size(), zyglls.size()));
- for (int i = 0; i < sjglls.size(); i++) {
- ProEconWtCurveFittingYear item = new ProEconWtCurveFittingYear();
- item.setWindturbineId(windturbineId);
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- continue;
- //item.SPEED = Double.Truncate(pointsF1[i].X);
- } else {
- item.setSpeed(sjglls.get(i).getX());
- }
- item.setActualPower(sjglls.get(i).getY());
- int finalI = i;
- OptionalDouble op = zyglls.stream().filter(x -> Objects.equals(x.getX(), sjglls.get(finalI).getX())).mapToDouble(PointVo::getY).findFirst();
- if (op.isPresent()) {
- item.setOptimalPower(op.getAsDouble());
- } else {
- item.setOptimalPower(0.0);
- }
- item.setYear(String.valueOf(year));
- wtcfls.add(item);
- //proEconWtCurveFittingYearService.save(item);
- }
- }
- }
- //*********************************************当年曲线偏差记录**********************************************************/
- proEconWtCurveFittingYearService.saveBatch(wtcfls);
- String s = JSONObject.toJSONString(wtcfls);
- redisService.set(CurveType.yearCurve.id+"_"+windturbineId, s);
- }
- private void insertPoints2(List<PointVo> monthSjglls, List<PointVo> monthZyglls, String windturbineId) {
- // List<Integer> wtpcfidls = proEconWtPowerCurveFittingService.list()
- // .stream().filter(i -> i.getWindturbineId().equals(windturbineId))
- // .map(ProEconWtPowerCurveFitting::getId).collect(Collectors.toList());
- //
- //
- // for (int i = 0; i < wtpcfidls.size(); i++) {
- // proEconWtPowerCurveFittingService.removeByIds(wtpcfidls);
- // }
- proEconWtPowerCurveFittingService.deleteProEconWtPowerCurveFitting();
- List<ProEconWtPowerCurveFitting> wtcfls=new ArrayList<>();
- if (monthSjglls.size() == monthZyglls.size()) {
- for (int i = 0; i < monthSjglls.size(); i++) {
- ProEconWtPowerCurveFitting item = new ProEconWtPowerCurveFitting();
- item.setWindturbineId(windturbineId);
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- continue;
- // item.SPEED = Double.Truncate(pointsF1[i].X);
- } else {
- boolean l = String.valueOf(monthSjglls.get(i).getX()).contains(".");
- if (l) {
- continue;
- }
- item.setSpeed(monthSjglls.get(i).getX());
- }
- item.setActualPower(monthSjglls.get(i).getY());
- item.setOptimalPower(monthZyglls.get(i).getY());
- wtcfls.add(item);
- //proEconWtPowerCurveFittingService.save(item);
- }
- }
- } else {
- logger.warn(String.format("下标不一致的风机编号:{0},实际功率:{1},最有功率:{2}", windturbineId, monthSjglls.size(), monthZyglls.size()));
- for (int i = 0; i < monthSjglls.size(); i++) {
- ProEconWtPowerCurveFitting item = new ProEconWtPowerCurveFitting();
- item.setWindturbineId(windturbineId);
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- continue;
- //item.SPEED = Double.Truncate(pointsF1[i].X);
- } else {
- boolean l = String.valueOf(monthSjglls.get(i).getX()).contains(".");
- if (l) {
- continue;
- }
- item.setSpeed(monthSjglls.get(i).getX());
- }
- item.setActualPower(monthSjglls.get(i).getY());
- int finalI = i;
- OptionalDouble op = monthZyglls.stream().filter(x -> Objects.equals(x.getX(), monthSjglls.get(finalI).getX())).mapToDouble(PointVo::getY).findFirst();
- if (op.isPresent()) {
- item.setOptimalPower(op.getAsDouble());
- } else {
- item.setOptimalPower(0.0);
- }
- wtcfls.add(item);
- //proEconWtPowerCurveFittingService.save(item);
- }
- }
- }
- proEconWtPowerCurveFittingService.saveBatch(wtcfls);
- }
- private void yearBuildPoints(List<ProEconWtCurveFittingYear> data, List<PointVo> points) {
- if (data != null) {
- for (ProEconWtCurveFittingYear datum : data) {
- PointVo point = new PointVo();
- point.setX(datum.getSpeed());
- point.setY(datum.getActualPower());
- points.add(point);
- }
- }
- }
- private void monthBuildPoints(List<ProEconWtCurveFittingMonth> data, List<PointVo> points) {
- if (data != null) {
- for (ProEconWtCurveFittingMonth datum : data) {
- PointVo point = new PointVo();
- point.setX(datum.getSpeed());
- point.setY(datum.getActualPower());
- points.add(point);
- }
- }
- }
- private void dayBuildPoints(List<ProEconWtCurveFitting> data, List<PointVo> points) {
- if (data != null) {
- for (ProEconWtCurveFitting datum : data) {
- PointVo point = new PointVo();
- point.setX(datum.getSpeed());
- point.setY(datum.getActualPower());
- points.add(point);
- }
- }
- }
- //曲线偏差率
- private double pcl(List<PointVo> points1, List<PointVo> points2, Double modelpower) {
- double result = -0;
- double pc = 0;
- if (points1 != null && points1.size() != 0 && points2 != null && points2.size() != 0) {
- double count = 0;
- double sum = 0;
- double max = modelpower;
- for (PointVo point : points1) {
- List<PointVo> item = points2.stream().filter(it -> Objects.equals(it.getX(), point.getX())).collect(Collectors.toList());
- if (item.size() > 0) {
- sum += Math.pow((point.getY() - item.get(0).getY()), 2);
- count++;
- pc += point.getY() - item.get(0).getY();
- }
- }
- sum = Math.sqrt(sum);
- count = Math.sqrt(count);
- max = max * count;
- if (max != 0) {
- result = sum / max * 100;
- }
- if (pc < 0) {
- result = 0 - result;
- }
- }
- return result;
- }
- //曲线偏差率2
- private double pcl2(List<PointVo> points1, List<PointVo> points2, Double modelpower, double speed) {
- double minSpeed = speed;
- double maxSpeed = minSpeed + 1;
- double result = -0;
- double pc = 0;
- if (points1 != null && points1.size() != 0 && points2 != null && points2.size() != 0) {
- double count = 0;
- double sum = 0;
- double max = modelpower;
- for (PointVo point : points1) {
- List<PointVo> item = points2.stream().filter(it -> Objects.equals(it.getX(), point.getX())).collect(Collectors.toList());
- if (item.size() > 0 && item.get(0).getX() >= minSpeed && item.get(0).getX() < maxSpeed) {
- sum += Math.pow((point.getY() - item.get(0).getY()), 2);
- count++;
- pc += point.getY() - item.get(0).getY();
- }
- }
- sum = Math.sqrt(sum);
- count = Math.sqrt(count);
- max = max * count;
- if (max != 0) {
- result = sum / max * 100;
- }
- if (pc < 0) {
- result = 0 - result;
- }
- }
- return result;
- }
- //todo-sl 添加数据筛选
- private boolean filterData(PointData gl, PointData fs, PointData zt, double maxPower,double maxSpeed, String windturbineId) throws Exception {
- if (StringUtils.notEmp(gl)) {
- //判定功率是否超过最大值
- if (gl.getPointValueInDouble() > maxPower) {
- return false;
- }
- }
- if (StringUtils.notEmp(fs)) {
- //判定功率是否超过最大值
- if (fs.getPointValueInDouble() > maxSpeed) {
- return false;
- }
- }
- //判定状态不为运行的进行过滤
- if (zt.getPointValueInDouble() != 2) {
- return false;
- }
- // //设置时间为10分钟前,10钟前有停机事件数据进行过滤
- // Calendar c = Calendar.getInstance();
- // c.setTimeInMillis(zt.getPointTime());
- // Date end = c.getTime();
- // c.add(Calendar.MINUTE, -10);
- // Date bedin = c.getTime();
- // List<PointData> points = edosUtil.getHistoryDatasSnap(zt.getEdnaId(), bedin.getTime() / 1000, end.getTime() / 1000);
- // if (!points.isEmpty()) {
- // for (PointData p : points) {
- // if (p.getPointValueInDouble() == 4) {
- //
- // return false;
- // }
- //
- // }
- //
- // }
- //
- // //设置时间为10分钟后,运行后10分钟数据进行过滤
- //
- // points = edosUtil.getHistoryDatasSnap(zt.getEdnaId(), bedin.getTime() / 1000, end.getTime() / 1000);
- // if (!points.isEmpty()) {
- // for (PointData p : points) {
- // if (p.getPointValueInDouble() != 2) {
- // return false;
- //
- // }
- //
- // }
- //
- // }
- //
- //
- // Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;
- // Map<String, ProBasicEquipmentPoint> wtpointmap = wtpAimap.get(windturbineId);
- //
- //
- // List<PointVo> bzPointls=new ArrayList<>();
- // List<PointVo> sjPointls=new ArrayList<>();
- //
- // double modelpower=0.0;
- // if (CacheContext.wtmap.containsKey(windturbineId)) {
- // String modelid = CacheContext.wtmap.get(windturbineId).getModelId();
- // if (StringUtils.notEmp(modelid)) {
- // //获取保证功率曲线中的风速和功率
- // if (CacheContext.theoreticalPowerMap.containsKey(modelid)) {
- // Map<Double,ProBasicModelPowerRd> theoreticalMap= CacheContext.theoreticalPowerMap.get(modelid);
- //
- // PointVo point = new PointVo();
- // double speed=StringUtils.round(fs.getPointValueInDouble(),2);
- // point.setX(speed);
- // point.setY(theoreticalMap.get(speed).getEnsurePower());
- // modelpower=point.getY();
- // bzPointls.add(point);
- // }
- // }
- // }
- //
- // PointVo point = new PointVo();
- // double speed=StringUtils.round(fs.getPointValueInDouble(),2);
- // double power=StringUtils.round(gl.getPointValueInDouble(),2);
- // point.setX(speed);
- // point.setY(power);
- // sjPointls.add(point);
- //
- // //与保证功率进行对比,偏差大于25%的进行过滤
- // double value= pcl2( sjPointls, bzPointls, modelpower, speed);
- //
- // if (value > Math.abs(0.25)) {
- // return false;
- // }
- //
- // List<String> pointid = new ArrayList<>();
- // //欠发状态大于2过滤掉
- // pointid.add(wtpointmap.get(ContantXk.LSQFZT).getNemCode());
- // List<PointData> values = edosUtil.getHistMatrix(pointid, gl.getPointTime() / 1000);
- // if (null != values && values.size() > 0) {
- // double qfzt = values.get(0).getPointValueInDouble();
- //
- // return !(qfzt > 2);
- // }
- return true;
- }
- //功率曲线拟合
- private void curveFittingBuilder(Date begin, Date end, int dimension, double scale, String pointIdGL, String pointIdFS, String pointIdZT, List<PointVo> sjglPoints, List<PointVo> zyglPoints, String windturbineId) throws Exception {
- double maxPower = windturbineCapacity.get(windturbineId) * 1.3;
- double maxSpeed = 25;
- List<PointfVo> sjglnhpoints = new ArrayList<>();
- Map<Double, PointfVo> zyglnhpoints = new HashMap<>();
- if (end.after(begin)) {
- if (StringUtils.notEmp(pointIdGL) && StringUtils.notEmp(pointIdFS)) {
- List<PointData> glpointstemp = edosUtil.getHistoryDatasSnap(pointIdGL, begin.getTime() / 1000, end.getTime() / 1000);
- List<PointData> fspointstemp = edosUtil.getHistoryDatasSnap(pointIdFS, begin.getTime() / 1000, end.getTime() / 1000);
- List<PointData> ztpointstemp = edosUtil.getHistoryDatasSnap(pointIdZT, begin.getTime() / 1000, end.getTime() / 1000);
- List<PointData> glpoints = new ArrayList<>();
- List<PointData> fspoints = new ArrayList<>();
- List<PointData> ztpoints = new ArrayList<>();
- if (!glpointstemp.isEmpty() && !fspointstemp.isEmpty() && !ztpointstemp.isEmpty() && glpointstemp.size() == fspointstemp.size() && fspointstemp.size() == ztpointstemp.size()) {
- for (int i = 0; i < glpointstemp.size(); i++) {
- if (filterData(glpointstemp.get(i), fspointstemp.get(i), ztpointstemp.get(i), maxPower,maxSpeed, windturbineId)) {
- glpoints.add(glpointstemp.get(i));
- fspoints.add(fspointstemp.get(i));
- ztpoints.add(ztpointstemp.get(i));
- }
- }
- }
- if (glpoints.size() != fspoints.size() || glpoints.size() != ztpoints.size()) {
- for (int i = 0; i < fspoints.size(); i++) {
- double x = fspoints.get(i).getPointValueInDouble();
- double y = -1;
- double z = -1;
- int finalI1 = i;
- List<PointData> yArray = glpoints.stream().filter(it -> it.getPointTime().compareTo(fspoints.get(finalI1).getPointTime()) == 0).collect(Collectors.toList());
- if (yArray.size() > 0) {
- y = yArray.get(0).getPointValueInDouble();
- }
- int finalI = i;
- yArray = ztpoints.stream().filter(it -> it.getPointTime().compareTo(fspoints.get(finalI).getPointTime()) == 0).collect(Collectors.toList());
- if (yArray.size() > 0) {
- z = yArray.get(0).getPointValueInDouble();
- }
- Double x1 = StringUtils.round(x, 2);
- Double y1 = y;
- boolean b = true;
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- b = (x >= 0 && y > 0);
- } else {
- if (z == 2) {
- b = (x >= 0 && x <= 30 && y >= 0 && y <= maxPower);
- if (b) {
- if (x > 3 && y <= 0) {
- b = false;
- }
- if (x <= 3 && y > 0) {
- b = false;
- }
- }
- } else {
- b = false;
- }
- }
- }
- if (b) {
- sjglnhpoints.add(new PointfVo(x1, y1));
- if (zyglnhpoints.containsKey(x1)) {
- if (zyglnhpoints.get(x1).getY() < y1) {
- zyglnhpoints.put(x1, new PointfVo(x1, y1));
- }
- } else {
- zyglnhpoints.put(x1, new PointfVo(x1, y1));
- }
- }
- }
- } else {
- for (int i = 0; i < fspoints.size(); i++) {
- double x = fspoints.get(i).getPointValueInDouble();
- double y = glpoints.get(i).getPointValueInDouble();
- double z = ztpoints.get(i).getPointValueInDouble();
- Double x1 = StringUtils.round(x, 2);
- Double y1 = y;
- boolean b = true;
- if (CacheContext.wtmap.containsKey(windturbineId)) {
- ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
- if (wt.getWindpowerstationId().contains(WpType.GDC.id)) {
- b = (x >= 0 && y > 0);
- } else {
- if (z == 2) {
- b = (x >= 0 && x <= 30 && y >= 0 && y <= maxPower);
- if (b) {
- if (x > 3 && y <= 0) {
- b = false;
- }
- if (x <= 3 && y > 0) {
- b = false;
- }
- }
- } else {
- b = false;
- }
- }
- }
- if (b) {
- sjglnhpoints.add(new PointfVo(x1, y1));
- if (zyglnhpoints.containsKey(x1)) {
- if (zyglnhpoints.get(x1).getY() < y1) {
- zyglnhpoints.put(x1, new PointfVo(x1, y1));
- }
- } else {
- zyglnhpoints.put(x1, new PointfVo(x1, y1));
- }
- }
- }
- }
- sjglnhpoints.add(new PointfVo(0.0, 0.0));
- sjglnhpoints = sjglnhpoints.stream().filter(it -> it.getX() >= 3).sorted(Comparator.comparing(PointfVo::getX)).collect(Collectors.toList());
- // if (sjglnhpoints.stream().min(Comparator.comparing(PointfVo::getX)).isPresent()) {
- // double Xmax = sjglnhpoints.stream().max(Comparator.comparing(PointfVo::getX)).get().getX();
- // double Ymax = sjglnhpoints.stream().max(Comparator.comparing(PointfVo::getX)).get().getY();
- // System.out.println("");
- // }
- List<PointVo> temp = LineUtil.buildLine(sjglnhpoints.stream().mapToDouble(PointfVo::getX).toArray(), sjglnhpoints.stream().mapToDouble(PointfVo::getY).toArray(), sjglnhpoints.size(), dimension, scale);
- sjglPoints.addAll(temp);
- if (sjglPoints.size() != 0) {
- buildMyPoints(sjglPoints, scale);
- }
- if (!zyglnhpoints.containsKey(0.0))
- zyglnhpoints.put(0.0, new PointfVo(0.0, 0.0));
- List<PointfVo> zygltemp = zyglnhpoints.values().stream().filter(it -> it.getX() >= 3).sorted(Comparator.comparing(PointfVo::getX)).collect(Collectors.toList());
- if (zygltemp.size() != 0) {
- temp = LineUtil.buildLine(zygltemp.stream().mapToDouble(PointfVo::getX).toArray(), zygltemp.stream().mapToDouble(PointfVo::getY).toArray(), zygltemp.size(), dimension, scale);
- }
- zyglPoints.addAll(temp);
- if (zyglPoints.size() != 0) {
- buildMyPoints(zyglPoints, scale);
- }
- }
- }
- }
- private static void buildMyPoints(List<PointVo> sjglPoints, double scale) {
- int coefficient = 1;
- int dec = 0;
- int smax = 25;
- if (scale == 0.01) {
- coefficient = 100;
- dec = 2;
- }
- if (scale == 0.1) {
- coefficient = 10;
- dec = 1;
- }
- smax *= coefficient;
- double min = 0.0;
- double max = 0.0;
- double maxval = 0.0;
- if (sjglPoints.stream().min(Comparator.comparing(PointVo::getX)).isPresent()) {
- min = sjglPoints.stream().min(Comparator.comparing(PointVo::getX)).get().getX() * coefficient;
- }
- if (sjglPoints.stream().max(Comparator.comparing(PointVo::getX)).isPresent()) {
- max = sjglPoints.stream().max(Comparator.comparing(PointVo::getX)).get().getX() * coefficient;
- }
- if (sjglPoints.stream().max(Comparator.comparing(PointVo::getY)).isPresent()) {
- maxval = sjglPoints.stream().max(Comparator.comparing(PointVo::getY)).get().getY();
- }
- for (double i = 0; i < min; i += 1) {
- PointVo point = new PointVo();
- point.setX(StringUtils.round(i / coefficient, dec));
- point.setY(0.0);
- sjglPoints.add(point);
- }
- for (double i = smax; i > max; i -= 1) {
- PointVo point = new PointVo();
- point.setX(StringUtils.round(i / coefficient, dec));
- point.setY(maxval);
- sjglPoints.add(point);
- }
- }
- }
|