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

import com.brilliance.isc.common.bop.service.PblmodService;
import com.brilliance.isc.common.bop.service.Rmb2108Service;
import com.brilliance.isc.common.component.DyncDaoService;
import com.brilliance.isc.common.context.BopContext;
import com.brilliance.isc.common.context.SettleContext;
import com.brilliance.isc.common.rmbbop.common.Pblmod;
import com.brilliance.isc.common.rmbbop.entity.Tem;
import com.brilliance.isc.common.rmbbop.entity.Ten;
import com.brilliance.isc.common.rmbbop.model.Tdfgrp;
import com.brilliance.isc.common.rmbbop.vo.Rmb2108;
import com.brilliance.isc.common.sysmod.SysmodService;
import com.brilliance.isc.common.util.BopUtils;
import com.brilliance.isc.common.util.RmbbopUtils;
import com.brilliance.isc.common.util.Utils;
import com.brilliance.isc.common.vo.BizInfoVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

@Service("tdf")
public class Rmb2108ServiceImpl implements Rmb2108Service {
    @Autowired
    private PblmodService pblmodService;
    @Autowired
    private DyncDaoService dyncDaoService;
    @Autowired
    private SysmodService sysmodService;

    @Override
    public void save(Rmb2108 rmb2108) {
        pblmodService.storeAllinBusTx(rmb2108);
    }

    @Override
    public void updrmb(Rmb2108 rmb2108) {
        pblmodService.mappingRMBDataCommon(rmb2108);
        mappingRMBDataAAAAAA(rmb2108);
    }

    @Override
    public void saveSpt(Rmb2108 rmb2108) {
        BopUtils.saveSpt(rmb2108.getObjtyp() + "ADD");
    }

    /**
     * 保存子节点信息
     *
     * @param rmb2108 报送业务信息
     */
    @Override
    public void saveChildData(Rmb2108 rmb2108) {
        Tdfgrp recgrp = rmb2108.getRecgrp();
        Pblmod pblmod = rmb2108.getPblmod();
        //委托转贷款信息
        Ten ten = recgrp.getTen();
        if (StringUtils.isNotEmpty(ten.getAcp())) {
//            recgrp.getAds().setConsignflg("X");
            String listopertype = ten.getListopertype();
            ten.setSta(pblmodService.rmbSetListStatus(pblmod.getDectyp(), listopertype));
            ten.setCsta(pblmodService.genCsta(listopertype));
            ten.setObjinr(recgrp.getAds().getInr());
            ten.setObjtyp(rmb2108.getObjtyp());
            if (dyncDaoService.dyncReadNoDataByInr(ten)) {
                sysmodService.sdbUpdateWithLog(ten);
            } else {
                sysmodService.sdbInsertWithLog(ten);
            }
        }
        //银团贷款信息
        //savdatafrompanel
        pblmodService.setListData(pblmod, recgrp.getTem());
        recgrp.getAds().setBankgrouplist(recgrp.getTem().size());
//        int tdflic = recgrp.getAds().getBankgrouplist();
//        if (tdflic > 0) {
        for (Tem tem : recgrp.getTem()) {
            tem.setObjinr(recgrp.getAds().getInr());
            tem.setObjtyp(rmb2108.getObjtyp());
            if (dyncDaoService.dyncReadNoDataByInr(tem)) {
                sysmodService.sdbUpdateWithLog(tem);
            } else {
                sysmodService.sdbInsertWithLog(tem);
            }
        }
//        }
    }

