package com.brilliance.isc.common.bop.cfa.cfabop.service.impl;

import com.brilliance.mda.runtime.mda.util.Dates;
import com.brilliance.mda.runtime.mda.util.MdaUtils;
import com.brilliance.mda.runtime.mda.util.Strings;
import com.brilliance.isc.bo.*;
import com.brilliance.isc.bo.model.Cfabop;
import com.brilliance.isc.bo.model.Cfaeaf;
import com.brilliance.isc.bo.model.CfaeafBizInfo;
import com.brilliance.isc.common.bop.cfa.cfabop.register.CfabopRegister;
import com.brilliance.isc.common.bop.cfa.cfabop.service.CfaReportService;
import com.brilliance.isc.common.bopset.service.EblmodService;
import com.brilliance.isc.common.codetable.service.CodetableService;
import com.brilliance.isc.common.component.PtsptaToolComponent;
import com.brilliance.isc.common.context.SettleContext;
import com.brilliance.isc.common.context.SpringEnvContext;
import com.brilliance.isc.common.exception.CommonServiceException;
import com.brilliance.isc.common.sysmod.SysmodService;
import com.brilliance.isc.common.vo.PtsptaVo;
import com.brilliance.isc.mda.dao.*;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

@Service("eaf.bop")
public class CfaeafServiceImpl implements CfaReportService {
    /**
     * eba-对外担保签约
     * ebb-对外担保责任余额
     * ebc-对外担保履约
     * ead-外债海外代付签约
     * eaf-外债远期信用证签约
     * ear-外债变动
     * eca-国内外汇贷款签约
     * ecb-国内外汇贷款变动
     */
    private String typeOfCfa = "eaf";

    @Autowired
    EblmodService eblmodService;

    @Autowired
    SysmodService sysmodService;

    @Autowired
    private CodetableService codetableService;

    @Autowired
    private PtsptaToolComponent ptsptaToolComponent;

    @Autowired
    EblMapper eblMapper;

    @Autowired
    EafMapper eafMapper;

    @Autowired
    EarMapper earMapper;

    @Autowired
    private PtyMapper ptyMapper;

    @Autowired
    private PtaMapper ptaMapper;

    @Override
    public void cfaBopSaveData(Cfabop cfabop) {
        //重置防止空指针
        cfabop.reset();
        //取海外代付报送模型进行处理
        Cfaeaf cfaeaf = cfabop.getCfaeaf();
        if( MdaUtils.compareTo(cfaeaf.getBasflg(),"X") != 0 && MdaUtils.compareTo(cfaeaf.getDclflg(),"X") != 0 ){
            return ;
        }

        CfaeafBizInfo cfaeafBizInfo =cfaeaf.getCfaeafBizInfo();

        if("X".equals(cfaeaf.getBasflg())){
            //生成外债编号
            if("A".equals(cfaeaf.getCfatyp())){
                if(MdaUtils.isEmpty(cfaeaf.getRecgrp().getBas().getExdebtcode())) {
                    getReference(cfabop);
                }
            }

            cfaeaf.getEblmod().getEbl().setBasflg("X");
            if(!"S".equals(cfaeaf.getRecgrp().getBas().getSta())){
                cfaeaf.getRecgrp().getBas().setInr("");
            }
            cfaeaf.getRecgrp().getBas().setSta("W");
        }

        //EBL 处理
        cfaeaf.getEblmod().getEbl().setOwnextkey(cfaeaf.getOwnextkey());
        cfaeaf.getEblmod().getEbl().setOwnref(cfaeafBizInfo.getBrdownref());
        cfaeaf.getEblmod().getEbl().setRptno(cfaeaf.getRecgrp().getBas().getExdebtcode());

        eblmodService.setEblData(cfaeaf.getEblmod(),"EAF",cfaeaf.getRecgrp().getBas().getValuedate());
        sysmodService.sdbInsert(cfaeaf.getEblmod().getEbl());

        //变动信息处理
        if("X".equals(cfaeaf.getDclflg())){
            int dclcnt = cfaeaf.getRecgrp().getDcl().size();
            for(int i=0;i<dclcnt;i++){
                cfaeaf.getRecgrp().getDcl().get(i).setExdebtcode(cfaeaf.getRecgrp().getBas().getExdebtcode());
                cfaeaf.getRecgrp().getDcl().get(i).setSta("W");
                cfaeaf.getRecgrp().getDcl().get(i).setEblinr(cfaeaf.getEblmod().getEbl().getInr());
                cfaeaf.getRecgrp().getDcl().get(i).setBuscode(cfaeafBizInfo.getBrdownref());
                cfaeaf.getRecgrp().getDcl().get(i).setCredat(Dates.today());

                if(MdaUtils.isEmpty(cfaeaf.getRecgrp().getDcl().get(i).getChangeno())){
                    cfaeaf.getRecgrp().getDcl().get(i).setChangeno(eblmodService.getChangeNo(cfaeaf.getRecgrp().getBas().getExdebtcode()));
                }

            }
        }

        //申报数据保存
        cfaeaf.getRecgrp().getBas().setEblinr(cfaeaf.getEblmod().getEbl().getInr());
        cfaeaf.getRecgrp().getBas().setCredat(Dates.today());
        storeContract(cfabop);
        //赋值ebl关联表inr更新
        String objinr = cfaeaf.getEblmod().getEbl().getObjinr();
        String basinr = cfaeaf.getRecgrp().getBas().getInr();
        if (!objinr.equals(basinr))
        {
            cfaeaf.getEblmod().getEbl().setObjinr(basinr);
            sysmodService.sdbUpdate(cfaeaf.getEblmod().getEbl());
        }

        //记录报送审计操作 bopsig
        eblmodService.setRecordSig(cfaeaf.getEblmod(),"数据提取");
        sysmodService.sdbInsert(cfaeaf.getEblmod().getCfasig());
    }

