package com.brilliance.isc.common.bop.bopdec.service.imp;

import com.brilliance.mda.runtime.mda.util.Dates;
import com.brilliance.mda.runtime.mda.util.MdaUtils;
import com.brilliance.mda.runtime.mda.util.Numerics;
import com.brilliance.mda.runtime.mda.util.Strings;
import com.brilliance.isc.bo.Dbl;
import com.brilliance.isc.bo.Pty;
import com.brilliance.isc.bo.bopdecbo.*;
import com.brilliance.isc.bo.model.BopObjectType;
import com.brilliance.isc.bo.model.Boppay;
import com.brilliance.isc.bo.model.CheckItems;
import com.brilliance.isc.common.sysmod.SysmodService;
import com.brilliance.isc.common.util.BopUtils;
import com.brilliance.isc.common.bopset.service.BopdecCommonService;
import com.brilliance.isc.common.bopset.service.BoppayService;
import com.brilliance.isc.common.bopset.service.CtlmodService;
import com.brilliance.isc.common.component.PtsptaToolComponent;
import com.brilliance.isc.common.context.SettleContext;
import com.brilliance.isc.common.transaction.help.TransactionHelpService;
import com.brilliance.isc.common.trnmod.vo.TrnmodVo;
import com.brilliance.isc.common.vo.PtsptaVo;
import com.brilliance.isc.mda.dao.*;
import com.brilliance.isc.vo.bop.BopActionTypeVo;
import com.brilliance.isc.vo.bop.RptnoRequestVo;
import com.brilliance.isc.vo.collection.BcdBizInfoVo;
import com.brilliance.isc.vo.lc.BrdBizInfoVo;
import com.brilliance.isc.vo.lg.GcdBizInfoVo;
import com.brilliance.isc.vo.lg.NcdBizInfoVo;
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.*;

@Service
public class BoppayServiceImpl implements BoppayService {

    @Autowired
    private PtsptaToolComponent ptsptaToolComponent;

    @Autowired
    private CtlmodService ctlmodService;

    @Autowired
    private BopdecCommonService bopdecCommonService;

    @Autowired
    private TransactionHelpService transactionHelpService;

    @Autowired
    private DblMapper dblMapper;

    @Autowired
    private DbcMapper dbcMapper;

    @Autowired
    private DbkMapper dbkMapper;

    @Autowired
    private DbpMapper dbpMapper;

    @Autowired
    private DbfMapper dbfMapper;

    @Autowired
    private DbsMapper dbsMapper;

    @Autowired
    private SysmodService sysmodService;

