zm
2020-05-18 a18bfacbf56b401f6e0fdae8710fbca4df8cff77
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.changhong.epc.parsing.service.autosubmit.tool.function;
 
import com.changhong.epc.parsing.service.autosubmit.info.FormCpn;
import com.changhong.epc.parsing.service.autosubmit.info.impl.cpn.ChildCpn;
import com.changhong.epc.parsing.service.autosubmit.prop.Attribute;
import com.changhong.epc.parsing.service.autosubmit.tool.FormCpnTool;
import com.googlecode.aviator.runtime.function.AbstractFunction;
import com.googlecode.aviator.runtime.type.AviatorDouble;
import com.googlecode.aviator.runtime.type.AviatorObject;
import org.apache.commons.lang3.math.NumberUtils;
 
import java.math.BigDecimal;
import java.util.Map;
import java.util.Objects;
 
public class Avg extends AbstractFunction{
 
    @Override
    public String getName() {
        return "AVG";
    }
 
    @Override
    public AviatorObject call(Map<String, Object> env, AviatorObject cpnKey) {
        Object cpnObj = cpnKey.getValue(env);
        if(!(cpnObj instanceof FormCpn))
            return new AviatorDouble(0);
        FormCpn parent = ((FormCpn) cpnObj).getParentCpn();
        if(!(parent instanceof ChildCpn))
            return new AviatorDouble(NumberUtils.createNumber(Objects.toString(parent.get(Attribute.value), "0")));
        double sum = FormCpnTool.sumValByCpn((FormCpn) cpnObj);
        if(BigDecimal.valueOf(sum).compareTo(BigDecimal.valueOf(0)) == 0)
            return new AviatorDouble(sum);
        else
            return new AviatorDouble(sum / ((ChildCpn) parent).getFormCpnValues().size());
    }
    
}