diff --git a/das/src/main/java/com/das/modules/calc/functions/FunctionGetCacheValue.java b/das/src/main/java/com/das/modules/calc/functions/FunctionGetCacheValue.java new file mode 100644 index 00000000..149a517e --- /dev/null +++ b/das/src/main/java/com/das/modules/calc/functions/FunctionGetCacheValue.java @@ -0,0 +1,65 @@ +package com.das.modules.calc.functions; + +import com.das.common.utils.AdminRedisTemplate; +import com.das.modules.cache.domain.DeviceInfoCache; +import com.das.modules.cache.service.CacheService; +import com.das.modules.data.domain.SnapshotValueQueryParam; +import com.das.modules.data.service.DataService; +import com.googlecode.aviator.exception.StandardError; +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.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Aviator扩展函数 - 获取设备实时数据 + * 函数格式: cacheValue(key, value) 设置缓存值 + * 函数格式: cacheValue(key) 读取缓存值 + */ +@Slf4j +public class FunctionGetCacheValue extends AbstractFunction { + private ConcurrentHashMap cacheValues = new ConcurrentHashMap<>(); + public FunctionGetCacheValue( ) { + } + + @Override + public String getName() { + return "cacheValue"; + } + + @SneakyThrows + @Override + public AviatorObject call(Map env, AviatorObject keyData, AviatorObject valData) { + //设备Code + String key = (String)keyData.getValue(env); + Double value = (Double) valData.getValue(env); + String scriptName = (String)env.get("G_SCRIPTNAME"); + + String cacheKey = String.format("%s_%s", scriptName, key); + cacheValues.put(cacheKey, value); + + return AviatorRuntimeJavaType.valueOf(0); + } + + @Override + public AviatorObject call(Map env, AviatorObject keyData) { + //设备Code + String key = (String)keyData.getValue(env); + String scriptName = (String)env.get("G_SCRIPTNAME"); + + String cacheKey = String.format("%s_%s", scriptName, key); + Double value = cacheValues.get(cacheKey); + if (value == null) { + return AviatorNil.NIL; + } + + return AviatorRuntimeJavaType.valueOf(value); + } +} diff --git a/das/src/main/java/com/das/modules/calc/service/CalcJob.java b/das/src/main/java/com/das/modules/calc/service/CalcJob.java index bb7ace25..2596592d 100644 --- a/das/src/main/java/com/das/modules/calc/service/CalcJob.java +++ b/das/src/main/java/com/das/modules/calc/service/CalcJob.java @@ -38,6 +38,8 @@ public class CalcJob implements Job { } //准备全局变量 Map envs = expression.newEnv(); + //脚本名称 + envs.put("G_SCRIPTNAME", calcModule.getName()); //风场信息 envs.put("G_WF", cacheService.getEquipmentCache().getDevicesCache().stream().filter(c->c.getObjectType().equals(10001)).findFirst().get()); //风机信息 diff --git a/das/src/main/java/com/das/modules/calc/service/CalcService.java b/das/src/main/java/com/das/modules/calc/service/CalcService.java index 377aab03..395c68c5 100644 --- a/das/src/main/java/com/das/modules/calc/service/CalcService.java +++ b/das/src/main/java/com/das/modules/calc/service/CalcService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.das.modules.cache.service.CacheService; import com.das.modules.calc.domain.entity.CalcModule; import com.das.modules.calc.domain.vo.CalcModuleVo; +import com.das.modules.calc.functions.FunctionGetCacheValue; import com.das.modules.calc.functions.FunctionRealData; import com.das.modules.calc.functions.FunctionSaveCalcData; import com.das.modules.calc.mapper.CalcModuleMapper; @@ -110,6 +111,9 @@ public class CalcService { // FunctionSaveCalcData save = new FunctionSaveCalcData(dataService, cacheService); aviator.addFunction(save); + + FunctionGetCacheValue cache = new FunctionGetCacheValue(); + aviator.addFunction(cache); } /** diff --git a/ui/dasadmin/src/views/backend/auth/model/index.vue b/ui/dasadmin/src/views/backend/auth/model/index.vue index 9a40f574..4d9325f4 100644 --- a/ui/dasadmin/src/views/backend/auth/model/index.vue +++ b/ui/dasadmin/src/views/backend/auth/model/index.vue @@ -239,14 +239,12 @@ - - - - + +
- +
+ + + + + +
+ + + + + + +
@@ -617,7 +628,11 @@ const sortChange = ({ const attributeTableData = ref([]) const editAttributeForm = (data: AddModelAttributeType & UpdateModelAttributeType) => { attributeFormTitle.value = AttributeDialogTitleStateType['edit'] - attributeForm.value = JSON.parse(JSON.stringify(data)) + const copyData = JSON.parse(JSON.stringify(data)) + const stateDescArr = copyData.stateDesc?.split('|') + copyData.stateDesc0 = stateDescArr?.[0] ?? '' + copyData.stateDesc1 = stateDescArr?.[1] ?? '' + attributeForm.value = copyData attributeVisible.value = true } const delAttributeForm = (data: AddModelAttributeType & UpdateModelAttributeType) => { @@ -790,6 +805,7 @@ const originAttributeForm: AddModelAttributeType & UpdateModelAttributeType = { dataType: '', visible: true, unit: '', + stateDesc: '', level: undefined, revision: 1, createdBy: undefined, @@ -819,6 +835,11 @@ const submitAttributeForm = () => { const copyFormData = JSON.parse(JSON.stringify(attributeForm.value)) copyFormData.highSpeed = copyFormData.highSpeed ? 1 : 0 copyFormData.visible = copyFormData.visible ? 1 : 0 + if (copyFormData.stateDesc0 || copyFormData.stateDesc1) { + copyFormData.stateDesc = (copyFormData?.stateDesc0 ?? '') + '|' + (copyFormData?.stateDesc1 ?? '') + } + delete copyFormData.stateDesc0 + delete copyFormData.stateDesc1 if (attributeFormTitle.value === AttributeDialogTitleStateType['add']) { copyFormData.iotModelId = curContextMenuTreeData.value!.id! addModelAttributeReq(copyFormData) @@ -1157,4 +1178,10 @@ $paginationHeight: 32px; width: 184px; } } +.formRowSplitFiledStyle { + display: flex; + .el-input { + width: 229px; + } +} diff --git a/ui/dasadmin/src/views/backend/auth/model/type.ts b/ui/dasadmin/src/views/backend/auth/model/type.ts index 07bc9c4e..1b46b6e6 100644 --- a/ui/dasadmin/src/views/backend/auth/model/type.ts +++ b/ui/dasadmin/src/views/backend/auth/model/type.ts @@ -73,6 +73,7 @@ export enum ModelAttributeFieldsEnums { 'createdTime' = '创建时间', 'updatedBy' = '更新人', 'updatedTime' = '更新时间', + 'stateDesc' = '状态描述' } export enum ModelServiceFieldsEnums { @@ -114,6 +115,9 @@ export type AddModelAttributeType = { unit: string level?: 0 | 1 | 2 visible: 0 | 1 | boolean + stateDesc:string + stateDesc0?:string + stateDesc1?:string revision: number createdBy?: string createdTime?: string diff --git a/ui/dasadmin/src/views/backend/equipment/airBlower/index.vue b/ui/dasadmin/src/views/backend/equipment/airBlower/index.vue index fc870cd4..8160c94e 100644 --- a/ui/dasadmin/src/views/backend/equipment/airBlower/index.vue +++ b/ui/dasadmin/src/views/backend/equipment/airBlower/index.vue @@ -191,7 +191,12 @@ - +