diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enums/DeviceCellStatusEnum.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enums/DeviceCellStatusEnum.cs index df5e490..04b2c4f 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enums/DeviceCellStatusEnum.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enums/DeviceCellStatusEnum.cs @@ -34,5 +34,11 @@ namespace NCC.Extend.Entitys.Enums /// [Description("已租接")] 已租接 = 5, + + /// + /// 充电完成 + /// + [Description("充电完成")] + 充电完成 = 6, } } \ No newline at end of file diff --git a/netcore/src/Modularity/Extend/NCC.Extend/UavDeviceService.cs b/netcore/src/Modularity/Extend/NCC.Extend/UavDeviceService.cs index 7e87d29..ad391f0 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/UavDeviceService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/UavDeviceService.cs @@ -684,7 +684,6 @@ namespace NCC.Extend.UavDevice } #endregion - #region 机柜获取MQTT配置 /// /// 机柜获取MQTT配置 @@ -989,5 +988,101 @@ namespace NCC.Extend.UavDevice return PageResult.SqlSugarPageResult(data); } #endregion + + #region 修改时间超个半小时的无人机改为充电完成 + + /// + /// 将超过30分钟充电状态的无人机格子状态改为充电完成 + /// + /// + [HttpPost("UpdateChargingStatusToComplete")] + public async Task UpdateChargingStatusToComplete() + { + try + { + // 计算30分钟前的时间 + var thirtyMinutesAgo = DateTime.Now.AddMinutes(-30); + + // 查询状态为充电且更新时间超过30分钟的无人机格子 + var chargingCells = await _db.Queryable().Where(x => x.Status == DeviceCellStatusEnum.充电.GetHashCode() && x.UpdateTime.HasValue && + x.UpdateTime.Value < thirtyMinutesAgo) + .ToListAsync(); + + if (chargingCells == null || chargingCells.Count == 0) + { + return new { success = true, message = "没有需要更新的充电状态格子", updatedCount = 0 }; + } + + // 批量更新状态为充电完成 + var updateCount = await _db.Updateable() + .SetColumns(x => new UavDeviceCellEntity + { + Status = DeviceCellStatusEnum.充电完成.GetHashCode() + }) + .Where(x => chargingCells.Select(c => c.Id).Contains(x.Id)) + .ExecuteCommandAsync(); + + Log.Information($"成功将 {updateCount} 个充电状态超过30分钟的无人机格子状态更新为充电完成"); + + return new + { + success = true, + message = $"成功更新 {updateCount} 个无人机格子状态为充电完成", + updatedCount = updateCount, + updatedCells = chargingCells.Select(x => new { id = x.Id, cellCode = x.CellCode, deviceId = x.DeviceId }) + }; + } + catch (Exception ex) + { + Log.Error($"更新充电状态失败: {ex.Message}"); + return new { success = false, message = $"更新失败: {ex.Message}", updatedCount = 0 }; + } + } + + /// + /// 定时任务:自动更新超过30分钟的充电状态 + /// + /// + [HttpPost("AutoUpdateChargingStatus")] + public async Task AutoUpdateChargingStatus() + { + try + { + // 计算30分钟前的时间 + var thirtyMinutesAgo = DateTime.Now.AddMinutes(-30); + + // 查询并更新状态 + var updateCount = await _db.Updateable() + .SetColumns(x => new UavDeviceCellEntity + { + Status = DeviceCellStatusEnum.充电完成.GetHashCode(), + UpdateTime = DateTime.Now + }) + .Where(x => x.Status == DeviceCellStatusEnum.充电.GetHashCode() && + x.UpdateTime.HasValue && + x.UpdateTime.Value < thirtyMinutesAgo) + .ExecuteCommandAsync(); + + if (updateCount > 0) + { + Log.Information($"定时任务:自动将 {updateCount} 个充电状态超过30分钟的无人机格子状态更新为充电完成"); + } + + return new + { + success = true, + message = $"自动更新完成,共更新 {updateCount} 个格子", + updatedCount = updateCount, + updateTime = DateTime.Now + }; + } + catch (Exception ex) + { + Log.Error($"自动更新充电状态失败: {ex.Message}"); + return new { success = false, message = $"自动更新失败: {ex.Message}", updatedCount = 0 }; + } + } + + #endregion } }