Пример #1
0
        private string ImportPublic(int importId, string importFolder, string sourceFilePath)
        {
            logger.Debug("Importing Public data");
            var done = CopyItem(importId, importFolder, sourceFilePath, XEnum.ImportItemType.Public);

            if (!done)
            {
                logger.Debug("Source file not provided");
                return("");                // Do nothing if user hasn't select a file for this table
            }

            // Import to database
            string targetFilePath = importFolder + "\\Processed\\" + targetFileNames[(int)XEnum.ImportItemType.Public];
            var    excelColumns   = "[分行名称], [支行名称], [客户姓名], [借款人企业性质], [组织机构代码], [合同编号], [借据编号], [借据开始日期], [借据结束日期], [行业门类], [行业大类], [行业中类], [行业小类], [贷款期限(月)], [币种], [发放后投向行业门类], [发放后投向行业大类], [发放后投向行业中类], [发放后投向行业小类], [业务类别], [授信品种], [核算项目名称], [七级分类], [客户信用等级], [客户规模(行内)], [客户规模(行外)], [本金逾期天数], [欠息天数], [贷款余额], [利率], [浮动利率], [主要担保方式], [保证金比例], [正常余额], [逾期余额], [非应计余额], [贷款账号], [是否涉农], [是否政府融资平台]";
            var    dbColumns      = "OrgName, OrgName2, CustomerName, OrgType, OrgCode, ContractNo, DueBillNo, LoanStartDate, LoanEndDate, IndustryType1, IndustryType2, IndustryType3, IndustryType4, TermMonth, CurrencyType, Direction1, Direction2, Direction3, Direction4, OccurType, BusinessType, SubjectNo, ClassifyResult, CreditLevel, MyBankIndTypeName, ScopeName, OverdueDays, OweInterestDays, Balance1, ActualBusinessRate, RateFloat, VouchTypeName, BailRatio, NormalBalance, OverdueBalance, BadBalance, LoanAccount, IsAgricultureCredit, IsINRZ";
            var    result         = "";
            var    table          = SourceTable.GetById(XEnum.ImportItemType.Public);

            for (int sheetIndex = 1; sheetIndex <= table.Sheets.Count; sheetIndex++)
            {
                result = ImportTable(importId, targetFilePath, XEnum.ImportItemType.Public, excelColumns, dbColumns, "PublicType", sheetIndex, sheetIndex);
                if (!String.IsNullOrEmpty(result))
                {
                    return(result);
                }
            }
            if (string.IsNullOrEmpty(result))
            {
                result = AssignOrgId(importId, XEnum.ImportItemType.Public);
            }
            return(result);
        }
Пример #2
0
        private string ImportWjflSF(int importId, string importFolder)
        {
            logger.Debug("Importing WjflSF data");

            // Import to database
            string targetFilePath = importFolder + "\\Processed\\" + targetFileNames[(int)XEnum.ImportItemType.WjflSF];
            var    table          = SourceTable.GetById(XEnum.ImportItemType.WjflSF);

            for (int sheetIndex = 1; sheetIndex <= table.Sheets.Count; sheetIndex++)
            {
                var excelColumns = "[行名], [客户名称], [贷款余额], [违约金额], [七级分类], [欠息金额], [放款日期], [到期日期], [逾期天数], [欠息天数], [担保方式], [行业], [客户类型], [贷款类型], [是否本月新增], [备注]";
                var dbColumns    = "OrgName, CustomerName, CapitalAmount, OweCapital, DangerLevel, OweInterestAmount, LoanStartDate, LoanEndDate, OverdueDays, OweInterestDays, DanBaoFangShi, Industry, CustomerType, LoanType, IsNew, [Comment]";
                if (sheetIndex > 1)
                {
                    excelColumns = excelColumns.Replace(", [违约金额]", "");
                    dbColumns    = dbColumns.Replace(", OweCapital", "");
                }
                var result = ImportTable(importId, targetFilePath, XEnum.ImportItemType.WjflSF, excelColumns, dbColumns, "WjflType", sheetIndex, sheetIndex);
                if (!String.IsNullOrEmpty(result))
                {
                    return(result);
                }
            }
            logger.Debug("Importing WjflSF done");

            logger.Debug("Assigning OrgId to WjflSF");
            var dao   = new SqlDbHelper();
            var sql   = string.Format("UPDATE ImportWjflSF SET OrgId = dbo.sfGetOrgId(OrgName) WHERE ImportId = {0}", importId);
            var count = dao.ExecuteNonQuery(sql);

            logger.DebugFormat("Done. {0} rows affected", count);

            return("");
        }
