Пример #1
0
        private string GetYWTargetFileName(XEnum.ImportItemType itemType, int orgId)
        {
            string fileName = targetFileNames[(int)itemType];
            var    dotIndex = fileName.LastIndexOf('.');

            fileName = string.Format("{0}_{1}{2}", fileName.Substring(0, dotIndex), orgId, fileName.Substring(dotIndex));
            return(fileName);
        }
Пример #2
0
        private string GetTableSuffix(XEnum.ImportItemType itemType)
        {
            var suffix  = itemType.ToString();
            var startAt = suffix.LastIndexOf('.');

            suffix = suffix.Substring(startAt + 1);
            return(suffix);
        }
Пример #3
0
 protected override string GetImportWhereSql(XEnum.ImportItemType itemType)
 {
     if (itemType == XEnum.ImportItemType.LoanSF)
     {
         return("WHERE [贷款状态] <> '结清'");
     }
     else
     {
         return(base.GetImportWhereSql(itemType));
     }
 }
Пример #4
0
        private string AssignOrgId(int importId, XEnum.ImportItemType itemType)
        {
            if (!(itemType == XEnum.ImportItemType.Loan || itemType == XEnum.ImportItemType.Public || itemType == XEnum.ImportItemType.Private))
            {
                return("Invalid import item: " + itemType.ToString());
            }
            try {
                var dao    = new SqlDbHelper();
                var sql    = new StringBuilder();
                int count  = 0;
                var suffix = GetTableSuffix(itemType);

                logger.Debug("Assigning OrgId column to " + suffix);
                sql.AppendLine("UPDATE Import" + suffix);
                if (itemType == XEnum.ImportItemType.Loan)
                {
                    sql.AppendLine("SET OrgId = dbo.sfGetOrgId(OrgNo)");
                }
                else
                {
                    sql.AppendLine("SET OrgId = dbo.sfGetOrgId(OrgName2)");
                }
                sql.AppendLine("WHERE ImportId = {0} AND OrgId IS NULL");
                count = dao.ExecuteNonQuery(string.Format(sql.ToString(), importId));
                logger.DebugFormat("Done ({0} affected)", count);

                if (itemType == XEnum.ImportItemType.Loan)
                {
                    logger.Debug("Assigning OrgId4Report column to " + suffix);
                    sql.Clear();
                    sql.AppendLine("UPDATE ImportLoan");
                    sql.AppendLine("SET OrgId4Report = CASE WHEN OrgId IN (1, 2) THEN (CASE WHEN LEN(CustomerName) >= 5 THEN 1 ELSE 2 END)  ELSE OrgId END");
                    sql.AppendLine("WHERE ImportId = {0} AND OrgId4Report IS NULL");
                    count = dao.ExecuteNonQuery(string.Format(sql.ToString(), importId));
                    logger.DebugFormat("Done ({0} affected)", count);
                }
            }
            catch (Exception ex) {
                return(ex.Message);
            }
            return(string.Empty);
        }
Пример #5
0
        private string ImportYW(XEnum.ImportItemType itemType, int importId, string importFolder, string sourceFilePath)
        {
            logger.DebugFormat("Importing {0} data", itemType.ToString());
            var result     = "";
            var filePathes = sourceFilePath.Split('|');

            for (int i = 0; i < filePathes.Length; i++)
            {
                var filePath = filePathes[i];
                if (string.IsNullOrEmpty(filePath))
                {
                    logger.Debug("Source file not provided");
                    continue;
                }
                var orgId = GetOrgId4YW(filePath);
                // Do this check before any action
                if (orgId == 0)
                {
                    var msg = "不能确定业务状况表数据的所属银行:" + filePath;
                    logger.Error(msg);
                    return(msg);
                }

                var done = CopyItem(importId, importFolder, filePath, itemType);
                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\\" + GetYWTargetFileName(itemType, orgId);
                var    excelColumns   = "*";
                var    dbColumns      = "SubjectCode, SubjectName, LastDebitBalance, LastCreditBalance, CurrentDebitChange, CurrentCreditChange, CurrentDebitBalance, CurrentCreditBalance";
                result = ImportTable(importId, targetFilePath, itemType, excelColumns, dbColumns, "OrgId", orgId, 1, i + 1);
                if (!string.IsNullOrEmpty(result))
                {
                    return(result);
                }
            }
            return(result);
        }
