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); } /**