426 lines
15 KiB
C#
426 lines
15 KiB
C#
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.Remarks = "";
|
||
}
|
||
|
||
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);
|
||
}
|
||
|
||
}
|
||
} |