Explorar el Código

Merge remote-tracking branch 'origin/master'

zhouger hace 9 meses
padre
commit
9a5d021a47

+ 23 - 0
src/main/java/fi/cas/common/SettlementStatusEnum.java

@@ -0,0 +1,23 @@
+package fi.cas.common;
+
+public enum SettlementStatusEnum {
+    已结算("settled", "已结算"),
+    未结算("unsettle", "未结算"),
+    部分结算("partsettle", "部分结算");
+
+    private String value;
+    private String name;
+
+    SettlementStatusEnum(String value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 219 - 0
src/main/java/fi/cas/opplugin/PaymentProcessOpPlugin.java

@@ -0,0 +1,219 @@
+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"; //合同台账单标识
+    private static String nckd_ap_finapbill_gz = "ap_finapbill"; //应付挂账单标识
+    @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")) == null ? BigDecimal.ZERO: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);
+                    }
+                    //结算字段赋值
+                    settleMethod(gzInfo,"settlestatus","settleamount","unsettleamount",totalSettledamt,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")) == null ? BigDecimal.ZERO: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);
+                        }
+                        //结算字段赋值
+                        settleMethod(yfjkInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",totalSettledamt,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());
+                    Long bxId = bxInfo.getLong("id");
+                    //报账类型
+                    String reimbursetype = bxInfo.getString("reimbursetype");
+                    //已结算金额
+                    BigDecimal totalSettledamt = BigDecimal.ZERO;
+                    //未结算金额
+                    BigDecimal totalUnsettledamt = BigDecimal.ZERO;
+                    //循环报销单收款信息分录
+                    for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("accountentry")) {
+                        //获取分录收款金额
+                        BigDecimal settledamt = amountMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO: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});
+                    //查询应付挂账
+                    QFilter nckd_yfgzFilter = new QFilter("sourcebillid", QCP.equals,bxId);
+                    DynamicObject[] yfgzDynamicObjects = BusinessDataServiceHelper.load(nckd_ap_finapbill_gz,"id",new QFilter[] {nckd_yfgzFilter});
+                    if (yfgzDynamicObjects.length > 0) {
+                        for (int f=0;f<yfgzDynamicObjects.length;f++) {
+                            //应付挂账单
+                            DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(yfgzDynamicObjects[i].getPkValue(), yfgzDynamicObjects[i].getDynamicObjectType().getName());
+                            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});
+                        }
+                    }
+                    //报账类型等于工程报账回写合同台账单
+                    if (StringUtil.equals("engineering",reimbursetype)) {
+                        //获取合同台账单id
+                        Long contractbillId = bxInfo.getLong("sourcebillid");
+                        //查询合同台账单
+                        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});
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /*
+     * 给结算状态,结算金额,未结算金额赋值
+     * */
+    private void settleMethod(DynamicObject object ,String settlestatus ,String settleamount ,String unsettleamount ,BigDecimal totalSettledamt ,BigDecimal totalUnsettledamt) {
+        if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
+            object.set(settlestatus, SettlementStatusEnum.已结算.getValue());
+            object.set(settleamount, totalSettledamt);
+            object.set(unsettleamount, totalUnsettledamt);
+        } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
+            object.set(settlestatus, SettlementStatusEnum.未结算.getValue());
+            object.set(settleamount, totalSettledamt);
+            object.set(unsettleamount, totalUnsettledamt);
+        } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
+            object.set(settlestatus, SettlementStatusEnum.部分结算.getValue());
+            object.set(settleamount, totalSettledamt);
+            object.set(unsettleamount, totalUnsettledamt);
+        }
+    }
+}

+ 186 - 0
src/main/java/fi/cas/opplugin/UnPaymentProcessOpPlugin.java

