package fi.em.opplugin; import com.alibaba.fastjson.JSONObject; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; import kd.bos.exception.KDBizException; import kd.bos.servicehelper.BusinessDataServiceHelper; import java.math.BigDecimal; public class BusinessProcessingOpPlugin extends AbstractOperationServicePlugIn { @Override public void beginOperationTransaction(BeginOperationTransactionArgs e) { //获取当前操作单据数组 DynamicObject[] dynamicObjects = e.getDataEntities(); for (int i = 0; i < dynamicObjects.length; i++) { JSONObject object = new JSONObject(); //当前单头数据包 DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName()); String detailtype = info.getString("nckd_detailtype"); if ("A".equals(detailtype)) { DynamicObjectCollection nckdEntryentity1 = info.getDynamicObjectCollection("nckd_entryentity1"); DynamicObjectCollection nckdEntryentity3 = info.getDynamicObjectCollection("nckd_entryentity3"); if(!nckdEntryentity1.isEmpty() && !nckdEntryentity3.isEmpty()){ throw new KDBizException("应收挂账与租赁合同不能同时冲销!"); } if (!nckdEntryentity1.isEmpty()) { BigDecimal nckdSkmxjehj = info.getBigDecimal("nckd_skmxjehj");//收款合计 BigDecimal nckdYsgzjehj = info.getBigDecimal("nckd_ysgzjehj");//应收合计 BigDecimal nckdhtamount = info.getBigDecimal("nckd_htamount");//合同合计 double latitudeDo = nckdhtamount.doubleValue(); double latitudeDou = nckdSkmxjehj.doubleValue(); double latitudeDous = nckdYsgzjehj.doubleValue(); if (latitudeDou != latitudeDous) { throw new KDBizException("收款金额与冲销金额不一致!"); } } if (!nckdEntryentity3.isEmpty()) { BigDecimal nckdSkmxjehj = info.getBigDecimal("nckd_skmxjehj");//收款合计 BigDecimal nckdYsgzjehj = info.getBigDecimal("nckd_ysgzjehj");//应收合计 BigDecimal nckdhtamount = info.getBigDecimal("nckd_htamount");//合同合计 double latitudeDo = nckdhtamount.doubleValue(); double latitudeDou = nckdSkmxjehj.doubleValue(); double latitudeDous = nckdYsgzjehj.doubleValue(); if (latitudeDou != latitudeDo) { throw new KDBizException("收款金额与合同冲销金额不一致!"); } } } else if ("B".equals(detailtype)) { BigDecimal nckdFkmxjehj = info.getBigDecimal("nckd_fkmxjehj"); BigDecimal nckdYfgzjehj = info.getBigDecimal("nckd_yfgzjehj"); double latitudeDou = nckdFkmxjehj.doubleValue(); double latitudeDous = nckdYfgzjehj.doubleValue(); if (latitudeDou != latitudeDous) { throw new KDBizException("付款金额与冲销金额不一致!"); } } int count =0; for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity2")) { count++; BigDecimal nckdCyfcxbalance = entryentity.getBigDecimal("nckd_cyfcxbalance");//冲销金额 BigDecimal nckdCyfgzbalance = entryentity.getBigDecimal("nckd_cyfgzbalance");//应付挂账 if(nckdCyfcxbalance.compareTo(nckdCyfgzbalance) == 1){ throw new KDBizException("冲应付挂账明细第"+count+"行冲销金额大于应付挂账余额"); } } int counts =0; for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity1")) { counts++; BigDecimal nckd_cyscxbalance = entryentity.getBigDecimal("nckd_cyscxbalance");//冲销金额 BigDecimal nckd_cysgzbalance = entryentity.getBigDecimal("nckd_cysgzbalance");//应付挂账 if(nckd_cyscxbalance.compareTo(nckd_cysgzbalance) == 1){ throw new KDBizException("冲应收挂账明细第"+counts+"行冲销金额大于应收挂账余额"); } } } } }