feat 网格增加其他上传
This commit is contained in:
@@ -230,11 +230,4 @@ public class WorkGridsController : ControllerBase
|
||||
{
|
||||
await _workGridScheduleService.ManuallyUploadAsync(logIds);
|
||||
}
|
||||
|
||||
|
||||
[HttpPost("test")]
|
||||
public async Task<object> Test(WorkGridScheduleSaveRequest request)
|
||||
{
|
||||
return await _workGridScheduleService.TestAsync(request);
|
||||
}
|
||||
}
|
||||
@@ -68,11 +68,4 @@ public interface IWorkGridScheduleService : IScopeDependency
|
||||
/// <param name="reason"></param>
|
||||
/// <returns></returns>
|
||||
Task ManuallyCancelAsync(long id, string reason);
|
||||
|
||||
/// <summary>
|
||||
/// 测试接口
|
||||
/// </summary>
|
||||
/// <param name="request">排班保存请求参数</param>
|
||||
/// <returns>测试结果</returns>
|
||||
Task<object> TestAsync(WorkGridScheduleSaveRequest request);
|
||||
}
|
||||
@@ -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<WorkGridScheduleEntity> toInserts, WorkGridTimePeriodEnumType periodType)
|
||||
{
|
||||
//仅部分网格推送SAP
|
||||
var workGridCodes = new List<string>
|
||||
{
|
||||
//推送到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<WorkGridScheduleEntity>()
|
||||
.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<WorkGridScheduleEntity>()
|
||||
.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<string> userCodes,
|
||||
string workGridName, string workGridLeaderName, string workGridLeaderCode,
|
||||
DateOnly date, WorkGridTimePeriodEnumType periodType)
|
||||
{
|
||||
//todo sub pub
|
||||
//推送排班通知
|
||||
try
|
||||
{
|
||||
var codeAndNameList = await _dbContext.Queryable<GainfoEntity>().Where(x => request.UserCodes.Contains(x.Code))
|
||||
var codeAndNameList = await _dbContext.Queryable<GainfoEntity>().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<string> { 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<WorkGridTimePeriodEntity>()
|
||||
.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<DeviceUploadLogEntity>()
|
||||
.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<object> TestAsync(WorkGridScheduleSaveRequest request)
|
||||
{
|
||||
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,
|
||||
x.MaxConsecutiveLimitCount
|
||||
})
|
||||
.SingleAsync();
|
||||
workGrid.ThrowIfNull("工作网格不存在");
|
||||
|
||||
var timeSetting = await _dbContext.Queryable<WorkGridTimePeriodEntity>().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<List<WorkGridScheduleResponse>> GetListAsync(Guid workGridCode, DateOnly date, WorkGridTimePeriodEnumType? periodType)
|
||||
{
|
||||
var data = await _dbContext.Queryable<WorkGridScheduleEntity>()
|
||||
|
||||
Reference in New Issue
Block a user