add 排班操作通知
This commit is contained in:
@@ -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 />
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user