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

import com.brilliance.mda.runtime.mda.util.Dates;
import com.brilliance.mda.runtime.mda.util.Decimals;
import com.brilliance.mda.runtime.mda.util.MdaUtils;
import com.brilliance.mda.runtime.mda.util.Strings;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import com.brilliance.isc.bo.*;
import com.brilliance.isc.bo.model.Cfagit;
import com.brilliance.isc.common.bop.cfa.cfagit.service.CfaDependService;
import com.brilliance.isc.common.bop.cfa.common.TraMappingCfaDataService;
import com.brilliance.isc.common.cache.pty.PtyCacheService;
import com.brilliance.isc.common.cbsmod.service.CbsmodService;
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.util.Utils;
import com.brilliance.isc.common.vo.PtsptaVo;
import com.brilliance.isc.mda.dao.BchMapper;
import com.brilliance.isc.mda.dao.EbaMapper;
import com.brilliance.isc.mda.dao.EbbMapper;
import com.brilliance.isc.mda.dao.EblMapper;
import com.brilliance.isc.vo.lg.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import static com.brilliance.mda.runtime.mda.Constants.NULLDATE;
import static com.brilliance.mda.runtime.mda.Constants.NULLSTR;

/**
 * @author yangxd
 * @version 1.0
 * @description:将业务数据组合保送数据
 * @data 2023/6/28 16:36
 */
@Service
public class TraMappingCfaDataServiceImpl implements TraMappingCfaDataService {

    private final Logger log = LoggerFactory.getLogger(CfagitServiceImpl.class);

    @Autowired
    BchMapper bchMapper;

    @Autowired
    private PtyCacheService ptyCacheService;

    @Autowired
    private PtsptaToolComponent ptsptaToolComponent;

    @Autowired
    private EbbMapper ebbMapper;

    @Autowired
    private EblMapper eblMapper;
    @Autowired
    private CodetableService codetableService;

    @Autowired
    private EbaMapper ebaMapper;

    @Autowired
    CfaDependService cfaDependService;

    @Autowired
    private CbsmodService cbsmodService;