    @Override
    public Boppay mappingBoppayDataAAAAAA(Boppay boppay) {
        //将未初始化的属性初始化
        boppay.reset();

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

        String szflg = boppay.getSzflg();
        String basflg = boppay.getBasflg();
        String dclflg = boppay.getDclflg();
        String vrfflg = boppay.getVrfflg();
        String aloneflg = boppay.getAloneflg();
        String acttyp = boppay.getActtyp();

        // 申报类型选择不报送，需要清空原有数据，如果申报编号已生成，则保留申报编号防止跳号
        if("3".equals(szflg)){
            Boppay newBoppay = new Boppay();
            newBoppay.reset();
            String dbcrptno = "";
            String dbfrptno = "";
            dbcrptno = boppay.getDbcgrp().getBas().getRptno();
            newBoppay.getDbcgrp().getBas().setRptno(dbcrptno);
            newBoppay.getDbcgrp().getDcl().setRptno(dbcrptno);

            dbfrptno = boppay.getDbfgrp().getBas().getRptno();
            newBoppay.getDbfgrp().getBas().setRptno(dbfrptno);
            newBoppay.getDbfgrp().getVrf().setRptno(dbfrptno);
            newBoppay.setSzflg(boppay.getSzflg());
            return newBoppay;
        }

        //地区机构号取值
        String ownextkey = boppay.getOwnextkey();
        if (MdaUtils.compareTo(szflg, "1") == 0 || MdaUtils.compareTo(szflg, "2") == 0) {
            if (!boppay.isModified("ownextkey")) {
                //防止未选择客户时空值针
                if(!MdaUtils.isEmpty(SettleContext.getUserSession().getWrkbch())){
                    ownextkey = SettleContext.getUserSession().getWrkbch().getBranch();
                    boppay.setOwnextkey(ownextkey);
                }

            }
        }

        // 是否随业务申报
        if(MdaUtils.compareTo(szflg, "1") == 0 || MdaUtils.compareTo(szflg, "2") == 0){
            boppay.setAloneflg(aloneflg);
        }

        //款项来源
        if(MdaUtils.compareTo(szflg, "1") == 0){
            boppay.setActtyp(acttyp);
        }

        if(!(("1".equals(szflg) || "2".equals(szflg)) && "X".equals(basflg) && !MdaUtils.isEmpty(ownextkey))){
            return boppay;
        }

        PtsptaVo ptsptaAPL = ptsptaToolComponent.getPtsFromListByRol(boppay.getPtsList(), "APL");
        if (MdaUtils.isEmpty(ptsptaAPL)) {
            ptsptaAPL = new PtsptaVo();
            ptsptaAPL.reset();
        }

        PtsptaVo ptsptaBEN = ptsptaToolComponent.getPtsFromListByRol(boppay.getPtsList(), "BEN");
        if (MdaUtils.isEmpty(ptsptaBEN)) {
            ptsptaBEN = new PtsptaVo();
            ptsptaBEN.reset();
        }

        PtsptaVo ptsptaDRR = ptsptaToolComponent.getPtsFromListByRol(boppay.getPtsList(), "DRR");
        if (MdaUtils.isEmpty(ptsptaDRR)) {
            ptsptaDRR = new PtsptaVo();
            ptsptaDRR.reset();
        }


        String boptyp = "BOPPAY";
        String method = NULLSTR;
        String payTyp = NULLSTR;
        String payType = NULLSTR;
        String orcact = NULLSTR;
        // 银行业务编号
        String ownref = "";
        String objTyp = NULLSTR;
        //收款人名称
        String pyeact = NULLSTR;
        String hndtyp = NULLSTR;
        //外币款专户
        String ffaacc = NULLSTR;
        //默认对手费用收取角色 setmod里取
        String feecorrol = NULLSTR;
        //setmod 单据币种
        String doccur = NULLSTR;
        //brtset开立日期
        Date opndat = NULLDATE;
        //lidgrp ownref
        String lidownref = NULLSTR;
        //lidgrp shpdat
        Date shpdat = NULLDATE;
        //lidgrp tenmaxday
        int tenmaxday = 0;
        String docprbrol = NULLSTR;
        //lidgrp opndat
        Date lidopndat = NULLDATE;

        //gid ownref
        String gidownref = NULLSTR;
        //gid opndat
        Date gidopndat = NULLDATE;

        //nid ownref
        String nidownref = NULLSTR;
        //nid opndat
        Date nidopndat = NULLDATE;


        //根据交易类型组数
        switch (Strings.mid(transName, 1, 3)) {
            case "BCT":
                BcdBizInfoVo bcdBizInfoVo = (BcdBizInfoVo)boppay.getRec();
                ownref = bcdBizInfoVo.getOwnref();
                objTyp = bcdBizInfoVo.getObjtyp();
                shpdat = bcdBizInfoVo.getShpdat();
                doccur = bcdBizInfoVo.getDoccur();
                tenmaxday = bcdBizInfoVo.getMatpercnt();
                Date matdat = bcdBizInfoVo.getMatdat();
                if(tenmaxday == 0){
                    tenmaxday = Dates.diff(matdat,Dates.today());
                }
                break;
            case "BRT":
                BrdBizInfoVo brdBizInfoVo = (BrdBizInfoVo)boppay.getRec();
                ownref = brdBizInfoVo.getOwnref();
                objTyp = brdBizInfoVo.getObjtyp();
                opndat =brdBizInfoVo.getOpndat();
                lidownref = brdBizInfoVo.getLidownref();
                lidopndat = brdBizInfoVo.getLidopndat();
                shpdat = brdBizInfoVo.getShpdat();
                docprbrol = brdBizInfoVo.getDocprbrol();
                doccur = brdBizInfoVo.getDoccur();
                tenmaxday = brdBizInfoVo.getTenmaxday();
                break;
            case "GIT":
                GcdBizInfoVo gcdBizInfoVo = (GcdBizInfoVo)boppay.getRec();
                ownref = gcdBizInfoVo.getOwnref();
                gidownref = gcdBizInfoVo.getGidownref();
                objTyp = gcdBizInfoVo.getObjtyp();
                opndat = gcdBizInfoVo.getOpndat();
                gidopndat = gcdBizInfoVo.getGidopndat();
                feecorrol = gcdBizInfoVo.getFeecorrol();
                docprbrol = gcdBizInfoVo.getDocprbrol();
                doccur = gcdBizInfoVo.getDoccur();
                hndtyp = gcdBizInfoVo.getHndtyp();
                break;
            case "NIT":
                NcdBizInfoVo ncdBizInfoVo = (NcdBizInfoVo)boppay.getRec();
                ownref = ncdBizInfoVo.getOwnref();
                nidownref = ncdBizInfoVo.getNidownref();
                objTyp = ncdBizInfoVo.getObjtyp();
                doccur = ncdBizInfoVo.getDoccur();
                hndtyp = ncdBizInfoVo.getHndtyp();
                feecorrol = ncdBizInfoVo.getFeecorrol();
                docprbrol = ncdBizInfoVo.getDocprbrol();
                opndat = ncdBizInfoVo.getOpndat();
                nidopndat = ncdBizInfoVo.getNidopndat();
                break;
        }

        //设置申报子类型
        if("1".equals(boppay.getSzflg())){
            boppay.setBopobjtyp("DBC");
        }
        if("2".equals(boppay.getSzflg())){
            boppay.setBopobjtyp("DBF");
        }

        if("X".equals(basflg)) {
            //设置收付汇日期
            if (MdaUtils.isEmpty(boppay.getPaydat())) {
                String dectyp = ctlmodService.setDectyp(transName);
                if ("V".equals(dectyp)) {
                    boppay.setPaydat(bopdecCommonService.getCoreSysDay());
                }
            }
            if (!boppay.getDbcgrp().getBas().isModified("buscode")) {
                boppay.getDbcgrp().getBas().setBuscode(ownref);
            }
            if (!boppay.getDbfgrp().getBas().isModified("buscode")) {
                boppay.getDbfgrp().getBas().setBuscode(ownref);
            }

            //设置申报样式
            String typ = bopdecCommonService.getBopdecTyp(boptyp,boppay.getSzflg(),boppay.getBasflg(),boppay.getDclflg(),boppay.getVrfflg());
            boppay.setTyp(typ);
            //设置申报大类型BOPREM
            boppay.setBoptyp(boptyp);

            // 获取交易币种
            String cur = bopdecCommonService.getTranCur(transName, boppay.getCbsMap());
            //组织机构代码
            String nam1 = NULLSTR;
            String juscod = NULLSTR;
            Pty pty = bopdecCommonService.getPtyByTransname(transName, boppay.getPtsList(), "APL", payTyp, hndtyp);
            if (!MdaUtils.isEmpty(pty)) {
                nam1 = pty.getNam1();
                juscod = pty.getJuscod();
            }
            if (!boppay.getDbcgrp().getBas().isModified("custnm")) {
                boppay.getDbcgrp().getBas().setCustnm(nam1);
            }
            if (!boppay.getDbfgrp().getBas().isModified("custnm")) {
                boppay.getDbfgrp().getBas().setCustnm(nam1);
            }

            String transRol = bopdecCommonService.getTranRol(transName);
            Pty pty1 = bopdecCommonService.getPtyByTransname(transName, boppay.getPtsList(), transRol, payTyp, hndtyp);
            String fieldVal = NULLSTR;
            String fieldVal1 = NULLSTR;
            //身份证号
            String idCode = NULLSTR;
            if (!MdaUtils.isEmpty(pty1)) {
                fieldVal = pty1.getExtkey();
                fieldVal1 = pty1.getIdtype();
                idCode = pty1.getIdcode();
            }
            if (MdaUtils.compareTo(fieldVal1, "1") == 0 || MdaUtils.compareTo(fieldVal1, "2") == 0) {
                boppay.getDbcgrp().getBas().setCustype("C");
                boppay.getDbfgrp().getBas().setCustype("C");
            } else {
                if (!MdaUtils.isEmpty(fieldVal1)) {
                    boppay.getDbcgrp().getBas().setCustype(fieldVal1);
                    boppay.getDbfgrp().getBas().setCustype(fieldVal1);
                } else {
                    boppay.getDbcgrp().getBas().setCustype("C");
                    boppay.getDbfgrp().getBas().setCustype("C");
                }
            }
            //获得组织机构代码
            if (MdaUtils.compareTo(boppay.getDbcgrp().getBas().getCustype(), "C") == 0) {
                //对公
                if (!boppay.getDbcgrp().getBas().isModified("custcod")) {
                    boppay.getDbcgrp().getBas().setCustcod(juscod);
                }
                if (!boppay.getDbfgrp().getBas().isModified("custcod")) {
                    boppay.getDbfgrp().getBas().setCustcod(juscod);
                }
            } else {
                //给身份证号赋值
                if (!boppay.getDbcgrp().getBas().isModified("idcode")) {
                    boppay.getDbcgrp().getBas().setIdcode(idCode);
                }
                if (!boppay.getDbfgrp().getBas().isModified("idcode")) {
                    boppay.getDbfgrp().getBas().setIdcode(idCode);
                }
            }

            BigDecimal outchargeamt = bopdecCommonService.getoutchargeccy(transName,boppay.getSetFelList(),boppay.getSetFolList(),cur,boppay.getPtydet());
            if (!boppay.getDbcgrp().getBas().isModified("outchargeamt")) {
                boppay.getDbcgrp().getBas().setOutchargeamt(outchargeamt);
            }
            if (!boppay.getDbfgrp().getBas().isModified("outchargeamt")) {
                boppay.getDbfgrp().getBas().setOutchargeamt(outchargeamt);
            }
            //获得扣费币种OUTCHARGECCY
            //if not IsModified( BOPGRP\\REC\\OUTCHARGECCY ) then
            if (outchargeamt.compareTo(BigDecimal.ZERO) > 0) {
                if (!boppay.getDbcgrp().getBas().isModified("outchargeccy")) {
                    boppay.getDbcgrp().getBas().setOutchargeccy(cur);
                }
                if (!boppay.getDbfgrp().getBas().isModified("outchargeccy")) {
                    boppay.getDbfgrp().getBas().setOutchargeccy(cur);
                }
            } else {
                if (!boppay.getDbcgrp().getBas().isModified("outchargeccy")) {
                    boppay.getDbcgrp().getBas().setOutchargeccy("");
                }
                if (!boppay.getDbfgrp().getBas().isModified("outchargeccy")) {
                    boppay.getDbfgrp().getBas().setOutchargeccy("");
                }
            }
            //获得延展日
            //只有信用证和保函下有TENOR----刘文青
            if (MdaUtils.compareTo(objTyp, "GCD") == 0 || MdaUtils.compareTo(objTyp, "NCD") == 0 || MdaUtils.compareTo(objTyp, "GID") == 0 || MdaUtils.compareTo(objTyp, "BRD") == 0) {
                if (!boppay.getDbcgrp().getBas().isModified("tenor")) {
                    boppay.getDbcgrp().getBas().setTenor(bopdecCommonService.tenortext(transName,tenmaxday));
                }
                if (!boppay.getDbfgrp().getBas().isModified("tenor")) {
                    boppay.getDbfgrp().getBas().setTenor(bopdecCommonService.tenortext(transName,tenmaxday));
                }
            }

            Map<String, BigDecimal> amtList = new HashMap<>();
            Map<String, String> accList = new HashMap<>();
            bopdecCommonService.getBasic(transName, boppay.getSetgll(), cur, ffaacc, amtList, accList);
            String lcyacc = accList.get("lcyacc");
            BigDecimal exrate = amtList.get("exrate");
            String fcyacc = accList.get("fcyacc");
            String othacc = accList.get("othacc");
            BigDecimal lcyamt = amtList.get("lcyamt");
            BigDecimal fcyamt = amtList.get("fcyamt");
            BigDecimal othamt = amtList.get("othamt");
            if (!boppay.getDbcgrp().getBas().isModified("lcyacc")) {
                boppay.getDbcgrp().getBas().setLcyacc(lcyacc);
            }
            if (!boppay.getDbfgrp().getBas().isModified("lcyacc")) {
                boppay.getDbfgrp().getBas().setLcyacc(lcyacc);
            }
            if (!boppay.getDbcgrp().getBas().isModified("exrate")) {
                boppay.getDbcgrp().getBas().setExrate(exrate);
            }
            if (!boppay.getDbfgrp().getBas().isModified("exrate")) {
                boppay.getDbfgrp().getBas().setExrate(exrate);
            }
            if (!boppay.getDbcgrp().getBas().isModified("fcyacc")) {
                boppay.getDbcgrp().getBas().setFcyacc(fcyacc);
            }
            if (!boppay.getDbfgrp().getBas().isModified("fcyacc")) {
                boppay.getDbfgrp().getBas().setFcyacc(fcyacc);
            }
            if (!boppay.getDbcgrp().getBas().isModified("othacc")) {
                boppay.getDbcgrp().getBas().setOthacc(othacc);
            }
            if (!boppay.getDbfgrp().getBas().isModified("othacc")) {
                boppay.getDbfgrp().getBas().setOthacc(othacc);
            }
            if (!boppay.getDbcgrp().getBas().isModified("lcyamt")) {
                boppay.getDbcgrp().getBas().setLcyamt(Numerics.round(lcyamt, 0));
            }
            if (!boppay.getDbfgrp().getBas().isModified("lcyamt")) {
                boppay.getDbfgrp().getBas().setLcyamt(Numerics.round(lcyamt, 0));
            }
            if (!boppay.getDbcgrp().getBas().isModified("fcyamt")) {
                boppay.getDbcgrp().getBas().setFcyamt(Numerics.round(fcyamt, 0));
            }
            if (!boppay.getDbfgrp().getBas().isModified("fcyamt")) {
                boppay.getDbfgrp().getBas().setFcyamt(Numerics.round(fcyamt, 0));
            }
            if (!boppay.getDbcgrp().getBas().isModified("othamt")) {
                boppay.getDbcgrp().getBas().setOthamt(Numerics.round(othamt, 0));
            }
            if (!boppay.getDbfgrp().getBas().isModified("othamt")) {
                boppay.getDbfgrp().getBas().setOthamt(Numerics.round(othamt, 0));
            }

            if (MdaUtils.compareTo(objTyp, "BRD") == 0) {
                if (!boppay.getDbcgrp().getBas().isModified("issdate")) {
                    boppay.getDbcgrp().getBas().setIssdate(lidopndat);
                }
                if (!boppay.getDbfgrp().getBas().isModified("issdate")) {
                    boppay.getDbfgrp().getBas().setIssdate(lidopndat);
                }
                if (!boppay.getDbcgrp().getBas().isModified("method")) {
                    boppay.getDbcgrp().getBas().setMethod("L");
                }
                if (!boppay.getDbfgrp().getBas().isModified("method")) {
                    boppay.getDbfgrp().getBas().setMethod("L");
                }
                if (!boppay.getDbcgrp().getBas().isModified("lcbgno")) {
                    boppay.getDbcgrp().getBas().setLcbgno(lidownref);
                }
                if (!boppay.getDbfgrp().getBas().isModified("lcbgno")) {
                    boppay.getDbfgrp().getBas().setLcbgno(lidownref);
                }
                if (!boppay.getDbcgrp().getBas().isModified("oppuser")) {
                    boppay.getDbcgrp().getBas().setOppuser(ptsptaBEN.getPts().getNam());
                }
                if (!boppay.getDbfgrp().getBas().isModified("oppuser")) {
                    boppay.getDbfgrp().getBas().setOppuser(ptsptaBEN.getPts().getNam());
                }
            }
            if (MdaUtils.compareTo(objTyp, "BCD") == 0) {
                if (!boppay.getDbcgrp().getBas().isModified("oppuser")) {
                    boppay.getDbcgrp().getBas().setOppuser(ptsptaDRR.getPts().getNam());
                }
                if (!boppay.getDbfgrp().getBas().isModified("oppuser")) {
                    boppay.getDbfgrp().getBas().setOppuser(ptsptaDRR.getPts().getNam());
                }
                if (!boppay.getDbcgrp().getBas().isModified("method")) {
                    boppay.getDbcgrp().getBas().setMethod("C");
                }
                if (!boppay.getDbfgrp().getBas().isModified("method")) {
                    boppay.getDbfgrp().getBas().setMethod("C");
                }
            }
            if (MdaUtils.compareTo(objTyp, "GID") == 0 || MdaUtils.compareTo(objTyp, "NID") == 0 || MdaUtils.compareTo(objTyp, "GCD") == 0 || MdaUtils.compareTo(objTyp, "NCD") == 0) {
                if (!boppay.getDbcgrp().getBas().isModified("method")) {
                    boppay.getDbcgrp().getBas().setMethod("G");
                }
                // MappingField( GetField( "DBFGRP\\BAS\\METHODS" ), "G" )
                //境内进口保函，默认为其他---刘文青
                if (!boppay.getDbfgrp().getBas().isModified("method")) {
                    boppay.getDbfgrp().getBas().setMethod("O");
                }
                if( MdaUtils.compareTo(objTyp, "GID") == 0 || MdaUtils.compareTo(objTyp, "GCD") == 0) {
                    if (!boppay.getDbcgrp().getBas().isModified("issdate")) {
                        boppay.getDbcgrp().getBas().setIssdate(gidopndat);
                    }
                    if (!boppay.getDbfgrp().getBas().isModified("issdate")) {
                        boppay.getDbfgrp().getBas().setIssdate(gidopndat);
                    }
                    if (!boppay.getDbcgrp().getBas().isModified("lcbgno")) {
                        boppay.getDbcgrp().getBas().setLcbgno(gidownref);
                    }
                    if (!boppay.getDbfgrp().getBas().isModified("lcbgno")) {
                        boppay.getDbfgrp().getBas().setLcbgno(gidownref);
                    }
                }
                if( MdaUtils.compareTo(objTyp, "NID") == 0 || MdaUtils.compareTo(objTyp, "NCD") == 0) {
                    if (!boppay.getDbcgrp().getBas().isModified("issdate")) {
                        boppay.getDbcgrp().getBas().setIssdate(nidopndat);
                    }
                    if (!boppay.getDbfgrp().getBas().isModified("issdate")) {
                        boppay.getDbfgrp().getBas().setIssdate(nidopndat);
                    }
                    if (!boppay.getDbcgrp().getBas().isModified("lcbgno")) {
                        boppay.getDbcgrp().getBas().setLcbgno(nidownref);
                    }
                    if (!boppay.getDbfgrp().getBas().isModified("lcbgno")) {
                        boppay.getDbfgrp().getBas().setLcbgno(nidownref);
                    }
                }
                if (!boppay.getDbcgrp().getBas().isModified("oppuser")) {
                    boppay.getDbcgrp().getBas().setOppuser(bopdecCommonService.getCorNM(boppay.getPtsList(), feecorrol));
                }
                if (!boppay.getDbfgrp().getBas().isModified("oppuser")) {
                    boppay.getDbfgrp().getBas().setOppuser(bopdecCommonService.getCorNM(boppay.getPtsList(), feecorrol));
                }

            }
            //cgl for szsb2012
            // 境外申报收款人名称前面增加境内境外下拉框，联动款项去向。(JW)(JN)与收款人名称分开-----边仲超
            // 境内境外下拉框赋值
            boppay.getDbcgrp().getBas().setJwjn(boppay.getActtyp());
//            if (!boppay.getDbcgrp().getBas().isModified("oppuser")) {
//                boppay.getDbcgrp().getBas().setOppuser(boppay.getActtyp() + boppay.getDbcgrp().getBas().getOppuser());
//            }
            //实际付款金额
            BigDecimal actamt = bopdecCommonService.getactuccy(transName,boppay.getSetgll(),docprbrol);
            if (!boppay.getDbcgrp().getBas().isModified("actuamt")) {
                boppay.getDbcgrp().getBas().setActuamt(actamt);
            }
            if (!boppay.getDbfgrp().getBas().isModified("actuamt")) {
                boppay.getDbfgrp().getBas().setActuamt(actamt);
            }
            if (actamt.compareTo(BigDecimal.ZERO) > 0) {
                if (!boppay.getDbcgrp().getBas().isModified("actuccy")) {
                    boppay.getDbcgrp().getBas().setActuccy(doccur);
                }
                if (!boppay.getDbfgrp().getBas().isModified("actuccy")) {
                    boppay.getDbfgrp().getBas().setActuccy(doccur);
                }
            } else {
                if (!boppay.getDbcgrp().getBas().isModified("actuccy")) {
                    boppay.getDbcgrp().getBas().setActuccy("");
                }
                if (!boppay.getDbfgrp().getBas().isModified("actuccy")) {
                    boppay.getDbfgrp().getBas().setActuccy("");
                }
            }
            //获得收入款金额
            if (MdaUtils.compareTo(objTyp, "GID") == 0 || MdaUtils.compareTo(objTyp, "GCD") == 0 || MdaUtils.compareTo(objTyp, "NCD") == 0 || MdaUtils.compareTo(objTyp, "BRD") == 0 || MdaUtils.compareTo(objTyp, "BCD") == 0) {
                BigDecimal txamt = Numerics.round(lcyamt.add(fcyamt).add(othamt),0);
                if (!boppay.getDbcgrp().getBas().isModified("txamt")) {
                    boppay.getDbcgrp().getBas().setTxamt(txamt);
                }
                if (!boppay.getDbfgrp().getBas().isModified("txamt")) {
                    boppay.getDbfgrp().getBas().setTxamt(txamt);
                }
                if (txamt.compareTo(BigDecimal.ZERO) > 0) {
                    if (!boppay.getDbcgrp().getBas().isModified("txccy")) {
                        boppay.getDbcgrp().getBas().setTxccy(bopdecCommonService.getTranCur(transName,boppay.getCbsMap()));
                    }
                    if (!boppay.getDbfgrp().getBas().isModified("txccy")) {
                        boppay.getDbfgrp().getBas().setTxccy(bopdecCommonService.getTranCur(transName,boppay.getCbsMap()));
                    }
                } else {
                    if (!boppay.getDbcgrp().getBas().isModified("txccy")) {
                        boppay.getDbcgrp().getBas().setTxccy("");
                    }
                    if (!boppay.getDbfgrp().getBas().isModified("txccy")) {
                        boppay.getDbfgrp().getBas().setTxccy("");
                    }
                }
            }
            //给地区机构号赋值
            boppay.getDbcgrp().getBas().setOwnextkey(ownextkey);
            boppay.getDbfgrp().getBas().setOwnextkey(ownextkey);

            //给ctlmod中的dectyp赋值
            boppay.getCtlmod().setDectyp(ctlmodService.setDectyp(transName));

            //生成rptno
            RptnoRequestVo rptnoRequestVo = new RptnoRequestVo();
            rptnoRequestVo.setOwnextkey(ownextkey);
            rptnoRequestVo.setBopobjtyp(boppay.getBopobjtyp());
            rptnoRequestVo.setTransname(transName);
            rptnoRequestVo.setPaydat(boppay.getPaydat());
            rptnoRequestVo.setWrkDblReldat(boppay.getCtlmod().getWrkdbl().getReldat());
            if ("1".equals(szflg) && "X".equals(basflg)) {
                rptnoRequestVo.setCustype(boppay.getDbcgrp().getBas().getCustype());
                rptnoRequestVo.setRptno(boppay.getDbcgrp().getBas().getRptno());
            }
            if ("2".equals(szflg) && "X".equals(basflg)) {
                rptnoRequestVo.setCustype(boppay.getDbfgrp().getBas().getCustype());
                rptnoRequestVo.setRptno(boppay.getDbfgrp().getBas().getRptno());
            }
            String ref = bopdecCommonService.getRef(rptnoRequestVo);
            if (!MdaUtils.isEmpty(ref)) {
                boppay.getDbcgrp().getBas().setRptno(ref);
                boppay.getDbfgrp().getBas().setRptno(ref);
            }
        }
        if("X".equals(dclflg)){
            if(!MdaUtils.isEmpty(boppay.getDbcgrp().getBas().getRptno())){
                boppay.getDbcgrp().getDcl().setRptno(boppay.getDbcgrp().getBas().getRptno());
                //相应金额1取付款金额
                if (!boppay.getDbcgrp().getDcl().isModified("tc1amt")) {
                    boppay.getDbcgrp().getDcl().setTc1amt(boppay.getDbcgrp().getBas().getTxamt());
                }
                //申报日期默认取当天
                if (!boppay.getDbcgrp().getDcl().isModified("rptdate")) {
                    boppay.getDbcgrp().getDcl().setRptdate(Dates.today());
                }

            }
        }
        if("X".equals(vrfflg)){
            if("1".equals(szflg)){
                if(!MdaUtils.isEmpty(boppay.getDbcgrp().getBas().getRptno())){
                    boppay.getDbcgrp().getVrf().setRptno(boppay.getDbcgrp().getBas().getRptno());
                }
                //申报日期默认取当天
                if (!boppay.getDbcgrp().getVrf().isModified("rptdate")) {
                    boppay.getDbcgrp().getVrf().setRptdate(Dates.today());
                }
            }
            if("2".equals(szflg)){
                if(!MdaUtils.isEmpty(boppay.getDbfgrp().getBas().getRptno())){
                    boppay.getDbfgrp().getVrf().setRptno(boppay.getDbfgrp().getBas().getRptno());
                }
                //相应金额1取付款金额
                if (!boppay.getDbfgrp().getVrf().isModified("tc1amt")) {
                    boppay.getDbfgrp().getVrf().setTc1amt(boppay.getDbcgrp().getBas().getTxamt());
                }
                //申报日期默认取当天
                if (!boppay.getDbfgrp().getVrf().isModified("rptdate")) {
                    boppay.getDbfgrp().getVrf().setRptdate(Dates.today());
                }
            }
            if (MdaUtils.compareTo(objTyp, "BRD") == 0) {
                if (!boppay.getDbcgrp().getVrf().isModified("impdate")) {
                    boppay.getDbcgrp().getVrf().setImpdate(shpdat);
                }
                if (!boppay.getDbfgrp().getVrf().isModified("impdate")) {
                    boppay.getDbfgrp().getVrf().setImpdate(shpdat);
                }
                if (!boppay.getDbcgrp().getVrf().isModified("contrno")) {
                    boppay.getDbcgrp().getVrf().setContrno(ptsptaAPL.getPts().getRef());
                }
                if (!boppay.getDbfgrp().getVrf().isModified("contrno")) {
                    boppay.getDbfgrp().getVrf().setContrno(ptsptaAPL.getPts().getRef());
                }
            }
            if (MdaUtils.compareTo(objTyp, "BCD") == 0) {
                if (!boppay.getDbcgrp().getVrf().isModified("invoino")) {
                    boppay.getDbcgrp().getVrf().setInvoino(ptsptaDRR.getPts().getRef());
                }
                if (!boppay.getDbfgrp().getVrf().isModified("invoino")) {
                    boppay.getDbfgrp().getVrf().setContrno(ptsptaDRR.getPts().getRef());
                }
                if (!boppay.getDbcgrp().getVrf().isModified("impdate")) {
                    boppay.getDbcgrp().getVrf().setImpdate(shpdat);
                }
                if (!boppay.getDbfgrp().getVrf().isModified("impdate")) {
                    boppay.getDbfgrp().getVrf().setImpdate(shpdat);
                }
            }
            if (MdaUtils.compareTo(objTyp, "GID") == 0 || MdaUtils.compareTo(objTyp, "GCD") == 0 || MdaUtils.compareTo(objTyp, "NCD") == 0) {
                if(MdaUtils.compareTo(objTyp, "GCD") == 0 || MdaUtils.compareTo(objTyp, "NCD") == 0) {
                    if (!boppay.getDbcgrp().getVrf().isModified("contrno")) {
                        boppay.getDbcgrp().getVrf().setContrno(ptsptaAPL.getPts().getRef());
                    }
                    if (!boppay.getDbfgrp().getVrf().isModified("contrno")) {
                        boppay.getDbfgrp().getVrf().setContrno(ptsptaAPL.getPts().getRef());
                    }
                }
            }
        }
        //设置校验字段
        this.setCheckItems(boppay);
        return boppay;
    }

