我现在是这样做的。但是这样做,公式就隐藏在了我的自定义类中了,而不是放到redis的公式,违背了我最开始的要求。
想要把公式放到redis中,java代码直接拿来传参就使用。不知道怎么弄
@Test
public void t4() {
BigDecimal x1 = new BigDecimal("1.0");
BigDecimal x2 = new BigDecimal("3.35");
BigDecimal totalMileage = new BigDecimal("10000");
CustomMake.me().register("energy", new EnergyEl());
Context context = Lang.context();
context.set("x1", x1);
context.set("x2", x2);
context.set("totalMileage", totalMileage);
Double energy = (Double) El.eval(context, "energy(x1,x2,totalMileage)");//综合能耗
System.out.println(energy);
}
public class EnergyEl implements RunMethod, Plugin {
DecimalFormat df = new DecimalFormat("######0.00");
BigDecimal x1;
BigDecimal x2;
BigDecimal totalMileage;
public EnergyEl() {
}
@Override
public Object run(List<Object> fetchParam) {
this.x1 = new BigDecimal(fetchParam.get(0).toString());
this.x2 = new BigDecimal(fetchParam.get(1).toString());
this.totalMileage = new BigDecimal(fetchParam.get(2).toString());
//DecimalFormat df = new DecimalFormat("######0.00");
//double x = Double.parseDouble(df.format(Math.random() * 1.0 + 3.35));//默认算子
double x = Double.parseDouble(df.format(Math.random() * x1.doubleValue() + x2.doubleValue()));
//((totalMileage/x)/0.89/totalMileage)*100
//当日综合能耗 = ((当日行驶里程/x)/0.89/当日行驶里程)*100
double d1 = NumberUtil.div(totalMileage.doubleValue(), x);// (当日行驶里程/x)
double d2 = NumberUtil.div(d1, 0.89D);// (当日行驶里程/x)/0.89
double d3 = NumberUtil.div(d2, totalMileage.doubleValue());// ((当日行驶里程/x)/0.89/当日行驶里程)
double energy = NumberUtil.mul(d3, 100);// ((当日行驶里程/x)/0.89/当日行驶里程)*100
return energy;
}
@Override
public String fetchSelf() {
return null;
}
@Override
public boolean canWork() {
return true;
}
}