Пример #1
0
        /// <summary>上传成果</summary>
        public void UploadProduct(IndexSubmissionContext context, SubmissionProduct product)
        {
            var file = product.File;

            try
            {
                product.AppData.UploadFileId = context.AppDataService.Upload(product.File, product.CharSet, this.UploadChunkSize);
                var appDataResult = context.AppDataService.Save(product.AppData);
                product.IndexData.DataId = appDataResult.DataId;
                if (product.AppData.GenerateThumbnail && !appDataResult.Thumbnail.IsNullOrEmpty())
                {
                    product.IndexData.Thumbnail = appDataResult.Thumbnail;
                }
                if (product.AppData.GenerateFulltext && !appDataResult.Fulltext.IsNullOrEmpty())
                {
                    product.IndexData.Fulltext = appDataResult.Fulltext;
                }
                var indexSaveRequest = new IndexSaveRequest();
                indexSaveRequest.Replace   = true;
                indexSaveRequest.Metadatas = new MetadataCollection();
                indexSaveRequest.Metadatas.Add(product.IndexData);
                context.IndexerService.Save(indexSaveRequest);
                context.View.RefreshProductStatus(product, "提交成功", string.Empty);
            }
            catch (Exception ex)
            {
                ModuleBootstrapper.Error(this, nameof(UploadProduct), ex);
                context.FailureValues.Enqueue(product);
                context.View.RefreshProductStatus(product, "提交失败", ex.GetFullMessage());
            }
            context.NextProgress();
        }
Пример #2
0
        /// <summary>批量提交</summary>
        public void BatchSubmit(frmIndexSubmissionPresenter presenter, bool parallel, bool retry)
        {
            var context = this.Context;

            LoadFromApiService(false, true);
            var title = string.Empty;

            if (retry)
            {
                context.Splash = presenter.WorkItem.Services.Get <ISplashService>();
                context.ResetProgress();
                context.Move();
                title = "重新提交成果数据...";
            }
            else
            {
                this.Context          = context = new IndexSubmissionContext();
                context.View          = presenter.View;
                context.Splash        = presenter.WorkItem.Services.Get <ISplashService>();
                context.WorkItem      = presenter.WorkItem;
                context.Values        = new ConcurrentQueue <SubmissionProduct>();
                context.FailureValues = new ConcurrentQueue <SubmissionProduct>();
                context.ResetProgress();
                context.ProgressChanged += presenter.View.HandleProgressChanged;
                context.AppDataService   = GetService <IAppDataServiceWrapper>();
                context.AppDataService.ResetServiceUrl();
                context.IndexerService = GetService <IIndexerService>();
                context.IndexerService.As <IApiServiceWrapper>().ResetServiceUrl();
                LoadProducts(context);
                title = "正在提交成果数据...";
            }
            var products = context.Values.ToArray();

            context.View.PopuldateProducts(products);
            context.StartProgress(title, products.Length);
            if (parallel)
            {
                context.Values.AsParallel <SubmissionProduct>()
                .ForAll(product => UploadProduct(context, product));
            }
            else
            {
                while (context.Values.Count > 0)
                {
                    SubmissionProduct product;
                    if (!context.Values.TryDequeue(out product))
                    {
                        continue;
                    }
                    UploadProduct(context, product);
                }
            }
            context.FinishProgress("提交成果数据完成");
        }
Пример #3
0
        /// <summary>从Excel文件加载成果集合</summary>
        public void LoadProducts(IndexSubmissionContext context)
        {
            context.StartProgress("正在加载Excel文件...", -1);
            var excelFile      = this.Config.Product.ExcelFile;
            var excelSheet     = ExcelUtil.OpenFirst(excelFile);
            var excelTable     = excelSheet.ToDataTable(1, 2);
            var orderColumn    = excelTable.Columns[SubmissionConsts.ST_ProductOrder];
            var encodingColumn = excelTable.Columns[SubmissionConsts.ST_TextEncoding];
            var ptFileColumn   = excelTable.Columns[SubmissionConsts.ST_ProductFile];
            var optionsColumn  = excelTable.Columns[SubmissionConsts.ST_Options];
            var total          = excelTable.Rows.Count;

            context.StartProgress("正在生成成果数据...", total);
            for (int i = 0; i < total; i++)
            {
                var row     = excelTable.Rows[i];
                var product = new SubmissionProduct();
                product.ID = row[orderColumn].ConvertTo <int>();
                if (encodingColumn != null)
                {
                    product.CharSet = row[encodingColumn]?.ToString();
                }
                product.File = row[ptFileColumn].ToString();
                product.Ext  = product.File.GetExtension();
                if (optionsColumn != null)
                {
                    product.Options = row[optionsColumn]?.ToString();
                }
                try
                {
                    product.IndexData = BuildIndexData(excelSheet, row);
                    BuildPageData(product.IndexData);
                    product.AppData = BuildAppData(product, product.IndexData);
                    context.Values.Enqueue(product);
                    context.NextProgress();
                }
                catch (Exception ex)
                {
                    var tag     = ex.Data["IndexTag"]?.ToString() ?? string.Empty;
                    var message = $"序号={product.ID.ToString()},成果文件=[{product.File}]生成索引数据失败[标签={tag}]," + ex.Message;
                    throw new Exception(message, ex);
                }
            }
        }