@@ -0,0 +1,186 @@
+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 UnPaymentProcessOpPlugin 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"; //合同台账单标识
+    private static String nckd_ap_finapbill_gz = "ap_finapbill"; //应付挂账单标识
+    @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 expenseamount = amountMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO:amountMap.get(entryentity.getString("id"));
+                        //获取已结算金额
+                        BigDecimal settledamt = entryentity.getBigDecimal("e_settledamt");
+                        settledamt = settledamt.subtract(expenseamount);
+                        //反写分录已结算金额,未结算金额
+                        entryentity.set("e_settledamt",settledamt);
+                        entryentity.set("e_unsettledamt",expenseamount);
+                        totalSettledamt = totalSettledamt.add(settledamt);
+                        totalUnsettledamt = totalUnsettledamt.add(expenseamount);
+                        String yfjkSourceBillEntryId = entryentity.getString("e_sourcebillentryid");
+                        yfjkMap.put(yfjkSourceBillEntryId,expenseamount);
+                    }
+                    //结算字段赋值
+                    settleMethod(gzInfo,"settlestatus","settleamount","unsettleamount",totalSettledamt,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 expenseamount = yfjkMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO:yfjkMap.get(entryentity.getString("id"));
+                            //获取已结算金额
+                            BigDecimal settledamt = entryentity.getBigDecimal("nckd_settleamount_et");
+                            settledamt = settledamt.subtract(expenseamount);
+                            //反写分录已结算金额,未结算金额
+                            entryentity.set("nckd_settleamount_et",settledamt);
+                            entryentity.set("nckd_unsettleamount_et",expenseamount);
+                        }
+                        //结算字段赋值
+                        settleMethod(yfjkInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",totalSettledamt,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());
+                    Long bxId = bxInfo.getLong("id");
+                    //报账类型
+                    String reimbursetype = bxInfo.getString("reimbursetype");
+                    //已结算金额
+                    BigDecimal totalSettledamt = BigDecimal.ZERO;
+                    //未结算金额
+                    BigDecimal totalUnsettledamt = BigDecimal.ZERO;
+                    //循环报销单收款信息分录
+                    for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("accountentry")) {
+                        //获取分录收款金额
+                        BigDecimal expenseamount = amountMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO:amountMap.get(entryentity.getString("id"));
+                        //获取已结算金额
+                        BigDecimal settledamt = entryentity.getBigDecimal("nckd_settleamount_et");
+                        settledamt = settledamt.subtract(expenseamount);
+                        //反写分录已结算金额,未结算金额
+                        entryentity.set("nckd_settleamount_et",settledamt);
+                        entryentity.set("nckd_unsettleamount_et",expenseamount);
+                        totalSettledamt = totalSettledamt.add(settledamt);
+                        totalUnsettledamt = totalUnsettledamt.add(expenseamount);
+                    }
+                    //结算字段赋值
+                    settleMethod(bxInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",totalSettledamt,totalUnsettledamt);
+                    SaveServiceHelper.save(new DynamicObject[]{bxInfo});
+                    //查询应付挂账
+                    QFilter nckd_yfgzFilter = new QFilter("sourcebillid", QCP.equals,bxId);
+                    DynamicObject[] yfgzDynamicObjects = BusinessDataServiceHelper.load(nckd_ap_finapbill_gz,"id",new QFilter[] {nckd_yfgzFilter});
+                    if (yfgzDynamicObjects.length > 0) {
+                        for (int f=0;f<yfgzDynamicObjects.length;f++) {
+                            //应付挂账单
+                            DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(yfgzDynamicObjects[i].getPkValue(), yfgzDynamicObjects[i].getDynamicObjectType().getName());
+                            //结算字段赋值
+                            settleMethod(gzInfo,"settlestatus","settleamount","unsettleamount",totalSettledamt,totalUnsettledamt);
+                            SaveServiceHelper.save(new DynamicObject[]{gzInfo});
+                        }
+                    }
+                    //报账类型等于工程报账回写合同台账单
+                    if (StringUtil.equals("engineering",reimbursetype)) {
+                        //获取合同台账单id
+                        Long contractbillId = bxInfo.getLong("sourcebillid");
+                        //查询合同台账单
+                        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);
+                            //结算字段赋值
+                            settleMethod(htInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",totalSettledamt,totalUnsettledamt);
+                            SaveServiceHelper.save(new DynamicObject[]{htInfo});
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /*
+    * 给结算状态,结算金额,未结算金额赋值
+    * */
+    private void settleMethod(DynamicObject object ,String settlestatus ,String settleamount ,String unsettleamount ,BigDecimal totalSettledamt ,BigDecimal totalUnsettledamt) {
+        if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
+            object.set(settlestatus, SettlementStatusEnum.已结算.getValue());
+            object.set(settleamount, totalSettledamt);
+            object.set(unsettleamount, totalUnsettledamt);
+        } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
+            object.set(settlestatus, SettlementStatusEnum.未结算.getValue());
+            object.set(settleamount, totalSettledamt);
+            object.set(unsettleamount, totalUnsettledamt);
+        } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
+            object.set(settlestatus, SettlementStatusEnum.部分结算.getValue());
+            object.set(settleamount, totalSettledamt);
+            object.set(unsettleamount, totalUnsettledamt);
+        }
+    }
+}