    @Override
    public Cfagit mappingCFADataCFAGIT(Cfagit cfagit) {
        //试算逻辑中 buildCfagit 已经reset，这里不需要再次 reset 否则无法判断前端是否传递 Amdrec模型
        //cfagit.reset();

        // 后端逻辑全是跟大写的transName做比对，这里先转成大写
        cfagit.setTransName(cfagit.getTransName().toUpperCase());
        String transName = cfagit.getTransName().toUpperCase();

        //ptapta begin
        PtsptaVo ptsptaAPL = ptsptaToolComponent.getPtsFromListByRol(cfagit.getPtsList(), "APL");
        if (MdaUtils.isEmpty(ptsptaAPL)) {
            ptsptaAPL = new PtsptaVo();
            ptsptaAPL.reset();
        }
        PtsptaVo ptsptaADV = ptsptaToolComponent.getPtsFromListByRol(cfagit.getPtsList(), "ADV");
        if (MdaUtils.isEmpty(ptsptaADV)) {
            ptsptaADV = new PtsptaVo();
            ptsptaADV.reset();
        }
        /**
         *ptaADV start
         */
        String advBic = "";
        Pta ptaADV = ptsptaADV.getPta();
        if (MdaUtils.isEmpty(ptaADV) && !MdaUtils.isEmpty(ptsptaADV.getPtainr())) {
            ptaADV = ptsptaToolComponent.getPtsptaFromPtaINR(ptsptaADV.getPtainr()).getPta();
        }
        if (!MdaUtils.isEmpty(ptaADV))
            advBic = ptaADV.getBic();
        /**
         *ptaADV end
         */
        PtsptaVo ptsptaATB = ptsptaToolComponent.getPtsFromListByRol(cfagit.getPtsList(), "ATB");
        if (MdaUtils.isEmpty(ptsptaATB)) {
            ptsptaATB = new PtsptaVo();
            ptsptaATB.reset();
        }
        /**
         *ptaATB start
         */
        String atbBic = "";
        Pta ptaATB = ptsptaATB.getPta();
        if (MdaUtils.isEmpty(ptaATB) && !MdaUtils.isEmpty(ptsptaATB.getPtainr())) {
            ptaATB = ptsptaToolComponent.getPtsptaFromPtaINR(ptsptaATB.getPtainr()).getPta();
        }
        if (!MdaUtils.isEmpty(ptaATB))
            atbBic = ptaATB.getBic();
        /**
         *ptaATB end
         */
        PtsptaVo ptsptaBEN = ptsptaToolComponent.getPtsFromListByRol(cfagit.getPtsList(), "BEN");
        if (MdaUtils.isEmpty(ptsptaBEN)) {
            ptsptaBEN = new PtsptaVo();
            ptsptaBEN.reset();
        }

        PtsptaVo ptsptaBDB = ptsptaToolComponent.getPtsFromListByRol(cfagit.getPtsList(), "BDB");
        if (MdaUtils.isEmpty(ptsptaBDB)) {
            ptsptaBDB = new PtsptaVo();
            ptsptaBDB.reset();
        }

        PtsptaVo ptsptaBEC = ptsptaToolComponent.getPtsFromListByRol(cfagit.getPtsList(), "BEC");
        if (MdaUtils.isEmpty(ptsptaBEC)) {
            ptsptaBEC = new PtsptaVo();
            ptsptaBEC.reset();
        }
        //ptapta end
        //交易对象模型字段定义 begin
        String legfrm = NULLSTR;
        String objInr = NULLSTR;
        String newExpFlg = NULLSTR;
        String expflg = NULLSTR;
        String newExpTyp = NULLSTR;
        String exptyp = NULLSTR;
        Date expdat = NULLDATE;
        Date newExpDat = NULLDATE;
        Date oldExpDat = NULLDATE;
        String purpos = NULLSTR;
        String liaflg = NULLSTR;
        String liatypc = NULLSTR;
        Date liadat = NULLDATE;
        Date newliadat = NULLDATE;
        String newliaflg = NULLSTR;
        String newliatyp = NULLSTR;
        String cfaguatyp = NULLSTR;
        String gcdownref = NULLSTR;
        Date chgdat = NULLDATE;
        BigDecimal chgamt = BigDecimal.ZERO;
        BigDecimal ameamt = BigDecimal.ZERO;
        BigDecimal newAmt = BigDecimal.ZERO;
        BigDecimal baseredcl = BigDecimal.ZERO;
        BigDecimal addameamt = Decimals.ZERO_SCALE2;
        BigDecimal addamt = Decimals.ZERO_SCALE2;
        String fenLiShi = NULLSTR;
        String hndTyp = NULLSTR;
        //文本语言
        String gidUil = NULLSTR;
        //根据交易类型组数
        switch (Strings.mid(cfagit.getTransName().toUpperCase(), 1, 2)) {
            case "GI":
            case "GE":
            case "GC":
                if (transName.equals("GITPSE") || transName.equals("GITSET")) {
                    GcdBizInfoVo cfagitRec = (GcdBizInfoVo) cfagit.getRec();
                    //方法开始去掉了reset，部分交易不存在 Amd模型，因此需要判空再取值
                    if (null != cfagit.getAmdRec()) {
                        GcdBizAmdInfoVo cfagitAmdRec = (GcdBizAmdInfoVo) cfagit.getAmdRec();
                        if (!MdaUtils.isEmpty(cfagitAmdRec)) {
//                            gcdownref = cfagitAmdRec.getGcdownref();
//                            chgdat = cfagitAmdRec.getChgdat();
//                            chgamt = cfagitAmdRec.getChgamt();
                            ameamt = cfagitAmdRec.getAmeamt();
                            if (!MdaUtils.isEmpty(cfagitAmdRec.getNewexpdat())) {
                                newExpDat = cfagitAmdRec.getNewexpdat();
                            }
                            if (!MdaUtils.isEmpty(cfagitAmdRec.getNewamt())) {
                                newAmt = cfagitAmdRec.getNewamt();
                            }
//                            oldExpDat = cfagitAmdRec.getOldExpDat();
                        }
                    }
                    if (!MdaUtils.isEmpty(cfagitRec)) {
                        gcdownref = cfagitRec.getOwnref();
                        expflg = cfagitRec.getExpflg();
                        exptyp = cfagitRec.getExptyp();
                        expdat = cfagitRec.getExpdat();
                        purpos = cfagitRec.getPurpos();
                        liaflg = cfagitRec.getLiaflg();
                        liatypc = cfagitRec.getLiatypc();
                        liadat = cfagitRec.getLiadat();
                        cfaguatyp = cfagitRec.getCfaguatyp();
                        objInr = cfagitRec.getObjinr();
                    }

                } else {
                    GidBizInfoVo cfagitRec = (GidBizInfoVo) cfagit.getRec();
                    //方法开始去掉了reset，部分交易不存在 Amd模型，因此需要判空再取值
                    if (null != cfagit.getAmdRec()) {
                        GidBizAmdInfoVo cfagitAmdRec = (GidBizAmdInfoVo) cfagit.getAmdRec();
                        if (!MdaUtils.isEmpty(cfagitAmdRec)) {
                            gcdownref = cfagitAmdRec.getGcdownref();
                            chgdat = cfagitAmdRec.getChgdat();
                            chgamt = cfagitAmdRec.getChgamt();
                            ameamt = cfagitAmdRec.getAmeamt();
                            addameamt = cfagitAmdRec.getAddameamt();
                            addamt = cfagitAmdRec.getAddamt();
                            newExpFlg = cfagitAmdRec.getNewexpflg();
                            newExpTyp = cfagitAmdRec.getNewexptyp();
                            if (!MdaUtils.isEmpty(cfagitAmdRec.getNewexpdat())) {
                                newExpDat = cfagitAmdRec.getNewexpdat();
                            }
                            if (!MdaUtils.isEmpty(cfagitAmdRec.getNewamt())) {
                                newAmt = cfagitAmdRec.getNewamt();
                            }
                            oldExpDat = cfagitAmdRec.getOldExpDat();
                            newliadat = cfagitAmdRec.getNewliadat();
                            newliatyp = cfagitAmdRec.getNewliatyp();
                        }
                    }
                    if (!MdaUtils.isEmpty(cfagitRec)) {
                        expflg = cfagitRec.getExpflg();
                        exptyp = cfagitRec.getExptyp();
                        expdat = cfagitRec.getExpdat();
                        purpos = cfagitRec.getPurpos();
                        liaflg = cfagitRec.getLiaflg();
                        liatypc = cfagitRec.getLiatypc();
                        liadat = cfagitRec.getLiadat();
                        cfaguatyp = cfagitRec.getCfaguatyp();
                        objInr = cfagitRec.getObjinr();
                        fenLiShi = cfagitRec.getFenlishi();
                        legfrm = cfagitRec.getLegfrm();
                    }
                }

                break;
            case "NI":
                if (transName.equals("NITPSE") || transName.equals("NITSET")) {
                    NcdBizInfoVo cfanitRec = (NcdBizInfoVo) cfagit.getRec();
                    if (null != cfagit.getAmdRec()) {
                        NcdBizAmdInfoVo cfagitnmdRec = (NcdBizAmdInfoVo) cfagit.getAmdRec();
                        if (!MdaUtils.isEmpty(cfagitnmdRec)) {
//                            gcdownref = cfagitnmdRec.getNcdownref();
//                            chgdat = cfagitnmdRec.getChgdat();
//                            chgamt = cfagitnmdRec.getChgamt();
                            ameamt = cfagitnmdRec.getAmeamt();
                            if (!MdaUtils.isEmpty(cfagitnmdRec.getNewexpdat())) {
                                newExpDat = cfagitnmdRec.getNewexpdat();
                            }
                            if (!MdaUtils.isEmpty(cfagitnmdRec.getNewamt())) {
                                newAmt = cfagitnmdRec.getNewamt();
                            }
//                            oldExpDat = cfagitnmdRec.getOldExpDat();
                        }

                    }

                    //
                    if (!MdaUtils.isEmpty(cfanitRec)) {
                        expflg = cfanitRec.getExpflg();
                        gcdownref = cfanitRec.getOwnref();
                        exptyp = cfanitRec.getExptyp();
                        expdat = cfanitRec.getExpdat();
                        purpos = cfanitRec.getPurpos();
                        liaflg = cfanitRec.getLiaflg();
                        liatypc = cfanitRec.getLiatypc();
                        liadat = cfanitRec.getLiadat();
                        cfaguatyp = cfanitRec.getCfaguatyp();
                        objInr = cfanitRec.getObjinr();
                    }
                } else {
                    NidBizInfoVo cfanitRec = (NidBizInfoVo) cfagit.getRec();
                    if (null != cfagit.getAmdRec()) {
                        NidBizAmdInfoVo cfagitnmdRec = (NidBizAmdInfoVo) cfagit.getAmdRec();
                        if (!MdaUtils.isEmpty(cfagitnmdRec)) {
                            gcdownref = cfagitnmdRec.getGcdownref();
                            chgdat = cfagitnmdRec.getChgdat();
                            chgamt = cfagitnmdRec.getChgamt();
                            ameamt = cfagitnmdRec.getAmeamt();
                            newExpFlg = cfagitnmdRec.getNewexpflg();
                            if (!MdaUtils.isEmpty(cfagitnmdRec.getNewexpdat())) {
                                newExpDat = cfagitnmdRec.getNewexpdat();
                            }
                            if (!MdaUtils.isEmpty(cfagitnmdRec.getNewamt())) {
                                newAmt = cfagitnmdRec.getNewamt();
                            }
                            oldExpDat = cfagitnmdRec.getOldExpDat();
                            newliadat = cfagitnmdRec.getNewliadat();
                            newliaflg = cfagitnmdRec.getNewliaflg();
                        }

                    }

                    //
                    if (!MdaUtils.isEmpty(cfanitRec)) {
                        expflg = cfanitRec.getExpflg();
                        exptyp = cfanitRec.getExptyp();
                        expdat = cfanitRec.getExpdat();
                        purpos = cfanitRec.getPurpos();
                        liaflg = cfanitRec.getLiaflg();
                        liatypc = cfanitRec.getLiatypc();
                        liadat = cfanitRec.getLiadat();
                        cfaguatyp = cfanitRec.getCfaguatyp();
                        objInr = cfanitRec.getObjinr();
                        fenLiShi = cfanitRec.getFenlishi();
                        hndTyp = cfanitRec.getHndtyp();
                        gidUil = cfanitRec.getGiduil();
                    }
                }


                break;
        }


        if (MdaUtils.compareTo(cfagit.getCfaflg(), "1") == 0) {
            if (MdaUtils.isEmpty(cfagit.getOwnextkey()) && !MdaUtils.isEmpty(SettleContext.getUserSession().getWrkbch())) {
//                if( !cfagit.getRecgrp().getBas().isModified("ownextkey") )
                cfagit.setOwnextkey(SettleContext.getUserSession().getWrkbch().getBranch());
            }
        }
        //交易对象模型字段定义 end

        Cbb cbb = (Cbb) cfagit.getCbsMap().get("MAX");
        Cbb opn1Cbb = (Cbb) cfagit.getCbsMap().get("OPN1");
        Cbb opn2Cbb = (Cbb) cfagit.getCbsMap().get("OPN2");
        if (cfagit.getCfatyp().toUpperCase().equals("A")) {
//            if( !cfagit.getRecgrp().getBas().isModified("contractdate") )
            cfagit.getRecgrp().getBas().setContractdate(cfagit.getRec().getOpndat());

            /**
             if GIDGRP\\REC\\EXPFLG == "X" then
             **/

//            if (MdaUtils.compareTo(expflg, "X") == 0 || MdaUtils.compareTo(exptyp, "OPEN") == 0) {
            if (MdaUtils.isEmpty(expdat)) {
                //到期日为敞口，则签约日期加20年
                cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
            } else {
//                if( !cfagit.getRecgrp().getBas().isModified("maturity") )
                cfagit.getRecgrp().getBas().setMaturity(expdat);
            }

            //---JXQ20111109---
            if (MdaUtils.compareTo(purpos, "ISCO") == 0 || MdaUtils.compareTo(purpos, "ICCO") == 0 || MdaUtils.compareTo(hndTyp, "OC") == 0) {
//                if( MdaUtils.compareTo(liaflg,"X") == 0 || MdaUtils.compareTo(liatypc,"OPEN") == 0 ) {
                if (MdaUtils.isEmpty(liadat)) {
//                    if( !cfagit.getRecgrp().getBas().isModified("maturity") )
                    //到期日为敞口，则签约日期加20年
                    cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                } else {
//                    if( !cfagit.getRecgrp().getBas().isModified("maturity") )
                    cfagit.getRecgrp().getBas().setMaturity(liadat);
                }
            }
            if (!cfagit.getRecgrp().getBas().isModified("guarancurr")) {
                cfagit.getRecgrp().getBas().setGuarancurr(cbb.getCur());
            }
            if (!cfagit.getRecgrp().getBas().isModified("guaranamount")) {
//                cfagit.getRecgrp().getBas().setGuaranamount( cbb.getAmt());
                if (Strings.mid(transName, 1, 2).equals("GI")) {
                    cfagit.getRecgrp().getBas().setGuaranamount(cbb.getAmt().add(addamt));
                } else {
                    cfagit.getRecgrp().getBas().setGuaranamount(cbb.getAmt());
                }

            }

//            if( !cfagit.getRecgrp().getBas().isModified("guarantype") )
//            {
//
//            }
            cfagit.getRecgrp().getBas().setGuarantype(cfaguatyp);
            if (!MdaUtils.isEmpty(SettleContext.getUserSession().getWrkbch()) && MdaUtils.compareTo(cfagit.getOwnextkey(), SettleContext.getUserSession().getWrkbch().getBranch()) == 0) {
//                if( !cfagit.getRecgrp().getBas().isModified("guarantorcode") )
                cfagit.getRecgrp().getBas().setGuarantorcode(SettleContext.getUserSession().getWrkbch().getDecnum());
            } else {
//                if( !cfagit.getRecgrp().getBas().isModified("guarantorcode") )
                /**
                 RECGRP\\BAS\\GUARANTORCODE = EBLMOD.GetDecnum ( OWNEXTKEY )
                 **/
                String decnum = NULLSTR;
                Bch bchOwn = bchMapper.selectByBranch(cfagit.getOwnextkey());
                if (!MdaUtils.isEmpty(bchOwn))
                    decnum = bchOwn.getDecnum();
                cfagit.getRecgrp().getBas().setGuarantorcode(decnum);
            }
            String nam1 = NULLSTR;
            if (!MdaUtils.isEmpty(ptsptaAPL.getPtyinr())) {
                Pty ptyAPL = ptyCacheService.getPtyById(ptsptaAPL.getPtyinr());
                if (!MdaUtils.isEmpty(ptyAPL))
                    nam1 = ptyAPL.getNam1();
            }
//            String bnbName = NULLSTR;
//            if (!MdaUtils.isEmpty(ptsptaBDB.getPtyinr()))
//            {
//                Pty ptyBNB = ptyCacheService.getPtyById(ptsptaBDB.getPtyinr());
//                if (!MdaUtils.isEmpty(ptyBNB))
//                    bnbName = ptyBNB.getNam1();
//            }

            if (!cfagit.getRecgrp().getBas().isModified("guappname")) {
                cfagit.getRecgrp().getBas().setGuappname(nam1);
            }
            if (!cfagit.getRecgrp().getBas().isModified("guappnamen")) {
                cfagit.getRecgrp().getBas().setGuappnamen(ptsptaAPL.getPts().getEnnam());
            }
            String juscod = NULLSTR;
            if (!MdaUtils.isEmpty(ptsptaAPL.getPtyinr())) {
                Pty ptyAPL = ptyCacheService.getPtyById(ptsptaAPL.getPtyinr());
                if (!MdaUtils.isEmpty(ptyAPL))
                    juscod = ptyAPL.getJuscod();
            }

            if (!cfagit.getRecgrp().getBas().isModified("guappcode"))
                cfagit.getRecgrp().getBas().setGuappcode(juscod);
            if (MdaUtils.isEmpty(cfagit.getRecgrp().getBas().getBencountrycode()) || (!cfagit.getRecgrp().getBas().isModified("bencountrycode") && MdaUtils.isEmpty(cfagit.getRecgrp().getBas().getCrehqcodeflg()))) {
                cfagit.getRecgrp().getBas().setBencountrycode(codetableService.getTblLabel(Strings.mid(ptsptaADV.getPts().getExtkey(), 5, 2), "CTYCOD"));

                //---jxq20211108---this.getRecp().getPubp()更换成cfagit.getRecgrp().getBas()
                if (MdaUtils.isEmpty(cfagit.getRecgrp().getBas().getBencountrycode())) {
                    cfagit.getRecgrp().getBas().setBencountrycode(codetableService.getTblLabel(Strings.mid(ptsptaATB.getPts().getExtkey(), 5, 2), "CTYCOD"));
                }
            }


            /**
             * 非分离式保函，被担保人取申请人
             * 分离式保函，被担保人取被保证人
             */
            if (!cfagit.getRecgrp().getBas().isModified("guedcouncode")) {
                if (!cfagit.getRecgrp().getBas().isModified("guedname")) {
                    if (MdaUtils.compareTo(fenLiShi, "2") == 0) {
                        cfagit.getRecgrp().getBas().setGuedname(ptsptaBDB.getPts().getCnnam());
                    } else {
                        cfagit.getRecgrp().getBas().setGuedname(nam1);
                        cfagit.getRecgrp().getBas().setGuedcode(cfagit.getRecgrp().getBas().getGuappcode());
                    }
                }
                if (!cfagit.getRecgrp().getBas().isModified("guednamen")) {
                    if (MdaUtils.compareTo(fenLiShi, "2") == 0) {
                        cfagit.getRecgrp().getBas().setGuednamen(ptsptaBDB.getPts().getEnnam());
                    } else {
                        cfagit.getRecgrp().getBas().setGuednamen(ptsptaAPL.getPts().getEnnam());
                        cfagit.getRecgrp().getBas().setGuedcode(cfagit.getRecgrp().getBas().getGuappcode());
                    }
                }
                /*
                if (!cfagit.getRecgrp().getBas().isModified("guednamen")) {
                    cfagit.getRecgrp().getBas().setGuednamen("");
                }

                 */
                if (MdaUtils.compareTo(Strings.mid(cfaguatyp, 1, 2), "12") == 0) {
                    cfagit.getRecgrp().getBas().setGuedcouncode("CHN");
                } else {
                    cfagit.getRecgrp().getBas().setGuedcouncode("");
                }
            }

            if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getGuarantype(), "1105") != 0 && MdaUtils.compareTo(cfagit.getRecgrp().getBas().getMaindebtmanner(), "1") != 0) {
                if (MdaUtils.compareTo(Strings.mid(cfaguatyp, 1, 2), "12") == 0) {
                    //非融资
                    //被担保人
//                if( !cfagit.getRecgrp().getBas().isModified("guedcouncode"))
//                {
//                    if( !cfagit.getRecgrp().getBas().isModified("guedname") )
//                    {
//                        cfagit.getRecgrp().getBas().setGuedname( nam1);
//                    }
//                    if( !cfagit.getRecgrp().getBas().isModified("guednamen"))
//                    {
//                        cfagit.getRecgrp().getBas().setGuednamen( "");
//                    }
//                    cfagit.getRecgrp().getBas().setGuedcouncode( "CHN");
                    /**
                     else
                     if RECP\\PUBP\\GUEDCOUNCODE <> "CHN" then
                     if not IsModified( RECP\\PUBP\\GUEDNAME ) then
                     RECP\\PUBP\\GUEDNAME = ""
                     endif
                     if not IsModified( RECP\\PUBP\\GUEDNAMEN ) then
                     RECP\\PUBP\\GUEDNAMEN = ""
                     endif
                     if not IsModified( RECP\\RECGRP\\BAS\\GUEDTYPE ) then
                     RECP\\RECGRP\\BAS\\GUEDTYPE = ""
                     endif
                     else
                     if not IsModified( RECP\\PUBP\\GUEDNAME ) then
                     RECP\\PUBP\\GUEDNAME = $NAM1
                     endif
                     if not IsModified( RECP\\PUBP\\GUEDNAMEN ) then
                     RECP\\PUBP\\GUEDNAMEN = ""
                     endif
                     endif
                     **/
//                }
                    /**
                     * isco和icco开立下非融资类对外担保，受益人取sequence C下的受益人
                     */
                    if ((MdaUtils.compareTo(purpos, "ISCO") == 0 || MdaUtils.compareTo(purpos, "ICCO") == 0) && Strings.mid(transName, 1, 2).equals("GI")) {
                        if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                            cfagit.getRecgrp().getBas().setBenamen(ptsptaBEC.getPts().getEnnam());
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                            cfagit.getRecgrp().getBas().setBename(ptsptaBEC.getPts().getCnnam());
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bencode")) {
                            cfagit.getRecgrp().getBas().setBencode("");
                        }
                    } else {
                        if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                            cfagit.getRecgrp().getBas().setBenamen(ptsptaBEN.getPts().getEnnam());
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                            cfagit.getRecgrp().getBas().setBename(ptsptaBEN.getPts().getCnnam());
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bencode")) {
                            cfagit.getRecgrp().getBas().setBencode("");
                        }

                    }
                } else {
//                if (!cfagit.getRecgrp().getBas().isModified("guednamen"))
//                    cfagit.getRecgrp().getBas().setGuednamen( ptsptaBEN.getPts().getNam());
//                if( !cfagit.getRecgrp().getBas().isModified("guedcouncode") && MdaUtils.isEmpty(cfagit.getRecgrp().getBas().getOpercodeflg()) )
//                {
//                    cfagit.getRecgrp().getBas().setGuedcouncode( codetableService.getTblLabel(Strings.mid(advBic,5,2),"CTYCOD"));
//                    //---jxq20211108---
//                    if( MdaUtils.isEmpty(cfagit.getRecgrp().getBas().getGuedcouncode()) )
//                    {
//                        cfagit.getRecgrp().getBas().setGuedcouncode( codetableService.getTblLabel(Strings.mid(atbBic,5,2),"CTYCOD"));
//                    }
//                }


//                String advnam = ptyMapper.queryById(ptsptaADV.getPtyinr()).getNam();
//
//                //---jxq20211108---
//                if( MdaUtils.isEmpty(advnam) )
//                {
//                    advnam = ptyMapper.queryById(ptsptaATB.getPtyinr()).getNam();
//                }
//                if( !cfagit.getRecgrp().getBas().isModified("benamen") )
//                {
//                    cfagit.getRecgrp().getBas().setBenamen( advnam);
//                }
//                    if( !cfagit.getRecgrp().getBas().isModified("bename") ) {
//                        cfagit.getRecgrp().getBas().setBename( "");
//                    }
                    /**
                     * isco和icco开立下融资类对外担保，受益人取sequence C下的受益人
                     */
                    if ((MdaUtils.compareTo(purpos, "ISCO") == 0 || MdaUtils.compareTo(purpos, "ICCO") == 0) && Strings.mid(transName, 1, 2).equals("GI")) {
                        if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                            cfagit.getRecgrp().getBas().setBenamen(ptsptaBEC.getPts().getEnnam());
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                            cfagit.getRecgrp().getBas().setBename(ptsptaBEC.getPts().getCnnam());
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bencode")) {
                            cfagit.getRecgrp().getBas().setBencode("");
                        }
                    } else {
                        String advnameCn = "";
                        String advnameEn = "";
                        if (!MdaUtils.isEmpty(ptsptaADV.getPtyinr())) {
                            advnameCn = ptsptaADV.getPts().getCnnam();
                            advnameEn = ptsptaADV.getPts().getEnnam();
                        }
                        if (!MdaUtils.isEmpty(ptsptaATB.getPtyinr())) {
                            advnameCn = ptsptaATB.getPts().getCnnam();
                            advnameEn = ptsptaATB.getPts().getEnnam();
                        }

                        if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                            cfagit.getRecgrp().getBas().setBenamen(advnameEn);
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                            cfagit.getRecgrp().getBas().setBename(advnameCn);
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bencode")) {
                            if (!MdaUtils.isEmpty(advBic)) {
                                cfagit.getRecgrp().getBas().setBencode(advBic);
                            } else {
                                cfagit.getRecgrp().getBas().setBencode(atbBic);
                            }
                        }
                    }
                    /**
                     * 国内保函转开 融资性对外担保，受益人中英文名称为空，需手动输入，校验必输
                     */
                    if (MdaUtils.compareTo(hndTyp, "OT") == 0 && Strings.mid(transName, 1, 2).equals("NI")) {
                        if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                            cfagit.getRecgrp().getBas().setBenamen("");
                        }
                        if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                            cfagit.getRecgrp().getBas().setBename("");
                        }
                    }
                }
            }

            //试算时完成对外担保号的生成
            cfaDependService.setCfagitPro(cfagit);
            cfaDependService.getCfaReference("EBA", cfagit.getRecgrp().getBas().getContractdate());
            /**
             * Start 处理新增转开逻辑-老TD无
             */
            if (MdaUtils.compareTo(hndTyp, "OT") == 0) {
                if (!cfagit.getRecgrp().getBas().isModified("guedcouncode"))
                    cfagit.getRecgrp().getBas().setGuedcouncode("");
            }
            /**
             * End 处理新增转开逻辑-老TD无
             */
            if (MdaUtils.compareTo(cfagit.getDclflg(), "X") == 0) {
                cfagit.getRecgrp().getDcl().get(0).setExguarancode(cfagit.getRecgrp().getBas().getExguarancode());
                cfagit.getRecgrp().getDcl().get(0).setWabachandate(cfagit.getRecgrp().getBas().getContractdate());
                cfagit.getRecgrp().getDcl().get(0).setBasere(cfagit.getRecgrp().getBas().getGuaranamount());
            }
        }

        if (MdaUtils.compareTo(cfagit.getCfatyp(), "M") == 0) {
            /**
             if GetFramename == "GITPLB" and BASFLG == "X" then
             $chgdat = GetContentDate( "\\\\CHGDAT" )
             $chgamt = GetContentNumeric( "\\\\CHGAMT" )
             RECGRP\\BAS\\GUARANAMOUNT = GIDGRP\\CBS\\MAX\\AMT + $chgamt
             SetStyle( "red", RECGRP\\BAS\\GUARANAMOUNT )
             if DCLFLG == "X" then
             RECP\\DCLP( 1 )\\EXGUARANCODE = RECGRP\\BAS\\EXGUARANCODE
             RECP\\DCLP( 1 )\\WABACHANDATE = $chgdat
             RECP\\DCLP( 1 )\\BASERE = GetBasere( RECGRP\\BAS\\EXGUARANCODE ) + $chgamt
             endif
             endif
             **/

            if ((MdaUtils.compareTo(cfagit.getTransName(), "GITAME") == 0 || MdaUtils.compareTo(cfagit.getTransName(), "NITAME") == 0 || MdaUtils.compareTo(cfagit.getTransName(), "HITAME") == 0 ||
                    MdaUtils.compareTo(cfagit.getTransName(), "GITPAM") == 0 || MdaUtils.compareTo(cfagit.getTransName(), "NITPAM") == 0 || MdaUtils.compareTo(cfagit.getTransName(), "GITDLA") == 0 ||
                    MdaUtils.compareTo(cfagit.getTransName(), "GITPDL") == 0 || MdaUtils.compareTo(cfagit.getTransName(), "NITPDL") == 0 || MdaUtils.compareTo(cfagit.getTransName(), "NITDLA") == 0) &&
                    MdaUtils.compareTo(cfagit.getBasflg(), "X") == 0) {
                if (Strings.mid(transName, 1, 2).equals("GI")) {
                    /**
                     * 国际保函开立issu下选other出759 没exptyp字段需单独处理
                     */
//                    if(MdaUtils.compareTo(legfrm, "DEPU") == 0){
//                        if(MdaUtils.compareTo(newExpFlg, "X") == 0){
//                            cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
//                        }else{
//                            if(!MdaUtils.isEmpty(newExpDat)){
//                                cfagit.getRecgrp().getBas().setMaturity(newExpDat);
//                            }else{
//                                if(MdaUtils.isEmpty(expdat)){
//                                    cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
//                                }else{
//                                    cfagit.getRecgrp().getBas().setMaturity(expdat);
//                                }
//                            }
//                        }
//                    }
                    if (!MdaUtils.isEmpty(newExpTyp)) {
                        if (!MdaUtils.isEmpty(newExpDat)) {
                            cfagit.getRecgrp().getBas().setMaturity(newExpDat);
                        } else {
                            cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                        }
                    } else {
                        if (MdaUtils.isEmpty(expdat)) {
                            cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                        } else {
                            cfagit.getRecgrp().getBas().setMaturity(expdat);
                        }
                    }
                }
                if (Strings.mid(transName, 1, 2).equals("NI")) {
                    if (MdaUtils.compareTo(newExpFlg, "X") == 0) {
                        cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                    } else {
                        if (!MdaUtils.isEmpty(newExpDat)) {
                            cfagit.getRecgrp().getBas().setMaturity(newExpDat);
                        } else {
                            if (!MdaUtils.isEmpty(expdat)) {
                                cfagit.getRecgrp().getBas().setMaturity(expdat);
                            } else {
                                cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                            }
                        }
                    }
                }
//                if( MdaUtils.compareTo(expflg,"X") == 0 || MdaUtils.compareTo(exptyp,"OPEN") == 0 ) {
//                        //到期日为敞口，则签约日期加20年
//                        cfagit.getRecgrp().getBas().setMaturity( Dates.add(cfagit.getRecgrp().getBas().getContractdate(),7305));
//                }else {
//                    if(!MdaUtils.isEmpty(newExpDat)){
//                        cfagit.getRecgrp().getBas().setMaturity(newExpDat);
//                    }else{
//                        cfagit.getRecgrp().getBas().setMaturity(cfagit.getRec().getExpdat());
//                    }
//                }
//                else if(!MdaUtils.isEmpty(newExpDat) && (newExpDat.getTime() > oldExpDat.getTime()) ){
//                    cfagit.getRecgrp().getBas().setMaturity(newExpDat);
//                } else {
//                    cfagit.getRecgrp().getBas().setMaturity(oldExpDat);
//                }
                //---JXQ20111109---
                if (MdaUtils.compareTo(purpos, "ISCO") == 0 || MdaUtils.compareTo(purpos, "ICCO") == 0 || MdaUtils.compareTo(hndTyp, "OC") == 0) {
                    if (Strings.mid(transName, 1, 2).equals("GI")) {
                        if (!MdaUtils.isEmpty(newliatyp)) {
                            if (!MdaUtils.isEmpty(newliadat)) {
                                cfagit.getRecgrp().getBas().setMaturity(newliadat);
                            } else {
                                cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                            }
                        } else {
                            if (MdaUtils.isEmpty(liadat)) {
                                cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                            } else {
                                cfagit.getRecgrp().getBas().setMaturity(liadat);
                            }
                        }
                    }
                    if (Strings.mid(transName, 1, 2).equals("NI")) {
                        if (MdaUtils.compareTo(newliaflg, "X") == 0) {
                            cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                        } else {
                            if (!MdaUtils.isEmpty(newliadat)) {
                                cfagit.getRecgrp().getBas().setMaturity(newliadat);
                            } else {
                                if (MdaUtils.isEmpty(liadat)) {
                                    cfagit.getRecgrp().getBas().setMaturity(Dates.add(cfagit.getRecgrp().getBas().getContractdate(), 7305));
                                } else {
                                    cfagit.getRecgrp().getBas().setMaturity(liadat);
                                }
                            }
                        }
                    }
                }
                if (Strings.mid(transName, 1, 2).equals("GI")) {
                    if (MdaUtils.compareTo(cfagit.getTransName(), "GITPDL") == 0
                            || MdaUtils.compareTo(cfagit.getTransName(), "GITDLA") == 0) {
                        Cbb maxCbb = new Cbb();
                        Date maxDate = Dates.add(Utils.getMaxDate(), -1);
                        cbsmodService.cbsGetBalance(maxCbb, "GID", cfagit.getRec().getObjinr(), "MAXSUM", "AMT1", maxDate);
                        cfagit.getRecgrp().getBas().setGuaranamount(maxCbb.getAmt().add(ameamt).add(addamt));
                    } else {
                        cfagit.getRecgrp().getBas().setGuaranamount(cbb.getAmt().add(addamt));
                    }
                } else {
                    if (MdaUtils.compareTo(cfagit.getTransName(), "NITPDL") == 0
                            || MdaUtils.compareTo(cfagit.getTransName(), "NITDLA") == 0) {
                        Cbb maxCbb = new Cbb();
                        Date maxDate = Dates.add(Utils.getMaxDate(), -1);
                        cbsmodService.cbsGetBalance(maxCbb, "NID", cfagit.getRec().getObjinr(), "MAXSUM", "AMT1", maxDate);
                        cfagit.getRecgrp().getBas().setGuaranamount(maxCbb.getAmt().add(ameamt).add(addamt));
                    } else {
                        cfagit.getRecgrp().getBas().setGuaranamount(cbb.getAmt());
                    }
                }

//                // 获取初始化时交易的ptslist
//                Map<String, PtsptaVo> oldPtsMap = new HashMap<>();
//                switch (Strings.mid(cfagit.getTransName().toUpperCase(), 1, 2)) {
//                    case "GI":
//                        oldPtsMap = ptsptaToolComponent.getPtsptaList(objInr, "GID");
//                        break;
//                    case "NI":
//                        oldPtsMap = ptsptaToolComponent.getPtsptaList(objInr, "NID");
//                        break;
//                }
//
//                PtsptaVo ptsptaOldGRPAdv = oldPtsMap.get("ADV");
//                PtsptaVo ptsptaOldGRPAtb = oldPtsMap.get("ATB");
//                if (MdaUtils.isEmpty(ptsptaOldGRPAdv)) {
//                    ptsptaOldGRPAdv = new PtsptaVo();
//                    ptsptaOldGRPAdv.reset();
//                }
//                if (MdaUtils.isEmpty(ptsptaOldGRPAtb)) {
//                    ptsptaOldGRPAtb = new PtsptaVo();
//                    ptsptaOldGRPAtb.reset();
//                }
////                PtsptaVo ptsptaOldGRPAdv =ptsptaToolComponent.getPtsFromListByRol(cfagit.getPtsList(), "OLDGRP.ADV");
////                PtsptaVo ptsptaOldGRPAtb =ptsptaToolComponent.getPtsFromListByRol(cfagit.getPtsList(), "OLDGRP.ATB");
//
//                String oldAdvExt = ptsptaOldGRPAdv.getPts().getExtkey();
//                int err = 0;
//                //---jxq20211108---
//                if (MdaUtils.isEmpty(oldAdvExt)) {
//                    oldAdvExt = ptsptaOldGRPAtb.getPts().getExtkey();
//                }
//                if (!MdaUtils.isEmpty(ptsptaADV.getPts().getExtkey()) && MdaUtils.compareTo(ptsptaADV.getPts().getExtkey(), oldAdvExt) != 0 && !cfagit.getRecgrp().getBas().isModified("bencountrycode")) {
//                    cfagit.getRecgrp().getBas().setBencountrycode(codetableService.getTblLabel(Strings.mid(ptsptaADV.getPts().getExtkey(), 5, 2), "CTYCOD"));
//                }
//                //---jxq20211108---
//                if (MdaUtils.isEmpty(cfagit.getRecgrp().getBas().getBencountrycode()) && !cfagit.getRecgrp().getBas().isModified("bencountrycode")) {
//                    if (!MdaUtils.isEmpty(ptsptaATB.getPts().getExtkey()) && MdaUtils.compareTo(ptsptaATB.getPts().getExtkey(), oldAdvExt) != 0) {
//                        cfagit.getRecgrp().getBas().setBencountrycode(codetableService.getTblLabel(Strings.mid(ptsptaATB.getPts().getExtkey(), 5, 2), "CTYCOD"));
//                    }
//                }

                /**
                 * 修改交易修改受益人重新赋值逻辑
                 */
                if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getGuarantype(), "1105") != 0 && MdaUtils.compareTo(cfagit.getRecgrp().getBas().getMaindebtmanner(), "1") != 0) {
                    if (MdaUtils.compareTo(Strings.mid(cfaguatyp, 1, 2), "12") == 0) {
                        //非融资
                        /**
                         * isco和icco开立下非融资类对外担保，受益人取sequence C下的受益人
                         */
                        if ((MdaUtils.compareTo(purpos, "ISCO") == 0 || MdaUtils.compareTo(purpos, "ICCO") == 0) && Strings.mid(transName, 1, 2).equals("GI")) {
                            if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                                cfagit.getRecgrp().getBas().setBenamen(ptsptaBEC.getPts().getEnnam());
                            }
                            if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                                cfagit.getRecgrp().getBas().setBename(ptsptaBEC.getPts().getCnnam());
                            }
                        } else {
                            if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                                cfagit.getRecgrp().getBas().setBenamen(ptsptaBEN.getPts().getEnnam());
                            }
                            if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                                cfagit.getRecgrp().getBas().setBename(ptsptaBEN.getPts().getCnnam());
                            }
                        }
                    } else {
                        /**
                         * isco和icco开立下融资类对外担保，受益人取sequence C下的受益人
                         */
                        if ((MdaUtils.compareTo(purpos, "ISCO") == 0 || MdaUtils.compareTo(purpos, "ICCO") == 0) && Strings.mid(transName, 1, 2).equals("GI")) {
                            if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                                cfagit.getRecgrp().getBas().setBenamen(ptsptaBEC.getPts().getEnnam());
                            }
                            if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                                cfagit.getRecgrp().getBas().setBename(ptsptaBEC.getPts().getCnnam());
                            }
                        } else {
                            if (MdaUtils.compareTo(hndTyp, "OT") != 0 && Strings.mid(transName, 1, 2).equals("NI")) {
                                if (MdaUtils.compareTo(cfagit.getBenchange(), "1") == 0) {
                                    String advnameCn = "";
                                    String advnameEn = "";
                                    if (!MdaUtils.isEmpty(ptsptaADV.getPtyinr())) {
                                        advnameCn = ptsptaADV.getPts().getCnnam();
                                        advnameEn = ptsptaADV.getPts().getEnnam();
                                    }
                                    if (!MdaUtils.isEmpty(ptsptaATB.getPtyinr())) {
                                        advnameCn = ptsptaATB.getPts().getCnnam();
                                        advnameEn = ptsptaATB.getPts().getEnnam();
                                    }

                                    if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
                                        cfagit.getRecgrp().getBas().setBenamen(advnameEn);
                                    }
                                    if (!cfagit.getRecgrp().getBas().isModified("bename")) {
                                        cfagit.getRecgrp().getBas().setBename(advnameCn);
                                    }
                                    if (!cfagit.getRecgrp().getBas().isModified("bencode")) {
                                        if (!MdaUtils.isEmpty(advBic)) {
                                            cfagit.getRecgrp().getBas().setBencode(advBic);
                                        } else {
                                            cfagit.getRecgrp().getBas().setBencode(atbBic);
                                        }
                                    }
                                }
                            }
                        }
                        /**
                         * 国内保函转开 融资性对外担保
                         */