Пример #3
0
        protected string ImportTable(int importId, string filePath, XEnum.ImportItemType itemType, string excelColumns, string dbColumns, string dbColumns2, object dbValues2, int sheetIndex = 1, int roundIndex = 1)
        {
            int    columnCount = dbColumns.Split(',').Length;
            string suffix      = GetTableSuffix(itemType);

            logger.DebugFormat("Importing {0} to database", suffix);
            if (String.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath))
            {
                return(string.Format("File {0} cannot be found", filePath ?? "<empty>"));
            }
            logger.Debug("Getting source table");
            var sourceTable   = SourceTable.GetById(itemType);
            var sheetEntry    = sourceTable.Sheets[sheetIndex - 1];
            var dataRowEnding = sheetEntry.DataRowEndingFlag;

            logger.DebugFormat("Ending is {0}", dataRowEnding == "" ? "empty string" : dataRowEnding);

            var             oleOpened = false;
            OleDbConnection oconn     = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0");

            try {
                logger.Debug("Opening connection to " + filePath);
                oconn.Open();
                oleOpened = true;
                logger.Debug("Opened");

                DataTable dt     = oconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string    sheet1 = dt.Rows[(sheetIndex - 1) * 2][2].ToString();
                if (!IsSheetMatched(sheet1, sheetEntry.Name))
                {
                    logger.WarnFormat("Sheet \"{0}\" is not found at index {1}. This may be caused by extra sheets added. Searching in all sheets...", sheetEntry.Name, sheetIndex);
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        sheet1 = dt.Rows[i][2].ToString();
                        if (IsSheetMatched(sheet1, sheetEntry.Name))
                        {
                            logger.WarnFormat("Got sheet \"{0}\"", sheet1.Substring(0, sheet1.Length - 1));
                            break;
                        }
                    }
                }
                if (!IsSheetMatched(sheet1, sheetEntry.Name))
                {
                    var msg = string.Format("没有找到工作表\"{0}\"", sheetEntry.Name);
                    logger.Error(msg);
                    return(msg);
                }

                logger.Debug("Importing sheet " + sheet1.Substring(0, sheet1.Length - 1));

                var sql = new StringBuilder();
                sql.AppendFormat("SELECT {0} FROM [{1}]", excelColumns, sheet1);
                sql.AppendLine(GetImportWhereSql(itemType));
                var             s      = sql.ToString();
                OleDbCommand    ocmd   = new OleDbCommand(s, oconn);
                OleDbDataReader reader = ocmd.ExecuteReader();

                int dataRowIndex = 0;
                var dao          = new SqlDbHelper();
                if (sheetIndex == 1 && roundIndex == 1)                   // Delete existing records only when importing the first sheet
                {
                    dao.ExecuteNonQuery(string.Format("DELETE FROM Import{0} WHERE ImportId = {1}", suffix, importId));
                }

                sql.Clear();
                while (reader.Read())
                {
                    if (DataUtility.GetValue(reader, 0).Equals(dataRowEnding))                       // Going to end
                    {
                        break;
                    }
                    dataRowIndex++;
                    sql.AppendLine(GetInsertSql(reader, importId, suffix, columnCount, dbColumns, dbColumns2, dbValues2));
                    // Top 1 trial for exception track
                    if (dataRowIndex == 1)
                    {
                        try {
                            dao.ExecuteNonQuery(sql.ToString());
                            sql.Clear();
                        }
                        catch (Exception ex) {
                            logger.Error("Running INSERT: " + sql.ToString(), ex);
                            throw ex;
                        }
                    }
                    // Batch inserts
                    if (dataRowIndex > 1 && dataRowIndex % 1000 == 0)
                    {
                        dao.ExecuteNonQuery(sql.ToString());
                        sql.Clear();
                    }
                }
                if (sql.Length > 0)
                {
                    try {
                        dao.ExecuteNonQuery(sql.ToString());
                        sql.Clear();
                    }
                    catch (Exception ex) {
                        logger.Error("Running INSERT: " + sql.ToString(), ex);
                        throw ex;
                    }
                }
                logger.DebugFormat("{0} records imported.", dataRowIndex);

                if (itemType == XEnum.ImportItemType.Loan)
                {
                    // Cleanup zero-records since the oledb query cannot filter them out
                    var query   = string.Format("DELETE FROM ImportLoan WHERE ImportId = {0} AND ISNULL(CapitalAmount + OweCapital + OweYingShouInterest + OweCuiShouInterest, 0) = 0", importId);
                    var cleaned = dao.ExecuteNonQuery(query);
                    logger.DebugFormat("{0} records have been cleaned because of 4-zeros.", cleaned);
                }
            }
            catch (Exception ex) {
                logger.Error("Outest catch: ", ex);
                throw ex;
            }
            finally {
                if (oleOpened)
                {
                    oconn.Close();
                }
            }
            return(string.Empty);
        }