    private void setCheckItems(Boppay boppay){
        CheckItems checkItems = new CheckItems();
        String dectyp = ctlmodService.setDectyp(boppay.getTransName());
        checkItems.setDectyp(dectyp);
        checkItems.setTransName(boppay.getTransName());
        checkItems.setSzflg(boppay.getSzflg());
        checkItems.setBasflg(boppay.getBasflg());
        checkItems.setDclflg(boppay.getDclflg());
        checkItems.setVrfflg(boppay.getVrfflg());
        checkItems.setActtyp(boppay.getActtyp());
        checkItems.setZbxmszh(boppay.getZbxmszh());
        checkItems.setBopobjtyp(boppay.getBopobjtyp());
        if("1".equals(boppay.getSzflg())){
            checkItems.setBuscode(boppay.getDbcgrp().getBas().getBuscode());
            checkItems.setBasactiontype(boppay.getDbcgrp().getBas().getActiontype());
            checkItems.setCustcod(boppay.getDbcgrp().getBas().getCustcod());
            checkItems.setTxccy(boppay.getDbcgrp().getBas().getTxccy());
            checkItems.setExrate(boppay.getDbcgrp().getBas().getExrate());
            checkItems.setFcyacc(boppay.getDbcgrp().getBas().getFcyacc());
            checkItems.setFcyamt(boppay.getDbcgrp().getBas().getFcyamt());
            checkItems.setIdcode(boppay.getDbcgrp().getBas().getIdcode());
            checkItems.setLcyacc(boppay.getDbcgrp().getBas().getLcyacc());
            checkItems.setLcyamt(boppay.getDbcgrp().getBas().getLcyamt());
            checkItems.setOppuser(boppay.getActtyp() + boppay.getDbcgrp().getBas().getOppuser());
            checkItems.setOthacc(boppay.getDbcgrp().getBas().getOthacc());
            checkItems.setOthamt(boppay.getDbcgrp().getBas().getOthamt());
            checkItems.setTxamt(boppay.getDbcgrp().getBas().getTxamt());
            checkItems.setOwnextkey(boppay.getDbcgrp().getBas().getOwnextkey());
            checkItems.setBasactiondesc(boppay.getDbcgrp().getBas().getActiondesc());
            checkItems.setRptno(boppay.getDbcgrp().getBas().getRptno());
            checkItems.setMethod(boppay.getDbcgrp().getBas().getMethod());
            checkItems.setCustnm(boppay.getDbcgrp().getBas().getCustnm());
            checkItems.setCustype(boppay.getDbcgrp().getBas().getCustype());
            checkItems.setActuamt(boppay.getDbcgrp().getBas().getActuamt());
            checkItems.setActuccy(boppay.getDbcgrp().getBas().getActuccy());
            checkItems.setIssdate(boppay.getDbcgrp().getBas().getIssdate());
            checkItems.setLcbgno(boppay.getDbcgrp().getBas().getLcbgno());
            if("X".equals(boppay.getDclflg())){
                checkItems.setDclactiontype(boppay.getDbcgrp().getDcl().getActiontype());
                checkItems.setDclactiondesc(boppay.getDbcgrp().getDcl().getActiondesc());
                checkItems.setCountry(boppay.getDbcgrp().getDcl().getCountry());
                checkItems.setDclcrtuser(boppay.getDbcgrp().getDcl().getCrtuser());
                checkItems.setDclinptelc(boppay.getDbcgrp().getDcl().getInptelc());
                checkItems.setDclisref(boppay.getDbcgrp().getDcl().getIsref());
                checkItems.setPaytype(boppay.getDbcgrp().getDcl().getPaytype());
                checkItems.setDclrptdate(boppay.getDbcgrp().getDcl().getRptdate());
                checkItems.setTc1amt(boppay.getDbcgrp().getDcl().getTc1amt());
                checkItems.setTc2amt(boppay.getDbcgrp().getDcl().getTc2amt());
                checkItems.setTxrem(boppay.getDbcgrp().getDcl().getTxrem());
                checkItems.setTx2rem(boppay.getDbcgrp().getDcl().getTx2rem());
                checkItems.setTxcode(boppay.getDbcgrp().getDcl().getTxcode());
                checkItems.setTxcode2(boppay.getDbcgrp().getDcl().getTxcode2());
                checkItems.setDclactiondesc(boppay.getDbcgrp().getDcl().getActiondesc());
                checkItems.setRegno(boppay.getDbcgrp().getDcl().getRegno());
            }
            if("X".equals(boppay.getVrfflg())){
                checkItems.setVrfactiontype(boppay.getDbcgrp().getVrf().getActiontype());
                checkItems.setVrfactiondesc(boppay.getDbcgrp().getVrf().getActiondesc());
                checkItems.setVrfcrtuser(boppay.getDbcgrp().getVrf().getCrtuser());
                checkItems.setVrfinptelc(boppay.getDbcgrp().getVrf().getInptelc());
                checkItems.setVrfrptdate(boppay.getDbcgrp().getVrf().getRptdate());
                checkItems.setContrno(boppay.getDbcgrp().getVrf().getContrno());
                checkItems.setBillno(boppay.getDbcgrp().getVrf().getBillno());
                checkItems.setInvoino(boppay.getDbcgrp().getVrf().getInvoino());
            }
        }
        if("2".equals(boppay.getSzflg())){
            checkItems.setBuscode(boppay.getDbfgrp().getBas().getBuscode());
            checkItems.setBasactiontype(boppay.getDbfgrp().getBas().getActiontype());
            checkItems.setCustcod(boppay.getDbfgrp().getBas().getCustcod());
            checkItems.setTxccy(boppay.getDbfgrp().getBas().getTxccy());
            checkItems.setExrate(boppay.getDbfgrp().getBas().getExrate());
            checkItems.setFcyacc(boppay.getDbfgrp().getBas().getFcyacc());
            checkItems.setFcyamt(boppay.getDbfgrp().getBas().getFcyamt());
            checkItems.setIdcode(boppay.getDbfgrp().getBas().getIdcode());
            checkItems.setLcyacc(boppay.getDbfgrp().getBas().getLcyacc());
            checkItems.setLcyamt(boppay.getDbfgrp().getBas().getLcyamt());
            checkItems.setOppuser(boppay.getDbfgrp().getBas().getOppuser());
            checkItems.setOthacc(boppay.getDbfgrp().getBas().getOthacc());
            checkItems.setOthamt(boppay.getDbfgrp().getBas().getOthamt());
            checkItems.setTxamt(boppay.getDbfgrp().getBas().getTxamt());
            checkItems.setOwnextkey(boppay.getDbfgrp().getBas().getOwnextkey());
            checkItems.setBasactiondesc(boppay.getDbfgrp().getBas().getActiondesc());
            checkItems.setRptno(boppay.getDbfgrp().getBas().getRptno());
            checkItems.setMethod(boppay.getDbfgrp().getBas().getMethod());
            checkItems.setCustnm(boppay.getDbfgrp().getBas().getCustnm());
            checkItems.setCustype(boppay.getDbfgrp().getBas().getCustype());
            checkItems.setActuamt(boppay.getDbfgrp().getBas().getActuamt());
            checkItems.setActuccy(boppay.getDbfgrp().getBas().getActuccy());
            checkItems.setIssdate(boppay.getDbfgrp().getBas().getIssdate());
            checkItems.setLcbgno(boppay.getDbfgrp().getBas().getLcbgno());
            if("X".equals(boppay.getVrfflg())){
                checkItems.setVrfactiontype(boppay.getDbfgrp().getVrf().getActiontype());
                checkItems.setVrfisref(boppay.getDbfgrp().getVrf().getIsref());
                checkItems.setPaytype(boppay.getDbfgrp().getVrf().getPaytype());
                checkItems.setVrfrptdate(boppay.getDbfgrp().getVrf().getRptdate());
                checkItems.setTc1amt(boppay.getDbfgrp().getVrf().getTc1amt());
                checkItems.setTc2amt(boppay.getDbfgrp().getVrf().getTc2amt());
                checkItems.setTxrem(boppay.getDbfgrp().getVrf().getTxrem());
                checkItems.setTx2rem(boppay.getDbfgrp().getVrf().getTx2rem());
                checkItems.setTxcode(boppay.getDbfgrp().getVrf().getTxcode());
                checkItems.setTxcode2(boppay.getDbfgrp().getVrf().getTxcode2());
                checkItems.setPayattr(boppay.getDbfgrp().getVrf().getPayattr());
                checkItems.setRegno(boppay.getDbfgrp().getVrf().getRegno());
                checkItems.setVrfactiondesc(boppay.getDbfgrp().getVrf().getActiondesc());
                checkItems.setCountry(boppay.getDbfgrp().getVrf().getCountry());
                checkItems.setContrno(boppay.getDbfgrp().getVrf().getContrno());
                checkItems.setVrfcrtuser(boppay.getDbfgrp().getVrf().getCrtuser());
                checkItems.setVrfinptelc(boppay.getDbfgrp().getVrf().getInptelc());
                checkItems.setBillno(boppay.getDbfgrp().getVrf().getBillno());
                checkItems.setInvoino(boppay.getDbfgrp().getVrf().getInvoino());
                checkItems.setRegno(boppay.getDbfgrp().getVrf().getRegno());
            }
        }
        boppay.setCheckItems(checkItems);
    }

