package tqq9.lc123.cloud.app.plugin.operate.ap; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.plugin.args.AfterOperationArgs; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.util.StringUtils; import kd.fi.arapcommon.api.param.ServiceNameEnum; import kd.fi.arapcommon.api.param.SettleResult; import kd.fi.arapcommon.api.settle.ISettleService; import kd.fi.arapcommon.factory.ArApServiceAPIFactory; import java.math.BigDecimal; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * 财务应付单审核调用接口结算 */ public class ApFinApBillOp extends AbstractOperationServicePlugIn { @Override public void onPreparePropertys(PreparePropertysEventArgs e) { super.onPreparePropertys(e); e.getFieldKeys().add("org"); e.getFieldKeys().add("planentity.plancorebilltype"); e.getFieldKeys().add("planentity.plancorebillno"); } @Override public void afterExecuteOperationTransaction(AfterOperationArgs e) { super.afterExecuteOperationTransaction(e); DynamicObject[] dataEntities1 = e.getDataEntities(); for (DynamicObject dynamicObject : dataEntities1) { DynamicObject org = dynamicObject.getDynamicObject("org"); //财务应付-付款计划 DynamicObjectCollection planentity = dynamicObject.getDynamicObjectCollection("planentity"); Set orderBillnoSet = new HashSet<>(); for (DynamicObject object : planentity) { String plancorebilltype = object.getString("plancorebilltype");//核心单据类型 if ("pm_purorderbill".equals(plancorebilltype)) { String plancorebillno = object.getString("plancorebillno");//核心单据号 if (StringUtils.isNotEmpty(plancorebillno)) { orderBillnoSet.add(plancorebillno); } } } //付款处理 //采购订单 DynamicObject[] pm_purorderbills = BusinessDataServiceHelper.load("pm_purorderbill", "id,billno,purbillentry_pay.tqq9_settleamount,purbillentry_pay.tqq9_paybillno,purbillentry_pay.isprepay" , new QFilter[]{new QFilter("billno", QCP.in, orderBillnoSet)}); Map map = new HashMap<>(); for (DynamicObject pm_purorderbill : pm_purorderbills) { if (null != pm_purorderbill) { //付款计划 DynamicObjectCollection purbillentry_pay = pm_purorderbill.getDynamicObjectCollection("purbillentry_pay"); for (DynamicObject object : purbillentry_pay) { boolean isprepay = object.getBoolean("isprepay");//是否预付 if (isprepay) { //本次结算金额 BigDecimal amount = object.getBigDecimal("tqq9_settleamount") == null ? BigDecimal.ZERO : object.getBigDecimal("tqq9_settleamount"); //付款单 String tqq9_paybillno = object.getString("tqq9_paybillno"); if (StringUtils.isNotEmpty(tqq9_paybillno)) { if (map.containsKey(tqq9_paybillno)){ BigDecimal bigDecimal = map.get(tqq9_paybillno); map.put(tqq9_paybillno,amount.add(bigDecimal)); }else { map.put(tqq9_paybillno, amount); } } } } } } if (map.size() > 0) { DynamicObject[] cas_paybills = BusinessDataServiceHelper.load("cas_paybill", "id,billno", new QFilter[]{new QFilter("billno", QCP.in, map.keySet())});//"SHPV2511270001" if (null != cas_paybills && cas_paybills.length > 0) { for (DynamicObject cas_paybill : cas_paybills) { String billno = cas_paybill.getString("billno"); BigDecimal amount = map.get(billno); //应付付款结算,指定金额,按单据头指定 ISettleService settleService = ArApServiceAPIFactory.getSettleService(ServiceNameEnum.APPAYSETTLE.getValue()); SettleResult settleResult = settleService.assignSettle(org.getLong("id"), dynamicObject.getLong("id"), amount, cas_paybill.getLong("id"), amount); //未结算金额-采购订单上面选择的付款单的本次结算金额 //已结算金额+采购订单上面选择的付款单的本次结算金额 } } } } } }