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> /// <summary>
/// 人员codes /// 人员codes
/// </summary> /// </summary>
[MinLength(1, ErrorMessage = "人员不可为空")]
public List<string> UserCodes { get; set; } public List<string> UserCodes { get; set; }
/// <inheritdoc /> /// <inheritdoc />

View File

@@ -1,4 +1,5 @@
using Dlhis.Basic.Common.ApiLog.Services; using Dlhis.Basic.Common.ApiLog.Services;
using Dlhis.Basic.Common.Message;
using Dlhis.Basic.WorkGrids.Request; using Dlhis.Basic.WorkGrids.Request;
using Dlhis.Basic.WorkGrids.Response; using Dlhis.Basic.WorkGrids.Response;
using Dlhis.Constants; using Dlhis.Constants;
@@ -24,22 +25,39 @@ public class WorkGridScheduleService : IWorkGridScheduleService
private readonly IDbContext _dbContext; private readonly IDbContext _dbContext;
private readonly IJinkoJipApi _jinkoJipApi; private readonly IJinkoJipApi _jinkoJipApi;
private readonly IOperateLog _operateLog; private readonly IOperateLog _operateLog;
private readonly ILogger<WorkGridScheduleService> _logger;
private readonly IJinkoApiService _jinkoApiService;
private readonly ICurrentUser _currentUser; private readonly ICurrentUser _currentUser;
public WorkGridScheduleService(IDbContext dbContext, public WorkGridScheduleService(IDbContext dbContext,
IJinkoJipApi jinkoJipApi, IJinkoJipApi jinkoJipApi,
IOperateLog operateLog, IOperateLog operateLog,
ILogger<WorkGridScheduleService> logger,
IJinkoApiService jinkoApiService,
ICurrentUser currentUser) ICurrentUser currentUser)
{ {
_dbContext = dbContext; _dbContext = dbContext;
_jinkoJipApi = jinkoJipApi; _jinkoJipApi = jinkoJipApi;
_operateLog = operateLog; _operateLog = operateLog;
_logger = logger;
_jinkoApiService = jinkoApiService;
_currentUser = currentUser; _currentUser = currentUser;
} }
public async Task SaveAsync(WorkGridScheduleSaveRequest request) 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("工作网格不存在"); workGrid.ThrowIfNull("工作网格不存在");
var timeSetting = await _dbContext.Queryable<WorkGridTimePeriodEntity>().Where(x => x.Type == request.PeriodType).Select(x => new { x.Start, x.Before }).SingleAsync(); 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 _dbContext.InsertAsync(toInserts);
await _operateLog.LogAsync(OperateLogType.WorkGrid, $"新增网格({workGrid.Name}){request.Date.ToString("yyyy-M-d")}的{request.PeriodType.GetDescription()}人员:{request.UserCodes.Join(",")}"); 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 /> /// <inheritdoc />
public async Task RemoveAsync(WorkGridScheduleSaveRequest request) 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("工作网格不存在"); 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>() var data = await _dbContext.Queryable<WorkGridScheduleEntity>()
.Where(x => x.WorkGridCode == request.WorkGridCode) .Where(x => x.WorkGridCode == request.WorkGridCode)
.Where(x => x.Date == request.Date) .Where(x => x.Date == request.Date)
@@ -111,8 +167,36 @@ public class WorkGridScheduleService : IWorkGridScheduleService
.Where(x => request.UserCodes.Contains(x.UserCode)) .Where(x => request.UserCodes.Contains(x.UserCode))
.ToListAsync(); .ToListAsync();
await _dbContext.DeleteAsync(data); if (data.Any())
await _operateLog.LogAsync(OperateLogType.WorkGrid, $"移除网格({workGrid.Name}){request.Date.ToString("yyyy-M-d")}的{request.PeriodType.GetDescription()}人员:{request.UserCodes.Join(",")}"); {
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 /> /// <inheritdoc />

View File

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