157 lines
5.7 KiB
C#
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}";
|
|
}
|
|
}
|
|
}
|
|
|