using Microsoft.AspNetCore.Mvc; using ZR.Model.Business.Dto; using ZR.Model.Business; using ZR.Service.Business.IBusinessService; using MiniExcelLibs; using ZR.Service.Business; using System.Collections.Generic; using SqlSugar; using static SKIT.FlurlHttpClient.Wechat.Api.Models.WxaBusinessGetLiveInfoResponse.Types; using System.Threading.Tasks; using ZR.Repository; using Aliyun.OSS; //创建时间:2025-08-05 namespace ZR.Admin.WebApi.Controllers.Business { /// /// 端口 /// [Route("business/OdfPorts")] public class OdfPortsController : BaseController { /// /// 端口接口 /// private readonly IOdfPortsService _OdfPortsService; /// /// 机房列表接口 /// private readonly IOdfRoomsService _OdfRoomsService; /// /// /// private readonly ISysUserService _SysUserService; /// ///机架 /// private readonly IOdfRacksService _OdfRacksService; /// /// 框 /// private readonly IOdfFramesService _OdfFramesService; public OdfPortsController(IOdfRoomsService OdfRoomsService, ISysDeptService sysDeptService, ISysUserService sysUserService, IOdfPortsService odfPortsService, IOdfFramesService odfFramesService, IOdfRacksService odfRacksService) { _OdfRoomsService = OdfRoomsService; _SysUserService = sysUserService; _OdfPortsService = odfPortsService; _OdfFramesService = odfFramesService; _OdfRacksService = odfRacksService; } /// /// 查询端口列表 /// /// /// [HttpGet("list")] [ActionPermissionFilter(Permission = "odfports:list")] public IActionResult QueryOdfPorts([FromQuery] OdfPortsQueryDto parm) { var response = _OdfPortsService.GetList(parm); return SUCCESS(response); } /// /// 查询端口列表 /// /// /// [HttpGet("lists")] [ActionPermissionFilter(Permission = "odfports:list")] public IActionResult QueryOdfPorts([FromQuery] OdfPortsQuerysDto parm) { var response = _OdfPortsService.GetList(parm); return SUCCESS(response); } /// /// 查询端口列表 /// /// /// [HttpGet("mlist")] [ActionPermissionFilter(Permission = "odfports:list")] public async Task GetQueryOdfPorts([FromQuery] OdfPortsMQueryDto parm) { var list = await _OdfFramesService.AsQueryable().Where(it => it.RackId == parm.RackId) .Select(it => new OdfPortsMListDto() { Id = it.Id, Name = it.PortsName }).ToListAsync(); foreach (var item in list) { var l = await _OdfPortsService.AsQueryable().Where(it => it.FrameId == item.Id) .Select(it => new OdfPortsMDtoc() { Id = it.Id, Name = it.Name, Status = it.Status, PortNumber = it.PortNumber, RowNumber = it.RowNumber }).ToListAsync(); List row = new List(); l.GroupBy(it => it.RowNumber).ToList().ForEach(g => { var li = l.Where(it => it.RowNumber == g.Key).OrderBy(it => it.PortNumber).Select(it => new OdfPortsMDto { Id = it.Id, Name = it.Name, Status = it.Status }).ToList(); row.Add(new OdfPortsMDtot() { RowList = li, Name = (g.Key + 1).ToString() }); }); item.OdfPortsList = row; } return SUCCESS(list); } /// /// 查询端口详情 /// /// /// [HttpGet("{Id}")] [ActionPermissionFilter(Permission = "odfports:query")] public IActionResult GetOdfPorts(int Id) { var response = _OdfPortsService.GetInfo(Id); var info = response.Adapt(); return SUCCESS(info); } /// /// 查询端口详情 /// /// /// [HttpGet("search")] [ActionPermissionFilter(Permission = "odfports:query")] public async Task GetOdfPortsInfo([FromQuery] OdfPortsSearchDto dto) { var key = dto.Key; if (string.IsNullOrEmpty(key)) { return SUCCESS(new List()); } var predicate = Expressionable.Create(); var list = _OdfPortsService.AsQueryable().Where(it => it.Name.Contains(key) || it.Remarks.Contains(key) || it.HistoryRemarks.Contains(key) || it.OpticalAttenuation.Contains(key)).ToPage(dto); var roomId = list.Result.Select(it => it.RoomId).Distinct(); var roomList = await _OdfRoomsService.AsQueryable().Where(it => roomId.Contains(it.Id)).ToListAsync(); list.Result.ForEach(it => { var t = roomList.Find(r => r.Id == it.RoomId); if (t != null) { it.Address = t.RoomAddress; } //roomList }); return SUCCESS(list); } /// /// 修改端口 /// /// /// [HttpGet("status/{Id}/{status}")] [ActionPermissionFilter(Permission = "odfports:edit")] [Log(Title = "更新端口状态", BusinessType = BusinessType.UPDATE)] public IActionResult GetOdfPortsStatus(int Id, int status) { var response = _OdfPortsService.GetInfo(Id); response.Status = status; response.UpdatedAt = DateTime.Now; var s = _OdfPortsService.Update(response); return SUCCESS(s); } /// /// /// /// [HttpGet("odf")] [ActionPermissionFilter(Permission = "odfports:edit")] public IActionResult GetOdfTest() { return SUCCESS(new { update = true }); } /// /// 添加端口 /// /// [HttpPost] [ActionPermissionFilter(Permission = "odfports:add")] [Log(Title = "端口", BusinessType = BusinessType.INSERT)] public IActionResult AddOdfPorts([FromBody] OdfPortsDto parm) { var modal = parm.Adapt().ToCreate(HttpContext); var response = _OdfPortsService.AddOdfPorts(modal); return SUCCESS(response); } /// /// 更新端口 /// /// [HttpPut] [ActionPermissionFilter(Permission = "odfports:edit")] [Log(Title = "端口", BusinessType = BusinessType.UPDATE)] public IActionResult UpdateOdfPorts([FromBody] OdfPortsDto parm) { var modal = parm.Adapt().ToUpdate(HttpContext); var response = _OdfPortsService.UpdateOdfPorts(modal); return ToResponse(response); } /// /// 更新端口 /// /// [HttpPost("save")] [ActionPermissionFilter(Permission = "odfports:edit")] [Log(Title = "APP更新端口", BusinessType = BusinessType.UPDATE)] public IActionResult SaveMOdfPorts([FromBody] OdfPortsMMDto parm) { var port = _OdfPortsService.GetById(parm.Id); if (port == null) { return ToResponse(ResultCode.FAIL, "保存失败"); } port.Status = parm.Status; port.HistoryRemarks = parm.HistoryRemarks; port.Remarks = parm.Remarks; port.OpticalAttenuation = parm.OpticalAttenuation; if (port.Status == 0) { port.HistoryRemarks = ""; port.Remarks = ""; port.OpticalAttenuation = ""; } var response = _OdfPortsService.UpdateOdfPorts(port); return ToResponse(response); } /// /// 修改端口 /// /// /// [HttpGet("empty/{Id}")] [ActionPermissionFilter(Permission = "odfports:edit")] [Log(Title = "清空数据", BusinessType = BusinessType.UPDATE)] public IActionResult GetOdfPortsEmpty(int Id) { var response = _OdfPortsService.GetInfo(Id); response.Status = 0; response.Remarks = ""; response.HistoryRemarks = ""; response.OpticalAttenuation = ""; response.UpdatedAt = DateTime.Now; var s = _OdfPortsService.Update(response); return SUCCESS(s); } /// /// 删除端口 /// /// [HttpPost("delete/{ids}")] [ActionPermissionFilter(Permission = "odfports:delete")] [Log(Title = "端口", BusinessType = BusinessType.DELETE)] public IActionResult DeleteOdfPorts([FromRoute] string ids) { var idArr = Tools.SplitAndConvert(ids); return ToResponse(_OdfPortsService.Delete(idArr, "删除端口")); } /// /// 导出端口 /// /// [Log(Title = "导出端口数据", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] [HttpGet("export")] [ActionPermissionFilter(Permission = "odfports:export")] public IActionResult Export([FromQuery] OdfPortsQueryDto parm) { var list = _OdfPortsService.ExportList(parm).Result; if (list == null || list.Count <= 0) { return ToResponse(ResultCode.FAIL, "没有要导出的数据"); } var result = ExportExcelMini(list, "端口", "端口"); return ExportExcel(result.Item2, result.Item1); } /// /// 导出端口 /// /// [Log(Title = "导出端口数据", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] [HttpGet("exports")] [ActionPermissionFilter(Permission = "odfports:export")] public IActionResult Export([FromQuery] OdfPortsQuerysDto parm) { var list = _OdfPortsService.ExportList(parm).Result; if (list == null || list.Count <= 0) { return ToResponse(ResultCode.FAIL, "没有要导出的数据"); } var result = ExportExcelMini(list, "端口数据", "端口数据"); return ExportExcel(result.Item2, result.Item1); } /// /// 导入 /// /// /// [HttpPost("importData")] [Log(Title = "端口导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)] [ActionPermissionFilter(Permission = "odfports:import")] public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile) { List list = new(); using (var stream = formFile.OpenReadStream()) { list = stream.Query(startCell: "A1").ToList(); } return SUCCESS(_OdfPortsService.ImportOdfPorts(list.Adapt>())); } /// /// 端口导入模板下载 /// /// [HttpGet("importTemplate")] [Log(Title = "端口模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] [AllowAnonymous] public IActionResult ImportTemplateExcel() { var result = DownloadImportTemplate(new List() { }, "OdfPorts"); return ExportExcel(result.Item2, result.Item1); } /// /// 删除端口 /// /// [HttpPost("deleteAll")] [ActionPermissionFilter(Permission = "odfports:delete")] [Log(Title = "删除端口数据", BusinessType = BusinessType.DELETE)] public async Task DeleteAll([FromBody] OdfRoomsTreeDto treeDto) { if (treeDto.Level == 2) { //删除全部 var room = _OdfRoomsService.GetById(treeDto.RoomId); if (room == null) { return ToResponse(ResultCode.FAIL, "删除失败"); } //删除机房下的所有端口 await _OdfPortsService.AsDeleteable().Where(it => it.RoomId == room.Id).ExecuteCommandAsync(); // delete odf_frames where exists ( select id from odf_racks where roomid=1 and id=odf_frames.RackId ) //删除机房下所有的框 var deletedCount = await _OdfFramesService.AsDeleteable() .Where(f => SqlFunc.Subqueryable() .Where(r => r.RoomId == room.Id && r.Id == f.RackId) .Any()) .ExecuteCommandAsync(); //删除机房下所有的机架 await _OdfRacksService.AsDeleteable().Where(it => it.RoomId == room.Id).ExecuteCommandAsync(); _OdfRoomsService.Delete(room.Id, "删除机房"); } else if (treeDto.Level == 3) { var racks = _OdfRacksService.GetById(treeDto.RacksId); if (racks == null) { return ToResponse(ResultCode.FAIL, "删除失败"); } //删除机房下的所有端口 await _OdfPortsService.AsDeleteable().Where(it => it.RackId == racks.Id).ExecuteCommandAsync(); //删除机房下所有的框 var deletedCount = await _OdfFramesService.AsDeleteable().Where(it => it.RackId == racks.Id).ExecuteCommandAsync(); //删除机架 _OdfRacksService.Delete(racks); } else if (treeDto.Level == 4) { var frames = _OdfFramesService.GetById(treeDto.FramesId); if (frames == null) { return ToResponse(ResultCode.FAIL, "删除失败"); } //删除机房下的所有端口 await _OdfPortsService.AsDeleteable().Where(it => it.FrameId == frames.Id).ExecuteCommandAsync(); _OdfFramesService.Delete(frames); } return SUCCESS(1); } } }