Пример #1
0
        private OperationReturn SyncExtension(List <string> listParams)
        {
            OperationReturn optReturn = new OperationReturn();

            optReturn.Result = true;
            optReturn.Code   = 0;
            try
            {
                #region 解析参数

                //ListParams
                //参考S000ACodes中的说明,此处从略
                if (listParams == null || listParams.Count < 3)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("Request param is null or count invalid");
                    return(optReturn);
                }
                string strUserID         = listParams[0];
                string strTenantOrgToken = listParams[1];
                string strCount          = listParams[2];
                WriteOperationLog(string.Format("SyncExtension:\tUserID:{0};TenantOrgToken:{1};Count:{2}", strUserID,
                                                strTenantOrgToken, strCount));

                #endregion


                #region 检查参数有效性

                int tenantOrgToken;
                if (!int.TryParse(strTenantOrgToken, out tenantOrgToken) ||
                    tenantOrgToken <= 0)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("Param TenantOrgToken invalid.");
                    return(optReturn);
                }
                int intCount;
                if (!int.TryParse(strCount, out intCount) ||
                    intCount < 0)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("Param Count invalid.");
                    return(optReturn);
                }
                if (listParams.Count < intCount + 3)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("Extension Count invalid.");
                    return(optReturn);
                }

                #endregion


                #region 得到分机列表

                List <ExtensionInfo> listExtensions = new List <ExtensionInfo>();
                for (int i = 0; i < intCount; i++)
                {
                    string     strInfo = listParams[i + 3];
                    JsonObject jsonExt = null;
                    try
                    {
                        jsonExt = new JsonObject(strInfo);
                    }
                    catch { }
                    if (jsonExt != null)
                    {
                        ExtensionInfo info = new ExtensionInfo();
                        if (jsonExt[S000AConsts.FIELD_NAME_EXTENSIONINFO_EXTENSION] != null)
                        {
                            info.Extension = jsonExt[S000AConsts.FIELD_NAME_EXTENSIONINFO_EXTENSION].Value;
                        }
                        if (jsonExt[S000AConsts.FIELD_NAME_EXTENSIONINFO_CHANNELNAME] != null)
                        {
                            info.ChannelName = jsonExt[S000AConsts.FIELD_NAME_EXTENSIONINFO_CHANNELNAME].Value;
                        }
                        if (jsonExt[S000AConsts.FIELD_NAME_EXTENSIONINFO_SERVERIP] != null)
                        {
                            info.ServerIP = jsonExt[S000AConsts.FIELD_NAME_EXTENSIONINFO_SERVERIP].Value;
                        }
                        if (jsonExt[S000AConsts.FIELD_NAME_EXTENSIONINFO_CHANNELID] != null)
                        {
                            info.ChannelID = (int)jsonExt[S000AConsts.FIELD_NAME_EXTENSIONINFO_CHANNELID].Number;
                        }
                        listExtensions.Add(info);
                    }
                }
                WriteOperationLog(string.Format("ListExtension:{0}", listExtensions.Count));

                #endregion


                #region 获取数据库信息

                optReturn = ReadDatabaseInfo();
                if (!optReturn.Result)
                {
                    return(optReturn);
                }
                DatabaseInfo dbInfo = optReturn.Data as DatabaseInfo;
                if (dbInfo == null)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_OBJECT_NULL;
                    optReturn.Message = string.Format("DatabaseInfo is null");
                    return(optReturn);
                }
                WriteOperationLog(string.Format("DatabaseInfo:{0}", dbInfo));

                #endregion


                #region 根据TenantOrgToken获取数据库中分机信息列表

                string        strConn      = dbInfo.GetConnectionString();
                string        strRentToken = "00000";
                string        strSql;
                int           dbType = dbInfo.TypeID;
                DataSet       objDataSet;
                int           addNum     = 0;
                int           modifyNum  = 0;
                List <string> listReturn = new List <string>();


                #region 租户机构编号

                string strOrgID   = string.Format("10114010100000{0}", tenantOrgToken.ToString("00000"));
                long   orgID      = long.Parse(strOrgID);
                long   orgAdminID = 0;

                #endregion


                #region 获取租户管理员编号

                if (tenantOrgToken > 0)
                {
                    switch (dbType)
                    {
                    case 2:
                        strSql = string.Format("SELECT * FROM T_11_005_{0} WHERE C006 = {1} AND C027 = '1'",
                                               strRentToken, orgID);
                        optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                        break;

                    case 3:
                        strSql = string.Format("SELECT * FROM T_11_005_{0} WHERE C006 = {1} AND C027 = '1'",
                                               strRentToken, orgID);
                        optReturn = OracleOperation.GetDataSet(strConn, strSql);
                        break;

                    default:
                        optReturn.Result  = false;
                        optReturn.Code    = Defines.RET_PARAM_INVALID;
                        optReturn.Message = string.Format("DBType invalid");
                        return(optReturn);
                    }
                    if (!optReturn.Result)
                    {
                        return(optReturn);
                    }
                    objDataSet = optReturn.Data as DataSet;
                    if (objDataSet == null)
                    {
                        optReturn.Result  = false;
                        optReturn.Code    = Defines.RET_OBJECT_NULL;
                        optReturn.Message = string.Format("DataSet is null.");
                        return(optReturn);
                    }
                    if (objDataSet.Tables[0].Rows.Count <= 0)
                    {
                        optReturn.Result  = false;
                        optReturn.Code    = Defines.RET_NOT_EXIST;
                        optReturn.Message = string.Format("TenantOrg admin not exist.");
                        return(optReturn);
                    }
                    DataRow dr = objDataSet.Tables[0].Rows[0];
                    orgAdminID = Convert.ToInt64(dr["C001"]);
                }
                if (orgAdminID <= 0)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("TenantOrg admin invalid.");
                    return(optReturn);
                }

                #endregion


                #region 首先获取该TenantOrgToken下的分机编号

                List <ExtensionInfo> listExts = new List <ExtensionInfo>();
                switch (dbType)
                {
                case 2:
                    strSql =
                        string.Format(
                            "SELECT C001 FROM T_11_101_{0} WHERE C001 > 1040000000000000000 AND C001 < 1050000000000000000 AND C002 = 3 AND C011 = '{1}' ORDER BY C001, C002",
                            strRentToken, tenantOrgToken);
                    optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                    break;

                case 3:
                    strSql =
                        string.Format(
                            "SELECT C001 FROM T_11_101_{0} WHERE C001 > 1040000000000000000 AND C001 < 1050000000000000000 AND C002 = 3 AND C011 = '{1}' ORDER BY C001, C002",
                            strRentToken, tenantOrgToken);
                    optReturn = OracleOperation.GetDataSet(strConn, strSql);
                    break;

                default:
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("DBType invalid");
                    return(optReturn);
                }
                if (!optReturn.Result)
                {
                    return(optReturn);
                }
                objDataSet = optReturn.Data as DataSet;
                if (objDataSet == null)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_OBJECT_NULL;
                    optReturn.Message = string.Format("DataSet is null");
                    return(optReturn);
                }
                for (int i = 0; i < objDataSet.Tables[0].Rows.Count; i++)
                {
                    DataRow       dr   = objDataSet.Tables[0].Rows[i];
                    long          id   = Convert.ToInt64(dr["C001"]);
                    ExtensionInfo info = new ExtensionInfo();
                    info.ObjID = id;
                    listExts.Add(info);
                }

                #endregion


                IDbConnection    objConn;
                IDbDataAdapter   objAdapter;
                DbCommandBuilder objCmdBuilder;


                #region 遍历每个分机,获取分机的配置信息,然后更新分机信息

                bool isModify;
                for (int i = 0; i < listExts.Count; i++)
                {
                    ExtensionInfo extInfo = listExts[i];
                    long          id      = extInfo.ObjID;
                    switch (dbType)
                    {
                    case 2:
                        strSql = string.Format("SELECT * FROM T_11_101_{0} WHERE C001 = {1} ORDER BY C001, C002",
                                               strRentToken, id);
                        objConn       = MssqlOperation.GetConnection(strConn);
                        objAdapter    = MssqlOperation.GetDataAdapter(objConn, strSql);
                        objCmdBuilder = MssqlOperation.GetCommandBuilder(objAdapter);
                        break;

                    case 3:
                        strSql = string.Format("SELECT * FROM T_11_101_{0} WHERE C001 = {1} ORDER BY C001, C002",
                                               strRentToken, id);
                        objConn       = OracleOperation.GetConnection(strConn);
                        objAdapter    = OracleOperation.GetDataAdapter(objConn, strSql);
                        objCmdBuilder = OracleOperation.GetCommandBuilder(objAdapter);
                        break;

                    default:
                        optReturn.Result  = false;
                        optReturn.Code    = Defines.RET_PARAM_INVALID;
                        optReturn.Message = string.Format("DBType invalid");
                        return(optReturn);
                    }
                    if (objConn == null || objAdapter == null || objCmdBuilder == null)
                    {
                        optReturn.Result  = false;
                        optReturn.Code    = Defines.RET_OBJECT_NULL;
                        optReturn.Message = string.Format("Database object is null");
                        return(optReturn);
                    }
                    objCmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;
                    objCmdBuilder.SetAllValues   = false;
                    try
                    {
                        objDataSet = new DataSet();
                        objAdapter.Fill(objDataSet);

                        for (int j = 0; j < objDataSet.Tables[0].Rows.Count; j++)
                        {
                            DataRow dr = objDataSet.Tables[0].Rows[j];

                            #region 更新

                            isModify = false;
                            int rowID = Convert.ToInt32(dr["C002"]);
                            if (rowID == 1)
                            {
                                string strExt01017 = dr["C017"].ToString();     //01017代表分机名称(分机号+IP的形式)
                                strExt01017 = DecryptFromDB(strExt01017);
                                string[] arrInfos = strExt01017.Split(new[] { ConstValue.SPLITER_CHAR },
                                                                      StringSplitOptions.None);
                                if (arrInfos.Length > 0)
                                {
                                    string strExt = arrInfos[0];
                                    extInfo.Extension = strExt;
                                }
                                string strExt01018 = dr["C018"].ToString();
                                strExt01018         = DecryptFromDB(strExt01018);
                                extInfo.ChannelName = strExt01018;
                            }
                            var temp = listExtensions.FirstOrDefault(e => e.Extension == extInfo.Extension);
                            if (temp != null)
                            {
                                temp.ObjID          = id;
                                extInfo.ChannelName = temp.ChannelName;
                                isModify            = true;
                                modifyNum++;
                            }
                            if (isModify)
                            {
                                string strExt01018 = extInfo.ChannelName;
                                strExt01018 = EncryptToDB(strExt01018);
                                if (rowID == 1)
                                {
                                    dr["C012"] = "1";
                                    dr["C013"] = "0";
                                    dr["C014"] = "0";
                                    dr["C015"] = "N";
                                    dr["C018"] = strExt01018;
                                }
                            }

                            #endregion
                        }

                        objAdapter.Update(objDataSet);
                        objDataSet.AcceptChanges();
                    }
                    catch (Exception ex)
                    {
                        optReturn.Result    = false;
                        optReturn.Code      = Defines.RET_FAIL;
                        optReturn.Message   = ex.Message;
                        optReturn.Exception = ex;
                    }
                    finally
                    {
                        if (objConn.State == ConnectionState.Open)
                        {
                            objConn.Close();
                        }
                        objConn.Dispose();
                    }
                }

                #endregion


                #region 遍历每个分机,如果是需要新增的,增加分机信息

                bool isAdd = false;
                for (int i = 0; i < listExtensions.Count; i++)
                {
                    ExtensionInfo extInfo = listExtensions[i];
                    long          id      = extInfo.ObjID;
                    if (id <= 0)
                    {
                        isAdd = isAdd || true;
                    }
                }
                if (isAdd)
                {
                    switch (dbType)
                    {
                    case 2:
                        strSql = string.Format("SELECT * FROM T_11_101_{0} WHERE 1 = 2 ORDER BY C001, C002",
                                               strRentToken);
                        objConn       = MssqlOperation.GetConnection(strConn);
                        objAdapter    = MssqlOperation.GetDataAdapter(objConn, strSql);
                        objCmdBuilder = MssqlOperation.GetCommandBuilder(objAdapter);
                        break;

                    case 3:
                        strSql = string.Format("SELECT * FROM T_11_101_{0} WHERE 1 = 2 ORDER BY C001, C002",
                                               strRentToken);
                        objConn       = OracleOperation.GetConnection(strConn);
                        objAdapter    = OracleOperation.GetDataAdapter(objConn, strSql);
                        objCmdBuilder = OracleOperation.GetCommandBuilder(objAdapter);
                        break;

                    default:
                        optReturn.Result  = false;
                        optReturn.Code    = Defines.RET_PARAM_INVALID;
                        optReturn.Message = string.Format("DBType invalid");
                        return(optReturn);
                    }
                    if (objConn == null || objAdapter == null || objCmdBuilder == null)
                    {
                        optReturn.Result  = false;
                        optReturn.Code    = Defines.RET_OBJECT_NULL;
                        optReturn.Message = string.Format("Database object is null");
                        return(optReturn);
                    }
                    objCmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;
                    objCmdBuilder.SetAllValues   = false;

                    try
                    {
                        objDataSet = new DataSet();
                        objAdapter.Fill(objDataSet);

                        for (int i = 0; i < listExtensions.Count; i++)
                        {
                            ExtensionInfo extInfo = listExtensions[i];
                            long          id      = extInfo.ObjID;
                            if (id <= 0)
                            {
                                #region 生成流水号

                                List <string> listSubParams = new List <string>();
                                listSubParams.Add("11");
                                listSubParams.Add("104");
                                listSubParams.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                                optReturn = GetSerialID(listSubParams);
                                if (!optReturn.Result)
                                {
                                    return(optReturn);
                                }
                                id            = Convert.ToInt64(optReturn.Data.ToString());
                                extInfo.ObjID = id;

                                #endregion


                                #region 新增

                                DataRow dr1 = objDataSet.Tables[0].NewRow();
                                dr1["C001"] = id;
                                dr1["C002"] = 1;
                                dr1["C011"] = orgID;
                                dr1["C012"] = "1";
                                dr1["C013"] = "1";
                                dr1["C014"] = "0";
                                dr1["C015"] = "N";
                                dr1["C016"] = "05";
                                string str01017 = string.Format("{0}{1}{2}", extInfo.Extension, ConstValue.SPLITER_CHAR,
                                                                extInfo.ServerIP);
                                str01017    = EncryptToDB(str01017);
                                dr1["C017"] = str01017;
                                string str01018 = extInfo.ChannelName;
                                str01018    = EncryptToDB(str01018);
                                dr1["C018"] = str01018;

                                DataRow dr2 = objDataSet.Tables[0].NewRow();
                                dr2["C001"] = id;
                                dr2["C002"] = 2;

                                DataRow dr3 = objDataSet.Tables[0].NewRow();
                                dr3["C001"] = id;
                                dr3["C002"] = 3;
                                dr3["C011"] = tenantOrgToken;

                                objDataSet.Tables[0].Rows.Add(dr1);
                                objDataSet.Tables[0].Rows.Add(dr2);
                                objDataSet.Tables[0].Rows.Add(dr3);

                                addNum++;

                                #endregion


                                #region 新增的分机要添加到系统管理员权限列表中

                                if (id > 0)
                                {
                                    switch (dbType)
                                    {
                                    case 2:
                                        strSql =
                                            string.Format(
                                                "INSERT INTO T_11_201_{0} VALUES (0, 0, {1}, {2}, '2014/1/1', '2199/12/31')",
                                                strRentToken, ConstValue.USER_ADMIN, id);
                                        optReturn = MssqlOperation.ExecuteSql(strConn, strSql);
                                        break;

                                    case 3:
                                        strSql =
                                            string.Format(
                                                "INSERT INTO T_11_201_{0} VALUES (0, 0, {1}, {2}, TO_DATE('2014/1/1','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2199/12/31','YYYY-MM-DD HH24:MI:SS'))",
                                                strRentToken, ConstValue.USER_ADMIN, id);
                                        optReturn = OracleOperation.ExecuteSql(strConn, strSql);
                                        break;

                                    default:
                                        optReturn.Result  = false;
                                        optReturn.Code    = Defines.RET_PARAM_INVALID;
                                        optReturn.Message = string.Format("DBType invalid");
                                        return(optReturn);
                                    }
                                    if (!optReturn.Result)
                                    {
                                        return(optReturn);
                                    }
                                }

                                #endregion


                                #region 新增的分机要添加到租户管理员的管理权限列表中

                                if (id > 0)
                                {
                                    switch (dbType)
                                    {
                                    case 2:
                                        strSql =
                                            string.Format(
                                                "INSERT INTO T_11_201_{0} VALUES (0, 0, {1}, {2}, '2014/1/1', '2199/12/31')",
                                                strRentToken, orgAdminID, id);
                                        optReturn = MssqlOperation.ExecuteSql(strConn, strSql);
                                        break;

                                    case 3:
                                        strSql =
                                            string.Format(
                                                "INSERT INTO T_11_201_{0} VALUES (0, 0, {1}, {2}, TO_DATE('2014/1/1','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2199/12/31','YYYY-MM-DD HH24:MI:SS'))",
                                                strRentToken, orgAdminID, id);
                                        optReturn = OracleOperation.ExecuteSql(strConn, strSql);
                                        break;

                                    default:
                                        optReturn.Result  = false;
                                        optReturn.Code    = Defines.RET_PARAM_INVALID;
                                        optReturn.Message = string.Format("DBType invalid");
                                        return(optReturn);
                                    }
                                    if (!optReturn.Result)
                                    {
                                        return(optReturn);
                                    }
                                }

                                #endregion
                            }
                        }

                        objAdapter.Update(objDataSet);
                        objDataSet.AcceptChanges();
                    }
                    catch (Exception ex)
                    {
                        optReturn.Result    = false;
                        optReturn.Code      = Defines.RET_FAIL;
                        optReturn.Message   = ex.Message;
                        optReturn.Exception = ex;
                    }
                    finally
                    {
                        if (objConn.State == ConnectionState.Open)
                        {
                            objConn.Close();
                        }
                        objConn.Dispose();
                    }
                }

                #endregion


                listReturn.Add(addNum.ToString());
                listReturn.Add(modifyNum.ToString());
                optReturn.Data = listReturn;

                #endregion
            }
            catch (Exception ex)
            {
                optReturn.Result    = false;
                optReturn.Code      = Defines.RET_FAIL;
                optReturn.Message   = ex.Message;
                optReturn.Exception = ex;
            }
            return(optReturn);
        }