    @Override
    public void saveBoppayData(Boppay boppay) {
        //需要从业务里去数据
        String objTyp = "";
        String hndtyp = "";
        String transName = boppay.getTransName().toUpperCase();
        BopActionTypeVo bopActionTypeVo = new BopActionTypeVo();
        if("1".equals(boppay.getSzflg())){
            bopActionTypeVo.setBasActionType(boppay.getDbcgrp().getBas().getActiontype());
            bopActionTypeVo.setDclActionType(boppay.getDbcgrp().getDcl().getActiontype());
            bopActionTypeVo.setVrfActionType(boppay.getDbcgrp().getVrf().getActiontype());
        }
        if("2".equals(boppay.getSzflg())){
            bopActionTypeVo.setBasActionType(boppay.getDbfgrp().getBas().getActiontype());
            bopActionTypeVo.setVrfActionType(boppay.getDbfgrp().getVrf().getActiontype());
        }

        //根据交易类型组数
        switch (Strings.mid(transName, 1, 3)) {
            case "BCT":
                BcdBizInfoVo bcdBizInfoVo = (BcdBizInfoVo)boppay.getRec();
                objTyp = bcdBizInfoVo.getObjtyp();
                break;
            case "BRT":
                BrdBizInfoVo brdBizInfoVo = (BrdBizInfoVo)boppay.getRec();
                objTyp = brdBizInfoVo.getObjtyp();
                break;
            case "GIT":
                GcdBizInfoVo gcdBizInfoVo = (GcdBizInfoVo)boppay.getRec();
                objTyp = gcdBizInfoVo.getObjtyp();
                hndtyp = gcdBizInfoVo.getHndtyp();
                break;
            case "NIT":
                NcdBizInfoVo ncdBizInfoVo = (NcdBizInfoVo)boppay.getRec();
                objTyp = ncdBizInfoVo.getObjtyp();
                hndtyp = ncdBizInfoVo.getHndtyp();
                break;
        }

        BopObjectType bopObjectType = bopdecCommonService.getBoppayInfobyType(transName,hndtyp,boppay.getTyp());

        String ownref = "";
        String busCode = "";
        TrnmodVo trnmodVo = transactionHelpService.getTransactionStoreSet().getTrnmodVo();
        ownref = trnmodVo.getTrn().getOwnref();
        if(MdaUtils.compareTo(boppay.getSzflg(),"1") == 0){
            busCode = boppay.getDbcgrp().getBas().getBuscode();
            if( !MdaUtils.isEmpty(ownref) && MdaUtils.compareTo(ownref,busCode) != 0 ) {
                boppay.getDbcgrp().getBas().setBuscode(ownref);
            }

        }
        if(MdaUtils.compareTo(boppay.getSzflg(),"2") == 0){
            busCode = boppay.getDbfgrp().getBas().getBuscode();
            if( !MdaUtils.isEmpty(ownref) && MdaUtils.compareTo(ownref,busCode) != 0 ) {
                boppay.getDbfgrp().getBas().setBuscode(ownref);
            }
        }

        this.saveTmpRef(boppay);

        Dbl dbl = ctlmodService.setDblSta(transName,bopActionTypeVo,bopObjectType,boppay.getCtlmod().getDbl(),boppay.getCtlmod().getWrkdbl());
        boppay.getCtlmod().setDbl(dbl);
        // 拼接收款人名称
        boppay.getDbcgrp().getBas().setOppuser(boppay.getActtyp() + boppay.getDbcgrp().getBas().getOppuser());
        ctlmodService.bopPayStoreContract(boppay);
        String tratyp = ctlmodService.getTraTyp("PAY","LI","");
        boppay.getCtlmod().getDbl().setTrdtyp(tratyp);
        boppay.getCtlmod().getDbl().setActtyp(boppay.getActtyp());
        ctlmodService.setBopPayDblDat(boppay,bopObjectType.getSubtyp());
        ctlmodService.bopStoreDBL(transName,boppay.getCtlmod(),"");
    }

