Преглед изворни кода

Merge branch 'master' of http://111.75.220.136:10030/13246659623/jxyh

13246659623 пре 7 месеци
родитељ
комит
d95626828f
35 измењених фајлова са 2123 додато и 369 уклоњено
  1. 19 23
      src/main/java/fi/cas/opplugin/PaymentProcessOpPlugin.java
  2. 0 198
      src/main/java/fi/cas/opplugin/UnPaymentProcessOpPlugin.java
  3. 57 0
      src/main/java/fi/em/formPlugin/BusinessProcessingListPlugin.java
  4. 26 45
      src/main/java/fi/em/formPlugin/BusinessProcessingPlugin.java
  5. 3 4
      src/main/java/fi/em/formPlugin/SalaryFileUploadEditPlugin.java
  6. 276 1
      src/main/java/fi/em/formPlugin/SubAndAudFormPlugin.java
  7. 108 0
      src/main/java/fi/em/opplugin/BusinessProcessingSaveOpPlugin.java
  8. 88 0
      src/main/java/fi/em/opplugin/BusinessProcessingUnAuditOpPlugin.java
  9. 43 0
      src/main/java/fi/er/formPlugin/ContratBillFormPlugin.java
  10. 82 3
      src/main/java/fi/er/opplugin/FinapbillBeforeF7SelectSample.java
  11. 2 2
      src/main/java/fi/fa/formPlugin/FaInventoryTaskListNew.java
  12. 49 5
      src/main/java/fi/fa/opplugin/AssetMidBillOpPlugin.java
  13. 60 0
      src/main/java/fi/fa/opplugin/BusProcessBillOpPlugin.java
  14. 42 5
      src/main/java/fi/fa/opplugin/FaChangeMidOpPlugin.java
  15. 47 1
      src/main/java/fi/fa/opplugin/FaDisCardMidOpPlugin.java
  16. 1 1
      src/main/java/fi/fa/opplugin/RealCardBillOpPlugin.java
  17. 2 0
      src/main/java/fi/fa/opplugin/RealCardSplitF7OpPlugin.java
  18. 19 0
      src/main/java/fi/fa/opplugin/utils/ChangeDataUtils.java
  19. 38 6
      src/main/java/fi/fa/webService/ApisaveDemoPlugin.java
  20. 92 1
      src/main/java/fi/gl/opplugin/VoucherOpPlugin.java
  21. 427 0
      src/main/java/fi/gl/task/AutoSynVoucher.java
  22. 36 0
      src/main/java/kd/bos/login/thirdauth/app/ZSBGAuthtication.java
  23. 65 20
      src/main/java/kd/bos/login/utils/DemoSMSSender.java
  24. 97 0
      src/main/java/kd/bos/newdevportal/table/TableDataBasicPlugin.java
  25. 1 1
      src/main/java/kd/imc/rim/ApiHttpUtils.java
  26. 0 4
      src/main/java/kd/imc/rim/AwsRecognitionServiceEx.java
  27. 120 0
      src/main/java/sys/sc/formplugin/CreatDatPlugin.java
  28. 8 9
      src/main/java/sys/sc/formplugin/TestPlugin.java
  29. 97 0
      src/main/java/sys/sc/opplugin/utils/DatFileCreatUtils.java
  30. 55 0
      src/main/java/sys/sc/opplugin/utils/InterFaceImgUtils.java
  31. 13 12
      src/main/java/sys/sc/opplugin/utils/SftpClient.java
  32. 135 0
      src/main/java/sys/sc/task/CreatDatDailyTask.java
  33. 4 8
      src/main/java/sys/sc/task/UpdateBankDailyTask.java
  34. 4 4
      src/main/java/sys/sc/task/UpdateDataDailyTask.java
  35. 7 16
      src/main/java/sys/sc/task/UpdateImpairmentDailyTask.java

+ 19 - 23
src/main/java/fi/cas/opplugin/PaymentProcessOpPlugin.java

@@ -4,6 +4,7 @@ import com.alibaba.druid.util.StringUtils;
 import dm.jdbc.util.StringUtil;
 import fi.cas.common.SettlementStatusEnum;
 import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
 import kd.bos.orm.query.QCP;
@@ -12,6 +13,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.HashMap;
 
 //付款处理单付款反写
@@ -28,6 +30,14 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
         for (int i = 0; i < dynamicObjects.length; i++) {
             //当前单头数据包
             DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+            //付款金额
+            BigDecimal actpayamt = info.getBigDecimal("actpayamt");
+            //单据编号
+            String billno = info.getString("billno");
+            //付款处理id
+            long id = info.getLong("id");
+            //付款日期
+            Date paydate = info.getDate("paydate");
             //获取源单id
             Long sourcebillid = info.getLong("sourcebillid");
             //存储源单分录id和付款处理分录实付金额
@@ -79,29 +89,6 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                     //结算字段赋值
                     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) {
@@ -204,6 +191,15 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                                 htInfo.set("nckd_settleamount", nckd_settleamount);
                                 htInfo.set("nckd_unsettleamount", nckd_unsettleamount);
                             }
+
+                            //反写付款明细
+                            DynamicObjectCollection entryEntity = htInfo.getDynamicObjectCollection("nckd_payentry");
+                            DynamicObject entry1 = entryEntity.addNew();
+                            entry1.set("nckd_pay_billno1", billno);//付款处理单据编号
+                            entry1.set("nckd_pay_id1", id);//付款处理单据id
+                            entry1.set("nckd_amountfield1", actpayamt);//付款金额
+                            entry1.set("nckd_timefield2", paydate);//付款日期
+
                             SaveServiceHelper.save(new DynamicObject[]{htInfo});
                         }
                     }

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

@@ -1,198 +0,0 @@
-package fi.cas.opplugin;
-
-import com.alibaba.druid.util.StringUtils;
-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 nckd_sourcebillid = bxInfo.getString("nckd_sourcebillid");
-                    //报账类型
-                    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 (!StringUtils.isEmpty(nckd_sourcebillid)) {
-                        //获取合同台账单id
-                        Long contractbillId = Long.parseLong(nckd_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());
-                            //未结算金额
-                            BigDecimal nckd_unsettleamount = htInfo.getBigDecimal("nckd_unsettleamount");
-                            //已结算金额
-                            BigDecimal nckd_settleamount = htInfo.getBigDecimal("nckd_settleamount");
-                            if (nckd_settleamount.compareTo(totalUnsettledamt) > 0) {
-                                nckd_settleamount = nckd_settleamount.subtract(totalUnsettledamt);
-                            }else {
-                                nckd_settleamount = BigDecimal.ZERO;
-                            }
-                            nckd_unsettleamount = nckd_unsettleamount.add(totalUnsettledamt);
-                            htInfo.set("oripayedamount",nckd_settleamount);
-                            htInfo.set("orinotpayamount",nckd_unsettleamount);
-                            //结算字段赋值
-                            settleMethod(htInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",nckd_settleamount,nckd_unsettleamount);
-                            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);
-        }
-    }
-}

+ 57 - 0
src/main/java/fi/em/formPlugin/BusinessProcessingListPlugin.java

@@ -0,0 +1,57 @@
+package fi.em.formPlugin;
+
+import com.alibaba.druid.util.StringUtils;
+import kd.bos.bill.BillShowParameter;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.ShowType;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+
+import java.util.EventObject;
+
+public class BusinessProcessingListPlugin extends AbstractListPlugin {
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        this.addItemClickListeners(new String[]{"toolbarap"});
+    }
+
+    @Override
+    public void itemClick(ItemClickEvent evt) {
+        String itemKey = evt.getItemKey();
+        if ("nckd_trackup".equals(itemKey)) {
+            BillList billList = (BillList) this.getControl("billlistap");
+            ListSelectedRowCollection list = billList.getSelectedRows();
+            if (list.size() == 0) {
+                this.getView().showMessage("请选择一条数据");
+                return;
+            } else if (list.size() > 1) {
+                this.getView().showMessage("只能选择一条数据");
+                return;
+            }
+            Object[] primaryKeyValues = list.getPrimaryKeyValues();
+            long id = 0;
+            String type = null;
+            for (Object pk : primaryKeyValues) {
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(pk, "nckd_ywcld");
+                id = info.getLong("nckd_mid_assert");
+                type = info.getString("nckd_source_type");
+                if (id == 0 || StringUtils.isEmpty(type)) {
+                    this.getView().showMessage("该数据不是由中间表生成,无法上查到中间表");
+                    return;
+                }
+            }
+            BillShowParameter showParameter = new BillShowParameter();
+
+            showParameter.setFormId(type);
+
+            showParameter.getOpenStyle().setShowType(ShowType.Modal);//打开方式
+
+            showParameter.setPkId(id);
+
+            this.getView().showForm(showParameter);
+        }
+    }
+}

+ 26 - 45
src/main/java/fi/em/formPlugin/BusinessProcessingPlugin.java

@@ -88,6 +88,8 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
         if (payeenamev == null || payeenamev.isEmpty()) {
             throw new KDBizException("收款处理付款人为空!");
         }
