wanwei 9 місяців тому
батько
коміт
50855d27ec

+ 58 - 36
src/main/java/fi/cas/opplugin/PaymentProcessOpPlugin.java

@@ -13,12 +13,13 @@ 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) {
         //获取付款处理单据信息
@@ -26,9 +27,9 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
         for (int i = 0; i < dynamicObjects.length; i++) {
             //当前单头数据包
             DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
-            //获取应收挂帐单id
+            //获取单id
             Long sourcebillid = info.getLong("sourcebillid");
-            //存储应收挂账单分录id和付款处理分录实付金额
+            //存储单分录id和付款处理分录实付金额
             HashMap<String,BigDecimal> amountMap = new HashMap<>();
             //循环付款明细分录
             for (DynamicObject entryentity : info.getDynamicObjectCollection("entry")) {
@@ -62,7 +63,7 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                     //循环应收挂帐单付款明细分录
                     for (DynamicObject entryentity : gzInfo.getDynamicObjectCollection("entry")) {
                         //获取分录实付金额
-                        BigDecimal settledamt = amountMap.get(entryentity.getString("id"));
+                        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);
@@ -74,20 +75,10 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                         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);
-                    }
+                    //结算字段赋值
+                    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});
@@ -98,7 +89,7 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                         //循环预付借款单预付借款信息分录
                         for (DynamicObject entryentity : yfjkInfo.getDynamicObjectCollection("expenseentryentity")) {
                             //获取分录实付金额
-                            BigDecimal settledamt = yfjkMap.get(entryentity.getString("id"));
+                            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);
@@ -106,19 +97,8 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                             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);
-                        }
+                        //结算字段赋值
+                        settleMethod(yfjkInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",totalSettledamt,totalUnsettledamt);
                         SaveServiceHelper.save(new DynamicObject[]{yfjkInfo});
                     }
                 }
@@ -126,11 +106,11 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
             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");
-                    //获取合同台账单id
-                    Long contractbillId = bxInfo.getLong("sourcebillid");
                     //已结算金额
                     BigDecimal totalSettledamt = BigDecimal.ZERO;
                     //未结算金额
@@ -138,7 +118,7 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                     //循环报销单收款信息分录
                     for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("accountentry")) {
                         //获取分录收款金额
-                        BigDecimal settledamt = amountMap.get(entryentity.getString("id"));
+                        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);
@@ -162,8 +142,33 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                         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});
@@ -189,9 +194,26 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                         }
                     }
                 }
-
             }
+        }
+    }
 
+    /*
+     * 给结算状态,结算金额,未结算金额赋值
+     * */
+    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);
+        }
+    }
+}

+ 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});
+            }
+        }
+    }
+}

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

@@ -37,24 +37,4 @@ public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements
             showParameter.getListFilterParameter().setFilter(qFilter);
         }
     }
-
-    @Override
-    public void propertyChanged(PropertyChangedArgs e) {
-        String fieldKey = e.getProperty().getName();
-        if (StringUtils.equals(fieldKey, nckd_apfinapbill)) {
-            ChangeData[] changeSet = e.getChangeSet();
-            ChangeData changeData = changeSet[0];
-            Object oldValue = changeData.getOldValue();//旧值
-            Object newValue = changeData.getNewValue();//旧值
-            if (oldValue != null && newValue != null) {
-                DynamicObject oldObject = (DynamicObject) oldValue;
-                Long oldId = oldObject.getLong("id");
-                DynamicObject newObject = (DynamicObject) newValue;
-                Long newId = newObject.getLong("id");
-                if (!oldId.equals(newId)) {
-                    this.getModel().setValue("nckd_oldvalueid" , oldId);
-                }
-            }
-        }
-    }
 }

+ 30 - 13
src/main/java/fi/er/opplugin/PrePayBillOpPlugin.java

@@ -1,5 +1,6 @@
 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;
@@ -16,20 +17,36 @@ public class PrePayBillOpPlugin extends AbstractOperationServicePlugIn {
         //获取预付借款单据信息
         DynamicObject[] dynamicObjects = e.getDataEntities();
         for (int i = 0; i < dynamicObjects.length; i++) {
-            //当前单头数据包
-            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);
-                totalUnsettleamount = totalUnsettleamount.add(expeapproveamount);
+            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});
             }
-            info.set("nckd_unsettleamount",totalUnsettleamount);
-            info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
-            SaveServiceHelper.save(new DynamicObject[]{info});
         }
     }
 }

+ 39 - 24
src/main/java/fi/er/opplugin/PublicreimburOpPlugin.java

@@ -32,43 +32,58 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
                     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 nckd_apfinapbill = info.getDynamicObject("nckd_apfinapbill");
-                //原应付挂帐单释放
-                Long oldId =  info.getLong("nckd_oldvalueid");
-                if (oldId != 0) {
+                //获取当前单据数据库保存数据
+                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","");
-                    dynamicObjectList.add(oldInfo);
-                    //所选应付挂帐单更新标识
-                    Long newId =  nckd_apfinapbill.getLong("id");
-                    QFilter gzFilter = new QFilter("id", QCP.equals,newId);
-                    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");
-                    dynamicObjectList.add(gzInfo);
-                    DynamicObject[] dynamicObjectArray = dynamicObjectList.toArray(new DynamicObject[dynamicObjectList.size()]);
-                    SaveServiceHelper.save(dynamicObjectArray);
-                }else {
-                    //所选应付挂帐单更新标识
-                    Long newId =  nckd_apfinapbill.getLong("id");
-                    QFilter gzFilter = new QFilter("id", QCP.equals,newId);
-                    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");
-                    dynamicObjectList.add(gzInfo);
-                    DynamicObject[] dynamicObjectArray = dynamicObjectList.toArray(new DynamicObject[dynamicObjectList.size()]);
-                    SaveServiceHelper.save(dynamicObjectArray);
+                    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});
+                    }
                 }
             }
         }