diff --git a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/CreateEmployeeFaceEmbedding.cs b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingDto.cs similarity index 67% rename from CompanyManagment.App.Contracts/EmployeeFaceEmbedding/CreateEmployeeFaceEmbedding.cs rename to CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingDto.cs index c22890d4..7261a94c 100644 --- a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/CreateEmployeeFaceEmbedding.cs +++ b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingDto.cs @@ -2,12 +2,13 @@ using System.Collections.Generic; namespace CompanyManagment.App.Contracts.EmployeeFaceEmbedding; -public class CreateEmployeeFaceEmbedding +public class EmployeeFaceEmbeddingDto { + public string Id { get; set; } public string EmployeeFullName { get; set; } public long EmployeeId { get; set; } public long WorkshopId { get; set; } public List Embeddings { get; set; } - public EmployeeFaceEmbeddingMetadataViewModel Metadata { get; set; } + public EmployeeFaceEmbeddingMetadataDto Metadata { get; set; } } diff --git a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingDtos.cs b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingDtos.cs new file mode 100644 index 00000000..3b641375 --- /dev/null +++ b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingDtos.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; + +namespace CompanyManagment.App.Contracts.EmployeeFaceEmbedding; + +public class EmployeeFaceEmbeddingMetadataDto +{ + public double AvgEyeDistanceNormalized { get; set; } + public double AvgEyeToFaceRatio { get; set; } + public double AvgFaceAspectRatio { get; set; } + public double AvgDetectionConfidence { get; set; } + public EmployeeFaceEmbeddingKeypointsDto AvgKeypointsNormalized { get; set; } + public List PerImageMetadata { get; set; } +} + +public class EmployeeFaceEmbeddingKeypointsDto +{ + public double[] LeftEye { get; set; } + public double[] RightEye { get; set; } + public double[] Nose { get; set; } + public double[] MouthLeft { get; set; } + public double[] MouthRight { get; set; } +} + +public class ImageMetadataDto +{ + public double FaceAspectRatio { get; set; } + public double EyeDistanceNormalized { get; set; } + public double EyeToFaceRatio { get; set; } + public double DetectionConfidence { get; set; } + public EmployeeFaceEmbeddingKeypointsDto KeypointsNormalized { get; set; } +} + +public class EmbeddingHistoryItemDto +{ + public List Embedding { get; set; } + public DateTime Timestamp { get; set; } + public double Confidence { get; set; } + public double RefinementPercentage { get; set; } +} + +public class MetadataHistoryItemDto +{ + public EmployeeFaceEmbeddingMetadataDto Metadata { get; set; } + public DateTime Timestamp { get; set; } + public double Confidence { get; set; } + public double RefinementPercentage { get; set; } +} + diff --git a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingViewModel.cs b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingViewModel.cs deleted file mode 100644 index 52bb2e2d..00000000 --- a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/EmployeeFaceEmbeddingViewModel.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace CompanyManagment.App.Contracts.EmployeeFaceEmbedding; - -public class EmployeeFaceEmbeddingViewModel -{ - public string Id { get; set; } - public string EmployeeFullName { get; set; } - public long EmployeeId { get; set; } - public long WorkshopId { get; set; } - public List Embeddings { get; set; } - public EmployeeFaceEmbeddingMetadataViewModel Metadata { get; set; } - public List EmbeddingHistory { get; set; } - public List MetadataHistory { get; set; } - public DateTime CreatedAt { get; set; } - public DateTime UpdatedAt { get; set; } -} - -public class EmployeeFaceEmbeddingMetadataViewModel -{ - public double AvgEyeDistanceNormalized { get; set; } - public double AvgEyeToFaceRatio { get; set; } - public double AvgFaceAspectRatio { get; set; } - public double AvgDetectionConfidence { get; set; } - public EmployeeFaceEmbeddingKeypointsViewModel AvgKeypointsNormalized { get; set; } - public List PerImageMetadata { get; set; } -} - -public class EmployeeFaceEmbeddingKeypointsViewModel -{ - public double[] LeftEye { get; set; } - public double[] RightEye { get; set; } - public double[] Nose { get; set; } - public double[] MouthLeft { get; set; } - public double[] MouthRight { get; set; } -} - -public class ImageMetadataViewModel -{ - public double FaceAspectRatio { get; set; } - public double EyeDistanceNormalized { get; set; } - public double EyeToFaceRatio { get; set; } - public double DetectionConfidence { get; set; } - public EmployeeFaceEmbeddingKeypointsViewModel KeypointsNormalized { get; set; } -} - -public class EmbeddingHistoryItemViewModel -{ - public List Embedding { get; set; } - public DateTime Timestamp { get; set; } - public double Confidence { get; set; } - public double RefinementPercentage { get; set; } -} - -public class MetadataHistoryItemViewModel -{ - public EmployeeFaceEmbeddingMetadataViewModel Metadata { get; set; } - public DateTime Timestamp { get; set; } - public double Confidence { get; set; } - public double RefinementPercentage { get; set; } -} - diff --git a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/IEmployeeFaceEmbeddingApplication.cs b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/IEmployeeFaceEmbeddingApplication.cs index 4cadce94..b2d42da6 100644 --- a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/IEmployeeFaceEmbeddingApplication.cs +++ b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/IEmployeeFaceEmbeddingApplication.cs @@ -4,65 +4,40 @@ using System.Threading.Tasks; namespace CompanyManagment.App.Contracts.EmployeeFaceEmbedding; /// -/// رابط اپلیکیشن Embedding چهره کارکنان -/// مدیریت عملیات مربوط به ذخیره و مدیریت embedding های چهره کارکنان +/// سرویس مدیریت Embedding چهره کارکنان +/// این سرویس فقط برای دریافت و ارسال داده است و هیچ command-driven نیست /// public interface IEmployeeFaceEmbeddingApplication { /// - /// ایجاد embedding جدید برای کارمند + /// دریافت embedding بر اساس شناسه /// - /// اطلاعات embedding - /// شناسه embedding ایجاد شده - Task CreateAsync(CreateEmployeeFaceEmbedding command); - - /// - /// به‌روزرسانی embedding کارمند - /// - /// اطلاعات جدید embedding - /// نتیجه عملیات - Task UpdateEmbeddingAsync(UpdateEmployeeFaceEmbedding command); - - /// - /// به‌روزرسانی metadata کارمند - /// - /// اطلاعات جدید metadata - /// نتیجه عملیات - Task UpdateMetadataAsync(UpdateEmployeeFaceEmbeddingMetadata command); - - /// - /// به‌روزرسانی اطلاعات کارمند - /// - /// اطلاعات جدید کارمند - /// نتیجه عملیات - Task UpdateEmployeeInfoAsync(UpdateEmployeeInfo command); + Task GetByIdAsync(string id); /// /// دریافت embedding بر اساس شناسه کارمند /// - /// شناسه کارمند - /// اطلاعات embedding - Task GetByEmployeeIdAsync(long employeeId); + Task GetByEmployeeIdAsync(long employeeId); /// /// دریافت لیست embeddings بر اساس شناسه کارگاه /// - /// شناسه کارگاه - /// لیست embeddings - Task> GetByWorkshopIdAsync(long workshopId); + Task> GetByWorkshopIdAsync(long workshopId); /// /// دریافت لیست embeddings بر اساس لیست شناسه کارگاه‌ها /// - /// لیست شناسه کارگاه‌ها - /// لیست embeddings - Task> GetByWorkshopIdsAsync(List workshopIds); + Task> GetByWorkshopIdsAsync(List workshopIds); /// - /// حذف embedding کارمند + /// ذخیره یا به‌روزرسانی embedding + /// اگر Id وجود داشته باشد، به‌روزرسانی می‌شود، در غیر این صورت ایجاد می‌شود + /// + Task SaveAsync(EmployeeFaceEmbeddingDto dto); + + /// + /// حذف embedding /// - /// شناسه embedding - /// نتیجه عملیات Task DeleteAsync(string id); } diff --git a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeFaceEmbedding.cs b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeFaceEmbedding.cs deleted file mode 100644 index 78a7e7fb..00000000 --- a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeFaceEmbedding.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; - -namespace CompanyManagment.App.Contracts.EmployeeFaceEmbedding; - -public class UpdateEmployeeFaceEmbedding -{ - public string Id { get; set; } - public List Embeddings { get; set; } - public double Confidence { get; set; } - public double RefinementPercentage { get; set; } -} - diff --git a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeFaceEmbeddingMetadata.cs b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeFaceEmbeddingMetadata.cs deleted file mode 100644 index 51965a8c..00000000 --- a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeFaceEmbeddingMetadata.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace CompanyManagment.App.Contracts.EmployeeFaceEmbedding; - -public class UpdateEmployeeFaceEmbeddingMetadata -{ - public string Id { get; set; } - public EmployeeFaceEmbeddingMetadataViewModel Metadata { get; set; } - public double Confidence { get; set; } - public double RefinementPercentage { get; set; } -} - diff --git a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeInfo.cs b/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeInfo.cs deleted file mode 100644 index 63ce255c..00000000 --- a/CompanyManagment.App.Contracts/EmployeeFaceEmbedding/UpdateEmployeeInfo.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace CompanyManagment.App.Contracts.EmployeeFaceEmbedding; - -public class UpdateEmployeeInfo -{ - public string Id { get; set; } - public string EmployeeFullName { get; set; } - public long WorkshopId { get; set; } -} - diff --git a/CompanyManagment.Application/EmployeeFaceEmbeddingApplication.cs b/CompanyManagment.Application/EmployeeFaceEmbeddingApplication.cs index 3d61fe1c..ad7e14a0 100644 --- a/CompanyManagment.Application/EmployeeFaceEmbeddingApplication.cs +++ b/CompanyManagment.Application/EmployeeFaceEmbeddingApplication.cs @@ -16,91 +16,61 @@ public class EmployeeFaceEmbeddingApplication : IEmployeeFaceEmbeddingApplicatio _repository = repository; } - public async Task CreateAsync(CreateEmployeeFaceEmbedding command) + public async Task GetByIdAsync(string id) { - var metadata = MapMetadataFromViewModel(command.Metadata); - - var employeeFaceEmbedding = new EmployeeFaceEmbedding( - command.EmployeeFullName, - command.EmployeeId, - command.WorkshopId, - command.Embeddings, - metadata - ); - - await _repository.CreateAsync(employeeFaceEmbedding); - - return employeeFaceEmbedding.Id; + var entity = await _repository.GetByIdAsync(id); + return entity == null ? null : MapToDto(entity); } - public async Task UpdateEmbeddingAsync(UpdateEmployeeFaceEmbedding command) + public async Task GetByEmployeeIdAsync(long employeeId) { - var employeeFaceEmbedding = await _repository.GetByIdAsync(command.Id); - - if (employeeFaceEmbedding == null) - throw new Exception($"EmployeeFaceEmbedding با شناسه {command.Id} یافت نشد"); - - employeeFaceEmbedding.UpdateEmbedding( - command.Embeddings, - command.Confidence, - command.RefinementPercentage - ); - - await _repository.UpdateAsync(employeeFaceEmbedding); + var entity = await _repository.GetByEmployeeIdAsync(employeeId); + return entity == null ? null : MapToDto(entity); } - public async Task UpdateMetadataAsync(UpdateEmployeeFaceEmbeddingMetadata command) + public async Task> GetByWorkshopIdAsync(long workshopId) { - var employeeFaceEmbedding = await _repository.GetByIdAsync(command.Id); - - if (employeeFaceEmbedding == null) - throw new Exception($"EmployeeFaceEmbedding با شناسه {command.Id} یافت نشد"); - - var metadata = MapMetadataFromViewModel(command.Metadata); - - employeeFaceEmbedding.UpdateMetadata( - metadata, - command.Confidence, - command.RefinementPercentage - ); - - await _repository.UpdateAsync(employeeFaceEmbedding); + var entities = await _repository.GetByWorkshopIdAsync(workshopId); + return entities.Select(MapToDto).ToList(); } - public async Task UpdateEmployeeInfoAsync(UpdateEmployeeInfo command) + public async Task> GetByWorkshopIdsAsync(List workshopIds) { - var employeeFaceEmbedding = await _repository.GetByIdAsync(command.Id); - - if (employeeFaceEmbedding == null) - throw new Exception($"EmployeeFaceEmbedding با شناسه {command.Id} یافت نشد"); - - employeeFaceEmbedding.UpdateEmployeeInfo( - command.EmployeeFullName, - command.WorkshopId - ); - - await _repository.UpdateAsync(employeeFaceEmbedding); + var entities = await _repository.GetByWorkshopIdsAsync(workshopIds); + return entities.Select(MapToDto).ToList(); } - public async Task GetByEmployeeIdAsync(long employeeId) + public async Task SaveAsync(EmployeeFaceEmbeddingDto dto) { - var employeeFaceEmbedding = await _repository.GetByEmployeeIdAsync(employeeId); - - return employeeFaceEmbedding == null ? null : MapToViewModel(employeeFaceEmbedding); - } + if (string.IsNullOrWhiteSpace(dto.Id)) + { + // ایجاد جدید + var metadata = MapMetadataFromDto(dto.Metadata); + var entity = new EmployeeFaceEmbedding( + dto.EmployeeFullName, + dto.EmployeeId, + dto.WorkshopId, + dto.Embeddings, + metadata + ); - public async Task> GetByWorkshopIdAsync(long workshopId) - { - var employeeFaceEmbeddings = await _repository.GetByWorkshopIdAsync(workshopId); - - return employeeFaceEmbeddings.Select(MapToViewModel).ToList(); - } + await _repository.CreateAsync(entity); + return entity.Id; + } + else + { + // به‌روزرسانی + var entity = await _repository.GetByIdAsync(dto.Id); + if (entity == null) + throw new Exception($"EmployeeFaceEmbedding با شناسه {dto.Id} یافت نشد"); - public async Task> GetByWorkshopIdsAsync(List workshopIds) - { - var employeeFaceEmbeddings = await _repository.GetByWorkshopIdsAsync(workshopIds); - - return employeeFaceEmbeddings.Select(MapToViewModel).ToList(); + entity.UpdateEmployeeInfo(dto.EmployeeFullName, dto.WorkshopId); + entity.UpdateEmbedding(dto.Embeddings, 0, 0); + entity.UpdateMetadata(MapMetadataFromDto(dto.Metadata), 0, 0); + + await _repository.UpdateAsync(entity); + return entity.Id; + } } public async Task DeleteAsync(string id) @@ -110,62 +80,46 @@ public class EmployeeFaceEmbeddingApplication : IEmployeeFaceEmbeddingApplicatio #region Mapping Methods - private EmployeeFaceEmbeddingViewModel MapToViewModel(EmployeeFaceEmbedding entity) + private EmployeeFaceEmbeddingDto MapToDto(EmployeeFaceEmbedding entity) { - return new EmployeeFaceEmbeddingViewModel + return new EmployeeFaceEmbeddingDto { Id = entity.Id, EmployeeFullName = entity.EmployeeFullName, EmployeeId = entity.EmployeeId, WorkshopId = entity.WorkshopId, Embeddings = entity.Embeddings, - Metadata = MapMetadataToViewModel(entity.Metadata), - EmbeddingHistory = entity.EmbeddingHistory?.Select(x => new EmbeddingHistoryItemViewModel - { - Embedding = x.Embedding, - Timestamp = x.Timestamp, - Confidence = x.Confidence, - RefinementPercentage = x.RefinementPercentage - }).ToList(), - MetadataHistory = entity.MetadataHistory?.Select(x => new MetadataHistoryItemViewModel - { - Metadata = MapMetadataToViewModel(x.Metadata), - Timestamp = x.Timestamp, - Confidence = x.Confidence, - RefinementPercentage = x.RefinementPercentage - }).ToList(), - CreatedAt = entity.CreatedAt, - UpdatedAt = entity.UpdatedAt + Metadata = MapMetadataToDto(entity.Metadata) }; } - private EmployeeFaceEmbeddingMetadataViewModel MapMetadataToViewModel(EmployeeFaceEmbeddingMetadata metadata) + private EmployeeFaceEmbeddingMetadataDto MapMetadataToDto(EmployeeFaceEmbeddingMetadata metadata) { if (metadata == null) return null; - return new EmployeeFaceEmbeddingMetadataViewModel + return new EmployeeFaceEmbeddingMetadataDto { AvgEyeDistanceNormalized = metadata.AvgEyeDistanceNormalized, AvgEyeToFaceRatio = metadata.AvgEyeToFaceRatio, AvgFaceAspectRatio = metadata.AvgFaceAspectRatio, AvgDetectionConfidence = metadata.AvgDetectionConfidence, - AvgKeypointsNormalized = MapKeypointsToViewModel(metadata.AvgKeypointsNormalized), - PerImageMetadata = metadata.PerImageMetadata?.Select(x => new ImageMetadataViewModel + AvgKeypointsNormalized = MapKeypointsToDto(metadata.AvgKeypointsNormalized), + PerImageMetadata = metadata.PerImageMetadata?.Select(x => new ImageMetadataDto { FaceAspectRatio = x.FaceAspectRatio, EyeDistanceNormalized = x.EyeDistanceNormalized, EyeToFaceRatio = x.EyeToFaceRatio, DetectionConfidence = x.DetectionConfidence, - KeypointsNormalized = MapKeypointsToViewModel(x.KeypointsNormalized) + KeypointsNormalized = MapKeypointsToDto(x.KeypointsNormalized) }).ToList() }; } - private EmployeeFaceEmbeddingKeypointsViewModel MapKeypointsToViewModel(EmployeeFaceEmbeddingKeypoints keypoints) + private EmployeeFaceEmbeddingKeypointsDto MapKeypointsToDto(EmployeeFaceEmbeddingKeypoints keypoints) { if (keypoints == null) return null; - return new EmployeeFaceEmbeddingKeypointsViewModel + return new EmployeeFaceEmbeddingKeypointsDto { LeftEye = keypoints.LeftEye, RightEye = keypoints.RightEye, @@ -175,39 +129,39 @@ public class EmployeeFaceEmbeddingApplication : IEmployeeFaceEmbeddingApplicatio }; } - private EmployeeFaceEmbeddingMetadata MapMetadataFromViewModel(EmployeeFaceEmbeddingMetadataViewModel viewModel) + private EmployeeFaceEmbeddingMetadata MapMetadataFromDto(EmployeeFaceEmbeddingMetadataDto dto) { - if (viewModel == null) return null; + if (dto == null) return null; return new EmployeeFaceEmbeddingMetadata { - AvgEyeDistanceNormalized = viewModel.AvgEyeDistanceNormalized, - AvgEyeToFaceRatio = viewModel.AvgEyeToFaceRatio, - AvgFaceAspectRatio = viewModel.AvgFaceAspectRatio, - AvgDetectionConfidence = viewModel.AvgDetectionConfidence, - AvgKeypointsNormalized = MapKeypointsFromViewModel(viewModel.AvgKeypointsNormalized), - PerImageMetadata = viewModel.PerImageMetadata?.Select(x => new ImageMetadata + AvgEyeDistanceNormalized = dto.AvgEyeDistanceNormalized, + AvgEyeToFaceRatio = dto.AvgEyeToFaceRatio, + AvgFaceAspectRatio = dto.AvgFaceAspectRatio, + AvgDetectionConfidence = dto.AvgDetectionConfidence, + AvgKeypointsNormalized = MapKeypointsFromDto(dto.AvgKeypointsNormalized), + PerImageMetadata = dto.PerImageMetadata?.Select(x => new ImageMetadata { FaceAspectRatio = x.FaceAspectRatio, EyeDistanceNormalized = x.EyeDistanceNormalized, EyeToFaceRatio = x.EyeToFaceRatio, DetectionConfidence = x.DetectionConfidence, - KeypointsNormalized = MapKeypointsFromViewModel(x.KeypointsNormalized) + KeypointsNormalized = MapKeypointsFromDto(x.KeypointsNormalized) }).ToList() }; } - private EmployeeFaceEmbeddingKeypoints MapKeypointsFromViewModel(EmployeeFaceEmbeddingKeypointsViewModel viewModel) + private EmployeeFaceEmbeddingKeypoints MapKeypointsFromDto(EmployeeFaceEmbeddingKeypointsDto dto) { - if (viewModel == null) return null; + if (dto == null) return null; return new EmployeeFaceEmbeddingKeypoints { - LeftEye = viewModel.LeftEye, - RightEye = viewModel.RightEye, - Nose = viewModel.Nose, - MouthLeft = viewModel.MouthLeft, - MouthRight = viewModel.MouthRight + LeftEye = dto.LeftEye, + RightEye = dto.RightEye, + Nose = dto.Nose, + MouthLeft = dto.MouthLeft, + MouthRight = dto.MouthRight }; } diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs index a25e7305..ca6cdfc1 100644 --- a/PersonalContractingParty.Config/PersonalBootstrapper.cs +++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs @@ -220,9 +220,12 @@ using CompanyManagment.App.Contracts.PaymentInstrument; using CompanyManagment.App.Contracts.PaymentTransaction; using CompanyManagment.App.Contracts.AuthorizedPerson; using Company.Domain.AuthorizedPersonAgg; +using Company.Domain.EmployeeFaceEmbeddingAgg; using Company.Domain.InstitutionContractExtensionTempAgg; using Company.Domain.LawAgg; +using CompanyManagement.Infrastructure.Mongo.EmployeeFaceEmbeddingRepo; using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; +using CompanyManagment.App.Contracts.EmployeeFaceEmbedding; using CompanyManagment.App.Contracts.Law; using CompanyManagment.EFCore.Repository; @@ -479,6 +482,10 @@ public class PersonalBootstrapper services .AddTransient(); + + services.AddTransient(); + services.AddTransient(); + #endregion #region Pooya diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs index b8e8146c..dfd8b18f 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs +++ b/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs @@ -63,7 +63,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk } - public IActionResult OnPostShiftDate() + public async Task OnPostShiftDate() { //var startRollCall = new DateTime(2025, 2, 19); //var rollCalls = _context.RollCalls.Where(x => x.ShiftDate >= startRollCall); @@ -73,12 +73,41 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk //var notEndedRollCalls = rollCalls.Where(x => x.EndDate == null).ToList(); //RefactorAllTheRollCallsOnEsfand(endedRollCalls, notEndedRollCalls); //CreateRewardForKebabMahdi().GetAwaiter().GetResult(); - SetEntityIdForCheckoutValues(); - SetEntityIdForCheckoutValuesTemp(); + // SetEntityIdForCheckoutValues(); + // SetEntityIdForCheckoutValuesTemp(); + await CreateDadmehrWorkshopFaceEmbedding(); ViewData["message"] = "ایجاد شد"; return Page(); } + private async System.Threading.Tasks.Task CreateDadmehrWorkshopFaceEmbedding() + { + + // ایجاد HttpClient + var client = new HttpClient(); + + using var formData = new MultipartFormDataContent(); + formData.Add(new StringContent("123"), "employee_id"); + formData.Add(new StringContent("456"), "workshop_id"); + formData.Add(new StringContent("نام کامل کارمند"), "employee_full_name"); + + // ارسال درخواست GET + var response = await client.PostAsync("http://127.0.0.1:8000/embeddings", + formData + ); + + // یا ارسال درخواست POST با داده JSON + // var response = await client.PostAsJsonAsync("https://your-api-url.com/endpoint", new { key = "value" }); + + // بررسی وضعیت پاسخ + if (response.IsSuccessStatusCode) + { + var result = await response.Content.ReadAsStringAsync(); + // یا برای خواندن JSON: var result = await response.Content.ReadFromJsonAsync(); + Console.WriteLine(result); + } + } + public IActionResult OnPostShiftDateNew() { var startRollCall = new DateTime(2025, 4, 21); diff --git a/ServiceHost/Areas/Camera/Controllers/CameraController.cs b/ServiceHost/Areas/Camera/Controllers/CameraController.cs index 4f731483..3bd378f9 100644 --- a/ServiceHost/Areas/Camera/Controllers/CameraController.cs +++ b/ServiceHost/Areas/Camera/Controllers/CameraController.cs @@ -13,11 +13,12 @@ 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 +public class CameraController : CameraBaseController { private readonly IWebHostEnvironment _webHostEnvironment; private readonly IConfiguration _configuration; @@ -30,6 +31,7 @@ public class CameraController:CameraBaseController private readonly IAccountApplication _accountApplication; private readonly IPasswordHasher _passwordHasher; private readonly ICameraAccountApplication _cameraAccountApplication; + private readonly IEmployeeFaceEmbeddingApplication _employeeFaceEmbeddingApplication; public CameraController(IWebHostEnvironment webHostEnvironment, IConfiguration configuration, @@ -41,7 +43,8 @@ public class CameraController:CameraBaseController IPersonnelCodeApplication personnelCodeApplication, IAccountApplication accountApplication, IPasswordHasher passwordHasher, - ICameraAccountApplication cameraAccountApplication) + ICameraAccountApplication cameraAccountApplication, + IEmployeeFaceEmbeddingApplication employeeFaceEmbeddingApplication) { _webHostEnvironment = webHostEnvironment; _configuration = configuration; @@ -54,55 +57,33 @@ public class CameraController:CameraBaseController _accountApplication = accountApplication; _passwordHasher = passwordHasher; _cameraAccountApplication = cameraAccountApplication; + _employeeFaceEmbeddingApplication = employeeFaceEmbeddingApplication; } [HttpPost("login")] [AllowAnonymous] - public IActionResult CameraLogin([FromBody]CameraLoginRequest request) + public IActionResult CameraLogin([FromBody] CameraLoginRequest request) { - _accountApplication.CameraLogin(request); - return Ok(); + _accountApplication.CameraLogin(request); + return Ok(); } - - [HttpGet("embedding")] + + [HttpPost("embedding")] [AllowAnonymous] - public IActionResult WorkshopEmbedding(long? workshopId = null) + public async Task>> WorkshopEmbedding([FromBody] long[] workshopIds) { - if (!User.Identity?.IsAuthenticated??false) + if (!User.Identity?.IsAuthenticated ?? false) { return Unauthorized(); } - try - { - var filePath = Path.Combine( - _webHostEnvironment.WebRootPath, - "embeddings.json"); - if (!System.IO.File.Exists(filePath)) - { - return NotFound(new - { - isSuccess = false, - message = "embedding.json not found", - path = filePath - }); - } - - var json = System.IO.File.ReadAllText(filePath); - return Content(json, "application/json"); - } - catch (Exception ex) - { - return StatusCode(500, new - { - isSuccess = false, - message = "خطا در خواندن فایل embedding.json", - error = ex.Message - }); - } + var data = await _employeeFaceEmbeddingApplication + .GetByWorkshopIdsAsync(workshopIds.ToList()); + + return data; } - + [HttpGet("SendPersonelCodeToGetEmployeeId")] public IActionResult SendPersonelCodeToGetEmployeeId(long personelCode, long workshopId) { @@ -124,7 +105,6 @@ public class CameraController:CameraBaseController { isSuccess = false, message = "پرسنل مورد نظر غیر فعال است", - }); } @@ -150,7 +130,6 @@ public class CameraController:CameraBaseController isSuccess = true, message = "", personId = $"{employeeId}", - }); } @@ -165,9 +144,7 @@ public class CameraController:CameraBaseController { employeeName = employeeFullName, flag = flagId - }); - } [HttpGet("Out")] @@ -199,7 +176,6 @@ public class CameraController:CameraBaseController WorkshopId = workshopId, EmployeeId = employeeId, StartDate = now, - }; var res = _rollCallApplication.Create(command); if (res.IsSuccedded) @@ -216,13 +192,13 @@ public class CameraController:CameraBaseController isSuccess = false, }); } - } [HttpGet("ShowPicture")] public IActionResult ShowPicture(int index, long workshopId, long label) { - var filePath = Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", workshopId.ToString(), label.ToString(), $"{index}.jpg"); + var filePath = Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", workshopId.ToString(), + label.ToString(), $"{index}.jpg"); if (!System.IO.File.Exists(filePath)) { @@ -272,7 +248,6 @@ public class CameraController:CameraBaseController return new JsonResult(new { isSuccess = true, - }); } @@ -281,7 +256,6 @@ public class CameraController:CameraBaseController isSuccess = false, errorMessage = "گذرواژه اشتباه است", }); - } [HttpGet("Logout")] @@ -290,5 +264,4 @@ public class CameraController:CameraBaseController _accountApplication.Logout(); return new JsonResult(new { isSuccess = true }); } - } \ No newline at end of file