add 排班操作通知

This commit is contained in:
2025-03-24 10:54:06 +08:00
parent d943f2e813
commit 11a8102f94
3 changed files with 90 additions and 5 deletions

View File

@@ -24,6 +24,7 @@ public class WorkGridScheduleSaveRequest : IValidatableObject
/// <summary>
/// 人员codes
/// </summary>
[MinLength(1, ErrorMessage = "人员不可为空")]
public List<string> UserCodes { get; set; }
/// <inheritdoc />

View File

@@ -1,4 +1,5 @@
using Dlhis.Basic.Common.ApiLog.Services;
using Dlhis.Basic.Common.Message;
using Dlhis.Basic.WorkGrids.Request;
using Dlhis.Basic.WorkGrids.Response;
using Dlhis.Constants;
@@ -24,22 +25,39 @@ public class WorkGridScheduleService : IWorkGridScheduleService
private readonly IDbContext _dbContext;
private readonly IJinkoJipApi _jinkoJipApi;
private readonly IOperateLog _operateLog;
private readonly ILogger<WorkGridScheduleService> _logger;
private readonly IJinkoApiService _jinkoApiService;
private readonly ICurrentUser _currentUser;
public WorkGridScheduleService(IDbContext dbContext,
IJinkoJipApi jinkoJipApi,
IOperateLog operateLog,
ILogger<WorkGridScheduleService> logger,
IJinkoApiService jinkoApiService,
ICurrentUser currentUser)
{
_dbContext = dbContext;
_jinkoJipApi = jinkoJipApi;
_operateLog = operateLog;
_logger = logger;
_jinkoApiService = jinkoApiService;
_currentUser = currentUser;
}
public async Task SaveAsync(WorkGridScheduleSaveRequest request)
{
var workGrid = await _dbContext.Queryable<WorkGridEntity>().SingleAsync(x => x.Code == request.WorkGridCode);
request.UserCodes = request.UserCodes.Distinct().ToList();
var workGrid = await _dbContext.Queryable<WorkGridEntity>()
.LeftJoin<GainfoEntity>((x, ga) => x.LeaderUserCode == ga.Code)
.Where(x => x.Code == request.WorkGridCode)
.Select((x, ga) => new
{
x.Code, x.Name,
x.LeaderUserCode,
LeaderUserName = ga.Name
})
.SingleAsync();
workGrid.ThrowIfNull("工作网格不存在");
var timeSetting = await _dbContext.Queryable<WorkGridTimePeriodEntity>().Where(x => x.Type == request.PeriodType).Select(x => new { x.Start, x.Before }).SingleAsync();
@@ -96,14 +114,52 @@ public class WorkGridScheduleService : IWorkGridScheduleService
await _dbContext.InsertAsync(toInserts);
await _operateLog.LogAsync(OperateLogType.WorkGrid, $"新增网格({workGrid.Name}){request.Date.ToString("yyyy-M-d")}的{request.PeriodType.GetDescription()}人员:{request.UserCodes.Join(",")}");
try
{
var gainfos = await _dbContext.Queryable<GainfoEntity>().Where(x => request.UserCodes.Contains(x.Code)).Select(x => new { x.Code, x.Name }).ToListAsync();
foreach (var gainfo in gainfos)
{
try
{
await _jinkoApiService.SendWorkMessageAsync(new JinkoSendWorkMessageRequest
{
Content = $"{gainfo.Name}({gainfo.Code})你好,系统检测到你被{workGrid.Name}网格的网格长{workGrid.LeaderUserName}({workGrid.LeaderUserCode})安排了{request.Date.ToString("yyyy年MM月dd日")}{request.PeriodType.GetDescription()},请按时上班",
WorkCodes = new List<string> { gainfo.Code }
});
}
catch (Exception e)
{
_logger.LogError("推送信息错误{code}:{error}", gainfo.Code, e.Message);
}
}
}
catch (Exception e)
{
_logger.LogError("推送信息错误save,{error}", e.Message);
}
}
/// <inheritdoc />
public async Task RemoveAsync(WorkGridScheduleSaveRequest request)
{
var workGrid = await _dbContext.Queryable<WorkGridEntity>().SingleAsync(x => x.Code == request.WorkGridCode);
var workGrid = await _dbContext.Queryable<WorkGridEntity>()
.LeftJoin<GainfoEntity>((x, ga) => x.LeaderUserCode == ga.Code)
.Where(x => x.Code == request.WorkGridCode)
.Select((x, ga) => new
{
x.Code, x.Name,
x.LeaderUserCode,
LeaderUserName = ga.Name
})
.SingleAsync();
workGrid.ThrowIfNull("工作网格不存在");
var timeSetting = await _dbContext.Queryable<WorkGridTimePeriodEntity>().Where(x => x.Type == request.PeriodType).Select(x => new { x.Start, x.Before }).SingleAsync();
var currentLimit = request.Date.ToDateTime(timeSetting.Start.Add(-TimeSpan.FromSeconds(timeSetting.Before)));
(DateTime.Now >= currentLimit).ThrowIfTrue("当前时间不可修改排班信息");
var data = await _dbContext.Queryable<WorkGridScheduleEntity>()
.Where(x => x.WorkGridCode == request.WorkGridCode)
.Where(x => x.Date == request.Date)
@@ -111,8 +167,36 @@ public class WorkGridScheduleService : IWorkGridScheduleService
.Where(x => request.UserCodes.Contains(x.UserCode))
.ToListAsync();
if (data.Any())
{
await _dbContext.DeleteAsync(data);
await _operateLog.LogAsync(OperateLogType.WorkGrid, $"移除网格({workGrid.Name}){request.Date.ToString("yyyy-M-d")}的{request.PeriodType.GetDescription()}人员:{request.UserCodes.Join(",")}");
try
{
var userCodes = data.Select(x => x.UserCode).Distinct().ToList();
var gainfos = await _dbContext.Queryable<GainfoEntity>().Where(x => userCodes.Contains(x.Code)).Select(x => new { x.Code, x.Name }).ToListAsync();
foreach (var gainfo in gainfos)
{
try
{
await _jinkoApiService.SendWorkMessageAsync(new JinkoSendWorkMessageRequest
{
Content = $"{gainfo.Name}({gainfo.Code})你好,系统检测到你被{workGrid.Name}网格的网格长{workGrid.LeaderUserName}({workGrid.LeaderUserCode})删除了{request.Date.ToString("yyyy年MM月dd日")}{request.PeriodType.GetDescription()},如有疑问,请联系网格长!",
WorkCodes = new List<string> { gainfo.Code }
});
}
catch (Exception e)
{
_logger.LogError("推送信息错误{code}:{error}", gainfo.Code, e.Message);
}
}
}
catch (Exception e)
{
_logger.LogError("推送信息错误remove,{error}", e.Message);
}
}
}
/// <inheritdoc />

View File

@@ -238,7 +238,7 @@ public class DeviceUploadLogService : IDeviceUploadLogService
}
catch (Exception e)
{
_logger.LogError(e, "推送信息错误:{error}", e.Message);
_logger.LogError(e, "推送信息错误schedule:{error}", e.Message);
}
}
}