Ver Fonte

添加手动计算按钮

wanwei há 7 meses atrás
pai
commit
48b73db3b7

+ 73 - 0
src/main/java/fi/cas/formplugin/ArBadDebtLossListPlugin.java

@@ -0,0 +1,73 @@
+package fi.cas.formplugin;
+
+import fi.cas.task.MatchBadDebtsTask;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.List;
+
+//坏账单计算计提金额
+public class ArBadDebtLossListPlugin 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_match".equals(itemKey)) {
+            List<DynamicObject> jz = new ArrayList<>();
+            List<DynamicObject> ar_baddebtlossbill = new ArrayList<>();//坏账单列表
+            List<DynamicObject> infoList = new ArrayList<>();//计算成功的坏帐单列表
+            List<DynamicObject> ar_baddebtlossbill_customer = new ArrayList<>();//根据客户坏账单列表
+            List<DynamicObject> ar_baddebtlossbill_five_level = new ArrayList<>();//根据五级分类坏账单列表
+
+            BillList billList = (BillList)this.getControl("billlistap");
+            ListSelectedRowCollection list =  billList.getSelectedRows();
+            Object[] primaryKeyValues = list.getPrimaryKeyValues();
+            if (primaryKeyValues.length > 0) {
+                for (Object pk : primaryKeyValues) {
+                    DynamicObject info = BusinessDataServiceHelper.loadSingle(pk, "ar_baddebtlossbill");
+                    ar_baddebtlossbill.add(info);
+                }
+
+                //查询减值准备数据(最新一批)
+                DynamicObject[] jzdynamicObjects = BusinessDataServiceHelper.load("nckd_impairment","id", null);
+                for (DynamicObject jzdynamicObject : jzdynamicObjects) {
+                    DynamicObject info = BusinessDataServiceHelper.loadSingle(jzdynamicObject.getPkValue(), jzdynamicObject.getDynamicObjectType().getName());
+                    jz.add(info);
+                }
+
+                MatchBadDebtsTask matchBadDebtsTask = new MatchBadDebtsTask();
+
+                //下推坏账-根据借据号匹配
+                matchBadDebtsTask.MatchByDubilId(ar_baddebtlossbill, jz, infoList, ar_baddebtlossbill_customer);
+
+                //下推坏账-根据客户匹配
+                matchBadDebtsTask.MatchByCustom(ar_baddebtlossbill_customer, jz, infoList, ar_baddebtlossbill_five_level);
+
+                //下推坏账-根据五级分类匹配
+                matchBadDebtsTask.MatchByFiveLevel(ar_baddebtlossbill_five_level, infoList);
+
+                //保存
+                DynamicObject[] array = infoList.toArray(new DynamicObject[0]);
+                SaveServiceHelper.save(array);
+
+                // 显示最终的成功和失败消息
+                String message = String.format("执行完成:成功 %d 条,失败 %d 条", array.length, list.size() - array.length);
+                this.getView().showMessage(message);
+            }else {
+                this.getView().showMessage("请至少选择一条数据");
+            }
+        }
+    }
+}

+ 4 - 0
src/main/java/fi/cas/task/MatchBadDebtsTask.java

@@ -37,6 +37,7 @@ public class MatchBadDebtsTask extends AbstractTask {
         filter.and("bizdate", QCP.large_than, sevenDaysAgo);
         filter.and("bizdate", QCP.less_than, currentDate);
         filter.and("baddebtamt", QCP.large_than, 0);
+        filter.and("nckd_match_amt", QCP.equals, "0");
         DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("ar_baddebtlossbill","id", new QFilter[] {filter});
         for (int i = 0; i < dynamicObjects.length; i++) {
             DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
@@ -78,6 +79,7 @@ public class MatchBadDebtsTask extends AbstractTask {
                 BigDecimal ecl_amount = unsettleamount.multiply(ecl_ratio);
                 dynamicObject.set("nckd_textfield1", String.valueOf(ecl_ratio));//计提比例
                 dynamicObject.set("nckd_amountfield", ecl_amount);//计提金额
+                dynamicObject.set("nckd_match_amt", true);//是否计算计提金额
                 infoList.add(dynamicObject);
             }else {
                 //根据客户匹配
@@ -104,6 +106,7 @@ public class MatchBadDebtsTask extends AbstractTask {
                 BigDecimal ecl_amount = unsettleamount.multiply(ecl_ratio);
                 dynamicObject.set("nckd_textfield1", String.valueOf(ecl_ratio));//计提比例
                 dynamicObject.set("nckd_amountfield", ecl_amount);//计提金额
+                dynamicObject.set("nckd_match_amt", true);//是否计算计提金额
                 infoList.add(dynamicObject);
             }else {
                 //根据五级分类匹配
@@ -122,6 +125,7 @@ public class MatchBadDebtsTask extends AbstractTask {
                 BigDecimal ecl_amount = unsettleamount.multiply(ecl_ratio);
                 dynamicObject.set("nckd_textfield1", String.valueOf(ecl_ratio));//计提比例
                 dynamicObject.set("nckd_amountfield", ecl_amount);//计提金额
+                dynamicObject.set("nckd_match_amt", true);//是否计算计提金额
                 infoList.add(dynamicObject);
             }
         }