Esempio n. 1
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));
            }
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        /// <summary>
        /// 主机接替备机时 更新资源表
        /// </summary>
        /// <param name="dbInfo">数据库连接信息</param>
        /// <param name="strRelpaceModuleNumber">要接替的主机key</param>
        /// <param name="strResourceKey">备机key</param>
        /// <returns></returns>
        public static OperationReturn UpdateReplaceModuleNumberInDB(DatabaseInfo dbInfo, string strRelpaceModuleNumber, string strResourceKey)
        {
            OperationReturn optReturn = new OperationReturn();

            try
            {
                string strConnectString = dbInfo.GetConnectionString();
                //先找到备机对应的资源ID
                string strSql = string.Empty;
                switch (dbInfo.TypeID)
                {
                case 2:
                    strSql    = "select * from t_11_101_{0} where C001 >2210000000000000000 and C001 <2220000000000000000 and C002 =1 and C014 in( {1},{2})";
                    strSql    = string.Format(strSql, "00000", strResourceKey, strRelpaceModuleNumber);
                    optReturn = MssqlOperation.GetDataSet(strConnectString, strSql);
                    break;

                case 3:
                    strSql    = "select * from t_11_101_{0} where C001 >2210000000000000000 and C001 <2220000000000000000 and C002 =1 and C014 in( {1},{2})";
                    strSql    = string.Format(strSql, "00000", strResourceKey, strRelpaceModuleNumber);
                    optReturn = OracleOperation.GetDataSet(strConnectString, strSql);
                    break;
                }

                if (!optReturn.Result)
                {
                    return(optReturn);
                }
                DataSet ds = optReturn.Data as DataSet;
                if (ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0)
                {
                    optReturn.Result = false;
                    return(optReturn);
                }
                //定义两个变量 来保存主备机器的资源ID
                string strMainResID   = string.Empty;
                string strBackupResID = string.Empty;
                string strKey         = string.Empty;
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    strKey = row["C012"].ToString();
                    if (strKey == strResourceKey)
                    {
                        strBackupResID = row["C001"].ToString();
                        continue;
                    }
                    else if (strKey == strRelpaceModuleNumber)
                    {
                        strMainResID = row["C001"].ToString();
                    }
                }

                //判断备机资源的standbyrole是不是3
                switch (dbInfo.TypeID)
                {
                case 2:
                    strSql    = "select * from t_11_101_{0} where C001 ={1} and C002 = 2";
                    strSql    = string.Format(strSql, "00000", strBackupResID);
                    optReturn = MssqlOperation.GetDataSet(strConnectString, strSql);
                    break;

                case 3:
                    strSql    = "select * from t_11_101_{0} where C001 ={1} and C002 = 2";
                    strSql    = string.Format(strSql, "00000", strBackupResID);
                    optReturn = OracleOperation.GetDataSet(strConnectString, strSql);
                    break;
                }
                if (!optReturn.Result)
                {
                    return(optReturn);
                }
                ds = optReturn.Data as DataSet;
                if (ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0)
                {
                    optReturn.Result = false;
                    return(optReturn);
                }
                string strStandbyrole = ds.Tables[0].Rows[0]["C012"].ToString();
                if (strStandbyrole != "3")
                {
                    optReturn.Result = false;
                    return(optReturn);
                }
                //更新备机的RelpaceModuleNumber
                switch (dbInfo.TypeID)
                {
                case 2:
                    strSql    = "update t_11_101_{0} set C011 = '{1}' where C001 = {2} and C002 = 3";
                    strSql    = string.Format(strSql, "00000", strRelpaceModuleNumber, strBackupResID);
                    optReturn = MssqlOperation.ExecuteSql(strConnectString, strSql);
                    break;

                case 3:
                    strSql    = "UPDATE t_11_101_{0} SET C011 = '{1}' where C001 = {2} and C002 = 3";
                    strSql    = string.Format(strSql, "00000", strRelpaceModuleNumber, strBackupResID);
                    optReturn = OracleOperation.ExecuteSql(strConnectString, strSql);
                    break;
                }
                if (!optReturn.Result)
                {
                    return(optReturn);
                }

                //更新主机的RelpaceModuleNumber
                switch (dbInfo.TypeID)
                {
                case 2:
                    strSql    = "update t_11_101_{0} set C011 = '{1}' where C001 = {2} and C002 = 3";
                    strSql    = string.Format(strSql, "00000", strResourceKey, strMainResID);
                    optReturn = MssqlOperation.ExecuteSql(strConnectString, strSql);
                    break;

                case 3:
                    strSql    = "UPDATE t_11_101_{0} SET C011 = '{1}' where C001 = {2} and C002 = 3";
                    strSql    = string.Format(strSql, "00000", strResourceKey, strMainResID);
                    optReturn = OracleOperation.ExecuteSql(strConnectString, strSql);
                    break;
                }
                if (!optReturn.Result)
                {
                    return(optReturn);
                }

                optReturn.Result = true;
                optReturn.Code   = Defines.RET_SUCCESS;
            }
            catch (Exception ex)
            {
                optReturn.Result  = false;
                optReturn.Code    = Defines.RET_FAIL;
                optReturn.Message = ex.Message;
            }

            return(optReturn);
        }
