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); }
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); } }
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)); } }
/// <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); }