Files
Backend-Api/ServiceHost/Areas/AdminNew/Pages/Company/ExcelUpload/Index.cshtml.cs
2026-01-29 11:29:03 +03:30

157 lines
5.7 KiB
C#

using Company.Domain.File1;
using Company.Domain.RollCallAgg;
using Company.Domain.RollCallAgg.DomainService;
using CompanyManagment.EFCore;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using OfficeOpenXml;
namespace ServiceHost.Areas.AdminNew.Pages.Company.ExcelUpload;
public class ExcelRowData
{
public string ColumnB { get; set; }
public string ColumnC { get; set; }
}
public class IndexModel : PageModel
{
private readonly CompanyContext _dbContext;
private readonly IRollCallDomainService _rollCallDomainService;
[BindProperty]
public IFormFile ExcelFile { get; set; }
public string Message { get; set; }
public List<File1> FoundInExcel { get; set; } = new List<File1>();
public List<File1> NotFoundInExcel { get; set; } = new List<File1>();
public List<ExcelRowData> ExcelData { get; set; } = new List<ExcelRowData>();
public bool HasProcessed { get; set; }
public IndexModel(CompanyContext dbContext, IRollCallDomainService rollCallDomainService)
{
_dbContext = dbContext;
_rollCallDomainService = rollCallDomainService;
}
public void OnGet()
{
}
public async Task<IActionResult> OnPostUploadExcel()
{
if (ExcelFile == null || ExcelFile.Length == 0)
{
Message = "لطفا یک فایل اکسل انتخاب کنید.";
return Page();
}
//await NewMethod();
// var rollcall = _dbContext.RollCalls.Where(x => x.id > 361628 && x.id < 362119).ToList();
//
// var diffTime = TimeSpan.FromHours(8) + TimeSpan.FromMinutes(30);
// var NoneRollCalls = rollcall
// .Where(x => x.RollCallModifyType == RollCallModifyType.None && x.EndDate == null).ToList();
// foreach (var noneRollCall in NoneRollCalls)
// {
// noneRollCall.SetStartDate(noneRollCall.StartDate!.Value.Add(diffTime));
// }
// var rollcallIds = NoneRollCalls.Select(x => x.id).ToList();
// var editedRollCall = rollcall.Where(x=>!rollcallIds.Contains(x.id) && x.RollCallModifyType != RollCallModifyType.EditByEmployer).ToList();
//
// foreach (var rollCall in editedRollCall)
// {
// rollCall.Edit(rollCall.StartDate.Value.Add(diffTime),
// rollCall.EndDate.Value.Add(diffTime),_rollCallDomainService);
// }
//
// await _dbContext.SaveChangesAsync();
return Page();
}
private async System.Threading.Tasks.Task NewMethod()
{
try
{
ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization");
using (var stream = new MemoryStream())
{
await ExcelFile.CopyToAsync(stream);
stream.Position = 0;
using (var package = new ExcelPackage(stream))
{
var worksheet = package.Workbook.Worksheets[0];
int rowCount = worksheet.Dimension?.Rows ?? 0;
// خواندن مقادیر از ستون B و C از ردیف 2 به بعد
for (int row = 2; row <= rowCount; row++)
{
var columnB = worksheet.Cells[row, 2].Value?.ToString()?.Trim();
var columnC = worksheet.Cells[row, 3].Value?.ToString()?.Trim();
if (!string.IsNullOrWhiteSpace(columnB) || !string.IsNullOrWhiteSpace(columnC))
{
ExcelData.Add(new ExcelRowData
{
ColumnB = columnB ?? "",
ColumnC = columnC ?? ""
});
}
}
}
}
// ساخت HashSet برای سرچ سریع - هر جفت (B, C) رو با هم نگه داری
var excelPairs = new HashSet<(string B, string C)>(
ExcelData.Select(x => (
B: (x.ColumnB ?? "").Trim(),
C: (x.ColumnC ?? "").Trim()
)));
// دریافت تمام داده‌های موجود در دیتابیس
var allFiles = _dbContext.Files.ToList();
// دسته‌بندی: فایل‌هایی که در اکسل هستند و نیستند
foreach (var file in allFiles)
{
var fileB = file.ArchiveNo.ToString();
var fileC = (file.FileClass ?? "").Trim();
// بررسی آیا جفت (B, C) این فایل در اکسل وجود دارد
bool foundInExcel = excelPairs.Contains((fileB, fileC));
if (foundInExcel)
{
FoundInExcel.Add(file);
}
else
{
NotFoundInExcel.Add(file);
}
}
foreach (var file1 in FoundInExcel)
{
file1.ChangeStatus(2);
}
foreach (var file1 in NotFoundInExcel)
{
file1.ChangeStatus(1);
}
await _dbContext.SaveChangesAsync();
HasProcessed = true;
Message = $"پردازش با موفقیت انجام شد. تعداد ردیف‌های اکسل: {ExcelData.Count} | فایل‌های موجود در اکسل: {FoundInExcel.Count} | فایل‌های غیرموجود در اکسل: {NotFoundInExcel.Count}";
}
catch (Exception ex)
{
Message = $"خطا در پردازش فایل: {ex.Message}";
}
}
}