/// <summary>
 /// 自定义校验
 /// </summary>
 /// <param name="aggregateExcelMessage"></param>
 protected virtual void CheckDto(TaskManagerInfoArg taskManagerInfoArg)
 {
     foreach (var dto in Dtos)
     {
         ExcelTask.CheckBusiness(dto, taskManagerInfoArg);
     }
 }
        /// <summary>
        /// 初始化表格,并对数据进行校验
        /// </summary>
        /// <param name="aggregateExcelMessage"></param>
        public virtual void InitAndCheck(TaskManagerInfoArg taskManagerInfoArg)
        {
            try
            {
                AggregateExcelMessage aggregateExcelMessage = taskManagerInfoArg.AggregateExcelMessage;

                BeforeInit(taskManagerInfoArg);
                if (hasErrorOrException(aggregateExcelMessage))
                {
                    return;
                }

                initCheck(taskManagerInfoArg);
                if (hasErrorOrException(aggregateExcelMessage))
                {
                    return;
                }

                initMgExcel(taskManagerInfoArg);
                if (hasErrorOrException(aggregateExcelMessage))
                {
                    return;
                }

                AfterInit(taskManagerInfoArg);
                if (hasErrorOrException(aggregateExcelMessage))
                {
                    return;
                }

                CheckMgRow(taskManagerInfoArg);
                if (hasErrorOrException(aggregateExcelMessage))
                {
                    return;
                }

                Dtos = ConvertToDto(taskManagerInfoArg);
                if (hasErrorOrException(aggregateExcelMessage))
                {
                    return;
                }

                CheckDto(taskManagerInfoArg);
            }
            catch (AggregateErrorException aggregateErrorException)
            {
                //Excel表格校验失败
                taskManagerInfoArg.AggregateExcelMessage.AddRange(aggregateErrorException.ErrorMessages, ExcelMessageType.Exception, FileExcelTaskTypeInfo);
            }
            catch (MgException mgException)
            {
                log.Error(mgException.Message);
                taskManagerInfoArg.AggregateExcelMessage.Add(new ExcelMessage(mgException.Message, "", ExcelMessageType.Exception, FileExcelTaskTypeInfo));
            }
            catch (Exception exception)
            {
                log.Error(exception.Message + "\n" + exception.StackTrace);
                taskManagerInfoArg.AggregateExcelMessage.Add(exception.Message, exception.StackTrace, ExcelMessageType.Exception, FileExcelTaskTypeInfo);
            }
        }
        /// <summary>
        /// 导入数据
        /// </summary>
        /// <param name="taskManagerInfoArg"></param>
        public virtual void Do(TaskManagerInfoArg taskManagerInfoArg)
        {
            var processInfo = (FileExcelTaskTypeInfo as IProcessInfo);

            processInfo.SetProcessTotalRow(Dtos.Count);
            ThreadPool.SetMaxThreads(maxThreaderCount, maxThreaderCount);
            foreach (var dto in Dtos)
            {
                try
                {
                    ExcelTask.Do(dto, taskManagerInfoArg);
                }
                catch (MgExcelException mgExcelException)
                {
                    taskManagerInfoArg.AggregateExcelMessage.Add(dto.Row.RowIndex, mgExcelException.ColumnIndex, mgExcelException.Message, "", ExcelMessageType.Exception, FileExcelTaskTypeInfo);
                }
                catch (MgException mgException)
                {
                    taskManagerInfoArg.AggregateExcelMessage.Add(dto.Row.RowIndex, 0, mgException.Message, "", ExcelMessageType.Exception, FileExcelTaskTypeInfo);
                }
                catch (Exception exception)
                {
                    log.Error(exception.Message + "\n" + exception.StackTrace);
                    taskManagerInfoArg.AggregateExcelMessage.Add(dto.Row?.RowIndex, 0, exception.Message, exception.StackTrace, ExcelMessageType.Exception, FileExcelTaskTypeInfo);
                }
                finally
                {
                    processInfo.SetProcessRow();
                }
            }
        }
Exemple #4
0
        private void import(FileExcelTaskTypeInfo fileExcelTaskType, AggregateExcelMessage aggregateExcelMessage)
        {
            //var excelTaskManager = lifetimeScope.ResolveNamed<IExcelTaskManager>(fileExcelTaskType.TaskManagerName);
            var excelTaskManager = fileExcelTaskType.TaskManager;
            TaskManagerInfoArg taskManagerInfoArg = new TaskManagerInfoArg(excelTaskManager.MgExcel, fileExcelTaskType, aggregateExcelMessage);

            excelTaskManager.Do(taskManagerInfoArg);
        }
        private void initCheck(TaskManagerInfoArg taskManagerInfoArg)
        {
            this.FileExcelTaskTypeInfo = taskManagerInfoArg.FileExcelTaskTypeInfo;

            if (string.IsNullOrEmpty(FileExcelTaskTypeInfo.FilePath))
            {
                throw new MgException("没有设置文件名称");
            }

            if (!File.Exists(FileExcelTaskTypeInfo.FilePath))
            {
                throw new MgException($"文件不存在或已删除,{FileExcelTaskTypeInfo.FilePath}");
            }
        }
        /// <summary>
        /// 把Excel数据数据转换为Dto,默认转换规则为一行数据转换为一个Dto,如需多行数据转换为一个Dto请自行重载
        /// </summary>
        /// <returns></returns>
        protected virtual List <TDto> ConvertToDto(TaskManagerInfoArg taskManagerInfoArg)
        {
            List <TDto> result        = new List <TDto>();
            var         startRowIndex = MgExcel.MgSheet.StartRowIndex;
            var         maxRowIndex   = MgExcel.MgSheet.MaxRowIndex;

            for (var rowIndex = startRowIndex; rowIndex <= maxRowIndex; rowIndex++)
            {
                var row = MgExcel.MgSheet.GetRow(rowIndex);
                result.Add(row.ToObject <TDto>());
            }

            return(result);
        }
