From 11a8102f945045ccf8bbae77b327f32af4c85289 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Mon, 24 Mar 2025 10:54:06 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=8E=92=E7=8F=AD=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Request/WorkGridScheduleSaveRequest.cs | 1 + .../Implements/WorkGridScheduleService.cs | 92 ++++++++++++++++++- .../Implements/DeviceUploadLogService.cs | 2 +- 3 files changed, 90 insertions(+), 5 deletions(-) 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); } } }