+        QFilter nckd_cysfyxmFilter = new QFilter("name", QCP.equals,payeenamev);
+        DynamicObject nckd_cyffyxm = BusinessDataServiceHelper.loadSingle("bd_supplier","id",new QFilter[] {nckd_cysfyxmFilter});
         if ("cysgzmx".equals(controls)) {
             List<JSONObject> resdate = new ArrayList<>();
             //历史数据清除1111
@@ -95,40 +97,34 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
             //构建查询应收挂账单参数
             QFilter nckd_orgamountFilter = new QFilter("unsettleamount", QCP.large_than, new BigDecimal(0));
             nckd_orgamountFilter.and("billstatus", QCP.equals, "C");
-            nckd_orgamountFilter.and("payeename", QCP.like, payeenamev);
+//            nckd_orgamountFilter.and("asstacttype", QCP.equals, "供应商");
+//            nckd_orgamountFilter.and("asstact.number", QCP.equals, payeenamev);
             nckd_orgamountFilter.and("unsettleamount", QCP.is_notnull, "");
             nckd_orgamountFilter.and("org.number", QCP.equals, orgnumber);
-            DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("nckd_cas_arbill", "id", new QFilter[]{nckd_orgamountFilter});
-            for (int c = 0; c < nckd_cas_arbill.length; c++) {
+            Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("ar_finarbill", new QFilter[]{nckd_orgamountFilter});
+            for (Object idkey:nckd_cas_arbilMap.keySet()) {
                 //当前单头
-                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[c].getPkValue(), nckd_cas_arbill[c].getDynamicObjectType().getName());
+                DynamicObject dynamicObject = nckd_cas_arbilMap.get(idkey);
                 //单据编号
                 String billno = dynamicObject.getString("billno");
                 //应收挂账日期
                 Date bizdate = dynamicObject.getDate("bizdate");
-                Date expectdate = dynamicObject.getDate("expectdate");
+                Date expectdate = dynamicObject.getDate("bizdate");
                 //应收挂账金额/冲销金额
                 BigDecimal settleamount = dynamicObject.getBigDecimal("unsettleamount");
                 for (DynamicObject entryentity : dynamicObject.getDynamicObjectCollection("entry")) {
                     DynamicObject eMaterial = entryentity.getDynamicObject("e_material");//物料
                     DynamicObject eExpenseitem = entryentity.getDynamicObject("e_expenseitem");//费用项目
-                    DynamicObject settleorg = entryentity.getDynamicObject("settleorg");//结算组织
-                    BigDecimal eActamt = entryentity.getBigDecimal("e_actamt");//实付金额
-                    DynamicObject costcenter = entryentity.getDynamicObject("costcenter");//成本中心
-                    DynamicObject productline = entryentity.getDynamicObject("productline");//产品线
-                    BigDecimal eDiscountamt = entryentity.getBigDecimal("e_discountamt");//现金折扣
+                    DynamicObject settleorg = dynamicObject.getDynamicObject("org");//结算组织
+                    DynamicObject productline = entryentity.getDynamicObject("e_productline");//产品线
                     DynamicObject project = entryentity.getDynamicObject("project");//项目
-                    DynamicObject eFundflowitem = entryentity.getDynamicObject("e_fundflowitem");//资金用途
-                    String contractnumber = entryentity.getString("contractnumber");//合同
                     int rowIndex = this.getModel().createNewEntryRow("nckd_entryentity");
-                    //赋值给新增分录
+                    //赋值给新增分录1
                     this.getModel().setValue("nckd_cysnumber", billno, rowIndex);
                     this.getModel().setValue("nckd_cysdata", bizdate, rowIndex);
                     this.getModel().setValue("nckd_cysgzbalance", settleamount, rowIndex);
                     this.getModel().setValue("nckd_cyscxbalance", settleamount, rowIndex);
-                    this.getModel().setValue("nckd_datefield", expectdate, rowIndex);
-                    QFilter nckd_cysfyxmFilter = new QFilter("name", QCP.equals,payeenamev);
-                    DynamicObject nckd_cyffyxm = BusinessDataServiceHelper.loadSingle("bd_supplier","id",new QFilter[] {nckd_cysfyxmFilter});
+                    //this.getModel().setValue("nckd_datefield", expectdate, rowIndex);
                     this.getModel().setValue("nckd_e_fundflowitem", nckd_cyffyxm, rowIndex);
                     //分录数据
                     if (eMaterial != null) {
@@ -140,27 +136,13 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
                     if (settleorg != null) {
                         this.getModel().setValue("nckd_cyssection", settleorg, rowIndex);
                     }
-                    if (eActamt != null) {
-                        this.getModel().setValue("nckd_cyssfje", eActamt, rowIndex);
-                    }
-                    if (costcenter != null) {
-                        this.getModel().setValue("nckd_costcenter", costcenter, rowIndex);
-                    }
+
                     if (productline != null) {
                         this.getModel().setValue("nckd_productline", productline, rowIndex);
                     }
-                    if (eDiscountamt != null) {
-                        this.getModel().setValue("nckd_e_discountamt", eDiscountamt, rowIndex);
-                    }
                     if (project != null) {
                         this.getModel().setValue("nckd_project", project, rowIndex);
                     }
-                    if (eFundflowitem != null) {
-                        this.getModel().setValue("nckd_e_fundflowitem", eFundflowitem, rowIndex);
-                    }
-                    if (contractnumber != null) {
-                        this.getModel().setValue("nckd_contractnumber", contractnumber, rowIndex);
-                    }
                     //将选中的数据放到缓存中
                     JSONObject obj = new JSONObject();
                     obj.put("nckd_cysnumber", billno);
@@ -195,10 +177,10 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
             nckd_orgamountFilter.and("unsettleamount", QCP.large_than, new BigDecimal(0));
             nckd_orgamountFilter.and("unsettleamount", QCP.is_notnull, "");
             nckd_orgamountFilter.and("org.number", QCP.equals, orgnumber);
-            DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("ap_finapbill", "id", new QFilter[]{nckd_orgamountFilter});
-            for (int c = 0; c < nckd_cas_arbill.length; c++) {
+            Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("ap_finapbill", new QFilter[]{nckd_orgamountFilter});
+            for (Object idkey:nckd_cas_arbilMap.keySet()) {
                 //当前单头
-                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[c].getPkValue(), nckd_cas_arbill[c].getDynamicObjectType().getName());
+                DynamicObject dynamicObject = nckd_cas_arbilMap.get(idkey);
                 //单据编号
                 String billno = dynamicObject.getString("billno");
                 //应收挂账日期
@@ -226,8 +208,6 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
                     this.getModel().setValue("nckd_cyfgzbalance", settleamount, rowIndex);
                     this.getModel().setValue("nckd_cyfcxbalance", settleamount, rowIndex);
                     this.getModel().setValue("nckd_billid", id, rowIndex);
-                    QFilter nckd_cysfyxmFilter = new QFilter("number", QCP.equals,payeenamev);
-                    DynamicObject nckd_cyffyxm = BusinessDataServiceHelper.loadSingle("bd_supplier","id",new QFilter[] {nckd_cysfyxmFilter});
                     this.getModel().setValue("nckd_basedatafield", nckd_cyffyxm, rowIndex);
                     //分录字段
                     if (material != null) {
@@ -278,10 +258,10 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
             nckd_orgamountFilter.and("status", QCP.equals, "C");
             nckd_orgamountFilter.and("nckd_amountfield1", QCP.large_than,0);
             nckd_orgamountFilter.and("leaser.number", QCP.equals, payeenamev);
-            DynamicObject[] fa_lease_contract = BusinessDataServiceHelper.load("fa_lease_contract", "id", new QFilter[]{nckd_orgamountFilter});
-            for (int c = 0; c < fa_lease_contract.length; c++) {
+            Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("fa_lease_contract", new QFilter[]{nckd_orgamountFilter});
+            for (Object idkey:nckd_cas_arbilMap.keySet()) {
                 //当前单头
-                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(fa_lease_contract[c].getPkValue(), fa_lease_contract[c].getDynamicObjectType().getName());
+                DynamicObject dynamicObject = nckd_cas_arbilMap.get(idkey);
                 //核算组织
                 DynamicObject org = dynamicObject.getDynamicObject("org");
                 //合同号
@@ -329,10 +309,10 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
             this.getModel().deleteEntryData("nckd_entryentity");
             //构建查询供应商参数
             QFilter nckd_orgamountFilter = new QFilter("number", QCP.equals, payeenamev);
-            DynamicObject[] fa_lease_contract = BusinessDataServiceHelper.load("bd_supplier", "id", new QFilter[]{nckd_orgamountFilter});
-            for (int c = 0; c < fa_lease_contract.length; c++) {
+            Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("bd_supplier", new QFilter[]{nckd_orgamountFilter});
+            for (Object idkey:nckd_cas_arbilMap.keySet()) {
                 //当前单头
-                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(fa_lease_contract[c].getPkValue(), fa_lease_contract[c].getDynamicObjectType().getName());
+                DynamicObject dynamicObject = nckd_cas_arbilMap.get(idkey);
                 for (DynamicObject entryentity : dynamicObject.getDynamicObjectCollection("entry_bank")) {
                     String bankaccount = entryentity.getString("bankaccount");
                     String accountname = entryentity.getString("accountname");
@@ -358,10 +338,10 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
             this.getModel().deleteEntryData("nckd_entryentity");
             //构建查询供应商参数
             QFilter nckd_orgamountFilter = new QFilter("number", QCP.equals, payeenamev);
-            DynamicObject[] fa_lease_contract = BusinessDataServiceHelper.load("bd_supplier", "id", new QFilter[]{nckd_orgamountFilter});
-            for (int c = 0; c < fa_lease_contract.length; c++) {
+            Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("bd_supplier", new QFilter[]{nckd_orgamountFilter});
+            for (Object idkey:nckd_cas_arbilMap.keySet()) {
                 //当前单头
-                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(fa_lease_contract[c].getPkValue(), fa_lease_contract[c].getDynamicObjectType().getName());
+                DynamicObject dynamicObject = nckd_cas_arbilMap.get(idkey);
                 for (DynamicObject entryentity : dynamicObject.getDynamicObjectCollection("entry_bank")) {
                     String bankaccount = entryentity.getString("bankaccount");
                     String accountname = entryentity.getString("accountname");
@@ -380,6 +360,7 @@ public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plug
                 String pageId = this.getView().getPageId();
                 String listStr = SerializationUtils.toJsonString(resdate);
                 this.getPageCache().put(pageId, listStr);
+
             }
         }
 

+ 3 - 4
src/main/java/fi/em/formPlugin/SalaryFileUploadEditPlugin.java

@@ -71,7 +71,7 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
             readExcelByRowOrCell(4,78,inputStream,billtype);
         } else if ("E".equals(nckd_entrytype)) {
             billtype="nckd_salaryentryre";
-            readExcelByRowOrCell(4,34,inputStream,billtype);
+            readExcelByRowOrCell(4,41,inputStream,billtype);
         } else if (null==nckd_entrytype) {
             throw new KDBizException("请选择分录类型");
         }
@@ -176,7 +176,8 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
                 ,"nckd_see_per_bhopins","nckd_see_per_hosins","nckd_see_per_cmymey","nckd_see_unionmey","nckd_see_tax"
                 ,"nckd_see_desalary","nckd_see_netsalary","nckd_see_otherreduce","nckd_see_cpy_endins","nckd_see_cpy_bhopins"
                 ,"nckd_see_cpy_ljins","nckd_see_cpy_birthins","nckd_see_cpy_dmgins","nckd_see_cpy_cmymey","nckd_see_cpy_hosins"
-                ,"nckd_see_taxt","nckd_see_alltaxt","nckd_see_charge","nckd_see_finallsys");
+                ,"nckd_see_taxt","nckd_see_alltaxt","nckd_see_charge","nckd_see_finallsys","nckd_see_cpy_oldins","nckd_see_cpy_hop"
+                ,"nckd_see_cpy_bhop","nckd_see_cpy_bir","nckd_see_cpy_ljob","nckd_see_cpy_dwork","nckd_see_cpy_hos","nckd_see_cpy_cmy");
 
 
         //将excel数据存入薪酬明细(一般员工)分录
@@ -316,7 +317,6 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
                 }
             }
         }
-
         //薪酬明细(退休)分录
         if(nckd_entry.equals("nckd_retireentry")) {
             this.getModel().deleteEntryData("nckd_retireentry");
@@ -446,7 +446,6 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
             }
 
         }
-
         //人力薪酬内退分录
         if (nckd_entry.equals("nckd_salaryentryre")){
             this.getModel().deleteEntryData("nckd_salaryentryre");

+ 276 - 1
src/main/java/fi/em/formPlugin/SubAndAudFormPlugin.java

@@ -1,22 +1,297 @@
 package fi.em.formPlugin;
 
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.operate.FormOperate;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.sdk.plugin.Plugin;
 
+import java.math.BigDecimal;
+import java.util.*;
+
 /**
  * @author cjz
  * @date 2024/9/12 11:12
- * @description:薪酬计提提交后自动审核
+ * @description:薪酬计提提交后自动审核,保存前计算汇总分录
  */
 public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
+
+    private static String nckd_staffentry="nckd_staffentry";//通用薪酬一般员工
+    private static String nckd_earlyretiredentry="nckd_earlyretiredentry";//通用薪酬内退
+    private static String nckd_retireentry="nckd_retireentry";//通用薪酬退休
+    private static String nckd_salaryentry="nckd_salaryentry";//人力薪酬
+    private static String nckd_salaryentryre="nckd_salaryentryre";//人力薪酬内退
+    private static String nckd_allentry="nckd_allentry";//汇总分录
+
     public void afterDoOperation(AfterDoOperationEventArgs arg){
         //提交并审核
         if ("submit".equals(arg.getOperateKey())) {
             //调用审核
             this.getView().invokeOperation("audit");
         }
+    }
+
+
+    //根据输入的list名,返回对应list
+    public List<String> entryList(String nckdentry)
+    {
+        //薪酬明细(一般员工)分录字段标识,金额字段
+        List<String> nckd_generalemployees = Arrays.asList("nckd_se_allbasicsry"
+                ,"nckd_se_basicsry","nckd_se_acmsry","nckd_se_reacmsry","nckd_se_bsnrwd","nckd_se_otreward","nckd_se_cmcsbd"
+                ,"nckd_se_otherpysry","nckd_se_clearrwd","nckd_se_awareward","nckd_se_otherdevreward","nckd_se_coldsbad"
+                ,"nckd_se_warmsbad","nckd_se_nursabd","nckd_se_otherallowance","nckd_se_salarypayable","nckd_se_per_endins"
+                ,"nckd_se_per_hopins","nckd_se_per_bhopins","nckd_se_per_ljins","nckd_se_per_hosins","nckd_se_per_cmymey"
+                ,"nckd_se_unionmey","nckd_se_tax","nckd_se_otherreduce","nckd_se_desalary","nckd_se_netsalary","nckd_se_cpy_endins"
+                ,"nckd_se_cpy_hopins","nckd_se_cpy_bhopins","nckd_se_cpy_ljins","nckd_se_cpy_birthins","nckd_se_cpy_dmgins","nckd_se_cpy_hosins"
+                ,"nckd_se_cpy_cmymey");
+        //薪酬明细(一般员工)汇总分录字段标识
+        List<String> nckd_allemployees=Arrays.asList("nckd_all_allbsry","nckd_all_basicsry","nckd_all_acmsry","nckd_all_reacmsry"
+                ,"nckd_all_bsnrwd","nckd_all_otreward","nckd_all_cmcsbd","nckd_all_otherpysry","nckd_all_clearrwd","nckd_all_awareward"
+                ,"nckd_all_odevreward","nckd_all_coldsbad","nckd_all_warmsbad","nckd_all_nursabd","nckd_all_oallowance","nckd_all_salarypaya"
+                ,"nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins","nckd_all_per_ljins","nckd_all_per_hosins","nckd_all_per_cmymey"
+                ,"nckd_all_unionmey","nckd_all_tax","nckd_all_otherreduce","nckd_all_desalary","nckd_all_netsalary","nckd_all_cpy_endins"
+                ,"nckd_all_cpy_hopins","nckd_all_cpy_bhopins","nckd_all_cpy_ljins","nckd_all_cpy_birthins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins"
+                ,"nckd_all_cpy_cmymey");
+
+
+        //薪酬明细(内退)分录字段标识,金额字段
+        List<String> nckd_earlyretired=Arrays.asList("nckd_ee_allbasicsry","nckd_ee_allowance","nckd_ee_otherallowance","nckd_ee_per_endins"
+                ,"nckd_ee_per_ljins","nckd_ee_per_hopins","nckd_ee_per_bhopins","nckd_ee_per_hosins","nckd_ee_per_cmymey","nckd_ee_unionmey"
+                ,"nckd_ee_tax","nckd_ee_desalary","nckd_ee_netsalary","nckd_ee_otherreduce","nckd_ee_cpy_endins","nckd_ee_cpy_bhopins"
+                ,"nckd_ee_cpy_ljins","nckd_ee_cpy_birthins","nckd_ee_cpy_dmgins","nckd_ee_cpy_cmymey","nckd_ee_cpy_hosins","nckd_ee_taxt"
+                ,"nckd_ee_alltaxt","nckd_ee_charge","nckd_ee_finallsys");
+        //薪酬明细(内退)汇总分录字段标识
+        List<String> nckd_allearlytired=Arrays.asList("nckd_all_allbasicsry","nckd_all_allowqance","nckd_all_owance","nckd_all_reduceitem"
+                ,"nckd_all_sumsry","nckd_all_laryreduce","nckd_all_pushreduce","nckd_all_lrulereduce","nckd_all_badreduce","nckd_all_oreduce","nckd_all_reducesry"
+                ,"nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins","nckd_all_per_ljins"
+                ,"nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax","nckd_all_alltaxt"
+                ,"nckd_all_charge","nckd_all_netsalary");
+
+
+        //薪酬明细(退休)分录字段标识,金额字段
+        List<String> nckd_retired=Arrays.asList("nckd_re_livallowance","nckd_re_otherallowance","nckd_re_reward"
+                ,"nckd_re_salarypayable","nckd_re_desalary","nckd_re_netsalary");
+        //薪酬明细(退休)汇总分录字段标识
+        List<String> nckd_allretired=Arrays.asList("nckd_all_livallowance","nckd_all_otherwance","nckd_all_reward","nckd_all_salarypaya"
+                ,"nckd_all_desalary","nckd_all_netsalary");
+
+
+        //人力薪酬分录标识金额字段,金额字段
+        List<String> nckd_pay=Arrays.asList("nckd_sae_levelsry","nckd_sae_dutiessry","nckd_sae_updutiessry","nckd_sae_workyearsry"
+                ,"nckd_sae_depyear","nckd_sae_eduasry","nckd_sae_transry","nckd_sae_jobsry","nckd_sae_basicsry","nckd_sae_allbasicsry","nckd_sae_acmsry"
+                ,"nckd_sae_mountsry","nckd_sae_reacmsry","nckd_sae_balyearsry","nckd_sae_blastyearsry","nckd_sae_allsry","nckd_sae_bsnrwd","nckd_sae_cpmrwd"
+                ,"nckd_sae_psrwd","nckd_sae_comrwd","nckd_sae_cardrwd","nckd_sae_intwrd","nckd_sae_clearrwd","nckd_sae_allrwd","nckd_sae_retainsry"
+                ,"nckd_sae_reward","nckd_sae_otreward","nckd_sae_cmcsbd","nckd_sae_trfsbd","nckd_sae_housesbd","nckd_sae_warmsbd","nckd_sae_edusbd"
+                ,"nckd_sae_trafficsbd","nckd_sae_othersbd","nckd_sae_reduce","nckd_sae_othersry","nckd_sae_sickreduce","nckd_sae_sickhopreduce"
+                ,"nckd_sae_eventreduce","nckd_sae_afwreduce","nckd_sae_latereduce","nckd_sae_cwasry","nckd_sae_cwareduce","nckd_sae_dgreduce"
+                ,"nckd_sae_dcpreduce","nckd_sae_badreduce","nckd_sae_otherreduce","nckd_sae_allreduce","nckd_sae_lastsry","nckd_sae_allpay"
+                ,"nckd_sae_per_endins","nckd_sae_per_ljins","nckd_sae_per_hopins","nckd_sae_per_bhopins","nckd_sae_per_hosins","nckd_sae_per_cmymey"
+                ,"nckd_sae_per_ins","nckd_sae_unionmey","nckd_sae_tax","nckd_sae_allamount","nckd_sae_cash","nckd_sae_wages","nckd_sae_cpy_endins"
+                ,"nckd_sae_cpy_hopins","nckd_sae_cpy_bhopins","nckd_sae_cpy_birthins","nckd_sae_cpy_ljins","nckd_sae_cpy_dmgins","nckd_sae_cpy_hosins"
+                ,"nckd_sae_cpy_cmymey");
+        //人力薪酬汇总分录字段标识
+        List<String> nckd_allpay=Arrays.asList("nckd_all_levelsry","nckd_all_dutiessry","nckd_all_updutiessry","nckd_all_workyearsry"
+                ,"nckd_all_depyear","nckd_all_eduasry","nckd_all_transry","nckd_all_jobsry","nckd_all_rebasicsry","nckd_all_allbacsry"
+                ,"nckd_all_allcmsry","nckd_all_mountsry","nckd_all_reacmamount","nckd_all_balyearsry","nckd_all_blastyearsry","nckd_all_allsry"
+                ,"nckd_all_bsnreda","nckd_all_cpmrwd","nckd_all_psrwd","nckd_all_comrwd","nckd_all_cardrwd","nckd_all_intwrd","nckd_all_clearwd"
+                ,"nckd_all_allrwd","nckd_all_retainsry","nckd_all_owance","nckd_all_otrewardam","nckd_all_rlcmcsbd","nckd_all_trfsbd"
+                ,"nckd_all_housesbd","nckd_all_warmsbd","nckd_all_edusbd","nckd_all_trafficsbd","nckd_all_othersbd","nckd_all_reduce"
+                ,"nckd_all_othersry","nckd_all_sickreduce","nckd_all_sickhopreduce","nckd_all_eventreduce","nckd_all_afwreduce","nckd_all_latereduce"
+                ,"nckd_all_cwasry","nckd_all_cwareduce","nckd_all_dgreduce","nckd_all_dcpreduce","nckd_all_badredu","nckd_all_othereduce"
+                ,"nckd_all_allreduce","nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins"
+                ,"nckd_all_per_ljins","nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax"
+                ,"nckd_all_alltaxt","nckd_all_charge","nckd_all_netsalary","nckd_all_cpy_endins","nckd_all_cpy_hopins","nckd_all_cpy_bhopins"
+                ,"nckd_all_cpy_birthins","nckd_all_cpy_ljins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins","nckd_all_cpy_cmymey");
+
+
+        //人力薪酬内退分录标识,金额字段
+        List<String> nckd_payretird=Arrays.asList("nckd_see_allbasicsry"
+                ,"nckd_see_allowance","nckd_see_otherallowanc","nckd_see_per_endins","nckd_see_per_ljins","nckd_see_per_hopins"
+                ,"nckd_see_per_bhopins","nckd_see_per_hosins","nckd_see_per_cmymey","nckd_see_unionmey","nckd_see_tax"
+                ,"nckd_see_desalary","nckd_see_netsalary","nckd_see_otherreduce","nckd_see_cpy_endins","nckd_see_cpy_bhopins"
+                ,"nckd_see_cpy_ljins","nckd_see_cpy_birthins","nckd_see_cpy_dmgins","nckd_see_cpy_cmymey","nckd_see_cpy_hosins"
+                ,"nckd_see_taxt","nckd_see_alltaxt","nckd_see_charge","nckd_see_finallsys","nckd_see_cpy_oldins","nckd_see_cpy_hop"
+                ,"nckd_see_cpy_bhop","nckd_see_cpy_bir","nckd_see_cpy_ljob","nckd_see_cpy_dwork","nckd_see_cpy_hos","nckd_see_cpy_cmy");
+
+        //人力薪酬内退分录汇总字段
+        List<String> nckd_allpayretird=Arrays.asList("nckd_all_allbasicsry","nckd_all_allowqance","nckd_all_owance","nckd_all_reduceitem"
+                ,"nckd_all_sumsry","nckd_all_laryreduce","nckd_all_pushreduce","nckd_all_lrulereduce","nckd_all_badreduce","nckd_all_oreduce"
+                ,"nckd_all_reducesry","nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_ljins"
+                ,"nckd_all_per_bhopins","nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax"
+                ,"nckd_all_alltaxt","nckd_all_charge","nckd_all_netsalary","nckd_all_cpy_endins","nckd_all_cpy_hopins","nckd_all_cpy_bhopins"
+                ,"nckd_all_cpy_birthins","nckd_all_cpy_ljins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins","nckd_all_cpy_cmymey");
+
+        Map<String,List<String>> mapList=new HashMap<>();
+        mapList.put("nckd_generalemployees",nckd_generalemployees);
+        mapList.put("nckd_allemployees",nckd_allemployees);
+        mapList.put("nckd_earlyretired",nckd_earlyretired);
+        mapList.put("nckd_retired",nckd_retired);
+        mapList.put("nckd_pay",nckd_pay);
+        mapList.put("nckd_payretird",nckd_payretird);
+        mapList.put("nckd_allearlytired",nckd_allearlytired);
+        mapList.put("nckd_allretired",nckd_allretired);
+        mapList.put("nckd_allpay",nckd_allpay);
+        mapList.put("nckd_allpayretird",nckd_allpayretird);
+
+
+        //list名
+        List<String> list=new ArrayList<>();
+        list.add("nckd_generalemployees");
+        list.add("nckd_allemployees");
+        list.add("nckd_earlyretired");
+        list.add("nckd_retired");
+        list.add("nckd_pay");
+        list.add("nckd_payretird");
+        list.add("nckd_allearlytired");
+        list.add("nckd_allretired");
+        list.add("nckd_allpay");
+        list.add("nckd_allpayretird");
+        for (String item:list) {
+            if (nckdentry.equals(item))
+            {
+                return mapList.get(nckdentry);
+            }
+        }
+        return null;
+    }
+
+    //保存前计算汇总分录
+    public void beforeDoOperation(BeforeDoOperationEventArgs arg) {
+        super.beforeDoOperation(arg);
+        FormOperate source = (FormOperate) arg.getSource();
+        //获取当前操作单据
+        DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+        //当前单据分录类型
+        String nckd_entrytype=dynamicObject.getString("nckd_entrytype");
+
+        //保存前,计算汇总分录
+        if ("save".equals(source.getOperateKey())||"countall".equals(source.getOperateKey())){
+            //先清空汇总分录分录
+            this.getModel().deleteEntryData("nckd_allentry");
+            //分录类型为通用薪酬一般员工
+            if ("A".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_generalemployees";
+                //对应分录标识
+                String propername="nckd_staffentry";
+                //对应部门标识
+                String dep="nckd_se_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allemployees";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+            //分录类型为通用薪酬内退
+            if ("B".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_earlyretired";
+                //对应分录标识
+                String propername="nckd_earlyretiredentry";
+                //对应部门标识
+                String dep="nckd_ee_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allearlytired";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+            //分录类型为通用薪酬退休
+            if ("C".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_retired";
+                //对应分录标识
+                String propername="nckd_retireentry";
+                //对应部门标识
+                String dep="nckd_re_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allretired";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+            //分录类型为人力薪酬(一般员工)
+            if ("D".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_pay";
+                //对应分录标识
+                String propername="nckd_salaryentry";
+                //对应部门标识
+                String dep="nckd_sae_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allpay";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+            //分录类型为人力薪酬(内退)
+            if ("E".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_payretird";
+                //对应分录标识
+                String propername="nckd_salaryentryre";
+                //对应部门标识
+                String dep="nckd_see_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allpayretird";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+        }
+
+    }
 
+    /**
+     * @dynamicObject 当前单据信息
+     * @entrylist 字段标识列表
+     * @propername 分录标识
+     * @dep 对应分录部门标识
+     * @allentrtlist 写入的汇总分录字段
+     * @description:根据分录类型不同计算汇总分录
+     */
+    public void countEntry(DynamicObject dynamicObject,String entrylist,String propername,String dep,String allentrtlist)
+    {
+        //字段标识
+        List<String> nckd_generalemployees = entryList(entrylist);
+        //获取一般员工分录
+        DynamicObjectCollection staffentry=dynamicObject.getDynamicObjectCollection(propername);
+        //分录部门list
+        List<DynamicObject> depList=new ArrayList<>();
+        //初始化值为第一行部门
+        depList.add(staffentry.get(0).getDynamicObject(dep));
+        for (DynamicObject item:staffentry) {
+            //将不同的值加入到部门的list中
+            if (!depList.contains(item.getDynamicObject(dep))) {
+                depList.add(item.getDynamicObject(dep));
+            }
+        }
+
+        //几个不同部门则循环几次
+        for (DynamicObject bumen : depList) {
+            //某部门总数据
+            List<BigDecimal> sumNum = new ArrayList<>();
+            //汇总表部门list初始化
+            for (int b = 0; b < nckd_generalemployees.size(); b++) {
+                sumNum.add(new BigDecimal("0.0"));
+            }
+            //计算一个部门汇总
+            for (DynamicObject object : staffentry) {
+                //获取所在部门
+                DynamicObject department = object.getDynamicObject(dep);
+                //相同部门则累加金额数据
+                if (department.equals(bumen)) {
+                    for (int a = 0; a < nckd_generalemployees.size(); a++) {
+                        BigDecimal cell = sumNum.get(a);
+                        //字段标识
+                        String entry = nckd_generalemployees.get(a);
+                        //i行的a列数据
+                        BigDecimal num = object.getBigDecimal(entry);
+                        cell = cell.add(num);
+                        sumNum.set(a, cell);
+                    }
+                }
+            }
+            //创建新的分录行
+            int rowIndex = this.getModel().createNewEntryRow(nckd_allentry);
+            //设置部门
+            this.getModel().setValue("nckd_all_department", bumen, rowIndex);
+            for (int c = 0; c < sumNum.size(); c++) {
+                this.getModel().setValue(entryList(allentrtlist).get(c), sumNum.get(c), rowIndex);
+            }
+        }
     }
 
 }

+ 108 - 0
src/main/java/fi/em/opplugin/BusinessProcessingSaveOpPlugin.java

@@ -0,0 +1,108 @@
+package fi.em.opplugin;
+
+import com.alibaba.fastjson.JSONObject;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.fi.cas.helper.CasBotpHelper;
+
+import java.math.BigDecimal;
+
+public class BusinessProcessingSaveOpPlugin  extends AbstractOperationServicePlugIn {
+//    @Override
+//    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+//        //获取当前操作单据数组11
+//        DynamicObject[] dynamicObjects = e.getDataEntities();
+//        for (int i = 0; i < dynamicObjects.length; i++) {
+//            JSONObject object = new JSONObject();
+//            //当前单头数据包
+//            DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+//            String detailtype = info.getString("nckd_detailtype");
+//            if("B".equals(detailtype)){
+//                for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity2")) {
+//                    String nckdBigintfield = entryentity.getString("nckd_bigintfield");
+//                    CasBotpHelper.saveRelation("ap_finapbill", Long.valueOf(nckdBigintfield), "nckd_ywcld", info.getLong("id"));
+//                }
+//            }
+//        }
+//    }
+
+    @Override
+    public void endOperationTransaction(EndOperationTransactionArgs e) {
+        super.endOperationTransaction(e);
+        //获取当前操作单据数组
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            JSONObject object = new JSONObject();
+            //当前单头数据包
+            DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+            String detailtype = info.getString("nckd_detailtype");
+            if("A".equals(detailtype)){
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity1")) {
+                    String nckdcysnumber = entryentity.getString("nckd_cysnumber");//财务应收单编码
+                    BigDecimal nckdCyscxbalance = entryentity.getBigDecimal("nckd_cyscxbalance");//冲销金额
+                    //构建查询应收挂账单参数
+                    QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals,nckdcysnumber);
+                    DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("ar_finarbill", "id", new QFilter[]{nckd_orgamountFilter});
+                    DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[0].getPkValue(), nckd_cas_arbill[0].getDynamicObjectType().getName());
+                    BigDecimal unsettleamount = dynamicObject.getBigDecimal("unsettleamount");//未结算金额
+                    BigDecimal settleamount = dynamicObject.getBigDecimal("settleamount");//已结算金额
+                    BigDecimal recamount = dynamicObject.getBigDecimal("recamount");//应收金额
+                    unsettleamount=unsettleamount.subtract(nckdCyscxbalance);//计算后反写未结算金额
+                    settleamount=settleamount.add(nckdCyscxbalance);//已结算+本次冲销金额
+                    settleamount=recamount.subtract(settleamount);//计算后反写已结算金额
+                    //set反写字段
+                    dynamicObject.set("unsettleamount",unsettleamount);//财务应收单未结算金额
+                    dynamicObject.set("unsettlelocalamt",unsettleamount);//财务应收单未结算金额本位币
+                    dynamicObject.set("unverifyamount",unsettleamount);//财务应收单未核销金额本位币
+                    dynamicObject.set("settleamount",settleamount);//财务应收单已结算金额
+                    dynamicObject.set("settlelocalamt",settleamount);//财务应收单已结算金额本位币
+                    SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
+                }
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity3")) {
+                    String nckdpzhthth = entryentity.getString("nckd_pzhthth");//租赁合同编号
+                    BigDecimal nckdCyscxbalance = entryentity.getBigDecimal("nckd_pzhtcxbalance");//冲销金额
+                    //构建查询应收挂账单参数
+                    QFilter nckd_orgamountFilter = new QFilter("number", QCP.equals,nckdpzhthth);
+                    DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("fa_lease_contract", "id", new QFilter[]{nckd_orgamountFilter});
+                    DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[0].getPkValue(), nckd_cas_arbill[0].getDynamicObjectType().getName());
+                    BigDecimal nckdamountfield = dynamicObject.getBigDecimal("nckd_amountfield");//已收款金额
+                    BigDecimal nckdamountfield1 = dynamicObject.getBigDecimal("nckd_amountfield1");//收款余额
+                    nckdamountfield=nckdamountfield.add(nckdCyscxbalance);//计算后反写已收款金额
+                    nckdamountfield1=nckdamountfield1.subtract(nckdCyscxbalance);//收款余额+本次冲销金额
+                    //set反写字段
+                    dynamicObject.set("nckd_amountfield",nckdamountfield);//财务应收单未结算金额
+                    dynamicObject.set("nckd_amountfield1",nckdamountfield1);//财务应收单未结算金额本位币
+                    SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
+                }
+            } else if ("B".equals(detailtype)){
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity2")) {
+                    String nckdBigintfield = entryentity.getString("nckd_bigintfield");//财务应付单id
+                    BigDecimal nckdCyscxbalance = entryentity.getBigDecimal("nckd_cyfcxbalance");//冲销金额
+                    //构建查询应收挂账单参数
+                    QFilter nckd_orgamountFilter = new QFilter("id", QCP.equals,Long.valueOf(nckdBigintfield));
+                    DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("ap_finapbill", "id", new QFilter[]{nckd_orgamountFilter});
+                    DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[0].getPkValue(), nckd_cas_arbill[0].getDynamicObjectType().getName());
+                    BigDecimal unsettleamount = dynamicObject.getBigDecimal("unsettleamount");//未结算金额
+                    BigDecimal settleamount = dynamicObject.getBigDecimal("settleamount");//已结算金额
+                    BigDecimal pricetaxtotal = dynamicObject.getBigDecimal("pricetaxtotal");//应收金额
+                    unsettleamount=unsettleamount.subtract(nckdCyscxbalance);//计算后反写未结算金额
+                    settleamount=settleamount.add(nckdCyscxbalance);//已结算+本次冲销金额
+                    settleamount=pricetaxtotal.subtract(settleamount);//计算后反写已结算金额
+                    //set反写字段
+                    dynamicObject.set("unsettleamount",unsettleamount);//财务应收单未结算金额
+                    dynamicObject.set("unsettleamountbase",unsettleamount);//财务应收单未结算金额本位币
+                    dynamicObject.set("unverifyamount",unsettleamount);//财务应收单未核销金额本位币
+                    dynamicObject.set("settleamount",settleamount);//财务应收单已结算金额
+                    dynamicObject.set("settleamountbase",settleamount);//财务应收单已结算金额本位币
+                    SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
+                }
+            }
+        }
+    }
+}

+ 88 - 0
src/main/java/fi/em/opplugin/BusinessProcessingUnAuditOpPlugin.java

@@ -0,0 +1,88 @@
+package fi.em.opplugin;
+
+import com.alibaba.fastjson.JSONObject;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+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;
+
+public class BusinessProcessingUnAuditOpPlugin extends AbstractOperationServicePlugIn {
+    @Override
+    public void endOperationTransaction(EndOperationTransactionArgs e) {
+        super.endOperationTransaction(e);
+        //获取当前操作单据数组
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            JSONObject object = new JSONObject();
+            //当前单头数据包
+            DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+            String detailtype = info.getString("nckd_detailtype");
+            if("A".equals(detailtype)){
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity1")) {
+                    String nckdcysnumber = entryentity.getString("nckd_cysnumber");//财务应收单编码
+                    BigDecimal nckdCyscxbalance = entryentity.getBigDecimal("nckd_cyscxbalance");//冲销金额
+                    //构建查询应收挂账单参数
+                    QFilter nckd_orgamountFilter = new QFilter("id", QCP.equals,nckdcysnumber);
+                    DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("ar_finarbill", "id", new QFilter[]{nckd_orgamountFilter});
+                    DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[0].getPkValue(), nckd_cas_arbill[0].getDynamicObjectType().getName());
+                    BigDecimal unsettleamount = dynamicObject.getBigDecimal("unsettleamount");//未结算金额
+                    BigDecimal settleamount = dynamicObject.getBigDecimal("settleamount");//已结算金额
+                    BigDecimal recamount = dynamicObject.getBigDecimal("recamount");//应收金额
+                    unsettleamount=unsettleamount.add(nckdCyscxbalance);//计算后反写未结算金额
+                    settleamount=settleamount.subtract(nckdCyscxbalance);//已结算-本次冲销金额
+                    settleamount=recamount.subtract(settleamount);//计算后反写已结算金额
+                    //set反写字段
+                    dynamicObject.set("unsettleamount",unsettleamount);//财务应收单未结算金额
+                    dynamicObject.set("unsettlelocalamt",unsettleamount);//财务应收单未结算金额本位币
+                    dynamicObject.set("unverifyamount",unsettleamount);//财务应收单未核销金额本位币
+                    dynamicObject.set("settleamount",settleamount);//财务应收单已结算金额
+                    dynamicObject.set("settlelocalamt",settleamount);//财务应收单已结算金额本位币
+                    SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
+                }
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity3")) {
+                    String nckdpzhthth = entryentity.getString("nckd_pzhthth");//租赁合同编号
+                    BigDecimal nckdCyscxbalance = entryentity.getBigDecimal("nckd_pzhtcxbalance");//冲销金额
+                    //构建查询应收挂账单参数
+                    QFilter nckd_orgamountFilter = new QFilter("number", QCP.equals,nckdpzhthth);
+                    DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("fa_lease_contract", "id", new QFilter[]{nckd_orgamountFilter});
+                    DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[0].getPkValue(), nckd_cas_arbill[0].getDynamicObjectType().getName());
+                    BigDecimal nckdamountfield = dynamicObject.getBigDecimal("nckd_amountfield");//已收款金额
+                    BigDecimal nckdamountfield1 = dynamicObject.getBigDecimal("nckd_amountfield1");//收款余额
+                    nckdamountfield=nckdamountfield.subtract(nckdCyscxbalance);//计算后反写已收款金额
+                    nckdamountfield1=nckdamountfield1.add(nckdCyscxbalance);//收款余额+本次冲销金额
+                    //set反写字段
+                    dynamicObject.set("nckd_amountfield",nckdamountfield);//财务应收单未结算金额
+                    dynamicObject.set("nckd_amountfield1",nckdamountfield1);//财务应收单未结算金额本位币
+                    SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
+                }
+            } else if ("B".equals(detailtype)){
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_entryentity2")) {
+                    String nckdBigintfield = entryentity.getString("nckd_bigintfield");//财务应付单id
+                    BigDecimal nckdCyscxbalance = entryentity.getBigDecimal("nckd_cyfcxbalance");//冲销金额
+                    //构建查询应收挂账单参数1
+                    QFilter nckd_orgamountFilter = new QFilter("id", QCP.equals,Long.valueOf(nckdBigintfield));
+                    DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("ap_finapbill", "id", new QFilter[]{nckd_orgamountFilter});
+                    DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[0].getPkValue(), nckd_cas_arbill[0].getDynamicObjectType().getName());
+                    BigDecimal unsettleamount = dynamicObject.getBigDecimal("unsettleamount");//未结算金额
+                    BigDecimal settleamount = dynamicObject.getBigDecimal("settleamount");//已结算金额
+                    BigDecimal recamount = dynamicObject.getBigDecimal("recamount");//应收金额
+                    unsettleamount=unsettleamount.add(nckdCyscxbalance);//计算后反写未结算金额
+                    settleamount=settleamount.subtract(nckdCyscxbalance);//已结算-本次冲销金额
+                    settleamount=recamount.subtract(settleamount);//计算后反写已结算金额
+                    //set反写字段
+                    dynamicObject.set("unsettleamount",unsettleamount);//财务应收单未结算金额
+                    dynamicObject.set("unsettlelocalamt",unsettleamount);//财务应收单未结算金额本位币
+                    dynamicObject.set("unverifyamount",unsettleamount);//财务应收单未核销金额本位币
+                    dynamicObject.set("settleamount",settleamount);//财务应收单已结算金额
+                    dynamicObject.set("settlelocalamt",settleamount);//财务应收单已结算金额本位币
+                    SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
+                }
+            }
+        }
+    }
+}