//                        if (MdaUtils.compareTo(hndTyp, "OT") == 0  && Strings.mid(transName, 1, 2).equals("NI")) {
//                            if (!cfagit.getRecgrp().getBas().isModified("benamen")) {
//                                cfagit.getRecgrp().getBas().setBenamen(ptsptaBEN.getPts().getEnnam());
//                            }
//                            if (!cfagit.getRecgrp().getBas().isModified("bename")) {
//                                cfagit.getRecgrp().getBas().setBename(ptsptaBEN.getPts().getCnnam());
//                            }
//                        }
                    }
                }

                if (MdaUtils.compareTo(cfagit.getDclflg(), "X") == 0) {
                    cfagit.getRecgrp().getDcl().get(0).setExguarancode(cfagit.getRecgrp().getBas().getExguarancode());
                    cfagit.getRecgrp().getDcl().get(0).setWabachandate(Dates.today());
                    Ebb ebbDcl = ebbMapper.selectByExguarancodeEbb(cfagit.getRecgrp().getBas().getExguarancode());
                    if (!MdaUtils.isEmpty(ebbDcl)) {
                        baseredcl = ebbDcl.getBasere();
                    } else {
                        baseredcl = BigDecimal.ZERO;
                    }
                    if (Strings.mid(transName, 1, 2).equals("GI")) {
                        cfagit.getRecgrp().getDcl().get(0).setBasere(Decimals.add(baseredcl, ameamt).add(addameamt));
                    } else {
                        cfagit.getRecgrp().getDcl().get(0).setBasere(Decimals.add(baseredcl, ameamt));
                    }
                }
            }
        }
        BigDecimal amt = null;
        if (MdaUtils.compareTo(cfagit.getCfatyp(), "C") == 0) {
            if (MdaUtils.compareTo(cfagit.getDclflg(), "X") == 0) {
                chgdat = Dates.today();
                chgamt = new BigDecimal("0");
                if (MdaUtils.compareTo(cfagit.getTransName(), "GITCAN") == 0 || MdaUtils.compareTo(cfagit.getTransName(), "NITCAN") == 0) {
                    chgdat = Dates.today();
                    amt = new BigDecimal("0");
                } else {
                    Ebb ebbDcl = ebbMapper.selectByExguarancodeEbb(cfagit.getRecgrp().getBas().getExguarancode());
                    if (!MdaUtils.isEmpty(ebbDcl))
                        baseredcl = ebbDcl.getBasere();
                    else
                        baseredcl = BigDecimal.ZERO;
                    amt = Decimals.add(baseredcl, chgamt);
                }
                cfagit.getRecgrp().getDcl().get(0).setExguarancode(cfagit.getRecgrp().getBas().getExguarancode());
                cfagit.getRecgrp().getDcl().get(0).setWabachandate(chgdat);
                cfagit.getRecgrp().getDcl().get(0).setBasere(amt);
            }
        }
        String buscod;
        BigDecimal gupamt = null;
        if (MdaUtils.compareTo(cfagit.getCfatyp(), "S") == 0) {
            if (MdaUtils.isEmpty(opn2Cbb)) {
                gupamt = opn1Cbb.getAmt();
            } else {
                gupamt = opn1Cbb.getAmt().add(opn2Cbb.getAmt());
            }
            if (MdaUtils.compareTo(cfagit.getVrfflg(), "X") == 0) {
                cfagit.getRecgrp().getVrf().get(0).setExguarancode(cfagit.getRecgrp().getBas().getExguarancode());
                cfagit.getRecgrp().getVrf().get(0).setGuarantorcode(cfagit.getRecgrp().getBas().getGuarantorcode());
                buscod = gcdownref;
                cfagit.getRecgrp().getVrf().get(0).setBuscode(buscod);
                cfagit.getRecgrp().getVrf().get(0).setBencode(cfagit.getRecgrp().getBas().getBencode());
                cfagit.getRecgrp().getVrf().get(0).setBename(cfagit.getRecgrp().getBas().getBename());
                cfagit.getRecgrp().getVrf().get(0).setBenamen(cfagit.getRecgrp().getBas().getBenamen());
                cfagit.getRecgrp().getVrf().get(0).setGuperdate(Dates.today());
                cfagit.getRecgrp().getVrf().get(0).setGupercurr(cfagit.getRecgrp().getBas().getGuarancurr());
//                gupamt = cbb.getAmt();
//                gupamt = opn1Cbb.getAmt().add(opn2Cbb.getAmt());

                cfagit.getRecgrp().getVrf().get(0).setGuperamount(gupamt);
            }
            if (MdaUtils.compareTo(cfagit.getDclflg(), "X") == 0) {
                cfagit.getRecgrp().getDcl().get(0).setExguarancode(cfagit.getRecgrp().getBas().getExguarancode());
                cfagit.getRecgrp().getDcl().get(0).setWabachandate(Dates.today());
//                gupamt = cbb.getAmt();
//                gupamt = opn1Cbb.getAmt().add(opn2Cbb.getAmt());
                Ebb ebbtemp = ebbMapper.selectByExguarancodeEbb(cfagit.getRecgrp().getBas().getExguarancode());
                if (!MdaUtils.isEmpty(ebbtemp)) {
                    baseredcl = ebbtemp.getBasere();
                } else {
                    baseredcl = BigDecimal.ZERO;
                }
                cfagit.getRecgrp().getDcl().get(0).setBasere(Decimals.sub(baseredcl, gupamt));
            }
        }
        /**
         *增加主债务合同资金用途的赋值
         */
        setReturntype(cfagit);

        return cfagit;
    }

    private void setReturntype(Cfagit cfagit) {
        String found = "";
        if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getFounds1(), "X") == 0) {
            found = found + "1,";
        }
        if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getFounds2(), "X") == 0) {
            found = found + "2,";
        }
        if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getFounds3(), "X") == 0) {
            found = found + "3,";
        }
        if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getFounds4(), "X") == 0) {
            found = found + "4,";
        }
        if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getFounds5(), "X") == 0) {
            found = found + "5,";
        }
        if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getFounds6(), "X") == 0) {
            found = found + "6,";
        }
        if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getFounds7(), "X") == 0) {
            found = found + "7,";
        }
        if (MdaUtils.compareTo(cfagit.getRecgrp().getBas().getFounds8(), "X") == 0) {
            found = found + "8,";
        }
        if (!MdaUtils.isEmpty(found)) {
            cfagit.getRecgrp().getBas().setReturntype(Strings.mid(found, 1, Strings.len(found) - 1));
//            $recgrp\bas\returntype = Platform.mid( found, 1, Platform.len( found ) - 1 );
        }

    }

    @Override
    public Cfagit cfaGetDataFromGID(Cfagit cfagit) {

        //维护数据
        String ownref = NULLSTR;
        //根据交易类型组数
        switch (Strings.mid(cfagit.getTransName().toUpperCase(), 1, 2)) {
            case "GI":
            case "GE":
            case "GC":
                GidBizInfoVo cfagitRec = (GidBizInfoVo) cfagit.getRec();
//                GidBizAmdInfoVo  cfagitAmdRec = (GidBizAmdInfoVo)cfagit.getAmdRec();
                ownref = cfagitRec.getOwnref();
                break;
            case "NI":
                NidBizInfoVo cfanitRec = (NidBizInfoVo) cfagit.getRec();
//                NidBizAmdInfoVo  cfagitnmdRec = (NidBizAmdInfoVo)cfagit.getAmdRec();
                ownref = cfanitRec.getOwnref();
                break;
        }
        //!==================================
        //!根据GIDGRP，读取EBL信息
        //!根据EBL读取EBA
        //!
        //!==================================
        //if ( not SptIsAnyLoaded or SptIsIncLoaded ) and not IsEmpty( GIDGRP\\REC\\OWNREF ) then
        String eblinr = NULLSTR;
        //        Argument<String> _eblinrBox = Argument.box(eblinr);
        String sel = NULLSTR;
        int ignore = 0;
        if (!MdaUtils.isEmpty(ownref)) {
            Ebl ebltemp = eblMapper.selectEBAByOwnref(ownref);
            if (!MdaUtils.isEmpty(ebltemp)) {
                cfagit.getEblmod().setEbl(ebltemp);
                //Clear( RECGRP\\BAS\\INR )
                cfagit.setOwnextkey(ebltemp.getOwnextkey());
                if (!MdaUtils.isEmpty(cfagit.getEblmod().getEbl())) {
                    //读入签约信息
                    Eba ebatemp = ebaMapper.selectByInr(cfagit.getEblmod().getEbl().getObjinr());
                    if (!MdaUtils.isEmpty(ebatemp)) {
                        setFunds(ebatemp);
                        cfagit.getRecgrp().setBas(ebatemp);
                        //RECP\\PANSTA = "D"
                        cfagit.setOldamt(ebatemp.getGuaranamount());
                        if (!MdaUtils.isEmpty(ebatemp.getInr())) {
                            cfagit.setOldeba(ebatemp);
                        }
                    }
                }
            }
        }
        return cfagit;
    }

    //设置主债务合同资金用途
    private void setFunds(Eba eba) {
        String returnType = eba.getReturntype();
        if (MdaUtils.isEmpty(returnType)) {
            return;
        }
        String[] returnTypeArr = returnType.split(",");
        for (String value : returnTypeArr) {
            if (value.equals("1")) {
                eba.setFounds1("X");
            }
            if (value.equals("2")) {
                eba.setFounds2("X");
            }
            if (value.equals("3")) {
                eba.setFounds3("X");
            }
            if (value.equals("4")) {
                eba.setFounds4("X");
            }
            if (value.equals("5")) {
                eba.setFounds5("X");
            }
            if (value.equals("6")) {
                eba.setFounds6("X");
            }
            if (value.equals("7")) {
                eba.setFounds7("X");
            }
            if (value.equals("8")) {
                eba.setFounds8("X");
            }
        }
    }

}
