| | |
| | | package com.ruoyi.system.dto; |
| | | |
| | | import com.ruoyi.common.enums.CalculateTypeEnum; |
| | | import com.ruoyi.common.utils.CalculateUtil; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.NotNull; |
| | | import java.util.List; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author mitao |
| | |
| | | |
| | | @ApiModelProperty(value = "基础数据分类id") |
| | | @NotNull(message = "基础数据分类id不能为空") |
| | | private Integer basicDataCategoryId; |
| | | private Long basicDataCategoryId; |
| | | |
| | | @ApiModelProperty(value = "字段说明") |
| | | @NotBlank(message = "字段说明不能为空") |
| | |
| | | @NotNull(message = "计算类型不能为空") |
| | | private CalculateTypeEnum calculateType; |
| | | |
| | | @ApiModelProperty(value = "字段id (多个id使用 ',' 拼接)") |
| | | @NotBlank(message = "字段id不能为空") |
| | | @ApiModelProperty(value = "字段id ", notes = "文本统计 和百分比统计的的字段id") |
| | | private String fieldIdStr; |
| | | |
| | | @ApiModelProperty(value = "计算公式",notes = "计算类型为数字计算,配置内容使用该字段接收;公式中字段的格式为:field_字段id,e.g:field_1,field_2等。") |
| | | private String numberCalculateFormula; |
| | | @ApiModelProperty(value = "最大分值") |
| | | private Double maxScore; |
| | | |
| | | @ApiModelProperty(value = "文本和百分比配置信息",notes = "当计算方式为 文本统计/百分比统计 " + |
| | | @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"; |
| | | /* 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); |
| | |
| | | System.out.println("Field: " + fieldName + ", Value: " + value); |
| | | } |
| | | |
| | | /* // 假设用户上传的字段值 |
| | | int field1 = 500; |
| | | int field2 = 30; |
| | | int field3 = 1000; |
| | | // 假设用户上传的字段值 |
| | | int field1_13 = 500; |
| | | int field2_50 = 30; |
| | | int field3_63 = 1000; |
| | | |
| | | // 计算表达式 |
| | | String expression = "(field1_13 + field2_50) * 5 / field3_63 * 10"; |
| | |
| | | |
| | | // 输出结果 |
| | | 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);*/ |
| | | } |
| | | } |
| | | } |