diff --git a/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleSaveRequest.cs b/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleSaveRequest.cs
index d0f26aef..359ace8b 100644
--- a/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleSaveRequest.cs
+++ b/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleSaveRequest.cs
@@ -24,6 +24,7 @@ public class WorkGridScheduleSaveRequest : IValidatableObject
///
/// 人员codes
///
+ [MinLength(1, ErrorMessage = "人员不可为空")]
public List UserCodes { get; set; }
///
diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs
index 95d40067..edfe2b28 100644
--- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs
+++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs
@@ -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 _logger;
+ private readonly IJinkoApiService _jinkoApiService;
private readonly ICurrentUser _currentUser;
public WorkGridScheduleService(IDbContext dbContext,
IJinkoJipApi jinkoJipApi,
IOperateLog operateLog,
+ ILogger 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().SingleAsync(x => x.Code == request.WorkGridCode);
+ request.UserCodes = request.UserCodes.Distinct().ToList();
+
+ var workGrid = await _dbContext.Queryable()
+ .LeftJoin((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().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().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 { gainfo.Code }
+ });
+ }
+ catch (Exception e)
+ {
+ _logger.LogError("推送信息错误{code}:{error}", gainfo.Code, e.Message);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ _logger.LogError("推送信息错误save,{error}", e.Message);
+ }
}
///
public async Task RemoveAsync(WorkGridScheduleSaveRequest request)
{
- var workGrid = await _dbContext.Queryable().SingleAsync(x => x.Code == request.WorkGridCode);
+ var workGrid = await _dbContext.Queryable()
+ .LeftJoin((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().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()
.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();
- await _dbContext.DeleteAsync(data);
- await _operateLog.LogAsync(OperateLogType.WorkGrid, $"移除网格({workGrid.Name}){request.Date.ToString("yyyy-M-d")}的{request.PeriodType.GetDescription()}人员:{request.UserCodes.Join(",")}");
+ 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().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 { gainfo.Code }
+ });
+ }
+ catch (Exception e)
+ {
+ _logger.LogError("推送信息错误{code}:{error}", gainfo.Code, e.Message);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ _logger.LogError("推送信息错误remove,{error}", e.Message);
+ }
+ }
}
///
diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs
index a6207874..abb174b5 100644
--- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs
+++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs
@@ -238,7 +238,7 @@ public class DeviceUploadLogService : IDeviceUploadLogService
}
catch (Exception e)
{
- _logger.LogError(e, "推送信息错误:{error}", e.Message);
+ _logger.LogError(e, "推送信息错误schedule:{error}", e.Message);
}
}
}