123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- 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<String,BigDecimal> 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<gzDynamicObjects.length;c++) {
- //应收挂帐单头数据包
- DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[i].getPkValue(), gzDynamicObjects[i].getDynamicObjectType().getName());
- //获取预付借款单id
- Long yfjkId = gzInfo.getLong("sourcebillid");
- //存储预付借款单分录id和付款处理分录实付金额
- HashMap<String,BigDecimal> 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<yfjkDynamicObjects.length;d++) {
- //预付借款单头数据包
- DynamicObject yfjkInfo = BusinessDataServiceHelper.loadSingle(yfjkDynamicObjects[i].getPkValue(), yfjkDynamicObjects[i].getDynamicObjectType().getName());
- //循环预付借款单预付借款信息分录
- for (DynamicObject entryentity : yfjkInfo.getDynamicObjectCollection("expenseentryentity")) {
- //获取分录实付金额
- BigDecimal settledamt = yfjkMap.get(entryentity.getString("id"));
- //获取未结算金额
- BigDecimal unsettledamt = entryentity.getBigDecimal("nckd_unsettleamount_et");
- unsettledamt = unsettledamt.subtract(settledamt);
- //反写分录已结算金额,未结算金额
- entryentity.set("nckd_settleamount_et",settledamt);
- entryentity.set("nckd_unsettleamount_et",unsettledamt);
- }
- 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);
- } 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<bxDynamicObjects.length;c++) {
- //应收挂帐单头数据包
- DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[i].getPkValue(), bxDynamicObjects[i].getDynamicObjectType().getName());
- String reimbursetype = bxInfo.getString("reimbursetype");
- //获取合同台账单id
- Long contractbillId = bxInfo.getLong("sourcebillid");
- //已结算金额
- BigDecimal totalSettledamt = BigDecimal.ZERO;
- //未结算金额
- BigDecimal totalUnsettledamt = BigDecimal.ZERO;
- //循环报销单收款信息分录
- for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("accountentry")) {
- //获取分录收款金额
- BigDecimal settledamt = amountMap.get(entryentity.getString("id"));
- //获取未结算金额
- BigDecimal unsettledamt = entryentity.getBigDecimal("nckd_unsettleamount_et");
- unsettledamt = unsettledamt.subtract(settledamt);
- //反写分录已结算金额,未结算金额
- entryentity.set("nckd_settleamount_et",settledamt);
- entryentity.set("nckd_unsettleamount_et",unsettledamt);
- totalSettledamt = totalSettledamt.add(settledamt);
- totalUnsettledamt = totalUnsettledamt.add(unsettledamt);
- }
- 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);
- } 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<htDynamicObjects.length;j++) {
- //合同台账单头数据包
- DynamicObject htInfo = BusinessDataServiceHelper.loadSingle(htDynamicObjects[i].getPkValue(), htDynamicObjects[i].getDynamicObjectType().getName());
- htInfo.set("oripayedamount",totalSettledamt);
- htInfo.set("orinotpayamount",totalUnsettledamt);
- 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);
- } 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});
- }
- }
- }
- }
- }
- }
- }
|