Esempio n. 4
0
        private void Login()
        {
            try
            {
                if (DatabaseInfo == null)
                {
                    ShowException(string.Format("Fail.\t DatabaseInfo is null"));
                    return;
                }

                string strAccount  = TxtAccount.Text.Trim();
                string strPassword = TxtPassword.Password.Trim();

                if (string.IsNullOrEmpty(strAccount) ||
                    string.IsNullOrEmpty(strPassword))
                {
                    ShowException(string.Format("Account or password empty!"));
                    return;
                }

                SetBusy(true, App.GetLanguageInfo("N008", string.Format("Checking login information, please wait for a moment...")));
                bool             isFail   = true;
                string           strError = string.Empty;
                OperationReturn  optReturn;
                BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += (s, de) =>
                {
                    try
                    {
                        string strAccountEncrypt = App.EncryptStringM002(strAccount);
                        int    dbType            = DatabaseInfo.TypeID;
                        string strSql;
                        string strConn      = DatabaseInfo.GetConnectionString();
                        string strRentToken = string.Format("00000");
                        switch (dbType)
                        {
                        case 2:
                            strSql = string.Format("SELECT * FROM T_11_005_{0} WHERE C002 = '{1}'",
                                                   strRentToken,
                                                   strAccountEncrypt);
                            optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                            break;

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

                        default:
                            strError = string.Format("Database type not support.\t{0}", dbType);
                            return;
                        }
                        if (!optReturn.Result)
                        {
                            strError = string.Format("Fail.\t{0}\t{1}", optReturn.Code, optReturn.Message);
                            return;
                        }
                        DataSet objDataSet = optReturn.Data as DataSet;
                        if (objDataSet == null ||
                            objDataSet.Tables.Count <= 0)
                        {
                            strError = string.Format("DataSet is null");
                            return;
                        }
                        if (objDataSet.Tables[0].Rows.Count <= 0)
                        {
                            strError = string.Format("Account not exist.\t{0}", strAccount);
                            return;
                        }
                        DataRow dr       = objDataSet.Tables[0].Rows[0];
                        long    userID   = Convert.ToInt64(dr["C001"]);
                        string  strPass  = dr["C004"].ToString();
                        string  strTemp  = string.Format("{0}{1}", userID, strPassword);
                        byte[]  byteTemp = ServerHashEncryption.EncryptBytes(Encoding.Unicode.GetBytes(strTemp),
                                                                             EncryptionMode.SHA512V00Hex);
                        var aes = ServerAESEncryption.EncryptBytes(byteTemp, EncryptionMode.AES256V02Hex);
                        strTemp = ServerEncryptionUtils.Byte2Hex(aes);
                        if (!strTemp.Equals(strPass))
                        {
                            strError = string.Format("Password error.");
                            return;
                        }
                        IsLogined = true;
                        UserInfo userInfo = new UserInfo();
                        userInfo.UserID   = userID;
                        userInfo.Account  = strAccount;
                        userInfo.Password = strPassword;
                        UserInfo          = userInfo;
                        isFail            = false;
                    }
                    catch (Exception ex)
                    {
                        strError = string.Format("Fail.\t{0}", ex.Message);
                    }
                };
                worker.RunWorkerCompleted += (s, re) =>
                {
                    worker.Dispose();
                    SetBusy(false, string.Empty);

                    if (isFail)
                    {
                        ShowException(strError);
                        return;
                    }
                    DialogResult = true;
                    Close();
                };
                worker.RunWorkerAsync();
            }
            catch (Exception ex)
            {
                ShowException(ex.Message);
            }
        }
