Explorar o código

新增应收销账单二开插件

sbtjtserver/zhaoxh hai 8 meses
pai
achega
715cd7f73b

+ 3039 - 0
src/main/java/fi/cas/formplugin/RecBillEditPlugin.java

@@ -0,0 +1,3039 @@
+package fi.cas.formplugin;
+
+import com.alibaba.fastjson.JSON;
+import kd.bos.bill.BillShowParameter;
+import kd.bos.bill.OperationStatus;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.OperateOption;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.dataentity.entity.LocaleString;
+import kd.bos.dataentity.resource.ResManager;
+import kd.bos.dataentity.serialization.SerializationUtils;
+import kd.bos.dataentity.utils.ObjectUtils;
+import kd.bos.dataentity.utils.StringUtils;
+import kd.bos.entity.AppMetadataCache;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.ValueMapItem;
+import kd.bos.entity.datamodel.*;
+import kd.bos.entity.datamodel.events.*;
+import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.entity.param.AppParam;
+import kd.bos.entity.property.ComboProp;
+import kd.bos.entity.property.EntryProp;
+import kd.bos.exception.KDBizException;
+import kd.bos.extplugin.PluginProxy;
+import kd.bos.form.*;
+import kd.bos.form.control.Control;
+import kd.bos.form.control.EntryGrid;
+import kd.bos.form.control.Image;
+import kd.bos.form.control.Label;
+import kd.bos.form.control.events.*;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.events.ClosedCallBackEvent;
+import kd.bos.form.events.MessageBoxClosedEvent;
+import kd.bos.form.field.BasedataEdit;
+import kd.bos.form.field.ComboEdit;
+import kd.bos.form.field.ComboItem;
+import kd.bos.form.field.FieldEdit;
+import kd.bos.form.operate.AbstractOperate;
+import kd.bos.form.operate.FormOperate;
+import kd.bos.list.ListFilterParameter;
+import kd.bos.list.ListShowParameter;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.mvc.bill.BillModel;
+import kd.bos.orm.query.QFilter;
+import kd.bos.orm.util.CollectionUtils;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.basedata.BaseDataServiceHelper;
+import kd.bos.servicehelper.parameter.SystemParamServiceHelper;
+import kd.fi.cas.business.errorcode.ReceivErrorCode;
+import kd.fi.cas.business.helper.PayBillHepler;
+import kd.fi.cas.business.helper.RecDraftHelper;
+import kd.fi.cas.business.helper.VisibleVirtualAcctHelper;
+import kd.fi.cas.business.paywarning.RecWarningHelper;
+import kd.fi.cas.enums.*;
+import kd.fi.cas.formplugin.ReceivingBillEdit;
+import kd.fi.cas.formplugin.common.CasBillEdit;
+import kd.fi.cas.helper.*;
+import kd.fi.cas.util.DateUtils;
+import kd.fi.cas.util.EmptyUtil;
+import kd.sdk.fi.cas.extpoint.recbill.IRecbillFilter;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class RecBillEditPlugin extends CasBillEdit implements ClickListener, EntryGridBindDataListener {
+    private static Log logger = LogFactory.getLog(ReceivingBillEdit.class);
+    private static final String CONFIRM_DEL_CALLBACK = "CONFIRM_DEL_CALLBACK";
+    private static final String CONFIRM_DELETE_CALLBACK = "CONFIRM_DELETE_CALLBACK";
+    private static final String KEY_CLOSECALLBACK_CHARGEBACK = "CALLBACK_SELECTDRAFT";
+    private static final String KEY_CLOSECALLBACK_CLEARRECEIVINGTYPECONFIRM = "clearReceivingTypeConfirm";
+    private static final String ENTRY = "entry";
+    private Set<String> settleTypes;
+
+    public RecBillEditPlugin() {
+        this.settleTypes = (Set) Stream.of(SettleMentTypeEnum.PROMISSORY.getValue(), SettleMentTypeEnum.CHECK.getValue(), SettleMentTypeEnum.DRAFT.getValue(), SettleMentTypeEnum.BUSINESS.getValue(), SettleMentTypeEnum.BANK.getValue()).collect(Collectors.toSet());
+    }
+
+    public void initialize() {
+        super.initialize();
+        Control entryentity = this.getView().getControl("entry");
+        EntryGrid entry = (EntryGrid)entryentity;
+        entry.addDataBindListener(this);
+    }
+
+    public void afterLoadData(EventObject e) {
+        super.afterLoadData(e);
+        String payertypeTypeID = this.getString("payertype");
+        if (payertypeTypeID.equals(AsstActTypeEnum.EMPLOYEE.getValue()) && CasHelper.isEmpty(this.getValue("f7_payerbank")) && CasHelper.isEmpty(this.getValue("payeracctbanknum"))) {
+            this.userF7Changed((PropertyChangedArgs)null, this.getValue("userf7"));
+        }
+
+        FormShowParameter param = this.getView().getFormShowParameter();
+        OperationStatus status = param.getStatus();
+        if (status.equals(OperationStatus.VIEW)) {
+            this.getModel().setDataChanged(false);
+        }
+
+    }
+
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        this.addClickListeners(new String[]{"changepayee", "addpayerlb2", "addpayerlb1", "changepayer", "e_corebillno", "settletnumber"});
+        this.fillRecType();
+        this.fillEntryRecType();
+        this.fillPayeeAcctBank();
+        this.fillCurrency();
+        this.fillSettleOrg();
+        this.fillFundFlow();
+        this.expenseItem();
+        Object vtual = this.getModel().getValue("isvirtual");
+        if (vtual != null) {
+            Boolean isvirtual = (Boolean)vtual;
+            if (isvirtual) {
+                this.setVirtualSettlementTypeFilter();
+            } else {
+                this.setSettlementTypeFilter();
+            }
+        }
+
+    }
+
+    private void fillEntryRecType() {
+        BasedataEdit receivabletypeF7 = (BasedataEdit)this.getControl("e_receivingtype");
+        receivabletypeF7.addBeforeF7SelectListener((beforeF7SelectEvent) -> {
+            ListShowParameter showParameter = (ListShowParameter)beforeF7SelectEvent.getFormShowParameter();
+            QFilter qFilter = new QFilter("enable", "=", "1");
+            qFilter.and(new QFilter("biztype", "!=", "110"));
+            showParameter.getListFilterParameter().setFilter(qFilter);
+        });
+    }
+
+    protected void expenseItem() {
+        BasedataEdit orgCtrl = (BasedataEdit)this.getControl("e_expenseitem");
+        orgCtrl.addBeforeF7SelectListener((beforeF7SelectEvent) -> {
+            ListShowParameter showParameter = (ListShowParameter)beforeF7SelectEvent.getFormShowParameter();
+            DynamicObject[] objects = BusinessDataServiceHelper.load("er_expenseitembill", "id,expenseitem", new QFilter[]{new QFilter("billtype.bill_number.number", "=", "nckd_cas_recbill_xz")});
+            if (!EmptyUtil.isEmpty(objects)) {
+                List<Object> ids = (List) Arrays.stream(objects).map((o) -> {
+                    return o.get("expenseitem.id");
+                }).collect(Collectors.toList());
+                QFilter qFilter = new QFilter("id", "in", ids);
+                showParameter.getListFilterParameter().getQFilters().add(qFilter);
+            }
+        });
+    }
+
+    private void fillFundFlow() {
+    }
+
+    protected String getControlBankAcctForSettleType() {
+        return "accountbank";
+    }
+
+    private void fillPayerType() {
+        boolean multireceivingtype = (Boolean)this.getModel().getValue("multireceivingtype");
+        DynamicObject receivingtype = (DynamicObject)this.getModel().getValue("receivingtype");
+        DynamicObject org = (DynamicObject)this.getModel().getValue("org");
+        boolean isSelectallpayertype = false;
+        if (EmptyUtil.isNoEmpty(org)) {
+            isSelectallpayertype = SystemParameterHelper.getParameterBoolean(org.getLong("id"), "selectallpayertype");
+        }
+
+        ComboEdit payertypeCbo = (ComboEdit)this.getView().getControl("payertype");
+        Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
+        String rectype = (String)customParams.get("recmentType");
+        if (rectype == null) {
+            Object type = this.getValue("biztype");
+            rectype = type != null ? type.toString() : "";
+        }
+
+        List<ComboItem> comboItem = new ArrayList();
+        if (rectype.equals(RecTypeEnum.OtherRec.toString())) {
+            comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.EMPLOYEE.getName()), AsstActTypeEnum.EMPLOYEE.getValue()));
+            comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.CUSTOMER.getName()), AsstActTypeEnum.CUSTOMER.getValue()));
+            comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.SUPPLIER.getName()), AsstActTypeEnum.SUPPLIER.getValue()));
+            if (multireceivingtype || EmptyUtil.isNoEmpty(receivingtype) && (!receivingtype.getBoolean("ispartreceivable") || receivingtype.getBoolean("ispartreceivable") && isSelectallpayertype)) {
+                comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.OTHER.getName()), AsstActTypeEnum.OTHER.getValue()));
+                comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.COMPANY.getName()), AsstActTypeEnum.COMPANY.getValue()));
+            }
+        } else {
+            comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.CUSTOMER.getName()), AsstActTypeEnum.CUSTOMER.getValue()));
+            comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.SUPPLIER.getName()), AsstActTypeEnum.SUPPLIER.getValue()));
+            comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.EMPLOYEE.getName()), AsstActTypeEnum.EMPLOYEE.getValue()));
+            if (multireceivingtype || EmptyUtil.isNoEmpty(receivingtype) && receivingtype.getBoolean("ispartreceivable") && isSelectallpayertype) {
+                comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.OTHER.getName()), AsstActTypeEnum.OTHER.getValue()));
+                comboItem.add(new ComboItem(new LocaleString(AsstActTypeEnum.COMPANY.getName()), AsstActTypeEnum.COMPANY.getValue()));
+            }
+        }
+
+        payertypeCbo.setComboItems(comboItem);
+        Object value = this.getModel().getValue("payertype");
+        boolean ishave = false;
+        Iterator var11 = comboItem.iterator();
+
+        while(var11.hasNext()) {
+            ComboItem combo = (ComboItem)var11.next();
+            if (value != null && combo.getValue().equals(value)) {
+                ishave = true;
+                break;
+            }
+        }
+
+        if (!ishave) {
+            this.getModel().setValue("payertype", (Object)null);
+        }
+
+    }
+
+    private void fillCurrency() {
+        BasedataEdit currencyF7 = (BasedataEdit)this.getControl("currency");
+        currencyF7.addBeforeF7SelectListener((beforeF7SelectEvent) -> {
+            ListShowParameter showParameter = (ListShowParameter)beforeF7SelectEvent.getFormShowParameter();
+            QFilter qFilter = new QFilter("enable", "=", "1");
+            DynamicObject settleType = this.getDynamicObject("settletype");
+            boolean isCash = BaseDataHelper.isSettleTypeCash(settleType);
+            Collection<Long> currencyPks = new ArrayList();
+            DynamicObject accountCash;
+            if (isCash) {
+                accountCash = this.getDynamicObject("accountcash");
+                if (accountCash != null) {
+                    currencyPks = AccountCashHelper.getCurrencys(Collections.singletonList((Long)accountCash.getPkValue()));
+                }
+            } else {
+                accountCash = this.getDynamicObject("accountbank");
+                if (accountCash != null) {
+                    currencyPks = AccountBankHelper.getCurrencyPks(accountCash.getLong("id"));
+                }
+            }
+
+            qFilter = qFilter.and(new QFilter("id", "in", currencyPks));
+            showParameter.getListFilterParameter().setFilter(qFilter);
+        });
+    }
+
+    private void fillSettleOrg() {
+        BasedataEdit settleorg = (BasedataEdit)this.getControl("e_settleorg");
+        settleorg.addBeforeF7SelectListener((select) -> {
+            ListShowParameter showParam = (ListShowParameter)select.getFormShowParameter();
+            showParam.setCustomParam("orgFuncId", "10");
+        });
+    }
+
+    public void propertyChanged(PropertyChangedArgs e) {
+        String key = e.getProperty().getName();
+        ChangeData[] changeData = e.getChangeSet();
+        Object newValue = changeData[0].getNewValue();
+        Object oldValue = changeData[0].getOldValue();
+        int iRow = changeData[0].getRowIndex();
+        if (newValue != oldValue) {
+            switch (key) {
+                case "isagent":
+                    this.setAgent((Boolean)newValue);
+                    break;
+                case "org":
+                    this.setOpenOrg();
+                    this.controlRecAmt();
+                    this.fillPayerType();
+                    this.resetExrateTableWhenSwitchOrg(newValue);
+                    break;
+                case "accountbank":
+                    this.payeeAcctBankF7Changed(e, newValue);
+                    break;
+                case "accountcash":
+                    this.accountCashChanged();
+                    break;
+                case "currency":
+                    this.currencyF7Changed();
+                    this.updateCoreBill(true, -1);
+                    break;
+                case "bizdate":
+                    this.exratedateChanged(newValue);
+                    this.currencyF7Changed();
+                    break;
+                case "exratetable":
+                    this.currencyF7Changed();
+                    break;
+                case "exratedate":
+                    this.currencyF7Changed();
+                    break;
+                case "payertype":
+                    this.payerTypeChanged(e, newValue, true);
+                    this.updateCoreBill(true, -1);
+                    break;
+                case "exchangerate":
+                case "quotation":
+                    this.calculateAmt();
+                    break;
+                case "userf7":
+                    this.userF7Changed(e, newValue);
+                    break;
+                case "billstatus":
+                    this.fillToolBar();
+                    break;
+                case "e_actamt":
+                case "e_receivableamt":
+                    this.calculateAmt();
+                    break;
+                case "e_discountamt":
+                    this.calculateAmt();
+                    break;
+                case "receivingtype":
+                    this.receivingTypeChanged(oldValue, newValue);
+                    this.setSettleOrg(false);
+                    this.setEcorebilltype();
+                    this.fillPayerType();
+                    this.setEntryExpenseitemEnable();
+                    break;
+                case "settletype":
+                    this.settleTypeChanged((DynamicObject)newValue);
+                    this.isClearSettleType((DynamicObject)oldValue, (DynamicObject)newValue);
+                    break;
+                case "fee":
+                    this.calculateAmt();
+                    break;
+                case "e_fee":
+                    this.calculateFee(iRow);
+                    break;
+                case "e_corebilltype":
+                    int index = this.getModel().getEntryCurrentRowIndex("entry");
+                    this.updateCoreBill(false, index);
+                    this.getModel().setValue("e_corebillno", (Object)null, index);
+                    this.getModel().setValue("e_corebillentryseq", (Object)null, index);
+                    this.getModel().setValue("conbillentity", (Object)null, index);
+                    this.getModel().setValue("conbillnumber", (Object)null, index);
+                    this.getModel().setValue("conbillrownum", (Object)null, index);
+                    break;
+                case "e_corebillno":
+                    if (EmptyUtil.isEmpty(e.getChangeSet()[0].getNewValue())) {
+                        int entryIndex = this.getModel().getEntryCurrentRowIndex("entry");
+                        this.updateCoreBill(false, entryIndex);
+                    }
+                    break;
+                case "multireceivingtype":
+                    this.dealMultiReceType(newValue);
+                    this.setEntryExpenseitemEnable();
+                    this.setEcorebilltype();
+                    break;
+                case "e_receivingtype":
+                    this.dealEntryReceType(newValue, iRow);
+                    break;
+                case "payeracctbank":
+                    this.fillInnerAccount(newValue);
+            }
+
+        }
+    }
+
+    private void fillInnerAccount(Object newValue) {
+        if (newValue != null) {
+            Long payeracctbankId = (Long)newValue;
+            DynamicObject accountbank = this.getModel().getDataEntity().getDynamicObject("accountbank");
+            DynamicObject receivingtype = this.getModel().getDataEntity().getDynamicObject("receivingtype");
+            if (receivingtype != null && accountbank != null) {
+                String biztype = receivingtype.getString("biztype");
+                if ("108".equals(biztype)) {
+                    QFilter qFilter = new QFilter("enable", "=", "1");
+                    qFilter.and("entryentity.e_account", "=", payeracctbankId);
+                    qFilter.and("entryentity.e_parentacct", "=", accountbank.getPkValue());
+                    DynamicObject linkPayRelation = BusinessDataServiceHelper.loadSingle("am_linkpayrelation", "entryentity,entryentity.e_internalacct,entryentity.e_parentacct,entryentity.e_account", new QFilter[]{qFilter});
+                    if (linkPayRelation != null) {
+                        DynamicObjectCollection entries = linkPayRelation.getDynamicObjectCollection("entryentity");
+                        Iterator var9 = entries.iterator();
+
+                        while(var9.hasNext()) {
+                            DynamicObject entrie = (DynamicObject)var9.next();
+                            DynamicObject e_account = entrie.getDynamicObject("e_account");
+                            DynamicObject e_parentacct = entrie.getDynamicObject("e_parentacct");
+                            if (e_account != null && e_parentacct != null && e_account.getPkValue().equals(payeracctbankId) && e_parentacct.getPkValue().equals(accountbank.getPkValue())) {
+                                DynamicObject e_internalacct = entrie.getDynamicObject("e_internalacct");
+                                if (e_internalacct != null) {
+                                    this.getModel().setValue("inneraccount", e_internalacct);
+                                }
+                            }
+                        }
+
+                    }
+                }
+            }
+        }
+    }
+
+    private void dealEntryReceType(Object newValue, int iRow) {
+        DynamicObject e_receivingtype = (DynamicObject)newValue;
+        if (!EmptyUtil.isEmpty(e_receivingtype)) {
+            DynamicObject fundflowitem = e_receivingtype.getDynamicObject("fundflowitem");
+            if (!EmptyUtil.isEmpty(fundflowitem)) {
+                this.setValue("e_fundflowitem", fundflowitem.getPkValue(), iRow);
+            }
+        }
+    }
+
+    private void setEntryExpenseitemEnable() {
+        String rectype = (String)this.getModel().getValue("biztype");
+        DynamicObject receivingtype = this.getDynamicObject("receivingtype");
+        boolean multireceivingtype = (Boolean)this.getModel().getValue("multireceivingtype");
+        if (multireceivingtype || rectype.equals(RecTypeEnum.OtherRec.toString()) && EmptyUtil.isNoEmpty(receivingtype) && !receivingtype.getBoolean("ispartreceivable")) {
+            this.getView().setVisible(true, new String[]{"e_material"});
+        }
+
+    }
+
+    private void dealMultiReceType(Object newValue) {
+        boolean ishave = false;
+        String rectype = (String)this.getModel().getValue("biztype");
+        DynamicObject receivingtype = this.getDynamicObject("receivingtype");
+        boolean multireceivingtype = (Boolean)newValue;
+        if (multireceivingtype) {
+            this.getView().setVisible(true, new String[]{"e_settleorg"});
+            QFilter qFilter = new QFilter("biztype", "=", "110");
+            qFilter.and("default", "=", '1');
+            qFilter.and("enable", "=", "1");
+            DynamicObject[] payMentBillTypes = BusinessDataServiceHelper.load("cas_receivingbilltype", "id,name,number,ispartpayment,biztype", qFilter.toArray());
+            if (EmptyUtil.isEmpty(payMentBillTypes)) {
+                this.getModel().setValue("receivingtype", (Object)null);
+            } else {
+                this.getModel().setValue("receivingtype", payMentBillTypes[0]);
+            }
+        } else {
+            int count = this.getModel().getEntryRowCount("entry");
+            if (count == 0) {
+                this.getModel().setValue("receivingtype", (Object)null);
+                return;
+            }
+
+            for(int i = 0; i < count; ++i) {
+                DynamicObject e_paymenttype = (DynamicObject)this.getModel().getValue("e_receivingtype", i);
+                if (EmptyUtil.isNoEmpty(e_paymenttype)) {
+                    ishave = true;
+                    break;
+                }
+            }
+
+            if (ishave) {
+                this.getView().showConfirm(ResManager.loadKDString("关闭多收款类型将自动清空收款明细收款类型,请确认是否继续?", "ReceivingBillEdit_35", "fi-cas-formplugin", new Object[0]), MessageBoxOptions.OKCancel, new ConfirmCallBackListener("clearReceivingTypeConfirm", this));
+            } else {
+                this.getModel().setValue("receivingtype", (Object)null);
+            }
+        }
+
+    }
+
+    private void isClearSettleType(DynamicObject oldValue, DynamicObject newValue) {
+        String settletnumber = (String)this.getModel().getValue("settletnumber");
+        if (EmptyUtil.isNoEmpty(settletnumber) && Objects.nonNull(oldValue) && SettleMentTypeEnum.CREDIT.getValue().equals(oldValue.getString("settlementtype")) && Objects.nonNull(newValue) && !SettleMentTypeEnum.CREDIT.getValue().equals(newValue.getString("settlementtype"))) {
+            this.getModel().setValue("settletnumber", (Object)null);
+            this.getModel().setValue("sourcebilltype", (Object)null);
+            this.getModel().setValue("sourcebillid", (Object)null);
+            this.getModel().deleteEntryData("billhead_lk");
+        }
+
+    }
+
+    private void updateCoreBill(boolean isClearAll, int entryIndex) {
+        DynamicObjectCollection entrys = this.getModel().getEntryEntity("entry");
+        if (EmptyUtil.isNoEmpty(entrys)) {
+            for(int i = 0; i < entrys.size(); ++i) {
+                if (isClearAll || entryIndex == i) {
+                    this.getModel().beginInit();
+                    this.getModel().setValue("e_corebillno", (Object)null, i);
+                    this.getModel().setValue("e_corebillentryseq", (Object)null, i);
+                    this.getModel().setValue("e_corebillid", (Object)null, i);
+                    this.getModel().setValue("e_sourcebillentryid", (Object)null, i);
+                    this.getModel().setValue("e_sourcebillid", (Object)null, i);
+                    this.getModel().setValue("conbillentity", (Object)null, i);
+                    this.getModel().setValue("conbillnumber", (Object)null, i);
+                    this.getModel().setValue("conbillrownum", (Object)null, i);
+                    this.getModel().setValue("conbillid", (Object)null, i);
+                    this.getModel().setValue("conbillentryid", (Object)null, i);
+                    this.getModel().endInit();
+                    this.getView().updateView("e_corebillno", i);
+                    this.getView().updateView("e_corebillentryseq", i);
+                    this.getView().updateView("e_corebillid", i);
+                    this.getView().updateView("e_sourcebillentryid", i);
+                    this.getView().updateView("e_sourcebillid", i);
+                    this.getView().updateView("conbillentity", i);
+                    this.getView().updateView("conbillnumber", i);
+                    this.getView().updateView("conbillrownum", i);
+                    this.getView().updateView("conbillid", i);
+                    this.getView().updateView("conbillentryid", i);
+                }
+            }
+        }
+
+    }
+
+    private boolean isOpenSelectCorebill(Object corebilltype) {
+        return !corebilltype.equals("ar_finarbill") && !corebilltype.equals("sm_salorder") && !corebilltype.equals("cas_paybill") && !corebilltype.equals("er_repaymentbill") && !corebilltype.equals("fr_glreim_recbill") && !corebilltype.equals("conm_salcontract");
+    }
+
+    private void getCorebilltypeToChange() {
+        int iRow = this.getModel().getEntryCurrentRowIndex("entry");
+        Object corebilltype = this.getModel().getValue("e_corebilltype", iRow);
+        if (corebilltype != null && !"".equals(corebilltype)) {
+            if (!this.isOpenSelectCorebill(corebilltype)) {
+                ListShowParameter lsp = null;
+                Object accountcurrency;
+                if (corebilltype.equals("er_repaymentbill")) {
+                    FormShowParameter para = new FormShowParameter();
+                    para.setFormId("cas_repaymentbill");
+                    para.setCustomParam("openSource", "nckd_cas_recbill_xz");
+                    Object payertype = this.getValue("payertype");
+                    if (EmptyUtil.isEmpty(payertype)) {
+                        this.getView().showTipNotification(ResManager.loadKDString("核心单据类型为还款单,请先指定付款人类型", "ReceivingBillEdit_22", "fi-cas-formplugin", new Object[0]));
+                    } else {
+                        para.setCustomParam("payertype", payertype);
+                        Object payername = null;
+                        if ("other".equals(payertype)) {
+                            payername = this.getValue("payername");
+                        } else {
+                            payername = this.getValue("payer");
+                        }
+
+                        if (CasHelper.isEmpty(payername)) {
+                            this.getView().showTipNotification(ResManager.loadKDString("核心单据类型为还款单,请先指定付款方", "ReceivingBillEdit_23", "fi-cas-formplugin", new Object[0]));
+                        } else {
+                            para.setCustomParam("payername", payername);
+                            accountcurrency = this.getValue("currency");
+                            if (EmptyUtil.isEmpty(accountcurrency)) {
+                                this.getView().showTipNotification(ResManager.loadKDString("核心单据类型为还款单,请先指定币种", "ReceivingBillEdit_24", "fi-cas-formplugin", new Object[0]));
+                            } else {
+                                para.setCustomParam("accountcurrency", ((DynamicObject)accountcurrency).getPkValue());
+                                para.getOpenStyle().setShowType(ShowType.Modal);
+                                para.setShowTitle(true);
+                                para.setStatus(OperationStatus.ADDNEW);
+                                StyleCss css = new StyleCss();
+                                css.setWidth("960");
+                                css.setHeight("580");
+                                para.getOpenStyle().setInlineStyleCss(css);
+                                para.getOpenStyle().setShowType(ShowType.Modal);
+                                para.setCloseCallBack(new CloseCallBack(this, "e_corebillno"));
+                                this.getView().showForm(para);
+                            }
+                        }
+                    }
+                } else {
+                    lsp = ShowFormHelper.createShowListForm(String.valueOf(corebilltype), true, 2);
+                    ListFilterParameter lfp = new ListFilterParameter();
+                    Object settleOrg3;
+                    switch (String.valueOf(corebilltype)) {
+                        case "ar_finarbill":
+                            accountcurrency = this.getModel().getValue("e_settleorg", iRow);
+                            if (accountcurrency == null) {
+                                this.getView().showTipNotification(ResManager.loadKDString("请先填写结算组织。", "ReceivingBillEdit_16", "fi-cas-formplugin", new Object[0]));
+                                return;
+                            }
+
+                            Object pkValue = ((DynamicObject)accountcurrency).getPkValue();
+                            lfp.setFilter(new QFilter("org", "=", pkValue));
+                            lfp.setFilter(new QFilter("billstatus", "=", BillStatusEnum.AUDIT.getValue()));
+                            lfp.setFilter(new QFilter("settlestatus", "in", new String[]{"unsettle", "partsettle"}));
+                            break;
+                        case "sm_salorder":
+                            Object e_settleorg1 = this.getModel().getValue("e_settleorg", iRow);
+                            if (e_settleorg1 == null) {
+                                this.getView().showTipNotification(ResManager.loadKDString("请先填写结算组织。", "ReceivingBillEdit_16", "fi-cas-formplugin", new Object[0]));
+                                return;
+                            }
+
+                            Object pkValue1 = ((DynamicObject)e_settleorg1).getPkValue();
+                            lfp.setFilter(new QFilter("billentry.entrysettleorg", "=", pkValue1));
+                            Object payer = this.getModel().getValue("payer");
+                            lfp.setFilter(new QFilter("customer", "=", !ObjectUtils.isEmpty(payer) ? payer : 0L));
+                            lfp.setFilter(new QFilter("billstatus", "=", BillStatusEnum.AUDIT.getValue()));
+                            lfp.setFilter(new QFilter("changestatus", "<>", "B"));
+                            lfp.setFilter(QFilter.of(" receiptamount < totalallamount ", new Object[0]));
+                            break;
+                        case "conm_salcontract":
+                            Object e_settleorg2 = this.getModel().getValue("e_settleorg", iRow);
+                            if (e_settleorg2 == null) {
+                                this.getView().showTipNotification(ResManager.loadKDString("请先填写结算组织。", "ReceivingBillEdit_16", "fi-cas-formplugin", new Object[0]));
+                                return;
+                            }
+
+                            Object pkValue2 = ((DynamicObject)e_settleorg2).getPkValue();
+                            lfp.setFilter(new QFilter("billentry.entrysettleorg", "=", pkValue2));
+                            Object payer1 = this.getModel().getValue("payer");
+                            lfp.setFilter(new QFilter("customer", "=", !ObjectUtils.isEmpty(payer1) ? payer1 : 0L));
+                            lfp.setFilter(new QFilter("validstatus", "<>", "A"));
+                            lfp.setFilter(new QFilter("changestatus", "<>", "B"));
+                            lfp.setFilter(QFilter.of(" receiptallamount < totalallamount ", new Object[0]));
+                            break;
+                        case "cas_paybill":
+                            DynamicObject recType = this.getDynamicObject("e_receivingtype", iRow);
+                            boolean isAr = recType.getBoolean("ispartreceivable");
+                            DynamicObject payerAcctBank;
+                            if (isAr) {
+                                settleOrg3 = this.getModel().getValue("e_settleorg", iRow);
+                                if (settleOrg3 == null) {
+                                    this.getView().showTipNotification(ResManager.loadKDString("请先填写结算组织。", "ReceivingBillEdit_16", "fi-cas-formplugin", new Object[0]));
+                                    return;
+                                }
+
+                                payerAcctBank = (DynamicObject)this.getModel().getValue("currency");
+                                lfp.setQFilters(this.getRecTypePayBillFilter(payerAcctBank, (DynamicObject)settleOrg3));
+                            } else {
+                                lfp.setFilter(new QFilter("billstatus", "=", "D"));
+                                boolean isCash = BaseDataHelper.isSettleTypeCash((DynamicObject)this.getModel().getValue("settletype"));
+                                payerAcctBank = this.getDynamicObject("accountbank");
+                                DynamicObject accountCash = this.getDynamicObject("accountcash");
+                                QFilter payeracctbank = null;
+                                if (isCash && accountCash != null) {
+                                    payeracctbank = new QFilter("payeracctcash", "=", accountCash.getPkValue());
+                                }
+
+                                if (!isCash && payerAcctBank != null) {
+                                    payeracctbank = new QFilter("payeracctbank", "=", payerAcctBank.getPkValue());
+                                }
+
+                                if (EmptyUtil.isEmpty(payeracctbank)) {
+                                    payeracctbank = (new QFilter("payeracctcash", "=", (Object)null)).and(new QFilter("payeracctbank", "=", (Object)null));
+                                }
+
+                                lfp.setFilter(payeracctbank);
+                                String payerType = (String)this.getModel().getValue("payertype");
+                                if ("other".equals(payerType)) {
+                                    lfp.setFilter(new QFilter("payeename", "=", this.getModel().getValue("payername")));
+                                } else {
+                                    lfp.setFilter(new QFilter("payee", "=", this.getModel().getValue("payer")));
+                                }
+                            }
+                            break;
+                        case "fr_glreim_recbill":
+                            settleOrg3 = this.getModel().getValue("org", iRow);
+                            if (settleOrg3 == null) {
+                                this.getView().showTipNotification(ResManager.loadKDString("请先选择收款组织。", "ReceivingBillEdit_16_1", "fi-cas-formplugin", new Object[0]));
+                                return;
+                            }
+
+                            Object orgPkValue = ((DynamicObject)settleOrg3).getPkValue();
+                            lfp.setFilter(new QFilter("accountingorg", "=", orgPkValue));
+                            lfp.setFilter(new QFilter("billstatus", "=", "D"));
+                            lfp.setFilter(new QFilter("castorecamount", ">=", 0));
+                    }
+
+                    this.setIFilters(lfp, this.getModel().getDataEntity());
+                    if (ClaimCoreBillTypeEnum.SALCONTRACT.getValue().equals(corebilltype)) {
+                        lfp.setSelectEntity("payentry");
+                    } else if (ClaimCoreBillTypeEnum.SALORDER.getValue().equals(corebilltype)) {
+                        lfp.setSelectEntity("recplanentry");
+                    } else if (ClaimCoreBillTypeEnum.FINARBILL.getValue().equals(corebilltype)) {
+                        lfp.setSelectEntity("entry");
+                    }
+
+                    lsp.setCustomParam("ismergerows", Boolean.FALSE);
+                    lsp.setListFilterParameter(lfp);
+                    CloseCallBack closeCallBack = new CloseCallBack(this, "e_corebillno");
+                    lsp.setCloseCallBack(closeCallBack);
+                    this.getView().showForm(lsp);
+                }
+            }
+        } else {
+            this.getView().showTipNotification(ResManager.loadKDString("请先指定核心单据类型。", "ReceivingBillEdit_15", "fi-cas-formplugin", new Object[0]));
+        }
+    }
+
+    private List<QFilter> getRecTypePayBillFilter(DynamicObject currency, DynamicObject settleorg) {
+        List<QFilter> qFilters = new ArrayList();
+        qFilters.add(new QFilter("paymenttype.ispartpayment", "=", "1"));
+        qFilters.add(new QFilter("dpcurrency", "=", currency.getPkValue()));
+        qFilters.add(new QFilter("billstatus", "=", "D"));
+        qFilters.add(new QFilter("entry.settleorg", "=", settleorg.getPkValue()));
+        return qFilters;
+    }
+
+    private void settleNumberClick() {
+        DynamicObject settleType = (DynamicObject)this.getModel().getValue("settletype");
+        if (EmptyUtil.isNoEmpty(settleType) && SettleMentTypeEnum.CREDIT.getValue().equals(settleType.getString("settlementtype"))) {
+            String appId = AppMetadataCache.getAppInfo("lc").getId();
+            DynamicObject org = (DynamicObject)this.getModel().getValue("org");
+            AppParam param = new AppParam();
+            param.setAppId(appId);
+            param.setOrgId(org.getLong("id"));
+            param.setViewType("08");
+            String recmethod = (String) SystemParamServiceHelper.loadAppParameterFromCache(param, "recmethod");
+            if ("0".equals(recmethod)) {
+                CloseCallBack closeCallBack = new CloseCallBack(this, "settletnumber");
+                QFilter qFilterSour = new QFilter("arrivalstatus", "=", "present_confirm");
+                qFilterSour.and("arrivalway", "!=", "protest");
+                qFilterSour.and(QFilter.sqlExpress("arrivalamount", ">", "flockamount"));
+                CasBotpHelper.doBeforeDraw(this.getView(), "lc_present", this.getModel().getDataEntityType().getName(), false, qFilterSour, closeCallBack);
+            }
+        }
+
+    }
+
+    private void exratedateChanged(Object newValue) {
+        if (newValue != null) {
+            this.setValue("exratedate", newValue);
+        }
+    }
+
+    private void accountCashChanged() {
+        DynamicObject accountCash = this.getDynamicObject("accountcash");
+        if (accountCash == null) {
+            if (!this.isBotpCreate()) {
+                this.setValue("currency", this.getDynamicObject("basecurrency"));
+            }
+
+        } else {
+            DynamicObject currency = this.getDynamicObject("currency");
+            boolean containCurrency = AccountBankHelper.isAcctBankContainCurrency("cas_accountcash", accountCash.getPkValue(), currency);
+            if (!containCurrency) {
+                DynamicObject defaultCurrency = accountCash.getDynamicObject("defaultcurrency");
+                if (this.isBotpCreate()) {
+                    this.setValueIfAbsent("currency", defaultCurrency);
+                } else {
+                    this.setValue("currency", defaultCurrency);
+                }
+            }
+
+            this.setCurrencyEditable();
+            this.setValue("openorg", accountCash.getDynamicObject("openorg"));
+        }
+    }
+
+    private void settleTypeChanged(DynamicObject settleType) {
+        if (BaseDataHelper.isSettleTypeCash(settleType)) {
+            this.getModel().beginInit();
+            this.setValue("accountbank", (Object)null);
+            this.setValue("payeebank", (Object)null);
+            this.getModel().endInit();
+            this.setValue("accountcash", AccountCashHelper.getDefaultAccountcash(this.getPk("org"), "payee"));
+        } else {
+            this.setValue("accountcash", (Object)null);
+        }
+
+        if (BaseDataHelper.isSettleTypeMatch(settleType)) {
+            this.setValue("matchflag", AutoMatchFlagEnum.NONEED.getValue());
+        }
+
+        this.setPayeeInfo4Lb();
+    }
+
+    private void receivingTypeChanged(Object oldValue, Object newValue) {
+        DynamicObject newobject = (DynamicObject)newValue;
+        DynamicObject oldobject = (DynamicObject)oldValue;
+        if (newobject != null && oldobject != null && newobject.getBoolean("ispartreceivable") != oldobject.getBoolean("ispartreceivable")) {
+            this.addEntryCache();
+            this.getModel().deleteEntryData("entry");
+            this.getModel().createNewEntryRow("entry");
+            this.setValue("actrecamt", BigDecimal.ZERO);
+            this.setValue("localamt", BigDecimal.ZERO);
+            this.getEntryCache();
+            this.calculateAmt();
+        }
+
+        this.fillFundflowItem(true);
+        this.setEntryAmountCaption();
+        boolean multireceivingtype = this.getModel().getDataEntity().getBoolean("multireceivingtype");
+        if (!multireceivingtype) {
+            for(int i = 0; i < this.getModel().getEntryRowCount("entry"); ++i) {
+                this.setValue("e_receivingtype", newobject, i);
+            }
+        }
+
+    }
+
+    private void setEntryAmountCaption() {
+        DynamicObject recType = this.getDynamicObject("receivingtype");
+        if (recType != null) {
+            boolean isAr = recType.getBoolean("ispartreceivable");
+            if (isAr) {
+                EntryGrid entryCtr = (EntryGrid)this.getControl("entry");
+                entryCtr.setColumnProperty("e_receivableamt", "header", new LocaleString(ResManager.loadKDString("应收金额", "ReceivingBillEdit_0", "fi-cas-formplugin", new Object[0])));
+                entryCtr.setColumnProperty("e_receivablelocamt", "header", new LocaleString(ResManager.loadKDString("应收折本币", "ReceivingBillEdit_1", "fi-cas-formplugin", new Object[0])));
+            }
+
+        }
+    }
+
+    private void addEntryCache() {
+        DynamicObjectCollection entry = this.getModel().getEntryEntity("entry");
+        List<Map<String, Object>> list = new ArrayList();
+        Iterator var3 = entry.iterator();
+
+        while(var3.hasNext()) {
+            DynamicObject row = (DynamicObject)var3.next();
+            Map<String, Object> map = new HashMap();
+            map.put("e_expenseitem", row.get("e_expenseitem") == null ? null : ((DynamicObject)row.get("e_expenseitem")).getPkValue());
+            map.put("e_receivableamt", row.get("e_receivableamt"));
+            map.put("project", row.get("project") == null ? null : row.getDynamicObject("project").getPkValue());
+            map.put("e_fundflowitem", row.get("e_fundflowitem") == null ? null : row.getDynamicObject("e_fundflowitem").getPkValue());
+            map.put("e_remark", row.get("e_remark"));
+            map.put("e_receivingtype", row.get("e_receivingtype") == null ? null : row.getDynamicObject("e_receivingtype").getPkValue());
+            list.add(map);
+        }
+
+        Map<String, List<Map<String, Object>>> map = new HashMap();
+        map.put("entry", list);
+        String mapJson = SerializationUtils.toJsonString(map);
+        this.getPageCache().put("entry", mapJson);
+    }
+
+    private void getEntryCache() {
+        String str_json = this.getPageCache().get("entry");
+        if (str_json != null) {
+            this.getModel().deleteEntryRow("entry", 0);
+            TableValueSetter vs = new TableValueSetter(new String[0]);
+            vs.addField("e_expenseitem", new Object[0]).addField("e_receivableamt", new Object[0]).addField("project", new Object[0]).addField("e_fundflowitem", new Object[0]).addField("e_remark", new Object[0]).addField("e_receivingtype", new Object[0]);
+            Map<String, ArrayList<Map<String, String>>> maps = (Map)SerializationUtils.fromJsonString(str_json, Map.class);
+            ArrayList<Map<String, String>> list = (ArrayList)maps.get("entry");
+            Iterator var5 = list.iterator();
+
+            while(var5.hasNext()) {
+                Map<String, String> map = (Map)var5.next();
+                vs.addRow(new Object[]{map.get("e_expenseitem"), map.get("e_receivableamt"), map.get("project"), map.get("e_fundflowitem"), map.get("e_remark"), map.get("e_receivingtype")});
+            }
+
+            AbstractFormDataModel model = (AbstractFormDataModel)this.getModel();
+            model.batchCreateNewEntryRow("entry", vs);
+        }
+
+    }
+
+    private void setAgent(boolean newValue) {
+        if (!newValue) {
+            int count = this.getModel().getEntryRowCount("entry");
+
+            for(int i = 0; i < count; ++i) {
+                this.setValue("realreccompany", (Object)null, i);
+            }
+        }
+
+    }
+
+    private void userF7Changed(PropertyChangedArgs e, Object newValue) {
+        DynamicObject user = (DynamicObject)newValue;
+        if (user != null) {
+            DynamicObject erPayeeInfo = this.getErPayeeInfo(user.getLong("id"), user.get("name").toString());
+            if (erPayeeInfo != null) {
+                this.setValue("f7_payerbank", erPayeeInfo.getDynamicObject("payerbank"));
+                this.setValue("payeracctbanknum", erPayeeInfo.getString("payeraccount"));
+                this.setValue("payeraccformid", "er_payeer");
+                this.setValue("payeracctbank", erPayeeInfo.getLong("id"));
+            } else {
+                this.setValue("payeracctbanknum", (Object)null);
+                this.setValue("f7_payerbank", (Object)null);
+                this.setValue("payeraccformid", (Object)null);
+                this.setValue("payeracctbank", (Object)null);
+            }
+        } else {
+            this.setValue("payeracctbanknum", (Object)null);
+            this.setValue("f7_payerbank", (Object)null);
+            this.setValue("payeraccformid", (Object)null);
+            this.setValue("payeracctbank", (Object)null);
+        }
+
+    }
+
+    public void click(EventObject evt) {
+        super.click(evt);
+        Control c = (Control)evt.getSource();
+        switch (c.getKey().toLowerCase()) {
+            case "changepayee":
+                this.changePayeePage();
+                break;
+            case "addpayerlb1":
+            case "addpayerlb2":
+                this.addPayer(OperationStatus.ADDNEW);
+                break;
+            case "changepayer":
+                this.addPayer(OperationStatus.EDIT);
+                break;
+            case "e_corebillno":
+                this.getCorebilltypeToChange();
+                break;
+            case "settletnumber":
+                this.settleNumberClick();
+        }
+
+    }
+
+    private void addPayer(OperationStatus status) {
+        Map<String, Object> paramMap = new HashMap();
+        if (this.isHwControl()) {
+            paramMap.put("hw_payeesiteid", this.getValue("hw_payeesiteid"));
+        }
+
+        paramMap.put("org", this.getDynamicObject("org"));
+        paramMap.put("asstActType", this.getString("payertype"));
+        FormShowParameter parameter = new FormShowParameter();
+        parameter.getOpenStyle().setShowType(ShowType.Modal);
+        parameter.setFormId("cas_recaddpayer");
+        parameter.setStatus(status);
+        parameter.getCustomParams().putAll(paramMap);
+        parameter.setCloseCallBack(new CloseCallBack(this, "addpayer"));
+        this.getView().showForm(parameter);
+    }
+
+    private void changePayeePage() {
+        DynamicObject settleType = this.getDynamicObject("settletype");
+        Map<String, Object> payerInfo = new HashMap();
+        payerInfo.put("virtual", BaseDataHelper.isSettleTypeVirtual(settleType));
+        payerInfo.put("ReceivingBill", true);
+        FormShowParameter parameter = new FormShowParameter();
+        parameter.getOpenStyle().setShowType(ShowType.Modal);
+        parameter.setFormId("cas_changepayee");
+        parameter.getCustomParams().putAll(payerInfo);
+        parameter.setCloseCallBack(new CloseCallBack(this, "changepayee"));
+        this.getView().showForm(parameter);
+    }
+
+    public void closedCallBack(ClosedCallBackEvent e) {
+        super.closedCallBack(e);
+        Map resultMap;
+        if ("changepayee".equals(e.getActionId())) {
+            resultMap = (Map)e.getReturnData();
+            if (resultMap != null) {
+                this.changePayeeValue(resultMap);
+            }
+        }
+
+        if ("addpayer".equals(e.getActionId())) {
+            resultMap = (Map)e.getReturnData();
+            if (resultMap != null) {
+                this.addPayerValue(resultMap);
+            }
+        }
+
+        if ("beforeSubmit".equals(e.getActionId()) && e != null && e.getReturnData() != null) {
+            boolean confirm = (Boolean)e.getReturnData();
+            if (confirm) {
+                this.getView().invokeOperation("submit");
+            }
+        }
+
+        if ("beforesubmitnew".equals(e.getActionId())) {
+            String confirm = (String)e.getReturnData();
+            if (confirm != null && confirm.equals("ok")) {
+                this.getView().invokeOperation("submitandnew");
+            }
+        }
+
+        if ("e_corebillno".equals(e.getActionId())) {
+            Object returnData = e.getReturnData();
+            if (!CasHelper.isEmpty(returnData)) {
+                IDataModel model = this.getModel();
+                int currentRowIndex = model.getEntryCurrentRowIndex("entry");
+                String coreBillType = (String)model.getValue("e_corebilltype", currentRowIndex);
+                if (this.isOpenSelectCorebill(coreBillType)) {
+                    return;
+                }
+
+                ListSelectedRowCollection coreBillCollection = (ListSelectedRowCollection)returnData;
+                int entryRowCount = model.getEntryRowCount("entry");
+                int followingRowCount = entryRowCount - currentRowIndex - 1;
+                if (coreBillCollection.size() - 1 > followingRowCount) {
+                    model.appendEntryRow("entry", entryRowCount - 1, coreBillCollection.size() - 1 - followingRowCount);
+                }
+
+                DynamicObject settleorg = (DynamicObject)model.getValue("e_settleorg", currentRowIndex);
+                FormShowParameter formShowParameter = this.getView().getFormShowParameter();
+                formShowParameter.setCustomParam("isSelectCoreBillNo", "true");
+                Map<Integer, Long> actMap = new HashMap(coreBillCollection.size());
+
+                String entryEntityKey;
+                for(int i = 0; i < coreBillCollection.size(); ++i) {
+                    ListSelectedRow listSelectedRow = coreBillCollection.get(i);
+                    model.setValue("e_settleorg", settleorg, currentRowIndex + i);
+                    this.getModel().beginInit();
+                    model.setValue("e_corebilltype", coreBillType, currentRowIndex + i);
+                    this.getModel().endInit();
+                    this.getView().updateView("e_corebilltype", currentRowIndex + i);
+                    model.setValue("e_corebillno", listSelectedRow.getBillNo(), currentRowIndex + i);
+                    if (StringUtils.equals(coreBillType, ClaimCoreBillTypeEnum.REPAYMENTBILL.getValue())) {
+                        model.setValue("e_sourcebillid", listSelectedRow.getPrimaryKeyValue(), currentRowIndex + i);
+                        model.setValue("e_sourcebillentryid", listSelectedRow.getEntryPrimaryKeyValue(), currentRowIndex + i);
+                        model.setValue("e_corebillid", listSelectedRow.getEntryPrimaryKeyValue(), currentRowIndex + i);
+                        actMap.put(currentRowIndex + i, (Long)listSelectedRow.getEntryPrimaryKeyValue());
+                    }
+
+                    entryEntityKey = listSelectedRow.getEntryEntityKey();
+                    Object entryPKValue = listSelectedRow.getEntryPrimaryKeyValue();
+                    if (!kd.fi.cas.util.StringUtils.isEmpty(entryEntityKey) && !ObjectUtils.isEmpty(entryPKValue)) {
+                        QFilter[] filters = new QFilter[]{new QFilter(entryEntityKey + ".id", "=", entryPKValue)};
+                        DynamicObject coreBill = QueryServiceHelper.queryOne(coreBillType, entryEntityKey + ".seq", filters);
+                        if (coreBill != null) {
+                            model.setValue("e_corebillentryseq", coreBill.getString(entryEntityKey + ".seq"), currentRowIndex + i);
+                            model.setValue("e_corebillentryid", entryPKValue, currentRowIndex + i);
+                        }
+                    } else {
+                        model.setValue("e_corebillentryseq", (Object)null, currentRowIndex + i);
+                        model.setValue("e_corebillentryid", (Object)null, currentRowIndex + i);
+                    }
+
+                    this.getModel().beginInit();
+                    if (ClaimCoreBillTypeEnum.SALORDER.getValue().equals(coreBillType) || ClaimCoreBillTypeEnum.SALCONTRACT.getValue().equals(coreBillType)) {
+                        boolean isSalOrder = ClaimCoreBillTypeEnum.SALORDER.getValue().equals(coreBillType);
+                        boolean isSelectEntry = !kd.fi.cas.util.StringUtils.isEmpty(entryEntityKey) && !ObjectUtils.isEmpty(entryPKValue);
+                        boolean isMaterialEntry = !kd.fi.cas.util.StringUtils.isEmpty(entryEntityKey) && "billentry".equals(entryEntityKey);
+                        List conGroupFields;
+                        DynamicObject queryInfo;
+                        if (isSelectEntry && isMaterialEntry) {
+                            conGroupFields = isSalOrder ? Arrays.asList(entryEntityKey + ".conbillnumber", entryEntityKey + ".conbillrownum", entryEntityKey + ".conbillid", entryEntityKey + ".conbillentryid") : Arrays.asList("id", "billno", entryEntityKey + ".lineno", entryEntityKey + ".id");
+                            QFilter[] filters = new QFilter[]{new QFilter(entryEntityKey + ".id", "=", entryPKValue)};
+                            queryInfo = QueryServiceHelper.queryOne(coreBillType, String.join(",", conGroupFields), filters);
+                            if (queryInfo != null) {
+                                model.setValue("conbillentity", "conm_salcontract", currentRowIndex + i);
+                                model.setValue("conbillnumber", isSalOrder ? queryInfo.getString(entryEntityKey + ".conbillnumber") : queryInfo.getString("billno"), currentRowIndex + i);
+                                model.setValue("conbillrownum", isSalOrder ? queryInfo.getString(entryEntityKey + ".conbillrownum") : queryInfo.getString(entryEntityKey + ".lineno"), currentRowIndex + i);
+                            }
+                        } else {
+                            if (isSalOrder) {
+                                conGroupFields = Arrays.asList("billentry.conbillnumber", "billentry.conbillrownum", "billentry.conbillid", "billentry.conbillentryid");
+                                QFilter filter = new QFilter("id", "=", listSelectedRow.getPrimaryKeyValue());
+                                queryInfo = QueryServiceHelper.queryOne(coreBillType, String.join(",", conGroupFields), new QFilter[]{filter});
+                                if (queryInfo != null) {
+                                    model.setValue("conbillnumber", queryInfo.getString("billentry.conbillnumber"), currentRowIndex + i);
+                                }
+                            }
+
+                            model.setValue("conbillentity", "conm_salcontract", currentRowIndex + i);
+                            model.setValue("conbillrownum", "", currentRowIndex + i);
+                        }
+                    }
+
+                    this.getModel().endInit();
+                    this.getView().updateView("conbillentity", currentRowIndex + i);
+                    this.getView().updateView("conbillnumber", currentRowIndex + i);
+                    this.getView().updateView("conbillrownum", currentRowIndex + i);
+                }
+
+                QFilter qFilter;
+                Map actpayamt;
+                if (StringUtils.equals(coreBillType, ClaimCoreBillTypeEnum.PAYBILL.getValue())) {
+                    qFilter = new QFilter("id", "in", actMap.keySet());
+                    actpayamt = (Map)QueryServiceHelper.query("cas_paybill", "id , actpayamt", new QFilter[]{qFilter}).stream().collect(Collectors.toMap((dy) -> {
+                        return dy.getLong("id");
+                    }, (dy) -> {
+                        return dy.getBigDecimal("actpayamt");
+                    }));
+                    Iterator var32 = actMap.entrySet().iterator();
+
+                    while(var32.hasNext()) {
+                        Map.Entry<Integer, Long> act = (Map.Entry)var32.next();
+                        this.getModel().setValue("e_receivableamt", actpayamt.get(act.getValue()), (Integer)act.getKey());
+                    }
+                } else if (StringUtils.equals(coreBillType, ClaimCoreBillTypeEnum.REPAYMENTBILL.getValue())) {
+                    qFilter = new QFilter("er_repaymentbill.repaymententry.id", "in", actMap.values());
+                    actpayamt = (Map)QueryServiceHelper.query("er_repaymentbill", "er_repaymentbill.repaymententry.id id, er_repaymentbill.repaymententry.orirepayamount orirepayamount, er_repaymentbill.repaymententry.orirecamount orirecamount,er_repaymentbill.repaymententry.remarks remarks,er_repaymentbill.repaymententry.sourceexpenseitem.id expenseitem", new QFilter[]{qFilter}).stream().collect(Collectors.toMap((dy) -> {
+                        return dy.getLong("id");
+                    }, (dy) -> {
+                        return dy;
+                    }, (m1, m2) -> {
+                        return m1;
+                    }));
+                    entryEntityKey = null;
+                    Iterator var33 = actMap.entrySet().iterator();
+
+                    while(var33.hasNext()) {
+                        Map.Entry<Integer, Long> act = (Map.Entry)var33.next();
+                        DynamicObject repayDy = (DynamicObject)actpayamt.get(act.getValue());
+                        if (EmptyUtil.isNoEmpty(repayDy)) {
+                            this.getModel().setValue("e_receivableamt", repayDy.getBigDecimal("orirepayamount").subtract(repayDy.getBigDecimal("orirecamount")), (Integer)act.getKey());
+                            this.getModel().setValue("e_actamt", repayDy.getBigDecimal("orirepayamount").subtract(repayDy.getBigDecimal("orirecamount")), (Integer)act.getKey());
+                            this.getModel().setValue("e_remark", repayDy.get("remarks"), (Integer)act.getKey());
+                            this.getModel().setValue("e_expenseitem", repayDy.get("expenseitem"), (Integer)act.getKey());
+                        } else {
+                            this.getModel().setValue("e_receivableamt", (Object)null, (Integer)act.getKey());
+                            this.getModel().setValue("e_actamt", (Object)null, (Integer)act.getKey());
+                            this.getModel().setValue("e_remark", (Object)null, (Integer)act.getKey());
+                            this.getModel().setValue("e_expenseitem", (Object)null, (Integer)act.getKey());
+                        }
+                    }
+                }
+
+                formShowParameter.setCustomParam("isSelectCoreBillNo", "false");
+            }
+        }
+
+        if (StringUtils.equals(e.getActionId(), "CALLBACK_SELECTDRAFT")) {
+            Map<String, Object> returnData = (HashMap)e.getReturnData();
+            Object draftIdList = null;
+            if (!EmptyUtil.isEmpty(returnData)) {
+                draftIdList = returnData.get("draftBillIdList");
+            }
+
+            if (draftIdList != null) {
+                this.displayDraftInfo(draftIdList);
+                OperateOption option = OperateOption.create();
+                option.setVariableValue("draftids", JSON.toJSONString(draftIdList));
+                option.setVariableValue("selectdraft", "true");
+                this.getView().invokeOperation("receivingrec", option);
+            }
+        }
+
+        if ("settletnumber".equals(e.getActionId())) {
+            ListSelectedRowCollection rows = (ListSelectedRowCollection)e.getReturnData();
+            if (EmptyUtil.isNoEmpty(rows)) {
+                this.getModel().deleteEntryData("entry");
+                this.getModel().deleteEntryData("detailinfo_entry");
+                this.getModel().deleteEntryData("infoentry");
+                CasBotpHelper.doDraw(this.getView(), "lc_present", this.getModel().getDataEntityType().getName(), rows);
+            }
+        }
+
+    }
+
+    private void displayDraftInfo(Object draftIdList) {
+        if (!EmptyUtil.isEmpty(draftIdList)) {
+            List<Object> draftIds = (List)draftIdList;
+            DynamicObjectCollection draftBills = QueryServiceHelper.query("cdm_draftbillf7", "id,rptype,currency", new QFilter[]{new QFilter("id", "in", draftIds)});
+            Map<Long, BigDecimal> recNewAvailamountMap = DraftHelper.getNewestAvailamountMap(draftBills, "draft");
+            AbstractFormDataModel model = (AbstractFormDataModel)this.getModel();
+            model.beginInit();
+            TableValueSetter vs = new TableValueSetter(new String[0]);
+            vs.addField("draftbillinfo", new Object[0]);
+            vs.addField("recbillcurrency", new Object[0]);
+            vs.addField("transamount", new Object[0]);
+            vs.addField("draftbilllogid", new Object[0]);
+            vs.addField("srcbilltype", new Object[0]);
+            vs.addField("srcbillindex", new Object[0]);
+            Iterator var7 = draftBills.iterator();
+
+            while(var7.hasNext()) {
+                DynamicObject draftBill = (DynamicObject)var7.next();
+                long draftId = draftBill.getLong("id");
+                vs.addRow(new Object[]{draftId, draftBill.getLong("currency"), recNewAvailamountMap.get(draftId), 0, "nckd_cas_recbill_xz", 1});
+            }
+
+            model.batchCreateNewEntryRow("cas_draftinfo", vs);
+            model.endInit();
+            this.getView().updateView("cas_draftinfo");
+        }
+    }
+
+    private void addPayerValue(Map<String, Object> resultMap) {
+        this.setValue("payerformid", resultMap.get("payerformid"));
+        this.setValue("payer", resultMap.get("payer"));
+        this.setValue("payername", resultMap.get("payername"));
+        this.setValue("payernumber", resultMap.get("payernumber"));
+        if (this.isHwControl()) {
+            this.setValue("hw_payeesiteid", resultMap.get("hw_payeesiteid"));
+            this.setValue("scorg", resultMap.get("scorg"));
+        }
+
+        this.setValue("payeraccformid", resultMap.get("payeraccformid"));
+        this.setValue("payeracctbank", resultMap.get("payeracctbank"));
+        this.setValue("payeracctbanknum", resultMap.get("payeracctbanknum"));
+        this.setValue("f7_payerbank", resultMap.get("payerbank"));
+        this.setValue("payerbankname", resultMap.get("payerbankname"));
+        this.setPayerInfo4Lb();
+        this.getValue("f7_payerbank");
+    }
+
+    private void setPayerInfo4Lb() {
+        IBillModel model = (IBillModel)this.getModel();
+        String payername = this.getString("payername");
+        Image payeePic = (Image)this.getControl("payeepic");
+        long payeeId = 0L;
+        if (model.getValue("payer") != null) {
+            payeeId = Long.parseLong(model.getValue("payer").toString());
+        }
+
+        String payertype = this.getString("payertype");
+        String defaultUrl = BaseDataHelper.getPictureUrl(payeeId, payertype);
+        defaultUrl = defaultUrl == null ? "/icons/pc/entrance/cn_fk_80_80.png" : defaultUrl;
+        if (!CasHelper.isEmpty(payeeId)) {
+            DynamicObject obj = null;
+            if (!payertype.equals("bd_supplier") && !payertype.equals("bd_customer")) {
+                if (payertype.equals("bos_user")) {
+                    obj = BusinessDataServiceHelper.loadSingleFromCache(payeeId, payertype, "name");
+                }
+            } else {
+                obj = BusinessDataServiceHelper.loadSingleFromCache(payeeId, payertype, "name");
+            }
+
+            if (obj != null) {
+                payername = CasHelper.getLocalValue(obj, "name");
+            }
+        }
+
+        this.setValue("payername", payername);
+        this.setValue("payeenamev", payername);
+        payeePic.setUrl(defaultUrl);
+        ((Label)this.getControl("payerbanknumv")).setText(kd.fi.cas.util.StringUtils.splitString((String)model.getValue("payeracctbanknum"), 4, " "));
+        ((Label)this.getControl("payerbanknamev")).setText(this.getString("payerbankname"));
+        boolean hasPayerInfo = this.hasPayerInfo();
+        this.getView().setVisible(!hasPayerInfo, new String[]{"flex_addpayee"});
+        this.getView().setVisible(hasPayerInfo, new String[]{"flex_payeeinfo"});
+    }
+
+    private void changePayeeValue(Map<String, Object> returnMap) {
+        DynamicObject new_org = (DynamicObject)returnMap.get("org");
+        DynamicObject old_org = this.getDynamicObject("org");
+        DynamicObject new_acctbank;
+        if (!CasHelper.isEquals(new_org, old_org)) {
+            this.setValue("org", new_org);
+            new_acctbank = OrgHelper.getBaseCurrency((Long)new_org.getPkValue());
+            this.setValue("basecurrency", new_acctbank);
+            this.setSettleOrg(false);
+        }
+
+        new_acctbank = (DynamicObject)returnMap.get("accountbank");
+        DynamicObject old_acctbank = this.getDynamicObject("accountbank");
+        if (!CasHelper.isEquals(new_acctbank, old_acctbank)) {
+            this.setValue("accountbank", new_acctbank);
+        }
+
+        DynamicObject new_acctcash = (DynamicObject)returnMap.get("accountcash");
+        DynamicObject old_acctcash = this.getDynamicObject("accountcash");
+        if (!CasHelper.isEquals(new_acctcash, old_acctcash)) {
+            this.setValue("accountcash", new_acctcash);
+        }
+
+        DynamicObject new_bank = (DynamicObject)returnMap.get("payeebank");
+        DynamicObject old_bank = this.getDynamicObject("payeebank");
+        if (!CasHelper.isEquals(old_bank, new_bank)) {
+            this.setValue("payeebank", new_bank);
+        }
+
+        DynamicObject newOpenOrg = (DynamicObject)returnMap.get("openorg");
+        DynamicObject oldOpenOrg = this.getDynamicObject("openorg");
+        if (!CasHelper.isEquals(oldOpenOrg, newOpenOrg)) {
+            this.setValue("openorg", newOpenOrg);
+
+            for(int i = 0; i < this.getModel().getEntryRowCount("entry"); ++i) {
+                this.setValue("e_settleorg", newOpenOrg.getPkValue(), i);
+            }
+        }
+
+        this.setPayeeInfo4Lb();
+    }
+
+    private DynamicObject getErPayeeInfo(long userId, String name) {
+        QFilter uFilter = new QFilter("payer", "=", userId);
+        uFilter = uFilter.and(new QFilter("status", "=", 'C'));
+        QFilter eFilter = new QFilter("enable", "=", "1");
+        QFilter[] qFilters = new QFilter[]{uFilter, eFilter};
+        String selectFields = "id,name,payer,payeraccount,payeraccount01,payeraccount02,payerbank_id,payerbank.name,payerbank.number";
+        String orderBys = "isdefault desc";
+        DynamicObjectCollection defaultAccounts = QueryServiceHelper.query("er_payeer", selectFields, qFilters, orderBys, 1);
+        DynamicObject dynamicObject = null;
+        if (defaultAccounts != null && defaultAccounts.size() > 0) {
+            dynamicObject = (DynamicObject)defaultAccounts.get(0);
+        }
+
+        return dynamicObject;
+    }
+
+    private void payeeF7Changed(PropertyChangedArgs e, Object newValue) {
+        DynamicObject org = (DynamicObject)newValue;
+        if (org != null) {
+            Long orgId = (Long)org.getPkValue();
+            DynamicObject defaultRecAccount = AccountBankHelper.getDefaultRecAccount(orgId);
+            if (defaultRecAccount != null && (BaseDataHelper.isSettleTypeVirtual(this.getDynamicObject("settletype")) && VisibleVirtualAcctHelper.checkVirtualAcct(defaultRecAccount) || !BaseDataHelper.isSettleTypeVirtual(this.getDynamicObject("settletype")) && !VisibleVirtualAcctHelper.checkVirtualAcct(defaultRecAccount))) {
+                this.setValue("accountbank", defaultRecAccount);
+            }
+
+            DynamicObject baseCurrency = OrgHelper.getBaseCurrency(orgId);
+            this.setValue("basecurrency", baseCurrency);
+        }
+    }
+
+    private void payerTypeChanged(PropertyChangedArgs e, Object newValue, boolean isChanged) {
+        this.getView().setVisible(true, new String[]{"flex_addpayee"});
+        this.getView().setVisible(false, new String[]{"flex_payeeinfo"});
+        Object value = null;
+        this.setValue("payerformid", value);
+        this.setValue("payer", value);
+        this.setValue("payername", value);
+        this.setValue("payeraccformid", value);
+        this.setValue("payeracctbank", value);
+        this.setValue("payeracctbanknum", value);
+        this.setValue("f7_payerbank", value);
+        this.setValue("payerbankname", value);
+    }
+
+    private void currencyF7Changed() {
+        this.setExchangerateEditable();
+    }
+
+    private void calculateAmtByActamt() {
+        BigDecimal exchangeRate = this.getBigDecimal("exchangerate");
+        String quotation = this.getString("quotation");
+        if (null == quotation) {
+            quotation = this.quoteType();
+        }
+
+        BigDecimal fee = this.getBigDecimal("fee");
+        if (exchangeRate == null) {
+            exchangeRate = BigDecimal.ONE;
+        }
+
+        if (fee == null) {
+            fee = BigDecimal.ZERO;
+        }
+
+        DynamicObject currency = this.getDynamicObject("currency");
+        if (currency != null) {
+            DynamicObject basecurrency = this.getDynamicObject("basecurrency");
+            int round = 10;
+            if (basecurrency != null) {
+                round = basecurrency.getInt("amtprecision");
+            }
+
+            int count = this.getModel().getEntryRowCount("entry");
+            BigDecimal sumAmt = BigDecimal.ZERO;
+            BigDecimal sumFee = BigDecimal.ZERO;
+            BigDecimal amount = BigDecimal.ZERO;
+            BigDecimal sumLocalAmt = BigDecimal.ZERO;
+
+            for(int i = 0; i < count; ++i) {
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                BigDecimal actAndDisc = rowInfo.getBigDecimal("e_actamt").add(rowInfo.getBigDecimal("e_discountamt"));
+                amount = amount.add(actAndDisc);
+            }
+
+            BigDecimal countFee = BigDecimal.ZERO;
+
+            for(int i = 0; i < count; ++i) {
+                this.getModel().beginInit();
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                BigDecimal actAmount = rowInfo.getBigDecimal("e_actamt");
+                BigDecimal discountAmt;
+                if (actAmount != null) {
+                    discountAmt = QuotationHelper.callToCurrency(actAmount, exchangeRate, quotation, round);
+                    this.setValue("e_localamt", discountAmt, i);
+                    sumLocalAmt = sumLocalAmt.add(discountAmt);
+                }
+
+                discountAmt = rowInfo.getBigDecimal("e_discountamt");
+                if (discountAmt != null) {
+                    this.setValue("e_discountlocamt", QuotationHelper.callToCurrency(discountAmt, exchangeRate, quotation, round), i);
+                }
+
+                this.setValue("e_unsettledamt", actAmount, i);
+                this.setValue("e_unlockamt", actAmount, i);
+                if (actAmount != null) {
+                    BigDecimal actAmtAndDisc = actAmount.add(discountAmt);
+                    this.setValue("e_fee", BigDecimal.ZERO, i);
+                    if (amount.compareTo(BigDecimal.ZERO) != 0) {
+                        BigDecimal efee = actAmtAndDisc.multiply(fee).divide(amount, currency.getInt("amtprecision"), RoundingMode.DOWN);
+                        if (this.getLastRow(i)) {
+                            efee = fee.subtract(countFee);
+                        }
+
+                        countFee = countFee.add(efee);
+                        this.setValue("e_fee", efee, i);
+                        sumFee = sumFee.add(efee);
+                        actAmtAndDisc = actAmtAndDisc.add(efee);
+                    }
+
+                    this.setValue("e_receivableamt", actAmtAndDisc, i);
+                    this.setValue("e_receivablelocamt", QuotationHelper.callToCurrency(actAmtAndDisc, exchangeRate, quotation, round), i);
+                    this.setValue("e_unsettledamt", actAmtAndDisc, i);
+                    if (actAmtAndDisc != null) {
+                        this.setValue("e_unsettledlocalamt", QuotationHelper.callToCurrency(actAmtAndDisc, exchangeRate, quotation, round), i);
+                    }
+
+                    this.setValue("e_unlockamt", actAmtAndDisc, i);
+                }
+
+                if (actAmount != null) {
+                    sumAmt = sumAmt.add(actAmount);
+                }
+
+                this.getModel().endInit();
+                this.getView().updateView("e_fee", i);
+                this.getView().updateView("e_receivableamt", i);
+                this.getView().updateView("e_receivablelocamt", i);
+                this.getView().updateView("e_receivablelocamt", i);
+                this.getView().updateView("e_discountlocamt", i);
+                this.getView().updateView("e_unsettledamt", i);
+                this.getView().updateView("e_unlockamt", i);
+                this.getView().updateView("e_localamt", i);
+            }
+
+            this.setValue("actrecamt", sumAmt);
+            this.setValue("fee", sumFee);
+            this.setValue("localamt", sumLocalAmt);
+        }
+    }
+
+    private String quoteType() {
+        DynamicObject currency = this.getDynamicObject("currency");
+        DynamicObject baseCurrency = this.getDynamicObject("basecurrency");
+        DynamicObject exRateTable = this.getDynamicObject("exratetable");
+        Date exRateDate = (Date)this.getValue("exratedate");
+        String quoteType = "0";
+        if (currency != null && baseCurrency != null && exRateTable != null && exRateDate != null) {
+            Map<String, Object> exchangeRateByRules = BaseDataServiceHelper.getExchangeRateMap(currency.getLong("id"), baseCurrency.getLong("id"), exRateTable.getLong("id"), exRateDate);
+            if (exchangeRateByRules.get("quoteType") != null && (Boolean)exchangeRateByRules.get("quoteType")) {
+                quoteType = "1";
+            }
+        }
+
+        return quoteType;
+    }
+
+    private void calculateAmt() {
+        IDataModel model = this.getModel();
+        Object org = model.getValue("org");
+        if (org != null) {
+            int cs = SystemParameterHelper.getParameterInteger(((DynamicObject)org).getLong("id"), "cs117");
+            if (RecAmtTypeEnum.RECEIVABLEAMT.getValue().equals(String.valueOf(cs))) {
+                this.calculateAmtByRecamt();
+            } else {
+                this.calculateAmtByActamt();
+            }
+        }
+
+    }
+
+    private void calculateAmtByRecamt() {
+        String quotation = this.getString("quotation");
+        if (null == quotation) {
+            quotation = this.quoteType();
+        }
+
+        BigDecimal exchangeRate = this.getBigDecimal("exchangerate");
+        BigDecimal fee = this.getBigDecimal("fee");
+        DynamicObject currency = this.getDynamicObject("currency");
+        if (currency != null) {
+            DynamicObject basecurrency = this.getDynamicObject("basecurrency");
+            int round = 10;
+            if (basecurrency != null) {
+                round = basecurrency.getInt("amtprecision");
+            }
+
+            int count = this.getModel().getEntryRowCount("entry");
+            BigDecimal sumAmt = BigDecimal.ZERO;
+            BigDecimal sumFee = BigDecimal.ZERO;
+            BigDecimal amount = BigDecimal.ZERO;
+            BigDecimal sumLocalAmt = BigDecimal.ZERO;
+
+            for(int i = 0; i < count; ++i) {
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                BigDecimal subtract = rowInfo.getBigDecimal("e_receivableamt").subtract(rowInfo.getBigDecimal("e_discountamt"));
+                amount = amount.add(subtract);
+            }
+
+            BigDecimal countFee = BigDecimal.ZERO;
+
+            for(int i = 0; i < count; ++i) {
+                this.getModel().beginInit();
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                BigDecimal recAmount = rowInfo.getBigDecimal("e_receivableamt");
+                if (recAmount != null) {
+                    this.setValue("e_receivablelocamt", QuotationHelper.callToCurrency(recAmount, exchangeRate, quotation, round), i);
+                }
+
+                BigDecimal discountAmt = rowInfo.getBigDecimal("e_discountamt");
+                if (discountAmt != null) {
+                    this.setValue("e_discountlocamt", QuotationHelper.callToCurrency(discountAmt, exchangeRate, quotation, round), i);
+                }
+
+                if (recAmount != null) {
+                    BigDecimal actAmt = recAmount.subtract(discountAmt);
+                    this.setValue("e_fee", BigDecimal.ZERO, i);
+                    BigDecimal efee;
+                    if (amount.compareTo(BigDecimal.ZERO) != 0) {
+                        efee = actAmt.multiply(fee).divide(amount, currency.getInt("amtprecision"), RoundingMode.DOWN);
+                        if (this.getLastRow(i)) {
+                            efee = fee.subtract(countFee);
+                        }
+
+                        countFee = countFee.add(efee);
+                        this.setValue("e_fee", efee, i);
+                        sumFee = sumFee.add(efee);
+                        actAmt = actAmt.subtract(efee);
+                    }
+
+                    sumAmt = sumAmt.add(actAmt);
+                    this.setValue("e_actamt", actAmt, i);
+                    efee = QuotationHelper.callToCurrency(actAmt, exchangeRate, quotation, round);
+                    this.setValue("e_localamt", efee, i);
+                    sumLocalAmt = sumLocalAmt.add(efee);
+                }
+
+                this.setValue("e_unsettledamt", recAmount, i);
+                if (recAmount != null) {
+                    this.setValue("e_unsettledlocalamt", QuotationHelper.callToCurrency(recAmount, exchangeRate, quotation, round), i);
+                }
+
+                this.setValue("e_unlockamt", recAmount, i);
+                this.getModel().endInit();
+                this.getView().updateView("e_fee", i);
+                this.getView().updateView("e_actamt", i);
+                this.getView().updateView("e_localamt", i);
+                this.getView().updateView("e_receivablelocamt", i);
+                this.getView().updateView("e_discountlocamt", i);
+                this.getView().updateView("e_unsettledamt", i);
+                this.getView().updateView("e_unlockamt", i);
+                this.getView().updateView("e_unlockamt", i);
+                this.getView().updateView("e_unsettledlocalamt", i);
+            }
+
+            this.setValue("actrecamt", sumAmt);
+            this.setValue("fee", sumFee);
+            this.setValue("localamt", sumLocalAmt);
+        }
+    }
+
+    private void calculateAmtImport() {
+        IDataModel model = this.getModel();
+        Object org = model.getValue("org");
+        if (org != null) {
+            int cs = SystemParameterHelper.getParameterInteger(((DynamicObject)org).getLong("id"), "cs117");
+            if (RecAmtTypeEnum.RECEIVABLEAMT.getValue().equals(String.valueOf(cs))) {
+                this.calculateAmtByRecamtImport();
+            } else {
+                this.calculateAmtByActamtImport();
+            }
+        }
+
+    }
+
+    private void calculateAmtByActamtImport() {
+        BigDecimal exchangeRate = this.getBigDecimal("exchangerate");
+        String quotation = this.getString("quotation");
+        if (null == quotation) {
+            quotation = this.quoteType();
+        }
+
+        this.getModel().setValue("quotation", quotation);
+        BigDecimal fee = this.getBigDecimal("fee");
+        if (exchangeRate == null) {
+            exchangeRate = BigDecimal.ONE;
+        }
+
+        if (fee == null) {
+            fee = BigDecimal.ZERO;
+        }
+
+        DynamicObject currency = this.getDynamicObject("currency");
+        if (currency != null) {
+            DynamicObject basecurrency = this.getDynamicObject("basecurrency");
+            int round = 10;
+            if (basecurrency != null) {
+                round = basecurrency.getInt("amtprecision");
+            }
+
+            int count = this.getModel().getEntryRowCount("entry");
+            BigDecimal sumAmt = BigDecimal.ZERO;
+            BigDecimal amount = BigDecimal.ZERO;
+
+            BigDecimal countFee;
+            for(int i = 0; i < count; ++i) {
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                countFee = rowInfo.getBigDecimal("e_actamt").add(rowInfo.getBigDecimal("e_discountamt"));
+                amount = amount.add(countFee);
+            }
+
+            boolean feeTemp = false;
+
+            BigDecimal sumLocalAmt;
+            for(int i = 0; i < count; ++i) {
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                sumLocalAmt = rowInfo.getBigDecimal("e_fee");
+                if (CasHelper.isNotEmpty(sumLocalAmt)) {
+                    feeTemp = true;
+                    break;
+                }
+            }
+
+            BigDecimal sumFee = BigDecimal.ZERO;
+            countFee = BigDecimal.ZERO;
+            sumLocalAmt = BigDecimal.ZERO;
+
+            for(int i = 0; i < count; ++i) {
+                this.getModel().beginInit();
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                BigDecimal actAmount = rowInfo.getBigDecimal("e_actamt");
+                BigDecimal discountAmt;
+                if (actAmount != null) {
+                    discountAmt = QuotationHelper.callToCurrency(actAmount, exchangeRate, quotation, round);
+                    this.setValue("e_localamt", discountAmt, i);
+                    sumLocalAmt = sumLocalAmt.add(discountAmt);
+                }
+
+                discountAmt = rowInfo.getBigDecimal("e_discountamt");
+                if (discountAmt != null) {
+                    this.setValue("e_discountlocamt", QuotationHelper.callToCurrency(discountAmt, exchangeRate, quotation, round), i);
+                }
+
+                this.setValue("e_unsettledamt", actAmount, i);
+                this.setValue("e_unlockamt", actAmount, i);
+                BigDecimal actAmtAndDisc;
+                BigDecimal e_fee;
+                if (actAmount != null && !feeTemp) {
+                    actAmtAndDisc = actAmount.add(discountAmt);
+                    this.setValue("e_fee", BigDecimal.ZERO, i);
+                    if (amount.compareTo(BigDecimal.ZERO) != 0) {
+                        e_fee = actAmtAndDisc.multiply(fee).divide(amount, currency.getInt("amtprecision"), RoundingMode.DOWN);
+                        if (this.getLastRow(i)) {
+                            e_fee = fee.subtract(countFee);
+                        }
+
+                        countFee = countFee.add(e_fee);
+                        this.setValue("e_fee", e_fee, i);
+                        actAmtAndDisc = actAmtAndDisc.add(e_fee);
+                    }
+
+                    this.setValue("e_receivableamt", actAmtAndDisc, i);
+                    this.setValue("e_receivablelocamt", QuotationHelper.callToCurrency(actAmtAndDisc, exchangeRate, quotation, round), i);
+                    this.setValue("e_unsettledamt", actAmtAndDisc, i);
+                    if (actAmtAndDisc != null) {
+                        this.setValue("e_unsettledlocalamt", QuotationHelper.callToCurrency(actAmtAndDisc, exchangeRate, quotation, round), i);
+                    }
+
+                    this.setValue("e_unlockamt", actAmtAndDisc, i);
+                }
+
+                if (actAmount != null && feeTemp) {
+                    actAmtAndDisc = actAmount.add(discountAmt);
+                    e_fee = rowInfo.getBigDecimal("e_fee");
+                    if (e_fee != null) {
+                        sumFee = e_fee.add(sumFee);
+                        actAmtAndDisc = actAmtAndDisc.add(e_fee);
+                    }
+
+                    this.setValue("e_receivableamt", actAmtAndDisc, i);
+                    this.setValue("e_receivablelocamt", QuotationHelper.callToCurrency(actAmtAndDisc, exchangeRate, quotation, round), i);
+                    this.setValue("e_unsettledamt", actAmtAndDisc, i);
+                    if (actAmtAndDisc != null) {
+                        this.setValue("e_unsettledlocalamt", QuotationHelper.callToCurrency(actAmtAndDisc, exchangeRate, quotation, round), i);
+                    }
+
+                    this.setValue("e_unlockamt", actAmtAndDisc, i);
+                }
+
+                if (actAmount != null) {
+                    sumAmt = sumAmt.add(actAmount);
+                }
+
+                this.getModel().endInit();
+                this.getView().updateView("e_fee", i);
+                this.getView().updateView("e_receivableamt", i);
+                this.getView().updateView("e_receivablelocamt", i);
+                this.getView().updateView("e_receivablelocamt", i);
+                this.getView().updateView("e_discountlocamt", i);
+                this.getView().updateView("e_unsettledamt", i);
+                this.getView().updateView("e_unlockamt", i);
+                this.getView().updateView("e_localamt", i);
+            }
+
+            this.setValue("actrecamt", sumAmt);
+            this.setValue("localamt", sumLocalAmt);
+            if (feeTemp) {
+                this.setValue("fee", sumFee);
+            }
+
+        }
+    }
+
+    private void calculateAmtByRecamtImport() {
+        String quotation = this.getString("quotation");
+        if (null == quotation) {
+            quotation = this.quoteType();
+        }
+
+        this.getModel().setValue("quotation", quotation);
+        BigDecimal exchangeRate = this.getBigDecimal("exchangerate");
+        BigDecimal fee = this.getBigDecimal("fee");
+        DynamicObject currency = this.getDynamicObject("currency");
+        if (currency != null) {
+            DynamicObject basecurrency = this.getDynamicObject("basecurrency");
+            int round = 10;
+            if (basecurrency != null) {
+                round = basecurrency.getInt("amtprecision");
+            }
+
+            int count = this.getModel().getEntryRowCount("entry");
+            BigDecimal sumAmt = BigDecimal.ZERO;
+            BigDecimal amount = BigDecimal.ZERO;
+
+            BigDecimal countFee;
+            for(int i = 0; i < count; ++i) {
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                countFee = rowInfo.getBigDecimal("e_receivableamt").subtract(rowInfo.getBigDecimal("e_discountamt"));
+                amount = amount.add(countFee);
+            }
+
+            boolean feeTemp = false;
+
+            BigDecimal sumLocalAmt;
+            for(int i = 0; i < count; ++i) {
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                sumLocalAmt = rowInfo.getBigDecimal("e_fee");
+                if (CasHelper.isNotEmpty(sumLocalAmt)) {
+                    feeTemp = true;
+                    break;
+                }
+            }
+
+            BigDecimal sumFee = BigDecimal.ZERO;
+            countFee = BigDecimal.ZERO;
+            sumLocalAmt = BigDecimal.ZERO;
+
+            for(int i = 0; i < count; ++i) {
+                this.getModel().beginInit();
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                BigDecimal recAmount = rowInfo.getBigDecimal("e_receivableamt");
+                if (recAmount != null) {
+                    this.setValue("e_receivablelocamt", QuotationHelper.callToCurrency(recAmount, exchangeRate, quotation, round), i);
+                }
+
+                BigDecimal discountAmt = rowInfo.getBigDecimal("e_discountamt");
+                if (discountAmt != null) {
+                    this.setValue("e_discountlocamt", QuotationHelper.callToCurrency(discountAmt, exchangeRate, quotation, round), i);
+                }
+
+                BigDecimal actAmt;
+                BigDecimal e_fee;
+                if (recAmount != null && !feeTemp) {
+                    actAmt = recAmount.subtract(discountAmt);
+                    this.setValue("e_fee", BigDecimal.ZERO, i);
+                    if (amount.compareTo(BigDecimal.ZERO) != 0) {
+                        e_fee = actAmt.multiply(fee).divide(amount, currency.getInt("amtprecision"), RoundingMode.DOWN);
+                        if (this.getLastRow(i)) {
+                            e_fee = fee.subtract(countFee);
+                        }
+
+                        countFee = countFee.add(e_fee);
+                        this.setValue("e_fee", e_fee, i);
+                        actAmt = actAmt.subtract(e_fee);
+                    }
+
+                    sumAmt = sumAmt.add(actAmt);
+                    this.setValue("e_actamt", actAmt, i);
+                    e_fee = QuotationHelper.callToCurrency(actAmt, exchangeRate, quotation, round);
+                    this.setValue("e_localamt", e_fee, i);
+                    sumLocalAmt = sumLocalAmt.add(e_fee);
+                }
+
+                if (recAmount != null && feeTemp) {
+                    actAmt = recAmount.subtract(discountAmt);
+                    e_fee = rowInfo.getBigDecimal("e_fee");
+                    if (e_fee != null) {
+                        sumFee = e_fee.add(sumFee);
+                        actAmt = actAmt.subtract(e_fee);
+                    }
+
+                    sumAmt = sumAmt.add(actAmt);
+                    this.setValue("e_actamt", actAmt, i);
+                    BigDecimal localAmt = QuotationHelper.callToCurrency(actAmt, exchangeRate, quotation, round);
+                    this.setValue("e_localamt", localAmt, i);
+                    sumLocalAmt = sumLocalAmt.add(localAmt);
+                }
+
+                this.setValue("e_unsettledamt", recAmount, i);
+                if (recAmount != null) {
+                    this.setValue("e_unsettledlocalamt", QuotationHelper.callToCurrency(recAmount, exchangeRate, quotation, round), i);
+                }
+
+                this.setValue("e_unlockamt", recAmount, i);
+                this.getModel().endInit();
+                this.getView().updateView("e_fee", i);
+                this.getView().updateView("e_actamt", i);
+                this.getView().updateView("e_localamt", i);
+                this.getView().updateView("e_receivablelocamt", i);
+                this.getView().updateView("e_discountlocamt", i);
+                this.getView().updateView("e_unsettledamt", i);
+                this.getView().updateView("e_unlockamt", i);
+                this.getView().updateView("e_unlockamt", i);
+                this.getView().updateView("e_unsettledlocalamt", i);
+            }
+
+            this.setValue("actrecamt", sumAmt);
+            this.setValue("localamt", sumLocalAmt);
+            if (feeTemp) {
+                this.setValue("fee", sumFee);
+            }
+
+        }
+    }
+
+    private void calculateFee(int iRow) {
+        IDataModel model = this.getModel();
+        Object org = model.getValue("org");
+        if (org != null) {
+            int cs = SystemParameterHelper.getParameterInteger(((DynamicObject)org).getLong("id"), "cs117");
+            if (RecAmtTypeEnum.RECEIVABLEAMT.getValue().equals(String.valueOf(cs))) {
+                this.calculateFeeByRec(iRow);
+            } else {
+                this.calculateFeeAct(iRow);
+            }
+        }
+
+    }
+
+    private void calculateFeeByRec(int iRow) {
+        IFormView view = this.getView();
+        BigDecimal exchangeRate = this.getBigDecimal("exchangerate");
+        String quotation = this.getString("quotation");
+        DynamicObject currency = this.getDynamicObject("currency");
+        if (currency != null) {
+            DynamicObject basecurrency = this.getDynamicObject("basecurrency");
+            int round = 10;
+            if (basecurrency != null) {
+                round = basecurrency.getInt("amtprecision");
+            }
+
+            int count = this.getModel().getEntryRowCount("entry");
+            BigDecimal countFee = BigDecimal.ZERO;
+            BigDecimal sumAmt = BigDecimal.ZERO;
+            BigDecimal actAmt = BigDecimal.ZERO;
+            BigDecimal fee = BigDecimal.ZERO;
+            BigDecimal sumLocalAmt = BigDecimal.ZERO;
+            this.getModel().beginInit();
+
+            for(int i = 0; i < count; ++i) {
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                if (iRow == i) {
+                    BigDecimal recAmount = rowInfo.getBigDecimal("e_receivableamt");
+                    BigDecimal discountAmt = rowInfo.getBigDecimal("e_discountamt");
+                    actAmt = recAmount.subtract(discountAmt);
+                    actAmt = actAmt.subtract(rowInfo.getBigDecimal("e_fee"));
+                    BigDecimal actLocalAmt = QuotationHelper.callToCurrency(actAmt, exchangeRate, quotation, round);
+                    this.setValue("e_actamt", actAmt, i);
+                    this.setValue("e_localamt", actLocalAmt, i);
+                    view.updateView("e_actamt", i);
+                    view.updateView("e_localamt", i);
+                } else {
+                    actAmt = rowInfo.getBigDecimal("e_actamt");
+                }
+
+                sumAmt = sumAmt.add(actAmt);
+                sumLocalAmt = sumLocalAmt.add(rowInfo.getBigDecimal("e_localamt"));
+                fee = rowInfo.getBigDecimal("e_fee");
+                countFee = countFee.add(fee);
+            }
+
+            this.setValue("actrecamt", sumAmt);
+            this.setValue("localamt", sumLocalAmt);
+            this.setValue("fee", countFee);
+            this.getModel().endInit();
+            view.updateView("fee");
+            view.updateView("actrecamt");
+            view.updateView("localamt");
+        }
+    }
+
+    private void calculateFeeAct(int iRow) {
+        IFormView view = this.getView();
+        BigDecimal exchangeRate = this.getBigDecimal("exchangerate");
+        String quotation = this.getString("quotation");
+        DynamicObject currency = this.getDynamicObject("currency");
+        if (currency != null) {
+            DynamicObject basecurrency = this.getDynamicObject("basecurrency");
+            int round = 10;
+            if (basecurrency != null) {
+                round = basecurrency.getInt("amtprecision");
+            }
+
+            int count = this.getModel().getEntryRowCount("entry");
+            BigDecimal countFee = BigDecimal.ZERO;
+            BigDecimal actAmt = BigDecimal.ZERO;
+            BigDecimal fee = BigDecimal.ZERO;
+            this.getModel().beginInit();
+
+            for(int i = 0; i < count; ++i) {
+                DynamicObject rowInfo = this.getModel().getEntryRowEntity("entry", i);
+                if (iRow == i) {
+                    BigDecimal recAmount = rowInfo.getBigDecimal("e_actamt");
+                    BigDecimal discountAmt = rowInfo.getBigDecimal("e_discountamt");
+                    actAmt = recAmount.add(discountAmt);
+                    actAmt = actAmt.add(rowInfo.getBigDecimal("e_fee"));
+                    BigDecimal actLocalAmt = QuotationHelper.callToCurrency(actAmt, exchangeRate, quotation, round);
+                    this.setValue("e_receivableamt", actAmt, i);
+                    this.setValue("e_receivablelocamt", actLocalAmt, i);
+                    this.setValue("e_unsettledamt", actAmt, i);
+                    this.setValue("e_unlockamt", actAmt, i);
+                    view.updateView("e_unsettledamt", i);
+                    view.updateView("e_unlockamt", i);
+                    view.updateView("e_receivableamt", i);
+                    view.updateView("e_receivablelocamt", i);
+                }
+
+                fee = rowInfo.getBigDecimal("e_fee");
+                countFee = countFee.add(fee);
+            }
+
+            this.setValue("fee", countFee);
+            this.getModel().endInit();
+            view.updateView("fee");
+        }
+    }
+
+    public Boolean getLastRow(int row) {
+        int entryRowCount = this.getModel().getEntryRowCount("entry");
+        return row < entryRowCount - 1 ? Boolean.FALSE : Boolean.TRUE;
+    }
+
+    private void payeeAcctBankF7Changed(PropertyChangedArgs e, Object newValue) {
+        DynamicObject payeeAcctBank = (DynamicObject)newValue;
+        if (payeeAcctBank != null) {
+            DynamicObject currency = this.getDynamicObject("currency");
+            boolean containCurrency = AccountBankHelper.isAcctBankContainCurrency("bd_accountbanks", payeeAcctBank.getPkValue(), currency);
+            if (!containCurrency) {
+                Long currencyId = (Long)payeeAcctBank.get("defaultcurrency.id");
+                if (this.isBotpCreate()) {
+                    this.setValueIfAbsent("currency", currencyId);
+                } else {
+                    this.setValue("currency", currencyId);
+                }
+            }
+
+            this.setValue("payeebank", payeeAcctBank.getDynamicObject("bank"));
+            this.setCurrencyEditable();
+        } else {
+            this.setValue("payeebank", (Object)null);
+            if (!this.isBotpCreate()) {
+                this.setValue("currency", this.getDynamicObject("basecurrency"));
+            }
+        }
+
+        this.setOpenOrg();
+        this.setSettleOrg(false);
+    }
+
+    private void fillPayeeAcctBank() {
+        BasedataEdit payerAcctBankF7 = (BasedataEdit)this.getControl("accountbank");
+        payerAcctBankF7.addBeforeF7SelectListener((beforeF7SelectEvent) -> {
+            ListShowParameter showParameter = (ListShowParameter)beforeF7SelectEvent.getFormShowParameter();
+            showParameter.setIsolationOrg(false);
+            DynamicObject payee = (DynamicObject)this.getModel().getValue("org");
+            if (payee != null) {
+                QFilter[] usableAccountFilter = AccountBankHelper.getUsableAccountFilter((Long)payee.getPkValue());
+                showParameter.getListFilterParameter().setQFilters(Arrays.asList(usableAccountFilter));
+            } else {
+                showParameter.getListFilterParameter().setFilter(AccountBankHelper.getUsableFilter());
+            }
+
+        });
+    }
+
+    private void fillRecType() {
+        BasedataEdit receivabletypeF7 = (BasedataEdit)this.getControl("receivingtype");
+        receivabletypeF7.addBeforeF7SelectListener((beforeF7SelectEvent) -> {
+            boolean multireceivingtype = (Boolean)this.getModel().getValue("multireceivingtype");
+            ListShowParameter showParameter = (ListShowParameter)beforeF7SelectEvent.getFormShowParameter();
+            QFilter qFilter = new QFilter("enable", "=", "1");
+            String rectype = this.getModel().getValue("biztype").toString();
+            if (RecTypeEnum.SalesRec.toString().equals(rectype)) {
+                qFilter.and("ispartreceivable", "=", "1");
+            }
+
+            if ("sm_salorder".equals(this.getString("sourcebilltype")) || "conm_salcontract".equals(this.getString("sourcebilltype"))) {
+                qFilter.and(new QFilter("biztype", "=", "101"));
+                qFilter.and(new QFilter("ispartreceivable", "=", "1"));
+            }
+
+            if (multireceivingtype) {
+                qFilter.and(new QFilter("biztype", "=", "110"));
+            } else {
+                qFilter.and(new QFilter("biztype", "!=", "110"));
+            }
+
+            if (multireceivingtype) {
+                QFilter multipaymenttypeqFilter = new QFilter("enable", "=", "1");
+                multipaymenttypeqFilter.and(new QFilter("biztype", "=", "110"));
+                qFilter = multipaymenttypeqFilter;
+            }
+
+            showParameter.getListFilterParameter().setFilter(qFilter);
+        });
+    }
+
+    public void afterCreateNewData(EventObject e) {
+        super.afterCreateNewData(e);
+        Object obj = this.getModel().getContextVariable("IGNORE_RELOADDATAMODEL");
+        if (null == obj || !(Boolean)obj) {
+            BillModel model = (BillModel)this.getModel();
+            if (!model.isFromImport()) {
+                this.createNewModel();
+            }
+
+        }
+    }
+
+    private void createNewModel() {
+        FormShowParameter parameter = this.getView().getFormShowParameter();
+        Map<String, Object> customParams = parameter.getCustomParams();
+        IBillModel model = (IBillModel)this.getModel();
+        Object org = model.getValue("org");
+        if (org == null) {
+            String appId = this.getView().getFormShowParameter().getAppId();
+            if (EmptyUtil.isNotEmpty(appId)) {
+                appId = AppMetadataCache.getAppInfo(appId).getId();
+            } else {
+                appId = AppMetadataCache.getAppInfo("cas").getId();
+            }
+
+            List<Long> authorizedBankOrgId = OrgHelper.getAuthorizedBankOrgId(RequestContext.get().getCurrUserId(), appId, "nckd_cas_recbill_xz", "47156aff000000ac");
+            if (!CollectionUtils.isEmpty(authorizedBankOrgId)) {
+                this.setValue("org", authorizedBankOrgId.get(0));
+            }
+        }
+
+        DynamicObject receivingtype = this.getDynamicObject("receivingtype");
+        DynamicObjectCollection entrys = this.getModel().getDataEntity().getDynamicObjectCollection("entry");
+        Iterator var7 = entrys.iterator();
+
+        DynamicObject entry;
+        while(var7.hasNext()) {
+            entry = (DynamicObject)var7.next();
+            entry.set("e_receivingtype", receivingtype);
+        }
+
+        if (customParams != null && customParams.containsKey("recmentType")) {
+            String bizType = "999";
+            String rectype = (String)customParams.get("recmentType");
+            boolean multireceivingtype = (Boolean)this.getModel().getValue("multireceivingtype");
+            this.getModel().setValue("biztype", rectype);
+            if (rectype.equals(RecTypeEnum.OtherRec.toString())) {
+                this.setValue("payertype", AsstActTypeEnum.OTHER.getValue());
+                if (!multireceivingtype) {
+                    this.getView().setVisible(false, new String[]{"e_material"});
+                }
+            } else {
+                bizType = "100";
+                this.setValue("payertype", AsstActTypeEnum.CUSTOMER.getValue());
+                this.getView().setVisible(true, new String[]{"e_material"});
+            }
+
+            QFilter filter = (new QFilter("biztype", "=", bizType)).and(new QFilter("enable", "=", "1"));
+            if (RecTypeEnum.SalesRec.toString().equals(this.getModel().getValue("biztype"))) {
+                filter.and("ispartreceivable", "=", "1");
+            }
+
+            Map<Object, DynamicObject> recbilltypes = BusinessDataServiceHelper.loadFromCache("cas_receivingbilltype", "fid,enable,fundflowitem,number,name,biztype,ispartreceivable,description,predata,default", new QFilter[]{filter}, "default desc,predata desc");
+            if (EmptyUtil.isNoEmpty(recbilltypes)) {
+                Iterator<Map.Entry<Object, DynamicObject>> iterator = recbilltypes.entrySet().iterator();
+                if (iterator.hasNext()) {
+                    DynamicObject receivingType = (DynamicObject)((Map.Entry)iterator.next()).getValue();
+                    this.setValue("receivingtype", receivingType);
+                    this.setEntryExpenseitemEnable();
+                    Iterator var14 = entrys.iterator();
+
+                    while(var14.hasNext()) {
+                        entry = (DynamicObject)var14.next();
+                        entry.set("e_receivingtype", receivingType);
+                    }
+                }
+            } else {
+                this.setValue("receivingtype", (Object)null);
+            }
+        }
+
+        Date currentDate = DateUtils.getCurrentDate();
+        this.setValueIfAbsent("bizdate", currentDate);
+        this.setValueIfAbsent("exratedate", currentDate);
+        org = model.getValue("org");
+        if (org != null) {
+            Long orgId = (Long)((DynamicObject)org).getPkValue();
+            this.setDefaultExratetable(orgId);
+            if (!SystemStatusCtrolHelper.isInitEnable(orgId)) {
+                this.getView().setEnable(false, new String[]{"bar_save", "bar_submit"});
+                this.getView().showErrorNotification(SystemStatusCtrolHelper.getNotInitMsg(CasHelper.getLocalValue((DynamicObject)org, "name")));
+            } else {
+                this.getView().setEnable(true, new String[]{"bar_save", "bar_submit"});
+                this.getView().setEnable(false, new String[]{"payeebank"});
+                this.setValueIfAbsent("settletype", BaseDataHelper.getDefaultSettleType());
+                this.payeeF7Changed((PropertyChangedArgs)null, this.getValue("org"));
+                this.payeeAcctBankF7Changed((PropertyChangedArgs)null, this.getDynamicObject("accountbank"));
+                this.currencyF7Changed();
+                this.getView().setVisible(true, new String[]{"customerf7"});
+                this.setPayeeInfo4Lb();
+                this.fillPayerType();
+                this.setOpenOrg();
+                this.setSettleOrg(false);
+                this.setSettleValue(0);
+                entry = this.getDynamicObject("settletype");
+                if (BaseDataHelper.isSettleTypeCash(entry) && org != null) {
+//                   Long orgId = (Long)((DynamicObject)org).getPkValue();
+                    this.setValue("accountcash", AccountCashHelper.getDefaultAccountcash(orgId, "payee"));
+                }
+
+                this.fillFundflowItem(true);
+            }
+        } else {
+            this.getView().setEnable(false, new String[]{"bar_save", "bar_submit"});
+            this.getView().showErrorNotification(ResManager.loadKDString("请先选择收款人。", "ReceivingBillEdit_34", "fi-cas-formplugin", new Object[0]));
+        }
+    }
+
+    public void beforeBindData(EventObject e) {
+        super.beforeBindData(e);
+        if (this.isBotpNew()) {
+            this.supplePayerInfo();
+            DynamicObject settleType = this.getDynamicObject("settletype");
+            Object org = this.getModel().getValue("org");
+            if (BaseDataHelper.isSettleTypeCash(settleType) && org != null) {
+                this.setValue("accountbank", (Object)null);
+                Long orgId = (Long)((DynamicObject)org).getPkValue();
+                this.setValue("accountcash", AccountCashHelper.getDefaultAccountcash(orgId, "payee"));
+            }
+
+            if (CasHelper.isEmpty(this.getModel().getValue("exchangerate"))) {
+                this.getModel().setValue("exchangerate", BigDecimal.ONE);
+            }
+        }
+
+    }
+
+    private void supplePayerInfo() {
+        Object sourcebilltype = this.getModel().getValue("sourcebilltype");
+        if (!CasHelper.isEmpty(sourcebilltype)) {
+            Object payer = this.getModel().getValue("payer");
+            Object payeracctbanknumMo = this.getModel().getValue("payeracctbanknum");
+            Object payeebankMo = this.getModel().getValue("f7_payerbank");
+            Object payertype = this.getValue("payertype");
+            if (CasHelper.isEmpty(payeracctbanknumMo) && CasHelper.isEmpty(payeebankMo)) {
+                String billName = this.getModel().getDataEntityType().getName();
+                Map<String, Object> resultMap = CasPayeeOrPayerHelper.getPayeeOrPayerInfo(payer, payertype, billName);
+                if (resultMap.size() > 0) {
+                    Object payeracctbanknum = resultMap.get("payeracctbanknum");
+                    DynamicObject f7_payerbank = (DynamicObject)resultMap.get("f7_payerbank");
+                    this.getModel().setValue("payeracctbanknum", payeracctbanknum);
+                    if (!CasHelper.isEmpty(f7_payerbank)) {
+                        this.getModel().setValue("f7_payerbank", f7_payerbank);
+                        this.getModel().setValue("payerbankname", CasHelper.getLocalValue(f7_payerbank, "name"));
+                    }
+                }
+            }
+        }
+
+    }
+
+    public void afterDeleteRow(AfterDeleteRowEventArgs e) {
+        this.calculateAmt();
+    }
+
+    public void afterImportData(ImportDataEventArgs e) {
+        super.afterImportData(e);
+        DynamicObject cur = OrgHelper.getBaseCurrency(this.getPk("org"));
+        this.setValue("basecurrency", cur);
+        DynamicObject accountBank = this.getDynamicObject("accountbank");
+        if (accountBank != null) {
+            this.setValue("payeebank", accountBank.getDynamicObject("bank"));
+            Object openorg = this.getValue("openorg");
+            if (CasHelper.isEmpty(openorg)) {
+                this.setValue("openorg", accountBank.getDynamicObject("openorg"));
+            }
+
+            DynamicObjectCollection entry = this.getModel().getEntryEntity("entry");
+            Iterator var6 = entry.iterator();
+
+            while(var6.hasNext()) {
+                DynamicObject rowInfo = (DynamicObject)var6.next();
+                Object rowOpenOrg = rowInfo.get("e_settleorg");
+                if (CasHelper.isEmpty(rowOpenOrg)) {
+                    this.setValueIfAbsent("e_settleorg", accountBank.getDynamicObject("openorg"), rowInfo.getInt("seq") - 1);
+                }
+            }
+        }
+
+        this.calculateAmtImport();
+        DynamicObject receivingtype = this.getDynamicObject("receivingtype");
+        if (receivingtype != null) {
+            receivingtype = BusinessDataServiceHelper.loadSingleFromCache(receivingtype.getPkValue(), "cas_receivingbilltype", "id,fundflowitem");
+            this.fillFundflowItem(true);
+        }
+
+    }
+
+    public void afterCopyData(EventObject e) {
+        super.afterCopyData(e);
+        BillShowParameter parameter = (BillShowParameter)this.getView().getFormShowParameter();
+        Object operate = parameter.getCustomParam("operate");
+        if (operate != null && !operate.equals(OperateTypeEnum.COPY.name())) {
+            if (operate.equals(OperateTypeEnum.OFFSET.name())) {
+                this.create4Copy(true);
+            }
+        } else {
+            this.create4Copy(false);
+        }
+
+        this.getModel().setValue("isrefund", false);
+        this.getModel().setValue("isfullrefund", false);
+        this.getModel().setValue("cas_draftinfo", (Object)null);
+        this.getModel().setValue("logids", "");
+    }
+
+    private void create4Copy(boolean isOffset) {
+        IBillModel model = (IBillModel)this.getModel();
+        int count = model.getEntryRowCount("entry");
+
+        for(int i = 0; i < count; ++i) {
+            BigDecimal e_receivableamt = (BigDecimal)model.getValue("e_receivableamt", i);
+            model.setValue("e_unlockamt", e_receivableamt, i);
+            model.setValue("e_unsettledamt", e_receivableamt, i);
+        }
+
+        if (isOffset) {
+            this.setNegateAmt(model);
+        }
+
+        this.getView().setEnable(false, new String[]{"org"});
+        this.setPayerInfo4Lb();
+        this.setPayeeInfo4Lb();
+        String payeeTypeID = (String)model.getValue("payertype");
+        if (AsstActTypeEnum.EMPLOYEE.getValue().equals(payeeTypeID) && CasHelper.isEmpty(this.getModel().getValue("f7_payerbank")) && CasHelper.isEmpty(this.getModel().getValue("payeracctbanknum"))) {
+            this.userF7Changed((PropertyChangedArgs)null, model.getValue("userf7"));
+        }
+
+        DynamicObject payeeAcctBank = (DynamicObject)this.getModel().getValue("accountbank");
+        if (payeeAcctBank != null && !(Boolean)payeeAcctBank.get("ismulcurrency")) {
+            this.getView().setEnable(false, new String[]{"currency"});
+        }
+
+    }
+
+    private void setNegateAmt(IBillModel model) {
+        int count = model.getEntryRowCount("entry");
+
+        for(int i = 0; i < count; ++i) {
+            model.setValue("e_actamt", ((BigDecimal)model.getValue("e_actamt", i)).negate(), i);
+            model.setValue("e_localamt", ((BigDecimal)model.getValue("e_localamt", i)).negate(), i);
+            model.setValue("e_receivableamt", ((BigDecimal)model.getValue("e_receivableamt", i)).negate(), i);
+            model.setValue("e_receivablelocamt", ((BigDecimal)model.getValue("e_receivablelocamt", i)).negate(), i);
+            model.setValue("e_discountamt", ((BigDecimal)model.getValue("e_discountamt", i)).negate(), i);
+            model.setValue("e_discountlocamt", ((BigDecimal)model.getValue("e_discountlocamt", i)).negate(), i);
+            model.setValue("e_unlockamt", ((BigDecimal)model.getValue("e_unlockamt", i)).negate(), i);
+        }
+
+        model.setValue("actrecamt", ((BigDecimal)model.getValue("actrecamt")).negate());
+        model.setValue("localamt", ((BigDecimal)model.getValue("localamt")).negate());
+    }
+
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+        this.afterBindData();
+    }
+
+    public void entryGridBindData(EntryGridBindDataEvent e) {
+//        super.entryGridBindData(e);
+        this.controlRecAmt();
+    }
+
+    public void controlRecAmt() {
+        IDataModel model = this.getModel();
+        IFormView view = this.getView();
+        int entryCount = model.getEntryRowCount("entry");
+        Object org = model.getValue("org");
+        String field = "e_actamt";
+        int i;
+        if (org != null) {
+            boolean isFinish = SystemStatusCtrolHelper.isInitEnable(((DynamicObject)org).getLong("id"));
+            this.getView().setEnable(isFinish, new String[]{"bar_save", "bar_submit"});
+            if (!isFinish) {
+                this.getView().showErrorNotification(SystemStatusCtrolHelper.getNotInitMsg(CasHelper.getLocalValue((DynamicObject)org, "name")));
+            }
+
+            i = SystemParameterHelper.getParameterInteger(((DynamicObject)org).getLong("id"), "cs117");
+            if (RecAmtTypeEnum.ACTAMT.getValue().equals(String.valueOf(i))) {
+                field = "e_receivableamt";
+            }
+        }
+
+        String enableField = "e_actamt".equals(field) ? "e_receivableamt" : "e_actamt";
+        ((FieldEdit)view.getControl(enableField)).setMustInput(true);
+
+        for(i = 0; i < entryCount; ++i) {
+            view.setEnable(true, i, new String[]{enableField});
+            view.setEnable(false, i, new String[]{field});
+        }
+
+    }
+
+    public void afterBindData() {
+        BillShowParameter billShowParameter = (BillShowParameter)this.getView().getFormShowParameter();
+        IBillModel model = (IBillModel)this.getModel();
+        DynamicObject editData = model.getDataEntity();
+        this.fillToolBar();
+        String sourcebilltype = editData.getString("sourcebilltype");
+        this.fillterEntryReceType();
+        if (!CasHelper.isEmpty(sourcebilltype)) {
+            this.getView().setVisible(false, new String[]{"copyentryrow"});
+        }
+
+        if ("cas_paybill".equals(sourcebilltype)) {
+            this.getView().setVisible(false, new String[]{"changepayee"});
+            this.getView().setVisible(false, new String[]{"changepayer"});
+        }
+
+        this.fillPayerType();
+        DynamicObject receivingtype;
+        if (this.isBotpNew()) {
+            receivingtype = OrgHelper.getBaseCurrency(this.getPk("org"));
+            if (receivingtype == null) {
+                this.getView().setEnable(false, new String[]{"bar_save", "bar_submit"});
+                this.getView().showErrorNotification(SystemStatusCtrolHelper.notFinishInitSetMsg(CasHelper.getLocalValue(this.getDynamicObject("org"), "name")));
+                return;
+            }
+
+            DynamicObject accountBank = this.getDynamicObject("accountbank");
+            if (accountBank != null) {
+                this.setValueIfAbsent("payeebank", accountBank.getDynamicObject("bank"));
+                this.setValueIfAbsent("openorg", accountBank.getDynamicObject("openorg"));
+            }
+
+            this.fillFundflowItem(false);
+        }
+
+        this.setSettleOrg(true);
+        this.setPayerInfo4Lb();
+        this.setPayeeInfo4Lb();
+        this.setCurrencyEditable();
+        this.setEntryAmountCaption();
+        this.setExchangerateEditable();
+        this.setEcorebilltype();
+        this.showChargeReason();
+        if ("nckd_cas_recbill_xz".equals(sourcebilltype)) {
+            this.getView().setVisible(false, new String[]{"changepayer"});
+            this.getView().setEnable(false, new String[]{"e_actamt"});
+        }
+
+        receivingtype = (DynamicObject)this.getValue("receivingtype");
+        boolean multireceivingtype = (Boolean)this.getModel().getValue("multireceivingtype");
+        if (receivingtype != null && receivingtype.getBoolean("ispartreceivable")) {
+            this.getView().setVisible(true, new String[]{"e_settleorg"});
+        } else if (!multireceivingtype) {
+            this.getView().setVisible(false, new String[]{"e_settleorg"});
+        }
+
+        this.getModel().setDataChanged(false);
+    }
+
+    private void fillterEntryReceType() {
+        boolean ishavenull = false;
+        DynamicObject defaultPayMentBillType = BusinessDataServiceHelper.loadSingle(1833464176371407872L, "cas_receivingbilltype");
+        DynamicObject receivingtype = (DynamicObject)this.getModel().getValue("receivingtype");
+        Set<DynamicObject> entryReceTypes = new HashSet(4);
+        DynamicObjectCollection entrys = (DynamicObjectCollection)this.getModel().getValue("entry");
+        Iterator iterator = entrys.iterator();
+
+        while(iterator.hasNext()) {
+            DynamicObject entry = (DynamicObject)iterator.next();
+            DynamicObject e_paymenttype = entry.getDynamicObject("e_receivingtype");
+            if (e_paymenttype != null) {
+                entryReceTypes.add(e_paymenttype);
+            } else {
+                ishavenull = true;
+            }
+        }
+
+        if (entryReceTypes != null && entryReceTypes.size() > 0) {
+            if (entryReceTypes.size() > 1) {
+                this.getModel().setValue("multireceivingtype", true);
+                if (receivingtype == null) {
+                    this.getModel().setValue("receivingtype", defaultPayMentBillType);
+                }
+            } else {
+                if (!ishavenull) {
+                    this.getModel().setValue("multireceivingtype", false);
+                }
+
+                if (receivingtype == null) {
+                    iterator = entryReceTypes.iterator();
+                    if (iterator.hasNext()) {
+                        this.getModel().setValue("receivingtype", iterator.next());
+                    }
+                }
+            }
+        } else if (receivingtype != null) {
+            for(int i = 0; i < entrys.size(); ++i) {
+                this.getModel().setValue("e_receivingtype", receivingtype, i);
+            }
+
+            this.getModel().setValue("multireceivingtype", false);
+        }
+
+    }
+
+    private void showChargeReason() {
+        Object chargereason = this.getModel().getValue("reason");
+        if (chargereason != null && !"".equals(chargereason) && this.getPageCache().get("chargereason") == null) {
+            String msg = String.format(ResManager.loadKDString("收款单“%1$s”已退单。退单原因:%2$s。", "ReceivingBillEdit_17", "fi-cas-formplugin", new Object[0]), this.getModel().getValue("billno"), String.valueOf(chargereason));
+            this.getView().showMessage(msg);
+            this.getPageCache().put("chargereason", "yes");
+        }
+
+    }
+
+    private void setEcorebilltype() {
+        DynamicObject recType = this.getDynamicObject("receivingtype");
+        if (recType == null) {
+            this.setByIspartreceivable();
+        } else {
+            boolean isAr = recType.getBoolean("ispartreceivable");
+            this.setByIspartreceivable(isAr);
+        }
+    }
+
+    private void setByIspartreceivable() {
+        List<ComboItem> coreComboItem = new ArrayList();
+        ComboProp property = (ComboProp) EntityMetadataCache.getDataEntityType("nckd_cas_recbill_xz").getProperty("settlecorebilltype");
+        ComboProp propertyUn = (ComboProp)EntityMetadataCache.getDataEntityType("nckd_cas_recbill_xz").getProperty("unsettlecorebilltype");
+        this.getCoreComboItem(coreComboItem, property, false);
+        this.getCoreComboItem(coreComboItem, propertyUn, false);
+        ComboEdit coreCbo = (ComboEdit)this.getView().getControl("e_corebilltype");
+        coreCbo.setComboItems(coreComboItem);
+    }
+
+    private void setByIspartreceivable(boolean isPart) {
+        List<ComboItem> coreComboItem = new ArrayList();
+        ComboProp property = (ComboProp)EntityMetadataCache.getDataEntityType("nckd_cas_recbill_xz").getProperty(isPart ? "settlecorebilltype" : "unsettlecorebilltype");
+        this.getCoreComboItem(coreComboItem, property, isPart);
+        ComboEdit coreCbo = (ComboEdit)this.getView().getControl("e_corebilltype");
+        coreCbo.setComboItems(coreComboItem);
+    }
+
+    private void getCoreComboItem(List<ComboItem> coreComboItem, ComboProp property, boolean isPart) {
+        boolean multireceivingtype = (Boolean)this.getModel().getValue("multireceivingtype");
+        Iterator comboItem;
+        if (EmptyUtil.isNoEmpty(property)) {
+            List<ValueMapItem> comboItems = property.getComboItems();
+            if (EmptyUtil.isNoEmpty(comboItems)) {
+                ComboItem comboItem1 = null;
+                comboItem = comboItems.iterator();
+
+                while(comboItem.hasNext()) {
+                    ValueMapItem valueMapItem = (ValueMapItem)comboItem.next();
+                    comboItem1 = new ComboItem(valueMapItem.getName(), valueMapItem.getValue());
+                    coreComboItem.add(comboItem1);
+                }
+            }
+        }
+
+        if (multireceivingtype) {
+            ComboProp propertyOther = (ComboProp)EntityMetadataCache.getDataEntityType("nckd_cas_recbill_xz").getProperty(isPart ? "unsettlecorebilltype" : "settlecorebilltype");
+            if (EmptyUtil.isNoEmpty(propertyOther)) {
+                List<ValueMapItem> comboItemsOther = propertyOther.getComboItems();
+                if (EmptyUtil.isNoEmpty(comboItemsOther)) {
+                    comboItem = null;
+                    Iterator var13 = comboItemsOther.iterator();
+
+                    while(var13.hasNext()) {
+                        ValueMapItem valueMapItem = (ValueMapItem)var13.next();
+                        if (!"cas_paybill".equals(valueMapItem.getValue())) {
+                            ComboItem comboItem1 = new ComboItem(valueMapItem.getName(), valueMapItem.getValue());
+                            coreComboItem.add(comboItem1);
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+    private void setDefaultExratetable(Long orgId) {
+        Long exchangeRateTableId = 0L;
+
+        try {
+            exchangeRateTableId = SystemStatusCtrolHelper.getExrateTable(orgId).getLong("id");
+        } catch (Exception var4) {
+        }
+
+        this.getModel().setValue("exratetable", exchangeRateTableId);
+    }
+
+    private void setSettleOrg(boolean isBindData) {
+        IDataModel model = this.getModel();
+        DynamicObject receivingtype = (DynamicObject)this.getValue("receivingtype");
+        Object openOrg = model.getValue("openorg");
+        if (receivingtype != null && receivingtype.getBoolean("ispartreceivable")) {
+            this.getView().setVisible(true, new String[]{"e_settleorg"});
+        }
+
+        Object sourceBillType = model.getValue("sourcebilltype");
+        if (!"ar_finarbill".equals(sourceBillType)) {
+            if (openOrg != null) {
+                DynamicObject accountOrg = (DynamicObject)openOrg;
+
+                for(int i = 0; i < model.getEntryRowCount("entry"); ++i) {
+                    if (isBindData && CasHelper.isEmpty(model.getValue("e_settleorg", i))) {
+                        this.setValue("e_settleorg", accountOrg.getPkValue(), i);
+                    }
+
+                    if (!isBindData) {
+                        this.setValue("e_settleorg", accountOrg.getPkValue(), i);
+                    }
+                }
+            }
+
+        }
+    }
+
+    protected void setExchangerateEditable() {
+        DynamicObject srcCurrency = this.getDynamicObject("currency");
+        DynamicObject destCurrency = this.getDynamicObject("basecurrency");
+        if (srcCurrency != null && destCurrency != null) {
+            if (srcCurrency.getLong("id") == destCurrency.getLong("id")) {
+                this.getView().setEnable(false, new String[]{"exchangerate"});
+            }
+
+        }
+    }
+
+    private void setCurrencyEditable() {
+        boolean isCurrencyEditable = true;
+        if (this.isBotpCreate()) {
+            isCurrencyEditable = false;
+        } else {
+            DynamicObject settleType = this.getDynamicObject("settletype");
+            boolean isCash = BaseDataHelper.isSettleTypeCash(settleType);
+            DynamicObject accountCash;
+            if (isCash) {
+                accountCash = this.getDynamicObject("accountcash");
+                if (accountCash != null) {
+                    isCurrencyEditable = !accountCash.getBoolean("isbycurrency");
+                }
+            } else {
+                accountCash = this.getDynamicObject("accountbank");
+                if (accountCash != null) {
+                    isCurrencyEditable = accountCash.getBoolean("ismulcurrency");
+                }
+            }
+        }
+
+        this.getView().setEnable(isCurrencyEditable, new String[]{"currency"});
+    }
+
+    public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
+        super.confirmCallBack(messageBoxClosedEvent);
+        String id = messageBoxClosedEvent.getCallBackId();
+        MessageBoxResult res = messageBoxClosedEvent.getResult();
+        if (StringUtils.equals(id, "CONFIRM_CANCELREC_CALLBACK") && MessageBoxResult.Yes.equals(res)) {
+            String billno = (String)this.getModel().getValue("billno");
+            DynamicObject recObj = BusinessDataServiceHelper.loadSingle("nckd_cas_recbill_xz", "id,billno", new QFilter[]{new QFilter("billno", "=", billno)});
+            if (!CasPluginHelper.cancelCheckSettleForRec(this, this.getView(), recObj)) {
+                this.getView().invokeOperation("cancelrec");
+            }
+        } else if (StringUtils.equals(id, "CONFIRM_CANCELPAY_SETTLE_CALLBACK") && MessageBoxResult.Yes.equals(res)) {
+            this.getView().invokeOperation("cancelrec");
+        } else if (id.equals("CONFIRM_DEL_CALLBACK")) {
+            OperateOption option = OperateOption.create();
+            if (MessageBoxResult.Yes.equals(res)) {
+                option.setVariableValue("delrecpay", "1");
+                this.getView().invokeOperation("delete", option);
+            }
+        } else if (id.equals("CONFIRM_DELETE_CALLBACK") && MessageBoxResult.Yes.equals(res)) {
+            this.getView().invokeOperation("delete");
+        } else if ("clearReceivingTypeConfirm".equals(id) && MessageBoxResult.Yes.equals(res)) {
+            this.getModel().setValue("receivingtype", (Object)null);
+
+            for(int i = 0; i < this.getModel().getEntryRowCount("entry"); ++i) {
+                this.setValue("e_receivingtype", (Object)null, i);
+            }
+        } else if ("clearReceivingTypeConfirm".equals(id) && MessageBoxResult.Cancel.equals(res)) {
+            this.getModel().setValue("multireceivingtype", true);
+        }
+
+    }
+
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        AbstractOperate op = (AbstractOperate)args.getSource();
+        FormOperate operate = (FormOperate)args.getSource();
+        String operateKey = operate.getOperateKey();
+        EntryGrid entry;
+        if ("copyentryrow".equals(operateKey)) {
+            entry = (EntryGrid)this.getControl("entry");
+            if (entry.getSelectRows().length == 0) {
+                this.getView().showTipNotification(ResManager.loadKDString("请选中一行再进行操作。", "ReceivingBillEdit_9", "fi-cas-formplugin", new Object[0]));
+                return;
+            }
+        }
+
+        String sourceBillType;
+        DynamicObject accountBank;
+        if ("trackdown".equals(operateKey)) {
+            accountBank = (DynamicObject)this.getModel().getValue("settletype");
+            if (accountBank != null) {
+                sourceBillType = accountBank.getString("settlementtype");
+                if (EmptyUtil.isNoEmpty(sourceBillType) && this.settleTypes.contains(sourceBillType)) {
+                    op.getOption().setVariableValue("botp_track_edit_status", "true");
+                }
+            }
+        }
+
+        if ("deleteentry".equals(operateKey)) {
+            entry = (EntryGrid)this.getControl("entry");
+            if (entry.getSelectRows().length == 0) {
+                this.getView().showTipNotification(ResManager.loadKDString("请选中一行再进行操作。", "ReceivingBillEdit_9", "fi-cas-formplugin", new Object[0]));
+                return;
+            }
+        }
+
+        if ("recbook".equals(operateKey)) {
+            accountBank = this.getDynamicObject("accountbank");
+            if (null != accountBank && AccountBankHelper.isClosed(accountBank.getLong("id"))) {
+                throw new KDBizException(String.format(ResManager.loadKDString("账户%s当前状态为已销户,暂无法进行业务处理。", "PaymentErrorCode_47", "fi-cas-business", new Object[0]), accountBank.getString("number")));
+            }
+        }
+
+        if ("receivingrec".equals(operateKey)) {
+            Object recPkValue = this.getModel().getDataEntity().getPkValue();
+            String draftIds;
+            if (!CasHelper.isEmpty(recPkValue)) {
+                DynamicObject recdb = BusinessDataServiceHelper.loadSingle(recPkValue, "nckd_cas_recbill_xz", "id,billstatus");
+                draftIds = recdb.getString("billstatus");
+                if (!draftIds.equals(BillStatusEnum.AUDIT.getValue())) {
+                    throw new KDBizException((new ReceivErrorCode()).STATUS_CANNOT_REC(), new Object[0]);
+                }
+            }
+
+            sourceBillType = (String)this.getValue("sourcebilltype");
+            if ("cas_claimcenterbill".equals(sourceBillType)) {
+                return;
+            }
+
+            draftIds = op.getOption().getVariableValue("draftids", "");
+            if (StringUtils.isEmpty(draftIds)) {
+                List<DynamicObject> fillDraft = RecDraftHelper.fillDraft(new Object[]{recPkValue}, false);
+                if (fillDraft != null && fillDraft.size() > 0) {
+                    DynamicObjectCollection draftDataColl = ((DynamicObject)fillDraft.get(0)).getDynamicObjectCollection("draftbill");
+                    List<Object> draftNoList = (List)draftDataColl.stream().map((o) -> {
+                        return o.getDynamicObject("fbasedataid").getPkValue();
+                    }).collect(Collectors.toList());
+                    op.getOption().setVariableValue("draftids", JSON.toJSONString(draftNoList));
+                    return;
+                }
+
+                DynamicObject orgData = (DynamicObject)this.getValue("org");
+                Long pkValue = (Long)orgData.getPkValue();
+                boolean selectDraftFlag = SystemParameterHelper.getParameterBoolean(pkValue, "cs123");
+                DynamicObject data = this.getModel().getDataEntity(true);
+                if (selectDraftFlag && PaymentBillPluginHelper.needSelectedDraft(data)) {
+                    FormShowParameter showParameter = new FormShowParameter();
+                    showParameter.setAppId("cas");
+                    showParameter.setFormId("cas_receiver_selectdraft");
+                    showParameter.setCustomParam("recBillId", data.getPkValue());
+                    showParameter.getOpenStyle().setShowType(ShowType.Modal);
+                    showParameter.setCloseCallBack(new CloseCallBack(this, "CALLBACK_SELECTDRAFT"));
+                    this.getView().showForm(showParameter);
+                    args.setCancel(true);
+                }
+            }
+        }
+
+        if (Arrays.asList("unaudit", "chargeback", "delete", "receivingrec").contains(operateKey) && PayBillHepler.getViewSettle(this.getModel().getDataEntity()).size() > 0) {
+            this.getView().showErrorNotification(String.format(ResManager.loadKDString("%s已存在结算记录,导致操作失败。如需继续执行操作,请先反结算。", "PaymentBillList_36", "fi-cas-formplugin", new Object[0]), ""));
+            args.setCancel(true);
+        }
+
+    }
+
+    public void afterDoOperation(AfterDoOperationEventArgs arg) {
+        super.afterDoOperation(arg);
+        String operateKey = arg.getOperateKey();
+        OperationResult operationResult = arg.getOperationResult();
+        if ("beforesubmit".equals(operateKey) && operationResult != null && operationResult.isSuccess()) {
+            DynamicObject dataEntity = this.getModel().getDataEntity();
+            RecWarningHelper.submitValidate(dataEntity, this);
+        }
+
+        if ("receivingrec".equals(operateKey) && operationResult != null && operationResult.isSuccess()) {
+            this.getView().invokeOperation("refresh", OperateOption.create());
+            long payer = (Long)this.getModel().getValue("payer");
+            String payerType = (String)this.getModel().getValue("payertype");
+            Object companyId = null;
+            boolean showSuccess = Boolean.FALSE;
+            QFilter filter;
+            DynamicObject currentPeriod;
+            DynamicObject internal_company;
+            if (AsstActTypeEnum.SUPPLIER.getValue().equals(payerType)) {
+                filter = new QFilter("id", "in", payer);
+                currentPeriod = BusinessDataServiceHelper.loadSingle(AsstActTypeEnum.SUPPLIER.getValue(), "id,internal_company", filter.toArray());
+                internal_company = currentPeriod.getDynamicObject("internal_company");
+                if (CasHelper.isEmpty(internal_company)) {
+                    logger.info("====SUPPLIER非内部客商。");
+                    showSuccess = Boolean.TRUE;
+                } else {
+                    companyId = internal_company.getPkValue();
+                }
+            } else if (AsstActTypeEnum.CUSTOMER.getValue().equals(payerType)) {
+                filter = new QFilter("id", "in", payer);
+                currentPeriod = BusinessDataServiceHelper.loadSingle(AsstActTypeEnum.CUSTOMER.getValue(), "id,internal_company", filter.toArray());
+                internal_company = currentPeriod.getDynamicObject("internal_company");
+                if (CasHelper.isEmpty(internal_company)) {
+                    showSuccess = Boolean.TRUE;
+                } else {
+                    companyId = internal_company.getPkValue();
+                }
+            } else if (AsstActTypeEnum.COMPANY.getValue().equals(payerType)) {
+                companyId = payer;
+            } else {
+                showSuccess = Boolean.TRUE;
+            }
+
+            if (showSuccess) {
+                this.getView().showSuccessNotification(ResManager.loadKDString("确认收款成功。", "ReceivingBillEdit_38", "fi-cas-formplugin", new Object[0]));
+                return;
+            }
+
+            if (EmptyUtil.isNoEmpty(companyId)) {
+                Date bizDate = (Date)this.getModel().getValue("bizdate");
+                currentPeriod = SystemStatusCtrolHelper.getCurrentPeriod((Long)companyId);
+                if (EmptyUtil.isNoEmpty(bizDate) && EmptyUtil.isNoEmpty(currentPeriod) && bizDate.before(currentPeriod.getDate("begindate"))) {
+                    Object CS048 = SystemParameterHelper.getCASParamByOrgIds((Long)companyId, "cs048");
+                    if (EmptyUtil.isNoEmpty(CS048)) {
+                        boolean isCheck = (Boolean)CS048;
+                        if (isCheck) {
+                            Object allowObj = SystemParameterHelper.getCASParamByOrgIds((Long)companyId, "cs103");
+                            if (EmptyUtil.isNoEmpty(allowObj)) {
+                                boolean allow = (Boolean)allowObj;
+                                if (!allow) {
+                                    this.getView().showTipNotification(ResManager.loadKDString("确认收款成功。因付款方设置不允许新增已结账期间的付款业务,因此收付协同生成付款单失败。", "ReceivingBillEdit_37", "fi-cas-formplugin", new Object[0]));
+                                } else {
+                                    logger.info("CS103:{}", allowObj);
+                                    this.getView().showSuccessNotification(ResManager.loadKDString("确认收款成功。", "ReceivingBillEdit_38", "fi-cas-formplugin", new Object[0]));
+                                }
+                            }
+                        } else {
+                            logger.info("CS048:{}", CS048);
+                            this.getView().showSuccessNotification(ResManager.loadKDString("确认收款成功。", "ReceivingBillEdit_38", "fi-cas-formplugin", new Object[0]));
+                        }
+                    } else {
+                        logger.info("CS048:{}", CS048);
+                        this.getView().showSuccessNotification(ResManager.loadKDString("确认收款成功。", "ReceivingBillEdit_38", "fi-cas-formplugin", new Object[0]));
+                    }
+                } else {
+                    logger.info("currentPeriod:{}", currentPeriod);
+                    this.getView().showSuccessNotification(ResManager.loadKDString("确认收款成功。", "ReceivingBillEdit_38", "fi-cas-formplugin", new Object[0]));
+                }
+            }
+        }
+
+        if ("copyentryrow".equals(operateKey)) {
+            this.calculateAmt();
+        }
+
+        if ("newentry".equals(operateKey)) {
+            boolean multireceivingtype = this.getModel().getDataEntity().getBoolean("multireceivingtype");
+            DynamicObject receivingtype = this.getModel().getDataEntity().getDynamicObject("receivingtype");
+            if (!multireceivingtype) {
+                int index = this.getModel().getEntryRowCount("entry") - 1;
+                this.getModel().setValue("e_receivingtype", receivingtype, index);
+            }
+        }
+
+        if (operationResult != null && operationResult.isSuccess()) {
+            String billStatus = (String)this.getModel().getValue("billstatus");
+            if (!BillStatusEnum.SAVE.getValue().equals(billStatus)) {
+                this.getView().setVisible(false, new String[]{"changepayee", "changepayer"});
+            } else {
+                Object sourceBillType = this.getModel().getValue("sourcebilltype");
+                if ("nckd_cas_recbill_xz".equals(sourceBillType)) {
+                    this.getView().setVisible(false, new String[]{"changepayer"});
+                    this.getView().setVisible(true, new String[]{"changepayee"});
+                } else if ("cas_paybill".equals(sourceBillType)) {
+                    this.getView().setVisible(false, new String[]{"changepayee", "changepayer"});
+                } else {
+                    this.getView().setVisible(true, new String[]{"changepayee", "changepayer"});
+                }
+            }
+
+            if ("submit".equals(operateKey) || "unsubmit".equals(operateKey) || "unaudit".equals(operateKey)) {
+                this.controlRecAmt();
+            }
+
+            if ("save".equals(operateKey) || "submit".equals(operateKey)) {
+                this.getView().updateView("multireceivingtype");
+                this.getView().updateView("receivingtype");
+
+                for(int i = 0; i < this.getModel().getEntryRowCount("entry"); ++i) {
+                    this.getView().updateView("e_receivingtype", i);
+                    this.getView().updateView("e_settleorg", i);
+                }
+            }
+
+            this.fillToolBar();
+        }
+
+    }
+
+    public void itemClick(ItemClickEvent evt) {
+        super.itemClick(evt);
+        String key = evt.getItemKey().toLowerCase();
+        if ("bar_cancelrec".equals(key)) {
+            this.cancelRec();
+        } else if ("viewarsettle".equals(key)) {
+            this.viewArSettle();
+        } else if ("viewdrafbill".equals(key)) {
+            this.viewDrafBill();
+        }
+
+    }
+
+    private void viewDrafBill() {
+        DynamicObjectCollection draftBills = (DynamicObjectCollection)this.getModel().getValue("draftbill");
+        if (draftBills != null && draftBills.size() > 0) {
+            Set<Long> idSet = new HashSet();
+            Iterator var3 = draftBills.iterator();
+
+            while(var3.hasNext()) {
+                DynamicObject draftBill = (DynamicObject)var3.next();
+                idSet.add(((DynamicObject)draftBill.get("fbasedataid")).getLong("id"));
+            }
+
+            ListShowParameter parameter = new ListShowParameter();
+            parameter.setBillFormId("cdm_payandrecdraft_f7");
+            parameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
+            parameter.setLookUp(true);
+            QFilter qFilter = new QFilter("id", "in", idSet);
+            parameter.getListFilterParameter().getQFilters().add(qFilter);
+            this.getView().showForm(parameter);
+        } else {
+            this.getView().showTipNotification(ResManager.loadKDString("暂无关联的票据记录。", "PaymentBillDraftEditPlugin_9", "fi-cas-formplugin", new Object[0]));
+        }
+    }
+
+    public void cancelRec() {
+        String billno = (String)this.getModel().getValue("billno");
+        DynamicObject recObj = BusinessDataServiceHelper.loadSingle("nckd_cas_recbill_xz", "id,billno,isvoucher,billstatus,receivingtype", new QFilter[]{new QFilter("billno", "=", billno)});
+        String billstatus = recObj.getString("billstatus");
+        if (!billstatus.equals("D")) {
+            this.getView().invokeOperation("cancelrec");
+        } else {
+            Object org = this.getModel().getValue("org");
+            if (org != null) {
+                int CS114 = SystemParameterHelper.getParameterInteger(((DynamicObject)org).getLong("id"), "cs114");
+                Boolean isv = recObj.getBoolean("isvoucher");
+                if (3 == CS114 && isv) {
+                    this.getView().showConfirm(String.format(ResManager.loadKDString("“%s”单据已经生成凭证,是否继续取消收款?", "ReceivingBillEdit_10", "fi-cas-formplugin", new Object[0]), billno), MessageBoxOptions.YesNo, ConfirmTypes.Default, new ConfirmCallBackListener("CONFIRM_CANCELREC_CALLBACK", this));
+                } else if (!CasPluginHelper.cancelCheckSettleForRec(this, this.getView(), recObj)) {
+                    this.getView().invokeOperation("cancelrec");
+                }
+
+                this.getView().updateView("entry");
+                this.getView().updateView("flex_amountinfo");
+            }
+        }
+    }
+
+    private void fillToolBar() {
+        boolean isSuppleContract = (Boolean)this.getModel().getValue("issupplecontract");
+        boolean isOrgsDivide = (Boolean)this.getModel().getValue("isorgsdivide");
+        String sourceBillType = (String)this.getModel().getValue("sourcebilltype");
+        if (!isSuppleContract && !isOrgsDivide && !"pmct_incomeapply".equals(sourceBillType)) {
+            this.getView().setVisible(false, new String[]{"contractnumber"});
+        }
+
+        if (!isSuppleContract && !isOrgsDivide) {
+            this.getView().setVisible(false, new String[]{"bar_new", "bar_save", "bar_submit", "bar_unsubmit", "bar_submitandnew", "bar_del", "bar_audit", "bar_unaudit", "bar_rec", "bar_cancelrec", "genvoucher", "deletevoucher", "addrow", "copyentryrow", "deleterow", "moveentrydown", "moveentryup"});
+            String billStatus = this.getModel().getDataEntity().getString("billstatus");
+            if (billStatus.equals(BillStatusEnum.SAVE.getValue())) {
+                this.getView().setVisible(true, new String[]{"changepayee", "changepayer"});
+                if ("nckd_cas_recbill_xz".equals(sourceBillType)) {
+                    this.getView().setVisible(false, new String[]{"changepayer"});
+                } else if ("cas_paybill".equals(sourceBillType)) {
+                    this.getView().setVisible(false, new String[]{"changepayee", "changepayer"});
+                }
+
+                this.getView().setVisible(true, new String[]{"bar_save", "bar_submit", "bar_del", "addrow", "copyentryrow", "deleterow", "moveentrydown", "moveentryup"});
+            } else if (billStatus.equals(BillStatusEnum.SUBMIT.getValue())) {
+                this.getView().setVisible(false, new String[]{"changepayee", "changepayer"});
+                this.getView().setVisible(true, new String[]{"bar_unsubmit", "bar_audit"});
+            } else if (billStatus.equals(BillStatusEnum.AUDIT.getValue())) {
+                this.getView().setVisible(false, new String[]{"changepayee", "changepayer"});
+                this.getView().setVisible(true, new String[]{"bar_unaudit", "bar_rec", "genvoucher", "deletevoucher"});
+            } else if (billStatus.equals("D")) {
+                this.getView().setVisible(false, new String[]{"changepayee", "changepayer"});
+                this.getView().setVisible(true, new String[]{"bar_cancelrec", "genvoucher", "deletevoucher", "baritemap"});
+            }
+        }
+
+    }
+
+    private void setPayeeInfo4Lb() {
+        DynamicObject org = this.getDynamicObject("org");
+        ((Label)this.getControl("orgv")).setText(CasHelper.getLocalValue(org, "name"));
+        Image orgPic = (Image)this.getControl("orgpic");
+        String defaultUrl = "/icons/pc/entrance/cn_sk_80_80.png";
+        orgPic.setUrl(defaultUrl);
+        boolean isCash = BaseDataHelper.isSettleTypeCash((DynamicObject)this.getModel().getValue("settletype"));
+        DynamicObject payerAcctBank = this.getDynamicObject("accountbank");
+        DynamicObject accountCash = this.getDynamicObject("accountcash");
+        String v_payeebanknum = "";
+        if (isCash && accountCash != null) {
+            v_payeebanknum = accountCash.getString("number");
+        }
+
+        if (!isCash && payerAcctBank != null) {
+            v_payeebanknum = kd.fi.cas.util.StringUtils.splitString(payerAcctBank.getString("bankaccountnumber"), 4, " ");
+        }
+
+        ((Label)this.getControl("payeebanknumv")).setText(v_payeebanknum);
+        DynamicObject payerBank = this.getDynamicObject("payeebank");
+        String v_payerbankname = "";
+        if (payerBank != null) {
+            v_payerbankname = CasHelper.getLocalValue(payerBank, "name");
+        }
+
+        ((Label)this.getControl("payeebanknamev")).setText(v_payerbankname);
+        this.getView().setVisible(!isCash, new String[]{"payerbanknamelb", "payeebanknamev"});
+    }
+
+    protected String recPayAccount() {
+        return "accountbank";
+    }
+
+    public void afterAddRow(AfterAddRowEventArgs e) {
+        super.afterAddRow(e);
+        EntryProp entryProp = e.getEntryProp();
+        boolean multireceivingtype = (Boolean)this.getModel().getValue("multireceivingtype");
+        DynamicObject receivingtype = (DynamicObject)this.getModel().getValue("receivingtype");
+        if ("entry".equals(entryProp.getName())) {
+            RowDataEntity[] rows = e.getRowDataEntities();
+            RowDataEntity[] var6 = rows;
+            int var7 = rows.length;
+
+            for(int var8 = 0; var8 < var7; ++var8) {
+                RowDataEntity row = var6[var8];
+                if (row.getDataEntity().get("e_settleorg") == null) {
+                    this.setSettleValue(row.getRowIndex());
+                }
+
+                if (!multireceivingtype) {
+                    this.getModel().setValue("e_receivingtype", receivingtype, row.getRowIndex());
+                }
+            }
+        }
+
+        this.controlRecAmt();
+    }
+
+    public void beforeItemClick(BeforeItemClickEvent evt) {
+        String opKey = evt.getOperationKey();
+        if ("delete".equals(opKey)) {
+            if ("cas_paybill".equals(this.getString("sourcebilltype"))) {
+                evt.setCancel(true);
+                String billno = this.getString("billno");
+                this.getView().showConfirm(String.format(ResManager.loadKDString("%s收款单由内部收付协同业务自动生成,是否确认删除?", "ReceivingBillEdit_19", "fi-cas-formplugin", new Object[0]), billno), MessageBoxOptions.YesNo, ConfirmTypes.Default, new ConfirmCallBackListener("CONFIRM_DEL_CALLBACK", this));
+            }
+
+            DynamicObject dataEntity = this.getModel().getDataEntity();
+            boolean isvirtual = dataEntity.getBoolean("isvirtual");
+            if ("nckd_cas_recbill_xz".equals(this.getString("sourcebilltype")) && isvirtual) {
+                evt.setCancel(true);
+                String billno = dataEntity.getString("billno");
+                this.getView().showConfirm(String.format(ResManager.loadKDString("%s虚拟收款单由组织间清分业务触发自动下推的单据,请确认是否删除?", "ReceivingBillEdit_33", "fi-cas-formplugin", new Object[0]), billno), MessageBoxOptions.YesNo, ConfirmTypes.Default, new ConfirmCallBackListener("CONFIRM_DELETE_CALLBACK", this));
+            }
+        }
+
+    }
+
+    private void setSettleValue(int index) {
+        DynamicObject recOrg = this.getModel().getDataEntity().getDynamicObject("org");
+        recOrg = BusinessDataServiceHelper.loadSingle(recOrg.getPkValue(), recOrg.getDynamicObjectType().getName(), "fisaccounting");
+        if (recOrg.getBoolean("fisaccounting")) {
+            this.getModel().setValue("e_settleorg", this.getValue("org"), index);
+        } else {
+            DynamicObject recAccount = this.getModel().getDataEntity().getDynamicObject("accountbank");
+            if (recAccount != null) {
+                this.getModel().setValue("e_settleorg", recAccount.get("openorg"), index);
+            }
+        }
+    }
+
+    private void viewArSettle() {
+        Long billId = (Long)this.getModel().getDataEntity().getPkValue();
+        if (billId == 0L) {
+            this.getView().showTipNotification(ResManager.loadKDString("暂无结算记录。", "ReceivingBillList_2", "fi-cas-formplugin", new Object[0]));
+        } else {
+            Set<Long> mainSettleIds = SettleRecordQueryHelperForCas.getSettleIdsByMain("ar_settlerecord", "nckd_cas_recbill_xz", new Object[]{billId});
+            Set<Long> asstSettleIds = SettleRecordQueryHelperForCas.getSettleIdsByAsst("ar_settlerecord", "nckd_cas_recbill_xz", new Object[]{billId});
+            Set<Long> settleRecordIds = new HashSet();
+            settleRecordIds.addAll(mainSettleIds);
+            settleRecordIds.addAll(asstSettleIds);
+            if (settleRecordIds.size() > 0) {
+                ListShowParameter parameter = new ListShowParameter();
+                parameter.setBillFormId("ar_settlerecord");
+                parameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
+                ListFilterParameter param = new ListFilterParameter();
+                param.setFilter(new QFilter("id", "in", settleRecordIds));
+                parameter.setListFilterParameter(param);
+                parameter.setCustomParam("checkKey", true);
+                this.getView().showForm(parameter);
+            } else {
+                this.getView().showTipNotification(ResManager.loadKDString("暂无结算记录。", "ReceivingBillList_2", "fi-cas-formplugin", new Object[0]));
+            }
+
+        }
+    }
+
+    private boolean isHwControl() {
+        return this.getPageCache().getAll().containsKey("isHwControl");
+    }
+
+    private void fillFundflowItem(boolean isCover) {
+        for(int i = 0; i < this.getModel().getEntryRowCount("entry"); ++i) {
+            DynamicObject e_receivingtype = (DynamicObject)this.getModel().getValue("e_receivingtype", i);
+            if (!EmptyUtil.isEmpty(e_receivingtype)) {
+                DynamicObject fundflowitem = e_receivingtype.getDynamicObject("fundflowitem");
+                if (!EmptyUtil.isEmpty(fundflowitem)) {
+                    if (isCover) {
+                        this.setValue("e_fundflowitem", fundflowitem.getPkValue(), i);
+                    } else {
+                        this.setValueIfAbsent("e_fundflowitem", fundflowitem.getPkValue(), i);
+                    }
+                }
+            }
+        }
+
+    }
+
+    private boolean hasPayerInfo() {
+        Long payerId = Long.parseLong(this.getValue("payer") == null ? "0" : this.getValue("payer").toString());
+        String payertype = this.getString("payertype");
+        if (AsstActTypeEnum.OTHER.getValue().equals(payertype)) {
+            return !kd.fi.cas.util.StringUtils.isBlank(this.getString("payername"));
+        } else {
+            return CasHelper.isNotEmpty(payerId);
+        }
+    }
+
+    private void setIFilters(ListFilterParameter lfp, DynamicObject recBill) {
+        logger.info("开始进行二开扩展字段对外服务业务埋点 - kd.sdk.fi.cas.extpoint.recbill.IRecbillFilter");
+        PluginProxy<IRecbillFilter> pluginProxy = PluginProxy.create(IRecbillFilter.class, "fi.cas.filter.recbill");
+        pluginProxy.callReplace((proxy) -> {
+            proxy.setIFilters(lfp, recBill);
+            return null;
+        });
+    }
+
+    private void resetExrateTableWhenSwitchOrg(Object newValue) {
+        if (EmptyUtil.isNoEmpty(newValue)) {
+            DynamicObject org = (DynamicObject)newValue;
+            long orgId = org.getLong("id");
+            if (EmptyUtil.isNoEmpty(orgId)) {
+                long exchangeRateTableId = SystemStatusCtrolHelper.getExrateTable(orgId).getLong("id");
+                this.getModel().setValue("exratetable", exchangeRateTableId);
+            }
+        }
+
+    }
+}

+ 982 - 0
src/main/java/fi/cas/formplugin/RecBillListPlugin.java

@@ -0,0 +1,982 @@
+package fi.cas.formplugin;
+
+import com.alibaba.fastjson.JSON;
+import kd.bos.bill.BillOperationStatus;
+import kd.bos.bill.BillShowParameter;
+import kd.bos.bill.OperationStatus;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.OperateOption;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.dataentity.resource.ResManager;
+import kd.bos.dataentity.serialization.SerializationUtils;
+import kd.bos.dataentity.utils.StringUtils;
+import kd.bos.entity.AppMetadataCache;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.datamodel.ListSelectedRow;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.entity.param.AppParam;
+import kd.bos.exception.KDBizException;
+import kd.bos.ext.tmc.utils.commitToBe.enums.TmcAppEnum;
+import kd.bos.filter.FilterColumn;
+import kd.bos.form.*;
+import kd.bos.form.control.events.BeforeItemClickEvent;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.form.events.*;
+import kd.bos.form.operate.AbstractOperate;
+import kd.bos.list.BillList;
+import kd.bos.list.IListView;
+import kd.bos.list.ListShowParameter;
+import kd.bos.list.events.BeforeShowBillFormEvent;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.mvc.list.ListView;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.MetadataServiceHelper;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.servicehelper.parameter.SystemParamServiceHelper;
+import kd.fi.cas.business.errorcode.ReceivErrorCode;
+import kd.fi.cas.business.helper.ManualMatchHelper;
+import kd.fi.cas.business.helper.RecDraftHelper;
+import kd.fi.cas.business.paywarning.RecWarningHelper;
+import kd.fi.cas.enums.*;
+import kd.fi.cas.formplugin.helper.InitCheckPluginHelper;
+import kd.fi.cas.formplugin.refund.log.RefundLogExecutor;
+import kd.fi.cas.helper.*;
+import kd.fi.cas.util.EmptyUtil;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class RecBillListPlugin extends AbstractListPlugin {
+    private static final String KEY_CALLBACK_RECCHARGEBACK = "CALLBACK_RECCHARGEBACK";
+    private static final String CONFIRM_DEL_CALLBACK = "CONFIRM_DEL_CALLBACK";
+    private static final String CONFIRM_DELETE_CALLBACK = "CONFIRM_DELETE_CALLBACK";
+    private static final String KEY_CLOSECALLBACK_CHARGEBACK = "CALLBACK_SELECTDRAFT";
+    private FilterContainerInitArgs initArgs;
+    private static final String BAR_BATCH_INPUT = "batchinput";
+    private RefundLogExecutor refundLogExecutor;
+
+    public RecBillListPlugin() {
+    }
+
+    public void filterContainerInit(FilterContainerInitArgs args) {
+        super.filterContainerInit(args);
+        this.initArgs = args;
+        ListShowParameter listShowParameter = (ListShowParameter)this.getView().getFormShowParameter();
+        Object isFromDraftBill = listShowParameter.getCustomParams().getOrDefault("isFromDraftBill", (Object)null);
+        Iterator var4;
+        FilterColumn filterColumn;
+        if (null == this.getCachedOrgList()) {
+            var4 = args.getCommonFilterColumns().iterator();
+
+            while(var4.hasNext()) {
+                filterColumn = (FilterColumn)var4.next();
+                if ("org.id".equals(filterColumn.getFieldName())) {
+                    List<Object> defaultValues = filterColumn.getDefaultValues();
+                    if (null != defaultValues && defaultValues.size() > 0) {
+                        List<Long> selectedOrgIdList = (List)defaultValues.stream().filter((t) -> {
+                            return StringUtils.isNotEmpty(t.toString());
+                        }).map((item) -> {
+                            return Long.valueOf(item.toString());
+                        }).collect(Collectors.toList());
+                        this.cacheSelectedOrgIdList(selectedOrgIdList);
+                    }
+                }
+            }
+        }
+
+        if (CasPluginHelper.isTrack(this.getView().getFormShowParameter())) {
+            var4 = args.getCommonFilterColumns().iterator();
+
+            while(var4.hasNext()) {
+                filterColumn = (FilterColumn)var4.next();
+                if ("org.id".equals(filterColumn.getFieldName())) {
+                    filterColumn.setDefaultValue("");
+                } else if ("billstatus".equals(filterColumn.getFieldName())) {
+                    filterColumn.setDefaultValues(new Object[]{""});
+                } else if ("bizdate".equals(filterColumn.getFieldName())) {
+                    filterColumn.setDefaultValue("");
+                }
+            }
+        }
+
+        if (EmptyUtil.isNoEmpty(isFromDraftBill) && isFromDraftBill.toString().trim().equals("Y")) {
+            CasPluginHelper.getCasQFilter(listShowParameter, args);
+        }
+
+        this.fillToolBar();
+    }
+
+    public void filterContainerSearchClick(FilterContainerSearchClickArgs args) {
+        super.filterContainerSearchClick(args);
+        List<Long> selectedOrgIdList = args.getSelectMainOrgIds();
+        if (selectedOrgIdList.size() > 0) {
+            List<Object> cachedOrgList = this.getCachedOrgList();
+            if (null == cachedOrgList || !cachedOrgList.toString().equals(selectedOrgIdList.toString())) {
+                this.cacheSelectedOrgIdList(selectedOrgIdList);
+                this.filterContainerInit(this.initArgs);
+            }
+        }
+
+    }
+
+    private void cacheSelectedOrgIdList(List<Long> selectedOrgIdList) {
+        if (selectedOrgIdList != null) {
+            this.getPageCache().put("selectedOrgIdList", SerializationUtils.toJsonString(selectedOrgIdList));
+        } else {
+            this.getPageCache().put("selectedOrgIdList", (String)null);
+        }
+
+    }
+
+    protected List<Object> getCachedOrgList() {
+        return this.getPageCache().get("selectedOrgIdList") != null ? (List)SerializationUtils.fromJsonString(this.getPageCache().get("selectedOrgIdList"), List.class) : null;
+    }
+
+    private void fillToolBar() {
+        this.getView().setVisible(false, new String[]{"recbook"});
+        List<Object> tempList = this.getCachedOrgList();
+        if (tempList != null && tempList.size() != 0) {
+            List<Long> cachedOrgList = (List)this.getCachedOrgList().stream().map((item) -> {
+                return Long.valueOf(item.toString());
+            }).collect(Collectors.toList());
+            Iterator var3 = cachedOrgList.iterator();
+
+            boolean isdraft;
+            boolean ischeck;
+            boolean ispromissorynote;
+            do {
+                if (!var3.hasNext()) {
+                    return;
+                }
+
+                Long orgId = (Long)var3.next();
+                isdraft = SystemParameterHelper.getCdmParameterBoolean(orgId, "isdraft");
+                ischeck = SystemParameterHelper.getCdmParameterBoolean(orgId, "ischeck");
+                ispromissorynote = SystemParameterHelper.getCdmParameterBoolean(orgId, "ispromissorynote");
+            } while(!isdraft && !ischeck && !ispromissorynote);
+
+            this.getView().setVisible(true, new String[]{"recbook"});
+        } else {
+            this.getView().setVisible(true, new String[]{"recbook"});
+        }
+    }
+
+    public void itemClick(ItemClickEvent evt) {
+        super.itemClick(evt);
+        String key = evt.getItemKey();
+        switch (key.toLowerCase(Locale.ENGLISH)) {
+            case "salesrec":
+                this.addNew(RecTypeEnum.SalesRec);
+                break;
+            case "otherrec":
+                this.addNew(RecTypeEnum.OtherRec);
+                break;
+            case "transcompany":
+                this.transCompany(evt);
+                break;
+            case "tbloffset":
+                this.offset();
+                break;
+            case "viewarsettle":
+                CasPluginHelper.viewSettleForRec((BillList)this.getControl("billlistap"), this.getView());
+                break;
+            case "cancelrec":
+                this.cancelrec();
+                break;
+            case "tblsubmit":
+                this.beforeSubmit();
+                break;
+            case "viewdrafbill":
+                CasPluginHelper.viewDrafBill((BillList)this.getControl("billlistap"), this.getView(), "nckd_cas_recbill_xz");
+                break;
+            case "batchinput":
+                CasPluginHelper.viewBatchInput(this.getView(), "cas_batchrecbill");
+        }
+
+    }
+
+    private void beforeSubmit() {
+        BillList billList = (BillList)this.getControl("billlistap");
+        ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+        if (selectedRows.size() > 0) {
+            List<Object> rowIds = new ArrayList(selectedRows.size());
+            selectedRows.forEach((row) -> {
+                rowIds.add(row.getPrimaryKeyValue());
+            });
+            List<DynamicObject> resultList = RecWarningHelper.getResultByPkIds(rowIds);
+            if (resultList != null && resultList.size() > 0) {
+                FormShowParameter parameter = new FormShowParameter();
+                parameter.getOpenStyle().setShowType(ShowType.Modal);
+                parameter.setFormId("cas_recwarnmsg");
+                parameter.setStatus(OperationStatus.VIEW);
+                parameter.setCustomParam("sumAll", selectedRows.size());
+                parameter.setCustomParam("sumWarn", resultList.size());
+                parameter.setCloseCallBack(new CloseCallBack(this, "beforeSubmit"));
+                this.getView().showForm(parameter);
+            } else {
+                this.getView().invokeOperation("submit");
+            }
+        }
+
+    }
+
+    private void suppleContractOrOrgsDivide(String opName) {
+        BillList billList = (BillList)this.getView().getControl("billlistap");
+        ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+        if (CasHelper.getSelectedRowSize(selectedRows) != 1) {
+            this.getView().showErrorNotification(ResManager.loadKDString("请选中一行再进行操作。", "ReceivingBillList_25", "fi-cas-formplugin", new Object[0]));
+        } else {
+            ListSelectedRow currentSelectedRowInfo = selectedRows.get(0);
+            String billStatus = currentSelectedRowInfo.getBillStatus();
+            if (!"D".equals(billStatus)) {
+                if ("supplecontract".equals(opName)) {
+                    this.getView().showErrorNotification(ResManager.loadKDString("单据状态不符合,不能进行此操作。", "ReceivingBillList_26", "fi-cas-formplugin", new Object[0]));
+                } else if ("orgsdivide".equals(opName)) {
+                    this.getView().showErrorNotification(ResManager.loadKDString("只有单据状态为已收款,才能操作组织间清分。", "ReceivingBillList_35", "fi-cas-formplugin", new Object[0]));
+                }
+
+            } else {
+                Object primaryKeyValue = currentSelectedRowInfo.getPrimaryKeyValue();
+                DynamicObject recbillDO = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "nckd_cas_recbill_xz", "receivingtype,settletype,actrecamt");
+                DynamicObject receivingtype = recbillDO.getDynamicObject("receivingtype");
+                boolean ispartreceivable = false;
+                if (CasHelper.isNotEmpty(receivingtype)) {
+                    ispartreceivable = receivingtype.getBoolean("ispartreceivable");
+                }
+
+                if (!ispartreceivable) {
+                    this.getView().showErrorNotification(ResManager.loadKDString("此单据收款类型没有参与应收结算,不能进行此操作。", "ReceivingBillList_27", "fi-cas-formplugin", new Object[0]));
+                } else if (BigDecimal.ZERO.compareTo(recbillDO.getBigDecimal("actrecamt")) > 0) {
+                    this.getView().showErrorNotification(ResManager.loadKDString("此单据收款金额为负数,不能进行此操作。", "ReceivingBillList_32", "fi-cas-formplugin", new Object[0]));
+                } else {
+                    BillShowParameter showParameter = new BillShowParameter();
+                    showParameter.setCustomParam("supcontractOrOrgsdivide", opName);
+                    showParameter.setPkId(primaryKeyValue);
+                    showParameter.setFormId("cas_recbill_supdevide");
+                    showParameter.setCaption(ResManager.loadKDString("收款单", "ReceivingBillList_28", "fi-cas-formplugin", new Object[0]));
+                    showParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
+                    this.getView().showForm(showParameter);
+                }
+            }
+        }
+    }
+
+    public void closedCallBack(ClosedCallBackEvent e) {
+        super.closedCallBack(e);
+        if ("listoperation".equals(e.getActionId())) {
+            this.getView().invokeOperation("refresh");
+        } else if ("refund".equals(e.getActionId())) {
+            ((ListView)this.getView()).refresh();
+        } else {
+            OperateOption option;
+            if (StringUtils.equals(e.getActionId(), "beforeSubmit")) {
+                Object returnData = e.getReturnData();
+                if (returnData != null) {
+                    if ((Boolean)returnData) {
+                        this.getView().invokeOperation("submit");
+                    } else {
+                        option = OperateOption.create();
+                        option.setVariableValue("isTrue", String.valueOf(returnData));
+                        this.getView().invokeOperation("warnsubmit", option);
+                        this.getView().invokeOperation("refresh");
+                    }
+                } else {
+                    this.getView().invokeOperation("warnsubmit");
+                    this.getView().invokeOperation("refresh");
+                }
+            } else if (StringUtils.equals(e.getActionId(), "CALLBACK_RECCHARGEBACK")) {
+                Map<String, Object> data = (Map)e.getReturnData();
+                if (null != data) {
+                    option = OperateOption.create();
+                    option.setVariableValue("billid", String.valueOf(data.get("billid")));
+                    option.setVariableValue("reason", String.valueOf(data.get("reason")));
+                    option.setVariableValue("entityname", "nckd_cas_recbill_xz");
+                    OperationResult recchargebackwrite = this.getView().invokeOperation("recchargebackwrite", option);
+                    if (recchargebackwrite.isSuccess()) {
+                        this.getView().showSuccessNotification(ResManager.loadKDString("退单成功。", "ReceivingBillList_29", "fi-cas-formplugin", new Object[0]));
+                        this.getView().invokeOperation("refresh");
+                    }
+                }
+            } else if (StringUtils.equals(e.getActionId(), "CALLBACK_SELECTDRAFT")) {
+                Map<String, Object> returnData = (HashMap)e.getReturnData();
+                if (null != returnData) {
+                    Object draftIdList = returnData.get("draftBillIdList");
+                    Object recBillId = returnData.get("recBillId");
+                    if (draftIdList != null) {
+                        this.displayDraftInfo(draftIdList, recBillId);
+                        option = OperateOption.create();
+                        option.setVariableValue("draftids", JSON.toJSONString(draftIdList));
+                        option.setVariableValue("selectdraft", "true");
+                        this.getView().invokeOperation("receivingrec", option);
+                    }
+                }
+            }
+        }
+
+    }
+
+    private void displayDraftInfo(Object draftIdList, Object recBillId) {
+        if (!EmptyUtil.isEmpty(draftIdList) || !EmptyUtil.isEmpty(recBillId)) {
+            DynamicObject recBill = BusinessDataServiceHelper.loadSingle((Long)recBillId, "nckd_cas_recbill_xz");
+            if (!EmptyUtil.isEmpty(recBill)) {
+                DynamicObjectCollection draftInfoEntrys = recBill.getDynamicObjectCollection("cas_draftinfo");
+                List<Object> draftIds = (List)draftIdList;
+                DynamicObject[] draftBills = BusinessDataServiceHelper.load(draftIds.toArray(), EntityMetadataCache.getDataEntityType("cdm_draftbillf7"));
+
+                for(int i = 0; i < draftBills.length; ++i) {
+                    DynamicObject newEntry = draftInfoEntrys.addNew();
+                    newEntry.set("draftbillinfo", draftBills[i].getLong("id"));
+                    newEntry.set("recbillcurrency", draftBills[i].getDynamicObject("currency").getLong("id"));
+                    newEntry.set("transamount", draftBills[i].getBigDecimal("availableamount"));
+                    newEntry.set("draftbilllogid", 0);
+                    newEntry.set("srcbilltype", "nckd_cas_recbill_xz");
+                    newEntry.set("srcbillindex", 1);
+                }
+
+                SaveServiceHelper.save(new DynamicObject[]{recBill});
+            }
+
+        }
+    }
+
+    private void offset() {
+        BillList list = (BillList)this.getView().getControl("billlistap");
+        ListSelectedRowCollection selectedRows = list.getSelectedRows();
+        if (selectedRows != null) {
+            Object[] pks = selectedRows.getPrimaryKeyValues();
+            if (pks.length <= 0) {
+                this.getView().showErrorNotification(ResManager.loadKDString("没有选择任何数据,请先选择数据。", "ReceivingBillList_4", "fi-cas-formplugin", new Object[0]));
+            } else if (pks.length > 1) {
+                this.getView().showErrorNotification(ResManager.loadKDString("不支持批量操作,请重新选择数据。", "ReceivingBillList_5", "fi-cas-formplugin", new Object[0]));
+            } else {
+                this.getPageCache().put("operate", OperateTypeEnum.OFFSET.name());
+                this.getView().invokeOperation("copy");
+                this.getPageCache().remove("operate");
+            }
+        } else {
+            this.getView().showErrorNotification(ResManager.loadKDString("没有选择任何数据,请先选择数据。", "ReceivingBillList_4", "fi-cas-formplugin", new Object[0]));
+        }
+
+    }
+
+    private void transCompany(ItemClickEvent evt) {
+        BillList billList = (BillList)this.getControl("billlistap");
+        ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+        if (CasHelper.getSelectedRowSize(selectedRows) != 1) {
+            this.getView().showErrorNotification(ResManager.loadKDString("请选择一条记录进行指定实际收款公司操作。", "ReceivingBillList_6", "fi-cas-formplugin", new Object[0]));
+        } else {
+            String appId = this.getView().getFormShowParameter().getAppId();
+            if (EmptyUtil.isNotEmpty(appId)) {
+                appId = AppMetadataCache.getAppInfo(appId).getId();
+            } else {
+                appId = AppMetadataCache.getAppInfo("cas").getId();
+            }
+
+            List<Long> orgList = OrgHelper.getAuthorizedBankOrgId(Long.valueOf(RequestContext.get().getUserId()), appId, "nckd_cas_recbill_xz", "4715a0df000000ac");
+            if (orgList != null && orgList.size() != 0) {
+                IListView listView = (IListView)this.getView();
+                List<Long> selectedMainOrgIds = listView.getSelectedMainOrgIds();
+                if (selectedMainOrgIds != null && selectedMainOrgIds.size() > 0 && !orgList.contains(selectedMainOrgIds.get(0))) {
+                    this.getView().showErrorNotification(ResManager.loadKDString("您没有该组织的指定实收公司权限。", "ReceivingBillList_7", "fi-cas-formplugin", new Object[0]));
+                } else {
+                    ListSelectedRow selectedRow = selectedRows.get(0);
+                    Long receivingId = (Long)selectedRow.getPrimaryKeyValue();
+                    if (this.check(receivingId, evt)) {
+                        FormShowParameter showParameter = new FormShowParameter();
+                        showParameter.setFormId("cas_rec_transcompany");
+                        showParameter.setCustomParam("receId", receivingId);
+                        showParameter.getOpenStyle().setShowType(ShowType.NonModal);
+                        this.getView().showForm(showParameter);
+                    }
+
+                }
+            } else {
+                this.getView().showErrorNotification(ResManager.loadKDString("您没有该组织的指定实收公司权限。", "ReceivingBillList_7", "fi-cas-formplugin", new Object[0]));
+            }
+        }
+    }
+
+    private boolean check(Long receivingId, ItemClickEvent evt) {
+        DynamicObject receivable = BusinessDataServiceHelper.loadSingle(receivingId, "nckd_cas_recbill_xz", "billno,billstatus,isagent");
+        if ("D".equals(receivable.getString("billstatus"))) {
+            this.getView().showErrorNotification(receivable.getString("billno") + (new ReceivErrorCode()).STATUS_TRANS_COMPANY().getMessage());
+            return false;
+        } else if (!receivable.getBoolean("isagent")) {
+            this.getView().showErrorNotification(receivable.getString("billno") + (new ReceivErrorCode()).STATUS_RECE_TYPE().getMessage());
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    private void addNew(RecTypeEnum typeEnum) {
+        this.getPageCache().put("recmentType", typeEnum.name());
+        this.getView().invokeOperation("new");
+    }
+
+    public void beforeShowBill(BeforeShowBillFormEvent e) {
+        BillShowParameter parameter = e.getParameter();
+        FormShowParameter formShowParameter = new FormShowParameter();
+        BillOperationStatus billStatus = parameter.getBillStatus();
+        Long billId = (Long)parameter.getPkId();
+        if (billId != null) {
+            DynamicObject info = BusinessDataServiceHelper.loadSingle(billId, "nckd_cas_recbill_xz", "id, billstatus,biztype");
+            if (parameter.getStatus() == OperationStatus.ADDNEW && billId != null) {
+                String operateType = this.getPageCache().get("operate");
+                BillShowParameter showParameter = e.getParameter();
+                if (operateType != null) {
+                    showParameter.getCustomParams().put("operate", operateType);
+                } else {
+                    showParameter.getCustomParams().put("operate", OperateTypeEnum.COPY);
+                }
+            }
+
+            if (info.getString("biztype").equals(RecTypeEnum.OtherRec.toString())) {
+                formShowParameter.setCaption(ResManager.loadKDString("其他收款单", "ReceivingBillList_8", "fi-cas-formplugin", new Object[0]));
+                formShowParameter.getCustomParams().put("recmentType", RecTypeEnum.OtherRec);
+                parameter.setCaption(ResManager.loadKDString("其他收款单", "ReceivingBillList_8", "fi-cas-formplugin", new Object[0]));
+                parameter.getCustomParams().put("recmentType", RecTypeEnum.OtherRec);
+            } else {
+                formShowParameter.setCaption(ResManager.loadKDString("销售收款单", "ReceivingBillList_9", "fi-cas-formplugin", new Object[0]));
+                formShowParameter.getCustomParams().put("recmentType", RecTypeEnum.SalesRec);
+                parameter.setCaption(ResManager.loadKDString("销售收款单", "ReceivingBillList_9", "fi-cas-formplugin", new Object[0]));
+                parameter.getCustomParams().put("recmentType", RecTypeEnum.SalesRec);
+            }
+        } else if (BillOperationStatus.ADDNEW == billStatus) {
+            parameter.getCustomParams().put("recmentType", this.getPageCache().get("recmentType"));
+            this.getView().showForm(parameter);
+        }
+
+        Map<String, Object> customParam = new HashMap();
+        customParam.put("EntityName", parameter.getFormId());
+        if (!OperationStatus.ADDNEW.equals(e.getParameter().getStatus())) {
+            customParam.put("PkId", parameter.getPkId());
+            formShowParameter.setCustomParams(customParam);
+        } else {
+            this.getView().showForm(parameter);
+        }
+    }
+
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        AbstractOperate operate = (AbstractOperate)args.getSource();
+        String opKey = operate.getOperateKey();
+        BillList billList = (BillList)this.getControl("billlistap");
+        ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+        Long id;
+        if ("cancelrefund".equals(opKey)) {
+            if (CasHelper.getSelectedRowSize(selectedRows) > 1) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("请选择一笔收款单进行取消退款退票。", "ReceivingBillList_10_1", "fi-cas-formplugin", new Object[0]));
+            }
+
+            id = (Long)selectedRows.get(0).getPrimaryKeyValue();
+            operate.getOption().setVariableValue("revId", String.valueOf(id));
+            this.refundLogExecutor = new RefundLogExecutor(id);
+        }
+
+        boolean isSettleCenterCollect;
+        Set srcBill;
+        if ("refund".equals(opKey)) {
+            if (selectedRows.size() == 0) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("请选择要执行的数据。", "ReceivingBillList_0", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if (CasHelper.getSelectedRowSize(selectedRows) > 1) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("请选择单条数据。", "ReceivingBillList_10", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if (!RefundHelper.isPaid((Long)selectedRows.get(0).getPrimaryKeyValue())) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("只有已收款状态的单据才可以进行退票操作。", "ReceivingBillList_11", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if (RefundHelper.isRefund((Long)selectedRows.get(0).getPrimaryKeyValue())) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("已确认退票的收款单不允许重复退票。", "ReceivingBillList_12", "fi-cas-formplugin", new Object[0]));
+            }
+
+            isSettleCenterCollect = QueryServiceHelper.exists("nckd_cas_recbill_xz", new QFilter[]{new QFilter("id", "=", selectedRows.get(0).getPrimaryKeyValue()), new QFilter("receivingtype.biztype", "=", PayAndRecBizTypeEnum.SETTLCENTER_COLLECT.getValue())});
+            if ((!isSettleCenterCollect || !RefundHelper.isExistTransHandleBillsRefund((Long)selectedRows.get(0).getPrimaryKeyValue())) && (isSettleCenterCollect || !RefundHelper.isExistPayBills((Long)selectedRows.get(0).getPrimaryKeyValue()))) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("您选择的收款单找不到对应的退款源单,确认退票失败。", "ReceivingBillList_13", "fi-cas-formplugin", new Object[0]));
+            }
+
+            srcBill = CasBotpHelper.getSrcBillByDestBill((Long)selectedRows.get(0).getPrimaryKeyValue(), "nckd_cas_recbill_xz", "cas_paybill");
+            if (!CasHelper.isEmpty(srcBill)) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("您选择的收款单已关联付款单,不允许退票。", "ReceivingBillList_17", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if (RefundHelper.isSettled((Long)selectedRows.get(0).getPrimaryKeyValue())) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("已结算的收款单不允许退票,请先手工取消结算。", "ReceivingBillList_33", "fi-cas-formplugin", new Object[0]));
+            }
+        } else if ("returnmoney".equals(opKey)) {
+            isSettleCenterCollect = QueryServiceHelper.exists("nckd_cas_recbill_xz", new QFilter[]{new QFilter("id", "=", selectedRows.get(0).getPrimaryKeyValue()), new QFilter("receivingtype.biztype", "=", PayAndRecBizTypeEnum.SETTLCENTER_COLLECT.getValue())});
+            if (selectedRows.size() == 0) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("请选择要执行的数据。", "ReceivingBillList_0", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if (CasHelper.getSelectedRowSize(selectedRows) > 1) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("请选择单条数据。", "ReceivingBillList_10", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if (!RefundHelper.isPaid((Long)selectedRows.get(0).getPrimaryKeyValue())) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("只有已收款状态的单据才可以进行退款操作。", "ReceivingBillList_14", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if (RefundHelper.isRefund((Long)selectedRows.get(0).getPrimaryKeyValue())) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("已退款的收款单不允许重复退款。", "ReceivingBillList_15", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if ((!isSettleCenterCollect || !RefundHelper.isExistTransHandleBillsRefundMoney((Long)selectedRows.get(0).getPrimaryKeyValue())) && (isSettleCenterCollect || !RefundHelper.isExistPayBillsRefund((Long)selectedRows.get(0).getPrimaryKeyValue()))) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("您选择的收款单找不到对应的退款源单,退款失败。", "ReceivingBillList_16", "fi-cas-formplugin", new Object[0]));
+            }
+
+            srcBill = CasBotpHelper.getSrcBillByDestBill((Long)selectedRows.get(0).getPrimaryKeyValue(), "nckd_cas_recbill_xz", "cas_paybill");
+            if (!CasHelper.isEmpty(srcBill)) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("您选择的收款单已关联付款单,不允许退款。", "ReceivingBillList_18_1", "fi-cas-formplugin", new Object[0]));
+            }
+
+            if (RefundHelper.isSettled((Long)selectedRows.get(0).getPrimaryKeyValue())) {
+                args.setCancel(true);
+                throw new KDBizException(ResManager.loadKDString("已结算的收款单不允许退款,请先手工取消结算。", "ReceivingBillList_34", "fi-cas-formplugin", new Object[0]));
+            }
+        } else {
+            DynamicObject recBill;
+            if ("recbook".equals(opKey)) {
+                id = (Long)selectedRows.get(0).getPrimaryKeyValue();
+                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(id, "nckd_cas_recbill_xz");
+                DynamicObjectCollection draftBillCol = (DynamicObjectCollection)dynamicObject.get("draftbill");
+                if (CasHelper.getSelectedRowSize(selectedRows) > 1) {
+                    args.setCancel(true);
+                    throw new KDBizException(ResManager.loadKDString("请选择单条数据。", "ReceivingBillList_10", "fi-cas-formplugin", new Object[0]));
+                }
+
+                if (!this.checkStatus(id, "billstatus")) {
+                    args.setCancel(true);
+                    this.getView().showTipNotification(ResManager.loadKDString("只有已审核状态的单据允许收票登记。", "PaymentBillDraftEditPlugin_12", "fi-cas-formplugin", new Object[0]));
+                    return;
+                }
+
+                if (!InitCheckPluginHelper.checkInitForPlugin(this.getView(), dynamicObject.getDynamicObject("org"), new String[0])) {
+                    args.setCancel(true);
+                    return;
+                }
+
+                if (!DraftHelper.isDraftBill(id, "nckd_cas_recbill_xz")) {
+                    args.setCancel(true);
+                    this.getView().showTipNotification(ResManager.loadKDString("收票登记仅适用结算方式类型是承兑汇票、支票或本票的收款单,你所选单据不支持收票登记。", "ReceivingBillEdit_12", "fi-cas-formplugin", new Object[0]));
+                } else if (!DraftHelper.isParameterDraftOn(id, "nckd_cas_recbill_xz")) {
+                    args.setCancel(true);
+                    this.getView().showTipNotification(ResManager.loadKDString("该组织没有启用相应的系统参数,请配置相应的系统参数。", "PaymentBillDraftEditPlugin_4", "fi-cas-formplugin", new Object[0]));
+                } else if (EmptyUtil.isNoEmpty(draftBillCol)) {
+                    args.setCancel(true);
+                    this.getView().showTipNotification(ResManager.loadKDString("收款单已选择相关应收票据,不能再次收票登记,请确认收款", "ReceivingBillDraftEditPlugin_1", "fi-cas-formplugin", new Object[0]));
+                } else {
+                    Boolean isPush = CasBotpHelper.isFindTargetBill("nckd_cas_recbill_xz", "cdm_receivablebill", new Long[]{id});
+                    if (isPush) {
+                        args.setCancel(true);
+                        this.getView().showTipNotification(ResManager.loadKDString("收款单已进行收票登记。", "ReceivingBillEdit_13", "fi-cas-formplugin", new Object[0]));
+                    }
+
+                    recBill = BusinessDataServiceHelper.loadSingle("nckd_cas_recbill_xz", "accountbank", new QFilter[]{new QFilter("id", "=", id)});
+                    DynamicObject accountBank = recBill.getDynamicObject("accountbank");
+                    if (null != accountBank && AccountBankHelper.isClosed(accountBank.getLong("id"))) {
+                        throw new KDBizException(String.format(ResManager.loadKDString("账户%s当前状态为已销户,暂无法进行业务处理。", "PaymentErrorCode_47", "fi-cas-business", new Object[0]), accountBank.getString("number")));
+                    }
+                }
+            } else if ("chargeback".equals(opKey)) {
+                if (CasHelper.getSelectedRowSize(selectedRows) > 1) {
+                    this.getView().showTipNotification(ResManager.loadKDString("退单仅支持对单张单据处理,请修改选择范围。", "PaymentBillList_7", "fi-cas-formplugin", new Object[0]));
+                    args.cancel = true;
+                }
+            } else if ("matchdetail".equals(opKey)) {
+                ManualMatchHelper.verifySameOrg(selectedRows, "nckd_cas_recbill_xz", this.getView(), args);
+            } else if ("receivingrec".equals(opKey)) {
+                BillList list = (BillList)this.getView().getControl("billlistap");
+                Object[] selectedRowPks = list.getSelectedRows().getPrimaryKeyValues();
+                RecDraftHelper.fillDraft(selectedRowPks, true);
+                if (selectedRowPks.length > 0) {
+                    DynamicObject[] dbDatas = BusinessDataServiceHelper.load(selectedRowPks, EntityMetadataCache.getDataEntityType("nckd_cas_recbill_xz"));
+                    String draftIds = operate.getOption().getVariableValue("draftids", "");
+                    if (selectedRowPks.length == 1 && StringUtils.isEmpty(draftIds)) {
+                        recBill = dbDatas[0];
+                        String sourceBillType = (String)recBill.get("sourcebilltype");
+                        if ("cas_claimcenterbill".equals(sourceBillType)) {
+                            return;
+                        }
+
+                        DynamicObject orgData = (DynamicObject)recBill.get("org");
+                        Long pkValue = (Long)orgData.getPkValue();
+                        boolean selectDraftFlag = SystemParameterHelper.getParameterBoolean(pkValue, "cs123");
+                        if (selectDraftFlag && PaymentBillPluginHelper.needSelectedDraft(recBill)) {
+                            FormShowParameter showParameter = new FormShowParameter();
+                            showParameter.setAppId("cas");
+                            showParameter.setFormId("cas_receiver_selectdraft");
+                            showParameter.setCustomParam("recBillId", selectedRowPks[0]);
+                            showParameter.getOpenStyle().setShowType(ShowType.Modal);
+                            showParameter.setCloseCallBack(new CloseCallBack(this, "CALLBACK_SELECTDRAFT"));
+                            this.getView().showForm(showParameter);
+                            args.setCancel(true);
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+    private Boolean checkStatus(Long id, String field) {
+        List<QFilter> qFilters = new ArrayList();
+        qFilters.add(new QFilter("id", "=", id));
+        qFilters.add(new QFilter(field, "=", BillStatusEnum.AUDIT.getValue()));
+        return QueryServiceHelper.exists("nckd_cas_recbill_xz", (QFilter[])qFilters.toArray(new QFilter[0]));
+    }
+
+    public void afterDoOperation(AfterDoOperationEventArgs e) {
+        super.afterDoOperation(e);
+        BillList list = (BillList)this.getView().getControl("billlistap");
+        ListSelectedRowCollection selectedRows = list.getSelectedRows();
+        boolean isSuccess = e.getOperationResult() == null ? false : e.getOperationResult().isSuccess();
+        if ("cancelrefund".equals(e.getOperateKey()) && this.refundLogExecutor != null) {
+            this.refundLogExecutor.saveLog(e.getOperationResult());
+        }
+
+        if ("receivingrec".equals(e.getOperateKey()) && isSuccess) {
+            this.showRecTip();
+            this.getView().invokeOperation("refresh");
+        } else if (("cancelrec".equals(e.getOperateKey()) || "cancelrefund".equals(e.getOperateKey())) && isSuccess) {
+            this.getView().invokeOperation("refresh");
+        } else if ("transcompany".equals(e.getOperateKey()) && isSuccess) {
+            this.getView().showSuccessNotification(ResManager.loadKDString("指定实际公司成功。", "ReceivingBillList_19", "fi-cas-formplugin", new Object[0]));
+            this.getView().invokeOperation("refresh");
+        } else if ("refund".equals(e.getOperateKey()) && isSuccess) {
+            this.refund("refund");
+        } else if ("returnmoney".equals(e.getOperateKey()) && isSuccess) {
+            this.refund("returnmoney");
+        } else if ("supplecontract".equals(e.getOperateKey()) && isSuccess) {
+            this.suppleContractOrOrgsDivide("supplecontract");
+        } else if ("orgsdivide".equals(e.getOperateKey()) && isSuccess) {
+            this.suppleContractOrOrgsDivide("orgsdivide");
+        } else if ("chargeback".equals(e.getOperateKey()) && isSuccess) {
+            if (null != selectedRows && selectedRows.size() > 0) {
+                CasPluginHelper.chargeBack(this, this.getView(), selectedRows.get(0).getPrimaryKeyValue(), "CALLBACK_RECCHARGEBACK");
+            }
+        } else if ("warnsubmit".equals(e.getOperateKey()) && isSuccess) {
+            e.getOperationResult().setShowMessage(false);
+        } else if ("matchdetail".equals(e.getOperateKey())) {
+            ManualMatchHelper.bizBillMatchDetail(this.getView(), e, selectedRows, this, list.getEntityId(), "org,accountbank,currency");
+        } else if (("marknoneedmatch".equals(e.getOperateKey()) || "cancelmark".equals(e.getOperateKey())) && isSuccess) {
+            this.getView().invokeOperation("refresh");
+        }
+
+    }
+
+    private void showRecTip() {
+        BillList list = (BillList)this.getView().getControl("billlistap");
+        ListSelectedRowCollection selectedRows = list.getSelectedRows();
+        if (selectedRows.size() > 0) {
+            List<Long> paymentBillPks = new LinkedList();
+            Iterator var4 = selectedRows.iterator();
+
+            while(var4.hasNext()) {
+                ListSelectedRow selectedRow = (ListSelectedRow)var4.next();
+                paymentBillPks.add((Long)selectedRow.getPrimaryKeyValue());
+            }
+
+            AppParam appParam = new AppParam();
+            appParam.setAppId(TmcAppEnum.CAS.getId());
+            QFilter payPidFilter = new QFilter("id", "in", paymentBillPks);
+            DynamicObject[] recObjs = BusinessDataServiceHelper.load("nckd_cas_recbill_xz", "id,payer,billno,payertype,bizdate", new QFilter[]{payPidFilter});
+            List<Long> orgIds = (List)Arrays.stream(recObjs).map((o) -> {
+                return o.getLong("payer");
+            }).collect(Collectors.toList());
+            Set<Long> payerIsSupplierIds = this.getNeedQueryPayerId(recObjs, AsstActTypeEnum.SUPPLIER.getValue());
+            Set<Long> payerIsCustomerIds = this.getNeedQueryPayerId(recObjs, AsstActTypeEnum.CUSTOMER.getValue());
+            Map<Long, Long> supplierMap = CasPluginHelper.getInternalCompanyMap(AsstActTypeEnum.SUPPLIER.getValue(), payerIsSupplierIds);
+            Map<Long, Long> customerMap = CasPluginHelper.getInternalCompanyMap(AsstActTypeEnum.CUSTOMER.getValue(), payerIsCustomerIds);
+            Set<Long> orgIdSet = new HashSet(10);
+            Iterator var13 = supplierMap.entrySet().iterator();
+
+            Map.Entry entry;
+            while(var13.hasNext()) {
+                entry = (Map.Entry)var13.next();
+                orgIdSet.add((Long) entry.getValue());
+            }
+
+            var13 = customerMap.entrySet().iterator();
+
+            while(var13.hasNext()) {
+                entry = (Map.Entry)var13.next();
+                orgIdSet.add((Long) entry.getValue());
+            }
+
+            orgIdSet.addAll(orgIds);
+            Map<String, Map<String, Object>> stringMapMap = SystemParamServiceHelper.loadBatchAppParameterByOrgFromCache(appParam, new ArrayList(orgIdSet));
+            StringBuilder sb = new StringBuilder();
+            DynamicObject[] var15 = recObjs;
+            int var16 = recObjs.length;
+
+            for(int var17 = 0; var17 < var16; ++var17) {
+                DynamicObject recBill = var15[var17];
+                Long payer = recBill.getLong("payer");
+                String payerType = recBill.getString("payertype");
+                Long internalCompany;
+                if (AsstActTypeEnum.SUPPLIER.getValue().equals(payerType)) {
+                    internalCompany = (Long)supplierMap.get(payer);
+                    if (CasHelper.isEmpty(internalCompany)) {
+                        continue;
+                    }
+
+                    payer = internalCompany;
+                } else if (AsstActTypeEnum.CUSTOMER.getValue().equals(payerType)) {
+                    internalCompany = (Long)customerMap.get(payer);
+                    if (CasHelper.isEmpty(internalCompany)) {
+                        continue;
+                    }
+
+                    payer = internalCompany;
+                } else if (!AsstActTypeEnum.COMPANY.getValue().equals(payerType)) {
+                    continue;
+                }
+
+                if (EmptyUtil.isNoEmpty(payer)) {
+                    Date bizDate = recBill.getDate("bizdate");
+                    DynamicObject currentPeriod = SystemStatusCtrolHelper.getCurrentPeriod(payer);
+                    if (EmptyUtil.isNoEmpty(bizDate) && EmptyUtil.isNoEmpty(currentPeriod) && !bizDate.before(currentPeriod.getDate("begindate"))) {
+                        continue;
+                    }
+                }
+
+                Map<String, Object> sysParams = (Map)stringMapMap.get(String.valueOf(payer));
+                if (EmptyUtil.isNoEmpty(sysParams)) {
+                    Object CS048 = sysParams.get("cs048");
+                    Object allowObj = sysParams.get("cs103");
+                    if (EmptyUtil.isNoEmpty(CS048)) {
+                        boolean isCheck = (Boolean)CS048;
+                        if (isCheck && EmptyUtil.isNoEmpty(allowObj)) {
+                            boolean allow = (Boolean)allowObj;
+                            if (!allow) {
+                                String billNo = recBill.getString("billno");
+                                sb.append(String.format(ResManager.loadKDString("单据【%s】确认收款成功。因付款方设置不允许新增已结账期间的付款业务,因此收付协同生成付款单失败。\r\n", "ReceivingBillList_36", "fi-cas-formplugin", new Object[0]), billNo));
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (EmptyUtil.isNotEmpty(sb)) {
+                this.getView().showTipNotification(sb.toString());
+            } else {
+                this.getView().showSuccessNotification(ResManager.loadKDString("确认收款成功。", "ReceivingBillEdit_38", "fi-cas-formplugin", new Object[0]));
+            }
+        }
+
+    }
+
+    private Set<Long> getNeedQueryPayerId(DynamicObject[] payobjs, String type) {
+        new HashSet(2);
+        Set<Long> payeeIds = (Set)Arrays.stream(payobjs).map((o) -> {
+            String payeeType = o.getString("payertype");
+            return type.equals(payeeType) ? o.getLong("payer") : 0L;
+        }).collect(Collectors.toSet());
+        return payeeIds;
+    }
+
+    private void refund(String operateKey) {
+        BillList billList = (BillList)this.getControl("billlistap");
+        ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+        ListSelectedRow selectedRow = selectedRows.get(0);
+        DynamicObject revBill = BusinessDataServiceHelper.loadSingleFromCache(selectedRow.getPrimaryKeyValue(), "nckd_cas_recbill_xz", "receivingtype.biztype");
+        FormShowParameter parameter = new FormShowParameter();
+        parameter.getOpenStyle().setShowType(ShowType.Modal);
+        parameter.setCustomParam("billId", selectedRow.getPrimaryKeyValue());
+        if (PayAndRecBizTypeEnum.SETTLCENTER_COLLECT.getValue().equals(revBill.getString("receivingtype.biztype"))) {
+            parameter.setFormId("cas_refund");
+            parameter.setCustomParam("operateKey", "returnmoney".equals(operateKey) ? "refund" : "returnmoney");
+        } else {
+            parameter.setFormId("cas_refund_renote");
+            parameter.setCustomParam("operateKey", "returnmoney".equals(operateKey) ? "refund" : "renote");
+        }
+
+        CloseCallBack closeCallBack = new CloseCallBack(this, "refund");
+        parameter.setCloseCallBack(closeCallBack);
+        this.getView().showForm(parameter);
+    }
+
+    private void cancelrec() {
+        BillList billList = (BillList)this.getControl("billlistap");
+        ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+        if (selectedRows.size() <= 0) {
+            this.getView().showTipNotification(ResManager.loadKDString("请选择要执行的数据。", "ReceivingBillList_21", "fi-cas-formplugin", new Object[0]));
+        } else {
+            List<Long> recBillPks = new LinkedList();
+            Iterator var4 = selectedRows.iterator();
+
+            while(var4.hasNext()) {
+                ListSelectedRow selectedRow = (ListSelectedRow)var4.next();
+                recBillPks.add((Long)selectedRow.getPrimaryKeyValue());
+            }
+
+            QFilter recPidFilter = new QFilter("id", "in", recBillPks);
+            DynamicObjectCollection recobjs = QueryServiceHelper.query("nckd_cas_recbill_xz", "id,billno,isvoucher,org.id,receivingtype,receivingtype.enable", new QFilter[]{recPidFilter});
+            StringBuilder sb = new StringBuilder();
+            int flag = 0;
+            Map<Long, List<DynamicObject>> groupOrg = (Map)recobjs.stream().collect(Collectors.groupingBy((o) -> {
+                return o.getLong("org.id");
+            }));
+            Set<Long> orgIds = (Set)recobjs.stream().map((o) -> {
+                return o.getLong("org.id");
+            }).collect(Collectors.toSet());
+            Map<String, Object> orgSysMap = SystemParameterHelper.getSystemParamsByOrgIds(new ArrayList(orgIds), "cs116");
+            Iterator var11 = groupOrg.entrySet().iterator();
+
+            while(true) {
+                Map idBillNoMap;
+                List existList;
+                int size;
+                do {
+                    Map.Entry entry;
+                    int CS114;
+                    do {
+                        if (!var11.hasNext()) {
+                            if (flag == 1) {
+                                this.getView().showConfirm(sb.substring(0, sb.length() - 1) + "," + ResManager.loadKDString("是否继续取消收款?", "ReceivingBillList_23", "fi-cas-formplugin", new Object[0]), MessageBoxOptions.YesNo, ConfirmTypes.Default, new ConfirmCallBackListener("CONFIRM_CANCELREC_CALLBACK", this));
+                                return;
+                            } else {
+                                if (flag > 0) {
+                                    this.getView().showConfirm(String.format(ResManager.loadKDString("存在%d个已生成凭证的单据,是否继续取消收款?", "ReceivingBillList_24", "fi-cas-formplugin", new Object[0]), flag), sb.toString(), MessageBoxOptions.YesNo, ConfirmTypes.Default, new ConfirmCallBackListener("CONFIRM_CANCELREC_CALLBACK", this));
+                                } else if (!CasPluginHelper.cancelCheckSettleForRec(this, this.getView(), recBillPks, recobjs)) {
+                                    this.getView().invokeOperation("cancelrec");
+                                    return;
+                                }
+
+                                return;
+                            }
+                        }
+
+                        entry = (Map.Entry)var11.next();
+                        Long orgId = (Long)entry.getKey();
+                        CS114 = EmptyUtil.isEmpty(orgSysMap.get(String.valueOf(orgId))) ? 0 : Integer.parseInt((String)orgSysMap.get(String.valueOf(orgId)));
+                    } while(3 != CS114);
+
+                    List<DynamicObject> value = (List)entry.getValue();
+                    idBillNoMap = (Map)value.stream().collect(Collectors.toMap((s) -> {
+                        return s.getLong("id");
+                    }, (v) -> {
+                        return v.getString("billno");
+                    }));
+                    existList = VoucherBookHelper.getVoucherExistIds(idBillNoMap.keySet(), "nckd_cas_recbill_xz");
+                    size = existList.size();
+                    flag = size;
+                } while(size <= 0);
+
+                Iterator var19 = existList.iterator();
+
+                while(var19.hasNext()) {
+                    Long id = (Long)var19.next();
+                    String billno = (String)idBillNoMap.get(id);
+                    sb.append(String.format(ResManager.loadKDString("(%s)单据已经生成凭证\r\n", "ReceivingBillList_22", "fi-cas-formplugin", new Object[0]), billno));
+                }
+            }
+        }
+    }
+
+    public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
+        super.confirmCallBack(messageBoxClosedEvent);
+        String id = messageBoxClosedEvent.getCallBackId();
+        MessageBoxResult res = messageBoxClosedEvent.getResult();
+        if (StringUtils.equals(id, "CONFIRM_CANCELREC_CALLBACK") && MessageBoxResult.Yes.equals(res)) {
+            BillList billList = (BillList)this.getControl("billlistap");
+            ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+            if (selectedRows.size() > 0) {
+                List<Long> recBillPks = new LinkedList();
+                Iterator var7 = selectedRows.iterator();
+
+                while(var7.hasNext()) {
+                    ListSelectedRow selectedRow = (ListSelectedRow)var7.next();
+                    recBillPks.add((Long)selectedRow.getPrimaryKeyValue());
+                }
+
+                QFilter recPidFilter = new QFilter("id", "in", recBillPks);
+                DynamicObjectCollection recobjs = QueryServiceHelper.query("nckd_cas_recbill_xz", "id,billno,isvoucher", new QFilter[]{recPidFilter});
+                if (!CasPluginHelper.cancelCheckSettleForRec(this, this.getView(), recBillPks, recobjs)) {
+                    this.getView().invokeOperation("cancelrec");
+                }
+            }
+        } else if (StringUtils.equals(id, "CONFIRM_CANCELPAY_SETTLE_CALLBACK") && MessageBoxResult.Yes.equals(res)) {
+            this.getView().invokeOperation("cancelrec");
+        } else if (id.equals("CONFIRM_DEL_CALLBACK")) {
+            OperateOption option = OperateOption.create();
+            if (MessageBoxResult.Yes.equals(res)) {
+                option.setVariableValue("delrecpay", "1");
+                this.getView().invokeOperation("delete", option);
+            }
+        } else if (StringUtils.equals(id, "CONFIRM_DELETE_CALLBACK")) {
+            if (MessageBoxResult.Yes.equals(res)) {
+                this.getView().invokeOperation("delete");
+            }
+        } else if ("CONFIRM_MANUALMATCH".equals(id) && MessageBoxResult.Yes.equals(res)) {
+            ManualMatchHelper.confirmBizBillMatchDetail(this.getView(), messageBoxClosedEvent, "org,accountbank,currency");
+        }
+
+    }
+
+    public void beforeItemClick(BeforeItemClickEvent evt) {
+        String opKey = evt.getOperationKey();
+        BillList billList = (BillList)this.getControl("billlistap");
+        ListSelectedRowCollection selectRows = billList.getSelectedRows();
+        if ("delete".equals(opKey) && selectRows.size() > 0) {
+            Set<Object> selectRowsPks = new HashSet();
+            selectRows.forEach((listSelectedRow) -> {
+                selectRowsPks.add(listSelectedRow.getPrimaryKeyValue());
+            });
+            QFilter pkFilter = (new QFilter("id", "in", selectRowsPks)).and(new QFilter("hotaccount", "!=", "2"));
+            QFilter sourceBillTypeFilter = new QFilter("sourcebilltype", "=", "cas_paybill");
+            DynamicObject[] payBills = BusinessDataServiceHelper.load("nckd_cas_recbill_xz", "billno", new QFilter[]{pkFilter, sourceBillTypeFilter});
+            if (payBills != null && payBills.length > 0) {
+                evt.setCancel(true);
+                StringBuilder billnos = new StringBuilder();
+                Arrays.asList(payBills).forEach((payBill) -> {
+                    billnos.append(payBill.getString("billno")).append("、");
+                });
+                this.getView().showConfirm(String.format(ResManager.loadKDString("%s收款单由内部收付协同业务自动生成,是否确认删除?", "ReceivingBillEdit_19", "fi-cas-formplugin", new Object[0]), billnos.substring(0, billnos.length() - 1)), MessageBoxOptions.YesNo, ConfirmTypes.Default, new ConfirmCallBackListener("CONFIRM_DEL_CALLBACK", this));
+            }
+
+            Object[] selectPks = selectRows.getPrimaryKeyValues();
+            DynamicObject[] recSelectObj = BusinessDataServiceHelper.load(selectPks, MetadataServiceHelper.getDataEntityType("nckd_cas_recbill_xz"));
+            List<DynamicObject> virtRecList = (List)Arrays.stream(recSelectObj).filter((o) -> {
+                return o.getBoolean("isvirtual") && !EmptyUtil.isEmpty(o.getString("sourcebilltype")) && "nckd_cas_recbill_xz".equals(o.getString("sourcebilltype"));
+            }).collect(Collectors.toList());
+            if (virtRecList.size() > 0) {
+                evt.setCancel(true);
+                StringBuilder virtBillnos = new StringBuilder();
+                virtRecList.forEach((rec) -> {
+                    virtBillnos.append(rec.getString("billno")).append("、");
+                });
+                this.getView().showConfirm(String.format(ResManager.loadKDString("%s虚拟收款单由组织间清分业务触发自动下推的单据,请确认是否删除?", "ReceivingBillEdit_33", "fi-cas-formplugin", new Object[0]), virtBillnos.substring(0, virtBillnos.length() - 1)), MessageBoxOptions.YesNo, ConfirmTypes.Default, new ConfirmCallBackListener("CONFIRM_DELETE_CALLBACK", this));
+            }
+        }
+
+    }
+
+    public void setFilter(SetFilterEvent e) {
+        super.setFilter(e);
+        e.setOrderBy("bizdate desc,org.id desc,id desc");
+    }
+}