+ 8 - 18
src/main/java/fi/em/editPlugin/BusinessProcessingEditPlugin.java

@@ -13,34 +13,24 @@ import kd.sdk.plugin.Plugin;
 public class BusinessProcessingEditPlugin extends AbstractListPlugin implements Plugin {
     public static String btn_NOTICE = "fkf"; //操作
     public static String btn_NOTICES = "skf"; //操作
-    public static String nckd_agentparameterf7 = "nckd_agentparameterf7";//动因参数动态列表
+    public static String nckd_agentparameterf7 = "nckd_ywclskf";//动态列表
     private static String bos_org = "bos_org"; //组织金额标识
 
     @Override
     public void afterDoOperation(AfterDoOperationEventArgs e) {
         String operateKey = e.getOperateKey();
-        if (btn_NOTICE.equals(e.getOperateKey())) { //切换付款方
-            Object value = this.getModel().getValue("costcompany");//获取当前单据费用公司
-            DynamicObjectCollection expenseentryentityWait = this.getModel().getEntryEntity("expenseentryentity_wait");
-            DynamicObject dynamicObject = expenseentryentityWait.get(0);
-            DynamicObject entrycostcompanyWait = dynamicObject.getDynamicObject("entrycostcompany_wait");
-            if(entrycostcompanyWait==null){
-                throw new KDBizException("待摊明细分录为空!");
-            }
+        if (btn_NOTICE.equals(e.getOperateKey())) {
+            Object value = this.getModel().getValue("nckd_costcompany");//获取当前单据费用公司
+            DynamicObject entrycostcompanyWait = (DynamicObject)value;
             String orgnumber = entrycostcompanyWait.getString("number");//公司编码
             String orgid = entrycostcompanyWait.getString("id");//公司id
             if (orgnumber == null){
-                throw new KDBizException("费承担公司为空!");
+                throw new KDBizException("费用承担公司为空!");
             }
             showParameter(nckd_agentparameterf7, btn_NOTICE,orgnumber,orgid);//调用弹出页面
-        }else if (btn_NOTICES.equals(e.getOperateKey())) { //切换收款方
-            Object value = this.getModel().getValue("costcompany");//获取当前单据费用公司
-            DynamicObjectCollection expenseentryentityWait = this.getModel().getEntryEntity("expenseentryentity_wait");
-            DynamicObject dynamicObject = expenseentryentityWait.get(0);
-            DynamicObject entrycostcompanyWait = dynamicObject.getDynamicObject("entrycostcompany_wait");
-            if(entrycostcompanyWait==null){
-                throw new KDBizException("待摊明细分录为空!");
-            }
+        }else if (btn_NOTICES.equals(e.getOperateKey())) {
+            Object value = this.getModel().getValue("nckd_costcompany");//获取当前单据费用公司
+            DynamicObject entrycostcompanyWait = (DynamicObject)value;
             String orgnumber = entrycostcompanyWait.getString("number");//公司编码
             String orgid = entrycostcompanyWait.getString("id");//公司id
             if (orgnumber == null){

+ 10 - 5
src/main/java/fi/em/editPlugin/CostAllocationEditPlugin.java

@@ -27,10 +27,11 @@ public class CostAllocationEditPlugin extends AbstractListPlugin implements Plug
     public static String nckd_agentparameterf7 = "nckd_agentparameterf7";//动因参数动态列表
     private static String bos_org = "bos_org"; //组织
 
+
     @Override
     public void afterDoOperation(AfterDoOperationEventArgs e) {
         String operateKey = e.getOperateKey();
-        if (btn_NOTICE.equals(e.getOperateKey())) {
+        if (btn_NOTICE.equals(e.getOperateKey())) { //切换付款方
             Object value = this.getModel().getValue("costcompany");//获取当前单据费用公司
             DynamicObjectCollection expenseentryentityWait = this.getModel().getEntryEntity("expenseentryentity_wait");
             DynamicObject dynamicObject = expenseentryentityWait.get(0);
@@ -44,9 +45,14 @@ public class CostAllocationEditPlugin extends AbstractListPlugin implements Plug
                 throw new KDBizException("付费承担公司为空!");
             }
             showParameter(nckd_agentparameterf7, btn_NOTICE,orgnumber,orgid);//调用弹出页面
-        }else if (btn_NOTICES.equals(e.getOperateKey())) {
-            Object value = this.getModel().getValue("costcompany");//获取当前单据费用公司
-            DynamicObject entrycostcompanyWait = (DynamicObject)value;
+        }else if (btn_NOTICES.equals(e.getOperateKey())) { //切换收款方
+            Object value = this.getModel().getValue("nckd_costcompany");//获取当前单据费用公司
+            DynamicObjectCollection expenseentryentityWait = this.getModel().getEntryEntity("expenseentryentity_wait");
+            DynamicObject dynamicObject = expenseentryentityWait.get(0);
+            DynamicObject entrycostcompanyWait = dynamicObject.getDynamicObject("entrycostcompany_wait");
+            if(entrycostcompanyWait==null){
+                throw new KDBizException("待摊明细分录为空!");
+            }
             String orgnumber = entrycostcompanyWait.getString("number");//公司编码
             String orgid = entrycostcompanyWait.getString("id");//公司id
             if (orgnumber == null){
@@ -55,7 +61,6 @@ public class CostAllocationEditPlugin extends AbstractListPlugin implements Plug
             showParameter(nckd_agentparameterf7, btn_NOTICE,orgnumber,orgid);//调用弹出页面
         }
     }
-
     @Override
     public void closedCallBack(ClosedCallBackEvent e) {
         super.closedCallBack(e);

+ 37 - 0
src/main/java/fi/er/opplugin/ContractBillOpPlugin.java

@@ -0,0 +1,37 @@
+package fi.er.opplugin;
+
+import com.alibaba.druid.util.StringUtils;
+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.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import java.math.BigDecimal;
+
+//合同台账单
+public class ContractBillOpPlugin extends AbstractOperationServicePlugIn {
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        //获取合同台账单据信息
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            if (StringUtils.equals(e.getOperationKey(),"audit")) {
+                //当前单头数据包
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                BigDecimal orinotpayamount = info.getBigDecimal("orinotpayamount");
+                info.set("nckd_unsettleamount",orinotpayamount);
+                info.set("nckd_settleamount",BigDecimal.ZERO);
+                info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+                SaveServiceHelper.save(new DynamicObject[]{info});
+            } else if (StringUtils.equals(e.getOperationKey(),"unaudit")) {
+                //当前单头数据包
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                info.set("nckd_unsettleamount",BigDecimal.ZERO);
+                info.set("nckd_settlestatus", null);
+                SaveServiceHelper.save(new DynamicObject[]{info});
+            }
+        }
+    }
+}

+ 40 - 0
src/main/java/fi/er/opplugin/FinapbillBeforeF7SelectSample.java

@@ -0,0 +1,40 @@
+package fi.er.opplugin;
+
+import com.alibaba.druid.util.StringUtils;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.field.RefBillEdit;
+import kd.bos.form.field.events.BeforeF7SelectEvent;
+import kd.bos.form.field.events.BeforeF7SelectListener;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.list.ListShowParameter;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+
+import java.util.EventObject;
+
+public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements BeforeF7SelectListener {
+    private static String nckd_apfinapbill = "nckd_apfinapbill"; //应付挂账单字段
+    @Override
+    public void registerListener(EventObject e) {
+        //监听单据字段
+        super.registerListener(e);
+        RefBillEdit bill = this.getView().getControl(nckd_apfinapbill);
+        bill.addBeforeF7SelectListener(this);
+    }
+    @Override
+    public void beforeF7Select(BeforeF7SelectEvent arg0) {
+        String fieldKey = arg0.getProperty().getName();
+        if (StringUtils.equals(fieldKey, nckd_apfinapbill)){
+            DynamicObject costcompany = (DynamicObject) this.getModel().getValue("costcompany");
+            Long costcompanyId = costcompany.getLong("id");
+            // 生成过滤条件对象QFilter
+            QFilter qFilter = new QFilter("org", QCP.equals, costcompanyId);
+            qFilter.and("nckd_selectflag", QCP.not_in, "1");
+            // 设置列表过滤条件
+            ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
+            showParameter.getListFilterParameter().setFilter(qFilter);
+        }
+    }
+}

+ 52 - 0
src/main/java/fi/er/opplugin/PrePayBillOpPlugin.java

@@ -0,0 +1,52 @@
+package fi.er.opplugin;
+
+import com.alibaba.druid.util.StringUtils;
+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.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import java.math.BigDecimal;
+
+//预付借款单
+public class PrePayBillOpPlugin extends AbstractOperationServicePlugIn {
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        //获取预付借款单据信息
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            if (StringUtils.equals(e.getOperationKey(),"audit")) {
+                //当前单头数据包
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                BigDecimal totalUnsettleamount = BigDecimal.ZERO;
+                //循环预付借款信息分录
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("expenseentryentity")) {
+                    //取当前循环预付借款信息分录的核定金额
+                    BigDecimal expeapproveamount = entryentity.getBigDecimal("expeapproveamount");
+                    //未结算金额=核定金额
+                    entryentity.set("nckd_unsettleamount_et",expeapproveamount);
+                    entryentity.set("nckd_settleamount_et",BigDecimal.ZERO);
+                    totalUnsettleamount = totalUnsettleamount.add(expeapproveamount);
+                }
+                info.set("nckd_unsettleamount",totalUnsettleamount);
+                info.set("nckd_settleamount",BigDecimal.ZERO);
+                info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+                SaveServiceHelper.save(new DynamicObject[]{info});
+            } else if (StringUtils.equals(e.getOperationKey(),"unaudit")) {
+                //当前单头数据包
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                BigDecimal totalUnsettleamount = BigDecimal.ZERO;
+                //循环预付借款信息分录
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("expenseentryentity")) {
+                    //反审核,未结算金额置为0
+                    entryentity.set("nckd_unsettleamount_et",BigDecimal.ZERO);
+                }
+                info.set("nckd_unsettleamount",BigDecimal.ZERO);
+                info.set("nckd_settlestatus", null);
+                SaveServiceHelper.save(new DynamicObject[]{info});
+            }
+        }
+    }
+}

+ 91 - 0
src/main/java/fi/er/opplugin/PublicreimburOpPlugin.java

@@ -0,0 +1,91 @@
+package fi.er.opplugin;
+
+import com.alibaba.druid.util.StringUtils;
+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.ArrayList;
+import java.util.List;
+
+//报销单
+public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
+    private static String ap_finapbill = "ap_finapbill"; //应付挂账单字段
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        //获取报销单据信息
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            if (StringUtils.equals(e.getOperationKey(),"audit")) {
+                //当前单头数据包
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                BigDecimal totalUnsettleamount = BigDecimal.ZERO;
+                //循环收款信息分录
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("accountentry")) {
+                    //取当前分录的收款金额
+                    BigDecimal orireceiveamount = entryentity.getBigDecimal("orireceiveamount");
+                    //未结算金额=收款金额
+                    entryentity.set("nckd_unsettleamount_et",orireceiveamount);
+                    entryentity.set("nckd_settleamount_et",BigDecimal.ZERO);
+                    totalUnsettleamount = totalUnsettleamount.add(orireceiveamount);
+                }
+                info.set("nckd_unsettleamount",totalUnsettleamount);
+                info.set("nckd_settleamount",BigDecimal.ZERO);
+                info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+                SaveServiceHelper.save(new DynamicObject[]{info});
+            } else if (StringUtils.equals(e.getOperationKey(),"unaudit")) {
+                //当前单头数据包
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                //循环收款信息分录
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("accountentry")) {
+                    entryentity.set("nckd_unsettleamount_et",BigDecimal.ZERO);
+                }
+                info.set("nckd_unsettleamount",BigDecimal.ZERO);
+                info.set("nckd_settlestatus", null);
+                SaveServiceHelper.save(new DynamicObject[]{info});
+            } else if (StringUtils.equals(e.getOperationKey(),"save")) {
+                List<DynamicObject> dynamicObjectList = new ArrayList<>();
+                //获取当前页面数据
+                DynamicObject info = dynamicObjects[i];
+                //获取当前单据数据库保存数据
+                DynamicObject saveInfo = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                if (saveInfo == null) {
+                    DynamicObject apfinapbill = info.getDynamicObject("nckd_apfinapbill");
+                    if (apfinapbill != null) {
+                        //所选应付挂帐单更新标识
+                        Long id =  apfinapbill.getLong("id");
+                        QFilter gzFilter = new QFilter("id", QCP.equals,id);
+                        DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {gzFilter});
+                        DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[0].getPkValue(), gzDynamicObjects[0].getDynamicObjectType().getName());
+                        gzInfo.set("nckd_selectflag","1");
+                        SaveServiceHelper.save(new DynamicObject[]{gzInfo});
+                    }
+                }else {
+                    DynamicObject apfinapbill = info.getDynamicObject("nckd_apfinapbill");
+                    DynamicObject saveApfinapbill = saveInfo.getDynamicObject("nckd_apfinapbill");
+                    Long oldId = saveApfinapbill.getLong("id");
+                    //释放原应付挂账单
+                    QFilter oldFilter = new QFilter("id", QCP.equals,oldId);
+                    DynamicObject[] oldDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {oldFilter});
+                    DynamicObject oldInfo = BusinessDataServiceHelper.loadSingle(oldDynamicObjects[0].getPkValue(), oldDynamicObjects[0].getDynamicObjectType().getName());
+                    oldInfo.set("nckd_selectflag","");
+                    SaveServiceHelper.save(new DynamicObject[]{oldInfo});
+                    if (apfinapbill !=null) {
+                        Long id =  apfinapbill.getLong("id");
+                        QFilter gzFilter = new QFilter("id", QCP.equals,id);
+                        DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {gzFilter});
+                        DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[0].getPkValue(), gzDynamicObjects[0].getDynamicObjectType().getName());
+                        gzInfo.set("nckd_selectflag","1");
+                        SaveServiceHelper.save(new DynamicObject[]{gzInfo});
+                    }
+                }
+            }
+        }
+    }
+}