From 01ecfc2a7004eae56c890e1132cdb049aa61be51 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 28 Aug 2024 16:03:54 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BC=98=E5=8C=96=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implements/SapBusinessTripService.cs | 198 +++++++++--------- 1 file changed, 94 insertions(+), 104 deletions(-) diff --git a/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs b/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs index 87d30c21..6bdee989 100644 --- a/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs +++ b/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs @@ -11,139 +11,129 @@ using Kurisu.AspNetCore.Utils.Extensions; using Mapster; using SqlSugar; -namespace Dlhis.ScheduledTask.Common.Services.Implements +namespace Dlhis.ScheduledTask.Common.Services.Implements; + +public class SapBusinessTripService : ISapBusinessTripService { - public class SapBusinessTripService : ISapBusinessTripService + private readonly IJinkoJIPService _jinkoJipService; + private readonly IDbContext _dbContext; + private readonly IDevicePermissionApi _devicePermissionApi; + private readonly ILogger _logger; + + public SapBusinessTripService(IJinkoJIPService jinkoJipService, IDbContext dbContext, IDevicePermissionApi devicePermissionApi, ILogger logger) { - private readonly IJinkoJIPService _jinkoJipService; - private readonly IDbContext _dbContext; - private readonly IDevicePermissionApi _devicePermissionApi; - private readonly ILogger _logger; + _jinkoJipService = jinkoJipService; + _dbContext = dbContext; + _devicePermissionApi = devicePermissionApi; + _logger = logger; + } - public SapBusinessTripService(IJinkoJIPService jinkoJipService, IDbContext dbContext, IDevicePermissionApi devicePermissionApi, ILogger logger) + /// + public async Task HandlerBusinessTripsByFactoryAsync(string factory) + { + var today = DateTime.Today; + var yesterday = today.AddDays(-1); + + try { - _jinkoJipService = jinkoJipService; - _dbContext = dbContext; - _devicePermissionApi = devicePermissionApi; - _logger = logger; - } - - /// - public async Task HandlerBusinessTripsByFactoryAsync(string factory) - { - var today = DateTime.Today; - var lastDay = today.AddDays(-1); - - try + var tripResponse = await _jinkoJipService.GetTravelInfosByFactoryAsync(today, today, factory); + foreach (var tripInfoItem in tripResponse.Items.Where(x => x.Destination.IsPresent())) { - var tripResponse = await _jinkoJipService.GetTravelInfosByFactoryAsync(today, today, factory); - foreach (var tripInfoItem in tripResponse.Items.Where(x => x.Destination.IsPresent())) + if (await _dbContext.Queryable().Where(x => x.Code == tripInfoItem.Code + && x.BeginDate == tripInfoItem.BeginDate + && x.EndDate == tripInfoItem.EndDate + && x.Destination == factory).AnyAsync()) { - if (await _dbContext.Queryable().Where(x => x.Code == tripInfoItem.Code - && x.BeginDate == tripInfoItem.BeginDate - && x.EndDate == tripInfoItem.EndDate).AnyAsync()) - { - continue; - } - - var entity = tripInfoItem.Adapt(); - entity.Status = BusinessTripStatusEnumType.Wait; - await _dbContext.InsertAsync(entity); + continue; } - //获取今天和昨天的出差数据 - var tripInfos = await _dbContext.Queryable() - .Where(x => (SqlFunc.DateIsSame(x.BeginDate, today) && SqlFunc.DateIsSame(x.BeginDate, today)) - || (SqlFunc.DateIsSame(x.BeginDate, lastDay) && SqlFunc.DateIsSame(x.BeginDate, lastDay))) - .Where(x => !SqlFunc.IsNullOrEmpty(x.Destination)) - .Where(x => x.Status == BusinessTripStatusEnumType.Wait) - .Where(x => x.Destination == factory) - .ToListAsync(); + var entity = tripInfoItem.Adapt(); + entity.Status = BusinessTripStatusEnumType.Wait; + await _dbContext.InsertAsync(entity); + } - var tripGroup = await _dbContext.Queryable() - .Where(x => x.Type == DeviceTypeEnumType.Door) - .Where(x => x.TenantId == factory) - .Where(x => x.IsBusinessTrip) - .SingleAsync(); + //获取今天和昨天的出差数据 + var tripInfos = await _dbContext.Queryable() + .Where(x => (SqlFunc.DateIsSame(x.BeginDate, today) && SqlFunc.DateIsSame(x.BeginDate, today)) + || (SqlFunc.DateIsSame(x.BeginDate, yesterday) && SqlFunc.DateIsSame(x.BeginDate, yesterday))) + .Where(x => !SqlFunc.IsNullOrEmpty(x.Destination)) + .Where(x => x.Status == BusinessTripStatusEnumType.Wait) + .Where(x => x.Destination == factory) + .ToListAsync(); - var userCodes = tripInfos.Select(x => x.Code).Distinct().ToList(); - var gainfos = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)).ToListAsync(); + //获取分组信息 + var tripGroup = await _dbContext.Queryable() + .Where(x => x.Type == DeviceTypeEnumType.Door) + .Where(x => x.TenantId == factory) + .Where(x => x.IsBusinessTrip) + .SingleAsync(); - foreach (var gainfo in gainfos) + var userCodes = tripInfos.Select(x => x.Code).Distinct().ToList(); + var gainfos = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)).ToListAsync(); + + foreach (var gainfo in gainfos) + { + try { var myTripInfos = tripInfos.Where(x => x.Code == gainfo.Code).ToList(); - var todayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == today && x.EndDate == today); - var lastDayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == lastDay && x.EndDate == lastDay); + var yesterdayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == yesterday && x.EndDate == yesterday); //昨天出差数据 + var todayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == today && x.EndDate == today); //今天出差数据 - bool isGenerateOrDeleted = false; + //都为空不处理 + if (yesterdayTripInfo == null && todayTripInfo == null) continue; - if (lastDayTripInfo == null && todayTripInfo != null) - { - isGenerateOrDeleted = true; - todayTripInfo.Status = BusinessTripStatusEnumType.Generated; - } - - if (lastDayTripInfo != null && todayTripInfo == null) - { - lastDayTripInfo.Status = BusinessTripStatusEnumType.Deleted; - } - - if (lastDayTripInfo != null && todayTripInfo != null) + //都不为空则更新数据状态 + if (yesterdayTripInfo != null && todayTripInfo != null) { todayTripInfo.Status = BusinessTripStatusEnumType.Generated; await _dbContext.UpdateAsync(todayTripInfo); continue; } - try + if (yesterdayTripInfo == null) { - var beforeResult = await _devicePermissionApi.GetPermissionUsersInfoAsync(new List { gainfo.Code }); - - if (isGenerateOrDeleted) + todayTripInfo.Status = BusinessTripStatusEnumType.Generated; + await _dbContext.InsertAsync(new DevicePermissionEntity { - await _dbContext.InsertAsync(new DevicePermissionEntity - { - AssignType = AssignTypeEnumType.User, - AssignValue = gainfo.No, - UniqueType = DeviceAssignmentTypeEnumType.Group, - UniqueValue = tripGroup.Code, - TenantId = factory, - Type = tripGroup.Type, - IsDeleted = false - }); - } - else - { - await _dbContext.Updateable() - .SetColumns(x => x.IsDeleted == true) - .Where(x => x.AssignType == AssignTypeEnumType.User) - .Where(x => x.AssignValue == gainfo.No) - .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group) - .Where(x => x.UniqueValue == tripGroup.Code) - .Where(x => x.Type == tripGroup.Type) - .Where(x => x.TenantId == factory) - .ExecuteCommandAsync(); - } - - await _devicePermissionApi.RePermissionUsersInfoAsync(beforeResult.Data); - - if (lastDayTripInfo != null) - await _dbContext.UpdateAsync(lastDayTripInfo); - - if (todayTripInfo != null) - await _dbContext.UpdateAsync(todayTripInfo); + AssignType = AssignTypeEnumType.User, + AssignValue = gainfo.No, + UniqueType = DeviceAssignmentTypeEnumType.Group, + UniqueValue = tripGroup.Code, + TenantId = factory, + Type = tripGroup.Type, + IsDeleted = false + }); + await _dbContext.UpdateAsync(todayTripInfo); } - catch (Exception e) + + if (yesterdayTripInfo != null) { - _logger.LogError(e, "出差自动下发任务失败:{message}", e.Message); + yesterdayTripInfo.Status = BusinessTripStatusEnumType.Deleted; + await _dbContext.Updateable() + .SetColumns(x => x.IsDeleted == true) + .Where(x => x.AssignType == AssignTypeEnumType.User) + .Where(x => x.AssignValue == gainfo.No) + .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group) + .Where(x => x.UniqueValue == tripGroup.Code) + .Where(x => x.Type == tripGroup.Type) + .Where(x => x.TenantId == factory) + .ExecuteCommandAsync(); + await _dbContext.UpdateAsync(yesterdayTripInfo); } + + var beforeResult = await _devicePermissionApi.GetPermissionUsersInfoAsync(new List { gainfo.Code }); + await _devicePermissionApi.RePermissionUsersInfoAsync(beforeResult.Data); + } + catch (Exception e) + { + _logger.LogError(e, "出差自动下发任务失败:{message}", e.Message); } } - catch (Exception e) - { - _logger.LogError(e, "处理{factory}出差数据失败:{message}", factory, e.Message); - } + } + catch (Exception e) + { + _logger.LogError(e, "处理{factory}出差数据失败:{message}", factory, e.Message); } } } \ No newline at end of file