培训day05(表头表体字段计算)
1.表头字段计算
AceHeadTailAfterEditHandler.java
public class AceHeadTailAfterEditHandler implements
IAppEventHandler<CardHeadTailAfterEditEvent> {
@Override
public void handleAppEvent(CardHeadTailAfterEditEvent e) {
//当前编辑字段的名称
String key=e.getKey();
try {
//原币*本币汇率=本币
if(key.equals("norifkmny") || key.equals("currate")){
//编辑完原币或本币汇率字段后计算本币
calculateNfkmny(e);
}
//本币汇率=本币/原币
if(key.equals("nfkmny")){
//编辑完原币后计算本币汇率
calculateCurrate(e);
}
} catch (BusinessException) {
ExceptionUtils.wrappBusinessException(e1.getMessage());
}
}
private void calculateCurrate(CardHeadTailAfterEditEvent e) throws BusinessException{
//获取表头本币字段的值
UFDouble nfkmny = NullValueUtils.getNullUFdoubleValue(e.getBillCardPanel().getHeadItem("nfkmny").getValueObject());
//获取表头原币字段的值
UFDouble norifkmny = NullValueUtils.getNullUFdoubleValue(e.getBillCardPanel().getHeadItem("norifkmny").getValueObject());
//初始化提示信息
String str = "";
//计算原币 UFDouble.ZERO_DBL等价于new UFDouble(0)
if(norifkmny.compareTo(UFDouble.ZERO_DBL) == 0){
//提示分母(原币)不能为0
str = "分母(原币)为0,无法计算本币汇率";
}else{
//本币汇率=本币/原币
UFDouble currate = nfkmny.div(norifkmny);
//给本币汇率字段赋值
e.getBillCardPanel().setHeadItem("currate", currate);
}
//如果提示信息不为空
if(str != null && !"".equals(str)){
//把提示信息在前端输出
throw new BusinessException(str);
}
}
private void calculateNfkmny(CardHeadTailAfterEditEvent e) {
//获取表头原币字段的值
UFDouble norifkmny = NullValueUtils.getNullUFdoubleValue(e.getBillCardPanel().getHeadItem("norifkmny").getValueObject());
//获取表头本币汇率字段的值
UFDouble currate = NullValueUtils.getNullUFdoubleValue(e.getBillCardPanel().getHeadItem("currate").getValueObject());
//计算本币 nfkmny
UFDouble nfkmny = norifkmny.multiply(currate);
//给本币字段赋值
e.getBillCardPanel().setHeadItem("nfkmny", nfkmny);
}
}
2.表体字段计算
AceBodyAfterEditHandler.java
public class AceBodyAfterEditHandler implements
IAppEventHandler<CardBodyAfterEditEvent> {
@Override
public void handleAppEvent(CardBodyAfterEditEvent e) {
//获取当前编辑字段的名称
String key = e.getKey();
//获取当前编辑行
int row = e.getRow();
try {
if(key.equals("nnum") || key.equals("nprice")){
calculateMny(e,row);
}
if(key.equals("nmny")){
calculateNum(e,row);
}
} catch (BusinessException e1) {
ExceptionUtils.wrappBusinessException(e1.getMessage());
}
}
private void calculateNum(CardBodyAfterEditEvent e, int row) throws BusinessException{
//获取当前编辑行对应的编码为nmny字段的值
UFDouble nmny = NullValueUtils.getNullUFdoubleValue(e.getBillCardPanel().getBodyValueAt(row, "nmny"));
//获取当前编辑行对应的编码为nprice字段的值
UFDouble nprice = NullValueUtils.getNullUFdoubleValue(e.getBillCardPanel().getBodyValueAt(row, "nprice"));
//初始化提示信息
String str = "";
//如果单价为0,UFDouble.ZERO_DBL等价于new UFDouble(0)
if(nprice.compareTo(UFDouble.ZERO_DBL) == 0){
//提示分母(单价)不能为0
str = "分母(单价)为0,无法计算数量";
}else{
//计算数量
UFDouble nnum = nmny.div(nprice);
//表体赋值,把nnum赋给当前行上的"nnum"字段
e.getBillCardPanel().setBodyValueAt(nnum, row, "nnum");
}
//如果提示信息不为空
if(str != null && !"".equals(str)){
//把提示信息在前端输出
throw new BusinessException(str);
}
}
private void calculateMny(CardBodyAfterEditEvent e,int row) {
//获取当前编辑行对应的编码为nnum字段的值
UFDouble nnum = NullValueUtils.getNullUFdoubleValue(e.getBillCardPanel().getBodyValueAt(row, "nnum"));
//获取当前编辑行对应的编码为nprice字段的值
UFDouble nprice = NullValueUtils.getNullUFdoubleValue(e.getBillCardPanel().getBodyValueAt(row, "nprice"));
//计算金额
UFDouble nmny = nnum.multiply(nprice);
//把算出的结果(nmny)赋给当前行上的金额字段("nmny")
e.getBillCardPanel().setBodyValueAt(nmny, row, "nmny");
}
}