+ 43 - 0
src/main/java/fi/er/formPlugin/ContratBillFormPlugin.java

@@ -0,0 +1,43 @@
+package fi.er.formPlugin;
+
+import com.alibaba.nacos.common.utils.StringUtils;
+import kd.bos.bill.BillShowParameter;
+import kd.bos.form.ShowType;
+import kd.bos.form.control.EntryGrid;
+import kd.bos.form.events.HyperLinkClickEvent;
+import kd.bos.form.events.HyperLinkClickListener;
+import kd.bos.form.plugin.AbstractFormPlugin;
+
+import java.util.EventObject;
+
+public class ContratBillFormPlugin extends AbstractFormPlugin implements HyperLinkClickListener {
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        // 监听分录行
+        EntryGrid entryGrid = this.getView().getControl("nckd_payentry");
+        entryGrid.addHyperClickListener(this);
+    }
+    @Override
+    public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) {
+        //  获取超链接点击的属性名
+        String fieldName = hyperLinkClickEvent.getFieldName();
+        //  获取点击分录行的下标
+        int rowIndex = hyperLinkClickEvent.getRowIndex();
+        if (StringUtils.containsIgnoreCase(fieldName,"nckd_pay_billno1")){
+            //付款处理id
+            Object id = this.getModel().getValue("nckd_pay_id1", rowIndex);
+
+            BillShowParameter billShowParameter = new BillShowParameter();
+            // 设置打开单据的标识
+            billShowParameter.setFormId("cas_paybill");
+            // 设置打开单据的id
+            billShowParameter.setPkId(id);
+            // 设置打开的样式
+            billShowParameter.getOpenStyle().setShowType(ShowType.Modal);
+
+            this.getView().showForm(billShowParameter);
+        }
+    }
+
+}

+ 82 - 3
src/main/java/fi/er/opplugin/FinapbillBeforeF7SelectSample.java

@@ -126,20 +126,39 @@ public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements
                 DynamicObject receivingsupplierid = gzInfo.getDynamicObject("receivingsupplierid");//供应商
                 Date bookdate = gzInfo.getDate("bookdate");
                 String remark = gzInfo.getString("remark");
-                BigDecimal pricetaxtotal = gzInfo.getBigDecimal("pricetaxtotal");
+                BigDecimal pricetaxtotal = gzInfo.getBigDecimal("pricetaxtotal");//应付金额
+                BigDecimal e_amount = BigDecimal.ZERO;//不含税应付金额
                 BigDecimal expenseamount = BigDecimal.ZERO;//报销金额
