예제 #1
0
        /// <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);
        }