Пример #2
0
        private void ModifyBugInfos()
        {
            try
            {
                var item = LvBugList.SelectedItem as BugItem;
                if (item == null)
                {
                    return;
                }
                var info = item.Info;
                if (info == null)
                {
                    return;
                }
                var bugType = ComboBugTypes.SelectedItem as ComboItem;
                if (bugType == null)
                {
                    ShowException(string.Format("Bug Type invalid!"));
                    return;
                }
                info.Type = bugType.IntValue;
                DateTime dtValue;
                if (!DateTime.TryParse(TxtUpdateDate.Text + " 00:00:00", out dtValue))
                {
                    ShowException(string.Format("UpdateDate invalid!"));
                    return;
                }
                info.OptDate = dtValue.ToString("yyyyMMdd");
                int intValue;
                if (!int.TryParse(TxtLevel.Text, out intValue) ||
                    intValue < 0 ||
                    intValue > 10)
                {
                    ShowException(string.Format("Level invalid!"));
                    return;
                }
                info.Level   = intValue;
                info.Content = TxtContent.Text;

                if (mDatabaseInfo == null)
                {
                    return;
                }
                bool bIsSucess = false;

                BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += (s, de) =>
                {
                    try
                    {
                        string           strConn = mDatabaseInfo.GetConnectionString();
                        int              dbType  = mDatabaseInfo.TypeID;
                        string           strSql;
                        IDbConnection    objConn;
                        IDbDataAdapter   objAdapter;
                        DbCommandBuilder objCmdBuilder;
                        switch (dbType)
                        {
                        case 2:
                            strSql        = string.Format("SELECT * FROM T_UPDATE_LIST WHERE C001 = '{0}'", info.SerialNo);
                            objConn       = MssqlOperation.GetConnection(strConn);
                            objAdapter    = MssqlOperation.GetDataAdapter(objConn, strSql);
                            objCmdBuilder = MssqlOperation.GetCommandBuilder(objAdapter);
                            break;

                        case 3:
                            strSql        = string.Format("SELECT * FROM T_UPDATE_LIST WHERE C001 = '{0}'", info.SerialNo);
                            objConn       = OracleOperation.GetConnection(strConn);
                            objAdapter    = OracleOperation.GetDataAdapter(objConn, strSql);
                            objCmdBuilder = OracleOperation.GetCommandBuilder(objAdapter);
                            break;

                        default:
                            ShowException(string.Format("DatabaseType invalid!"));
                            bIsSucess = false;
                            return;
                        }
                        if (objConn == null || objAdapter == null || objCmdBuilder == null)
                        {
                            ShowException(string.Format("DBObject is null"));
                            bIsSucess = false;
                            return;
                        }
                        objCmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;
                        objCmdBuilder.SetAllValues   = false;
                        try
                        {
                            DataSet objDataSet = new DataSet();
                            objAdapter.Fill(objDataSet);

                            if (objDataSet.Tables[0].Rows.Count <= 0)
                            {
                                ShowException(string.Format("Fail.\tDataRow not exist.\t{0}", info.SerialNo));
                                return;
                            }
                            DataRow dr = objDataSet.Tables[0].Rows[0];
                            dr["C001"] = info.SerialNo;
                            dr["C002"] = info.Type;
                            dr["C003"] = info.ModuleID;
                            dr["C004"] = info.ModuleName;
                            dr["C005"] = info.OptDate;
                            dr["C006"] = info.Level;
                            dr["C007"] = info.Content;
                            dr["C008"] = info.LangID;
                            dr["C009"] = info.ModuleLangID;
                            dr["C010"] = mCurrentVersion.Display;

                            objAdapter.Update(objDataSet);
                            objDataSet.AcceptChanges();

                            bIsSucess = true;
                        }
                        catch (Exception ex)
                        {
                            ShowException(string.Format("Fail.\t{0}", ex.Message));
                            bIsSucess = false;
                        }
                        finally
                        {
                            if (objConn.State == ConnectionState.Open)
                            {
                                objConn.Close();
                            }
                            objConn.Dispose();
                        }
                    }
                    catch (Exception ex)
                    {
                        ShowException(ex.Message);
                    }
                };
                worker.RunWorkerCompleted += (s, re) =>
                {
                    worker.Dispose();

                    if (bIsSucess)
                    {
                        AppendMessage(string.Format("Modify end.\t{0}", info.SerialNo));

                        ReloaddBugInfos();
                    }
                };
                worker.RunWorkerAsync();
            }
            catch (Exception ex)
            {
                ShowException(ex.Message);
            }
        }
