package pwc.taxtech.atms.common.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import pwc.taxtech.atms.dao.*;
import pwc.taxtech.atms.invoice.InputInvoiceMapper;
import pwc.taxtech.atms.invoice.OutputInvoiceDetailMapper;
import pwc.taxtech.atms.invoice.OutputInvoiceMapper;
import pwc.taxtech.atms.service.impl.DistributedIdService;
import pwc.taxtech.atms.vat.dao.*;

import java.util.HashMap;
import java.util.Map;

//用来获取spring托管的bean
@Component
public class SpringContextUtil implements ApplicationContextAware {

    private static ApplicationContext webApplicationContext;

    public static FormulaAdminMapper formulaAdminMapper;
    public static PeriodReportMapper reportMapper;
    public static CellDataMapper cellDataMapper;
    public static PeriodCellDataMapper periodCellDataMapper;
    public static DistributedIdService distributedIdService;
    public static PeriodFormulaBlockMapper formulaBlockMapper;
    public static PeriodCellTemplateMapper periodCellTemplateMapper;
    public static ProjectServiceTypeMapper projectServiceTypeMapper;
    public static PeriodTemplateMapper periodTemplateMapper;
    public static PeriodStandardAccountMapper periodStandardAccountMapper;
    public static ProjectDao projectDao;
    public static GlBalanceMapper glBalanceMapper;
    public static BalanceMapper balanceMapper;
//    public static DataSourceMapper dataSourceMapper;
    public static PeriodDataSourceMapper periodDataSourceMapper;
//    public static DataSourceDetailMapper dataSourceDetailMapper;
    public static PeriodDataSourceDetailMapper periodDataSourceDetailMapper;
    public static PeriodFormulaBlockMapper periodFormulaBlockMapper;
    public static VatEnterpriseAccountDao vatEnterpriseAccountDao;
    public static VatEnterpriseAccountMapper vatEnterpriseAccountMapper;
    public static PeriodEnterpriseAccountMapper periodEnterpriseAccountMapper;
    public static BalanceStdManualMapper balanceStdManualMapper;
    public static OutputInvoiceMapper outputInvoiceMapper;
    public static OutputInvoiceDetailMapper outputInvoiceDetailMapper;
    public static PeriodTaxRuleSettingMapper periodTaxRuleSettingMapper;
    public static InputInvoiceDao inputInvoiceDao;
    public static InputInvoiceMapper inputInvoiceMapper;
    public static InputVatInvoiceMapper inputVatInvoiceMapper;
    public static CitAssetsListMapper assetsListMapper;
    public static ProjectMapper projectMapper;
    public static CellDataSourceMapper cellDataSourceMapper;
    public static PeriodCellDataSourceMapper periodCellDataSourceMapper;
    public static OrganizationMapper organizationMapper;
    public static EnterpriseAccountSetOrgMapper enterpriseAccountSetOrgMapper;
    public static AccountMappingMapper accountMappingMapper;
    public static TrialBalanceMapper trialBalanceMapper;
    public static AdjustmentTableMapper adjustmentTableMapper;
    public static TrialBalanceFinalMapper trialBalanceFinalMapper;
    public static     ProfitLossStatementMapper profitLossStatementMapper;
    public static RevenueConfigMapper revenueConfigMapper;
    public static RevenueTypeMappingMapper revenueTypeMappingMapper;
    public static InvoiceRecordMapper invoiceRecordMapper;
    public static CertifiedInvoicesListMapper certifiedInvoicesListMapper;
    public static TrialBalanceMappingMapper trialBalanceMappingMapper;


    public static     CashFlowMapper cashFlowMapper;
    public static     BalanceSheetManualMapper balanceSheetManualMapper;
    public static     ProfitLossStatementManualMapper profitLossStatementManualMapper;
    public static     CashFlowManualMapper cashFlowManualMapper;
    public static     BalanceSheetFinalMapper balanceSheetFinalMapper;
    public static     CashFlowFinalMapper cashFlowFinalMapper;
    public static     CitBalanceSheetPrcAdjustMapper citBalanceSheetPrcAdjustMapper;
    public static     CitProfitPrcAdjustMapper citProfitPrcAdjustMapper;
    public  static   BalanceSheetMapper balanceSheetMapper;

    public   static Map map = new HashMap<String, Object>();

