Files
Backend-Api/ServiceHost/Areas/Camera/Pages/Index.cshtml.cs

324 lines
11 KiB
C#

using System.Diagnostics;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.RollCall;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.IO;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.CameraAccount;
using AccountManagement.Domain.TaskAgg;
using CompanyManagment.App.Contracts.PersonnleCode;
using CompanyManagment.App.Contracts.RollCallEmployee;
using CompanyManagment.App.Contracts.RollCallService;
using AccountManagement.Domain.AccountAgg;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace ServiceHost.Areas.Camera.Pages;
[Authorize]
public class IndexModel : PageModel
{
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly IConfiguration _configuration;
private readonly IEmployeeApplication _employeeApplication;
private readonly IRollCallApplication _rollCallApplication;
private readonly IRollCallServiceApplication _rollCallServiceApplication;
private readonly IRollCallEmployeeApplication _rollCallEmployeeApplication;
private readonly IAuthHelper _authHelper;
private readonly IPersonnelCodeApplication _personnelCodeApplication;
private readonly IAccountApplication _accountApplication;
private readonly IPasswordHasher _passwordHasher;
private readonly ICameraAccountApplication _cameraAccountApplication;
public long WorkshopId;
public string UrlPath { get; set; }
public List<ImageData> ImageDataList;
public List<long> PersonelIds;
public IndexModel(IWebHostEnvironment webHostEnvironment, IConfiguration configuration, IEmployeeApplication employeeApplication, IRollCallApplication rollCallApplication, IAuthHelper authHelper, IRollCallServiceApplication rollCallServiceApplication, IRollCallEmployeeApplication rollCallEmployeeApplication, IPersonnelCodeApplication personnelCodeApplication, IAccountApplication accountApplication, IPasswordHasher passwordHasher, ICameraAccountApplication cameraAccountApplication)
{
_webHostEnvironment = webHostEnvironment;
_configuration = configuration;
_employeeApplication = employeeApplication;
_rollCallApplication = rollCallApplication;
_authHelper = authHelper;
_rollCallServiceApplication = rollCallServiceApplication;
_rollCallEmployeeApplication = rollCallEmployeeApplication;
_personnelCodeApplication = personnelCodeApplication;
_accountApplication = accountApplication;
_passwordHasher = passwordHasher;
_cameraAccountApplication = cameraAccountApplication;
}
public IActionResult OnGet()
{
var cameraAccount = _authHelper.CameraAccountInfo();
WorkshopId = cameraAccount.WorkshopId;
UrlPath = $"{Request.Scheme}://{Request.Host}";
var service = _rollCallServiceApplication.GetActiveServiceByWorkshopId(cameraAccount.WorkshopId);
if (service != null && service.IsActiveString == "true")
{
if (_rollCallEmployeeApplication.GetByWorkshopId(cameraAccount.WorkshopId).Count > 0)
{
//var personnelIdsList = _rollCallEmployeeApplication.GetByWorkshopId(cameraAccount.WorkshopId)
// .Where(x => x.IsActiveString == "true" && x.HasUploadedImage == "true")
// .Select(x => x.EmployeeId);
//if (service.MaxPersonValid != -1)
//{
// PersonelIds = personnelIdsList.Take(service.MaxPersonValid).ToList();
//}
//else
//{
// PersonelIds = personnelIdsList.ToList();
//}
//var imageData = new List<ImageData>();
//foreach (var personId in PersonelIds)
//{
// for (int i = 1; i <= 2; i++)
// {
// byte[] fileContent = System.IO.File.ReadAllBytes($"{_webHostEnvironment.ContentRootPath}\\Faces\\{WorkshopId}\\{personId}\\{i}.jpg");
// imageData.Add(new ImageData()
// {
// ImagePath = Convert.ToBase64String(fileContent),
// ImageNumber = i,
// Id = personId
// });
// }
//}
//ImageDataList = imageData;
}
else
{
var message = "EmployeeNotFound";
return Redirect("/Camera/ErrorMessage?message=" + message);
}
} else
{
var message = "ServiceNotFound";
return Redirect("/Camera/ErrorMessage?message=" + message);
}
return Page();
}
//یافتن کد آی دی پرسنل توسط کد پرسنلی و چک کردن فعال یا غیر فعال بودن او
public IActionResult OnGetSendPersonelCodeToGetEmployeeId(long personelCode, long workshopId)
{
long employeeId = _personnelCodeApplication.GetEmployeeIdByPersonelCode(personelCode, workshopId);
if (employeeId == 0)
{
return new JsonResult(new
{
isSuccess = false,
message = "کد پرسنلی یافت نشد",
});
}
else
{
bool rollcallEmployee = _rollCallEmployeeApplication.IsEmployeeRollCallActive(employeeId, workshopId);
if (!rollcallEmployee)
{
return new JsonResult(new
{
isSuccess = false,
message = "پرسنل مورد نظر غیر فعال است",
});
}
var repeatStatus = _rollCallApplication.CheckRepeat(employeeId, workshopId);
switch (repeatStatus)
{
case "IncomRegistred-InvalidOut":
return new JsonResult(new
{
isSuccess = false,
message = "شما به تازگی ثبت ورود نموده اید ,تا 5 دقیقه نمی توانید ثبت خروج نمایید",
});
case "outRegistred-InvalidIncom":
return new JsonResult(new
{
isSuccess = false,
message = "شما به تازگی ثبت خروج نموده اید تا 5 دقیقه نمی توانید ثبت ورود نمایید",
});
}
return new JsonResult(new
{
isSuccess = true,
message = "",
personId = $"{employeeId}",
});
}
}
/// <summary>
/// یافتن رول کالی که ثبت خروج ندارد و ارسال آن به فرانت
/// در صورت صفر بودن فلاگ پرسنل ثبت خروج کرده است
/// </summary>
/// <param name="employeeId"></param>
/// <param name="workshopId"></param>
/// <returns></returns>
public IActionResult OnGetEmployeeFlag(long employeeId, long workshopId)
{
var employeeFullName = _rollCallEmployeeApplication.GetByEmployeeIdAndWorkshopId(employeeId, workshopId).EmployeeFullName;
var flagId = _rollCallApplication.Flag(employeeId, workshopId);
return new JsonResult(new
{
employeeName = employeeFullName,
flag = flagId
});
}
//ثبت خروج
public IActionResult OnGetOut(long flagId)
{
var res = _rollCallApplication.Edit(flagId);
if (res.IsSuccedded)
{
return new JsonResult(new
{
isSuccess = true,
});
}
else
{
return new JsonResult(new
{
isSuccess = false,
});
}
}
//ثبت ورود
public IActionResult OnGetInCom(long employeeId, long workshopId)
{
var now = DateTime.Now;
var command = new CreateRollCall()
{
WorkshopId = workshopId,
EmployeeId = employeeId,
StartDate = now,
};
var res = _rollCallApplication.Create(command);
if (res.IsSuccedded)
{
return new JsonResult(new
{
isSuccess = true,
});
}
else
{
return new JsonResult(new
{
isSuccess = false,
});
}
}
//دریافت عکس پرسنل برای آنالیز
public IActionResult OnGetShowPicture(int index,long workshopId,long label)
{
Console.WriteLine(index);
var filePath = $"\\Faces\\{workshopId}\\{label}\\{index}.jpg";
if (string.IsNullOrEmpty(filePath))
{
return NotFound();
}
var serverRoot = $"{_webHostEnvironment.ContentRootPath}{filePath}";
if (!System.IO.File.Exists(serverRoot))
{
return NotFound();
}
var contentType = "image/jpeg";
return PhysicalFile(serverRoot, contentType);
}
//لیست پرسنل در قسمت جستجوی بالا
public IActionResult OnGetPersonnelWorkshopAjax()
{
var cameraAccount = _authHelper.CameraAccountInfo();
if (cameraAccount.WorkshopId > 0)
{
var result = _rollCallEmployeeApplication.GetActivePersonnelByWorkshopId(cameraAccount.WorkshopId);
if (cameraAccount.WorkshopId == 170)
result = result.Select(x =>
{
if (x.PersonelCode == 477)
x.EmployeeLName = "نوزاد";
return x;
}).ToList();
return Partial("ViewPersonnelModal", result);
}
else
{
return new JsonResult(new
{
isSuccess = false,
message = "کارگاه ای یافت نشد!"
});
}
}
//دریافت گذرواژه جهت خروج
public IActionResult OnPostCheckPassword(string password)
{
var cameraAccount = _authHelper.CameraAccountInfo();
var cameraPassword = _cameraAccountApplication.GetDetails(cameraAccount.Id).Password;
(bool Verified, bool NeedUpgrade) result = _passwordHasher.Check(cameraPassword, password);
if (result.Verified)
{
_accountApplication.Logout();
return new JsonResult(new
{
isSuccess = true,
});
}
return new JsonResult(new
{
isSuccess = false,
errorMessage = "گذرواژه اشتباه است",
});
}
public IActionResult OnGetLogout()
{
_accountApplication.Logout();
return RedirectToPage("/Index");
}
}
public class ImageData
{
public string ImagePath { get; set; }
public int ImageNumber { get; set; }
public long Id { get; set; }
}