+                BigDecimal orientryamount = BigDecimal.ZERO;//不含税金额
 
+                //应付挂账单明细分录
+                DynamicObjectCollection detailentry1 = gzInfo.getDynamicObjectCollection("detailentry");
+                for (DynamicObject object : detailentry1) {
+                    e_amount = e_amount.add(object.getBigDecimal("e_amount"));
+                }
 
                 //费用明细分录
                 DynamicObjectCollection expenseentryentity = this.getModel().getEntryEntity("expenseentryentity");
                 for (DynamicObject object : expenseentryentity) {
                     expenseamount = expenseamount.add(object.getBigDecimal("expenseamount"));
+                    orientryamount = orientryamount.add(object.getBigDecimal("orientryamount"));
                 }
 
                 //冲销金额
                 BigDecimal nckd_accloanamount = expenseamount;
+
+                //不含税借款余额
+                BigDecimal nckd_e_amount = e_amount;
+
+                //不含税冲销金额
+                BigDecimal nckd_amountfield6 = orientryamount;
+
                 //差额
                 BigDecimal nckd_sub_amount = pricetaxtotal.subtract(nckd_accloanamount);
+
+                //不含税差额
+                BigDecimal nckd_amountfield8 = nckd_e_amount.subtract(nckd_amountfield6);
+
                 //给冲预付借款赋值
                 this.getModel().deleteEntryData("nckd_ap_finapbill_detail");
                 int rowIndex = this.getModel().createNewEntryRow("nckd_ap_finapbill_detail");
@@ -155,9 +174,20 @@ public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements
                 this.getModel().setValue("nckd_currloanamount",pricetaxtotal,rowIndex);
                 this.getModel().setValue("nckd_accloanamount",nckd_accloanamount,rowIndex);
                 this.getModel().setValue("nckd_curraccloanamount",nckd_accloanamount,rowIndex);
-                this.getModel().setValue("nckd_sub_amount",nckd_sub_amount,rowIndex);
+                this.getModel().setValue("nckd_amountfield7",nckd_sub_amount,rowIndex);
+                this.getModel().setValue("nckd_e_amount",nckd_e_amount,rowIndex);
+                this.getModel().setValue("nckd_amountfield6",nckd_amountfield6,rowIndex);
+                this.getModel().setValue("nckd_amountfield8",nckd_amountfield8,rowIndex);
+
+                DynamicObjectCollection assetentry = this.getModel().getEntryEntity("assetentry");
+                if(assetentry.size() > 0) {
+                    this.getModel().setValue("nckd_amountfield9",nckd_sub_amount,0);
+                    this.getModel().setValue("nckd_amountfield10",nckd_amountfield8,0);
+                }
+
                 //刷新冲预付借款分录
                 this.getView().updateView("nckd_ap_finapbill_detail");
+                this.getView().updateView("assetentry");
             }
         }else if (StringUtils.equals("expenseamount", fieldKey) || StringUtils.equals("nckd_amountfield3", fieldKey)) {
             String reimbursetype = (String) this.getModel().getValue("reimbursetype");
@@ -193,26 +223,45 @@ public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements
             DynamicObjectCollection nckd_ap_finapbill_detail = this.getModel().getEntryEntity("nckd_ap_finapbill_detail");
             if (nckd_ap_finapbill_detail.size() > 0) {
                 BigDecimal expenseamount = BigDecimal.ZERO;//核定金额
+                BigDecimal orientryamount = BigDecimal.ZERO;//不含税核定金额
                 //费用明细分录
                 DynamicObjectCollection expenseentryentity = this.getModel().getEntryEntity("expenseentryentity");
                 for (DynamicObject object : expenseentryentity) {
                     expenseamount = expenseamount.add(object.getBigDecimal("expenseamount"));
+                    orientryamount = orientryamount.add(object.getBigDecimal("orientryamount"));
                 }
 
                 //冲销金额
                 BigDecimal nckd_accloanamount = expenseamount;
+                //不含税冲销金额
+                BigDecimal nckd_amountfield6 = orientryamount;
                 //借款余额
                 BigDecimal nckd_loanamount = nckd_ap_finapbill_detail.get(0).getBigDecimal("nckd_loanamount");
+                //不含税借款余额
+                BigDecimal nckd_e_amount = nckd_ap_finapbill_detail.get(0).getBigDecimal("nckd_e_amount");
                 //差额
                 BigDecimal nckd_sub_amount = nckd_loanamount.subtract(nckd_accloanamount);
+                //不含税差额
+                BigDecimal nckd_amountfield8 = nckd_e_amount.subtract(nckd_amountfield6);
 
                 this.getModel().setValue("nckd_loanamount",nckd_loanamount,0);
                 this.getModel().setValue("nckd_currloanamount",nckd_loanamount,0);
                 this.getModel().setValue("nckd_accloanamount",nckd_accloanamount,0);
                 this.getModel().setValue("nckd_curraccloanamount",nckd_accloanamount,0);
-                this.getModel().setValue("nckd_sub_amount",nckd_sub_amount,0);
+                this.getModel().setValue("nckd_amountfield7",nckd_sub_amount,0);
+                this.getModel().setValue("nckd_e_amount",nckd_e_amount,0);
+                this.getModel().setValue("nckd_amountfield6",nckd_amountfield6,0);
+                this.getModel().setValue("nckd_amountfield8",nckd_amountfield8,0);
+
+                DynamicObjectCollection assetentry = this.getModel().getEntryEntity("assetentry");
+                if(assetentry.size() > 0) {
+                    this.getModel().setValue("nckd_amountfield9",nckd_sub_amount,0);
+                    this.getModel().setValue("nckd_amountfield10",nckd_amountfield8,0);
+                }
+
                 //刷新冲预付借款分录
                 this.getView().updateView("nckd_ap_finapbill_detail");
+                this.getView().updateView("assetentry");
             }
         } else if (StringUtils.equals("taxrate", fieldKey) || StringUtils.equals("assettaxrate", fieldKey)) {
             String reimbursetype = (String) this.getModel().getValue("reimbursetype");
@@ -244,6 +293,36 @@ public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements
                 BigDecimal assettaxamount = assetexpenseamount.subtract(assetorientryamount);
                 this.getModel().setValue("assettaxamount", assettaxamount, 0);
             }
+
+            DynamicObjectCollection nckd_ap_finapbill_detail = this.getModel().getEntryEntity("nckd_ap_finapbill_detail");
+            if (nckd_ap_finapbill_detail.size() > 0) {
+                BigDecimal orientryamount = BigDecimal.ZERO;//不含税核定金额
+                //费用明细分录
+                DynamicObjectCollection expenseentryentity = this.getModel().getEntryEntity("expenseentryentity");
+                for (DynamicObject object : expenseentryentity) {
+                    orientryamount = orientryamount.add(object.getBigDecimal("orientryamount"));
+                }
+
+                //不含税冲销金额
+                BigDecimal nckd_amountfield6 = orientryamount;
+                //不含税借款余额
+                BigDecimal nckd_e_amount = nckd_ap_finapbill_detail.get(0).getBigDecimal("nckd_e_amount");
+                //不含税差额
+                BigDecimal nckd_amountfield8 = nckd_e_amount.subtract(nckd_amountfield6);
+
+                this.getModel().setValue("nckd_e_amount",nckd_e_amount,0);
+                this.getModel().setValue("nckd_amountfield6",nckd_amountfield6,0);
+                this.getModel().setValue("nckd_amountfield8",nckd_amountfield8,0);
+
+                DynamicObjectCollection assetentry = this.getModel().getEntryEntity("assetentry");
+                if(assetentry.size() > 0) {
+                    this.getModel().setValue("nckd_amountfield10",nckd_amountfield8,0);
+                }
+
+                //刷新冲预付借款分录
+                this.getView().updateView("nckd_ap_finapbill_detail");
+                this.getView().updateView("assetentry");
+            }
         }
     }
 

+ 2 - 2
src/main/java/fi/fa/formPlugin/FaInventoryTaskListNew.java

@@ -610,13 +610,13 @@ public class FaInventoryTaskListNew extends AbstractListPlugin {
                     inventoryRecordInstance.set("inventoryquantity", BigDecimal.ZERO);
                     inventoryRecordInstance.set("difference", BigDecimal.ZERO);
                     inventoryRecordInstance.set("inventorystate", BillStatus.B.toString());
-                    inventoryRecordInstance.set("reason", " ");
+                    inventoryRecordInstance.set("reason", "1 ");
                     inventoryRecordInstance.set("inventorytask_id", inventoryTask.getPkValue());
                     inventoryRecordInstance.set("inventschemeentry_id", inventoryTask.getDynamicObject("inventsscopeid").getDynamicObject("inventschemeentry").getPkValue());
                     inventoryRecordInstance.set("billstatus", "C");
                     inventoryRecordInstance.set("billstate", "A");
                     inventoryRecordInstance.set("nckd_storeplace", realCard.getString("nckd_storeplace"));
-                    inventoryRecordInstance.set("nckd_fincard", fin);
+                    inventoryRecordInstance.set("nckd_fincard_id", fin != null ? fin.getLong("id") : null);
                     inventoryRecordList.add(inventoryRecordInstance);
                 }
 

+ 49 - 5
src/main/java/fi/fa/opplugin/AssetMidBillOpPlugin.java

@@ -2,11 +2,14 @@ package fi.fa.opplugin;
 
 import com.alibaba.druid.util.StringUtils;
 import fi.fa.opplugin.utils.ChangeDataUtils;
+import kd.bos.bill.BillShowParameter;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.ShowType;
 import kd.bos.form.control.events.ItemClickEvent;
 import kd.bos.list.BillList;
 import kd.bos.list.plugin.AbstractListPlugin;
@@ -53,14 +56,22 @@ public class AssetMidBillOpPlugin extends AbstractListPlugin {
                     }
                     DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld");
                     busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期
-                    busProcess.set("nckd_costcompany", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//资产组织
-                    busProcess.set("nckd_orgfield1", ChangeDataUtils.getOrg(info.getString("nckd_org_out")));//调出组织
-                    busProcess.set("nckd_orgfield2", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//调入组织
-                    busProcess.set("nckd_orgfield3", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//调入使用部门
+                    Long orgIdin = ChangeDataUtils.getOrg(info.getString("nckd_org_in"));
+                    Long orgIdout = ChangeDataUtils.getOrg(info.getString("nckd_org_out"));
+
+                    Long relationIdin = ChangeDataUtils.getRelation(orgIdin);
+                    Long relationIdout = ChangeDataUtils.getRelation(orgIdout);
+
+                    busProcess.set("nckd_costcompany", relationIdin);//资产组织
+                    busProcess.set("nckd_orgfield1", relationIdout);//调出组织
+                    busProcess.set("nckd_orgfield2", relationIdin);//调入组织
                     busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//调拨原因
+
+
                     busProcess.set("billstatus", "A");//暂存
                     busProcess.set("nckd_detailtype", "E");//业务类型(E:资产调拨)
-                    busProcess.set("nckd_combofield2", "1");//调拨类型(1:跨组织)
+                    busProcess.set("nckd_mid_assert", pk);//中间表id
+                    busProcess.set("nckd_source_type", "nckd_e_dispatch_mid");//源单类型
                     //调出方向
                     if ("0".equals(direction)) {
                         busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//调出申请人
@@ -104,12 +115,16 @@ public class AssetMidBillOpPlugin extends AbstractListPlugin {
                         entry1.set("nckd_amountfield22", preresidualval);//预计清理残值
                         entry1.set("nckd_amountfield23", nckd_amountfield23);//预计清理净值
                         entry1.set("nckd_amountfield24", nckd_amountfield24);//预计清理净额
+                        entry1.set("nckd_basedatafield11", ChangeDataUtils.getUser(info.getString("nckd_used_user")));//调入使用人
+                        entry1.set("nckd_textfield10", info.getString("nckd_storeplace"));//调入存放地点
+                        entry1.set("nckd_orgfield4", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//调入使用部门
                     }
 
                     //执行保存-提交-审核
                     OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());
                     if (saveResult.isSuccess()){
                         info.set("nckd_flag", "1");
+                        info.set("nckd_ywcl", saveResult.getSuccessPkIds().get(0));
                         SaveServiceHelper.save(new DynamicObject[]{info});
                         errMsg.append("单据号: ").append(info.getString("number")).append("下推生成业务处理单成功!");
                         errMsg.append("\r\n");
@@ -124,6 +139,35 @@ public class AssetMidBillOpPlugin extends AbstractListPlugin {
                 this.getView().showMessage("请至少选择一条数据");
             }
             this.getView().showMessage(errMsg.toString());
+        } else if ("nckd_trackdown".equals(itemKey)) {
+            BillList billList = (BillList) this.getControl("billlistap");
+            ListSelectedRowCollection list = billList.getSelectedRows();
+            if (list.size() == 0) {
+                this.getView().showMessage("请选择一条数据");
+                return;
+            } else if (list.size() > 1) {
+                this.getView().showMessage("只能选择一条数据");
+                return;
+            }
+            Object[] primaryKeyValues = list.getPrimaryKeyValues();
+            long id = 0;
+            for (Object pk : primaryKeyValues) {
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(pk, "nckd_e_dispatch_mid");
+                id = info.getLong("nckd_ywcl");
+                if (id == 0) {
+                    this.getView().showMessage("该单据还未下推生成业务处理单");
+                    return;
+                }
+            }
+            BillShowParameter showParameter = new BillShowParameter();
+
+            showParameter.setFormId("nckd_ywcld");
+
+            showParameter.getOpenStyle().setShowType(ShowType.Modal);//打开方式
+
+            showParameter.setPkId(id);
+
+            this.getView().showForm(showParameter);
         }
     }
 }

+ 60 - 0
src/main/java/fi/fa/opplugin/BusProcessBillOpPlugin.java

@@ -2,6 +2,7 @@ package fi.fa.opplugin;
 
 import com.alibaba.druid.util.StringUtils;
 import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
 import kd.bos.orm.query.QCP;
@@ -34,6 +35,28 @@ public class BusProcessBillOpPlugin extends AbstractOperationServicePlugIn {
 
                     }
                 }
+
+                //获取租赁合同分录
+                DynamicObjectCollection nckd_entryentity3 = info.getDynamicObjectCollection("nckd_entryentity3");
+                for (DynamicObject object : nckd_entryentity3) {
+                    long org = object.getDynamicObject("nckd_pzhtorg").getLong("id");
+                    String nckd_pzhthth = object.getString("nckd_pzhthth");
+                    String nckd_combofield = object.getString("nckd_combofield");
+
+                    //查询租赁合同反写
+                    QFilter htfilter = new QFilter("number", QCP.equals,nckd_pzhthth);
+                    htfilter.and("org.id", QCP.equals,org);
+                    DynamicObject[] contract = BusinessDataServiceHelper.load("fa_lease_contract","id",new QFilter[] {htfilter});
+                    for (int j = 0; j < contract.length; j++) {
+                        DynamicObject contractInfo = BusinessDataServiceHelper.loadSingle(contract[j].getPkValue(), contract[j].getDynamicObjectType().getName());
+                        //收款/付款计划明细分录
+                        DynamicObjectCollection payplanentryentity = contractInfo.getDynamicObjectCollection("payplanentryentity");
+                        for (DynamicObject detail : payplanentryentity) {
+                            detail.set("nckd_combofield1", nckd_combofield);
+                        }
+                        SaveServiceHelper.save(new DynamicObject[]{contractInfo});
+                    }
+                }
             }
             else if (StringUtils.equals(e.getOperationKey(),"unaudit")) {
                 DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
@@ -54,6 +77,43 @@ public class BusProcessBillOpPlugin extends AbstractOperationServicePlugIn {
 
                     }
                 }
+
+                //获取租赁合同分录
+                DynamicObjectCollection nckd_entryentity3 = info.getDynamicObjectCollection("nckd_entryentity3");
+                for (DynamicObject object : nckd_entryentity3) {
+                    long org = object.getDynamicObject("nckd_pzhtorg").getLong("id");
+                    String nckd_pzhthth = object.getString("nckd_pzhthth");
+                    //查询租赁合同反写
+                    QFilter htfilter = new QFilter("number", QCP.equals,nckd_pzhthth);
+                    htfilter.and("org.id", QCP.equals,org);
+                    DynamicObject[] contract = BusinessDataServiceHelper.load("fa_lease_contract","id",new QFilter[] {htfilter});
+                    for (int j = 0; j < contract.length; j++) {
+                        DynamicObject contractInfo = BusinessDataServiceHelper.loadSingle(contract[j].getPkValue(), contract[j].getDynamicObjectType().getName());
+                        //收款/付款计划明细分录
+                        DynamicObjectCollection payplanentryentity = contractInfo.getDynamicObjectCollection("payplanentryentity");
+                        for (DynamicObject detail : payplanentryentity) {
+                            detail.set("nckd_combofield1", null);
+                        }
+                        SaveServiceHelper.save(new DynamicObject[]{contractInfo});
+                    }
+                }
+            } else if (StringUtils.equals(e.getOperationKey(),"delete")) {
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                if ("D".equals(info.getString("nckd_detailtype"))) {
+                    String type = info.getString("nckd_source_type");
+                    Long nckd_mid_assert = info.getLong("nckd_mid_assert");
+                    if (!StringUtils.isEmpty(type)) {
+                        //查询e管家实物卡片清单
+                        QFilter filter = new QFilter("id", QCP.equals,nckd_mid_assert);
+                        DynamicObject[] midObjects = BusinessDataServiceHelper.load(type,"id",new QFilter[] {filter});
+                        for (int j = 0; j < midObjects.length; j++) {
+                            DynamicObject midInfo = BusinessDataServiceHelper.loadSingle(midObjects[j].getPkValue(), midObjects[j].getDynamicObjectType().getName());
+                            //回写e管家实物清单字段
+                            midInfo.set("nckd_flag", "0");//是否报废
+                            SaveServiceHelper.save(new DynamicObject[]{midInfo});
+                        }
+                    }
+                }
             }
         }
     }

