package com.finance.system.dto;
|
|
import com.finance.common.enums.CalculateTypeEnum;
|
import com.finance.common.utils.CalculateUtil;
|
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModelProperty;
|
import java.util.List;
|
import java.util.Map;
|
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotNull;
|
import lombok.Data;
|
|
/**
|
* @author mitao
|
* @date 2024/3/18
|
*/
|
@Data
|
@ApiModel(value = "基础数据配置数据传输对象")
|
public class BasicDataConfigDTO {
|
|
@ApiModelProperty(value = "类型名称")
|
@NotBlank(message = "类型名称不能为空")
|
private String typeName;
|
|
@ApiModelProperty(value = "基础数据分类id")
|
@NotNull(message = "基础数据分类id不能为空")
|
private Long basicDataCategoryId;
|
|
@ApiModelProperty(value = "字段说明")
|
@NotBlank(message = "字段说明不能为空")
|
private String fieldDescription;
|
|
@ApiModelProperty(value = "计算类型(数字计算 文本统计 百分比统计)")
|
@NotNull(message = "计算类型不能为空")
|
private CalculateTypeEnum calculateType;
|
|
@ApiModelProperty(value = "字段id ", notes = "文本统计 和百分比统计的的字段id")
|
private String fieldIdStr;
|
|
@ApiModelProperty(value = "最大分值")
|
private Double maxScore;
|
|
@ApiModelProperty(value = "计算公式")
|
private List<CalculateItemDTO> calculateItemList;
|
|
@ApiModelProperty(value = "文本和百分比配置信息", notes = "当计算方式为 文本统计/百分比统计 " +
|
"配置内容使用这个字段接收;key为键,value为得分;百分比统计 将百分比区间使用'_'拼接作为key,e.g: 10_20,20_30")
|
private List<CalculateDTO> dtoList;
|
|
public static void main(String[] args) {
|
/* String rule = "(field1_13+field2_50) × 5 ÷ field3_63×10";
|
|
// 正则表达式模式,匹配形如 "fieldName:value" 的字符串
|
Pattern pattern = Pattern.compile("\\b(\\w+)_(\\d+)\\b");
|
Matcher matcher = pattern.matcher(rule);
|
|
Map<String, Integer> map = new HashMap<>();
|
// 循环匹配并输出字段名和值
|
while (matcher.find()) {
|
String fieldName = matcher.group(1);
|
int value = Integer.parseInt(matcher.group(2));
|
System.out.println("Field: " + fieldName + ", Value: " + value);
|
}
|
|
// 假设用户上传的字段值
|
int field1_13 = 500;
|
int field2_50 = 30;
|
int field3_63 = 1000;
|
|
// 计算表达式
|
String expression = "(field1_13 + field2_50) * 5 / field3_63 * 10";
|
|
// 创建 JEXL 引擎
|
JexlEngine jexl = new JexlBuilder().create();
|
|
// 创建表达式对象
|
JexlExpression exp = jexl.createExpression(expression);
|
|
// 创建上下文
|
JexlContext context = new MapContext();
|
context.set("field1_13", field1);
|
context.set("field2_50", field2);
|
context.set("field3_63", field3);
|
|
// 执行计算
|
Object result = exp.evaluate(context);
|
|
// 输出结果
|
System.out.println("Result: " + result);*/
|
|
String expression = "(field_13 + field_50) × 5 ÷ field_63 × 10-1";
|
expression = CalculateUtil.formatExpression(expression);
|
System.err.println(expression);
|
Map<String, Integer> fieldsAndValue = CalculateUtil.getFieldsAndValue(expression);
|
System.out.println(fieldsAndValue);
|
/* double calculate = CalculateUtil.calculate(expression, fieldsAndValue);
|
System.out.println(calculate);*/
|
}
|
}
|