80 lines
4.0 KiB
C#
80 lines
4.0 KiB
C#
|
|
using Brizco.Domain.Entities.ShiftPlans;
|
|||
|
|
using Brizco.Domain.Entities.Tasks;
|
|||
|
|
using Microsoft.Extensions.Logging;
|
|||
|
|
using Quartz;
|
|||
|
|
using Task = System.Threading.Tasks.Task;
|
|||
|
|
|
|||
|
|
namespace Brizco.Core.QuartzServices;
|
|||
|
|
|
|||
|
|
public class ShiftPlanNotificationScheduledJob : IJob
|
|||
|
|
{
|
|||
|
|
private readonly ILogger<ShiftPlanNotificationScheduledJob> _logger;
|
|||
|
|
private readonly IRepositoryWrapper _repositoryWrapper;
|
|||
|
|
private readonly IMediator _mediator;
|
|||
|
|
|
|||
|
|
public ShiftPlanNotificationScheduledJob(ILogger<ShiftPlanNotificationScheduledJob> logger,IRepositoryWrapper repositoryWrapper,IMediator mediator)
|
|||
|
|
{
|
|||
|
|
_logger = logger;
|
|||
|
|
_repositoryWrapper = repositoryWrapper;
|
|||
|
|
_mediator = mediator;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task Execute(IJobExecutionContext context)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var notifyType = (ShiftPlanNotifyType)int.Parse(context.JobDetail.Key.Name);
|
|||
|
|
var shiftPlanId = Guid.Parse(context.JobDetail.Key.Group);
|
|||
|
|
var shiftPlan = await _repositoryWrapper.SetRepository<ShiftPlan>().TableNoTracking
|
|||
|
|
.FirstOrDefaultAsync(f => f.Id == shiftPlanId);
|
|||
|
|
if (shiftPlan == null)
|
|||
|
|
throw new Exception("Shift plan not found");
|
|||
|
|
var shiftPlanUsers = await _repositoryWrapper.SetRepository<ShiftPlanUser>()
|
|||
|
|
.TableNoTracking
|
|||
|
|
.Where(f => f.ShiftPlanId == shiftPlanId)
|
|||
|
|
.ToListAsync();
|
|||
|
|
var superVisorId = shiftPlan.SupervisorId;
|
|||
|
|
switch (notifyType)
|
|||
|
|
{
|
|||
|
|
case ShiftPlanNotifyType.None:
|
|||
|
|
return;
|
|||
|
|
break;
|
|||
|
|
case ShiftPlanNotifyType.BeforeEndShift30Min:
|
|||
|
|
var activities = await _repositoryWrapper.SetRepository<Activity>().TableNoTracking
|
|||
|
|
.Where(a => a.ShiftPlanId == shiftPlanId).ToListAsync();
|
|||
|
|
foreach (var shiftPlanUser in shiftPlanUsers)
|
|||
|
|
{
|
|||
|
|
var unDoneCount = activities.Count(a => a.UserId == shiftPlanUser.UserId && a.IsDone == false);
|
|||
|
|
if(unDoneCount == 0)
|
|||
|
|
continue;
|
|||
|
|
string message = $"شما تعداد {unDoneCount} وظیفه انجام نشده در شیفت مورد نظر دارید ، نیم ساعت به پایان شیفت مانده است";
|
|||
|
|
await _mediator.Send(new CreateNotificationCommand(message, shiftPlanUser.UserId, shiftPlan.ComplexId));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case ShiftPlanNotifyType.EndOfShift:
|
|||
|
|
var activitiesEndShift = await _repositoryWrapper.SetRepository<Activity>().TableNoTracking
|
|||
|
|
.Where(a => a.ShiftPlanId == shiftPlanId).ToListAsync();
|
|||
|
|
foreach (var shiftPlanUser in shiftPlanUsers)
|
|||
|
|
{
|
|||
|
|
var unDoneCount = activitiesEndShift.Count(a => a.UserId == shiftPlanUser.UserId && a.IsDone == false);
|
|||
|
|
if (unDoneCount == 0)
|
|||
|
|
continue;
|
|||
|
|
string message = $"شما تعداد {unDoneCount} وظیفه انجام نشده در شیفت مورد نظر دارید";
|
|||
|
|
await _mediator.Send(new CreateNotificationCommand(message, shiftPlanUser.UserId, shiftPlan.ComplexId));
|
|||
|
|
}
|
|||
|
|
string superVisorAfterShiftMessage = $"سوپر وایزر محترم ، شیفت مورد نظر به پایان رسیده است ، لطفا فعالیت ها را رسیدگی کنید";
|
|||
|
|
await _mediator.Send(new CreateNotificationCommand(superVisorAfterShiftMessage, shiftPlan.SupervisorId, shiftPlan.ComplexId));
|
|||
|
|
break;
|
|||
|
|
case ShiftPlanNotifyType.AfterStartShift2Hour:
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception e)
|
|||
|
|
{
|
|||
|
|
_logger.LogError(e.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|