+ 42 - 5
src/main/java/fi/fa/opplugin/FaChangeMidOpPlugin.java

@@ -2,11 +2,13 @@ package fi.fa.opplugin;
 
 import com.alibaba.druid.util.StringUtils;
 import fi.fa.opplugin.utils.ChangeDataUtils;
+import kd.bos.bill.BillShowParameter;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.form.ShowType;
 import kd.bos.form.control.events.ItemClickEvent;
 import kd.bos.list.BillList;
 import kd.bos.list.plugin.AbstractListPlugin;
@@ -53,13 +55,15 @@ public class FaChangeMidOpPlugin extends AbstractListPlugin {
                     }
                     DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld");
                     busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期
-                    busProcess.set("nckd_costcompany", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//资产组织
-                    busProcess.set("nckd_orgfield3", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//调入使用部门
-                    busProcess.set("nckd_userfield", ChangeDataUtils.getUser(info.getString("nckd_used_user")));//调入使用人
+
+                    Long orgIdin = ChangeDataUtils.getOrg(info.getString("nckd_org_in"));
+                    Long relationIdin = ChangeDataUtils.getRelation(orgIdin);
+                    busProcess.set("nckd_costcompany", relationIdin);//资产组织
                     busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//调拨原因
                     busProcess.set("billstatus", "A");//暂存
-                    busProcess.set("nckd_detailtype", "E");//业务类型(E:资产调拨)
-                    busProcess.set("nckd_combofield2", "2");//调拨类型(2:组织内)
+                    busProcess.set("nckd_detailtype", "N");//业务类型(E:资产调拨)
+                    busProcess.set("nckd_mid_assert", pk);//中间表id
+                    busProcess.set("nckd_source_type", "nckd_e_change_mid");//源单类型
                     //调出方向
                     if("0".equals(direction)){
                         busProcess.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//创建人
@@ -101,12 +105,16 @@ public class FaChangeMidOpPlugin extends AbstractListPlugin {
                         entry1.set("nckd_amountfield22", preresidualval);//预计清理残值
                         entry1.set("nckd_amountfield23", nckd_amountfield23);//预计清理净值
                         entry1.set("nckd_amountfield24", nckd_amountfield24);//预计清理净额
+                        entry1.set("nckd_basedatafield11", ChangeDataUtils.getUser(info.getString("nckd_used_user")));//调入使用人
+                        entry1.set("nckd_textfield10", info.getString("nckd_storeplace"));//调入存放地点
+                        entry1.set("nckd_orgfield4", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//调入使用部门
                     }
 
                     //执行保存-提交-审核
                     OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());
                     if (saveResult.isSuccess()){
                         info.set("nckd_flag", "1");
+                        info.set("nckd_ywcl", saveResult.getSuccessPkIds().get(0));
                         SaveServiceHelper.save(new DynamicObject[]{info});
                         errMsg.append("单据号: ").append(info.getString("number")).append("下推生成业务处理单成功!");
                         errMsg.append("\r\n");
@@ -121,6 +129,35 @@ public class FaChangeMidOpPlugin extends AbstractListPlugin {
                 this.getView().showMessage("请至少选择一条数据");
             }
             this.getView().showMessage(errMsg.toString());
+        } else if ("nckd_trackdown".equals(itemKey)) {
+            BillList billList = (BillList) this.getControl("billlistap");
+            ListSelectedRowCollection list = billList.getSelectedRows();
+            if (list.size() == 0) {
+                this.getView().showMessage("请选择一条数据");
+                return;
+            } else if (list.size() > 1) {
+                this.getView().showMessage("只能选择一条数据");
+                return;
+            }
+            Object[] primaryKeyValues = list.getPrimaryKeyValues();
+            long id = 0;
+            for (Object pk : primaryKeyValues) {
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(pk, "nckd_e_change_mid");
+                id = info.getLong("nckd_ywcl");
+                if (id == 0) {
+                    this.getView().showMessage("该单据还未下推生成业务处理单");
+                    return;
+                }
+            }
+            BillShowParameter showParameter = new BillShowParameter();
+
+            showParameter.setFormId("nckd_ywcld");
+
+            showParameter.getOpenStyle().setShowType(ShowType.Modal);//打开方式
+
+            showParameter.setPkId(id);
+
+            this.getView().showForm(showParameter);
         }
     }
 }

+ 47 - 1
src/main/java/fi/fa/opplugin/FaDisCardMidOpPlugin.java

@@ -2,11 +2,13 @@ package fi.fa.opplugin;
 
 import com.alibaba.druid.util.StringUtils;
 import fi.fa.opplugin.utils.ChangeDataUtils;
+import kd.bos.bill.BillShowParameter;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.form.ShowType;
 import kd.bos.form.control.events.ItemClickEvent;
 import kd.bos.list.BillList;
 import kd.bos.list.plugin.AbstractListPlugin;
@@ -15,6 +17,9 @@ import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.OperationServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import javax.xml.crypto.Data;
+import java.util.Date;
 import java.util.EventObject;
 import java.util.List;
 
@@ -54,7 +59,9 @@ public class FaDisCardMidOpPlugin extends AbstractListPlugin {
                     DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld");
                     busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期
                     busProcess.set("nckd_detailtype", "D");//业务类型 D:报废
-                    busProcess.set("nckd_costcompany", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//资产组织
+                    Long orgIdin = ChangeDataUtils.getOrg(info.getString("nckd_org_in"));
+                    Long relationIdin = ChangeDataUtils.getRelation(orgIdin);
+                    busProcess.set("nckd_costcompany", relationIdin);//资产组织
                     busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//摘要事由
                     busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//制单人
 
@@ -62,11 +69,17 @@ public class FaDisCardMidOpPlugin extends AbstractListPlugin {
                     busProcess.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//创建人
                     busProcess.set("createtime", info.getDate("nckd_date_out"));//创建时间
                     busProcess.set("billstatus", "A");//状态
+                    busProcess.set("nckd_mid_assert", pk);//中间表id
+                    busProcess.set("nckd_source_type", "nckd_e_discard_mid");//源单类型
                     QFilter filter = new QFilter("number", QCP.in,codeList);
                     filter.and("isbak",  QCP.equals, "0");
                     DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
                     for (int c = 0; c < card.length; c++) {
                         DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
+                        DynamicObject fin = ChangeDataUtils.queryFinCard(cardInfo.getLong("id"));
+                        assert fin != null;
+                        DynamicObject curperiod = fin.getDynamicObject("curperiod");
+                        Date enddate = curperiod.getDate("enddate");
                         //创建报废明细分录
                         DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity6");
                         DynamicObject entry1 = entryEntity.addNew();
@@ -74,11 +87,15 @@ public class FaDisCardMidOpPlugin extends AbstractListPlugin {
                         String nckd_count = info.getString("nckd_count").isEmpty() ? "1" : info.getString("nckd_count");
                         Integer count = Integer.valueOf(nckd_count);
                         entry1.set("nckd_integerfield", count);//报废数量
+                        entry1.set("nckd_datefield4", enddate);
+
+
                     }
                     //执行保存-提交-审核
                     OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());
                     if (saveResult.isSuccess()){
                         info.set("nckd_flag", "1");
+                        info.set("nckd_ywcl", saveResult.getSuccessPkIds().get(0));
                         SaveServiceHelper.save(new DynamicObject[]{info});
                         errMsg.append("单据号: ").append(info.getString("number")).append("下推生成业务处理单成功!");
                         errMsg.append("\r\n");
@@ -93,6 +110,35 @@ public class FaDisCardMidOpPlugin extends AbstractListPlugin {
                 this.getView().showMessage("请至少选择一条数据");
             }
             this.getView().showMessage(errMsg.toString());
+        } else if ("nckd_trackdown".equals(itemKey)) {
+            BillList billList = (BillList) this.getControl("billlistap");
+            ListSelectedRowCollection list = billList.getSelectedRows();
+            if (list.size() == 0) {
+                this.getView().showMessage("请选择一条数据");
+                return;
+            } else if (list.size() > 1) {
+                this.getView().showMessage("只能选择一条数据");
+                return;
+            }
+            Object[] primaryKeyValues = list.getPrimaryKeyValues();
+            long id = 0;
+            for (Object pk : primaryKeyValues) {
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(pk, "nckd_e_discard_mid");
+                id = info.getLong("nckd_ywcl");
+                if (id == 0) {
+                    this.getView().showMessage("该单据还未下推生成业务处理单");
+                    return;
+                }
+            }
+            BillShowParameter showParameter = new BillShowParameter();
+
+            showParameter.setFormId("nckd_ywcld");
+
+            showParameter.getOpenStyle().setShowType(ShowType.Modal);//打开方式
+
+            showParameter.setPkId(id);
+
+            this.getView().showForm(showParameter);
         }
     }
 }

+ 1 - 1
src/main/java/fi/fa/opplugin/RealCardBillOpPlugin.java

@@ -56,7 +56,7 @@ public class RealCardBillOpPlugin extends AbstractOperationServicePlugIn {
                                 DynamicObject[] htDynamicObjects = BusinessDataServiceHelper.load("er_contractbill","id",new QFilter[] {htFilter});
                                 for (int k = 0; k < htDynamicObjects.length; k++) {
                                     DynamicObject htInfo = BusinessDataServiceHelper.loadSingle(htDynamicObjects[i].getPkValue(), htDynamicObjects[i].getDynamicObjectType().getName());
-                                    htInfo.set("nckd_real_card", info.getString("billno"));
+                                    htInfo.set("nckd_real_card", info.getString("number"));
                                     SaveServiceHelper.save(new DynamicObject[]{htInfo});
                                 }
                             }

+ 2 - 0
src/main/java/fi/fa/opplugin/RealCardSplitF7OpPlugin.java

@@ -39,8 +39,10 @@ public class RealCardSplitF7OpPlugin extends AbstractFormPlugin implements Befor
                 if (cardDynamicObjects.length > 1) {
                     this.getModel().setValue("splitqty", cardDynamicObjects.length);
                     this.getModel().setValue("nckd_e_flag", "1");
+                    this.getView().setEnable(false,"splitqty");
                 }else {
                     this.getModel().setValue("nckd_e_flag", null);
+                    this.getView().setEnable(true,"splitqty");
                 }
             }
         }

+ 19 - 0
src/main/java/fi/fa/opplugin/utils/ChangeDataUtils.java

@@ -91,6 +91,25 @@ public class ChangeDataUtils {
         return null;
     }
 
+    /**
+     * @description 查询业务单元id
+     * @param id
+     * @return Long
+     */
+    public static Long getRelation(Long id) {
+
+        QFilter filter = new QFilter("toorg", QCP.equals,id);
+        DynamicObject[] org = BusinessDataServiceHelper.load("bos_org_orgrelation_dept","id",new QFilter[] {filter});
+        if (org.length > 0) {
+            DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(org[0].getPkValue(), org[0].getDynamicObjectType().getName());
+            DynamicObject ywdyOrg = orgInfo.getDynamicObject("fromorg");
+            if (ywdyOrg != null) {
+                return ywdyOrg.getLong("id");
+            }
+        }
+        return null;
+    }
+
     /**
      * @description 查询用户表获取用户
      * @param eUser

+ 38 - 6
src/main/java/fi/fa/webService/ApisaveDemoPlugin.java

@@ -56,15 +56,28 @@ public class ApisaveDemoPlugin implements ApiSavePlugin {
         String orgNumber = orgControlInfo.getString("nckd_org_number");
 
         if (orgId.equals(deptId)) {
-            // 如果组织 ID 和部门 ID 相同,则都设置为组织编号
-            org.put("id", getOrg(orgNumber));
-            dept.put("id", getOrg(orgNumber));
+            // 行政组织id
+            Long id = getOrg(orgNumber);
+            Long fromorgId = getRelation(id);
+            if (id != null) {
+                dept.put("id", id);
+            }
+            if (fromorgId != null) {
+                org.put("id", fromorgId);
+            }
         } else if (orgControlInfo.getString("nckd_e_org").equals(orgId)) {
-            // 如果当前控制信息的组织 ID 等于 orgId,更新组织 ID
-            org.put("id", getOrg(orgNumber));
+            // 行政组织id
+            Long id = getOrg(orgNumber);
+            Long fromorgId = getRelation(id);
+            if (fromorgId != null) {
+                org.put("id", fromorgId);
+            }
         } else {
             // 否则更新部门 ID
-            dept.put("id", getOrg(orgNumber));
+            Long id = getOrg(orgNumber);
+            if (id != null) {
+                dept.put("id", id);
+            }
         }
     }
 
@@ -83,4 +96,23 @@ public class ApisaveDemoPlugin implements ApiSavePlugin {
         }
         return null;
     }
+
+    /**
+     * @description 查询业务单元id
+     * @param id
+     * @return Long
+     */
+    private Long getRelation(Long id) {
+
+        QFilter filter = new QFilter("toorg", QCP.equals,id);
+        DynamicObject[] org = BusinessDataServiceHelper.load("bos_org_orgrelation_dept","id",new QFilter[] {filter});
+        if (org.length > 0) {
+            DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(org[0].getPkValue(), org[0].getDynamicObjectType().getName());
+            DynamicObject ywdyOrg = orgInfo.getDynamicObject("fromorg");
+            if (ywdyOrg != null) {
+                return ywdyOrg.getLong("id");
+            }
+        }
+        return null;
+    }
 }

+ 92 - 1
src/main/java/fi/gl/opplugin/VoucherOpPlugin.java

@@ -1,9 +1,25 @@
 package fi.gl.opplugin;
 
 import fi.gl.business.VoucherValidator;
+import fi.gl.task.AutoSynVoucher;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.AddValidatorsEventArgs;
+import kd.bos.entity.plugin.args.AfterOperationArgs;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.scm.bid.common.constant.OperationConstant;
 import kd.sdk.plugin.Plugin;
+import org.apache.commons.lang3.StringUtils;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
 
 /**
  * 凭证操作插件
@@ -11,10 +27,85 @@ import kd.sdk.plugin.Plugin;
  * 主要功能:校验凭证是否日结
  */
 public class VoucherOpPlugin  extends AbstractOperationServicePlugIn implements Plugin {
-
+    protected static final Log log = LogFactory.getLog(VoucherOpPlugin.class);
     @Override
     public void onAddValidators(AddValidatorsEventArgs e) {
         super.onAddValidators(e);
         e.addValidator(new VoucherValidator());
     }
+
+    @Override
+    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
+        super.afterExecuteOperationTransaction(e);
+        String operateKey = e.getOperationKey();
+        if (StringUtils.equals("antipost", operateKey)) {//反过账
+            DynamicObject[] dateEntities = e.getDataEntities();
+            String billnos = "";
+            for (DynamicObject dateEntity : dateEntities) {
+                billnos = billnos + ",'" + dateEntity.getString("billno") + "'";
+            }
+
+            if(!"".equals(billnos)){
+                billnos = billnos.substring(1);
+                synYY(billnos);
+            }
+        }
+    }
+
+    private void synYY(String billnos) {
+        Connection conn = null;
+        PreparedStatement pstmt = null;
+        //连接数据库
+        try {
+            conn = getConnect(); // 获取数据库连接
+            if(conn!=null){
+                String deleteSql = "DELETE jf_voucher WHERE voucherno in("+billnos+")";
+                log.info("[凭证反过账同步用友]执行删除sql"+deleteSql);
+                // 准备删除语句
+                pstmt = conn.prepareStatement(deleteSql);
+                // 执行删除操作
+                int affectedRows = pstmt.executeUpdate();
+                log.info("[凭证反过账同步用友]成功删除"+affectedRows+"条");
+                // 删除凭证标识
+                String sql = "UPDATE T_GL_VOUCHER SET fk_nckd_issynyy=0 WHERE FNUMBER IN ("+billnos+")";
+                DB.update(DBRoute.of("fi"), sql);
+            }
+        } catch (ClassNotFoundException e) {
+            log.info("[凭证反过账同步用友]删除失败:"+e.getMessage());
+            throw new RuntimeException(e);
+        } catch (SQLException e) {
+            log.info("[凭证反过账同步用友]删除失败:"+e.getMessage());
+            throw new RuntimeException(e);
+        }finally{
+            try {
+                if(conn!=null){
+                    conn.setAutoCommit(true); // 重新开启自动提交
+                    conn.close();
+                }
+                if(pstmt!=null){
+                    pstmt.close();
+                }
+            }catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private Connection getConnect() throws ClassNotFoundException, SQLException {
+        //1.获取接口链接等信息
+        DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",
+                new QFilter[]{new QFilter("number","=","synvoucher")});
+        String servername =  jkpzxx.getString("nckd_servername");
+        String port =  jkpzxx.getString("nckd_port");
+        String username = jkpzxx.getString("nckd_user");
+        String password = jkpzxx.getString("nckd_password");
+        String nckd_orclname = jkpzxx.getString("nckd_orclname");
+        String jdbcUrl = "jdbc:oracle:thin:@"+servername+":"+port+"/"+nckd_orclname;
+        // 加载Oracle JDBC驱动
+        Class.forName("oracle.jdbc.driver.OracleDriver");
+        // 建立连接
+        Connection conn = DriverManager.getConnection(jdbcUrl, username, password);
+
+        return conn;
+    }
 }

+ 427 - 0
src/main/java/fi/gl/task/AutoSynVoucher.java