    @Override
    public void setCfaType(String cfaType) {
        this.typeOfCfa = cfaType;
    }

    @Override
    public Cfabop cfaMappingData(Cfabop cfabop) {
        //初始化处理
        initCfabop(cfabop);

        //开始试算
        Cfaeaf cfaeaf = cfabop.getCfaeaf();
        CfaeafBizInfo cfaeafBizInfo = cfaeaf.getCfaeafBizInfo();

        //开始试算 签约数据
        //操作类型为 A-新增  试算 签约
        if("A".equals(cfaeaf.getCfatyp())&&"X".equals(cfaeaf.getBasflg())){
            //起息日
            if(!cfaeaf.getRecgrp().getBas().isModified("valuedate")){
                cfaeaf.getRecgrp().getBas().setValuedate(Dates.today());
            }

            //到期日
            if(!cfaeaf.getRecgrp().getBas().isModified("maturity")) {
                cfaeaf.getRecgrp().getBas().setMaturity(cfaeafBizInfo.getMaturity());
            }

            //承兑交易需要试算 签约币种  签约金额
            String trnnam = Strings.mid(cfabop.getTransName().toUpperCase(),1,6);
            if("BRTUDP".equals(trnnam)){
                //签约币种
                if(!cfaeaf.getRecgrp().getBas().isModified("contractcurr")) {
                    cfaeaf.getRecgrp().getBas().setContractcurr( cfaeafBizInfo.getDoccur());
                }

                //签约金额
                if(!cfaeaf.getRecgrp().getBas().isModified("contractamount")) {
                    cfaeaf.getRecgrp().getBas().setContractamount( cfaeafBizInfo.getDocamt());
                }
            }

            //债务人代码
            if(!cfaeaf.getRecgrp().getBas().isModified("debtorcode")) {
                if(!MdaUtils.isEmpty(SettleContext.getUserSession().getWrkbch()) && MdaUtils.compareTo(cfaeaf.getOwnextkey(), SettleContext.getUserSession().getWrkbch().getBranch()) == 0){
                    cfaeaf.getRecgrp().getBas().setDebtorcode(SettleContext.getUserSession().getWrkbch().getDecnum());
                }else{
                    cfaeaf.getRecgrp().getBas().setDebtorcode(eblmodService.getDecnum(cfaeaf.getOwnextkey()));
                }
            }

            //债权人类型代码
            if(!cfaeaf.getRecgrp().getBas().isModified("creditortype")) {
                cfaeaf.getRecgrp().getBas().setCreditortype("20001699");
            }

            //债权人英文名称  取受益人名称,可能是临时客户，只能从前端取
            String bennamen = "";
            PtsptaVo benptspta = ptsptaToolComponent.getPtsFromListByRol(cfabop.getPtsList(), "BEN");
            if(!MdaUtils.isEmpty(benptspta)){
                bennamen = benptspta.getPts().getEnnam();
            }
            if(!cfaeaf.getRecgrp().getBas().isModified("creditornamen")) {
                cfaeaf.getRecgrp().getBas().setCreditornamen(bennamen);
            }

            //债权人经营地所在国家（地区）代码 取交单行BIC进行转换
            String prbptybic = "";
            PtsptaVo prbptspta = ptsptaToolComponent.getPtsFromListByRol(cfabop.getPtsList(), "PRB");
            if(!MdaUtils.isEmpty(prbptspta)){
                prbptybic = prbptspta.getPts().getExtkey();
            }
            if(!cfaeaf.getRecgrp().getBas().isModified("opercode")) {
                cfaeaf.getRecgrp().getBas().setOpercode(codetableService.getTblLabel(Strings.mid(prbptybic,5,2),"CTYCOD"));
            }

            //获取 APL 申请人角色信息
            String apljuscod = "";
            String aplnam = "";
            String aplptyinr = "";
            String aplidtyp = "";
            PtsptaVo aplptspta = ptsptaToolComponent.getPtsFromListByRol(cfabop.getPtsList(), "APL");
            if(!MdaUtils.isEmpty(aplptspta)){
                aplptyinr = aplptspta.getPtyinr();
                Pty pty = ptyMapper.selectByPtyinr(aplptyinr);
                if(!MdaUtils.isEmpty(pty)){
                    apljuscod = pty.getJuscod();
                    aplnam = pty.getNam1();
                    aplidtyp = pty.getIdtype();
                }
            }

            //通过客户类型判断是否为 代开
            boolean dklc = false;
            if("2".equals(aplidtyp)){
                dklc = true;
            }

            //非代开证才进行申请人赋值
            if(!dklc){
                //开证申请人代码 APL
                if(!cfaeaf.getRecgrp().getBas().isModified("appcode")) {
                    cfaeaf.getRecgrp().getBas().setAppcode(apljuscod);
                }

                //开证申请人名称
                if(!cfaeaf.getRecgrp().getBas().isModified("appname")) {
                    cfaeaf.getRecgrp().getBas().setAppname(aplnam);
                }
            }

            //相关业务类型
            if(!cfaeaf.getRecgrp().getBas().isModified("credittype")) {
                cfaeaf.getRecgrp().getBas().setCredittype("A");
            }

            //是否附有银行承兑汇票
            if (!cfaeaf.getRecgrp().getBas().isModified("billsn")) {
                if ("BRTUDP".equals(trnnam)) {
                    if ("D".equals(cfaeafBizInfo.getAvbby())) {
                        cfaeaf.getRecgrp().getBas().setBillsn("N");
                    } else {
                        cfaeaf.getRecgrp().getBas().setBillsn("Y");
                    }
                }
            }

            //是否不纳入跨境融资风险加权余额计算
            if(!cfaeaf.getRecgrp().getBas().isModified("spapfeboindex")) {
                cfaeaf.getRecgrp().getBas().setSpapfeboindex("N");
            }

            //提交场景下生成申报号码，否则快照文件中没有申报号码
            if(SettleContext.isSavTransSta()) {
                if(MdaUtils.isEmpty(cfaeaf.getRecgrp().getBas().getExdebtcode())) {
                    getReference(cfabop);
                }
            }
        }

        //操作类型为 M-修改  试算 签约 ,展期场景 赋值新到期日
        if("M".equals(cfaeaf.getCfatyp())&&"X".equals(cfaeaf.getBasflg())){
            //到期日
            if(!MdaUtils.isEmpty(cfaeafBizInfo.getMaturity())){
                if(!cfaeaf.getRecgrp().getBas().isModified("maturity")) {
                    cfaeaf.getRecgrp().getBas().setMaturity(cfaeafBizInfo.getMaturity());
                }
            }

            //是否附有银行承兑汇票 展期交易直接赋值为 N
            if (!cfaeaf.getRecgrp().getBas().isModified("billsn")) {
                    cfaeaf.getRecgrp().getBas().setBillsn("N");
            }
        }

        //开始试算 变动数据
        //操作类型为 A-新增  试算  开立的变动
        if("A".equals(cfaeaf.getCfatyp())&&"X".equals(cfaeaf.getDclflg())){
            //试算中 变动操作类型固定新增
            cfaeaf.getRecgrp().getDcl().get(0).setActiontype("A");

            //银行业务参号
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("buscode")) {
                cfaeaf.getRecgrp().getDcl().get(0).setBuscode(cfaeafBizInfo.getBrdownref());
            }

            //变动类型
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("changtype")) {
                cfaeaf.getRecgrp().getDcl().get(0).setChangtype("1101");
            }