Пример #3
0
        private void DoSyncRealExtData()
        {
            try
            {
                if (mSession == null ||
                    mSession.DatabaseInfo == null)
                {
                    OnDebug(LogMode.Error, string.Format("SessionInfo or DatabaseInfo is null"));
                    return;
                }
                DatabaseInfo    dbInfo    = mSession.DatabaseInfo;
                string          strConn   = dbInfo.GetConnectionString();
                int             dbType    = dbInfo.TypeID;
                string          rentToken = mSession.RentInfo.Token;
                string          strSql;
                DataSet         objDataSet;
                OperationReturn optReturn;
                int             pbxDeviceCount = 0;
                int             extCount       = 0;
                long            longValue;
                int             intValue;
                string          strValue;

                List <ResourceConfigInfo> listResourceInfos = new List <ResourceConfigInfo>();
                List <RealExtInfo>        listExtInfos      = new List <RealExtInfo>();


                #region 获取PBXDevice资源

                switch (dbType)
                {
                case 2:
                    strSql =
                        string.Format(
                            "SELECT * FROM T_11_101_{0} WHERE C001 > {1} AND C001 < {2} AND C002 = 1 ORDER BY C001, C002",
                            rentToken,
                            Service07Consts.RESOURCE_PBXDEVICE * 10000000000000000,
                            (Service07Consts.RESOURCE_PBXDEVICE + 1) * 10000000000000000);
                    optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                    if (!optReturn.Result)
                    {
                        OnDebug(LogMode.Error,
                                string.Format("LoadResourceInfo fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                        return;
                    }
                    objDataSet = optReturn.Data as DataSet;
                    break;

                case 3:
                    strSql =
                        string.Format(
                            "SELECT * FROM T_11_101_{0} WHERE C001 > {1} AND C001 < {2} AND C002 = 1 ORDER BY C001, C002",
                            rentToken,
                            Service07Consts.RESOURCE_PBXDEVICE * 10000000000000000,
                            (Service07Consts.RESOURCE_PBXDEVICE + 1) * 10000000000000000);
                    optReturn = OracleOperation.GetDataSet(strConn, strSql);
                    if (!optReturn.Result)
                    {
                        OnDebug(LogMode.Error,
                                string.Format("LoadResourceInfo fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                        return;
                    }
                    objDataSet = optReturn.Data as DataSet;
                    break;

                default:
                    OnDebug(LogMode.Error, string.Format("Database type not support.\t{0}", dbInfo.TypeID));
                    return;
                }
                if (objDataSet == null)
                {
                    OnDebug(LogMode.Error, string.Format("ObjDataSet is null"));
                    return;
                }
                for (int i = 0; i < objDataSet.Tables[0].Rows.Count; i++)
                {
                    DataRow dr = objDataSet.Tables[0].Rows[i];

                    PBXDeviceConfigInfo pbxDevice = new PBXDeviceConfigInfo();
                    pbxDevice.ObjType = Service07Consts.RESOURCE_PBXDEVICE;
                    long objID = Convert.ToInt64(dr["C001"]);
                    pbxDevice.ObjID = objID;

                    var temp = listResourceInfos.FirstOrDefault(r => r.ObjID == pbxDevice.ObjID);
                    if (temp != null)
                    {
                        listResourceInfos.Remove(temp);
                    }
                    listResourceInfos.Add(pbxDevice);
                    pbxDeviceCount++;
                }

                #endregion


                #region 获取PBXDevice的配置信息

                for (int i = 0; i < listResourceInfos.Count; i++)
                {
                    var resource = listResourceInfos[i];
                    if (resource.ObjType != Service07Consts.RESOURCE_PBXDEVICE)
                    {
                        continue;
                    }
                    var pbxDevice = resource as PBXDeviceConfigInfo;
                    if (pbxDevice == null)
                    {
                        continue;
                    }
                    switch (dbType)
                    {
                    case 2:
                        strSql =
                            string.Format(
                                "SELECT * FROM T_11_101_{0} WHERE C001 ={1} and (C002 = 1 OR C002 = 2 OR C002 = 93) ORDER BY C001, C002",
                                rentToken,
                                pbxDevice.ObjID);
                        optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                        if (!optReturn.Result)
                        {
                            OnDebug(LogMode.Error,
                                    string.Format("LoadResourceInfo fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                            return;
                        }
                        objDataSet = optReturn.Data as DataSet;
                        break;

                    case 3:
                        strSql =
                            string.Format(
                                "SELECT * FROM T_11_101_{0} WHERE C001 ={1} and (C002 = 1 OR C002 = 2 OR C002 = 93) ORDER BY C001, C002",
                                rentToken,
                                pbxDevice.ObjID);
                        optReturn = OracleOperation.GetDataSet(strConn, strSql);
                        if (!optReturn.Result)
                        {
                            OnDebug(LogMode.Error,
                                    string.Format("LoadResourceInfo fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                            return;
                        }
                        objDataSet = optReturn.Data as DataSet;
                        break;

                    default:
                        OnDebug(LogMode.Error, string.Format("Database type not support.\t{0}", dbInfo.TypeID));
                        return;
                    }
                    if (objDataSet == null)
                    {
                        OnDebug(LogMode.Error, string.Format("ObjDataSet is null"));
                        return;
                    }
                    for (int j = 0; j < objDataSet.Tables[0].Rows.Count; j++)
                    {
                        DataRow dr = objDataSet.Tables[0].Rows[j];

                        int row = Convert.ToInt32(dr["C002"]);
                        if (row == 1)
                        {
                            int key = Convert.ToInt32(dr["C011"]);
                            pbxDevice.Key = key;
                            int id = Convert.ToInt32(dr["C012"]);
                            pbxDevice.ID = id;
                        }
                        if (row == 2)
                        {
                            strValue = dr["C012"].ToString();
                            if (int.TryParse(strValue, out intValue))
                            {
                                pbxDevice.CTIType = intValue;
                            }
                            else
                            {
                                pbxDevice.CTIType = 0;
                            }
                            strValue = dr["C013"].ToString();
                            if (int.TryParse(strValue, out intValue))
                            {
                                pbxDevice.DeviceType = intValue;
                            }
                            else
                            {
                                pbxDevice.DeviceType = 0;
                            }
                            strValue = dr["C014"].ToString();
                            if (int.TryParse(strValue, out intValue))
                            {
                                pbxDevice.MonitorType = intValue;
                            }
                            else
                            {
                                pbxDevice.MonitorType = 0;
                            }
                            pbxDevice.DeviceName = dr["C015"].ToString();
                        }
                        if (row == 93)
                        {
                            pbxDevice.XmlKey = dr["C011"].ToString();
                        }
                    }
                }

                #endregion


                #region 获取真实分机资源

                switch (dbType)
                {
                case 2:
                    strSql =
                        string.Format(
                            "SELECT * FROM T_11_101_{0} WHERE C001 > {1} AND C001 < {2} AND C002 = 1 ORDER BY C001, C002",
                            rentToken,
                            Service07Consts.RESOURCE_REALEXT * 10000000000000000,
                            (Service07Consts.RESOURCE_REALEXT + 1) * 10000000000000000);
                    optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                    if (!optReturn.Result)
                    {
                        OnDebug(LogMode.Error,
                                string.Format("LoadResourceInfo fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                        return;
                    }
                    objDataSet = optReturn.Data as DataSet;
                    break;

                case 3:
                    strSql =
                        string.Format(
                            "SELECT * FROM T_11_101_{0} WHERE C001 > {1} AND C001 < {2} AND C002 = 1 ORDER BY C001, C002",
                            rentToken,
                            Service07Consts.RESOURCE_REALEXT * 10000000000000000,
                            (Service07Consts.RESOURCE_REALEXT + 1) * 10000000000000000);
                    optReturn = OracleOperation.GetDataSet(strConn, strSql);
                    if (!optReturn.Result)
                    {
                        OnDebug(LogMode.Error,
                                string.Format("LoadResourceInfo fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                        return;
                    }
                    objDataSet = optReturn.Data as DataSet;
                    break;

                default:
                    OnDebug(LogMode.Error, string.Format("Database type not support.\t{0}", dbInfo.TypeID));
                    return;
                }
                if (objDataSet == null)
                {
                    OnDebug(LogMode.Error, string.Format("ObjDataSet is null"));
                    return;
                }
                for (int i = 0; i < objDataSet.Tables[0].Rows.Count; i++)
                {
                    DataRow dr = objDataSet.Tables[0].Rows[i];

                    RealExtInfo realExt = new RealExtInfo();
                    realExt.ObjType = Service07Consts.RESOURCE_REALEXT;
                    long objID = Convert.ToInt64(dr["C001"]);
                    realExt.ObjID = objID;

                    var temp = listExtInfos.FirstOrDefault(r => r.ObjID == realExt.ObjID);
                    if (temp != null)
                    {
                        listExtInfos.Remove(temp);
                    }
                    listExtInfos.Add(realExt);
                    extCount++;
                }

                #endregion


                #region 获取真实分机配置信息

                for (int i = 0; i < listExtInfos.Count; i++)
                {
                    var resource = listExtInfos[i];
                    if (resource.ObjType != Service07Consts.RESOURCE_REALEXT)
                    {
                        continue;
                    }
                    var ext = resource;
                    switch (dbType)
                    {
                    case 2:
                        strSql =
                            string.Format(
                                "SELECT * FROM T_11_101_{0} WHERE C001 ={1} and (C002 = 1 OR C002 = 2) ORDER BY C001, C002",
                                rentToken,
                                ext.ObjID);
                        optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                        if (!optReturn.Result)
                        {
                            OnDebug(LogMode.Error,
                                    string.Format("LoadResourceInfo fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                            return;
                        }
                        objDataSet = optReturn.Data as DataSet;
                        break;

                    case 3:
                        strSql =
                            string.Format(
                                "SELECT * FROM T_11_101_{0} WHERE C001 ={1} and (C002 = 1 OR C002 = 2) ORDER BY C001, C002",
                                rentToken,
                                ext.ObjID);
                        optReturn = OracleOperation.GetDataSet(strConn, strSql);
                        if (!optReturn.Result)
                        {
                            OnDebug(LogMode.Error,
                                    string.Format("LoadResourceInfo fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                            return;
                        }
                        objDataSet = optReturn.Data as DataSet;
                        break;

                    default:
                        OnDebug(LogMode.Error, string.Format("Database type not support.\t{0}", dbInfo.TypeID));
                        return;
                    }
                    if (objDataSet == null)
                    {
                        OnDebug(LogMode.Error, string.Format("ObjDataSet is null"));
                        return;
                    }
                    for (int j = 0; j < objDataSet.Tables[0].Rows.Count; j++)
                    {
                        DataRow dr = objDataSet.Tables[0].Rows[j];

                        int row = Convert.ToInt32(dr["C002"]);
                        if (row == 1)
                        {
                            strValue = dr["C011"].ToString();
                            if (long.TryParse(strValue, out longValue))
                            {
                                ext.OrgID = longValue;
                            }
                            else
                            {
                                ext.OrgID = 0;
                            }
                            ext.Status     = dr["C012"].ToString();
                            ext.IsNew      = dr["C013"].ToString() == "1";
                            ext.IsLock     = dr["C014"].ToString() == "1";
                            ext.LockMethod = dr["C015"].ToString();
                            ext.SourceType = dr["C016"].ToString();
                            strValue       = dr["C017"].ToString();
                            strValue       = DecryptFromDB(strValue);
                            ext.Name       = strValue;
                            string[] arrValue = strValue.Split(new[] { ConstValue.SPLITER_CHAR },
                                                               StringSplitOptions.RemoveEmptyEntries);
                            if (arrValue.Length > 0)
                            {
                                ext.Extension = arrValue[0];
                            }
                            strValue     = dr["C018"].ToString();
                            strValue     = DecryptFromDB(strValue);
                            ext.ChanName = strValue;
                        }
                        if (row == 2)
                        {
                        }
                    }
                }

                #endregion


                OnDebug(LogMode.Debug,
                        string.Format(
                            "LoadResourceInfos end.\tPBXDeviceCount:{0};\tRealExtCount:{1};",
                            pbxDeviceCount,
                            extCount));

                List <RealExtInfo> listAddExtensions    = new List <RealExtInfo>();
                List <RealExtInfo> listModifyExtensions = new List <RealExtInfo>();
                List <RealExtInfo> listDeleteExtensions = new List <RealExtInfo>();


                #region  步分机信息

                for (int i = 0; i < listResourceInfos.Count; i++)
                {
                    var resource = listResourceInfos[i];
                    if (resource.ObjType == Service07Consts.RESOURCE_PBXDEVICE)
                    {
                        var pbxDevice = resource as PBXDeviceConfigInfo;
                        if (pbxDevice == null)
                        {
                            continue;
                        }
                        if (pbxDevice.DeviceType != 1)
                        {
                            continue;
                        }                                               //只需处理设备类型为1(坐席分机)设备
                        string strExt    = pbxDevice.DeviceName;
                        var    extension = listExtInfos.FirstOrDefault(e => e.Extension == strExt);
                        if (extension == null)
                        {
                            //不存在,则增加
                            optReturn = GetSerialID(Service07Consts.MODULE_BASEMODULE, Service07Consts.RESOURCE_REALEXT, true);
                            if (!optReturn.Result)
                            {
                                OnDebug(LogMode.Error,
                                        string.Format("GetSerialID fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                                continue;
                            }
                            extension         = new RealExtInfo();
                            extension.ObjID   = Convert.ToInt64(optReturn.Data);
                            extension.ObjType = Service07Consts.RESOURCE_REALEXT;

                            extension.OrgID      = ConstValue.ORG_ROOT;
                            extension.Status     = "1";
                            extension.IsNew      = true;
                            extension.IsLock     = false;
                            extension.LockMethod = "N";
                            extension.SourceType = "09";
                            extension.Name       = string.Format("{0}", strExt);
                            extension.Extension  = strExt;
                            extension.ChanName   = strExt;

                            //不能添加重复的分机
                            var temp = listAddExtensions.FirstOrDefault(e => e.Extension == extension.Extension);
                            if (temp == null)
                            {
                                listAddExtensions.Add(extension);
                            }

                            //listAddExtensions.Add(extension);
                        }
                        else
                        {
                            //更新
                            strValue           = extension.Status;
                            extension.Status   = strValue == "0" ? "1" : strValue; //如果原来是被删除的分机,重新恢复成正常的分机
                            extension.ChanName = strExt;

                            listModifyExtensions.Add(extension);
                        }
                    }
                }

                #endregion


                #region  除的分机打上删除标记

                for (int i = 0; i < listExtInfos.Count; i++)
                {
                    //即不在listAddExtensions列表中,又不在listModifyExtensions中的分机是要被删除的分机,需要打上删除标记
                    var extension = listExtInfos[i];
                    if (!listAddExtensions.Contains(extension) &&
                        !listModifyExtensions.Contains(extension))
                    {
                        extension.Status = "0";
                        listDeleteExtensions.Add(extension);
                    }
                }
                for (int i = 0; i < listDeleteExtensions.Count; i++)
                {
                    //删除的分机也添加到listModifyExtensions列表中,以便后面写入到数据中
                    var extension = listDeleteExtensions[i];
                    listModifyExtensions.Add(extension);
                }

                #endregion


                #region 新增的分机写入数据库

                if (listAddExtensions.Count > 0)
                {
                    int count = listAddExtensions.Count;
                    OnDebug(LogMode.Debug, string.Format("Begin add extension to database.\t{0}", count));

                    var gp = mListGlobalParamInfos.FirstOrDefault(p => p.ParamID == Service07Consts.GP_DEFULT_PASSWORD);
                    if (gp == null)
                    {
                        OnDebug(LogMode.Error, string.Format("DefaultPassword param is null"));
                        return;
                    }
                    string strDefaultPassword = gp.ParamValue;
                    if (string.IsNullOrEmpty(strDefaultPassword))
                    {
                        OnDebug(LogMode.Error, string.Format("DefaultPassword param invalid"));
                        return;
                    }

                    IDbConnection    objConn;
                    IDbDataAdapter   objAdapter;
                    DbCommandBuilder objCmdBuilder;
                    switch (dbType)
                    {
                    case 2:
                        strSql        = string.Format("SELECT * FROM T_11_101_{0} WHERE 1 = 2", rentToken);
                        objConn       = MssqlOperation.GetConnection(strConn);
                        objAdapter    = MssqlOperation.GetDataAdapter(objConn, strSql);
                        objCmdBuilder = MssqlOperation.GetCommandBuilder(objAdapter);
                        break;

                    case 3:
                        strSql        = string.Format("SELECT * FROM T_11_101_{0} WHERE 1 = 2", rentToken);
                        objConn       = OracleOperation.GetConnection(strConn);
                        objAdapter    = OracleOperation.GetDataAdapter(objConn, strSql);
                        objCmdBuilder = OracleOperation.GetCommandBuilder(objAdapter);
                        break;

                    default:
                        OnDebug(LogMode.Error, string.Format("Database type invalid.\t{0}", dbType));
                        return;
                    }
                    if (objConn == null || objAdapter == null || objCmdBuilder == null)
                    {
                        OnDebug(LogMode.Error, string.Format("ObjDataAdapter is null"));
                        return;
                    }
                    objCmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;
                    objCmdBuilder.SetAllValues   = false;
                    try
                    {
                        objDataSet = new DataSet();
                        objAdapter.Fill(objDataSet);

                        for (int i = 0; i < listAddExtensions.Count; i++)
                        {
                            var ext = listAddExtensions[i];

                            DataRow dr1 = objDataSet.Tables[0].NewRow();
                            DataRow dr2 = objDataSet.Tables[0].NewRow();

                            dr1["C001"] = ext.ObjID;
                            dr1["C002"] = 1;
                            dr1["C011"] = ext.OrgID;
                            dr1["C012"] = ext.Status;
                            dr1["C013"] = ext.IsNew ? "1" : "0";
                            dr1["C014"] = ext.IsLock ? "1" : "0";
                            dr1["C015"] = ext.LockMethod;
                            dr1["C016"] = ext.SourceType;
                            strValue    = ext.Name;
                            strValue    = EncryptToDB(strValue);
                            dr1["C017"] = strValue;
                            strValue    = ext.ChanName;
                            strValue    = EncryptToDB(strValue);
                            dr1["C018"] = strValue;
                            strValue    = ext.ObjID.ToString();
                            strValue    = string.Format("{0}{1}", strValue, strDefaultPassword);
                            strValue    = EncryptSHA512(strValue);
                            dr1["C020"] = strValue;

                            dr2["C001"] = ext.ObjID;
                            dr2["C002"] = 2;
                            dr2["C011"] = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
                            dr2["C012"] = 0;
                            dr2["C013"] = 0;

                            objDataSet.Tables[0].Rows.Add(dr1);
                            objDataSet.Tables[0].Rows.Add(dr2);


                            #region 增加住户管理员的管理权限

                            optReturn = null;
                            switch (dbType)
                            {
                            case 2:
                                strSql = string.Format("INSERT INTO T_11_201_{0} VALUES (0, 0, {1}, {2}, '{3}', '{4}')",
                                                       rentToken,
                                                       string.Format("102{0}00000000001", rentToken),
                                                       ext.ObjID,
                                                       DateTime.Parse("2014/1/1").ToString("yyyy-MM-dd HH:mm:ss"),
                                                       DateTime.Parse("2199/12/31 23:59:59").ToString("yyyy-MM-dd HH:mm:ss"));
                                optReturn = MssqlOperation.ExecuteSql(strConn, strSql);
                                break;

                            case 3:
                                strSql = string.Format("INSERT INTO T_11_201_{0} VALUES (0, 0, {1}, {2}, TO_DATE('{3}','YYYY-MM-DD HH24:MI:SS'), TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))",
                                                       rentToken,
                                                       string.Format("102{0}00000000001", rentToken),
                                                       ext.ObjID,
                                                       DateTime.Parse("2014/1/1").ToString("yyyy-MM-dd HH:mm:ss"),
                                                       DateTime.Parse("2199/12/31 23:59:59").ToString("yyyy-MM-dd HH:mm:ss"));
                                optReturn = OracleOperation.ExecuteSql(strConn, strSql);
                                break;

                            default:
                                OnDebug(LogMode.Error, string.Format("Database type invalid.\t{0}", dbType));
                                break;
                            }
                            if (optReturn != null &&
                                !optReturn.Result)
                            {
                                OnDebug(LogMode.Error,
                                        string.Format("Insert11201 fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                            }

                            #endregion
                        }

                        objAdapter.Update(objDataSet);
                        objDataSet.AcceptChanges();
                    }
                    catch (Exception ex)
                    {
                        OnDebug(LogMode.Error, string.Format("Add extension fail.\t{0}", ex.Message));
                    }
                    finally
                    {
                        if (objConn.State == ConnectionState.Open)
                        {
                            objConn.Close();
                        }
                        objConn.Dispose();
                    }
                }

                #endregion


                #region 修改的分机(包括打上删除标记的分机)写入数据库

                if (listModifyExtensions.Count > 0)
                {
                    int count = listModifyExtensions.Count;
                    OnDebug(LogMode.Debug, string.Format("Begin modify extension to database.\t{0}", count));

                    for (int i = 0; i < listModifyExtensions.Count; i++)
                    {
                        var ext = listModifyExtensions[i];

                        IDbConnection    objConn;
                        IDbDataAdapter   objAdapter;
                        DbCommandBuilder objCmdBuilder;
                        switch (dbType)
                        {
                        case 2:
                            strSql = string.Format("SELECT * FROM T_11_101_{0} WHERE C001 = {1} ORDER BY C001,C002", rentToken,
                                                   ext.ObjID);
                            objConn       = MssqlOperation.GetConnection(strConn);
                            objAdapter    = MssqlOperation.GetDataAdapter(objConn, strSql);
                            objCmdBuilder = MssqlOperation.GetCommandBuilder(objAdapter);
                            break;

                        case 3:
                            strSql = string.Format("SELECT * FROM T_11_101_{0} WHERE C001 = {1} ORDER BY C001,C002", rentToken,
                                                   ext.ObjID);
                            objConn       = OracleOperation.GetConnection(strConn);
                            objAdapter    = OracleOperation.GetDataAdapter(objConn, strSql);
                            objCmdBuilder = OracleOperation.GetCommandBuilder(objAdapter);
                            break;

                        default:
                            OnDebug(LogMode.Error, string.Format("Database type invalid.\t{0}", dbType));
                            return;
                        }
                        if (objConn == null || objAdapter == null || objCmdBuilder == null)
                        {
                            OnDebug(LogMode.Error, string.Format("ObjDataAdapter is null"));
                            return;
                        }
                        objCmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;
                        objCmdBuilder.SetAllValues   = false;
                        try
                        {
                            objDataSet = new DataSet();
                            objAdapter.Fill(objDataSet);

                            for (int j = 0; j < objDataSet.Tables[0].Rows.Count; j++)
                            {
                                DataRow dr = objDataSet.Tables[0].Rows[j];

                                int rowID = Convert.ToInt32(dr["C002"]);
                                if (rowID == 1)
                                {
                                    dr["C012"] = ext.Status;
                                    strValue   = ext.ChanName;
                                    strValue   = EncryptToDB(strValue);
                                    dr["C018"] = strValue;
                                }
                                if (rowID == 2)
                                {
                                }
                            }

                            objAdapter.Update(objDataSet);
                            objDataSet.AcceptChanges();
                        }
                        catch (Exception ex)
                        {
                            OnDebug(LogMode.Error, string.Format("Modify extension fail.\t{0}", ex.Message));
                        }
                        finally
                        {
                            if (objConn.State == ConnectionState.Open)
                            {
                                objConn.Close();
                            }
                            objConn.Dispose();
                        }
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {
                OnDebug(LogMode.Error, string.Format("DoSyncRealExtData fail.\t{0}", ex.Message));
            }
        }
Пример #4
0
        /// <summary>
        /// 写入临时表
        /// </summary>
        /// <param name="listParams"></param>
        /// <param name="AStrRent"></param>
        /// <returns></returns>
        public static OperationReturn InsertTempData(DataBaseConfig ADataBaseConfig, List <string> listParams, String AStrRent)
        {
            OperationReturn optReturn = new OperationReturn();

            optReturn.Result = true;
            optReturn.Code   = 0;
            try
            {
                if (listParams.Count < 2)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("Param count invalid");
                    return(optReturn);
                }
                //ListParams
                //0         tempID
                //1         count
                //2..       tempData(tempData property split by char 27, less than 5)
                string strTempID = listParams[0];
                string strCount  = listParams[1];
                int    intCount;
                if (!int.TryParse(strCount, out intCount) || intCount <= 0)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("Resource count invalid");
                    return(optReturn);
                }
                if (listParams.Count < 2 + intCount)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("Resource count invalid");
                    return(optReturn);
                }
                if (string.IsNullOrEmpty(strTempID))
                {
                    List <string> listGetSerialIDParams = new List <string>();
                    listGetSerialIDParams.Add("11");
                    listGetSerialIDParams.Add("911");
                    listGetSerialIDParams.Add(DateTime.Now.ToString("yyyyMMddHHmmss"));
                    OperationReturn getSerialIDReturn = GetSerialID(ADataBaseConfig, listGetSerialIDParams, AStrRent);
                    if (!getSerialIDReturn.Result)
                    {
                        return(getSerialIDReturn);
                    }
                    strTempID = getSerialIDReturn.Data.ToString();
                }
                string           strSql;
                IDbConnection    objConn;
                IDbDataAdapter   objAdapter;
                DbCommandBuilder objCmdBuilder;
                switch (ADataBaseConfig.IntDatabaseType)
                {
                //MSSQL
                case 2:
                    strSql        = string.Format("select * from t_00_901 where c001 = {0}", strTempID);
                    objConn       = MssqlOperation.GetConnection(ADataBaseConfig.StrDatabaseProfile);
                    objAdapter    = MssqlOperation.GetDataAdapter(objConn, strSql);
                    objCmdBuilder = MssqlOperation.GetCommandBuilder(objAdapter);
                    break;

                //ORCL
                case 3:
                    strSql        = string.Format("select * from t_00_901 where c001 = {0}", strTempID);
                    objConn       = OracleOperation.GetConnection(ADataBaseConfig.StrDatabaseProfile);
                    objAdapter    = OracleOperation.GetDataAdapter(objConn, strSql);
                    objCmdBuilder = OracleOperation.GetCommandBuilder(objAdapter);
                    break;

                default:
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("Database type not support");
                    return(optReturn);
                }
                if (objConn == null || objAdapter == null || objCmdBuilder == null)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_OBJECT_NULL;
                    optReturn.Message = string.Format("Db object is null");
                    return(optReturn);
                }
                objCmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;
                objCmdBuilder.SetAllValues   = false;
                try
                {
                    DataSet objDataSet = new DataSet();
                    objAdapter.Fill(objDataSet);

                    int number = 0;
                    for (int i = 0; i < objDataSet.Tables[0].Rows.Count; i++)
                    {
                        number = Math.Max(number, Convert.ToInt32(objDataSet.Tables[0].Rows[i]["C002"]));
                    }
                    for (int i = 2; i < listParams.Count; i++)
                    {
                        DataRow  dr          = objDataSet.Tables[0].NewRow();
                        string   strTempData = listParams[i];
                        string[] arrTempData = strTempData.Split(new[] { AscCodeToChr(27) },
                                                                 StringSplitOptions.RemoveEmptyEntries);
                        dr["C001"] = strTempID;
                        dr["C002"] = number + i - 1;
                        if (arrTempData.Length > 0)
                        {
                            dr["C011"] = arrTempData[0];
                        }
                        if (arrTempData.Length > 1)
                        {
                            dr["C012"] = arrTempData[1];
                        }
                        if (arrTempData.Length > 2)
                        {
                            dr["C013"] = arrTempData[2];
                        }
                        if (arrTempData.Length > 3)
                        {
                            dr["C014"] = arrTempData[3];
                        }
                        if (arrTempData.Length > 4)
                        {
                            dr["C015"] = arrTempData[4];
                        }
                        objDataSet.Tables[0].Rows.Add(dr);
                    }
                    objAdapter.Update(objDataSet);
                    objDataSet.AcceptChanges();
                }
                catch (Exception ex)
                {
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_DBACCESS_FAIL;
                    optReturn.Message = ex.Message;
                }
                finally
                {
                    if (objConn.State == ConnectionState.Open)
                    {
                        objConn.Close();
                    }
                    objConn.Dispose();
                }

                optReturn.Data = strTempID;
            }
            catch (Exception ex)
            {
                optReturn.Result  = false;
                optReturn.Code    = Defines.RET_FAIL;
                optReturn.Message = ex.Message;
            }
            return(optReturn);
        }