diff --git a/das/src/main/java/com/das/modules/calc/functions/FunctionBeginOfDate.java b/das/src/main/java/com/das/modules/calc/functions/FunctionBeginOfDate.java new file mode 100644 index 00000000..e8b03aa7 --- /dev/null +++ b/das/src/main/java/com/das/modules/calc/functions/FunctionBeginOfDate.java @@ -0,0 +1,52 @@ +package com.das.modules.calc.functions; + +import cn.hutool.core.date.DateUtil; +import com.googlecode.aviator.runtime.function.AbstractFunction; +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.Map; + +/** + * Aviator扩展函数 - 获取时间维度的起始时间 + * 函数格式: beginOf(Date, TimeDim) + * + */ +@Slf4j +public class FunctionBeginOfDate extends AbstractFunction { + + public FunctionBeginOfDate() { + } + + @Override + public String getName() { + return "beginOfDate"; + } + + @Override + public AviatorObject call(Map env, AviatorObject dateData, AviatorObject dimData) { + Date date = (Date) dateData.getValue(env); + String dim = (String) dimData.getValue(env); + + Date result = null; + switch (dim) { + case "day": + result = DateUtil.beginOfDay(date); + break; + case "week": + result = DateUtil.beginOfWeek(date); + break; + case "month": + result = DateUtil.beginOfMonth(date); + break; + case "year": + result = DateUtil.beginOfYear(date); + break; + default: + log.error("不支持的维度: {}", dim); + } + return AviatorRuntimeJavaType.valueOf(result); + } +} diff --git a/das/src/main/java/com/das/modules/calc/functions/FunctionEndOfDate.java b/das/src/main/java/com/das/modules/calc/functions/FunctionEndOfDate.java new file mode 100644 index 00000000..8d1050ba --- /dev/null +++ b/das/src/main/java/com/das/modules/calc/functions/FunctionEndOfDate.java @@ -0,0 +1,52 @@ +package com.das.modules.calc.functions; + +import cn.hutool.core.date.DateUtil; +import com.googlecode.aviator.runtime.function.AbstractFunction; +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.Map; + +/** + * Aviator扩展函数 - 获取时间维度的起始时间 + * 函数格式: beginOf(Date, TimeDim) + * + */ +@Slf4j +public class FunctionEndOfDate extends AbstractFunction { + + public FunctionEndOfDate() { + } + + @Override + public String getName() { + return "endOfDate"; + } + + @Override + public AviatorObject call(Map env, AviatorObject dateData, AviatorObject dimData) { + Date date = (Date) dateData.getValue(env); + String dim = (String) dimData.getValue(env); + + Date result = null; + switch (dim) { + case "day": + result = DateUtil.endOfDay(date); + break; + case "week": + result = DateUtil.endOfWeek(date); + break; + case "month": + result = DateUtil.endOfMonth(date); + break; + case "year": + result = DateUtil.endOfYear(date); + break; + default: + log.error("不支持的维度: {}", dim); + } + return AviatorRuntimeJavaType.valueOf(result); + } +} 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 2e8e3da6..af47fab7 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 @@ -6,10 +6,7 @@ import com.das.common.utils.AdminRedisTemplate; 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.FunctionCacheValue; -import com.das.modules.calc.functions.FunctionRealData; -import com.das.modules.calc.functions.FunctionSaveCalcData; -import com.das.modules.calc.functions.FunctionSumValue; +import com.das.modules.calc.functions.*; import com.das.modules.calc.mapper.CalcModuleMapper; import com.das.modules.data.service.DataService; import com.googlecode.aviator.AviatorEvaluator; @@ -125,6 +122,12 @@ public class CalcService { FunctionSumValue sumv = new FunctionSumValue(dataService, cacheService); aviator.addFunction(sumv); + + FunctionBeginOfDate beginOfDate = new FunctionBeginOfDate(); + aviator.addFunction(beginOfDate); + + FunctionEndOfDate endOfDate = new FunctionEndOfDate(); + aviator.addFunction(endOfDate); } /** diff --git a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java index aca2938d..11940877 100644 --- a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java +++ b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java @@ -363,14 +363,13 @@ public class SysNodeServiceImpl implements SysNodeService { List discrete = impList.stream().filter(item -> collect.get(item.getId()) == 140).collect(Collectors.toList()); List setPoint = impList.stream().filter(item -> collect.get(item.getId()) == 146).collect(Collectors.toList()); List control = impList.stream().filter(item -> collect.get(item.getId()) == 147).collect(Collectors.toList()); + //校验param里面order不重复 if (checkOrderRepeated(analogList) || checkOrderRepeated(accumulator) || checkOrderRepeated(discrete) || checkOrderRepeated(setPoint) || checkOrderRepeated(control)){ throw new ServiceException("检查顺序,排序不能重复"); } } SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY); for (SysTabMappingVo imp : impList) { - //校验param里面order不重复 - SysTabMapping rec = sysImptabmappingMapper.selectById(imp.getId()); rec.setUpdatedTime(new Date()); rec.setUpdatedBy(sysUserVo.getAccount()); diff --git a/das/src/main/java/com/das/modules/page/service/impl/StatisticalAnalysisServiceImpl.java b/das/src/main/java/com/das/modules/page/service/impl/StatisticalAnalysisServiceImpl.java index 558bdf19..e5a4123e 100644 --- a/das/src/main/java/com/das/modules/page/service/impl/StatisticalAnalysisServiceImpl.java +++ b/das/src/main/java/com/das/modules/page/service/impl/StatisticalAnalysisServiceImpl.java @@ -78,9 +78,6 @@ public class StatisticalAnalysisServiceImpl implements StatisticalAnalysisServic */ @Override public void trendAnalyseExport(List param, HttpServletRequest request, HttpServletResponse response) { - if (param == null || param.isEmpty()) { - throw new ServiceException("参数列表不能为空"); - } //根据条件获取历史数据 List>>> mapsList = new ArrayList<>(); for (TrendAnalyseDto trendAnalyseDto : param) { @@ -271,12 +268,22 @@ public class StatisticalAnalysisServiceImpl implements StatisticalAnalysisServic */ private void setTrendContrastExcelValue(Map>> maps, List> dataList) { + Map mapKey = new HashMap<>(); + int num =1; + int flagNum = 0; for (Map.Entry>> stringMapEntry : maps.entrySet()) { - int flagNum = 0; for (Map.Entry> mapEntry : stringMapEntry.getValue().entrySet()) { List timesListstr = new ArrayList<>(); List valuesList = new ArrayList<>(); String key = mapEntry.getKey(); + if (mapKey.containsKey(key)){ + num++; + String str = key + num; + mapKey.put(str, num ); + key=str; + }else { + mapKey.put(key, num); + } for (Map.Entry stringObjectEntry : mapEntry.getValue().entrySet()) { String key1 = stringObjectEntry.getKey(); if (key1.equals("times")) { @@ -345,12 +352,21 @@ public class StatisticalAnalysisServiceImpl implements StatisticalAnalysisServic for (SnapshotValueQueryParam device : param.getDevices()) { strList.addAll(device.getAttributes()); } - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in("attribute_code", strList); - List sysIotModelFields = sysIotModelFieldMapper.selectVoList(queryWrapper); - for (SysIotModelField sysIotModelField : sysIotModelFields) { - map.put(sysIotModelField.getAttributeCode(), sysIotModelField.getAttributeName()); + int num =1; + for (String code : strList) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("attribute_code", code); + List sysIotModelFields = sysIotModelFieldMapper.selectVoList(queryWrapper); + for (SysIotModelField sysIotModelField : sysIotModelFields) { + if (map.containsKey(sysIotModelField.getAttributeCode())){ + num++; + map.put(sysIotModelField.getAttributeCode()+num, sysIotModelField.getAttributeName()+num ); + }else { + map.put(sysIotModelField.getAttributeCode(), sysIotModelField.getAttributeName()); + } + } } + return map; } diff --git a/das/src/main/java/com/das/modules/page/service/impl/TemperatureDashboardServiceImpl.java b/das/src/main/java/com/das/modules/page/service/impl/TemperatureDashboardServiceImpl.java index f03ce5fb..99845702 100644 --- a/das/src/main/java/com/das/modules/page/service/impl/TemperatureDashboardServiceImpl.java +++ b/das/src/main/java/com/das/modules/page/service/impl/TemperatureDashboardServiceImpl.java @@ -27,8 +27,8 @@ public class TemperatureDashboardServiceImpl implements TemperatureDashboardServ String params = mapping.getParams(); if (params != null && !params.isEmpty()) { JSONObject json = JSONObject.parseObject(params); - String code = json.getString("measPointCode"); - String name = json.getString("measPointName"); + String code = mapping.getMeasPointCode(); + String name = mapping.getMeasPointName(); Double limit1High=0.0; Double limit1Low=0.0; Double limit2High=0.0; diff --git a/das/src/main/resources/mapper/SysIotModelFieldMapper.xml b/das/src/main/resources/mapper/SysIotModelFieldMapper.xml index ff613731..205674cc 100644 --- a/das/src/main/resources/mapper/SysIotModelFieldMapper.xml +++ b/das/src/main/resources/mapper/SysIotModelFieldMapper.xml @@ -28,13 +28,13 @@ and t.attribute_type = #{info.attributeType} - - order by ${info.orderColumn} ${info.orderType} - - - order by t.porder asc - + + order by ${info.orderColumn} ${info.orderType} + + + order by t.porder asc +