增加时间处理函数

This commit is contained in:
谷成伟 2024-12-03 13:08:20 +08:00
parent e9287b68a7
commit 1a3ea788dd
3 changed files with 111 additions and 4 deletions

View File

@ -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<String, Object> 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);
}
}

View File

@ -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<String, Object> 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);
}
}

View File

@ -6,10 +6,7 @@ import com.das.common.utils.AdminRedisTemplate;
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.FunctionCacheValue; import com.das.modules.calc.functions.*;
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.mapper.CalcModuleMapper; import com.das.modules.calc.mapper.CalcModuleMapper;
import com.das.modules.data.service.DataService; import com.das.modules.data.service.DataService;
import com.googlecode.aviator.AviatorEvaluator; import com.googlecode.aviator.AviatorEvaluator;
@ -125,6 +122,12 @@ public class CalcService {
FunctionSumValue sumv = new FunctionSumValue(dataService, cacheService); FunctionSumValue sumv = new FunctionSumValue(dataService, cacheService);
aviator.addFunction(sumv); aviator.addFunction(sumv);
FunctionBeginOfDate beginOfDate = new FunctionBeginOfDate();
aviator.addFunction(beginOfDate);
FunctionEndOfDate endOfDate = new FunctionEndOfDate();
aviator.addFunction(endOfDate);
} }
/** /**