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.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import java.util.ArrayList; import java.util.Arrays; 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 jz = new ArrayList<>(); List ar_baddebtlossbill = new ArrayList<>();//坏账单列表 List dubilList = new ArrayList<>();//坏账单列表 List custList = new ArrayList<>();//坏账单列表 List infoList = new ArrayList<>();//计算成功的坏帐单列表 List ar_baddebtlossbill_customer = new ArrayList<>();//根据客户坏账单列表 List 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); dubilList.add(info.getString("nckd_textfield")); custList.add(info.getDynamicObject("asstact").getString("number")); } //查询减值准备数据(最新一批) QFilter filter = new QFilter("nckd_dubil_id", QCP.in, dubilList); filter.or("nckd_cust_id", QCP.in, custList); DynamicObject[] jzdynamicObjects = BusinessDataServiceHelper.load("nckd_impairment","nckd_dubil_id,nckd_cust_id,nckd_ecl_ratio", new QFilter[]{filter}); jz = new ArrayList<>(Arrays.asList(jzdynamicObjects)); 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("请至少选择一条数据"); } } } }