예제 #1
0
        public ActionResult GetDataSourcePickCount(string codeList)
        {
            codeList = codeList.TrimEnd(',').Split(',').ToList().Aggregate(string.Empty, (c, r) => c + "'" + r + "',").TrimEnd(',');
            List <PickCount> list = DataSourceApp.GetPickCount(codeList);

            return(Json(list));
        }
        public ActionResult UpdateStatus(int id, int status)
        {
            int           result        = DataSourceApp.UpdateStatus(id, status);
            ServiceResult serviceResult = new ServiceResult();

            serviceResult.ResultCode = result;
            serviceResult.Message    = result >= 0 ? "更新成功。重启抓取服务才能生效" : "更新失败!";
            return(Json(serviceResult));
        }
        /// <summary>
        /// 采集详情
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult PickDetail(string id, string dataSource)
        {
            List <DataSourcePickDetail> detailList = DataSourceApp.GetPickDetail(dataSource);
            List <DataSourcePickDetail> newList    = (from d in detailList
                                                      let p = LotteryHelper.GetTypeList(d.Code)
                                                              let p3 = LotteryHelper.GetPicker(d.Code, dataSource)
                                                                       let p2 = p == null ? new List <Type>() : p.Where(pp => pp.Name.Contains(dataSource)).ToList()
                                                                                select new DataSourcePickDetail
            {
                Code = d.Code,
                TodayCount = d.TodayCount,
                TotalCount = d.TotalCount,
                PickerName = p2.Count == 0 ? "" : p2[0].Name,
                PickerValid = p3 == null ? false : p3.IsValid
            }).Where(p => !string.IsNullOrEmpty(p.PickerName)).ToList();

            return(View(newList));
        }
        /// <summary>
        /// 执行抓取
        /// </summary>
        /// <param name="taskCount">线程数量</param>
        public List <OpenResult> DoPick(int taskCount)
        {
            //取数据源开关
            List <DataSource> dataSourceList = CacheManager.GetOrSet(CacheKey.DATASOURCE_KEY, () =>
            {
                return(DataSourceApp.GetList().Where(d => d.status == 1).ToList());
            }, 7 * 24 * 60 * 60);

            if (dataSourceList.Count == 0)
            {
                throw new Exception($"没有可用的数据源");
            }

            string dataSourceStr = dataSourceList.Aggregate(string.Empty, (c, d) => c + d.name + ",").TrimEnd(',');

            Type             type      = typeof(DataSourceEnum);
            List <FieldInfo> fieldInfo = type.GetFields().ToList();

            List <OpenResult> list   = new List <OpenResult>();
            ParallelOptions   option = new ParallelOptions {
                MaxDegreeOfParallelism = Math.Min(taskCount, fieldInfo.Count)
            };

            Parallel.ForEach(fieldInfo, option, field =>
            {
                string dataSource = field.GetValue(null).ToString();
                if (dataSourceStr.Contains(dataSource))
                {
                    IPicker picker = this.GetPicker(dataSource);
                    if (picker != null)
                    {
                        list.AddRange(picker.Run());
                    }
                }
            });

            list = DistinctEx(list);
            return(list.OrderBy(o => o.issue_number).ToList());
        }