feat: update WorkshopEmbedding method and enhance EmployeeFaceEmbedding model with additional properties
This commit is contained in:
@@ -32,17 +32,31 @@ public class EmployeeFaceEmbedding
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[BsonElement("employeeFullName")]
|
||||
public string EmployeeFullName { get; set; }
|
||||
|
||||
[BsonElement("employeeId")]
|
||||
public long EmployeeId { get; set; }
|
||||
|
||||
[BsonElement("workshopId")]
|
||||
public long WorkshopId { get; set; }
|
||||
|
||||
[BsonElement("embeddings")]
|
||||
public List<double> Embeddings { get; set; }
|
||||
|
||||
[BsonElement("metadata")]
|
||||
public EmployeeFaceEmbeddingMetadata Metadata { get; set; }
|
||||
|
||||
[BsonElement("embeddingHistory")]
|
||||
public List<EmbeddingHistoryItem> EmbeddingHistory { get; set; }
|
||||
|
||||
[BsonElement("metadataHistory")]
|
||||
public List<MetadataHistoryItem> MetadataHistory { get; set; }
|
||||
|
||||
[BsonElement("createdAt")]
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
[BsonElement("updatedAt")]
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
|
||||
public void UpdateEmbedding(List<double> newEmbedding, double confidence, double refinementPercentage)
|
||||
|
||||
@@ -9,7 +9,7 @@ public class EmployeeFaceEmbeddingRepository : IEmployeeFaceEmbeddingRepository
|
||||
|
||||
public EmployeeFaceEmbeddingRepository(IMongoDatabase database)
|
||||
{
|
||||
_employeeFaceEmbeddings = database.GetCollection<EmployeeFaceEmbedding>("EmployeeFaceEmbeddings");
|
||||
_employeeFaceEmbeddings = database.GetCollection<EmployeeFaceEmbedding>("EmployeeFaces");
|
||||
}
|
||||
|
||||
public async Task CreateAsync(EmployeeFaceEmbedding employeeFaceEmbedding)
|
||||
@@ -48,7 +48,7 @@ public class EmployeeFaceEmbeddingRepository : IEmployeeFaceEmbeddingRepository
|
||||
public async Task<List<EmployeeFaceEmbedding>> GetByWorkshopIdsAsync(List<long> workshopIds)
|
||||
{
|
||||
return await _employeeFaceEmbeddings
|
||||
.Find(x => workshopIds.Contains(x.WorkshopId))
|
||||
.Find(x => workshopIds.First()==x.WorkshopId)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
|
||||
@@ -82,29 +82,76 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
|
||||
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 basePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "faces", "11");
|
||||
|
||||
if (!Directory.Exists(basePath))
|
||||
{
|
||||
var result = await response.Content.ReadAsStringAsync();
|
||||
// یا برای خواندن JSON: var result = await response.Content.ReadFromJsonAsync<YourType>();
|
||||
Console.WriteLine(result);
|
||||
ViewData["message"] = "مسیر پوشه یافت نشد";
|
||||
return;
|
||||
}
|
||||
|
||||
var directories = Directory.GetDirectories(basePath);
|
||||
|
||||
var client = new HttpClient();
|
||||
|
||||
foreach (var directory in directories)
|
||||
{
|
||||
var directoryName = Path.GetFileName(directory);
|
||||
|
||||
var employee = await _context.Employees
|
||||
.FirstOrDefaultAsync(x=>x.id == Convert.ToInt64(directoryName));
|
||||
var fullname = employee != null ? employee.FullName: "نامشخص";
|
||||
|
||||
var imageFiles = Directory.GetFiles(directory, "*.*")
|
||||
.Take(2)
|
||||
.ToArray();
|
||||
|
||||
if (imageFiles.Length < 2)
|
||||
{
|
||||
Console.WriteLine($"تعداد تصاویر کافی برای {directoryName} وجود ندارد");
|
||||
continue;
|
||||
}
|
||||
|
||||
using var formData = new MultipartFormDataContent();
|
||||
formData.Add(new StringContent(directoryName), "employee_id");
|
||||
formData.Add(new StringContent("11"), "workshop_id");
|
||||
formData.Add(new StringContent(fullname), "employee_full_name");
|
||||
|
||||
FileStream file1Stream = null;
|
||||
FileStream file2Stream = null;
|
||||
|
||||
try
|
||||
{
|
||||
// ارسال فایل اول
|
||||
file1Stream = new FileStream(imageFiles[0], FileMode.Open, FileAccess.Read);
|
||||
var file1Content = new StreamContent(file1Stream);
|
||||
file1Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
|
||||
formData.Add(file1Content, "picture1", Path.GetFileName(imageFiles[0]));
|
||||
|
||||
// ارسال فایل دوم
|
||||
file2Stream = new FileStream(imageFiles[1], FileMode.Open, FileAccess.Read);
|
||||
var file2Content = new StreamContent(file2Stream);
|
||||
file2Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
|
||||
formData.Add(file2Content, "picture2", Path.GetFileName(imageFiles[1]));
|
||||
|
||||
var response = await client.PostAsync("http://127.0.0.1:8000/embeddings", formData);
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
var result = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"✓ {directoryName}: {result}");
|
||||
}
|
||||
else
|
||||
{
|
||||
var error = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"✗ {directoryName}: {response.StatusCode} - {error}");
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
file1Stream?.Dispose();
|
||||
file2Stream?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -724,7 +771,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
//TODO: set data for institution price
|
||||
var workshops = item.contractingParty.Employers
|
||||
.SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)).ToList()
|
||||
.DistinctBy(x=>x.id).ToList();
|
||||
.DistinctBy(x => x.id).ToList();
|
||||
|
||||
var initialWorkshop = workshops
|
||||
.Select(w =>
|
||||
@@ -779,56 +826,56 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
|
||||
//var oneMonthSum = current.Sum(x => x.Price);
|
||||
item.contract.SetWorkshopGroup(group);
|
||||
// var totalPaymentAndWorkshopList = await _clientRegistrationApplication.GetTotalPaymentAndWorkshopList(oneMonthSum,duration: InstitutionContractDuration.TwelveMonths,false);
|
||||
// item.contract.SetAmount(totalPaymentAndWorkshopList.OneTimeTotalPaymentStr.MoneyToDouble(),
|
||||
// totalPaymentAndWorkshopList.OneTimeValueAddedTaxStr.MoneyToDouble(),totalPaymentAndWorkshopList.DiscountedAmountForOneMonth.MoneyToDouble());
|
||||
// var totalPaymentAndWorkshopList = await _clientRegistrationApplication.GetTotalPaymentAndWorkshopList(oneMonthSum,duration: InstitutionContractDuration.TwelveMonths,false);
|
||||
// item.contract.SetAmount(totalPaymentAndWorkshopList.OneTimeTotalPaymentStr.MoneyToDouble(),
|
||||
// totalPaymentAndWorkshopList.OneTimeValueAddedTaxStr.MoneyToDouble(),totalPaymentAndWorkshopList.DiscountedAmountForOneMonth.MoneyToDouble());
|
||||
}
|
||||
|
||||
var remoteIds = remoteContractsQuery.Select(x => x.contract.id);
|
||||
var inPersonContracts =await query
|
||||
.Where(x=>!remoteIds.Contains(x.contractingParty.id)).ToListAsync();
|
||||
var inPersonContracts = await query
|
||||
.Where(x => !remoteIds.Contains(x.contractingParty.id)).ToListAsync();
|
||||
foreach (var item in inPersonContracts)
|
||||
{
|
||||
var workshops = item.contractingParty.Employers
|
||||
.SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)).ToList()
|
||||
.DistinctBy(x=>x.id).ToList();
|
||||
.DistinctBy(x => x.id).ToList();
|
||||
|
||||
var initialWorkshop = workshops
|
||||
.Select(w =>
|
||||
{
|
||||
var personnelCount =
|
||||
w.LeftWorks.Count(lw => lw.StartWorkDate <= today && lw.LeftWorkDate >= today);
|
||||
|
||||
|
||||
bool hasRollCallPlan = true;
|
||||
bool hasRollCallPlanInPerson = false;
|
||||
bool hasCustomizeCheckoutPlan = w.id == 170;
|
||||
bool hasContractPlan = true;
|
||||
bool hasContractPlanInPerson = true;
|
||||
bool hasInsurancePlan =true;
|
||||
bool hasInsurancePlan = true;
|
||||
bool hasInsurancePlanInPerson = true;
|
||||
|
||||
var initial = InstitutionContractWorkshopInitial.CreateManual(w.WorkshopFullName, hasRollCallPlan,
|
||||
hasRollCallPlanInPerson,hasCustomizeCheckoutPlan,
|
||||
hasContractPlan,hasContractPlanInPerson,
|
||||
hasInsurancePlan,hasInsurancePlanInPerson,personnelCount,0,
|
||||
|
||||
var initial = InstitutionContractWorkshopInitial.CreateManual(w.WorkshopFullName,
|
||||
hasRollCallPlan,
|
||||
hasRollCallPlanInPerson, hasCustomizeCheckoutPlan,
|
||||
hasContractPlan, hasContractPlanInPerson,
|
||||
hasInsurancePlan, hasInsurancePlanInPerson, personnelCount, 0,
|
||||
w.id, w.WorkshopEmployers.Select(x => x.EmployerId
|
||||
).ToList());
|
||||
return initial;
|
||||
}).ToList();
|
||||
|
||||
var group = new InstitutionContractWorkshopGroup(item.contract.id, initialWorkshop);
|
||||
|
||||
|
||||
await _context.AddAsync(group);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
|
||||
initialWorkshop.ForEach(x =>
|
||||
{
|
||||
var workshopId = workshops.First(w => x.WorkshopId.Value == w.id).id;
|
||||
x.SetWorkshopId(workshopId);
|
||||
});
|
||||
|
||||
|
||||
item.contract.SetWorkshopGroup(group);
|
||||
|
||||
}
|
||||
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
@@ -71,15 +71,16 @@ public class CameraController : CameraBaseController
|
||||
|
||||
[HttpPost("embedding")]
|
||||
[AllowAnonymous]
|
||||
public async Task<ActionResult<List<EmployeeFaceEmbeddingDto>>> WorkshopEmbedding([FromBody] long[] workshopIds)
|
||||
public async Task<ActionResult<List<EmployeeFaceEmbeddingDto>>> WorkshopEmbedding()
|
||||
{
|
||||
if (!User.Identity?.IsAuthenticated ?? false)
|
||||
{
|
||||
return Unauthorized();
|
||||
}
|
||||
|
||||
var workshopIds = _authHelper.GetWorkshopId();
|
||||
var data = await _employeeFaceEmbeddingApplication
|
||||
.GetByWorkshopIdsAsync(workshopIds.ToList());
|
||||
.GetByWorkshopIdsAsync([workshopIds]);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user