// 大名科技(天津)有限公司版权所有 电话:18020030720 QQ:515096995 // // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证 using System.ComponentModel; using Admin.NET.Bodk.Core; using Admin.NET.Bodk.Device.Entities; using Admin.NET.Bodk.Device.Models; using Admin.NET.Core; using Admin.NET.Core.Service; using Furion.DependencyInjection; using Furion.FriendlyException; using Mapster; using Microsoft.AspNetCore.Mvc; using NewLife.Caching; namespace Admin.NET.Bodk.Device; [ApiDescriptionSettings(Groups = new[] { "Bodk Groups" }, Name = "Device", Description = "设备服务")] public class DeviceService( UserManager userManager, SysOrgService sysOrgService, SysUserService sysUserService, SqlSugarRepository repository, ICache cache) : ServiceBase(userManager, sysOrgService, sysUserService), ITransient { [ApiDescriptionSettings(Name = "Page"), HttpPost] [DisplayName("获取设备分页列表")] public async Task> Page(DeviceQueryInput queryInput) { var queryable = await GetDataOutOfOrg(repository.AsQueryable()); return await queryable.WhereIF(!string.IsNullOrWhiteSpace(queryInput.SerialNumber), u => queryInput.SerialNumber != null && u.SerialNumber.Contains(queryInput.SerialNumber)) .WhereIF(!string.IsNullOrWhiteSpace(queryInput.Name), u => queryInput.Name != null && u.Name.Contains(queryInput.Name)) .WhereIF(!string.IsNullOrWhiteSpace(queryInput.Name), u => queryInput.Name != null && u.Name.Contains(queryInput.Name)) .WhereIF(queryInput.Id is not null, u => u.Id == queryInput.Id) .WhereIF(queryInput.DeviceType is not null, u => u.DeviceType == queryInput.DeviceType) .Select(u => u.Adapt()) .Mapper(u => u.Online = cache.Get($"bodk:device:{u.SerialNumber}:summary:online")) .WhereIF(queryInput.Online is not null, u => u.Online == queryInput.Online) .ToPagedListAsync(queryInput.Page, queryInput.PageSize); } [ApiDescriptionSettings(Name = "Add"), HttpPost] [DisplayName("新增设备")] public async Task AddDevice(AddDeviceInput input) { var isExist = await repository.AsQueryable().AnyAsync(u => u.SerialNumber == input.SerialNumber); if (isExist) throw Oops.Oh(ErrorCodeEnum.Device1000); var entity = input.Adapt(); entity.OrgId = UserManager.OrgId; return await repository.InsertReturnBigIdentityAsync(entity); } [ApiDescriptionSettings(Name = "Update"), HttpPost] [DisplayName("更新设备")] public async Task UpdateDevice(UpdateDeviceInput input) { var isExist = await repository.AsQueryable().AnyAsync(u => u.Id == input.Id); if (!isExist) throw Oops.Oh("要更新的设备不存在"); var entity = await repository.GetByIdAsync(input.Id); entity.DeviceType = input.DeviceType ?? entity.DeviceType; entity.Name = input.Name ?? entity.Name; entity.OrgId = input.OrgId ?? entity.OrgId; await repository.UpdateAsync(entity); } [ApiDescriptionSettings(Name = "Delete"), HttpPost] [DisplayName("删除设备")] public async Task DeleteDevice(long id) { var isExist = await repository.AsQueryable().AnyAsync(u => u.Id == id); if (!isExist) throw Oops.Oh("要删除的设备不存在"); await repository.DeleteByIdAsync(id); } }