diff --git a/Src/Dlhis.Basic/WorkGrids/Controllers/WorkGridsController.cs b/Src/Dlhis.Basic/WorkGrids/Controllers/WorkGridsController.cs index 7bb4f8a7..f5e14f07 100644 --- a/Src/Dlhis.Basic/WorkGrids/Controllers/WorkGridsController.cs +++ b/Src/Dlhis.Basic/WorkGrids/Controllers/WorkGridsController.cs @@ -230,11 +230,4 @@ public class WorkGridsController : ControllerBase { await _workGridScheduleService.ManuallyUploadAsync(logIds); } - - - [HttpPost("test")] - public async Task Test(WorkGridScheduleSaveRequest request) - { - return await _workGridScheduleService.TestAsync(request); - } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/WorkGrids/Services/IWorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/IWorkGridScheduleService.cs index 5a3c9423..fb3dd0a0 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/IWorkGridScheduleService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/IWorkGridScheduleService.cs @@ -68,11 +68,4 @@ public interface IWorkGridScheduleService : IScopeDependency /// /// Task ManuallyCancelAsync(long id, string reason); - - /// - /// 测试接口 - /// - /// 排班保存请求参数 - /// 测试结果 - Task TestAsync(WorkGridScheduleSaveRequest request); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs index 806a0689..a1246380 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs @@ -142,52 +142,90 @@ 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(",")}"); - if (workGrid.Code.ToString() == "769ace3b-28fa-4c4e-ba46-fc399a25085f") + + await PublishScheduleToSapAsync(workGrid.Code, toInserts, request.PeriodType); + + await NoticeScheduleMessageAsync(request.UserCodes, workGrid.Name, workGrid.LeaderUserName, workGrid.LeaderUserCode, request.Date, request.PeriodType); + } + + private async Task PublishScheduleToSapAsync(Guid workGridCode, List toInserts, WorkGridTimePeriodEnumType periodType) + { + //仅部分网格推送SAP + var workGridCodes = new List { - //推送到SAP - var items = toInserts.Select(x => new SyncWorkShiftDayItem - { - UserCode = x.UserCode, - Begin = x.Date.ToString("yyyyMMdd"), - End = x.Date.ToString("yyyyMMdd"), - Plan = request.PeriodType == WorkGridTimePeriodEnumType.Day ? "JK03" : "JK04", - Operate = "INS" - }).ToList(); + "769ace3b-28fa-4c4e-ba46-fc399a25085f", + "90e79f00-d203-4a4d-a08e-fd129ea02734", + "9901a303-c537-4db4-9b83-0bc5b3e713ab", + "6e37be58-75a3-44d8-bb6e-4faf9d6dbc39", + "cdea5dd2-42d6-44a5-bd0d-9a339f788174", + "c983e6d8-0626-4171-8313-4cd4379975a2", + "a4bad4f4-a041-47e8-b7ee-8c480babf7d6", + "5f6bf4ae-f7d1-47ce-9dc0-82f5f0cadff0", + "47416294-724f-4a63-b422-bb6c43466554", + "33fb2070-f8ec-4762-b7f7-4073eb68a41d", + "ee509a29-c040-4e49-964d-d7e3a9094a0f", + "25aac70d-73ca-465a-bd70-fcd5999d1476", + "aa1e4052-c1e8-4213-bfb5-aacf00eb480f", + "6fd4df7e-6278-4622-8d9c-77e29f7fad1d", + "5ea25d26-1ce2-4760-9bee-c21a8ff78ff6", + "fe61c0d7-dda8-4570-afd4-be2b28def6b3", + "67ccd75f-7743-48a0-b89e-3d90fd208c8a", + "375976e4-b4ca-424c-bfb9-a81f5ff02c5d", + "af588a53-7757-48d2-a078-280be0b471e4", + "a54365db-624d-4d24-8840-465a7cd0d760" + }; - var response = await _jinkoJipApi.SyncWorkShiftAsync(new SyncWorkShiftRequest { Items = items }); - response.Message.IsPresent().ThrowIfTrue("JIP接口返回错误:" + response.Message); - if (response == null || response.Items == null || response.Items.Count == 0) - { - throw new UserFriendlyException("JIP接口返回数据异常,请联系管理员"); - } - - if (response.Items.Any(x => x.Result != "S")) - { - var errorMessages = response.Items.Where(x => x.Result != "S") - .Select(x => $"{x.UserCode}排班新增失败:{x.Message}").Join("\r\n"); - throw new UserFriendlyException(errorMessages); - } - - foreach (var workGridSchedule in toInserts) - { - var msg = response.Items.FirstOrDefault(x => x.UserCode == workGridSchedule.UserCode)?.Message; - await _dbContext.Updateable() - .SetColumns(x => x.SyncResult == msg) - .Where(x => x.WorkGridCode == workGrid.Code) - .Where(x => x.UserCode == workGridSchedule.UserCode) - .Where(x => x.Date == workGridSchedule.Date) - .Where(x => x.PeriodType == workGridSchedule.PeriodType) - .ExecuteCommandAsync(); - } + if (!workGridCodes.Contains(workGridCode.ToString())) + { + return; } - + //推送到SAP + var items = toInserts.Select(x => new SyncWorkShiftDayItem + { + UserCode = x.UserCode, + Begin = x.Date.ToString("yyyyMMdd"), + End = x.Date.ToString("yyyyMMdd"), + Plan = periodType == WorkGridTimePeriodEnumType.Day ? "JK03" : "JK04", + Operate = "INS" + }).ToList(); + var response = await _jinkoJipApi.SyncWorkShiftAsync(new SyncWorkShiftRequest { Items = items }); + response.Message.IsPresent().ThrowIfTrue("JIP接口返回错误:" + response.Message); + if (response == null || response.Items == null || response.Items.Count == 0) + { + throw new UserFriendlyException("JIP接口返回数据异常,请联系管理员"); + } + + if (response.Items.Any(x => x.Result != "S")) + { + var errorMessages = response.Items.Where(x => x.Result != "S") + .Select(x => $"{x.UserCode}排班新增失败:{x.Message}").Join("\r\n"); + throw new UserFriendlyException(errorMessages); + } + + foreach (var workGridSchedule in toInserts) + { + var msg = response.Items.FirstOrDefault(x => x.UserCode == workGridSchedule.UserCode)?.Message; + await _dbContext.Updateable() + .SetColumns(x => x.SyncResult == msg) + .Where(x => x.WorkGridCode == workGridCode) + .Where(x => x.UserCode == workGridSchedule.UserCode) + .Where(x => x.Date == workGridSchedule.Date) + .Where(x => x.PeriodType == workGridSchedule.PeriodType) + .ExecuteCommandAsync(); + } + } + + private async Task NoticeScheduleMessageAsync(List userCodes, + string workGridName, string workGridLeaderName, string workGridLeaderCode, + DateOnly date, WorkGridTimePeriodEnumType periodType) + { //todo sub pub //推送排班通知 try { - var codeAndNameList = await _dbContext.Queryable().Where(x => request.UserCodes.Contains(x.Code)) + var codeAndNameList = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)) .Select(x => new { x.Code, x.Name }) .ToListAsync(); @@ -197,7 +235,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService { await _jinkoApiService.SendWorkMessageAsync(new DingTalkWorkMessageRequest { - Content = $"{gainfo.Name}({gainfo.Code})你好,系统检测到你被{workGrid.Name}网格的网格长{workGrid.LeaderUserName}({workGrid.LeaderUserCode})安排了{request.Date.ToString("yyyy年MM月dd日")}{request.PeriodType.GetDescription()},请按时上班", + Content = $"{gainfo.Name}({gainfo.Code})你好,系统检测到你被{workGridName}网格的网格长{workGridLeaderName}({workGridLeaderCode})安排了{date.ToString("yyyy年MM月dd日")}{periodType.GetDescription()},请按时上班", WorkCodes = new List { gainfo.Code } }); } @@ -209,7 +247,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService } catch (Exception e) { - _logger.LogError("推送信息错误save:{error}", e.Message); + _logger.LogError("推送信息错误:{error}", e.Message); } } @@ -278,9 +316,10 @@ public class WorkGridScheduleService : IWorkGridScheduleService { workGridSchedule.SyncResult = response.Items.FirstOrDefault(x => x.UserCode == workGridSchedule.UserCode)?.Message; } + await _dbContext.UpdateAsync(data); } - + await _dbContext.DeleteAsync(data); await _operateLog.LogAsync(OperateLogType.WorkGrid, $"移除网格({workGrid.Name}){request.Date.ToString("yyyy-M-d")}的{request.PeriodType.GetDescription()}人员:{request.UserCodes.Join(",")}"); @@ -324,7 +363,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService workGridSchedule.ThrowIfNull("排班信息不存在或不可操作"); workGridSchedule.IsCancel.ThrowIfTrue("排班信息已被取消,请勿重复操作"); - + //获取班次的时间配置 var timeSetting = await _dbContext.Queryable() .Where(x => x.Type == workGridSchedule.PeriodType) @@ -335,13 +374,13 @@ public class WorkGridScheduleService : IWorkGridScheduleService var start = workGridSchedule.Date.ToDateTime(timeSetting.Start); var end = workGridSchedule.Date.ToDateTime(TimeOnly.MaxValue); - + //const string filterString = "{\"IsError\":true"; - + var exists = await _dbContext.Queryable() .Where(x => x.UserUniqueNo == workGridSchedule.UserCode) .Where(x => x.RaiseDateTime >= start && x.RaiseDateTime <= end) - .Where(x=>x.Type == DeviceUploadLogTypeEnumType.Attendance) + .Where(x => x.Type == DeviceUploadLogTypeEnumType.Attendance) .AnyAsync(); exists.ThrowIfTrue("排班信息已存在打卡记录,请勿取消"); @@ -349,32 +388,6 @@ public class WorkGridScheduleService : IWorkGridScheduleService await _workGridScheduleRepository.CancelAsync(id, reason); } - public async Task TestAsync(WorkGridScheduleSaveRequest request) - { - 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, - x.MaxConsecutiveLimitCount - }) - .SingleAsync(); - workGrid.ThrowIfNull("工作网格不存在"); - - var timeSetting = await _dbContext.Queryable().Where(x => x.Type == request.PeriodType).Select(x => new { x.Start, x.Before }).SingleAsync(); - timeSetting.ThrowIfNull("工作网格时间尚未配置,无法操作"); - - var currentLimit = request.Date.ToDateTime(timeSetting.Start.Add(-TimeSpan.FromHours(1))); - (DateTime.Now >= currentLimit).ThrowIfTrue("当前时间不可修改排班信息"); - - return currentLimit; - } - public async Task> GetListAsync(Guid workGridCode, DateOnly date, WorkGridTimePeriodEnumType? periodType) { var data = await _dbContext.Queryable()