fix 处理已知异常
This commit is contained in:
@@ -14,6 +14,7 @@ using Dlhis.Jip.Api.Requests;
|
||||
using Dlhis.ScheduledTask.DeviceUploadLog.Request;
|
||||
using Dlhis.ScheduledTask.DeviceUploadLog.Response;
|
||||
using Kurisu.AspNetCore.Authentication.Abstractions;
|
||||
using Kurisu.AspNetCore.Cache;
|
||||
using Kurisu.AspNetCore.CustomClass;
|
||||
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||
@@ -25,6 +26,7 @@ namespace Dlhis.ScheduledTask.DeviceUploadLog.Services.Implements;
|
||||
public class DeviceUploadLogService : IDeviceUploadLogService
|
||||
{
|
||||
private readonly IDbContext _dbContext;
|
||||
private readonly RedisCache _redisCache;
|
||||
private readonly IDormitoryRoomPowerSwitchApi _dormitoryRoomPowerSwitchApi;
|
||||
private readonly ICurrentUser _currentUser;
|
||||
private readonly IJinkoJipApi _jinkoJipApi;
|
||||
@@ -32,6 +34,7 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
||||
private readonly IDingTalkApi _dingTalkApi;
|
||||
|
||||
public DeviceUploadLogService(IDbContext dbContext,
|
||||
RedisCache redisCache,
|
||||
IDormitoryRoomPowerSwitchApi dormitoryRoomPowerSwitchApi,
|
||||
ICurrentUser currentUser,
|
||||
IJinkoJipApi jinkoJipApi,
|
||||
@@ -39,6 +42,7 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
||||
IDingTalkApi dingTalkApi)
|
||||
{
|
||||
_dbContext = dbContext;
|
||||
_redisCache = redisCache;
|
||||
_dormitoryRoomPowerSwitchApi = dormitoryRoomPowerSwitchApi;
|
||||
_currentUser = currentUser;
|
||||
_jinkoJipApi = jinkoJipApi;
|
||||
@@ -310,39 +314,44 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
||||
_logger.LogInformation("MCB未开启, userCode:{userCode} directionType:{directionType}", userCode, directionType);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var room = await _dbContext.Queryable<DormitoryRoomEntity>().Where(x => x.RoomId == roomInfo.RoomId).SingleAsync();
|
||||
if (room == null)
|
||||
{
|
||||
room = new DormitoryRoomEntity
|
||||
//这里会有并发问题,加分布式锁
|
||||
await using var lockHandler = await _redisCache.LockAsync("dormitory_room_key_" + roomInfo.RoomId, TimeSpan.FromSeconds(10), retryCount: 5);
|
||||
if (lockHandler.Acquired)
|
||||
{
|
||||
EFenceCode = eFenceCode,
|
||||
RoomId = roomInfo.RoomId,
|
||||
RoomNo = roomInfo.RoomNo,
|
||||
HotelId = roomInfo.HotelId,
|
||||
PowerSwitch = true
|
||||
};
|
||||
|
||||
await _dbContext.InsertAsync(room);
|
||||
|
||||
var personEntities = roomInfo.Persons.Select(x => new DormitoryRoomPersonEntity
|
||||
room = new DormitoryRoomEntity
|
||||
{
|
||||
EFenceCode = eFenceCode,
|
||||
RoomId = roomInfo.RoomId,
|
||||
UserCode = x.UserCode,
|
||||
UserName = x.UserName,
|
||||
In = true,
|
||||
IsDeleted = false
|
||||
})
|
||||
.ToList();
|
||||
RoomNo = roomInfo.RoomNo,
|
||||
HotelId = roomInfo.HotelId,
|
||||
PowerSwitch = true
|
||||
};
|
||||
|
||||
await _dbContext.InsertAsync(personEntities);
|
||||
await _dbContext.InsertAsync(room);
|
||||
|
||||
var person = await _dbContext.Queryable<DormitoryRoomPersonEntity>()
|
||||
.Where(x => x.RoomId != roomInfo.RoomId && x.UserCode == userCode)
|
||||
.FirstAsync();
|
||||
if (person != null)
|
||||
{
|
||||
await _dbContext.DeleteAsync(person);
|
||||
var personEntities = roomInfo.Persons.Select(x => new DormitoryRoomPersonEntity
|
||||
{
|
||||
RoomId = roomInfo.RoomId,
|
||||
UserCode = x.UserCode,
|
||||
UserName = x.UserName,
|
||||
In = true,
|
||||
IsDeleted = false
|
||||
})
|
||||
.ToList();
|
||||
|
||||
await _dbContext.InsertAsync(personEntities);
|
||||
|
||||
var person = await _dbContext.Queryable<DormitoryRoomPersonEntity>()
|
||||
.Where(x => x.RoomId != roomInfo.RoomId && x.UserCode == userCode)
|
||||
.FirstAsync();
|
||||
if (person != null)
|
||||
{
|
||||
await _dbContext.DeleteAsync(person);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user