Api/Brizco.Core/QuartzServices/ShiftPlanNotificationSchedu...

84 lines
4.8 KiB
C#
Raw Normal View History

2024-07-31 10:18:38 +03:30
using Brizco.Domain.Entities.Tasks;
using Microsoft.Extensions.Logging;
using Quartz;
using Task = System.Threading.Tasks.Task;
namespace Brizco.Core.QuartzServices;
2024-08-09 21:42:04 +03:30
public class ShiftPlanNotificationScheduledJob(
ILogger<ShiftPlanNotificationScheduledJob> logger,
IRepositoryWrapper repositoryWrapper,
IMediator mediator)
: IJob
{
public async Task Execute(IJobExecutionContext context)
{
try
{
var notifyType = (ShiftPlanNotifyType)int.Parse(context.JobDetail.Key.Name);
var shiftPlanId = Guid.Parse(context.JobDetail.Key.Group);
2024-08-09 21:42:04 +03:30
var shiftPlan = await repositoryWrapper.SetRepository<ShiftPlan>().TableNoTracking
2024-07-31 10:18:38 +03:30
.Where(f => f.Id == shiftPlanId)
.Select(ShiftPlanMapper.ProjectToSDto)
.FirstOrDefaultAsync();
if (shiftPlan == null)
throw new Exception("Shift plan not found");
2024-08-09 21:42:04 +03:30
var shiftPlanUsers = await repositoryWrapper.SetRepository<ShiftPlanUser>()
.TableNoTracking
.Where(f => f.ShiftPlanId == shiftPlanId)
2024-07-31 10:18:38 +03:30
.Select(ShiftPlanUserMapper.ProjectToSDto)
.ToListAsync();
var superVisorId = shiftPlan.SupervisorId;
switch (notifyType)
{
case ShiftPlanNotifyType.None:
return;
break;
case ShiftPlanNotifyType.BeforeEndShift30Min:
2024-08-09 21:42:04 +03:30
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;
2024-07-31 10:18:38 +03:30
string message = $"نیم ساعت مونده تا شیفت تموم شه و {unDoneCount} عدد از تست هات مونده، حالا چه خاکی به سر کنیم!😱";
2024-08-09 21:42:04 +03:30
await mediator.Send(new CreateNotificationCommand(message, shiftPlanUser.UserId, shiftPlan.ComplexId));
}
break;
case ShiftPlanNotifyType.EndOfShift:
2024-08-09 21:42:04 +03:30
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;
2024-07-31 10:18:38 +03:30
string message = $"{shiftPlanUser.UserFullName} {shiftPlan.ShiftTitle} {shiftPlan.PlanFor.ToPersianDateTime().ToLongDateTimeString()} تموم شده است و {unDoneCount} - عدد از تسک های شما کاری روشون انجام نشده ، خطر سوپروایزر در کمین است";
2024-08-09 21:42:04 +03:30
await mediator.Send(new CreateNotificationCommand(message, shiftPlanUser.UserId, shiftPlan.ComplexId));
}
2024-07-31 10:18:38 +03:30
string superVisorAfterShiftMessage = $"{shiftPlan.SupervisorFullName} محترم {shiftPlan.ShiftTitle} تموم شد. برو به کار بچه ها نمره بده و مو رو از ماست بکش و کامنت یادت نره";
2024-08-09 21:42:04 +03:30
await mediator.Send(new CreateNotificationCommand(superVisorAfterShiftMessage, shiftPlan.SupervisorId, shiftPlan.ComplexId));
break;
case ShiftPlanNotifyType.AfterStartShift2Hour:
2024-08-09 21:42:04 +03:30
var activities2AfterStartShift = await repositoryWrapper.SetRepository<Activity>().TableNoTracking
2024-07-31 10:18:38 +03:30
.Where(a => a.ShiftPlanId == shiftPlanId).ToListAsync();
foreach (var shiftPlanUser in shiftPlanUsers)
{
var unDoneCount = activities2AfterStartShift.Count(a => a.UserId == shiftPlanUser.UserId && a.IsDone == false);
if (unDoneCount == 0)
continue;
string message = $"{shiftPlanUser.UserFullName} دوساعت از {shiftPlan.ShiftTitle} گذشته ، اون انگشت و بزن روی تیک تسک ها که وقت طلاس مشتیییییی ";
2024-08-09 21:42:04 +03:30
await mediator.Send(new CreateNotificationCommand(message, shiftPlanUser.UserId, shiftPlan.ComplexId));
2024-07-31 10:18:38 +03:30
}
break;
default:
return;
}
}
catch (Exception e)
{
2024-08-09 21:42:04 +03:30
logger.LogError(e.Message);
}
}
}