package fi.cas.opplugin; import dm.jdbc.util.StringUtil; import fi.cas.common.SettlementStatusEnum; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import java.math.BigDecimal; import java.util.HashMap; //付款处理单 public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn { private static String nckd_cas_arbill_gz_l = "nckd_cas_arbill"; //应收挂帐单标识 private static String nckd_er_prepaybill_ext = "er_prepaybill"; //预付借款单标识 private static String nckd_er_publicreimbur_ext = "er_publicreimbursebill"; //报销单标识 private static String er_contractbill = "er_contractbill"; //合同台账单标识 @Override public void beginOperationTransaction(BeginOperationTransactionArgs e) { //获取付款处理单据信息 DynamicObject[] dynamicObjects = e.getDataEntities(); for (int i = 0; i < dynamicObjects.length; i++) { //当前单头数据包 DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName()); //获取应收挂帐单id Long sourcebillid = info.getLong("sourcebillid"); //存储应收挂账单分录id和付款处理分录实付金额 HashMap amountMap = new HashMap<>(); //循环付款明细分录 for (DynamicObject entryentity : info.getDynamicObjectCollection("entry")) { //取当前循环付款明细分录的实付金额 BigDecimal expenseamount = entryentity.getBigDecimal("e_actamt"); //取当前循环付款明细分录的源单分录id String sourcebillentryid = entryentity.getString("e_sourcebillentryid"); amountMap.put(sourcebillentryid,expenseamount); } //查询应收挂账单 QFilter gzFilter = new QFilter("id", QCP.equals,sourcebillid); DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(nckd_cas_arbill_gz_l,"id",new QFilter[] {gzFilter}); //查询报销单 QFilter bxFilter = new QFilter("id", QCP.equals,sourcebillid); DynamicObject[] bxDynamicObjects = BusinessDataServiceHelper.load(nckd_er_publicreimbur_ext,"id",new QFilter[] {bxFilter}); //应收方向的回写 if (gzDynamicObjects.length > 0) { //循环数组获取结算状态,已结算金额,未结算金额 for (int c=0;c yfjkMap = new HashMap<>(); //应收挂帐单头已结算金额 BigDecimal totalSettledamt = BigDecimal.ZERO; //应收挂帐单头未结算金额 BigDecimal totalUnsettledamt = BigDecimal.ZERO; //循环应收挂帐单付款明细分录 for (DynamicObject entryentity : gzInfo.getDynamicObjectCollection("entry")) { //获取分录实付金额 BigDecimal settledamt = amountMap.get(entryentity.getString("id")); //获取未结算金额 BigDecimal unsettledamt = entryentity.getBigDecimal("e_unsettledamt"); unsettledamt = unsettledamt.subtract(settledamt); //反写分录已结算金额,未结算金额 entryentity.set("e_settledamt",settledamt); entryentity.set("e_unsettledamt",unsettledamt); totalSettledamt = totalSettledamt.add(settledamt); totalUnsettledamt = totalUnsettledamt.add(unsettledamt); String yfjkSourceBillEntryId = entryentity.getString("e_sourcebillentryid"); yfjkMap.put(yfjkSourceBillEntryId,settledamt); } if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) { gzInfo.set("settlestatus", SettlementStatusEnum.已结算.getValue()); gzInfo.set("settleamount", totalSettledamt); gzInfo.set("unsettleamount", totalUnsettledamt); } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) { gzInfo.set("settlestatus", SettlementStatusEnum.未结算.getValue()); gzInfo.set("settleamount", totalSettledamt); gzInfo.set("unsettleamount", totalUnsettledamt); } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) { gzInfo.set("settlestatus", SettlementStatusEnum.部分结算.getValue()); gzInfo.set("settleamount", totalSettledamt); gzInfo.set("unsettleamount", totalUnsettledamt); } SaveServiceHelper.save(new DynamicObject[]{gzInfo}); //查询预付借款单 QFilter nckd_yfjkFilter = new QFilter("id", QCP.equals,yfjkId); DynamicObject[] yfjkDynamicObjects = BusinessDataServiceHelper.load(nckd_er_prepaybill_ext,"id",new QFilter[] {nckd_yfjkFilter}); //循环数组获取结算状态,已结算金额,未结算金额 for (int d=0;d 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) { yfjkInfo.set("nckd_settlestatus", SettlementStatusEnum.已结算.getValue()); yfjkInfo.set("nckd_settleamount", totalSettledamt); yfjkInfo.set("nckd_unsettleamount", totalUnsettledamt); } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) { yfjkInfo.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue()); yfjkInfo.set("nckd_settleamount", totalSettledamt); yfjkInfo.set("nckd_unsettleamount", totalUnsettledamt); } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) { yfjkInfo.set("nckd_settlestatus", SettlementStatusEnum.部分结算.getValue()); yfjkInfo.set("nckd_settleamount", totalSettledamt); yfjkInfo.set("nckd_unsettleamount", totalUnsettledamt); } SaveServiceHelper.save(new DynamicObject[]{yfjkInfo}); } } }//应付方向的回写 else if (bxDynamicObjects.length > 0) { //循环数组获取结算状态,已结算金额,未结算金额 for (int c=0;c 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) { bxInfo.set("nckd_settlestatus", SettlementStatusEnum.已结算.getValue()); bxInfo.set("nckd_settleamount", totalSettledamt); bxInfo.set("nckd_unsettleamount", totalUnsettledamt); } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) { bxInfo.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue()); bxInfo.set("nckd_settleamount", totalSettledamt); bxInfo.set("nckd_unsettleamount", totalUnsettledamt); } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) { bxInfo.set("nckd_settlestatus", SettlementStatusEnum.部分结算.getValue()); bxInfo.set("nckd_settleamount", totalSettledamt); bxInfo.set("nckd_unsettleamount", totalUnsettledamt); } SaveServiceHelper.save(new DynamicObject[]{bxInfo}); //报账类型等于工程报账回写合同台账单 if (StringUtil.equals("engineering",reimbursetype)) { //查询合同台账单 QFilter htFilter = new QFilter("id", QCP.equals,contractbillId); DynamicObject[] htDynamicObjects = BusinessDataServiceHelper.load(er_contractbill,"id",new QFilter[] {htFilter}); for (int j=0;j 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) { htInfo.set("nckd_settlestatus", SettlementStatusEnum.已结算.getValue()); htInfo.set("nckd_settleamount", totalSettledamt); htInfo.set("nckd_unsettleamount", totalUnsettledamt); } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) { htInfo.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue()); htInfo.set("nckd_settleamount", totalSettledamt); htInfo.set("nckd_unsettleamount", totalUnsettledamt); } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) { htInfo.set("nckd_settlestatus", SettlementStatusEnum.部分结算.getValue()); htInfo.set("nckd_settleamount", totalSettledamt); htInfo.set("nckd_unsettleamount", totalUnsettledamt); } SaveServiceHelper.save(new DynamicObject[]{htInfo}); } } } } } } }