Пример #6
0
        protected virtual string GetImportWhereSql(XEnum.ImportItemType itemType)
        {
            var sql = "";

            if (itemType == XEnum.ImportItemType.Loan)
            {
                sql = "WHERE [贷款状态] <> '结清'";
            }
            else if (itemType == XEnum.ImportItemType.Public)
            {
                sql = "WHERE [分行名称] LIKE '%长安银行榆林分行%'";
            }
            else if (itemType == XEnum.ImportItemType.Private)
            {
                sql = "WHERE [二级分行] LIKE '%长安银行榆林分行%'";
            }
            else if (itemType == XEnum.ImportItemType.YWNei || itemType == XEnum.ImportItemType.YWWai)
            {
                sql = "WHERE LEN([科目代号]) > 2";
            }
            return(sql);
        }
Пример #7
0
 public static SourceTable GetById(XEnum.ImportItemType sourceType)
 {
     return(GetById((int)sourceType));
 }
Пример #8
0
 public static AI_ImportColumn GetByAlias(XEnum.ImportItemType itemType, string alias)
 {
     return(GetByAlias((int)itemType, alias));
 }
Пример #9
0
 public static List <AI_ImportColumn> GetList(XEnum.ImportItemType itemType)
 {
     return(GetList((int)itemType));
 }
Пример #10
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);
        }
Пример #11
0
 protected string ImportTable(int importId, string filePath, XEnum.ImportItemType itemType, string excelColumns, string dbColumns, int sheetIndex = 1, int roundIndex = 1)
 {
     return(ImportTable(importId, filePath, itemType, excelColumns, dbColumns, null, null, sheetIndex, roundIndex));
 }
Пример #12
0
        protected bool CopyItem(int importId, string importFolder, string sourceFilePath, XEnum.ImportItemType itemType)
        {
            int itemTypeId = (int)itemType;

            if (sourceFilePath.Length == 0 || !File.Exists(sourceFilePath))
            {
                return(false);
            }

            string targetFileName = this.targetFileNames[itemTypeId];

            if (itemType == XEnum.ImportItemType.YWNei || itemType == XEnum.ImportItemType.YWWai || itemType == XEnum.ImportItemType.Loan)
            {
                var orgId = GetOrgId4YW(sourceFilePath);
                targetFileName = GetYWTargetFileName(itemType, orgId);
            }

            //Original
            var originalFolder = importFolder + @"\Original\";

            if (!Directory.Exists(originalFolder))
            {
                Directory.CreateDirectory(originalFolder);
            }
            File.Copy(sourceFilePath, originalFolder + @"\" + targetFileName, true);

            //Processed
            var processedFolder = importFolder + @"\Processed\";

            if (!Directory.Exists(processedFolder))
            {
                Directory.CreateDirectory(processedFolder);
            }
            File.Copy(sourceFilePath, processedFolder + @"\" + targetFileName, true);

            logger.Debug("Process copied item for " + itemType.ToString());
            ExcelHelper.ProcessCopiedItem(processedFolder + @"\" + targetFileName, itemType);

            logger.Debug("Updating ImportItem table");
            var dao = new SqlDbHelper();
            var sql = new StringBuilder();

            sql.AppendFormat("SELECT ISNULL(MAX(Id), 0) FROM ImportItem WHERE ImportId = {0} AND ItemType = {1}", importId, itemTypeId);
            var importItemId = (int)dao.ExecuteScalar(sql.ToString());

            if (importItemId == 0)
            {
                sql.Clear();
                sql.AppendLine(string.Format("INSERT INTO ImportItem (ImportId, ItemType, FilePath) VALUES ({0}, {1}, '{2}')", importId, itemTypeId, sourceFilePath));
                sql.AppendLine("SELECT SCOPE_IDENTITY()");
                importItemId = (int)((decimal)dao.ExecuteScalar(sql.ToString()));
                logger.Debug("New record created. ImportItemId = " + importItemId.ToString());
            }
            else
            {
                sql.Clear();
                sql.AppendFormat("UPDATE ImportItem SET FilePath = '{0}', ModifyDate = getdate() WHERE Id = {1}", sourceFilePath, importItemId);
                dao.ExecuteNonQuery(sql.ToString());
                logger.Debug("Existing record updated. ImportItemId = " + importItemId.ToString());
            }
            return(true);
        }