Merge branch 'main' of https://git.jsspisoft.com/ry-das
This commit is contained in:
commit
540a6decd7
@ -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<String,Double> cacheValues = new ConcurrentHashMap<>();
|
||||||
|
public FunctionGetCacheValue( ) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "cacheValue";
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
@Override
|
||||||
|
public AviatorObject call(Map<String, Object> 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<String, Object> 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);
|
||||||
|
}
|
||||||
|
}
|
@ -38,6 +38,8 @@ public class CalcJob implements Job {
|
|||||||
}
|
}
|
||||||
//准备全局变量
|
//准备全局变量
|
||||||
Map<String,Object> envs = expression.newEnv();
|
Map<String,Object> 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());
|
envs.put("G_WF", cacheService.getEquipmentCache().getDevicesCache().stream().filter(c->c.getObjectType().equals(10001)).findFirst().get());
|
||||||
//风机信息
|
//风机信息
|
||||||
|
@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.das.modules.cache.service.CacheService;
|
import com.das.modules.cache.service.CacheService;
|
||||||
import com.das.modules.calc.domain.entity.CalcModule;
|
import com.das.modules.calc.domain.entity.CalcModule;
|
||||||
import com.das.modules.calc.domain.vo.CalcModuleVo;
|
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.FunctionRealData;
|
||||||
import com.das.modules.calc.functions.FunctionSaveCalcData;
|
import com.das.modules.calc.functions.FunctionSaveCalcData;
|
||||||
import com.das.modules.calc.mapper.CalcModuleMapper;
|
import com.das.modules.calc.mapper.CalcModuleMapper;
|
||||||
@ -110,6 +111,9 @@ public class CalcService {
|
|||||||
//
|
//
|
||||||
FunctionSaveCalcData save = new FunctionSaveCalcData(dataService, cacheService);
|
FunctionSaveCalcData save = new FunctionSaveCalcData(dataService, cacheService);
|
||||||
aviator.addFunction(save);
|
aviator.addFunction(save);
|
||||||
|
|
||||||
|
FunctionGetCacheValue cache = new FunctionGetCacheValue();
|
||||||
|
aviator.addFunction(cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -239,14 +239,12 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
<el-form-item v-if="attributeForm.attributeType === 140" :label="ModelAttributeFieldsEnums['level']" prop="level">
|
<el-form-item v-if="attributeForm.attributeType === 140" :label="ModelAttributeFieldsEnums['porder']" prop="porder">
|
||||||
<el-select v-model="attributeForm.level" :placeholder="'请选择' + ModelAttributeFieldsEnums['level']">
|
<el-input v-model="attributeForm.porder" :placeholder="'请输入' + ModelAttributeFieldsEnums['porder']"></el-input>
|
||||||
<el-option v-for="v in attributeFormDataLevelOptions" :key="v.value" :label="v.label" :value="v.value"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="formRowStyle">
|
<div class="formRowStyle">
|
||||||
<el-form-item :label="ModelAttributeFieldsEnums['porder']" prop="porder">
|
<el-form-item v-if="attributeForm.attributeType !== 140" :label="ModelAttributeFieldsEnums['porder']" prop="porder">
|
||||||
<el-input v-model="attributeForm.porder" :placeholder="'请输入' + ModelAttributeFieldsEnums['porder']"></el-input>
|
<el-input v-model="attributeForm.porder" :placeholder="'请输入' + ModelAttributeFieldsEnums['porder']"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
@ -257,6 +255,19 @@
|
|||||||
<el-input v-model="attributeForm.unit" :placeholder="'请输入' + ModelAttributeFieldsEnums['unit']"></el-input>
|
<el-input v-model="attributeForm.unit" :placeholder="'请输入' + ModelAttributeFieldsEnums['unit']"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
<el-form-item v-if="attributeForm.attributeType === 140" :label="ModelAttributeFieldsEnums['level']" prop="level">
|
||||||
|
<el-select v-model="attributeForm.level" :placeholder="'请选择' + ModelAttributeFieldsEnums['level']">
|
||||||
|
<el-option v-for="v in attributeFormDataLevelOptions" :key="v.value" :label="v.label" :value="v.value"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<div class="formRowSplitFiledStyle">
|
||||||
|
<el-form-item v-if="attributeForm.attributeType === 140" :label="ModelAttributeFieldsEnums['stateDesc']" prop="stateDesc0">
|
||||||
|
<el-input v-model="attributeForm.stateDesc0" placeholder="请输入状态0描述"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="attributeForm.attributeType === 140" prop="stateDesc1" label-width="10">
|
||||||
|
<el-input v-model="attributeForm.stateDesc1" placeholder="请输入状态1描述"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
<el-form-item :label="ModelAttributeFieldsEnums['subSystem']" prop="subSystem">
|
<el-form-item :label="ModelAttributeFieldsEnums['subSystem']" prop="subSystem">
|
||||||
<el-input v-model="attributeForm.subSystem" :placeholder="'请输入' + ModelAttributeFieldsEnums['subSystem']"></el-input>
|
<el-input v-model="attributeForm.subSystem" :placeholder="'请输入' + ModelAttributeFieldsEnums['subSystem']"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -617,7 +628,11 @@ const sortChange = ({
|
|||||||
const attributeTableData = ref<ModelAttributeTableType[]>([])
|
const attributeTableData = ref<ModelAttributeTableType[]>([])
|
||||||
const editAttributeForm = (data: AddModelAttributeType & UpdateModelAttributeType) => {
|
const editAttributeForm = (data: AddModelAttributeType & UpdateModelAttributeType) => {
|
||||||
attributeFormTitle.value = AttributeDialogTitleStateType['edit']
|
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
|
attributeVisible.value = true
|
||||||
}
|
}
|
||||||
const delAttributeForm = (data: AddModelAttributeType & UpdateModelAttributeType) => {
|
const delAttributeForm = (data: AddModelAttributeType & UpdateModelAttributeType) => {
|
||||||
@ -790,6 +805,7 @@ const originAttributeForm: AddModelAttributeType & UpdateModelAttributeType = {
|
|||||||
dataType: '',
|
dataType: '',
|
||||||
visible: true,
|
visible: true,
|
||||||
unit: '',
|
unit: '',
|
||||||
|
stateDesc: '',
|
||||||
level: undefined,
|
level: undefined,
|
||||||
revision: 1,
|
revision: 1,
|
||||||
createdBy: undefined,
|
createdBy: undefined,
|
||||||
@ -819,6 +835,11 @@ const submitAttributeForm = () => {
|
|||||||
const copyFormData = JSON.parse(JSON.stringify(attributeForm.value))
|
const copyFormData = JSON.parse(JSON.stringify(attributeForm.value))
|
||||||
copyFormData.highSpeed = copyFormData.highSpeed ? 1 : 0
|
copyFormData.highSpeed = copyFormData.highSpeed ? 1 : 0
|
||||||
copyFormData.visible = copyFormData.visible ? 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']) {
|
if (attributeFormTitle.value === AttributeDialogTitleStateType['add']) {
|
||||||
copyFormData.iotModelId = curContextMenuTreeData.value!.id!
|
copyFormData.iotModelId = curContextMenuTreeData.value!.id!
|
||||||
addModelAttributeReq(copyFormData)
|
addModelAttributeReq(copyFormData)
|
||||||
@ -1157,4 +1178,10 @@ $paginationHeight: 32px;
|
|||||||
width: 184px;
|
width: 184px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.formRowSplitFiledStyle {
|
||||||
|
display: flex;
|
||||||
|
.el-input {
|
||||||
|
width: 229px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -73,6 +73,7 @@ export enum ModelAttributeFieldsEnums {
|
|||||||
'createdTime' = '创建时间',
|
'createdTime' = '创建时间',
|
||||||
'updatedBy' = '更新人',
|
'updatedBy' = '更新人',
|
||||||
'updatedTime' = '更新时间',
|
'updatedTime' = '更新时间',
|
||||||
|
'stateDesc' = '状态描述'
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum ModelServiceFieldsEnums {
|
export enum ModelServiceFieldsEnums {
|
||||||
@ -114,6 +115,9 @@ export type AddModelAttributeType = {
|
|||||||
unit: string
|
unit: string
|
||||||
level?: 0 | 1 | 2
|
level?: 0 | 1 | 2
|
||||||
visible: 0 | 1 | boolean
|
visible: 0 | 1 | boolean
|
||||||
|
stateDesc:string
|
||||||
|
stateDesc0?:string
|
||||||
|
stateDesc1?:string
|
||||||
revision: number
|
revision: number
|
||||||
createdBy?: string
|
createdBy?: string
|
||||||
createdTime?: string
|
createdTime?: string
|
||||||
|
@ -191,7 +191,12 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog v-model="realDataLineChartVisible" title="实时曲线" @close="closeLineChart">
|
<el-dialog v-model="realDataLineChartVisible" title="实时曲线" @close="closeLineChart">
|
||||||
<RealDataChart ref="realDataChartRef" :visible="realDataLineChartVisible" :id="clickRow!.irn"></RealDataChart>
|
<RealDataChart
|
||||||
|
ref="realDataChartRef"
|
||||||
|
:visible="realDataLineChartVisible"
|
||||||
|
:id="clickRow!.irn"
|
||||||
|
@clearChart="() => (linePause = false)"
|
||||||
|
></RealDataChart>
|
||||||
<template #header>
|
<template #header>
|
||||||
<div>
|
<div>
|
||||||
<span style="font-size: 18px">实时曲线</span>
|
<span style="font-size: 18px">实时曲线</span>
|
||||||
|
@ -50,7 +50,7 @@ import SelectPoint from '/@/views/backend/equipment/airBlower/selectPoint.vue'
|
|||||||
import { getRealValueListReq } from '/@/api/backend/deviceModel/request'
|
import { getRealValueListReq } from '/@/api/backend/deviceModel/request'
|
||||||
import { dayjs, ElMessage } from 'element-plus'
|
import { dayjs, ElMessage } from 'element-plus'
|
||||||
import { getCutDecimalsValue } from './utils'
|
import { getCutDecimalsValue } from './utils'
|
||||||
|
const emits = defineEmits(['clearChart'])
|
||||||
const props = withDefaults(defineProps<{ id: string; visible: boolean }>(), {
|
const props = withDefaults(defineProps<{ id: string; visible: boolean }>(), {
|
||||||
id: '',
|
id: '',
|
||||||
visible: false,
|
visible: false,
|
||||||
@ -117,8 +117,8 @@ const defaultList = [
|
|||||||
//#endregion
|
//#endregion
|
||||||
const selectList = ref([])
|
const selectList = ref([])
|
||||||
const changeCheck = () => {
|
const changeCheck = () => {
|
||||||
console.log('-----------------------------------',timer,selectList.value);
|
console.log('-----------------------------------', timer, selectList.value)
|
||||||
|
|
||||||
if (!timer && selectList.value[0]) {
|
if (!timer && selectList.value[0]) {
|
||||||
createTimer()
|
createTimer()
|
||||||
}
|
}
|
||||||
@ -367,6 +367,7 @@ const clearTimer = () => {
|
|||||||
realDataSeries = []
|
realDataSeries = []
|
||||||
realDataXAxis = []
|
realDataXAxis = []
|
||||||
pauseState.value = false
|
pauseState.value = false
|
||||||
|
emits('clearChart')
|
||||||
}
|
}
|
||||||
|
|
||||||
const pauseState = ref(false)
|
const pauseState = ref(false)
|
||||||
|
Loading…
Reference in New Issue
Block a user