Example #1
0
        public async Task <CommonResponse <ArchivesAddResult> > Add(ArchivesAddRequest request)
        {
            var response = new CommonResponse <ArchivesAddResult>();

            try
            {
                if (request == null)
                {
                    throw new BizException("参数不能为空");
                }
                //var exists = await _db.ArchivesInfo.AnyAsync(c => c.ArchivesNumber == request.ArchivesNumber && c.CatalogNumber == request.CatalogNumber && c.FileNumber == request.FileNumber && c.CategoryId == request.CategoryId);
                //if (exists)
                //    throw new BizException("当前提交的档号、目录号、分类号、案卷号在数据库中已存在,无法重复添加,请查询是否已添加");

                var entity = new ArchivesInfo
                {
                    ArchivesNumber      = request.ArchivesNumber,
                    Deleted             = false,
                    FileNumber          = request.FileNumber,
                    IsPermanent         = request.IsPermanent,
                    OrderNumber         = request.OrderNumber,
                    Pages               = request.Pages,
                    CategoryId          = request.CategoryId,
                    ArchivingDate       = request.ArchivingDate,
                    ArchivingDepartment = request.ArchivingDepartment,
                    CatalogNumber       = request.CatalogNumber,
                    CreateTime          = DateTime.Now,
                    ProjectName         = request.ProjectName,
                    Remark              = request.Remark,
                    ResponsibleObject   = request.ResponsibleObject,
                    SecretLevel         = request.SecretLevel,
                    Status              = ArchivesStatus.Init,
                    Summary             = request.Summary,
                    Title               = request.Title,
                    UpdateTime          = DateTime.Now,
                    WrittenDate         = request.WrittenDate
                };
                await _db.ArchivesInfo.AddAsync(entity);

                await _db.SaveChangesAsync();

                response.Data = new ArchivesAddResult
                {
                    Id = entity.Id
                };
                response.Success = true;
            }
            catch (BizException ex)
            {
                response.Message = ex.Message;
            }
            catch (Exception ex)
            {
                response.Message = "添加档案发生异常";
                ApplicationLog.Error("Add", ex);
            }
            return(response);
        }
        public async Task <CommonResponse <ConfirmUploadResult> > ConfirmUpload(List <string> ids)
        {
            int jumpcount = 0;
            var response  = new CommonResponse <ConfirmUploadResult>
            {
                Data = new ConfirmUploadResult
                {
                    ErrorList = new List <string>()
                },
            };

            try
            {
                var list = await this.GetList(ids);

                if (!list.Any())
                {
                    throw new BizException("没有获取到上传的文件");
                }

                var trans = await _db.Database.BeginTransactionAsync();

                var archivesList = new List <ArchivesInfo>();
                try
                {
                    foreach (var item in list)
                    {
                        using (var fs = new FileStream(item.StoragePath, FileMode.Open, FileAccess.Read))
                        {
                            IWorkbook workbook = WorkbookFactory.Create(fs);
                            ISheet    sheet    = workbook.GetSheet("卷盒内文件"); //workbook.GetSheetAt(0);
                            if (sheet == null)
                            {
                                response.Data.ErrorList.Add($"Excel不存在sheet:卷盒内文件");
                                continue;
                            }

                            IRow row0 = sheet.GetRow(0);
                            if (row0.GetCell(0).StringCellValue.Trim() == "档号" && row0.GetCell(1).StringCellValue.Trim() == "分类号" && row0.GetCell(2).StringCellValue.Trim() == "案卷号" && row0.GetCell(3).StringCellValue.Trim() == "卷内序号" && row0.GetCell(4).StringCellValue.Trim() == "题名" && row0.GetCell(5).StringCellValue.Trim() == "项目名称" && row0.GetCell(6).StringCellValue.Trim() == "责任者" && row0.GetCell(7).StringCellValue.Trim() == "成文日期" && row0.GetCell(8).StringCellValue.Trim() == "页数" && row0.GetCell(9).StringCellValue.Trim() == "保管期限" && row0.GetCell(10).StringCellValue.Trim() == "密级" && row0.GetCell(11).StringCellValue.Trim() == "归档部门" && row0.GetCell(12).StringCellValue.Trim() == "归档日期" && row0.GetCell(13).StringCellValue.Trim() == "备注" && row0.GetCell(14).StringCellValue.Trim() == "目录号" && row0.GetCell(15).StringCellValue.Trim() == "提要")
                            {
                            }
                            else
                            {
                                response.Data.ErrorList.Add($"Excel标题栏与预期不匹配,请确认顺序,应为:档号,分类号,案卷号,卷内序号,题名,项目名称,责任者,成文日期,页数,保管期限,密级,归档部门,归档日期,备注,目录号,提要");
                                continue;
                            }

                            for (int j = 1; j <= sheet.LastRowNum; ++j)
                            {
                                IRow row = sheet.GetRow(j);
                                if (row == null)
                                {
                                    continue;              //没有数据的行默认是null       
                                }
                                var cc = archivesList.Count(c => c.ArchivesNumber == row.GetCell(0).StringCellValue &&
                                                            c.CategoryId == row.GetCell(1).StringCellValue &&
                                                            c.FileNumber == row.GetCell(2).StringCellValue &&
                                                            c.OrderNumber == row.GetCell(3).StringCellValue);
                                if (cc > 0)
                                {
                                    response.Data.ErrorList.Add($"{item.OriginalFileName}中档号:{row.GetCell(0).StringCellValue},分类号:{row.GetCell(1).StringCellValue},案卷号:{row.GetCell(2).StringCellValue}卷内序号:{row.GetCell(3).StringCellValue} 重复;<br/>");
                                    if (response.Data.ErrorList.Count > 50)
                                    {
                                        response.Message = "发现大量重复数据";
                                        break;
                                    }
                                }

                                archivesList.Add(new ArchivesInfo
                                {
                                    ArchivesNumber      = row.GetCell(0).StringCellValue,
                                    CategoryId          = row.GetCell(1).StringCellValue,
                                    FileNumber          = row.GetCell(2).StringCellValue,
                                    OrderNumber         = row.GetCell(3).StringCellValue,
                                    Title               = row.GetCell(4).StringCellValue,
                                    ProjectName         = row.GetCell(5).StringCellValue,
                                    ResponsibleObject   = row.GetCell(6).StringCellValue,
                                    WrittenDate         = row.GetCell(7).StringCellValue,
                                    Pages               = row.GetCell(8).StringCellValue,
                                    IsPermanent         = row.GetCell(9).StringCellValue,
                                    SecretLevel         = row.GetCell(10).StringCellValue,
                                    ArchivingDepartment = row.GetCell(11).StringCellValue,
                                    ArchivingDate       = row.GetCell(12).StringCellValue,
                                    Remark              = row.GetCell(13).StringCellValue,
                                    CatalogNumber       = row.GetCell(14).StringCellValue,
                                    Summary             = row.GetCell(15).StringCellValue,
                                    CreateTime          = DateTime.Now,
                                    Status              = ArchivesStatus.Init,
                                    UpdateTime          = DateTime.Now,
                                    Deleted             = false,
                                });


                                var archivesNumber = row.GetCell(0).StringCellValue;
                                var categoryId     = row.GetCell(1).StringCellValue;
                                var fileNumber     = row.GetCell(2).StringCellValue;
                                var orderNumber    = row.GetCell(3).StringCellValue;

                                var archives = await _db.ArchivesInfo.FirstOrDefaultAsync
                                                   (c => c.ArchivesNumber == archivesNumber &&
                                                   c.CategoryId == categoryId &&
                                                   c.FileNumber == fileNumber &&
                                                   c.OrderNumber == orderNumber
                                                   );

                                if (archives == null)
                                {
                                    var entity = new ArchivesInfo
                                    {
                                        ArchivesNumber      = row.GetCell(0).StringCellValue,
                                        CategoryId          = row.GetCell(1).StringCellValue,
                                        FileNumber          = row.GetCell(2).StringCellValue,
                                        OrderNumber         = row.GetCell(3).StringCellValue,
                                        Title               = row.GetCell(4).StringCellValue,
                                        ProjectName         = row.GetCell(5).StringCellValue,
                                        ResponsibleObject   = row.GetCell(6).StringCellValue,
                                        WrittenDate         = row.GetCell(7).StringCellValue,
                                        Pages               = row.GetCell(8).StringCellValue,
                                        IsPermanent         = row.GetCell(9).StringCellValue,
                                        SecretLevel         = row.GetCell(10).StringCellValue,
                                        ArchivingDepartment = row.GetCell(11).StringCellValue,
                                        ArchivingDate       = row.GetCell(12).StringCellValue,
                                        Remark              = row.GetCell(13).StringCellValue,
                                        CatalogNumber       = row.GetCell(14).StringCellValue,
                                        Summary             = row.GetCell(15).StringCellValue,
                                        CreateTime          = DateTime.Now,
                                        Status              = ArchivesStatus.Init,
                                        UpdateTime          = DateTime.Now,
                                        Deleted             = false,
                                        ImportFileName      = item.OriginalFileName,
                                    };
                                    await _db.ArchivesInfo.AddAsync(entity);

                                    response.Data.AddTotoal++;
                                }
                                else
                                {
                                    //档案存在
                                    //如果项目题名相同则跳过,否则中止
                                    if (archives.Title != row.GetCell(4).StringCellValue || archives.ProjectName != row.GetCell(5).StringCellValue)
                                    {
                                        response.Data.ErrorList.Add($"{item.OriginalFileName}中档号:{row.GetCell(0).StringCellValue},分类号:{row.GetCell(1).StringCellValue},案卷号:{row.GetCell(2).StringCellValue}卷内序号:{row.GetCell(3).StringCellValue} 与以前数据重复,并且题名或项目名称不一致;<br/>");
                                        if (response.Data.ErrorList.Count > 50)
                                        {
                                            response.Message = "发现大量重复数据";
                                            break;
                                        }
                                    }
                                    jumpcount++;
                                }
                            }
                        }
                    }

                    if (response.Data.ErrorList.Any())
                    {
                        trans.Rollback();
                        //response.Message = string.Join("<br />", response.Data.ErrorList);
                        response.Message = $"导入发生数据异常";
                    }
                    else
                    {
                        //_db.ChangeTracker.AutoDetectChangesEnabled = false;
                        //await _db.ArchivesInfo.AddRangeAsync(archivesList);
                        //response.Data.AddTotoal = await _db.SaveChangesAsync();
                        await _db.SaveChangesAsync();

                        trans.Commit();
                        response.Success = true;
                        response.Message = $"跳过{jumpcount}条,添加{response.Data.AddTotoal}条数据";
                    }
                }
                catch (DbUpdateException ex)
                {
                    response.Message = $"导入发生数据异常";
                    trans.Rollback();
                    ApplicationLog.Error("ConfirmUpload", ex);
                    //if (ex.InnerException!= null && ex.InnerException is MySqlException)
                    //{
                    //    var exp = (MySqlException)ex.InnerException;
                    //    if (exp.Number == 1062)
                    //    {
                    //        response.Message = "导入发现重复数据";
                    //        for (int i = 0; i < archivesList.Count; i++)
                    //        {
                    //            var item = archivesList[i];
                    //            var cc = await _db.ArchivesInfo.CountAsync(c => c.ArchivesNumber == item.ArchivesNumber
                    //                && c.CatalogNumber == item.CatalogNumber
                    //                && c.FileNumber == item.FileNumber
                    //                && c.OrderNumber == item.OrderNumber);
                    //            if (cc > 0)
                    //            {
                    //                response.Data.ErrorList.Add($"档号:{item.ArchivesNumber},分类号:{item.CatalogNumber},案卷号:{item.FileNumber}卷内序号:{item.OrderNumber} 已存在;");
                    //                if (response.Data.ErrorList.Count > archivesList.Count / 3 || response.Data.ErrorList.Count > 50)
                    //                {
                    //                    response.Message = "发现大量重复数据";
                    //                    break;
                    //                }
                    //            }
                    //        }
                    //        if (response.Data.ErrorList.Count() == 0 && ex.InnerException!=null && ex.InnerException.Message !=null) {
                    //            response.Data.ErrorList.Add("可能您上传的文件内有重数数据,请参考异常信息:"+ex.InnerException.Message);
                    //        }
                    //    }
                    //}
                }
                catch (Exception ex)
                {
                    response.Message = $"导入发生系统异常,请重试";
                    trans.Rollback();
                    ApplicationLog.Error("ConfirmUpload", ex);
                }
            }
            catch (BizException ex)
            {
                response.Message = ex.Message;
            }
            catch (Exception ex)
            {
                ApplicationLog.Error("ConfirmUpload", ex);
                response.Message = "导入发生异常";
            }

            return(response);
        }