Esempio n. 5
0
        public static OperationReturn GetAllMachines(DatabaseInfo dbInfo)
        {
            Dictionary <int, MachineInfo> lstMachines = new Dictionary <int, MachineInfo>();
            string          strConnectString          = dbInfo.GetConnectionString();
            OperationReturn optReturn = new OperationReturn();
            string          strSql    = string.Empty;

            switch (dbInfo.TypeID)
            {
            case 2:
                strSql = "select a.C001,a.C012,b.c011,a.c002 as A002 ,b.c002 as B002,a.C017,c.C012 as D012 from t_11_101_{0} a " +
                         "left join t_11_101_{0} b on a.c001 = b.c001 " +
                         "left join t_11_101_{0} c on a.c001 = c.c001 " +
                         "where a.C001 >2210000000000000000 and a.C001 <2220000000000000000 and a.C002 =1 " +
                         "and  b.C001 >2210000000000000000 and b.C001 <2220000000000000000 and b.C002 =3 " +
                         " and c.C001 >2210000000000000000 and c.C001 <2220000000000000000 and c.C002 =2 ";
                strSql    = string.Format(strSql, "00000", "00000");
                optReturn = MssqlOperation.GetDataSet(strConnectString, strSql);
                break;

            case 3:
                strSql = "select a.C001,a.C012,b.c011,a.c002 as A002 ,b.c002 as B002,a.C017,c.C012 as D012 from t_11_101_{0} a " +
                         "left join t_11_101_{0} b on a.c001 = b.c001 " +
                         "left join t_11_101_{0} c on a.c001 = c.c001 " +
                         "where a.C001 >2210000000000000000 and a.C001 <2220000000000000000 and a.C002 =1 " +
                         "and  b.C001 >2210000000000000000 and b.C001 <2220000000000000000 and b.C002 =3 " +
                         " and c.C001 >2210000000000000000 and c.C001 <2220000000000000000 and c.C002 =2 ";
                strSql    = string.Format(strSql, "00000", "00000");
                optReturn = OracleOperation.GetDataSet(strConnectString, strSql);
                break;
            }
            if (!optReturn.Result)
            {
                optReturn.Message = "GetAllMachines error ,sql = " + strSql;
                return(optReturn);
            }
            DataSet ds = optReturn.Data as DataSet;

            if (ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0)
            {
                optReturn.Data = lstMachines;
                return(optReturn);
            }
            MachineInfo machine = null;

            foreach (DataRow row in ds.Tables[0].Rows)
            {
                try
                {
                    machine     = new MachineInfo();
                    machine.Key = int.Parse(row["C012"].ToString());
                    machine.ReplaceModuleNumber = row["C011"].ToString();
                    machine.ResID       = long.Parse(row["C001"].ToString());
                    machine.Host        = Common.DecodeEncryptValue(row["C017"].ToString());
                    machine.StandByRole = row["D012"].ToString();
                    lstMachines.Add(machine.Key, machine);
                }
                catch (Exception ex)
                {
                }
                //lstMachines.Add(int.Parse(row["C012"].ToString()), row["C011"].ToString());
            }
            optReturn.Data = lstMachines;
            return(optReturn);
        }