    @Override
    public void repairBoppayData(String trninr) {
        this.repairDbcData(trninr);
        this.repairDbfData(trninr);
    }

    private void repairDbcData(String trninr){
        if (MdaUtils.isEmpty(trninr)) {
            return;
        }
        Dbl dblObj = dblMapper.selectByOBjtypAndTrninr("DBC",trninr);
        if (!MdaUtils.isEmpty(dblObj)) {
            String objInr = dblObj.getObjinr();
            if(!MdaUtils.isEmpty(objInr)) {
                Dbc dbcCondition = new Dbc();
                dbcCondition.setInr(objInr);
                Dbc dbcObj = dbcMapper.selectByPrimaryKey(dbcCondition);
                if(!MdaUtils.isEmpty(dbcObj)){
                    sysmodService.sdbDeleteWithLog(dbcObj);
                }
                Dbk dbkObj = dbkMapper.selectByTmpref(objInr);
                if(!MdaUtils.isEmpty(dbkObj)){
                    sysmodService.sdbDeleteWithLog(dbkObj);
                }
                Dbp dbpObj = dbpMapper.selectByTmpref(objInr);
                if(!MdaUtils.isEmpty(dbpObj)){
                    sysmodService.sdbDeleteWithLog(dbpObj);
                }
            }
            sysmodService.sdbDeleteWithLog(dblObj);
        }
    }

