diff --git a/das/src/main/java/com/das/modules/cache/service/CalcCache.java b/das/src/main/java/com/das/modules/cache/service/CalcCache.java index 883143f4..821a88ac 100644 --- a/das/src/main/java/com/das/modules/cache/service/CalcCache.java +++ b/das/src/main/java/com/das/modules/cache/service/CalcCache.java @@ -2,7 +2,9 @@ package com.das.modules.cache.service; import com.das.modules.cache.domain.WindSpeedCoefValue; +import java.util.List; + public interface CalcCache { - WindSpeedCoefValue getWindSpeedCoef(Long deviceId); - void putWindSpeedCoef(Long deviceId, WindSpeedCoefValue windSpeedCoefValue); + List getWindSpeedCoef(Long deviceId); + void refreshWindSpeedCoef(); } diff --git a/das/src/main/java/com/das/modules/cache/service/impl/CalcCacheImpl.java b/das/src/main/java/com/das/modules/cache/service/impl/CalcCacheImpl.java index 748a0198..69789de9 100644 --- a/das/src/main/java/com/das/modules/cache/service/impl/CalcCacheImpl.java +++ b/das/src/main/java/com/das/modules/cache/service/impl/CalcCacheImpl.java @@ -18,10 +18,20 @@ public class CalcCacheImpl implements CalcCache { @Autowired SysPowerCurveFactorMapper sysPowerCurveFactorMapper; - private ConcurrentHashMap windSpeedCoefMap = new ConcurrentHashMap<>(); + private ConcurrentHashMap> windSpeedCoefMap = new ConcurrentHashMap<>(); @PostConstruct private void init(){ + refreshWindSpeedCoef(); + } + + @Override + public List getWindSpeedCoef(Long deviceId) { + return windSpeedCoefMap.get(deviceId); + } + + @Override + public void refreshWindSpeedCoef() { List sysPowerCurveFactorVos = sysPowerCurveFactorMapper.querySysPowerCurveFactorList(new SysPowerCurveFactorDto()); for (SysPowerCurveFactorVo sysPowerCurveFactorVo : sysPowerCurveFactorVos) { WindSpeedCoefValue windSpeedCoefValue = new WindSpeedCoefValue(); @@ -29,17 +39,12 @@ public class CalcCacheImpl implements CalcCache { windSpeedCoefValue.setMaxValue(sysPowerCurveFactorVo.getSpeedMax()); windSpeedCoefValue.setCoef(sysPowerCurveFactorVo.getFactorK()); windSpeedCoefValue.setBase(sysPowerCurveFactorVo.getFactorB()); - windSpeedCoefMap.put(sysPowerCurveFactorVo.getTurbineId(), windSpeedCoefValue); + List windSpeedCoefValues = windSpeedCoefMap.get(sysPowerCurveFactorVo.getTurbineId()); + if (windSpeedCoefValues == null) { + windSpeedCoefValues = new java.util.ArrayList<>(); + } + windSpeedCoefValues.add(windSpeedCoefValue); + windSpeedCoefMap.put(sysPowerCurveFactorVo.getTurbineId(), windSpeedCoefValues); } } - - @Override - public WindSpeedCoefValue getWindSpeedCoef(Long deviceId) { - return windSpeedCoefMap.get(deviceId); - } - - @Override - public void putWindSpeedCoef(Long deviceId, WindSpeedCoefValue windSpeedCoefValue) { - windSpeedCoefMap.put(deviceId, windSpeedCoefValue); - } } diff --git a/das/src/main/java/com/das/modules/calc/functions/FunctionWindSpeedFactor.java b/das/src/main/java/com/das/modules/calc/functions/FunctionWindSpeedFactor.java new file mode 100644 index 00000000..2765024b --- /dev/null +++ b/das/src/main/java/com/das/modules/calc/functions/FunctionWindSpeedFactor.java @@ -0,0 +1,59 @@ +package com.das.modules.calc.functions; + +import cn.hutool.core.collection.CollectionUtil; +import com.das.modules.cache.domain.DeviceInfoCache; +import com.das.modules.cache.domain.WindSpeedCoefValue; +import com.das.modules.cache.service.CacheService; +import com.das.modules.data.service.DataService; +import com.googlecode.aviator.runtime.function.AbstractFunction; +import com.googlecode.aviator.runtime.type.AviatorNil; +import com.googlecode.aviator.runtime.type.AviatorObject; +import com.googlecode.aviator.runtime.type.AviatorRuntimeJavaType; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * Aviator扩展函数 - 获取时间维度内平均 + * 函数格式: avg(deviceId, attr, timedim) + * timedim: day - 天, month - 月, year - 年 + * 返回值:数值, nil - 获取错误 + */ +@Slf4j +public class FunctionWindSpeedFactor extends AbstractFunction { + + private DataService dataService = null; + private CacheService cacheService = null; + + + public FunctionWindSpeedFactor(DataService dataService, CacheService cacheService) { + this.dataService = dataService; + this.cacheService = cacheService; + } + + @Override + public String getName() { + return "windSpeedFactor"; + } + + @Override + public AviatorObject call(Map env, AviatorObject deviceCode) { + //设备Code + String code = (String)deviceCode.getValue(env); + + DeviceInfoCache deviceInfoCache = cacheService.getEquipmentCache().getDeviceInfoCacheByCode(code); + if (deviceInfoCache == null) { + return AviatorNil.NIL; + } + + List windSpeedCoef = cacheService.getCalcCache().getWindSpeedCoef(deviceInfoCache.getDeviceId()); + if (CollectionUtil.isEmpty(windSpeedCoef)){ + return AviatorNil.NIL; + } + //未找到缓存,查询时序API获取数据 + return AviatorRuntimeJavaType.valueOf(windSpeedCoef); + } + +} diff --git a/das/src/main/java/com/das/modules/page/service/impl/WindSpeedCorrectServiceImpl.java b/das/src/main/java/com/das/modules/page/service/impl/WindSpeedCorrectServiceImpl.java index 02cd903b..b1d40044 100644 --- a/das/src/main/java/com/das/modules/page/service/impl/WindSpeedCorrectServiceImpl.java +++ b/das/src/main/java/com/das/modules/page/service/impl/WindSpeedCorrectServiceImpl.java @@ -96,14 +96,7 @@ public class WindSpeedCorrectServiceImpl implements WindSpeedCorrectService { //批量插入数据库 sysPowerCurveFactorMapper.insertBatch(listData); //更新缓存数据 - listData.forEach(sysPowerCurveFactor -> { - WindSpeedCoefValue windSpeedCoefValue = new WindSpeedCoefValue(); - windSpeedCoefValue.setMaxValue(sysPowerCurveFactor.getSpeedMax()); - windSpeedCoefValue.setMinValue(sysPowerCurveFactor.getSpeedMin()); - windSpeedCoefValue.setCoef(sysPowerCurveFactor.getFactorK()); - windSpeedCoefValue.setBase(sysPowerCurveFactor.getFactorB()); - cacheService.getCalcCache().putWindSpeedCoef(sysPowerCurveFactor.getTurbineId(),windSpeedCoefValue); - }); + cacheService.getCalcCache().refreshWindSpeedCoef(); } @Override diff --git a/das/src/main/resources/mapper/SysPowerCurveFactorMapper.xml b/das/src/main/resources/mapper/SysPowerCurveFactorMapper.xml index 4a3c1da9..f8b6af66 100644 --- a/das/src/main/resources/mapper/SysPowerCurveFactorMapper.xml +++ b/das/src/main/resources/mapper/SysPowerCurveFactorMapper.xml @@ -24,7 +24,7 @@ and t.turbine_id = #{info.turbineId} - order by sq.name asc + order by sq.name asc, t.speed_min asc