Esempio n. 6
0
        void BtnTest_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region 生成配置文件

                //UpdateConfig config = new UpdateConfig();
                //config.CurrentVersion = "803001P02000";
                //ModuleInfo module = new ModuleInfo();
                //module.ModuleID = 3102;
                //module.MasterID = 31;
                //module.ModuleName = "Query";
                //module.Display = "查询";
                //config.ListModuleInfos.Add(module);

                //string strPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, UpdateConfig.FILE_NAME);
                //OperationReturn optReturn = XMLHelper.SerializeFile(config, strPath);
                //if (!optReturn.Result)
                //{
                //    ShowException(string.Format("Fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                //    return;
                //}

                //AppendMessage(string.Format("End.\t{0}", strPath));

                #endregion


                #region 导出语言包

                DatabaseInfo dbInfo = new DatabaseInfo();
                dbInfo.TypeID       = 3;
                dbInfo.Host         = "192.168.4.182";
                dbInfo.Port         = 1521;
                dbInfo.DBName       = "PFOrcl";
                dbInfo.LoginName    = "PFDEV832";
                dbInfo.Password     = "******";
                dbInfo.RealPassword = dbInfo.Password;

                List <int> listLangIDs = new List <int>();
                listLangIDs.Add(1033);
                listLangIDs.Add(1028);
                listLangIDs.Add(1041);
                listLangIDs.Add(2052);

                for (int i = 0; i < listLangIDs.Count; i++)
                {
                    int             langTypeID  = listLangIDs[i];
                    string          strLangName = langTypeID.ToString();
                    string          strConn     = dbInfo.GetConnectionString();
                    string          strSql;
                    OperationReturn optReturn;
                    switch (dbInfo.TypeID)
                    {
                    case 2:
                        strSql    = string.Format("SELECT * FROM T_00_005 WHERE C001 = {0} ORDER BY C001,C002", langTypeID);
                        optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                        break;

                    case 3:
                        strSql    = string.Format("SELECT * FROM T_00_005 WHERE C001 = {0} ORDER BY C001,C002", langTypeID);
                        optReturn = OracleOperation.GetDataSet(strConn, strSql);
                        break;

                    default:
                        AppendMessage(string.Format("Fail.\t DBType invalid"));
                        continue;
                    }
                    if (!optReturn.Result)
                    {
                        AppendMessage(string.Format("Fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                        continue;
                    }
                    DataSet objDataSet = optReturn.Data as DataSet;
                    if (objDataSet == null ||
                        objDataSet.Tables.Count <= 0)
                    {
                        AppendMessage(string.Format("DataSet is null or DataTable not exist."));
                        continue;
                    }
                    LangLister lister = new LangLister();
                    lister.LangID   = langTypeID;
                    lister.LangName = strLangName;
                    lister.Path     = string.Format("{0}.XML", langTypeID);
                    int count = objDataSet.Tables[0].Rows.Count;
                    for (int j = 0; j < count; j++)
                    {
                        DataRow dr = objDataSet.Tables[0].Rows[j];

                        LanguageInfo langInfo = new LanguageInfo();
                        langInfo.LangID    = langTypeID;
                        langInfo.Name      = dr["C002"].ToString();
                        langInfo.Module    = Convert.ToInt32(dr["C009"]);
                        langInfo.SubModule = Convert.ToInt32(dr["C010"]);
                        langInfo.Page      = dr["C011"].ToString();
                        langInfo.ObjName   = dr["C012"].ToString();
                        string display = string.Empty;
                        display         += dr["C005"].ToString();
                        display         += dr["C006"].ToString();
                        display         += dr["C007"].ToString();
                        display         += dr["C008"].ToString();
                        langInfo.Display = display;

                        lister.ListLangInfos.Add(langInfo);
                    }

                    string strPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, lister.Path);
                    optReturn = XMLHelper.SerializeFile(lister, strPath);
                    if (!optReturn.Result)
                    {
                        AppendMessage(string.Format("Fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                        continue;
                    }
                    AppendMessage(string.Format("End.\t{0}\t{1}", strPath, count));
                }
                AppendMessage(string.Format("End."));

                #endregion
            }
            catch (Exception ex)
            {
                ShowException(ex.Message);
            }
        }
Esempio n. 7
0
        private void LoadBugInfoList()
        {
            try
            {
                mListBugInfos.Clear();
                if (mDatabaseInfo == null)
                {
                    return;
                }
                if (mCurrentVersion == null)
                {
                    return;
                }
                string          strVersion = mCurrentVersion.StrValue;
                string          strSql;
                OperationReturn optReturn;
                switch (mDatabaseInfo.TypeID)
                {
                case 2:
                    strSql = string.Format("SELECT * FROM T_UPDATE_LIST WHERE C001 LIKE '{0}%' ORDER BY C001",
                                           strVersion);
                    optReturn = MssqlOperation.GetDataSet(mDBConnectionString, strSql);
                    break;

                case 3:
                    strSql = string.Format("SELECT * FROM T_UPDATE_LIST WHERE C001 LIKE '{0}%' ORDER BY C001",
                                           strVersion);
                    optReturn = OracleOperation.GetDataSet(mDBConnectionString, strSql);
                    break;

                default:
                    ShowException(string.Format("DBType invalid."));
                    return;
                }
                if (!optReturn.Result)
                {
                    ShowException(string.Format("Fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                    return;
                }
                DataSet objDataSet = optReturn.Data as DataSet;
                if (objDataSet == null)
                {
                    ShowException(string.Format("Fail. DataSet is null"));
                    return;
                }
                int count = objDataSet.Tables[0].Rows.Count;
                for (int i = 0; i < count; i++)
                {
                    DataRow dr = objDataSet.Tables[0].Rows[i];

                    UpdateModule info = new UpdateModule();
                    info.SerialNo     = dr["C001"].ToString();
                    info.Type         = Convert.ToInt32(dr["C002"]);
                    info.ModuleID     = Convert.ToInt32(dr["C003"]);
                    info.ModuleName   = dr["C004"].ToString();
                    info.OptDate      = dr["C005"].ToString();
                    info.Level        = Convert.ToInt32(dr["C006"]);
                    info.Content      = dr["C007"].ToString();
                    info.LangID       = dr["C008"].ToString();
                    info.ModuleLangID = dr["C009"].ToString();
                    mListBugInfos.Add(info);
                }

                AppendMessage(string.Format("LoadBugInfoList end.\t{0}", count));
            }
            catch (Exception ex)
            {
                ShowException(ex.Message);
            }
        }
Esempio n. 8
0
        private OperationReturn GetDBData(List <string> listParams)
        {
            OperationReturn optReturn = new OperationReturn();

            optReturn.Result = true;
            optReturn.Code   = 0;
            try
            {
                //ListParams
                //参考S000A1Codes中的定义
                if (listParams == null || listParams.Count < 2)
                {
                    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 strSql    = listParams[1];
                WriteOperationLog(
                    string.Format("GetDBInfo:\tUserID:{0};Sql:{1}",
                                  strUserID,
                                  strSql));
                strSql    = DecryptFromClient(strSql);
                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);
                }
                string strConn = dbInfo.GetConnectionString();
                switch (dbInfo.TypeID)
                {
                case 2:
                    optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                    if (!optReturn.Result)
                    {
                        return(optReturn);
                    }
                    break;

                case 3:
                    optReturn = OracleOperation.GetDataSet(strConn, strSql);
                    if (!optReturn.Result)
                    {
                        return(optReturn);
                    }
                    break;

                default:
                    optReturn.Result  = false;
                    optReturn.Code    = Defines.RET_PARAM_INVALID;
                    optReturn.Message = string.Format("DBType invalid.\t{0}", dbInfo.TypeID);
                    return(optReturn);
                }
                DataSet 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);
                }
                optReturn.Data = objDataSet;
            }
            catch (Exception ex)
            {
                optReturn.Result  = false;
                optReturn.Code    = Defines.RET_FAIL;
                optReturn.Message = ex.Message;
                return(optReturn);
            }
            return(optReturn);
        }