    private void repairDbfData(String trninr){
        if (MdaUtils.isEmpty(trninr)) {
            return;
        }
        Dbl dblObj = dblMapper.selectByOBjtypAndTrninr("DBF",trninr);
        if (!MdaUtils.isEmpty(dblObj)) {
            String objInr = dblObj.getObjinr();
            if(!MdaUtils.isEmpty(objInr)) {
                Dbf dbfCondition = new Dbf();
                dbfCondition.setInr(objInr);
                Dbf dbfObj = dbfMapper.selectByPrimaryKey(dbfCondition);
                if(!MdaUtils.isEmpty(dbfObj)){
                    sysmodService.sdbDeleteWithLog(dbfObj);
                }
                Dbs dbsObj = dbsMapper.selectByTmpref(objInr);
                if(!MdaUtils.isEmpty(dbsObj)){
                    sysmodService.sdbDeleteWithLog(dbsObj);
                }
            }
            sysmodService.sdbDeleteWithLog(dblObj);
        }
    }


    @Override
    public void saveSpt(Boppay boppay) {
        //通过境内境外判断交易码
        if("1".equals(boppay.getSzflg())){
            BopUtils.saveSpt("DBCAME");
        }else{
            BopUtils.saveSpt("DBFAME");
        }
    }

    public void saveTmpRef(Boppay boppay){
        String rptno = NULLSTR;
        String szflg = boppay.getSzflg();
        String temRef = NULLSTR;
        String transName = boppay.getTransName().toUpperCase();
        if(MdaUtils.compareTo(boppay.getSzflg(),"1") == 0){
            temRef = boppay.getDbcgrp().getBas().getTmpref();
        }
        if(MdaUtils.compareTo(boppay.getSzflg(),"2") == 0){
            temRef = boppay.getDbfgrp().getBas().getTmpref();
        }
        if(MdaUtils.isEmpty(temRef)){
            temRef = bopdecCommonService.getBopTmpRef();
            if(MdaUtils.compareTo(boppay.getSzflg(),"1") == 0) {
                boppay.getDbcgrp().getBas().setTmpref(temRef);
                //此处不进行赋值，存盘时管理和申报信息中 tmpref 赋值 基础信息inr
                //boppay.getDbcgrp().getDcl().setTmpref(temRef);
                //boppay.getDbcgrp().getVrf().setTmpref(temRef);
            }
            if(MdaUtils.compareTo(boppay.getSzflg(),"2") == 0){
                boppay.getDbfgrp().getBas().setTmpref(temRef);
                //此处不进行赋值，存盘时管理和申报信息中 tmpref 赋值 基础信息inr
                //boppay.getDbfgrp().getVrf().setTmpref(temRef);
            }

        }
        if(MdaUtils.compareTo(boppay.getSzflg(),"3") != 0 && MdaUtils.compareTo(boppay.getSzflg(),"") != 0 && (MdaUtils.compareTo(boppay.getCtlmod().getDectyp(),"V") == 0 || MdaUtils.compareTo(boppay.getCtlmod().getDectyp(),"A") == 0)){
            if("1".equals(boppay.getSzflg())){
                rptno = boppay.getDbcgrp().getBas().getRptno();
            }
            if("2".equals(boppay.getSzflg())){
                rptno = boppay.getDbfgrp().getBas().getRptno();
            }
            if(MdaUtils.isEmpty(rptno)) {
                RptnoRequestVo rptnoRequestVo = new RptnoRequestVo();
                rptnoRequestVo.setTransname(transName);
                rptnoRequestVo.setSzflg(boppay.getSzflg());
                rptnoRequestVo.setBasflg(boppay.getBasflg());
                rptnoRequestVo.setDclflg(boppay.getDclflg());
                rptnoRequestVo.setVrfflg(boppay.getVrfflg());
                rptnoRequestVo.setBopobjtyp(boppay.getBopobjtyp());
                rptnoRequestVo.setBoptyp(boppay.getBoptyp());
                rptnoRequestVo.setTyp(boppay.getTyp());
                rptnoRequestVo.setOwnextkey(boppay.getOwnextkey());
                String dectyp = ctlmodService.setDectyp(transName);
                if (MdaUtils.isEmpty(boppay.getPaydat())) {
                    if ("V".equals(dectyp)) {
                        rptnoRequestVo.setPaydat(bopdecCommonService.getCoreSysDay());
                    }
                } else {
                    rptnoRequestVo.setPaydat(boppay.getPaydat());
                }
                if("1".equals(szflg)) {
                    rptnoRequestVo.setCustype(boppay.getDbcgrp().getBas().getCustype());
                }
                if("2".equals(szflg)) {
                    rptnoRequestVo.setCustype(boppay.getDbfgrp().getBas().getCustype());
                }
                String ref = bopdecCommonService.getRef(rptnoRequestVo);
                boppay.getDbcgrp().getBas().setRptno(ref);
                boppay.getDbfgrp().getBas().setRptno(ref);
                if("X".equals(boppay.getDclflg())){
                    boppay.getDbcgrp().getDcl().setRptno(ref);
                }
                if("X".equals(boppay.getVrfflg())){
                    boppay.getDbcgrp().getVrf().setRptno(ref);
                    boppay.getDbfgrp().getVrf().setRptno(ref);
                }
            }
        }

    }
}
