odf_new/server/ZR.Admin.WebApi/Controllers/Business/OdfRacksController.cs
zpc c11ba8aebd
Some checks are pending
continuous-integration/drone/push Build is running
21
2026-04-04 11:04:37 +08:00

384 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 SqlSugar;
//创建时间2025-08-05
namespace ZR.Admin.WebApi.Controllers.Business
{
/// <summary>
/// 机架列表
/// </summary>
[Route("business/OdfRacks")]
public class OdfRacksController : BaseController
{
/// <summary>
/// 机架列表接口
/// </summary>
private readonly IOdfRacksService _OdfRacksService;
private readonly IOdfRoomsService _odfRooms;
/// <summary>
/// 框
/// </summary>
private readonly IOdfFramesService _OdfFramesService;
/// <summary>
/// 端口
/// </summary>
private readonly IOdfPortsService _OdfPortsService;
public OdfRacksController(IOdfRacksService OdfRacksService, IOdfRoomsService odfRooms,
IOdfFramesService odfFramesService,
IOdfPortsService odfPortsService)
{
_OdfRacksService = OdfRacksService;
_odfRooms = odfRooms;
_OdfFramesService = odfFramesService;
_OdfPortsService = odfPortsService;
}
/// <summary>
/// 查询机架列表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpGet("list")]
[ActionPermissionFilter(Permission = "odfracks:list")]
public IActionResult QueryOdfRacks([FromQuery] OdfRacksQueryDto parm)
{
var response = _OdfRacksService.GetList(parm);
return SUCCESS(response);
}
/// <summary>
/// 查询机架列表详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("{Id}")]
[ActionPermissionFilter(Permission = "odfracks:query")]
public IActionResult GetOdfRacks(int Id)
{
var response = _OdfRacksService.GetInfo(Id);
var info = response.Adapt<OdfRacksDto>();
return SUCCESS(info);
}
/// <summary>
/// 添加机架列表
/// </summary>
/// <returns></returns>
[HttpPost]
[ActionPermissionFilter(Permission = "odfracks:add")]
[Log(Title = "机架列表", BusinessType = BusinessType.INSERT)]
public IActionResult AddOdfRacks([FromBody] OdfRacksDto parm)
{
var modal = parm.Adapt<OdfRacks>().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);
}
/// <summary>
/// 添加机架列表
/// </summary>
/// <returns></returns>
[HttpPost("expert")]
[ActionPermissionFilter(Permission = "odfracks:add")]
[Log(Title = "机架列表", BusinessType = BusinessType.INSERT)]
public async Task<IActionResult> AddOdfRacksExpert([FromBody] OdfRacksExpertDto parm)
{
var modal = parm.Adapt<OdfRacks>().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<OdfFrames> framesList = new List<OdfFrames>();
var rack = response;
// 光交箱固定每侧12个端口
var portsCount = modal.RackType == 1 ? 12 : parm.PortsCount;
for (int i = 0; i < parm.FramesCount; i++)
{
var t = await _OdfFramesService.InsertReturnEntityAsync(new OdfFrames()
{
CreatedAt = DateTime.Now,
UpdateAt = DateTime.Now,
PortsCol = portsCount,
PortsCount = portsCount,
DeptId = rack.DeptId,
PortsRow = portsCount,
PortsName = $"{(i + 1)}框",
RackId = rack.Id,
SequenceNumber = i + 1
});
framesList.Add(t);
}
//添加机框结束
if (parm.RowCount > 0)
{
int index = 0;
foreach (var frame in framesList)
{
var ra = rack;
if (ra == null) continue;
List<OdfPorts> ports = new List<OdfPorts>();
if (modal.RackType == 1)
{
// 光交箱每行生成24个端口左12+右12
for (int row = 0; row < parm.RowCount; row++)
{
string rowLetter = ((char)(65 + row)).ToString(); // A, B, C...
// 左侧光交箱端子 PortSide=0
for (int port = 0; port < 12; 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 = $"{rowLetter}-{(port + 1)}",
RowNumber = row + 1,
PortNumber = port + 1,
PortSide = 0,
OpticalAttenuation = "",
HistoryRemarks = "",
Remarks = "",
OpticalCableOffRemarks = "",
Status = parm.DefaultStatus,
UpdatedAt = DateTime.Now,
});
}
// 右侧ODF端子 PortSide=1
for (int port = 0; port < 12; 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,
PortSide = 1,
OpticalAttenuation = "",
HistoryRemarks = "",
Remarks = "",
OpticalCableOffRemarks = "",
Status = parm.DefaultStatus,
UpdatedAt = DateTime.Now,
});
}
}
}
else
{
// ODF机架保持原有逻辑
if (portsCount > 0)
{
for (int row = 0; row < parm.RowCount; row++)
{
for (int port = 0; port < 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,
PortSide = 0,
OpticalAttenuation = "",
HistoryRemarks = "",
Remarks = "",
OpticalCableOffRemarks = "",
Status = parm.DefaultStatus,
UpdatedAt = DateTime.Now,
});
}
}
}
}
if (ports.Count > 0)
{
await _OdfPortsService.AsInsertable(ports).ExecuteReturnEntityAsync(true);
}
index++;
if (index > 100)
{
Thread.Sleep(50);
index = 0;
}
}
}
}
return SUCCESS(response);
}
/// <summary>
/// 更新机架列表
/// </summary>
/// <returns></returns>
[HttpPut]
[ActionPermissionFilter(Permission = "odfracks:edit")]
[Log(Title = "机架列表", BusinessType = BusinessType.UPDATE)]
public async Task<IActionResult> UpdateOdfRacks([FromBody] OdfRacksDto parm)
{
var modal = parm.Adapt<OdfRacks>().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);
}
/// <summary>
/// 删除机架列表
/// </summary>
/// <returns></returns>
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "odfracks:delete")]
[Log(Title = "机架列表", BusinessType = BusinessType.DELETE)]
public async Task<IActionResult> DeleteOdfRacks([FromRoute] string ids)
{
var idArr = Tools.SplitAndConvert<int>(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, "删除机架列表"));
}
/// <summary>
/// 导出机架列表
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 导入
/// </summary>
/// <param name="formFile"></param>
/// <returns></returns>
[HttpPost("importData")]
[Log(Title = "机架列表导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
[ActionPermissionFilter(Permission = "odfracks:import")]
public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
{
List<OdfRacksDto> list = new();
using (var stream = formFile.OpenReadStream())
{
list = stream.Query<OdfRacksDto>(startCell: "A1").ToList();
}
return SUCCESS(_OdfRacksService.ImportOdfRacks(list.Adapt<List<OdfRacks>>()));
}
/// <summary>
/// 机架列表导入模板下载
/// </summary>
/// <returns></returns>
[HttpGet("importTemplate")]
[Log(Title = "机架列表模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[AllowAnonymous]
public IActionResult ImportTemplateExcel()
{
var result = DownloadImportTemplate(new List<OdfRacksDto>() { }, "OdfRacks");
return ExportExcel(result.Item2, result.Item1);
}
}
}