.Net 基于MiniExcel的导入功能接口示例

打印 上一主题 下一主题

主题 1022|帖子 1022|积分 3066

  1. /// <summary>
  2. /// 导入
  3. /// </summary>
  4. /// <param name="formFile"></param>
  5. /// <returns></returns>
  6. [HttpPost("Import")]
  7. public async Task<ExecResult> Import(IFormFile formFile)
  8. {
  9.      try
  10.      {
  11.          if (formFile == null) throw new Exception("请选择文件导入!");
  12.          var fileExt = Path.GetExtension(formFile.FileName);
  13.          if (fileExt != ".xlsx") throw new Exception("请导入后缀名为.xlsx的Excel文件!");
  14.          using var stream = new MemoryStream();
  15.          formFile.CopyTo(stream);
  16.          var maintainItems = new List<TpmMaintainItem>();
  17.          var allItems = await _dbcontext.TpmMaintainItems.ToListAsync();
  18.          var equipments = await _dbcontext.Equipment.ToListAsync();
  19.          int num = 1;
  20.          StringBuilder sb = new StringBuilder();
  21.          foreach (IDictionary<string, object> row in stream.Query(true))
  22.          {
  23.              var equipmentCode = row["设备编码"];
  24.              var name = row["维保项名称"];
  25.              var cycle = row["维保项周期(天)"];
  26.              var content = row["维保项内容"];
  27.              var isMustCheck = row["是否必检"];
  28.              var advanceDays = row["提前天数"];
  29.              if (equipmentCode == null) sb.AppendLine($"第{num}行设备编码不存在!");
  30.              if (name == null) sb.AppendLine($"第{num}行维保项名称不能为空!");
  31.              if (cycle == null) sb.AppendLine($"第{num}行维保项周期(天)不能为空!");
  32.              if (content == null) sb.AppendLine($"第{num}行维保项内容不能为空!");
  33.              if (isMustCheck == null)
  34.              {
  35.                  sb.AppendLine($"第{num}行是否必检不能为空!");
  36.              }
  37.              else if(!(isMustCheck.ToString() == "是" || isMustCheck.ToString() == "否"))
  38.              {
  39.                  sb.AppendLine($"第{num}行是否必检为非法字符,只能填写是或否!");
  40.              }
  41.              if (advanceDays == null) sb.AppendLine($"第{num}行提前天数不能为空!");
  42.              var equipment = equipments.FirstOrDefault(s=>s.EquipmentCode == equipmentCode.ToString());
  43.              if(equipment == null) sb.AppendLine($"第{num}行设备编码:{equipmentCode}不存在!");
  44.              var maintainItem = new TpmMaintainItem()
  45.              {
  46.                  EquipmentId = Convert.ToInt32(equipment?.EquipmentID),
  47.                  Name = name.ToString(),
  48.                  Cycle = Convert.ToInt32(cycle),
  49.                  Content = content.ToString(),
  50.                  IsMustCheck = string.Equals(isMustCheck.ToString(), "是") ? true : false,
  51.                  AdvanceDays = Convert.ToInt32(advanceDays),
  52.                  CreateTime = DateTime.Now
  53.              };
  54.              if (allItems.Any(s => s.Name == maintainItem.Name))
  55.                  sb.AppendLine($"第{num}行数据已存在!");
  56.              if(maintainItems.Any(s => s.Name == maintainItem.Name))
  57.                  sb.AppendLine($"第{num}行数据重复!");
  58.              maintainItems.Add(maintainItem);
  59.              num++;
  60.          }
  61.          if(sb.Length > 0)
  62.          {
  63.              throw new Exception(sb.ToString());
  64.          }
  65.          else
  66.          {
  67.              await _dbcontext.TpmMaintainItems.AddRangeAsync(maintainItems);
  68.              await _dbcontext.SaveChangesAsync();
  69.          }
  70.          return new ExecResult(true, "");
  71.      }
  72.      catch (Exception ex)
  73.      {
  74.          _logger.LogError(ex, "");
  75.          return new ExecResult(false, "", ex.Message);
  76.      }
  77. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表