            //变动日期
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("chdate")) {
                cfaeaf.getRecgrp().getDcl().get(0).setChdate(Dates.today());
            }

            //变动币种
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("chcurrency")) {
                cfaeaf.getRecgrp().getDcl().get(0).setChcurrency(cfaeafBizInfo.getMaxcur());
            }

            //变动金额
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("chamount")) {
                cfaeaf.getRecgrp().getDcl().get(0).setChamount(cfaeafBizInfo.getDocamt());
            }

            //提交场景下需要赋值，否则快照文件缺少申报号码 变动编号
            if(SettleContext.isSavTransSta()){
                //外债编号
                if(MdaUtils.isEmpty(cfaeaf.getRecgrp().getDcl().get(0).getExdebtcode())){
                    cfaeaf.getRecgrp().getDcl().get(0).setExdebtcode(cfaeaf.getRecgrp().getBas().getExdebtcode());
                }

                //变动编号
                if(MdaUtils.isEmpty(cfaeaf.getRecgrp().getDcl().get(0).getChangeno())){
                    cfaeaf.getRecgrp().getDcl().get(0).setChangeno(eblmodService.getChangeNo(cfaeaf.getRecgrp().getBas().getExdebtcode()));
                }

            }
        }

        //操作类型为 S-变动  试算  付款的变动
        if("S".equals(cfaeaf.getCfatyp())&&"X".equals(cfaeaf.getDclflg())){
            //试算中 变动操作类型固定新增
            cfaeaf.getRecgrp().getDcl().get(0).setActiontype("A");

            //银行业务参号
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("buscode")) {
                cfaeaf.getRecgrp().getDcl().get(0).setBuscode(cfaeafBizInfo.getBrdownref());
            }

            //变动类型
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("changtype")) {
                cfaeaf.getRecgrp().getDcl().get(0).setChangtype("1201");
            }

            //变动日期
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("chdate")) {
                cfaeaf.getRecgrp().getDcl().get(0).setChdate(Dates.today());
            }

            //变动币种
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("chcurrency")) {
                cfaeaf.getRecgrp().getDcl().get(0).setChcurrency(cfaeafBizInfo.getMaxcur());
            }

            //变动金额
            if(!cfaeaf.getRecgrp().getDcl().get(0).isModified("chamount")) {
                cfaeaf.getRecgrp().getDcl().get(0).setChamount(cfaeafBizInfo.getDocamt());
            }

            //外债编号
            if(MdaUtils.isEmpty(cfaeaf.getRecgrp().getDcl().get(0).getExdebtcode())){
                cfaeaf.getRecgrp().getDcl().get(0).setExdebtcode(cfaeaf.getRecgrp().getBas().getExdebtcode());
            }


            //变动编号
            if(SettleContext.isSavTransSta()){
                if(MdaUtils.isEmpty(cfaeaf.getRecgrp().getDcl().get(0).getChangeno())){
                    cfaeaf.getRecgrp().getDcl().get(0).setChangeno(eblmodService.getChangeNo(cfaeaf.getRecgrp().getBas().getExdebtcode()));
                }

            }
        }

        return cfabop;
    }

    @Override
    public Cfabop cfaGetPreData(Cfabop cfabop,String ownref) {

        Cfaeaf cfaeaf = cfabop.getCfaeaf();

        if(!MdaUtils.isEmpty(ownref)){
            String eblinr = "";
            eblinr = eblMapper.selectMaxInrByOwnrefAndObjtyp(ownref,"EAF");

            //读取签约 EAF 信息  以及流水信息 ebl
            if(!MdaUtils.isEmpty(eblinr)){
                Eaf eaf = eafMapper.selectByEblinr(eblinr);
                if(eaf != null){
                    cfaeaf.setOldeaf(eaf);
                    cfaeaf.getRecgrp().setBas(eaf);
                }

                Ebl ebl = eblMapper.selectByInr(eblinr);
                if(ebl != null){
                    cfaeaf.getEblmod().setWrkebl(ebl);
                    cfaeaf.setOwnextkey(ebl.getOwnextkey());
                    cfaeaf.setPansta("D");

                }

            }
        }

        return cfabop;
    }

    @Override
    public void cfabopRePair(String trninr) {
        if (MdaUtils.isEmpty(trninr)) {
            return;
        }
        Ebl eblObj = eblMapper.selectByTrninrAndObjtyp(trninr,"EAF");
        if (!MdaUtils.isEmpty(eblObj)) {
            String objInr = eblObj.getObjinr();
            String objType = eblObj.getObjtyp();
            String eblInr = eblObj.getInr();


            //删除业务关联报送数据,变动可能是多条
            Eaf eaf = eafMapper.selectByEblinr(eblInr);
            List<Ear> earList = earMapper.selectByEblinr(eblInr);

            if (!MdaUtils.isEmpty(eaf)) {
                sysmodService.sdbDeleteWithLog(eaf);
            }

            for (int i = 0; i < earList.size(); i++) {
                if (!MdaUtils.isEmpty(earList.get(i))) {
                    sysmodService.sdbDeleteWithLog(earList.get(i));
                }
            }

            sysmodService.sdbDeleteWithLog(eblObj);

        }
    }

    @Override
    public void storeContract(Cfabop cfabop) {
        Cfaeaf cfaeaf = cfabop.getCfaeaf();
        //保存BAS信息
        if ("X".equals(cfaeaf.getBasflg())) {
            String inrBas = cfaeaf.getRecgrp().getBas().getInr();
            //判断Inr对应的BAS对象为空
            if (!inrBas.isEmpty() && eafMapper.selectByInr(inrBas) != null) {
                sysmodService.sdbUpdateWithLog(cfaeaf.getRecgrp().getBas());
            } else {
                if (cfaeaf.getRecgrp().getBas().getInr().isEmpty()) {
                    sysmodService.sdbInsertWithLog(cfaeaf.getRecgrp().getBas());
                } else {
                    sysmodService.sdbUndeleteWithLog(cfaeaf.getRecgrp().getBas());
                }

                inrBas = cfaeaf.getRecgrp().getBas().getInr();
                //cfaeaf.getCfamap().getCfarep().getEaf().setInr(inrBas);
            }
            if (MdaUtils.compareTo(cfaeaf.getEblmod().getDectyp(), "M") == 0) {
                //若是error数据,更改cfaerr中sta状态
                eblmodService.setCFAERRSta("EAF", "BAS", cfaeaf.getRecgrp().getBas().getExdebtcode(), "");
            }
        }

        //保存 dcl信息
        if("X".equals(cfaeaf.getDclflg())){
            int dclnum = cfaeaf.getRecgrp().getDcl().size();
            for (int i = 0; i < dclnum; i++) {
                cfaeaf.getRecgrp().getDcl().get(i).setObjtyp("EAF");
                cfaeaf.getRecgrp().getDcl().get(i).setObjinr(cfaeaf.getRecgrp().getBas().getInr());
                if (MdaUtils.isEmpty(earMapper.selectByInr(cfaeaf.getRecgrp().getDcl().get(i).getInr()))) {
                    sysmodService.sdbInsertWithLog(cfaeaf.getRecgrp().getDcl().get(i));
                } else {
                    sysmodService.sdbUpdateWithLog(cfaeaf.getRecgrp().getDcl().get(i));
                }
                if( MdaUtils.compareTo(cfaeaf.getEblmod().getDectyp(),"M") == 0 )
                {
                    //若是error数据,更改cfaerr中sta状态
                    eblmodService.setCFAERRSta( "EAR", "DCL",cfaeaf.getRecgrp().getBas().getExdebtcode(),cfaeaf.getRecgrp().getDcl().get(i).getChangeno());
                }

            }
        }
    }

    @Override
    public void getReference(Cfabop cfabop) {
        Cfaeaf cfaeaf = cfabop.getCfaeaf();
        String objtyp = codetableService.getTblKey("EAF","CFACOD");
        String decnum = cfaeaf.getRecgrp().getBas().getDebtorcode();
        String ref = "";
        if( MdaUtils.isEmpty(cfaeaf.getRecgrp().getBas().getExdebtcode()) || (!MdaUtils.isEmpty(cfaeaf.getRecgrp().getBas().getExdebtcode()) && ! validReference(cfabop) ) )
        {
            ref = eblmodService.getCFARef ( cfaeaf.getRecgrp().getBas().getValuedate(), objtyp, decnum, false, "" );
            if( ! MdaUtils.isEmpty(ref) )
            {
                cfaeaf.getRecgrp().getBas().setExdebtcode(ref);
            }
            if( MdaUtils.isEmpty(ref) )
            {
                MdaUtils.exitRule();
            }
        }
    }

    @Override
    public boolean validReference(Cfabop cfabop) {
        Cfaeaf cfaeaf = cfabop.getCfaeaf();
        if(MdaUtils.isEmpty(cfaeaf.getRecgrp().getBas().getExdebtcode())){
            return false;
        }

        String objtyp = codetableService.getTblKey("EAF","CFACOD");
        String decnum = cfaeaf.getRecgrp().getBas().getDebtorcode();
        String ref = eblmodService.getCFARef ( cfaeaf.getRecgrp().getBas().getValuedate(), objtyp, decnum, true, cfaeaf.getRecgrp().getBas().getExdebtcode() );
        if( MdaUtils.compareTo(ref,cfaeaf.getRecgrp().getBas().getExdebtcode()) == 0 )
        {
            return true;
        }
        else
        {
            //清空变动编号，防止repair操作时，变动编号有问题
            int count = cfaeaf.getRecgrp().getDcl().size();
            for(int  i = 0;i < count;i++)
            {
                cfaeaf.getRecgrp().getDcl().get(i).setChangeno("");
            }
            return false;
        }
    }

