2024-07-31 10:18:38 +03:30
using Brizco.Domain.Entities.Tasks ;
2024-07-08 17:45:17 +03:30
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
2024-07-08 17:45:17 +03:30
{
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 ( ) ;
2024-07-08 17:45:17 +03:30
if ( shiftPlan = = null )
throw new Exception ( "Shift plan not found" ) ;
2024-08-09 21:42:04 +03:30
var shiftPlanUsers = await repositoryWrapper . SetRepository < ShiftPlanUser > ( )
2024-07-08 17:45:17 +03:30
. TableNoTracking
. Where ( f = > f . ShiftPlanId = = shiftPlanId )
2024-07-31 10:18:38 +03:30
. Select ( ShiftPlanUserMapper . ProjectToSDto )
2024-07-08 17:45:17 +03:30
. 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
2024-07-08 17:45:17 +03:30
. 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 ) ) ;
2024-07-08 17:45:17 +03:30
}
break ;
case ShiftPlanNotifyType . EndOfShift :
2024-08-09 21:42:04 +03:30
var activitiesEndShift = await repositoryWrapper . SetRepository < Activity > ( ) . TableNoTracking
2024-07-08 17:45:17 +03:30
. 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-08 17:45:17 +03:30
}
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 ) ) ;
2024-07-08 17:45:17 +03:30
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
}
2024-07-08 17:45:17 +03:30
break ;
default :
return ;
}
}
catch ( Exception e )
{
2024-08-09 21:42:04 +03:30
logger . LogError ( e . Message ) ;
2024-07-08 17:45:17 +03:30
}
}
}