Esempio n. 9
0
        void BtnTest_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (mSession == null)
                {
                    return;
                }
                var dbInfo = mSession.DatabaseInfo;
                if (dbInfo == null)
                {
                    return;
                }
                int             dbType = dbInfo.TypeID;
                OperationReturn optReturn;
                List <LicModel> listLicModels = new List <LicModel>();
                string          strSql;
                string          strConn = dbInfo.GetConnectionString();
                switch (dbType)
                {
                case 2:
                    //strSql = string.Format("SELECT A.C001 AS AC001, A.C002 AS AC002, A.C003 AS AC003, A.C004 AS AC004, A.C016 AS AC016, B.C005 AS BC005 FROM T_11_003_00000 A, T_00_005 B WHERE 'FO'+ A.C002 = B.C002 AND A.C016 > 0  AND B.C001 = '1033' ORDER BY A.C001,A.C002");
                    strSql    = string.Format("SELECT * FROM T_11_003_00000 WHERE C016 > 0 ORDER BY C002");
                    optReturn = MssqlOperation.GetDataSet(strConn, strSql);
                    break;

                case 3:
                    //strSql = string.Format("SELECT A.C001 AS AC001, A.C002 AS AC002, A.C003 AS AC003, A.C004 AS AC004, A.C016 AS AC016, B.C005 AS BC005 FROM T_11_003_00000 A, T_00_005 B WHERE 'FO'|| A.C002 = B.C002 AND A.C016 > 0  AND B.C001 = '1033' ORDER BY A.C001,A.C002");
                    strSql    = string.Format("SELECT * FROM T_11_003_00000 WHERE C016 > 0  ORDER BY C002");
                    optReturn = OracleOperation.GetDataSet(strConn, strSql);
                    break;

                default:
                    ShowException(string.Format("DBType invalid"));
                    return;
                }
                if (!optReturn.Result)
                {
                    ShowException(string.Format("Fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                    return;
                }
                DataSet objDataSet = optReturn.Data as DataSet;
                if (objDataSet == null)
                {
                    ShowException(string.Format("DataSet is null"));
                    return;
                }
                for (int i = 0; i < objDataSet.Tables[0].Rows.Count; i++)
                {
                    DataRow dr = objDataSet.Tables[0].Rows[i];

                    LicModel info = new LicModel();
                    //info.MasterID = Convert.ToInt32(dr["AC001"]);
                    //info.OptID = Convert.ToInt64(dr["AC002"]);
                    //info.ParentID = Convert.ToInt64(dr["AC003"]);
                    //info.SortID = Convert.ToInt32(dr["AC004"]);
                    //info.LicNo = Convert.ToInt32(dr["AC016"]);
                    //info.LicID = 1000000000 + info.OptID;
                    //info.OptName = dr["BC005"].ToString();
                    info.MasterID = Convert.ToInt32(dr["C001"]);
                    info.OptID    = Convert.ToInt64(dr["C002"]);
                    info.ParentID = Convert.ToInt64(dr["C003"]);
                    long parentID = info.ParentID;
                    if (parentID > 9999)
                    {
                        parentID      = int.Parse(parentID.ToString().Substring(0, 4));
                        info.ParentID = parentID;
                    }
                    info.SortID  = Convert.ToInt32(dr["C004"]);
                    info.LicNo   = Convert.ToInt32(dr["C016"]);
                    info.LicID   = 1000000000 + info.OptID;
                    info.OptName = dr["C017"].ToString();
                    listLicModels.Add(info);
                }
                LicDefineFile licFile = new LicDefineFile();
                licFile.LicID = 1100101;
                for (int i = 0; i < listLicModels.Count; i++)
                {
                    licFile.ListLics.Add(listLicModels[i]);
                }
                string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LicDefineFile.FILE_NAME);
                optReturn = XMLHelper.SerializeFile(licFile, path);
                if (!optReturn.Result)
                {
                    ShowException(string.Format("Fail.\t{0}\t{1}", optReturn.Code, optReturn.Message));
                    return;
                }
                MessageBox.Show("End", "Demo", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            catch (Exception ex)
            {
                ShowException(ex.Message);
            }
        }