    /**
     * 获取bean
     *
     * @param requiredType
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> requiredType) {
        return SpringContextUtil.webApplicationContext.getBean(requiredType);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        webApplicationContext = applicationContext;
        formulaAdminMapper = webApplicationContext.getBean(FormulaAdminMapper.class);
        reportMapper = webApplicationContext.getBean(PeriodReportMapper.class);
        cellDataMapper = webApplicationContext.getBean(CellDataMapper.class);
        periodCellDataMapper = webApplicationContext.getBean(PeriodCellDataMapper.class);
        distributedIdService = webApplicationContext.getBean(DistributedIdService.class);
        formulaBlockMapper = webApplicationContext.getBean(PeriodFormulaBlockMapper.class);
        periodCellTemplateMapper = webApplicationContext.getBean(PeriodCellTemplateMapper.class);
        projectServiceTypeMapper = webApplicationContext.getBean(ProjectServiceTypeMapper.class);
        periodTemplateMapper = webApplicationContext.getBean(PeriodTemplateMapper.class);
//        periodStandardAccountMapper = webApplicationContext.getBean(PeriodStandardAccountMapper.class);
        periodStandardAccountMapper = webApplicationContext.getBean(PeriodStandardAccountMapper.class);
        projectDao = webApplicationContext.getBean(ProjectDao.class);
        balanceMapper = webApplicationContext.getBean(BalanceMapper.class);
//        dataSourceMapper = webApplicationContext.getBean(DataSourceMapper.class);
        periodDataSourceMapper = webApplicationContext.getBean(PeriodDataSourceMapper.class);
//        dataSourceDetailMapper = webApplicationContext.getBean(DataSourceDetailMapper.class);
        periodDataSourceDetailMapper = webApplicationContext.getBean(PeriodDataSourceDetailMapper.class);
        periodFormulaBlockMapper = webApplicationContext.getBean(PeriodFormulaBlockMapper.class);
        vatEnterpriseAccountDao = webApplicationContext.getBean(VatEnterpriseAccountDao.class);
        vatEnterpriseAccountMapper = webApplicationContext.getBean(VatEnterpriseAccountMapper.class);
        periodEnterpriseAccountMapper = webApplicationContext.getBean(PeriodEnterpriseAccountMapper.class);
        balanceStdManualMapper = webApplicationContext.getBean(BalanceStdManualMapper.class);
//        outputVatInvoiceMapper = webApplicationContext.getBean(OutputVatInvoiceMapper.class);
        outputInvoiceMapper = webApplicationContext.getBean(OutputInvoiceMapper.class);
        outputInvoiceDetailMapper = webApplicationContext.getBean(OutputInvoiceDetailMapper.class);
        periodTaxRuleSettingMapper = webApplicationContext.getBean(PeriodTaxRuleSettingMapper.class);
//        inputVatInvoiceDao = webApplicationContext.getBean(InputVatInvoiceDao.class);
        inputVatInvoiceMapper = webApplicationContext.getBean(InputVatInvoiceMapper.class);
        inputInvoiceDao = webApplicationContext.getBean(InputInvoiceDao.class);
        inputInvoiceMapper = webApplicationContext.getBean(InputInvoiceMapper.class);
        assetsListMapper = webApplicationContext.getBean(CitAssetsListMapper.class);
        projectMapper = webApplicationContext.getBean(ProjectMapper.class);
        cellDataSourceMapper = webApplicationContext.getBean(CellDataSourceMapper.class);
        periodCellDataSourceMapper = webApplicationContext.getBean(PeriodCellDataSourceMapper.class);
        organizationMapper = webApplicationContext.getBean(OrganizationMapper.class);
        enterpriseAccountSetOrgMapper = webApplicationContext.getBean(EnterpriseAccountSetOrgMapper.class);
        accountMappingMapper = webApplicationContext.getBean(AccountMappingMapper.class);
        glBalanceMapper = webApplicationContext.getBean(GlBalanceMapper.class);
        trialBalanceMapper = webApplicationContext.getBean(TrialBalanceMapper.class);
        adjustmentTableMapper = webApplicationContext.getBean(AdjustmentTableMapper.class);
        trialBalanceFinalMapper = webApplicationContext.getBean(TrialBalanceFinalMapper.class);
        profitLossStatementMapper = webApplicationContext.getBean(ProfitLossStatementMapper.class);
        cashFlowMapper = webApplicationContext.getBean(CashFlowMapper.class);
        balanceSheetManualMapper = webApplicationContext.getBean(BalanceSheetManualMapper.class);
        profitLossStatementManualMapper = webApplicationContext.getBean(ProfitLossStatementManualMapper.class);
        cashFlowManualMapper = webApplicationContext.getBean(CashFlowManualMapper.class);
        balanceSheetFinalMapper = webApplicationContext.getBean(BalanceSheetFinalMapper.class);
        cashFlowFinalMapper = webApplicationContext.getBean(CashFlowFinalMapper.class);
        citBalanceSheetPrcAdjustMapper = webApplicationContext.getBean(CitBalanceSheetPrcAdjustMapper.class);

        citProfitPrcAdjustMapper = webApplicationContext.getBean(CitProfitPrcAdjustMapper.class);

        balanceSheetMapper = webApplicationContext.getBean(BalanceSheetMapper.class);
        revenueTypeMappingMapper = webApplicationContext.getBean(RevenueTypeMappingMapper.class);
        invoiceRecordMapper = webApplicationContext.getBean(InvoiceRecordMapper.class);
        certifiedInvoicesListMapper = webApplicationContext.getBean(CertifiedInvoicesListMapper.class);
        trialBalanceMappingMapper = webApplicationContext.getBean(TrialBalanceMappingMapper.class);
        revenueConfigMapper = webApplicationContext.getBean(RevenueConfigMapper.class);
       /* map.put("balance_sheet",  balanceMapper);
        map.put("profit_loss_statement",profitLossStatementMapper);
        map.put("cash_flow", cashFlowMapper);
        map.put("balance_sheet_manual", balanceSheetManualMapper);
        map.put("profit_loss_statement_manual", profitLossStatementManualMapper);
        map.put("cash_flow_manual", cashFlowManualMapper);

        map.put("balance_sheet_final", balanceSheetFinalMapper);
        map.put("profit_loss_statement_final", profitLossStatementManualMapper);
        map.put("cash_flow_final", cashFlowFinalMapper);
        map.put("cit_balance_sheet_prc_adjust", citBalanceSheetPrcAdjustMapper);
        map.put("cit_profit_prc_adjust", citProfitPrcAdjustMapper);*/


    }
}