//    @Override
//    public void registerCfabopBizInfo(Cfabop cfabop) {
//        String objtyp = cfabop.getRec().getObjtyp();
//        try {
//            CfabopRegister cfabopService = SpringEnvContext.getBean(objtyp.toLowerCase()+".cfabopRegister");
//            cfabopService.registerCfabopBizInfo(cfabop,"EAF");
//        } catch (NoSuchBeanDefinitionException e) {
//            throw new CommonServiceException("没有找到报送数据构建类");
//        }
//    }

    @Override
    public void initCfabop(Cfabop cfabop) {

        //固定值设置 债务类型
        if(!cfabop.getCfaeaf().getRecgrp().getBas().isModified("debtype")) {
            cfabop.getCfaeaf().getRecgrp().getBas().setDebtype("1108");
        }

        //操作类型处理
        String actiontype = "A";
        if("M".equals(cfabop.getCfaeaf().getCfatyp()) && "X".equals(cfabop.getCfaeaf().getBasflg())){
            if("S".equals(cfabop.getCfaeaf().getRecgrp().getBas().getSta())){
                actiontype = "C";
            }
        }
        cfabop.getCfaeaf().getRecgrp().getBas().setActiontype(actiontype);

        //设置地区机构代码，若无前手数据且为空则直接赋值 客户所属机构
        if(MdaUtils.isEmpty(cfabop.getCfaeaf().getRecgrp().getBas().getInr())){
            if(MdaUtils.isEmpty(cfabop.getCfaeaf().getOwnextkey())&&!MdaUtils.isEmpty(SettleContext.getUserSession().getWrkbch())){
                cfabop.getCfaeaf().setOwnextkey(SettleContext.getUserSession().getWrkbch().getBranch());
            }
        }

        //设置变动记录数 dclnum
        int dclnum = 0;
        if("1".equals(cfabop.getCfaeaf().getCfaflg()) || "3".equals(cfabop.getCfaeaf().getCfaflg())){
            if("A".equals(cfabop.getCfaeaf().getCfatyp())){
                dclnum = 1;
            }else if("S".equals(cfabop.getCfaeaf().getCfatyp())){
                dclnum = 1;
            }
        }

        cfabop.getCfaeaf().setDclnum(dclnum);

        //设置空变动信息，用于后续 映射赋值
        if(cfabop.getCfaeaf().getRecgrp().getDcl().size() == 0){
            for(int i=0;i<cfabop.getCfaeaf().getDclnum();i++){
                Ear ear = new Ear();
                cfabop.getCfaeaf().getRecgrp().getDcl().add(ear);
            }
        }

    }
}
