/// <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(); } } }
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); }
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(); } } }
public abstract void Do(TDto dto, TaskManagerInfoArg taskManagerInfoArg);
/// <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);
/// <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) { }