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 SqlSugar;
//创建时间:2025-08-05
namespace ZR.Admin.WebApi.Controllers.Business
{
///
/// 机架列表
///
[Route("business/OdfRacks")]
public class OdfRacksController : BaseController
{
///
/// 机架列表接口
///
private readonly IOdfRacksService _OdfRacksService;
private readonly IOdfRoomsService _odfRooms;
///
/// 框
///
private readonly IOdfFramesService _OdfFramesService;
///
/// 端口
///
private readonly IOdfPortsService _OdfPortsService;
public OdfRacksController(IOdfRacksService OdfRacksService, IOdfRoomsService odfRooms,
IOdfFramesService odfFramesService,
IOdfPortsService odfPortsService)
{
_OdfRacksService = OdfRacksService;
_odfRooms = odfRooms;
_OdfFramesService = odfFramesService;
_OdfPortsService = odfPortsService;
}
///
/// 查询机架列表列表
///
///
///
[HttpGet("list")]
[ActionPermissionFilter(Permission = "odfracks:list")]
public IActionResult QueryOdfRacks([FromQuery] OdfRacksQueryDto parm)
{
var response = _OdfRacksService.GetList(parm);
return SUCCESS(response);
}
///
/// 查询机架列表详情
///
///
///
[HttpGet("{Id}")]
[ActionPermissionFilter(Permission = "odfracks:query")]
public IActionResult GetOdfRacks(int Id)
{
var response = _OdfRacksService.GetInfo(Id);
var info = response.Adapt();
return SUCCESS(info);
}
///
/// 添加机架列表
///
///
[HttpPost]
[ActionPermissionFilter(Permission = "odfracks:add")]
[Log(Title = "机架列表", BusinessType = BusinessType.INSERT)]
public IActionResult AddOdfRacks([FromBody] OdfRacksDto parm)
{
var modal = parm.Adapt().ToCreate(HttpContext);
if (modal.RoomId > 0)
{
var rooms = _odfRooms.GetById(modal.RoomId);
if (rooms == null)
{
return ToResponse(ResultCode.FAIL, "机房不存在");
}
modal.DeptId = rooms.DeptId ?? 0;
}
var response = _OdfRacksService.AddOdfRacks(modal);
return SUCCESS(response);
}
///
/// 添加机架列表
///
///
[HttpPost("expert")]
[ActionPermissionFilter(Permission = "odfracks:add")]
[Log(Title = "机架列表", BusinessType = BusinessType.INSERT)]
public async Task AddOdfRacksExpert([FromBody] OdfRacksExpertDto parm)
{
var modal = parm.Adapt().ToCreate(HttpContext);
if (modal.RoomId == 0)
{
return ToResponse(ResultCode.FAIL, "机房不存在");
}
var rooms = _odfRooms.GetById(modal.RoomId);
if (rooms == null)
{
return ToResponse(ResultCode.FAIL, "机房不存在");
}
modal.DeptId = rooms.DeptId ?? 0;
modal.FrameCount = parm.FramesCount;
var response = _OdfRacksService.AddOdfRacks(modal);
var roomId = rooms.Id;
var roomName = rooms.RoomName;
if (parm.FramesCount > 0)
{
//添加机框
List framesList = new List();
var rack = response;
for (int i = 0; i < parm.FramesCount; i++)
{
var t = await _OdfFramesService.InsertReturnEntityAsync(new OdfFrames()
{
CreatedAt = DateTime.Now,
UpdateAt = DateTime.Now,
PortsCol = parm.PortsCount,
PortsCount = parm.PortsCount,
DeptId = rack.DeptId,
PortsRow = parm.PortsCount,
PortsName = $"{(i + 1)}框",
RackId = rack.Id,
SequenceNumber = i + 1
});
framesList.Add(t);
}
//添加机框结束
if (parm.RowCount > 0)
{
//添加行
if (parm.PortsCount > 0)
{
int index = 0;
//添加端口
foreach (var frame in framesList)
{
var ra = rack;
if (ra == null)
{
continue;
}
List ports = new List();
for (int row = 0; row < parm.RowCount; row++)
{
for (int port = 0; port < parm.PortsCount; port++)
{
ports.Add(new OdfPorts()
{
CreatedAt = DateTime.Now,
DeptId = rooms.DeptId ?? 0,
DeptName = rooms.DeptName,
RackId = frame.RackId,
RackName = ra.RackName,
RoomId = roomId,
RoomName = roomName,
FrameId = frame.Id,
FrameName = frame.PortsName,
Name = $"{(row + 1)}-{(port + 1)}",
RowNumber = row + 1,
PortNumber = port + 1,
OpticalAttenuation = "",
HistoryRemarks = "",
Remarks = "",
OpticalCableOffRemarks = "",
Status = parm.DefaultStatus,
UpdatedAt = DateTime.Now,
});
}
}
await _OdfPortsService.AsInsertable(ports).ExecuteReturnEntityAsync(true);
//如果超过100个机框,则休眠一下,防止服务器死机
index++;
if (index > 100)
{
Thread.Sleep(50);
index = 0;
}
}
}
}
}
return SUCCESS(response);
}
///
/// 更新机架列表
///
///
[HttpPut]
[ActionPermissionFilter(Permission = "odfracks:edit")]
[Log(Title = "机架列表", BusinessType = BusinessType.UPDATE)]
public async Task UpdateOdfRacks([FromBody] OdfRacksDto parm)
{
var modal = parm.Adapt().ToUpdate(HttpContext);
var oldModel = _OdfRacksService.GetById(parm.Id);
var response = _OdfRacksService.UpdateOdfRacks(modal);
if (response > 0)
{
var rackName = oldModel.RackName;
var oldRoomId = modal.RoomId;
var rackId = modal.Id;
if (oldModel.RackName != modal.RackName)
{
// 最直接的转换
await _OdfPortsService.UpdateAsync(
it => it.RoomId == oldRoomId && it.RackId == rackId, // WHERE条件
it => new OdfPorts // SET部分
{
RackName = modal.RackName,
}
);
}
}
return ToResponse(response);
}
///
/// 删除机架列表
///
///
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "odfracks:delete")]
[Log(Title = "机架列表", BusinessType = BusinessType.DELETE)]
public async Task DeleteOdfRacks([FromRoute] string ids)
{
var idArr = Tools.SplitAndConvert(ids);
foreach (var racksId in idArr)
{
var racks = _OdfRacksService.GetById(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);
}
return ToResponse(_OdfRacksService.Delete(idArr, "删除机架列表"));
}
///
/// 导出机架列表
///
///
[Log(Title = "机架列表", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[HttpGet("export")]
[ActionPermissionFilter(Permission = "odfracks:export")]
public IActionResult Export([FromQuery] OdfRacksQueryDto parm)
{
var list = _OdfRacksService.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 = "odfracks: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(_OdfRacksService.ImportOdfRacks(list.Adapt>()));
}
///
/// 机架列表导入模板下载
///
///
[HttpGet("importTemplate")]
[Log(Title = "机架列表模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[AllowAnonymous]
public IActionResult ImportTemplateExcel()
{
var result = DownloadImportTemplate(new List() { }, "OdfRacks");
return ExportExcel(result.Item2, result.Item1);
}
}
}