add 排班操作通知
This commit is contained in:
@@ -24,6 +24,7 @@ public class WorkGridScheduleSaveRequest : IValidatableObject
|
||||
/// <summary>
|
||||
/// 人员codes
|
||||
/// </summary>
|
||||
[MinLength(1, ErrorMessage = "人员不可为空")]
|
||||
public List<string> UserCodes { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -238,7 +238,7 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "推送信息错误:{error}", e.Message);
|
||||
_logger.LogError(e, "推送信息错误schedule:{error}", e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user