|
@@ -3531,6 +3531,135 @@ And u.UId = {0} And u.FId = 1 ", dto.UserId);
|
|
|
}
|
|
|
return Ok(JsonView(false, "excel导入失败!"));
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// excel导入 世运会成本预算明细Excel
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="file"></param>
|
|
|
+ /// <param name="currUserId">录入人userId</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> ExcelImportGamesBudgetDataSouce(IFormFile file, [FromQuery] int currUserId = 208)
|
|
|
+ {
|
|
|
+ // 检查文件是否为空
|
|
|
+ if (file == null || file.Length == 0)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "请选择文件!"));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 文件签名验证
|
|
|
+ var perExtensions = new[] { ".xls", ".xlsx" };
|
|
|
+ Dictionary<string, List<byte[]>> fileSignature = CommonFun.FileSignature;
|
|
|
+ fileSignature = fileSignature.Where(pair => perExtensions.Contains(pair.Key)).ToDictionary(pair => pair.Key, pair => pair.Value);
|
|
|
+
|
|
|
+ // 文件扩展名验证
|
|
|
+ var ext = Path.GetExtension(file.FileName).ToLowerInvariant();
|
|
|
+ if (string.IsNullOrEmpty(ext) || !fileSignature.ContainsKey(ext))
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "不支持的文件类型!"));
|
|
|
+ }
|
|
|
+
|
|
|
+ using (var memoryStream = new MemoryStream())
|
|
|
+ {
|
|
|
+ await file.CopyToAsync(memoryStream);
|
|
|
+
|
|
|
+ // 检查文件签名
|
|
|
+ var fileData = memoryStream.ToArray();
|
|
|
+ var signatures = fileSignature[ext];
|
|
|
+ bool signatureValid = signatures.Any(signature =>
|
|
|
+ fileData.Take(signature.Length).SequenceEqual(signature));
|
|
|
+
|
|
|
+ if (!signatureValid)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "文件内容与类型不匹配!"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存文件到服务器
|
|
|
+ var uploadsFolder = @$"D:\FTP\File\OA2023\Office\Excel\CarDataSouceImportFile";
|
|
|
+ if (!Directory.Exists(uploadsFolder))
|
|
|
+ {
|
|
|
+ Directory.CreateDirectory(uploadsFolder);
|
|
|
+ }
|
|
|
+
|
|
|
+ var fileName = CommonFun.ValidFileName(file.Name);
|
|
|
+
|
|
|
+ var filePath = Path.Combine(uploadsFolder, fileName);
|
|
|
+ using (var stream = new FileStream(filePath, FileMode.Create))
|
|
|
+ {
|
|
|
+ await file.CopyToAsync(stream);
|
|
|
+ }
|
|
|
+
|
|
|
+ Workbook workbook = new Workbook(filePath);
|
|
|
+
|
|
|
+ // 获取第一个工作表
|
|
|
+ Worksheet worksheet = workbook.Worksheets[0];
|
|
|
+
|
|
|
+ // 获取表头(第一行作为列名)
|
|
|
+ int headerRowIndex = 0;
|
|
|
+ Row headerRow = worksheet.Cells.Rows[headerRowIndex];
|
|
|
+ int colCount = worksheet.Cells.MaxDataColumn + 1;
|
|
|
+
|
|
|
+ // 动态存储列名
|
|
|
+ var datas = new List<Grp_GamesBudgetMaster>();
|
|
|
+
|
|
|
+ // 遍历数据行(从第3行开始)
|
|
|
+ int rowCount = worksheet.Cells.MaxDataRow + 1;
|
|
|
+ var msgs = new StringBuilder();
|
|
|
+ for (int row = headerRowIndex + 2; row < rowCount; row++)
|
|
|
+ {
|
|
|
+ var cellVal0 = worksheet.Cells[row, 0].Value; //直属父级
|
|
|
+ var cellVal1 = worksheet.Cells[row, 1].Value; //工作项目
|
|
|
+ var cellVal2 = worksheet.Cells[row, 2].Value; //测算内容
|
|
|
+ var cellVal3 = worksheet.Cells[row, 3].Value; //数量
|
|
|
+ var cellVal4 = worksheet.Cells[row, 4].Value; //单位
|
|
|
+ var cellVal5 = worksheet.Cells[row, 5].Value; //单价(元)
|
|
|
+ var cellVal6 = worksheet.Cells[row, 6].Value; //周期-时间
|
|
|
+ var cellVal7 = worksheet.Cells[row, 7].Value; //周期-单位
|
|
|
+ var cellVal8 = worksheet.Cells[row, 8].Value; //项费用合计
|
|
|
+ var cellVal9 = worksheet.Cells[row, 9].Value; //说明
|
|
|
+ var cellVal10 = worksheet.Cells[row, 10].Value; //备注
|
|
|
+
|
|
|
+ var dtTimeNoew = DateTime.Now;
|
|
|
+
|
|
|
+ decimal.TryParse(cellVal3?.ToString(), out decimal quantity);
|
|
|
+ decimal.TryParse(cellVal5?.ToString(), out decimal unitPrice);
|
|
|
+ decimal.TryParse(cellVal8?.ToString(), out decimal itemTotal);
|
|
|
+ int.TryParse(cellVal6?.ToString(), out int cycleTime);
|
|
|
+
|
|
|
+ var rowData = new Grp_GamesBudgetMaster()
|
|
|
+ {
|
|
|
+ T0 = cellVal0?.ToString() ?? "",
|
|
|
+ ProjectWork = cellVal1?.ToString() ?? "",
|
|
|
+ CalculationContent = cellVal2?.ToString() ?? "",
|
|
|
+ Quantity = quantity,
|
|
|
+ Unit = cellVal4?.ToString() ?? "",
|
|
|
+ UnitPrice = unitPrice,
|
|
|
+ CycleTime = cycleTime,
|
|
|
+ CycleUnit = cellVal7?.ToString() ?? "",
|
|
|
+ ItemTotal = itemTotal,
|
|
|
+ Specification = cellVal9?.ToString() ?? "",
|
|
|
+ LastUpdateTime = dtTimeNoew.ToString("yyyy-MM-dd HH:mm:ss"),
|
|
|
+ LastUpdateUserId = currUserId,
|
|
|
+ CreateTime = dtTimeNoew,
|
|
|
+ CreateUserId = currUserId,
|
|
|
+ Remark = cellVal10?.ToString() ?? ""
|
|
|
+ };
|
|
|
+
|
|
|
+ datas.Add(rowData);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (datas.Any())
|
|
|
+ {
|
|
|
+ var insert = await _sqlSugar.Insertable(datas).ExecuteCommandAsync();
|
|
|
+ if (insert > 0)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(true, $"导入成功!count:{insert} warningMsg:{msgs.ToString()}"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Ok(JsonView(false, "excel导入失败!"));
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
}
|