.NETAdmin/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs
2025-08-06 22:04:22 +08:00

428 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 端口
/// </summary>
[Route("business/OdfPorts")]
public class OdfPortsController : BaseController
{
/// <summary>
/// 端口接口
/// </summary>
private readonly IOdfPortsService _OdfPortsService;
/// <summary>
/// 机房列表接口
/// </summary>
private readonly IOdfRoomsService _OdfRoomsService;
/// <summary>
///
/// </summary>
private readonly ISysUserService _SysUserService;
/// <summary>
///机架
/// </summary>
private readonly IOdfRacksService _OdfRacksService;
/// <summary>
/// 框
/// </summary>
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;
}
/// <summary>
/// 查询端口列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpGet("list")]
[ActionPermissionFilter(Permission = "odfports:list")]
public IActionResult QueryOdfPorts([FromQuery] OdfPortsQueryDto parm)
{
var response = _OdfPortsService.GetList(parm);
return SUCCESS(response);
}
/// <summary>
/// 查询端口列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpGet("lists")]
[ActionPermissionFilter(Permission = "odfports:list")]
public IActionResult QueryOdfPorts([FromQuery] OdfPortsQuerysDto parm)
{
var response = _OdfPortsService.GetList(parm);
return SUCCESS(response);
}
/// <summary>
/// 查询端口列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpGet("mlist")]
[ActionPermissionFilter(Permission = "odfports:list")]
public async Task<IActionResult> 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<OdfPortsMDtot> row = new List<OdfPortsMDtot>();
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);
}
/// <summary>
/// 查询端口详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("{Id}")]
[ActionPermissionFilter(Permission = "odfports:query")]
public IActionResult GetOdfPorts(int Id)
{
var response = _OdfPortsService.GetInfo(Id);
var info = response.Adapt<OdfPortsDto>();
return SUCCESS(info);
}
/// <summary>
/// 查询端口详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("search")]
[ActionPermissionFilter(Permission = "odfports:query")]
public async Task<IActionResult> GetOdfPortsInfo([FromQuery] OdfPortsSearchDto dto)
{
var key = dto.Key;
if (string.IsNullOrEmpty(key))
{
return SUCCESS(new List<OdfPortsQuDto>());
}
var predicate = Expressionable.Create<OdfPorts>();
var list = _OdfPortsService.AsQueryable().Where(it => it.Name.Contains(key) || it.Remarks.Contains(key) || it.HistoryRemarks.Contains(key) || it.OpticalAttenuation.Contains(key)).ToPage<OdfPorts, OdfPortsQuDto>(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);
}
/// <summary>
/// 修改端口
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[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);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
[HttpGet("odf")]
[ActionPermissionFilter(Permission = "odfports:edit")]
public IActionResult GetOdfTest()
{
return SUCCESS(new { update = true });
}
/// <summary>
/// 添加端口
/// </summary>
/// <returns></returns>
[HttpPost]
[ActionPermissionFilter(Permission = "odfports:add")]
[Log(Title = "端口", BusinessType = BusinessType.INSERT)]
public IActionResult AddOdfPorts([FromBody] OdfPortsDto parm)
{
var modal = parm.Adapt<OdfPorts>().ToCreate(HttpContext);
var response = _OdfPortsService.AddOdfPorts(modal);
return SUCCESS(response);
}
/// <summary>
/// 更新端口
/// </summary>
/// <returns></returns>
[HttpPut]
[ActionPermissionFilter(Permission = "odfports:edit")]
[Log(Title = "端口", BusinessType = BusinessType.UPDATE)]
public IActionResult UpdateOdfPorts([FromBody] OdfPortsDto parm)
{
var modal = parm.Adapt<OdfPorts>().ToUpdate(HttpContext);
var response = _OdfPortsService.UpdateOdfPorts(modal);
return ToResponse(response);
}
/// <summary>
/// 更新端口
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 修改端口
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[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);
}
/// <summary>
/// 删除端口
/// </summary>
/// <returns></returns>
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "odfports:delete")]
[Log(Title = "端口", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteOdfPorts([FromRoute] string ids)
{
var idArr = Tools.SplitAndConvert<int>(ids);
return ToResponse(_OdfPortsService.Delete(idArr, "删除端口"));
}
/// <summary>
/// 导出端口
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 导出端口
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 导入
/// </summary>
/// <param name="formFile"></param>
/// <returns></returns>
[HttpPost("importData")]
[Log(Title = "端口导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
[ActionPermissionFilter(Permission = "odfports:import")]
public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
{
List<OdfPortsDto> list = new();
using (var stream = formFile.OpenReadStream())
{
list = stream.Query<OdfPortsDto>(startCell: "A1").ToList();
}
return SUCCESS(_OdfPortsService.ImportOdfPorts(list.Adapt<List<OdfPorts>>()));
}
/// <summary>
/// 端口导入模板下载
/// </summary>
/// <returns></returns>
[HttpGet("importTemplate")]
[Log(Title = "端口模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[AllowAnonymous]
public IActionResult ImportTemplateExcel()
{
var result = DownloadImportTemplate(new List<OdfPortsDto>() { }, "OdfPorts");
return ExportExcel(result.Item2, result.Item1);
}
/// <summary>
/// 删除端口
/// </summary>
/// <returns></returns>
[HttpPost("deleteAll")]
[ActionPermissionFilter(Permission = "odfports:delete")]
[Log(Title = "删除端口数据", BusinessType = BusinessType.DELETE)]
public async Task<IActionResult> 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<OdfRacks>()
.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);
}
}
}