Exemple #7
0
        public AggregateExcelMessage InitAndCheck(List <FileExcelTaskTypeInfo> fileExcelTaskTypes)
        {
            AggregateExcelMessage result = new AggregateExcelMessage();

            foreach (var fileExcelTaskType in fileExcelTaskTypes)
            {
                AggregateExcelMessage aggregateExcelMessage = new AggregateExcelMessage();
                TaskManagerInfoArg    taskManagerInfoArg    = new TaskManagerInfoArg(null, fileExcelTaskType, aggregateExcelMessage);
                var socpe            = lifetimeScope.BeginLifetimeScope();
                var excelTaskManager = socpe.ResolveNamed <IExcelTaskManager>(taskManagerInfoArg.FileExcelTaskTypeInfo.TaskManagerName);

                fileExcelTaskType.SetTaskManagerInstance(excelTaskManager);
                excelTaskManager.InitAndCheck(taskManagerInfoArg);
                result.Add(aggregateExcelMessage);
            }
            //把错误日志写入到日志
            writeExceptionLog(result);
            return(result);
        }
        protected void CheckMgRow(TaskManagerInfoArg taskManagerInfoArg)
        {
            if (!this.MgExcel.MgSheet.IsHasRow())
            {
                taskManagerInfoArg.AggregateExcelMessage.Add(new ExcelMessage("表格没有可以导入的数据", "", ExcelMessageType.Error, taskManagerInfoArg.FileExcelTaskTypeInfo));
            }

            var processInfo = ((IProcessInfo)taskManagerInfoArg.FileExcelTaskTypeInfo);

            processInfo.SetProcessTotalRow(this.MgExcel.MgSheet.GetTotleRow());
            for (int rowIndex = this.MgExcel.MgSheet.StartRowIndex; rowIndex <= this.MgExcel.MgSheet.MaxRowIndex; rowIndex++)
            {
                try
                {
                    var row = MgExcel.MgSheet.GetRow(rowIndex);
                    ExcelTask.CheckMgRow(row, taskManagerInfoArg);
                }
                finally
                {
                    processInfo.SetProcessRow();
                }
            }
        }
Exemple #9
0
 public abstract void Do(TDto dto, TaskManagerInfoArg taskManagerInfoArg);
Exemple #10
0
 /// <summary>
 /// 重点校验业务正确性,重点在校验与业务系统的逻辑
 /// 例如:
 /// 1.客户编码在系统中不存在
 /// 2.数据在数据库中已经存在
 /// </summary>
 /// <remarks>
 /// author:catdemon
 /// date:2021-2-1
 /// </remarks>
 /// <param name="dto"></param>
 /// <param name="taskManagerInfoArg"></param>
 public abstract void CheckBusiness(TDto dto, TaskManagerInfoArg taskManagerInfoArg);
Exemple #11
0
 /// <summary>
 /// 重点检验表格原始数据正确性,重点在校验表格本身
 /// 例如:
 /// 1.表格数据两列不能同时填值
 /// 2.表格中有两行数据重复
 /// </summary>
 /// <param name="mgRow"></param>
 /// <remarks>
 /// author:catdemon
 /// date:2021-2-1
 /// </remarks>
 /// <param name="taskManagerInfoArg"></param>
 public abstract void CheckMgRow(MgRow mgRow, TaskManagerInfoArg taskManagerInfoArg);
 private void initMgExcel(TaskManagerInfoArg taskManagerInfoArg)
 {
     MgExcel = ExcelDao.GetExcel(FileExcelTaskTypeInfo.FilePath);
     (taskManagerInfoArg as ITaskManagerInfoArg).SetMgExcel(MgExcel);//调用显式实现接口给MgExcel赋值
 }
 /// <summary>
 /// 初始化之后
 /// </summary>
 protected virtual void BeforeInit(TaskManagerInfoArg taskManagerInfoArg)
 {
 }
 /// <summary>
 /// 初始化之前
 /// </summary>
 protected virtual void AfterInit(TaskManagerInfoArg taskManagerInfoArg)
 {
 }