    private void mappingRMBDataAAAAAA(Rmb2108 rmb2108) {
        Tdfgrp recgrp = rmb2108.getRecgrp();
        BizInfoVo bizInfo = BopContext.getBizInfo();
//        \SYSMOD.getlhanum ( $lhanam, $bchname )
        String type = Utils.getFieldValue(bizInfo, "paytyp");

        //融资（贷款）币种
        recgrp.getAds().setCurrencycode(RmbbopUtils.getCur());
        //融资（贷款）金额
        String bus = SettleContext.getTransName().substring(0, 2);
        BigDecimal othamt = StringUtils.equals(bus, "CP") ? RmbbopUtils.getTxccy() : RmbbopUtils.getActuccy();
        recgrp.getAds().setFincnyamt(othamt);
        String othacc = RmbbopUtils.getBasic().getLeft();

        if (StringUtils.equals(type, "I")) {
            //业务属性TransAttr
            recgrp.getAds().setTransattr("AL02");
            //债权人类型LOANERTYPE

            //贷款经营类型FINTYPE

            //融资种类FinKind

            //资金融（贷）出方机构代码OUTORGCODE

            //资金融（贷）出方机构名称OUTORGNAME
            recgrp.getAds().setOutorgname(BopUtils.getPtsByRol("ORC").getNam());
            //资金融（贷）出机构账户账号OUTORGACCT
            recgrp.getAds().setOutorgacct(Utils.getFieldValue(bizInfo, "orcact"));
            //融（贷）出机构常驻国家（地区）代码OUTCOUNTRYCODE
            recgrp.getAds().setOutcountrycode(Utils.getFieldValue(bizInfo, "orcctycod"));
            //资金融（借）入方机构代码INORGCODE
            recgrp.getAds().setInorgcode(RmbbopUtils.getOrgCode("APL"));
            //资金融（借）入方机构名称INORGNAME
            recgrp.getAds().setInorgname(RmbbopUtils.getOrgName("APL"));
            //资金融（借）入机构账户账号INORGACCT
            recgrp.getAds().setInorgacct(othacc);
            //融（借）入机构常驻国家（地区）代码INCOUNTRYCODE
            String incountrycode = RmbbopUtils.getCountryCodeByRol("PYE");
            recgrp.getAds().setIncountrycode(StringUtils.isEmpty(incountrycode) ? "CHN" : incountrycode);
        } else {
            //业务属性TransAttr
            recgrp.getAds().setTransattr("AL01");
            //债权人类型LOANERTYPE

            //贷款经营类型FINTYPE

            //融资种类FinKind

            //资金融（贷）出方机构代码OUTORGCODE
            recgrp.getAds().setOutorgcode(RmbbopUtils.getOrgCode("APL"));
            //资金融（贷）出方机构名称OUTORGNAME
            recgrp.getAds().setOutorgname(RmbbopUtils.getOrgName("APL"));
            //资金融（贷）出机构账户账号OUTORGACCT
            recgrp.getAds().setOutorgacct(othacc);
            //融（贷）出机构常驻国家（地区）代码OUTCOUNTRYCODE
            String outcountrycode = RmbbopUtils.getCountryCodeByRol("ORC");
            recgrp.getAds().setOutcountrycode(StringUtils.isEmpty(outcountrycode) ? "CHN" : outcountrycode);
            //资金融（借）入方机构代码INORGCODE

            //资金融（借）入方机构名称INORGNAME
            recgrp.getAds().setInorgname(BopUtils.getPtsByRol("PYE").getNam());
            //资金融（借）入机构账户账号INORGACCT
            recgrp.getAds().setInorgacct(Utils.getFieldValue(bizInfo, "pyeact"));
            //融（借）入机构常驻国家（地区）代码INCOUNTRYCODE
            recgrp.getAds().setIncountrycode(Utils.getFieldValue(bizInfo, "pyectycod"));
        }
        //融资（贷款）担保方式FinVouchMode

        //起息日FINSTRDATE

        //到期日FINENDDATE

        //利率类型RateType

        //利率FINRATE
        //浮动利率基准RateBenchmark

        //浮动利率加点RateAddend

        //利率重新定价期限RateAfreshLimit

        //利率期限单位RateUnit

        //融资（贷款）状态FinState
        recgrp.getAds().setFinstate("ST01");
        //还本付息方式PAYMODE

        //逾期未还款金额LATEPAYAMT
        recgrp.getAds().setLatepayamt(BigDecimal.ZERO);
        //融资合同备案号LENDINGCONTRACTNO
        //融资合同备案号默认为空，不校验
    }
}