@@ -0,0 +1,427 @@
+package fi.gl.task;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import kd.bos.algo.DataSet;
+import kd.bos.algo.Row;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
+import kd.bos.exception.KDException;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import org.apache.commons.lang3.StringUtils;
+
+import java.sql.*;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.Date;
+
+/**
+ * 自动同步凭证任务插件
+ * 2024-09-11 wangj
+ * 主要功能:自动同步每月凭证数据到用友中间表
+ */
+public class AutoSynVoucher extends AbstractTask {
+    protected static final Log log = LogFactory.getLog(AutoSynVoucher.class);
+    String DB_VOUCHER_FIELDS = "voucherno,yearv,periodv,orgcd,orgnm,prepareddatev,checkeddate,tallydate,datadt," +
+            "creditamount,debitamount,localcreditamount,localdebitamount,direction,explanation," +
+            "subjcd,subjnm,currcd,currnm";
+
+    String DB_BALANCE_FIELDS = "direction,yearv,periodv,subjcd,subjnm,currcd,currnm,orgcd,orgnm,datadt," +
+            "creditamount,debitamount,localcreditamount,localdebitamount";
+    String SELECTFIELDS = "billno,period,org,createtime,auditdate,bookeddate," +
+            "entries,entries.account,entries.creditori,entries.debitori,entries.creditlocal,entries.debitlocal,entries.entrydc,entries.edescription,entries.currency";
+
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        Connection conn = null;
+        PreparedStatement pstmt1 = null;
+        Statement pstmt2 = null;
+        PreparedStatement pstmt3 = null;
+        try {
+            //连接数据库
+            conn = getConnect(); // 获取数据库连接
+            if(conn!=null){
+                conn.setAutoCommit(false); // 关闭自动提交
+                //缓存组织映射表Map
+                Map orgMap_numbber = new HashMap();
+                Map orgMap_name = new HashMap();
+                QFilter qFilter_enable = new QFilter("enable", QCP.equals,"1");
+                QFilter qFilter_status = new QFilter("status", QCP.equals, "C");
+                DynamicObject[] orgCol = BusinessDataServiceHelper.load(
+                        "nckd_gl_orgmapp","nckd_orgfield,nckd_yyorgnumber,nckd_yyorgname",new QFilter[]{qFilter_enable,qFilter_status});
+                for(DynamicObject orgObj : orgCol){
+                    DynamicObject kd_org = orgObj.getDynamicObject("nckd_orgfield");
+                    orgMap_numbber.put(kd_org.getString("id"),orgObj.getString("nckd_yyorgnumber"));
+                    orgMap_name.put(kd_org.getString("id"),orgObj.getString("nckd_yyorgname"));
+                }
+
+                //查找待同步数据执行插入数据
+                log.info("[凭证反同步用友]同步数据执行插入开始");
+                pstmt1 = conn.prepareStatement("INSERT INTO jf_voucher (" + DB_VOUCHER_FIELDS + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+                doExecuteNewData(conn,pstmt1,orgMap_numbber,orgMap_name);
+                log.info("[凭证反同步用友]同步数据执行插入结束");
+
+                //清空汇总中间表
+                pstmt2 = conn.createStatement();
+                String deleteSql = "DELETE FROM jf_balance";
+                int affectedRows = pstmt2.executeUpdate(deleteSql);
+                log.info("[凭证反同步用友]删除中间表记录数:"+affectedRows);
+                conn.commit();
+
+                //重新汇总数据插入汇总中间表
+                log.info("[凭证反同步用友]同步汇总数据执行插入开始");
+                pstmt3 = conn.prepareStatement("INSERT INTO jf_balance (" + DB_BALANCE_FIELDS + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+                doExecuteTotalData(conn,pstmt3,orgMap_numbber,orgMap_name);
+                log.info("[凭证反同步用友]同步汇总数据执行插入结束");
+            }else{
+                log.info("[凭证反同步用友]连接用友总账数据库失败");
+            }
+        } catch (Exception e) {
+            log.info("[凭证反同步用友]同步凭证到用友总账数据库失败:"+e.getMessage());
+            throw new RuntimeException(e);
+        } finally{
+            try {
+                if(pstmt1!=null){
+                    pstmt1.close();
+                }
+                if(pstmt2!=null){
+                    pstmt2.close();
+                }
+                if(pstmt3!=null){
+                    pstmt3.close();
+                }
+                if(conn!=null){
+                    conn.setAutoCommit(true); // 重新开启自动提交
+                    conn.close();
+                } 
+            }catch (SQLException e) {
+                log.info("释放数据库连接失败:"+e.getMessage());
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private void doExecuteTotalData(Connection conn, PreparedStatement pstmt3, Map orgMap_numbber, Map orgMap_name) throws SQLException {
+        //获取待同步数据
+        JSONArray voucherCol = getVoucherTotalDatas(orgMap_numbber,orgMap_name);
+        // 模拟大量插入操作
+        for (int i=0;i<voucherCol.size();i++) {
+            JSONObject voucherObj = voucherCol.getJSONObject(i);
+            doInsertTotalData(pstmt3,voucherObj);
+        }
+        // 处理剩余的数据
+        if(voucherCol.size()>0){
+            pstmt3.executeBatch();
+            conn.commit();
+            pstmt3.clearBatch();
+        }
+    }
+
+    private void doInsertTotalData(PreparedStatement pstmt3, JSONObject voucherObj) throws SQLException {
+        pstmt3.setString(1, voucherObj.getString("direction"));
+        pstmt3.setString(2, voucherObj.getString("yearv"));
+        pstmt3.setString(3, voucherObj.getString("periodv"));
+        pstmt3.setString(4, voucherObj.getString("subjcd"));
+        pstmt3.setString(5, voucherObj.getString("subjnm"));
+        pstmt3.setString(6, voucherObj.getString("currcd"));
+        pstmt3.setString(7, voucherObj.getString("currnm"));
+        pstmt3.setString(8, voucherObj.getString("orgcd"));
+        pstmt3.setString(9, voucherObj.getString("orgnm"));
+        pstmt3.setString(10, voucherObj.getString("datadt"));
+        pstmt3.setBigDecimal(11, voucherObj.getBigDecimal("creditamount"));
+        pstmt3.setBigDecimal(12, voucherObj.getBigDecimal("debitamount"));
+        pstmt3.setBigDecimal(13, voucherObj.getBigDecimal("localcreditamount"));
+        pstmt3.setBigDecimal(14, voucherObj.getBigDecimal("localdebitamount"));
+        pstmt3.addBatch();
+    }
+
+    /*
+    * 获取凭证汇总数据集
+     */
+    private JSONArray getVoucherTotalDatas(Map orgMapNumbber, Map orgMapName) {
+        String sql = "SELECT TEMP.orgid,TEMP.yearv,TEMP.periodv,TEMP.subjcd,TEMP.subjnm,TEMP.currentid,TEMP.entrydc," +
+                "SUM(TEMP.creditamount) creditamount_total,SUM(TEMP.debitamount) debitamount_total," +
+                "SUM(TEMP.localcreditamount) localcreditamount_total,SUM(TEMP.localdebitamount) localdebitamount_total " +
+                "FROM (" +
+                    "SELECT VOU.forgid orgid,BD.fperiodyear yearv,BD.fperiodnumber periodv," +
+                    "ACC.fnumber subjcd,ACC.fname subjnm ,VOUE.FCURRENCYID currentid,VOUE.FENTRYDC entrydc," +
+                    "ISNULL(VOUE.FORIGINALCREDIT,0)  creditamount,ISNULL(VOUE.FORIGINALDEBIT,0)  debitamount," +
+                    "ISNULL(VOUE.FLOCALCREDIT,0)  localcreditamount,ISNULL(VOUE.FLOCALDEBIT,0) localdebitamount " +
+                    "FROM T_GL_VOUCHER VOU " +
+                    "LEFT JOIN T_GL_VOUCHERENTRY VOUE ON VOU.FID = VOUE.FID " +
+                    "LEFT JOIN T_BD_period BD ON VOU.FPERIODID = BD.FID " +
+                    "LEFT JOIN T_BD_Account ACC ON VOUE.faccountid  = ACC.FID " +
+                    "WHERE VOU.fispost='1' " +
+                    "AND VOU.fk_nckd_issynyy='1' " +
+                ") TEMP " +
+                "GROUP BY TEMP.orgid,TEMP.yearv,TEMP.periodv,TEMP.subjcd,TEMP.subjnm,TEMP.currentid,TEMP.entrydc";
+        DataSet ds = DB.queryDataSet(this.getClass().getName(), new DBRoute("fi"), sql, null);
+        JSONArray jsonArray = new JSONArray();
+        Map currentList = new HashMap();
+        for (Row row : ds) {
+            JSONObject jsonObj = new JSONObject();
+            String orgcd = orgMapNumbber.get(row.getString("orgid"))!=null?orgMapNumbber.get(row.getString("orgid")).toString():"";
+            jsonObj.put("orgcd",orgcd);
+            String orgnm = orgMapName.get(row.getString("orgid"))!=null?orgMapName.get(row.getString("orgid")).toString():"";
+            jsonObj.put("orgnm",orgnm);
+            jsonObj.put("yearv",row.getString("yearv"));
+            String periodv = tranPeriodv(row.getString("periodv"));
+            jsonObj.put("periodv",periodv);
+            jsonObj.put("subjcd",row.getString("subjcd"));
+            jsonObj.put("subjnm",row.getString("subjnm"));
+            if(row.getString("currentid")!=null && currentList.get(row.getString("currentid"))==null){
+                DynamicObject currentObj = BusinessDataServiceHelper.loadSingle(row.getString("currentid"),"bd_currency");
+                Map currentMap = new HashMap();
+                currentMap.put("number",currentObj.getString("number"));
+                currentMap.put("name",currentObj.getString("name"));
+                currentList.put(row.getString("currentid"),currentMap);
+                jsonObj.put("currcd",currentObj.getString("number"));
+                jsonObj.put("currnm",currentObj.getString("name"));
+            }else{
+                Map currentMap = (Map) currentList.get(row.getString("currentid"));
+                jsonObj.put("currcd",currentMap.get("number"));
+                jsonObj.put("currnm",currentMap.get("name"));
+            }
+            String direction = "";
+            if(!StringUtils.isEmpty(row.getString("entrydc"))){
+                String entrydc = row.getString("entrydc");
+                if("1".equals(entrydc)){//借方
+                    direction = "D";
+                }else if("-1".equals(entrydc)){//贷方
+                    direction = "C";
+                }
+            }
+            jsonObj.put("direction",direction);
+            jsonObj.put("creditamount",row.getString("creditamount_total"));
+            jsonObj.put("debitamount",row.getString("debitamount_total"));
+            jsonObj.put("localcreditamount",row.getString("localcreditamount_total"));
+            jsonObj.put("localdebitamount",row.getString("localdebitamount_total"));
+            jsonArray.add(jsonObj);
+        }
+        return jsonArray;
+    }
+
+    /*
+    * 转换期间字段补0
+     */
+    private String tranPeriodv(String yearv) {
+        String realyearv = "";
+        if(!yearv.contains("0")){
+            realyearv = "0" + yearv;
+        }else{
+            realyearv = yearv;
+        }
+        return realyearv;
+    }
+
+    /*
+    * 执行插入数据
+     */
+    private void doExecuteNewData(Connection conn, PreparedStatement pstmt, Map orgMap_numbber, Map orgMap_name) throws SQLException {
+        // 设置批处理大小
+        int batchSize = 500;
+        int count = 0;
+        //获取待同步数据
+        DynamicObject[] voucherCol = getVoucherDatas();
+        log.info("[凭证反同步用友]获取待同步数据条数:"+voucherCol.length);
+        String ids = "";
+        //数据日期
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
+        String datadt = sdf1.format(new Date());
+        // 模拟大量插入操作
+        for (DynamicObject voucherObj : voucherCol) {
+            doInsertData(pstmt,voucherObj,orgMap_numbber,orgMap_name,datadt);
+            ids = ids + "," + voucherObj.getString("id");
+            if (++count % batchSize == 0) {
+                pstmt.executeBatch(); // 执行批处理
+                conn.commit(); // 可以在每个批次后提交事务
+                log.info("[凭证反同步用友]提交批次");
+                pstmt.clearBatch(); // 清空批处理
+                updateBillSign(ids); //更新凭证同步标识
+                log.info("[凭证反同步用友]更新凭证同步标识");
+                ids = "";
+            }
+        }
+
+        // 处理剩余的数据
+        if (count % batchSize != 0) {
+            pstmt.executeBatch(); // 执行最后一个批次
+            conn.commit();
+            log.info("[凭证反同步用友]提交最后一个批次");
+            pstmt.clearBatch();
+            updateBillSign(ids);
+            log.info("[凭证反同步用友]更新凭证同步标识");
+        }
+    }
+
+    private void updateBillSign(String ids) {
+        ids = ids.substring(1);
+        String sql = "UPDATE T_GL_VOUCHER SET fk_nckd_issynyy=1 WHERE FID IN ("+ids+")";
+        DB.update(DBRoute.of("fi"), sql);
+    }
+
+    private void doInsertData(PreparedStatement pstmt, DynamicObject voucherObj, Map orgMap_numbber, Map orgMap_name, String datadt)
+            throws SQLException {
+        /*------------------获取凭证单据头字段信息开始----------------*/
+        //凭证号
+        String billno = voucherObj.getString("billno");
+        //yearv会计年度
+        DynamicObject period = voucherObj.getDynamicObject("period");
+        String periodNumber = period.getString("number");
+        String yearv = periodNumber.substring(0,4);
+        //periodv会计期间
+        String periodv = periodNumber.substring(4,6);
+        //财务组织-映射表转换
+        DynamicObject org = voucherObj.getDynamicObject("org");
+        String orgcd = orgMap_numbber.get(org.getString("id"))!=null?
+                orgMap_numbber.get(org.getString("id")).toString():"";
+        String orgnm = orgMap_name.get(org.getString("id"))!=null?
+                orgMap_name.get(org.getString("id")).toString():"";
+        //制单日期
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String prepareddatev = sdf.format(voucherObj.getDate("createtime"));
+        //审核日期
+        String checkeddate = sdf.format(voucherObj.getDate("auditdate"));
+        //记账日期
+        String tallydate = sdf.format(voucherObj.getDate("bookeddate"));
+
+        /*------------------获取凭证单据头字段信息结束----------------*/
+        DynamicObjectCollection entriesCol = voucherObj.getDynamicObjectCollection("entries");
+        for(DynamicObject entriesObj : entriesCol){
+            /*-------------拼接表头字段开始------------*/
+            //凭证号
+            pstmt.setString(1, billno);
+            //yearv会计年度
+            pstmt.setString(2, yearv);
+            //periodv会计期间
+            pstmt.setString(3, periodv);
+            //财务组织编码
+            pstmt.setString(4, orgcd);
+            //财务组织名称
+            pstmt.setString(5, orgnm);
+            //制单日期
+            pstmt.setString(6, prepareddatev);
+            //审核日期
+            pstmt.setString(7, checkeddate);
+            //记账日期
+            pstmt.setString(8, tallydate);
+            //数据日期
+            pstmt.setString(9, datadt);
+            /*-------------拼接表头字段结束------------*/
+
+            /*-------------拼接分录字段开始------------*/
+            //原币贷方
+            double creditori = 0.00;
+            if(!StringUtils.isEmpty(entriesObj.getString("creditori"))){
+                creditori = entriesObj.getBigDecimal("creditori").doubleValue();
+            }
+            pstmt.setDouble(10, creditori);
+            //原币借方
+            double debitori = 0.00;
+            if(!StringUtils.isEmpty(entriesObj.getString("debitori"))){
+                debitori = entriesObj.getBigDecimal("debitori").doubleValue();
+            }
+            pstmt.setDouble(11, debitori);
+            //贷方
+            double creditlocal = 0.00;
+            if(!StringUtils.isEmpty(entriesObj.getString("creditlocal"))){
+                creditlocal = entriesObj.getBigDecimal("creditlocal").doubleValue();
+            }
+            pstmt.setDouble(12, creditlocal);
+            //借方
+            double debitlocal = 0.00;
+            if(!StringUtils.isEmpty(entriesObj.getString("debitlocal"))){
+                debitlocal = entriesObj.getBigDecimal("debitlocal").doubleValue();
+            }
+            pstmt.setDouble(13, debitlocal);
+            //方向
+            String direction = "";
+            if(!StringUtils.isEmpty(entriesObj.getString("entrydc"))){
+                String entrydc = entriesObj.getString("entrydc");
+                if("1".equals(entrydc)){//借方
+                    direction = "D";
+                }else if("-1".equals(entrydc)){//贷方
+                    direction = "C";
+                }
+            }
+            pstmt.setString(14, direction);
+            //摘要
+            pstmt.setString(15, entriesObj.getString("edescription"));
+            //会计科目编码
+            DynamicObject account = entriesObj.getDynamicObject("account");
+            String subjcd = "";
+            String subjnm = "";
+            if(account!=null){
+                subjcd = account.getString("number");
+                subjnm = account.getString("name");
+            }
+            pstmt.setString(16,subjcd);
+            //会计科目名称
+            pstmt.setString(17,subjnm);
+            //币种编码
+            DynamicObject currency = entriesObj.getDynamicObject("currency");
+            String currcd = "";
+            String currnm = "";
+            if(currency!=null){
+                currcd = currency.getString("number");
+                currnm = currency.getString("name");
+            }
+            pstmt.setString(18,currcd);
+            //币种名称
+            pstmt.setString(19,currnm);
+            /*-------------拼接分录字段结束------------*/
+            pstmt.addBatch();
+        }
+    }
+
+    private DynamicObject[] getVoucherDatas() {
+        Date beginDate = getBeginDate();
+        QFilter qFilter_beginDate = new QFilter("bookeddate",QCP.large_equals,beginDate);
+        QFilter qFilter_ispost = new QFilter("ispost", QCP.equals,"1");
+        QFilter qFilter_issynyy = new QFilter("nckd_issynyy", QCP.equals,"0");
+        DynamicObject[] voucherCol = BusinessDataServiceHelper.load(
+                "gl_voucher",SELECTFIELDS,new QFilter[]{qFilter_ispost,qFilter_beginDate,qFilter_issynyy});
+        return voucherCol;
+    }
+
+    private Date getBeginDate() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar cal_1=Calendar.getInstance();//获取当前日期
+        LocalDate today = LocalDate.now(); // 获取当前日期
+        LocalDate firstDayOfMonth = today.withDayOfMonth(1); // 获取当前月的第一天
+        if (today.equals(firstDayOfMonth)) {
+            cal_1.add(Calendar.MONTH, -1);
+        }
+        cal_1.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
+        Date firstDay = cal_1.getTime();
+        return firstDay;
+    }
+
+    private Connection getConnect() throws ClassNotFoundException, SQLException {
+        //1.获取接口链接等信息
+        DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",
+                new QFilter[]{new QFilter("number","=","synvoucher")});
+        String servername =  jkpzxx.getString("nckd_servername");
+        String port =  jkpzxx.getString("nckd_port");
+        String username = jkpzxx.getString("nckd_user");
+        String password = jkpzxx.getString("nckd_password");
+        String nckd_orclname = jkpzxx.getString("nckd_orclname");
+        String jdbcUrl = "jdbc:oracle:thin:@"+servername+":"+port+"/"+nckd_orclname;
+        // 加载Oracle JDBC驱动
+        Class.forName("oracle.jdbc.driver.OracleDriver");
+        // 建立连接
+        Connection conn = DriverManager.getConnection(jdbcUrl, username, password);
+
+        return conn;
+    }
+}

+ 36 - 0
src/main/java/kd/bos/login/thirdauth/app/ZSBGAuthtication.java

@@ -0,0 +1,36 @@
+package kd.bos.login.thirdauth.app;
+
+import com.jxbank.sso.des.LockDesUtil;
+import kd.bos.dc.api.model.Account;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 单点登录插件
+ * 2024-09-23 wangj
+ * 主要功能:处理掌上办公单点登录的逻辑
+ */
+public class ZSBGAuthtication extends ThirdAppAuthtication{
+    @Override
+    public boolean isNeedHandle(HttpServletRequest request, Account account) {
+        String app_type = request.getParameter("apptype");
+        return "ysp".equalsIgnoreCase(app_type);
+    }
+
+    @Override
+    public AppAuthResult appAuthtication(HttpServletRequest request, Account account) {
+        String user = request.getParameter("user");
+        AppAuthResult result = new AppAuthResult();
+        result.setSucceed(false);
+        if(user!=null && !"".equals(user)){
+            String token = request.getParameter("token");
+            if (LockDesUtil.isTheRightDate(user, token)) {//调用第三方jar包方法验证token和user一致
+                result.setUserType(UserType.WORKER_NUMBER);
+                result.setSucceed(true);
+                result.setUserFlag(user);
+            }
+        }
+
+        return result;
+    }
+}

+ 65 - 20
src/main/java/kd/bos/login/utils/DemoSMSSender.java

@@ -1,12 +1,16 @@
 package kd.bos.login.utils;
 
 import fi.cas.opplugin.TypeUtils;
+import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
 import kd.bos.login.utils.sms.SMSSender;
+import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.OperationServiceHelper;
 import org.json.JSONObject;
 import org.json.XML;
 import org.w3c.dom.Document;
@@ -22,8 +26,8 @@ import javax.xml.transform.stream.StreamResult;
 import java.io.*;
 import java.net.Socket;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
 import java.util.Date;
+import java.util.Random;
 
 /**
  * 通用插件
@@ -32,7 +36,8 @@ import java.util.Date;
  */
 public class DemoSMSSender implements SMSSender {
     protected static final Log log = LogFactory.getLog(DemoSMSSender.class);
-
+    Long orgId = null;
+    Long userId = null;
     @Override
     public boolean sendMessage(String phone, String message, String signature) {
         Boolean flag = false;
@@ -47,21 +52,32 @@ public class DemoSMSSender implements SMSSender {
         if(cbsReturnJson!=null) {
             JSONObject reMessage = cbsReturnJson.getJSONObject("Message");
             JSONObject reBodyInfo = reMessage.getJSONObject("BodyInfo");
-            if ("success".equals(reBodyInfo.getString("Fs_retMsg"))) {//相应成功
+            if (reBodyInfo.getString("Fs_retMsg").contains("success")) {//相应成功
                 if ("000".equals(reBodyInfo.getString("Fs_retCode"))) {
                     flag = true;
                     log.info("短信前置机响应成功,前置机接口发送成功");
+                    //写入日志
+                    writeLog(phone);
                 } else {
                     log.info("短信前置机响应成功,前置机接口发送失败");
                 }
             } else {
-                log.info("短信发送前置机响应失败");
+                log.info("短信发送前置机响应失败"+reBodyInfo.getString("Fs_retMsg"));
             }
         }
-
         return flag;
     }
 
+    private void writeLog(String phone) {
+        DynamicObject[] datalist = new DynamicObject[1];
+        DynamicObject writeObj = BusinessDataServiceHelper.newDynamicObject("nckd_assistantdata_mlog");
+        writeObj.set("nckd_mobile",phone);
+        writeObj.set("nckd_person",userId);
+        writeObj.set("nckd_org",orgId);
+        datalist[0]=writeObj;
+        OperationServiceHelper.executeOperate("save", "nckd_assistantdata_mlog", datalist, OperateOption.create());
+    }
+
     @Override
     public boolean sendMessage(String phone, String message) {
         Boolean flag = false;
@@ -105,26 +121,30 @@ public class DemoSMSSender implements SMSSender {
             //拼接报文
             createElement(doc, body, "Fs_channelcode", "JSX"); //渠道号
             createElement(doc, body, "Fs_transcode", "SingleMsg");  //交易码
-            createElement(doc, body, "Fs_rpid", "12345");        //流水号(待提供)
+            Date now = new Date();
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
+            String nowStr1 = formatter.format(now);
+            nowStr1 = nowStr1.replaceAll(" ","");
+            Random random = new Random();
+            int randomNumber = 100 + random.nextInt(900);
+            createElement(doc, body, "Fs_rpid", "jsx"+nowStr1+String.valueOf(randomNumber));        //流水号(待提供)
             createElement(doc, body, "Fs_phone", phone);        //手机号
             createElement(doc, body, "Fs_ParamCount", "2");//模板数量
             createElement(doc, body, "ParamName1", "SmsVerifyCode");//模板名称1
             String ParamValue1 = message.substring(4,10);
             createElement(doc, body, "ParamValue1", ParamValue1);//模板值1
             createElement(doc, body, "ParamName2", "SceneName");//模板名称2
-            createElement(doc, body, "ParamValue2", "wj");//模板值2
-
-            createElement(doc, body, "Fs_regOrg", "");//发送机构(待提供)
+            createElement(doc, body, "ParamValue2", "重置密码");//模板值2
+            String regOrg = getRegOrg(phone);
+            createElement(doc, body, "Fs_regOrg", regOrg);//发送机构(待提供),例100802
             createElement(doc, body, "Fs_bizId", "00007");//业务类型id
             createElement(doc, body, "Fs_templateld", "2409029227");//模板id
 
-            Date now = new Date();
-            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
-            String nowStr = formatter.format(now);
-            String Fs_reqDate = nowStr.substring(0,8);
-            createElement(doc, body, "Fs_reqDate", Fs_reqDate);
-            String Fs_regTime = nowStr.substring(9,15);
-            createElement(doc, body, "Fs_regTime", Fs_regTime);
+            String nowStr2 = formatter.format(now);
+            String Fs_reqDate = nowStr2.substring(0,8);
+            createElement(doc, body, "Fs_reqDate", Fs_reqDate);//日期
+            String Fs_regTime = nowStr2.substring(9,15);
+            createElement(doc, body, "Fs_regTime", Fs_regTime);//时间
 
             TransformerFactory transformerFactory = TransformerFactory.newInstance();
             Transformer transformer = transformerFactory.newTransformer();
@@ -143,10 +163,35 @@ public class DemoSMSSender implements SMSSender {
         }
     }
 
-    private String tranTime(int hour, int minute, int second) {
-        String Fs_regTime = String.valueOf(hour)+String.valueOf(minute)+String.valueOf(second);
-
-        return Fs_regTime;
+    private String getRegOrg(String phone) {
+        String orgNumber = "";
+        QFilter qFilter_phone = new QFilter("phone", QCP.equals,phone);
+        DynamicObject[] userCol = BusinessDataServiceHelper.load("bos_user",
+                "id,entryentity.dpt,entryentity.ispartjob",new QFilter[]{qFilter_phone});
+        if(userCol!=null && userCol.length>0){//手机号匹配到人员
+            DynamicObject userObj = userCol[0];
+            userId = userObj.getLong("id");
+            DynamicObjectCollection entryList = userObj.getDynamicObjectCollection("entryentity");
+            for(DynamicObject entryObj : entryList){
+                boolean ispartjob = entryObj.getBoolean("ispartjob");
+                if(ispartjob==false){//找到人员主组织
+                    DynamicObject dpt = entryObj.getDynamicObject("dpt");
+                    Long dptId = dpt.getLong("id");
+                    orgId = dptId;
+                    QFilter qFilter_org = new QFilter("nckd_orgfield",QCP.equals,dptId);
+                    QFilter qFilter_enable = new QFilter("enable", QCP.equals,"1");
+                    QFilter qFilter_status = new QFilter("status", QCP.equals, "C");
+                    DynamicObject[] orgCol = BusinessDataServiceHelper.load("nckd_base_org_oa","",
+                            new QFilter[]{qFilter_org,qFilter_enable,qFilter_status});
+                    if(orgCol!=null && orgCol.length>0){//匹配到映射表记录
+                        DynamicObject orgObj = orgCol[0];
+                        orgNumber = orgObj.getString("nckd_oa_org");
+                    }
+                    break;
+                }
+            }
+        }
+        return orgNumber;
     }
 
     public static JSONObject socketService(String serverName,String port,String xmlData){

+ 97 - 0
src/main/java/kd/bos/newdevportal/table/TableDataBasicPlugin.java

@@ -0,0 +1,97 @@
+package kd.bos.newdevportal.table;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.db.DBRoute;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.newdevportal.table.DesignerTable;
+import kd.bos.newdevportal.table.TableManagerListPlugin;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import kd.bos.dataentity.utils.StringUtils;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.datamodel.ListSelectedRow;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.list.BillList;
+import kd.bos.metadata.dao.MetadataDao;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.scm.bid.formplugin.report.biddetailquery.QingFiledContent;
+import sys.sc.opplugin.utils.DatFileCreatUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * @author cjz
+ * @date 2024/9/18 11:30
+ * @description:数据表基础资料,选择数据表带出数据表信息
+ */
+ public class TableDataBasicPlugin extends AbstractListPlugin {
+    //数据表基础资料标识
+    private static String nckd_tabledatabasic="nckd_tabledatabasic";
+
+    //选择数据表基础资料后,将数据表信息带出
+    public void propertyChanged(PropertyChangedArgs e){
+        super.beforePropertyChanged(e);
+        String name=e.getProperty().getName();
+        if (nckd_tabledatabasic.equals(name)) {
+            //先清空表字段分录
+            this.getModel().deleteEntryData("nckd_tableentry");
+            //获取单据模型
+            DynamicObject data=this.getModel().getDataEntity(true);
+            //获取数据表基础资料
+            DynamicObject tabledatabasic=data.getDynamicObject(nckd_tabledatabasic);
+            //业务应用编码
+            String bizappnumber=tabledatabasic.getString("nckd_bizapp.number");
+            //表命名字段赋值
+            this.getModel().setValue("number",tabledatabasic.getString("tablename"));
+            //业务编码赋值
+            this.getModel().setValue("nckd_biazppnum",bizappnumber);
+            //表名称
+            this.getModel().setValue("name",tabledatabasic.getString("nckd_entity.name"));
+            DBTableProviderNew provider =new DBTableProviderNew();
+            QFilter filtercol=new QFilter("number",QCP.equals,bizappnumber);
+            //业务云
+            DynamicObject bizappcloudDy=BusinessDataServiceHelper
+                    .loadSingle("bos_devportal_bizapp","id,bizcloud.number",new QFilter[]{filtercol});
+            //业务云编码
+            String bizcloudnum=bizappcloudDy.getString("bizcloud.number");
+            //设置为sys系统服务云库
+            provider.setRoute(DBRoute.of(bizcloudnum));
+
+            Map<String, DesignerTable> tableMap =provider
+                    .getTableInfo_youhua(Collections.singletonList(tabledatabasic.getString("tablename")),
+                            Collections.singletonList(tabledatabasic.getString("id")));
+            for (Map.Entry<String, DesignerTable> table : tableMap.entrySet()) {
+                //表名
+                String tablename = table.getKey();
+                DesignerTable designerTable = table.getValue();
+                String comment = designerTable.getName();
+                //获取表字段
+                Iterator fields = designerTable.getCols().iterator();
+                while(fields.hasNext()) {
+                    DesignerColumn col = (DesignerColumn)fields.next();
+                    String f_fieldkey = col.getCode();//字段标识
+                    String f_fieldname = col.getName();//字段名称
+                    //表字段新增分录行
+                    int rowIndex = this.getModel().createNewEntryRow("nckd_tableentry");
+                    //字段标识
+                    this.getModel().setValue("nckd_entrycode",f_fieldkey,rowIndex);
+                    //字段名
+                    this.getModel().setValue("nckd_entryname",f_fieldname,rowIndex);
+                    this.getModel().setValue("nckd_isable",1,rowIndex);
+                }
+            }
+        }
+    }
+}

+ 1 - 1
src/main/java/kd/imc/rim/utils/ApiHttpUtils.java → src/main/java/kd/imc/rim/ApiHttpUtils.java

@@ -1,4 +1,4 @@
-package kd.imc.rim.utils;
+package kd.imc.rim;
 
 
 import com.alibaba.fastjson.JSON;

+ 0 - 4
src/main/java/kd/imc/rim/AwsRecognitionServiceEx.java

@@ -23,10 +23,6 @@ import kd.imc.rim.common.invoice.recognitionnew.RecognitionService;
 import kd.imc.rim.common.invoice.recognitionnew.model.RecognitionParam;
 import kd.imc.rim.common.invoice.recognitionnew.model.RecognitionResult;
 import kd.imc.rim.common.message.exception.MsgException;
-import kd.imc.rim.common.utils.AwsFpyService;
-import kd.imc.rim.common.utils.HttpUtil;
-import kd.imc.rim.common.utils.ImcConfigUtil;
-import kd.imc.rim.utils.ApiHttpUtils;
 import kd.imc.rim.utils.FileOutputStreamExample;
 import org.apache.commons.compress.utils.Lists;
 

+ 120 - 0
src/main/java/sys/sc/formplugin/CreatDatPlugin.java

@@ -0,0 +1,120 @@
+package sys.sc.formplugin;
+
+import com.alipay.api.kms.aliyun.utils.BackoffUtils;
+import com.jcraft.jsch.SftpException;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import sys.sc.opplugin.utils.DatFileCreatUtils;
+import sys.sc.opplugin.utils.SftpClient;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author cjz
+ * @date 2024/9/18 17:05
+ * @description:生成dat文件
+ */
+public class CreatDatPlugin extends AbstractListPlugin {
+
+    //数据表字段标识
+    private static String nckd_tablebasic="nckd_tablebasic";
+
+    //获取分录中表字段需要生成的所有字段
+    public void afterDoOperation(AfterDoOperationEventArgs arg){
+        String name=arg.getOperateKey();
+        if (name.equals("creatfile"))
+        {
+            DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+            List<String> fileList=new ArrayList<>();
+            //获取当前分录
+            DynamicObjectCollection dynamicObjectCollection=dynamicObject.getDynamicObjectCollection("nckd_tableentry");
+            for (DynamicObject item:dynamicObjectCollection) {
+                //将打勾的字段到处
+                if (item.getBoolean("nckd_isable")) {
+                    //需要导入的标识写入list中
+                    fileList.add(item.getString("nckd_entrycode"));
+                }
+            }
+            //获取当前选择的表名
+            String tablenumber=dynamicObject.getString("number");
+            //业务编码
+            String bizappnum=dynamicObject.getString("nckd_biazppnum");
+            QFilter qFilter=new QFilter("number", QCP.equals,"creatdat");
+            DynamicObject jkdataDy= BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",
+                    "id,number,name,nckd_servername" +
+                            ",nckd_port,nckd_url,nckd_filename,nckd_user" +
+                            ",nckd_password,nckd_split,nckd_endsign",new QFilter[]{qFilter});
+            //文件名
+            String filename=tablenumber+".dat";
+            //服务器路径
+            String nckd_url=jkdataDy.getString("nckd_url");
+            if (nckd_url.equals("/var/appstatic/")) {
+                nckd_url="/home/kingdee/cosmic/nginx-appstatic/store/appstatic/";
+            }
+//            //生成文件的路径
+////            String filePath=nckd_url+filename;
+////            File dir=new File(filePath);
+////            //不存在则创建文件夹
+////            if (!dir.exists()) {
+////                File parentDir = dir.getParentFile();
+////                if (parentDir != null && !parentDir.exists()) {
+////                    parentDir.mkdirs();
+////                }
+////                try {
+////                    dir.createNewFile();
+////                } catch (IOException e) {
+////                    throw new RuntimeException(e);
+////                }
+////                this.getView().showMessage("创建成功"+filePath);
+////            }
+            //分割符号
+            String spiltsign=jkdataDy.getString("nckd_split");
+            //结束符号
+            String endsign=jkdataDy.getString("nckd_endsign");
+            //服务器端口
+            String host=jkdataDy.getString("nckd_servername");
+            //服务器用户名
+            String username=jkdataDy.getString("nckd_user");
+            //服务器密码
+            String password=jkdataDy.getString("nckd_password");
+            //服务器端口号
+            int port=jkdataDy.getInt("nckd_port");
+            try {
+                //临时文件
+                File localFile = File.createTempFile(tablenumber, ".dat");
+                //文件写入
+                DatFileCreatUtils datFileCreatUtils=new DatFileCreatUtils(tablenumber,bizappnum,fileList,localFile.getAbsolutePath(),spiltsign,endsign);
+                //生成dat文件到本地
+                datFileCreatUtils.creatDatFile();
+                //上传文件到服务器中
+                SftpClient sftpClient=new SftpClient(host,username,password,port);
+                //获取服务器连接
+                sftpClient.connect();
+                //从本地传文件到服务器
+                sftpClient.fileCreat(localFile.getAbsolutePath(), nckd_url);
+                //上传后删除临时文件
+                localFile.delete();
+                //关闭连接
+                sftpClient.disconnect();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            } catch (SftpException e) {
+                throw new RuntimeException(e);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+}

+ 8 - 9
src/main/java/sys/sc/formplugin/TestPlugin.java

@@ -8,6 +8,8 @@ import kd.bos.dataentity.entity.CloneUtils;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
 import kd.bos.entity.EntityMetadataCache;
 import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.form.IFormView;
@@ -26,6 +28,7 @@ import kd.bos.servicehelper.operation.OperationServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 import kd.epm.eb.common.model.DynamicInfoCollection;
 import kd.imc.bdm.common.constant.BotpCallBackLogConstant;
+import sys.sc.opplugin.utils.InterFaceImgUtils;
 import sys.sc.opplugin.utils.SftpClient;
 
 
@@ -177,6 +180,9 @@ public class TestPlugin  extends AbstractListPlugin {
     //根据基础资料数据生成dat文件,nckdentry基础资料标识,selector字段标识,filePath文件路径
     public void creatDatFile(String nckdentry,List<String> selector,String filePath) {
         try {
+
+            DB.query(new DBRoute("sys"),"",null);
+
             //基础资料数据
             DynamicObjectType dynamicObjectType = EntityMetadataCache.getDataEntityType(nckdentry);
             DynamicObject[] dataList = BusinessDataServiceHelper.load(dynamicObjectType.getName(), String.join(",", selector), null);
@@ -794,15 +800,8 @@ public class TestPlugin  extends AbstractListPlugin {
         //获取linux服务器连接
         if ("connect".equals(e.getOperateKey()))
         {
-            try {
-                FileCreat();
-            } catch (JSchException ex) {
-                throw new RuntimeException(ex);
-            } catch (IOException ex) {
-                throw new RuntimeException(ex);
-            } catch (Exception ex) {
-                throw new RuntimeException(ex);
-            }
+            InterFaceImgUtils interFaceImgUtils=new InterFaceImgUtils("produceurl");
+
         }
 
     }

+ 97 - 0
src/main/java/sys/sc/opplugin/utils/DatFileCreatUtils.java

@@ -0,0 +1,97 @@
+package sys.sc.opplugin.utils;
+
+import com.grapecity.documents.excel.Q;
+import com.jcraft.jsch.SftpException;
+import kd.bos.algo.DataSet;
+
+import kd.bos.algo.Row;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.orm.query.multi.QFilterFtlikeTransFunction;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.scm.bid.formplugin.report.biddetailquery.QingFiledContent;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author cjz
+ * @date 2024/9/18 16:30
+ * @description:生成dat文件方法封装
+ */
+public class DatFileCreatUtils {
+    //表名
+    private  String nckdentry;
+    //业务编码
+    private String bizappnum;
+    //生成表的字段list
+    private  List<String> selector;
+    //生成文件位置
+    private  String filePath;
+    //分隔符
+    private String spiltsign;
+    //结尾符
+    private String endsign;
+
+    public DatFileCreatUtils(String nckdentry,String bizappnum,List<String> selector,String filePath,String spiltsign,String endsign)
+    {
+        this.nckdentry=nckdentry;
+        this.bizappnum=bizappnum;
+        this.selector=selector;
+        this.filePath=filePath;
+        this.spiltsign=spiltsign;
+        this.endsign=endsign;
+
+    }
+
+
+    public void creatDatFile() {
+        QFilter filtercol=new QFilter("number",QCP.equals,bizappnum);
+        //业务云
+        DynamicObject bizappcloudDy=BusinessDataServiceHelper
+                .loadSingle("bos_devportal_bizapp","id,bizcloud.number",new QFilter[]{filtercol});
+        //业务云编码
+        String bizcloudnum=bizappcloudDy.getString("bizcloud.number");
+        String sql = " /*dialect*/ select "+String.join(",", selector)+" from "+nckdentry;
+        DataSet dataSet = DB.queryDataSet(this.getClass().getName(),DBRoute.of(bizcloudnum),sql,null);
+        try {
+//            File file = new File(filePath);
+//            //文件路径不存在则创建文件
+//            if (!file.exists()) {
+//                File parentDir = file.getParentFile();
+//                if (parentDir != null && !parentDir.exists()) {
+//                    parentDir.mkdirs();
+//                }
+//                file.createNewFile();
+//            }
+            try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "GBK"))) {
+                while(dataSet.hasNext()) {
+                    Row data = dataSet.next();
+                    StringBuilder line = new StringBuilder();
+                    for (String field : selector) {
+                        //分割符
+                        line.append(data.get(field) != null ? data.get(field).toString() : "").append(spiltsign);
+                    }
+                    line.setLength(line.length() - 1);
+                    //结尾符
+                    line.append(endsign);
+                    writer.write(line.toString());
+                    writer.newLine();
+                }
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }  catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 55 - 0
src/main/java/sys/sc/opplugin/utils/InterFaceImgUtils.java

@@ -0,0 +1,55 @@
+package sys.sc.opplugin.utils;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+
+/**
+ * @author cjz
+ * @date 2024/9/24 16:56
+ * @description:根据编码获取接口配置信息
+ */
+public class InterFaceImgUtils {
+    //接口配置信息标识
+    private String nckd_jkpzxx="nckd_jkpzxx";
+    //接口编码
+    private String URL;
+    DynamicObject jkpzxx;
+
+    public InterFaceImgUtils(String URL) {
+        this.URL=URL;
+        //接口配置信息获取
+        jkpzxx = BusinessDataServiceHelper
+                .loadSingle(nckd_jkpzxx,new QFilter[]{new QFilter("number","=",URL)});
+    }
+    //端口号
+    public int getProt() {
+        return jkpzxx.getInt("nckd_port");
+    }
+    //服务器地址
+    public String getServerName() {
+        return jkpzxx.getString("nckd_servername");
+    }
+    //数仓文件路径
+    public String getServerUrl() {
+        return jkpzxx.getString("nckd_url");
+    }
+    //获取连接用户
+    public String getServerUser() {
+        return jkpzxx.getString("nckd_user");
+    }
+    //获取连接密码
+    public String getServerPassword() {
+        return jkpzxx.getString("nckd_password");
+    }
+    //获取分隔符
+    public String getServerSplit() {
+        return jkpzxx.getString("nckd_split");
+    }
+    //获取结尾符
+    public String getServerEndsign() {
+        return jkpzxx.getString("nckd_endsign");
+    }
+
+
+}

+ 13 - 12
src/main/java/sys/sc/opplugin/utils/SftpClient.java

@@ -11,7 +11,9 @@ import com.jcraft.jsch.Session;
 import com.jcraft.jsch.SftpException;
 
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 
 public class SftpClient {
     private String host;
@@ -44,18 +46,17 @@ public class SftpClient {
         return inputStream;
     }
 
-    // 下载文件
-//    public void downloadFile(String remoteFilePath, String localFilePath) throws Exception {
-//        try (InputStream inputStream = sftpChannel.get(remoteFilePath);
-//             FileOutputStream outputStream = new FileOutputStream(localFilePath)) {
-//
-//            byte[] buffer = new byte[1024];
-//            int bytesRead;
-//            while ((bytesRead = inputStream.read(buffer)) != -1) {
-//                outputStream.write(buffer, 0, bytesRead);
-//            }
-//        }
-//    }
+
+    //上传文件到服务器路径,
+    public void fileCreat(String localFilePath,String remoteFilePath) throws SftpException {
+        //本地服务器传到服务器文件
+        sftpChannel.put(localFilePath,remoteFilePath);
+    }
+
+    //创建文件夹
+    public void creatDir(String path) throws SftpException {
+        sftpChannel.mkdir(path);
+    }
 
     // 断开连接
     public void disconnect() {

+ 135 - 0
src/main/java/sys/sc/task/CreatDatDailyTask.java

@@ -0,0 +1,135 @@
+package sys.sc.task;
+
+import com.alibaba.druid.support.logging.Log;
+import com.alibaba.druid.support.logging.LogFactory;
+import com.jcraft.jsch.SftpException;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.exception.KDException;
+import kd.bos.openapi.base.util.QFilterUtil;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.schedule.api.MessageHandler;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import scala.Dynamic;
+import sys.sc.opplugin.utils.DatFileCreatUtils;
+import sys.sc.opplugin.utils.InterFaceImgUtils;
+import sys.sc.opplugin.utils.SftpClient;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cjz
+ * @date 2024/9/19 16:00
+ * @description:表数据生成dat文件,放在指定服务器路径下调度计划
+ */
+public class CreatDatDailyTask extends AbstractTask {
+    private static final Log log = LogFactory.getLog(CreatDatDailyTask.class);
+
+    //接口配置信息基础资料标识
+    private static String nckd_jkpzxx="nckd_jkpzxx";
+    //数据表字段基础资料标识
+    private static String nckd_tablebasic="nckd_tablebasic";
+    @Override
+    public MessageHandler getMessageHandle() {
+        return super.getMessageHandle();
+    }
+
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        //取已审核的数据
+        QFilter filter=new QFilter("status", QCP.equals,"C");
+        //数据表基础资料
+        DynamicObject[] tableDy=BusinessDataServiceHelper.load(nckd_tablebasic,"id",new QFilter[]{filter});
+        log.info("----------------------读取数据表基础资料-------------------");
+        for (DynamicObject item:tableDy)
+        {
+            log.info("-------------------------获取服务器连接-----------------");
+            List<String> fileList=new ArrayList<>();
+            //获取表字段当前分录
+            DynamicObjectCollection dynamicObjectCollection=item.getDynamicObjectCollection("nckd_tableentry");
+            for (DynamicObject itemmen:dynamicObjectCollection) {
+                //将打勾的字段到处
+                if (itemmen.getBoolean("nckd_isable")) {
+                    //需要导入的标识写入list中
+                    fileList.add(itemmen.getString("nckd_entrycode"));
+                }
+            }
+            //获取当前选择的表名
+            String tablenumber=item.getString("number");
+            //业务编码
+            String bizappnum=item.getString("nckd_biazppnum");
+            //接口配置信息获取
+            //读取接口配置信息获取
+            InterFaceImgUtils interFaceImgUtils=new InterFaceImgUtils("creatdat");
+            //服务器路径
+            String nckd_url=interFaceImgUtils.getServerUrl();
+            if (nckd_url.equals("/var/appstatic/")) {
+                nckd_url="/home/kingdee/cosmic/nginx-appstatic/store/appstatic/";
+            }
+            //分割符号
+            String spiltsign=interFaceImgUtils.getServerSplit();
+            //结束符号
+            String endsign=interFaceImgUtils.getServerEndsign();
+            //上传文件到服务器中
+            //服务器端口
+            String host=interFaceImgUtils.getServerName();
+            //服务器用户名
+            String username=interFaceImgUtils.getServerUser();
+            //服务器密码
+            String password=interFaceImgUtils.getServerPassword();
+            //服务器路径
+            //服务器端口号
+            int port= interFaceImgUtils.getProt();
+            try {
+                //上传文件到服务器中
+                SftpClient sftpClient=new SftpClient(host,username,password,port);
+                //获取服务器连接
+                sftpClient.connect();
+                //创建文件夹,为当天日期
+                Date currentDate=new Date();
+                //设置日期格式
+                SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
+                String dateStr=sf.format(currentDate);
+                String filePathWithDate=nckd_url+dateStr;
+                //创建文件夹,名为当前日期
+                sftpClient.creatDir(filePathWithDate);
+                //临时文件
+                File localFile = File.createTempFile(tablenumber, ".dat");
+                File dest=new File(localFile.getParent()+File.separator+tablenumber.toUpperCase()+".dat");
+                //重命名文件
+                localFile.renameTo(dest);
+                //文件写入
+                DatFileCreatUtils datFileCreatUtils=new DatFileCreatUtils(tablenumber,bizappnum,fileList,dest.getAbsolutePath(),spiltsign,endsign);
+                //生成dat文件到本地
+                datFileCreatUtils.creatDatFile();
+                //从本地传文件到服务器
+                sftpClient.fileCreat(dest.getAbsolutePath(),filePathWithDate);
+                //上传后删除临时文件
+                localFile.delete();
+                dest.delete();
+                //关闭连接
+                sftpClient.disconnect();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            } catch (SftpException e) {
+                throw new RuntimeException(e);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    @Override
+    public boolean isSupportReSchedule() {
+        return super.isSupportReSchedule();
+    }
+}

+ 4 - 8
src/main/java/sys/sc/task/UpdateBankDailyTask.java

@@ -41,14 +41,6 @@ public class UpdateBankDailyTask extends AbstractTask {
 
     @Override
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
-        log.info("----------------------获取服务器连接------------------------");
-        //获取服务器连接
-        SftpClient sftpClient=new SftpClient(host,username,password,port);
-        try {
-            sftpClient.connect();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
         String mes="-----------------正在执行任务,读取行名行号---------------------";
         log.info(mes+requestContext);
         //行名行号表字段
@@ -58,6 +50,10 @@ public class UpdateBankDailyTask extends AbstractTask {
         //行名行号表标识
         String bd_bebank="bd_bebank";
         try {
+            log.info("----------------------获取服务器连接------------------------");
+            //获取服务器连接
+            SftpClient sftpClient=new SftpClient(host,username,password,port);
+            sftpClient.connect();
             List<DynamicObject> createdataList = new ArrayList<>();
             List<DynamicObject> updatedataList = new ArrayList<>();
             //文件路径

+ 4 - 4
src/main/java/sys/sc/task/UpdateDataDailyTask.java

@@ -49,17 +49,17 @@ public class UpdateDataDailyTask extends AbstractTask {
         log.info(mes+requestContext);
         //文件路径
         String path=getFileUrl("organduserurl");
-        //获取连接对象
-        SftpClient sftpClient=new SftpClient(host,username,password,port);
         try {
+            //获取连接对象
+            SftpClient sftpClient=new SftpClient(host,username,password,port);
             sftpClient.connect();
             //读取文件更新基础资料
             updatebasicdata(sftpClient.fileInputStream(path));
+            //关闭连接
+            sftpClient.disconnect();
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-        //关闭连接
-        sftpClient.disconnect();
         //更新组织
         log.info("----------------更新组织中---------------------");
         updateorg();

+ 7 - 16
src/main/java/sys/sc/task/UpdateImpairmentDailyTask.java

@@ -41,17 +41,13 @@ public class UpdateImpairmentDailyTask extends AbstractTask {
 
     @Override
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        String mes="-------------------------正在执行任务,读取减值数据----------------------";
+        log.info(mes+requestContext);
         log.info("---------------------获取服务器连接--------------------");
         //获取服务器连接
         SftpClient sftpClient=new SftpClient(host,username,password,port);
         try {
             sftpClient.connect();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        String mes="-------------------------正在执行任务,读取减值数据----------------------";
-        log.info(mes+requestContext);
-        try {
             //文件路径
             String filelocation=getFileUrl("jzsjurl");
             //减值数据基础资料
@@ -101,22 +97,21 @@ public class UpdateImpairmentDailyTask extends AbstractTask {
                 //转换list为DynamicObject类型
                 SaveServiceHelper.save(dynamicObjectType,dynamicObjectlist);
             }
+            QFilter qFilter=new QFilter("nckd_isdelete",QCP.equals,true);
             //删除所有的数据,再新增
             for (DynamicObject existingDatum : existingData) {
                 existingDatum.set("nckd_isdelete", true);
             }
             SaveServiceHelper.save(existingData);
-            QFilter qFilter=new QFilter("nckd_isdelete",QCP.equals,true);
             DeleteServiceHelper.delete(dynamicObjectType.getName(),new QFilter[]{qFilter});
             log.info("-----------------------减值数据已成功保存---------------------");
             custSave(dynamicObjectlist);
             log.info("------------------------客户数据已成功保存----------------------");
-        } catch (IOException ex) {
-            ex.printStackTrace();
-            log.error("----------------------------读取文件发生错误"+ex.getMessage()+"--------------------------");
-        } catch (SftpException e) {
+        } catch (Exception e) {
             throw new RuntimeException(e);
         }
+
+
     }
 
     @Override
@@ -165,22 +160,18 @@ public class UpdateImpairmentDailyTask extends AbstractTask {
         //查询已经存在的客户数据
         DynamicObject[] existingData = BusinessDataServiceHelper
                 .load(dynamicObjectType.getName(), String.join(",", selector),null);
-
-
         List<DynamicObject> dataListAdd = new ArrayList<>();
         //存在数据的客户号
         Map<String, DynamicObject> existingDataMap = new HashMap<>();
         for (DynamicObject obj : existingData) {
             existingDataMap.put(obj.getString("number"), obj);
         }
-
         for(DynamicObject dataList:dynamicObjectlist)
         {
             //获取这条数据的id
             String nckd_cust_id=dataList.getString("nckd_cust_id");
             //客户号不存在则保存
-            if (!existingDataMap.containsKey(nckd_cust_id))
-            {
+            if (!existingDataMap.containsKey(nckd_cust_id)) {
                 DynamicObject data = new DynamicObject(dynamicObjectType);
                 //客户号
                 data.set("number",dataList.getString("nckd_cust_id"));