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

server/2024/9/23 4:29:42/
 /// <summary>/// 导入/// </summary>/// <param name="formFile"></param>/// <returns></returns>[HttpPost("Import")]public async Task<ExecResult> Import(IFormFile formFile){try{if (formFile == null) throw new Exception("请选择文件导入!");var fileExt = Path.GetExtension(formFile.FileName);if (fileExt != ".xlsx") throw new Exception("请导入后缀名为.xlsx的Excel文件!");using var stream = new MemoryStream();formFile.CopyTo(stream);var maintainItems = new List<TpmMaintainItem>();var allItems = await _dbcontext.TpmMaintainItems.ToListAsync();var equipments = await _dbcontext.Equipment.ToListAsync();int num = 1;StringBuilder sb = new StringBuilder();foreach (IDictionary<string, object> row in stream.Query(true)){var equipmentCode = row["设备编码"];var name = row["维保项名称"];var cycle = row["维保项周期(天)"];var content = row["维保项内容"];var isMustCheck = row["是否必检"];var advanceDays = row["提前天数"];if (equipmentCode == null) sb.AppendLine($"第{num}行设备编码不存在!");if (name == null) sb.AppendLine($"第{num}行维保项名称不能为空!");if (cycle == null) sb.AppendLine($"第{num}行维保项周期(天)不能为空!");if (content == null) sb.AppendLine($"第{num}行维保项内容不能为空!");if (isMustCheck == null){sb.AppendLine($"第{num}行是否必检不能为空!");}else if(!(isMustCheck.ToString() == "是" || isMustCheck.ToString() == "否")){sb.AppendLine($"第{num}行是否必检为非法字符,只能填写是或否!");}if (advanceDays == null) sb.AppendLine($"第{num}行提前天数不能为空!");var equipment = equipments.FirstOrDefault(s=>s.EquipmentCode == equipmentCode.ToString());if(equipment == null) sb.AppendLine($"第{num}行设备编码:{equipmentCode}不存在!");var maintainItem = new TpmMaintainItem(){EquipmentId = Convert.ToInt32(equipment?.EquipmentID),Name = name.ToString(),Cycle = Convert.ToInt32(cycle),Content = content.ToString(),IsMustCheck = string.Equals(isMustCheck.ToString(), "是") ? true : false,AdvanceDays = Convert.ToInt32(advanceDays),CreateTime = DateTime.Now};if (allItems.Any(s => s.Name == maintainItem.Name))sb.AppendLine($"第{num}行数据已存在!");if(maintainItems.Any(s => s.Name == maintainItem.Name))sb.AppendLine($"第{num}行数据重复!");maintainItems.Add(maintainItem);num++;}if(sb.Length > 0){throw new Exception(sb.ToString());}else{await _dbcontext.TpmMaintainItems.AddRangeAsync(maintainItems);await _dbcontext.SaveChangesAsync();}return new ExecResult(true, "");}catch (Exception ex){_logger.LogError(ex, "");return new ExecResult(false, "", ex.Message);}}

http://www.ppmy.cn/server/46266.html

相关文章

【计算Nei遗传距离】

报错 Warning message: In adegenet::df2genind(t(x), sep sep, ...) : Markers with no scored alleles have been removed 原因&#xff1a; 直接用plink转换为VCF&#xff0c;丢失了等位基因分型&#xff08;REF ALT&#xff09; &#xff08;plink编码的规则&…

题目:一个偶数总能表示为两个素数之和。

题目&#xff1a;一个偶数总能表示为两个素数之和。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated …

Oracle RAC 集群配置共享目录ACFS

Oracle RAC 集群配置共享目录ACFS 应用场景&#xff1a;创建的ACFS文件系统用于部署OGG做数据同步使用。 1、创建共享磁盘组 create diskgroup OGG external redundancy disk /dev/mapper/ASM08, /dev/mapper/ASM09; 2、创建 acfs 文件系统 ACFS文件系统 在ASM磁盘组中通过A…

利用映射算子打印菱形

文章目录 一、利用RDD完成&#xff08;一&#xff09;右半菱形&#xff08;二&#xff09;左半菱形&#xff08;三&#xff09;完整菱形&#xff08;四&#xff09;输出任意大菱形 二、利用Java完成&#xff08;一&#xff09;右半菱形&#xff08;二&#xff09;左半菱形&…

JDBC入门基础

目录 JDBC的基本概念 快速入门&#xff08;基本步骤&#xff09; 创建数据库 注册驱动&#xff08;可以省略不写&#xff09; 获取连接对象 获取执行SQL语句的对象 编写SQL语句&#xff0c;并执行&#xff0c;以及接收返回的结果 处理结果&#xff0c;遍历结果集和 释放资源&…

C语言王国——杨氏矩阵

目录 1. 引言 2. 了解杨氏矩阵 3. 思路分析 4. 代码 5. 总结 1. 引言 最近在做二维数组的训练的时候发现了一个很有意思的题&#xff1a; 一看这不是杨氏矩阵嘛&#xff0c;接下来就由姜糖我带大家了解一下这个著名的矩阵。 2. 了解杨氏矩阵 通过查阅百度得知&#xff1a; …

jenkins插件之plot

plot是一个生成图表的插件&#xff0c;这里我用于可视化phploc统计的数据 插件安装 进入 Dashboard --> 系统管理 --> 插件管理 --> Available plugins 搜索plot安装生成phploc分析数据 Dashboard --> 您的项目 --> Configuration点击 Build Steps点击 增加构…

C - Job Interview

思路&#xff1a; 先不考虑溢出&#xff0c;将nm1按照分配的工作分类 会发现&#xff0c;有且仅有一种工作的人数是溢出的&#xff0c;即超过了上限&#xff0c;记作工作1&#xff1b;且另一种工作的人数没有溢出&#xff0c;记作工作2 工作2因为没有溢出&#xff0c;不管没…