308 lines
11 KiB
C#
308 lines
11 KiB
C#
using ServiceHost.BaseControllers;
|
|
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using _0_Framework.Application;
|
|
using _0_Framework.Exceptions;
|
|
using AccountManagement.Application.Contracts.Account;
|
|
using AccountManagement.Application.Contracts.CameraAccount;
|
|
using AccountManagement.Domain.TaskAgg;
|
|
using CompanyManagment.App.Contracts.PersonnleCode;
|
|
using CompanyManagment.App.Contracts.RollCall;
|
|
using CompanyManagment.App.Contracts.RollCallEmployee;
|
|
using CompanyManagment.App.Contracts.RollCallService;
|
|
using CompanyManagment.App.Contracts.Employee;
|
|
using CompanyManagment.App.Contracts.EmployeeFaceEmbedding;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
|
namespace ServiceHost.Areas.Camera.Controllers;
|
|
|
|
public class CameraController : CameraBaseController
|
|
{
|
|
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;
|
|
private readonly IEmployeeFaceEmbeddingApplication _employeeFaceEmbeddingApplication;
|
|
private long _workshopId;
|
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
private readonly HttpClient _faceEmbeddingHttpClient;
|
|
|
|
public CameraController(IWebHostEnvironment webHostEnvironment,
|
|
IConfiguration configuration,
|
|
IEmployeeApplication employeeApplication,
|
|
IRollCallApplication rollCallApplication,
|
|
IAuthHelper authHelper,
|
|
IRollCallServiceApplication rollCallServiceApplication,
|
|
IRollCallEmployeeApplication rollCallEmployeeApplication,
|
|
IPersonnelCodeApplication personnelCodeApplication,
|
|
IAccountApplication accountApplication,
|
|
IPasswordHasher passwordHasher,
|
|
ICameraAccountApplication cameraAccountApplication,
|
|
IEmployeeFaceEmbeddingApplication employeeFaceEmbeddingApplication, IHttpClientFactory httpClientFactory)
|
|
{
|
|
_webHostEnvironment = webHostEnvironment;
|
|
_configuration = configuration;
|
|
_employeeApplication = employeeApplication;
|
|
_rollCallApplication = rollCallApplication;
|
|
_authHelper = authHelper;
|
|
_rollCallServiceApplication = rollCallServiceApplication;
|
|
_rollCallEmployeeApplication = rollCallEmployeeApplication;
|
|
_personnelCodeApplication = personnelCodeApplication;
|
|
_accountApplication = accountApplication;
|
|
_passwordHasher = passwordHasher;
|
|
_cameraAccountApplication = cameraAccountApplication;
|
|
_employeeFaceEmbeddingApplication = employeeFaceEmbeddingApplication;
|
|
_httpClientFactory = httpClientFactory;
|
|
_faceEmbeddingHttpClient = httpClientFactory.CreateClient();
|
|
_faceEmbeddingHttpClient.BaseAddress = new Uri("http://localhost:8000/");
|
|
_workshopId= authHelper.GetWorkshopId();
|
|
|
|
}
|
|
|
|
[HttpPost("login")]
|
|
[AllowAnonymous]
|
|
public IActionResult CameraLogin([FromBody] CameraLoginRequest request)
|
|
{
|
|
_accountApplication.CameraLogin(request);
|
|
return Ok(new
|
|
{
|
|
WorkshopId = _workshopId,
|
|
});
|
|
}
|
|
|
|
|
|
[HttpPost("embedding")]
|
|
[AllowAnonymous]
|
|
public async Task<ActionResult<List<EmployeeFaceEmbeddingDto>>> WorkshopEmbedding()
|
|
{
|
|
if (!User.Identity?.IsAuthenticated ?? false)
|
|
{
|
|
return Unauthorized();
|
|
}
|
|
_workshopId = _authHelper.GetWorkshopId();
|
|
var data = await _employeeFaceEmbeddingApplication
|
|
.GetByWorkshopIdsAsync([_workshopId]);
|
|
|
|
return data;
|
|
}
|
|
|
|
[HttpPost("flag/{employeeId:long}")]
|
|
public async Task<IActionResult> GetFlag(long employeeId)
|
|
{
|
|
var flagId = _rollCallApplication.Flag(employeeId, _workshopId);
|
|
return Ok(new
|
|
{
|
|
flagId = flagId,
|
|
status = flagId == 0 ? "enter": "exit"
|
|
});
|
|
}
|
|
|
|
[HttpPost("exit")]
|
|
public IActionResult Exit([FromBody]RollCallExitRequest request)
|
|
{
|
|
var employeeId = request.EmployeeId;
|
|
var flagId = request.FlagId;
|
|
bool rollCallEmployee = _rollCallEmployeeApplication.IsEmployeeRollCallActive(employeeId,
|
|
_workshopId);
|
|
|
|
if (!rollCallEmployee)
|
|
{
|
|
throw new BadRequestException("پرسنل مورد نظر غیر فعال است");
|
|
}
|
|
|
|
_faceEmbeddingHttpClient.PostAsync("embeddings/refine",
|
|
JsonContent.Create(new {
|
|
employeeId,
|
|
workshopId = _workshopId,
|
|
embedding =request.Embeddings ,
|
|
confidence =request.Confidence ,
|
|
metadata =new{},
|
|
|
|
}));
|
|
|
|
|
|
|
|
var repeatStatus = _rollCallApplication.CheckRepeat(employeeId, _workshopId);
|
|
switch (repeatStatus)
|
|
{
|
|
case "IncomRegistred-InvalidOut":
|
|
throw new BadRequestException("شما به تازگی ثبت ورود نموده اید ,تا 2 دقیقه نمی توانید ثبت خروج نمایید");
|
|
|
|
case "outRegistred-InvalidIncom":
|
|
throw new BadRequestException("شما به تازگی ثبت خروج نموده اید تا 2 دقیقه نمی توانید ثبت ورود نمایید");
|
|
|
|
}
|
|
|
|
var res = _rollCallApplication.Edit(flagId);
|
|
|
|
if (res.IsSuccedded)
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
isSuccess = true,
|
|
});
|
|
}
|
|
|
|
throw new BadRequestException(res.Message);
|
|
}
|
|
|
|
[HttpPost("enter")]
|
|
public IActionResult Enter([FromBody]RollCallEnterRequest request)
|
|
{
|
|
var employeeId = request.EmployeeId;
|
|
var now = DateTime.Now;
|
|
var command = new CreateRollCall()
|
|
{
|
|
WorkshopId = _workshopId,
|
|
EmployeeId = request.EmployeeId,
|
|
StartDate = now,
|
|
};
|
|
bool rollCallEmployee = _rollCallEmployeeApplication.IsEmployeeRollCallActive(employeeId,
|
|
_workshopId);
|
|
|
|
if (!rollCallEmployee)
|
|
{
|
|
throw new BadRequestException("پرسنل مورد نظر غیر فعال است");
|
|
}
|
|
|
|
_faceEmbeddingHttpClient.PostAsync("embeddings/refine",
|
|
JsonContent.Create(new {
|
|
employeeId,
|
|
workshopId = _workshopId,
|
|
embedding =request.Embeddings ,
|
|
confidence =request.Confidence ,
|
|
metadata =new{},
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
var repeatStatus = _rollCallApplication.CheckRepeat(employeeId, _workshopId);
|
|
switch (repeatStatus)
|
|
{
|
|
case "IncomRegistred-InvalidOut":
|
|
throw new BadRequestException("شما به تازگی ثبت ورود نموده اید ,تا 2 دقیقه نمی توانید ثبت خروج نمایید");
|
|
|
|
case "outRegistred-InvalidIncom":
|
|
throw new BadRequestException("شما به تازگی ثبت خروج نموده اید تا 2 دقیقه نمی توانید ثبت ورود نمایید");
|
|
|
|
}
|
|
|
|
|
|
var res = _rollCallApplication.Create(command);
|
|
if (res.IsSuccedded)
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
isSuccess = true,
|
|
});
|
|
}
|
|
else
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
isSuccess = false,
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
[HttpGet("SendPersonelCodeToGetEmployeeId")]
|
|
public IActionResult SendPersonelCodeToGetEmployeeId(long personelCode, long workshopId)
|
|
{
|
|
long employeeId = _personnelCodeApplication.GetEmployeeIdByPersonelCode(personelCode, workshopId);
|
|
|
|
if (employeeId == 0)
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
isSuccess = false,
|
|
message = "کد پرسنلی یافت نشد",
|
|
});
|
|
}
|
|
|
|
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 = "شما به تازگی ثبت ورود نموده اید ,تا 2 دقیقه نمی توانید ثبت خروج نمایید",
|
|
});
|
|
case "outRegistred-InvalidIncom":
|
|
return new JsonResult(new
|
|
{
|
|
isSuccess = false,
|
|
message = "شما به تازگی ثبت خروج نموده اید تا 2 دقیقه نمی توانید ثبت ورود نمایید",
|
|
});
|
|
}
|
|
|
|
return new JsonResult(new
|
|
{
|
|
isSuccess = true,
|
|
message = "",
|
|
personId = $"{employeeId}",
|
|
});
|
|
}
|
|
|
|
[HttpGet("EmployeeFlag")]
|
|
public IActionResult EmployeeFlag(long employeeId, long workshopId)
|
|
{
|
|
var employee = _rollCallEmployeeApplication.GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
|
|
var employeeFullName = employee?.EmployeeFullName ?? string.Empty;
|
|
var flagId = _rollCallApplication.Flag(employeeId, workshopId);
|
|
|
|
return new JsonResult(new
|
|
{
|
|
employeeName = employeeFullName,
|
|
flag = flagId
|
|
});
|
|
}
|
|
|
|
|
|
[HttpGet("Logout")]
|
|
public IActionResult Logout()
|
|
{
|
|
_accountApplication.Logout();
|
|
return new JsonResult(new { isSuccess = true });
|
|
}
|
|
}
|
|
|
|
public class RollCallExitRequest:RollCallEnterRequest
|
|
{
|
|
public long FlagId { get; set; }
|
|
}
|
|
public class RollCallEnterRequest
|
|
{
|
|
public long EmployeeId { get; set; }
|
|
public List<double> Embeddings { get; set; }
|
|
public float Confidence { get; set; }
|
|
}
|
|
|
|
public class CameraFlagRequest
|
|
{
|
|
public long EmployeeId { get; set; }
|
|
public long WorkshopId { get; set; }
|
|
} |