/// <summary> /// /// </summary> /// <param name="typeid">通道类型</param> /// <param name="chanelNo">银行编号</param> /// <param name="userId"></param> /// <param name="cycle">循环通道</param> /// <returns></returns> public static ChannelInfo GetModel(int typeid, string chanelNo, int userId, bool cycle) { int open = 0; var typeinfo = ChannelType.GetCacheModel(typeid); if (typeinfo == null) { return(null); } var channel = Channel.GetCacheModel(chanelNo); if (channel == null) { return(null); } if (typeid != channel.typeId) { return(null); } int usersuppid = -1; //通道没设置供应商的时候,自动获取通道类型的供应商 //当通道设置了供应商时才按照通道设置的供应商 if (!channel.supplier.HasValue || channel.supplier == 0) { channel.supplier = typeinfo.supplier; channel.supprate = typeinfo.supprate; } if (cycle) { #region 循环通道 if (typeinfo.runmode == 1) { string set = typeinfo.runset; var datas = new List <int>(); var weights = new List <ushort>(); foreach (string item in set.Split('|')) { string[] arr = item.Split(':'); datas.Add(Convert.ToInt32(arr[0])); weights.Add(Convert.ToUInt16(arr[1])); } var rancontroller = new RandomController(1) { datas = datas, weights = weights }; int seed = GetRandomSeed(); var rand = new Random(seed);// int[] suppid = rancontroller.ControllerRandomExtract(rand); if (suppid.Length > 0) { channel.supplier = suppid[0]; } } #endregion } #region 通道开启状态 // switch (typeinfo.isOpen) { case OpenEnum.AllClose: //全部关闭 usersuppid = GetUserSupp(userId, typeid); open = 0; break; case OpenEnum.AllOpen: //全部开启 usersuppid = GetUserSupp(userId, typeid); open = 1; break; case OpenEnum.Close: //根据设置 默认为关闭算法,如果后台对用户单独设置了就计算单独的开启状态。 如果没有看通道本身的状态 默认为关闭。如果后台都未设置为默认状态 open = GetChanelSysStatus(4, userId, chanelNo, typeid, ref usersuppid); // GetSysOpenStatus(userId, chanelNo, info.typeId, 0); break; case OpenEnum.Open: // open = GetChanelSysStatus(8, userId, chanelNo, typeid, ref usersuppid); //GetSysOpenStatus(userId, chanelNo, info.typeId, 1); break; } #endregion //自定义通道 if (usersuppid > -1) { channel.supplier = usersuppid; } /*用户通道状态 只有系统通道状态为开启时用户的设置才有效*/ if (open == 1) { open = GetUserOpenStatus(userId, chanelNo, typeid, 1); } channel.isOpen = open; return(channel); }
/// <summary> /// 获通道的相关信息 /// </summary> /// <param name="chanelNo">通道代码</param> /// <param name="userId">用户ID</param> /// <param name="cycle">是否更新当前渠道</param> /// <returns></returns> public static ChannelInfo GetModel(string chanelNo, int userId, bool cycle) { int open = 0; var info = GetCacheModel(chanelNo); if (info == null) { return(null); } var typeinfo = ChannelType.GetCacheModel(info.typeId); if (typeinfo == null) { return(null); } int usersuppid = -1; if (!info.supplier.HasValue || info.supplier == 0) { info.supplier = typeinfo.supplier; info.supprate = typeinfo.supprate; } if (cycle) { #region if (typeinfo.runmode == 1) { string set = typeinfo.runset; var datas = new List <int>(); var weights = new List <ushort>(); foreach (string item in set.Split('|')) { string[] arr = item.Split(':'); datas.Add(Convert.ToInt32(arr[0])); weights.Add(Convert.ToUInt16(arr[1])); } var rancontroller = new RandomController(1); rancontroller.datas = datas; rancontroller.weights = weights; int seed = GetRandomSeed(); Random rand = new Random(seed);// int[] suppid = rancontroller.ControllerRandomExtract(rand); info.supplier = suppid[0]; } #endregion } /*系统通道状态*/ switch (typeinfo.isOpen) { case OpenEnum.AllClose: //全部关闭 usersuppid = GetUserSupp(userId, info.typeId); open = 0; break; case OpenEnum.AllOpen: //全部开启 usersuppid = GetUserSupp(userId, info.typeId); open = 1; break; case OpenEnum.Close: //根据设置 默认为关闭算法,如果后台对用户单独设置了就计算单独的开启状态。 如果没有看通道本身的状态 默认为关闭。如果后台都未设置为默认状态 open = GetChanelSysStatus(4, userId, chanelNo, info.typeId, ref usersuppid); // GetSysOpenStatus(userId, chanelNo, info.typeId, 0); break; case OpenEnum.Open: // open = GetChanelSysStatus(8, userId, chanelNo, info.typeId, ref usersuppid); //GetSysOpenStatus(userId, chanelNo, info.typeId, 1); break; } //如果网银数据库 if (usersuppid > -1) { info.supplier = usersuppid; } /*用户通道状态 只有系统通道状态为开启时用户的设置才有效*/ if (open == 1) { open = GetUserOpenStatus(userId, chanelNo, info.typeId, 1); } info.isOpen = open; return(info); }