using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; using Dlhis.Basic.Device.Services; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.UnifyResultAndValidation.Aop; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Dlhis.Basic.Device.Controllers; /// /// 设备控制器 /// [Authorize] [Route("api/[controller]")] [ApiController] public class DevicesController : ControllerBase { private readonly IDeviceService _deviceService; private readonly IDeviceTemplateService _deviceTemplateService; private readonly IDbContext _dbContext; private readonly IDeviceConnectService _deviceConnectService; private readonly IConfiguration _configuration; public DevicesController(IDeviceService deviceService, IDeviceTemplateService deviceTemplateService, IDbContext dbContext, IDeviceConnectService deviceConnectService, IConfiguration configuration) { _deviceService = deviceService; _deviceTemplateService = deviceTemplateService; _dbContext = dbContext; _deviceConnectService = deviceConnectService; _configuration = configuration; } /// /// 设备模板分页 /// /// /// [HttpGet("template/page")] public async Task> GetTemplatePageAsync([FromQuery] DeviceTemplatePageRequest request) { return await _deviceTemplateService.GetPageAsync(request); } /// /// 设备模板保存 /// /// /// [HttpPost("template")] public async Task SaveTemplateAsync(DeviceTemplateSaveRequest request) { await _deviceTemplateService.SaveTemplateAsync(request); } /// /// 设备心跳 /// /// /// [DisableApiLog] [Obsolete("迁移到DeviceConnect")] [HttpPost("heartbeat")] [IgnoreTenant] public async Task HeartbeatAsync(DeviceHeartbeatRequest request) { await _deviceConnectService.HeartbeatAsync(request); } /// /// 设备注册 /// /// /// [Obsolete("迁移到DeviceConnect")] [HttpPost("resigter")] [IgnoreTenant] public async Task RegisterAsync(DeviceRegisterRequest request) { return await _deviceConnectService.RegisterAsync(request); } /// /// 获取激活码 /// /// [HttpPost("resigter-code")] public object GetRegisterCode() { return new { AppId = _configuration.GetSection("RegisterAppId").Value, Key = _configuration.GetSection("RegisterCode").Value }; } /// /// 设备分页 /// /// /// [HttpGet("page")] [DataPermission] public async Task> GetPageAsync([FromQuery] DevicePageRequest request) { return await _deviceService.GetPageAsync(request); } /// /// 设备保存 /// /// /// [HttpPost("save")] [Transactional] public async Task SaveAsync(DeviceSaveRequest request) { await _deviceService.SaveAsync(request); } /// /// 获取尚未设置营业点的设备 /// /// [HttpGet("businessplaces/incompletion")] public async Task> GetNotSetBusinessPlaceDevicesAsync() { return await _deviceConnectService.GetNotSetBusinessPlaceDevicesAsync(); } /// /// 设置设备营业点 /// /// /// [HttpPost("businessplaces")] public async Task SetRegisterBusinessPlaceAsync(DeviceSetResigterBusinessPlaceRequest request) { await _deviceConnectService.SetRegisterBusinessPlaceAsync(request); } /// /// 获取考勤在线/离线设备详情列表 /// /// [HttpGet("onlineStatus/page")] public async Task> GetOnlineStatusPageAsync([FromQuery] DeviceOnlineAndOfflineRequest request) { return await _deviceService.GetOnlineStatusPageAsync(request); } /// /// 批量导入设备信息 /// /// /// [HttpPost("import")] public async Task Import(List request) { await _deviceService.ImportAsync(request); } [HttpPost("test")] [IgnoreTenant] [AllowAnonymous] public async Task Test() { var tasks = new List(); var devices = await _dbContext.Queryable().Where(x => x.TenantId == "2401").Where(x => x.Type == DeviceTypeEnumType.Meal).ToListAsync(); var gainfos = await _dbContext.Queryable() .Where(x => x.Type == GainfoUserTypeEnumType.External || x.Type == GainfoUserTypeEnumType.Outsource) .Where(x => x.Factory == "2401") .ToListAsync(); var gainfoLeaves = await _dbContext.Queryable() .Where(x => x.Type == GainfoUserTypeEnumType.External || x.Type == GainfoUserTypeEnumType.Outsource) .Where(x => x.Factory == "2401") .ToListAsync(); foreach (var device in devices) { foreach (var gainfo in gainfos) { tasks.Add(new DeviceTaskEntity { Type = DeviceTaskEnumType.Delete, DeviceType = DeviceTypeEnumType.Meal, UserId = gainfo.Id, UserNo = gainfo.No, DeviceUniqueNo = device.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, Version = 0, ResultMessage = null, Source = "主动删除2401异常餐饮人员", Priority = 0, TenantId = device.TenantId }); } foreach (var gainfo in gainfoLeaves) { tasks.Add(new DeviceTaskEntity { Type = DeviceTaskEnumType.Delete, DeviceType = DeviceTypeEnumType.Meal, UserId = gainfo.IdentityUserId, UserNo = gainfo.No, DeviceUniqueNo = device.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, Version = 0, ResultMessage = null, Source = "主动删除2401异常餐饮人员", Priority = 0, TenantId = device.TenantId }); } } foreach (var items in tasks.Chunk(1000)) { await _dbContext.InsertAsync(items); } return tasks.Count; } }