71 lines
1.9 KiB
C#
71 lines
1.9 KiB
C#
using System.Collections.Concurrent;
|
|
using BMA.EHR.Recruit.Requests.Recruits;
|
|
|
|
namespace BMA.EHR.Recruit.Services;
|
|
|
|
public enum ImportJobType
|
|
{
|
|
CandidateFile,
|
|
CandidateFileById,
|
|
ScoreFile,
|
|
ResultFile
|
|
}
|
|
|
|
public enum ImportJobStatus
|
|
{
|
|
Pending,
|
|
Running,
|
|
Completed,
|
|
Failed
|
|
}
|
|
|
|
public class ImportJobInfo
|
|
{
|
|
public string JobId { get; set; } = Guid.NewGuid().ToString("D");
|
|
public ImportJobType JobType { get; set; }
|
|
public ImportJobStatus Status { get; set; } = ImportJobStatus.Pending;
|
|
public int ProcessedCount { get; set; }
|
|
public int TotalCount { get; set; }
|
|
public string? ErrorMessage { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.Now;
|
|
public DateTime? CompletedAt { get; set; }
|
|
|
|
// Request data
|
|
public string ImportFile { get; set; } = "";
|
|
public Guid RecruitImportId { get; set; }
|
|
public string ImportDocId { get; set; } = "";
|
|
public string? UserId { get; set; }
|
|
public string? FullName { get; set; }
|
|
|
|
// For CandidateFile
|
|
public PostRecruitImportRequest? Request { get; set; }
|
|
}
|
|
|
|
public class ImportJobTracker
|
|
{
|
|
private readonly ConcurrentDictionary<string, ImportJobInfo> _jobs = new();
|
|
|
|
public ImportJobInfo CreateJob(ImportJobInfo job)
|
|
{
|
|
_jobs[job.JobId] = job;
|
|
return job;
|
|
}
|
|
|
|
public ImportJobInfo? GetJob(string jobId)
|
|
{
|
|
return _jobs.TryGetValue(jobId, out var job) ? job : null;
|
|
}
|
|
|
|
public void UpdateStatus(string jobId, ImportJobStatus status, int processedCount = 0, string? errorMessage = null)
|
|
{
|
|
if (_jobs.TryGetValue(jobId, out var job))
|
|
{
|
|
job.Status = status;
|
|
job.ProcessedCount = processedCount;
|
|
if (errorMessage != null)
|
|
job.ErrorMessage = errorMessage;
|
|
if (status == ImportJobStatus.Completed || status == ImportJobStatus.Failed)
|
|
job.CompletedAt = DateTime.Now;
|
|
}
|
|
}
|
|
}
|