培训day05(表头表体字段计算)

培训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");
		
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和安韩Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值