提交代码

This commit is contained in:
zpc 2025-08-06 09:46:50 +08:00
parent d42c44c87b
commit 6941b6c1f8
27 changed files with 2808 additions and 6 deletions

View File

@ -0,0 +1,178 @@
using Microsoft.AspNetCore.Mvc;
using ZR.Model.Business.Dto;
using ZR.Model.Business;
using ZR.Service.Business.IBusinessService;
using ZR.Service.Business;
//创建时间2025-08-05
namespace ZR.Admin.WebApi.Controllers.Business
{
/// <summary>
/// 框-信息
/// </summary>
[Route("business/OdfFrames")]
public class OdfFramesController : BaseController
{
/// <summary>
/// 框-信息接口
/// </summary>
private readonly IOdfFramesService _OdfFramesService;
/// <summary>
/// 端口
/// </summary>
private readonly IOdfPortsService _OdfPortsService;
/// <summary>
/// 机架列表接口
/// </summary>
private readonly IOdfRacksService _OdfRacksService;
private readonly IOdfRoomsService _odfRooms;
public OdfFramesController(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 = "odfframes:list")]
public IActionResult QueryOdfFrames([FromQuery] OdfFramesQueryDto parm)
{
var response = _OdfFramesService.GetList(parm);
return SUCCESS(response);
}
/// <summary>
/// 查询框-信息详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("{Id}")]
[ActionPermissionFilter(Permission = "odfframes:query")]
public IActionResult GetOdfFrames(int Id)
{
var response = _OdfFramesService.GetInfo(Id);
var info = response.Adapt<OdfFramesDto>();
return SUCCESS(info);
}
/// <summary>
/// 添加框-信息
/// </summary>
/// <returns></returns>
[HttpPost]
[ActionPermissionFilter(Permission = "odfframes:add")]
[Log(Title = "框-信息", BusinessType = BusinessType.INSERT)]
public async Task<IActionResult> AddOdfFrames([FromBody] OdfFramesExpertDto parm)
{
var modal = parm.Adapt<OdfFrames>().ToCreate(HttpContext);
var rooms = _odfRooms.GetById(parm.RoomId);
if (rooms == null)
{
return ToResponse(ResultCode.FAIL, "机房不存在");
}
modal.DeptId = rooms.DeptId ?? 0;
modal.RackId = parm.RackId;
modal.PortsRow = parm.RowCount;
modal.PortsCol = parm.PortsCount;
modal.PortsCount = parm.RowCount * parm.PortsCount;
modal.UpdateAt = DateTime.Now;
modal.CreatedAt = DateTime.Now;
var response = _OdfFramesService.AddOdfFrames(modal);
var roomId = rooms.Id;
var roomName = rooms.RoomName;
var ra = _OdfRacksService.GetById(modal.RackId);
//添加机框结束
if (parm.RowCount > 0)
{
//添加行
if (parm.PortsCount > 0)
{
int index = 0;
//添加端口
var frame = response;
List<OdfPorts> ports = new List<OdfPorts>();
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,
PortNumber = port,
OpticalAttenuation = "",
HistoryRemarks = "",
Remarks = "",
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);
}
/// <summary>
/// 更新框-信息
/// </summary>
/// <returns></returns>
[HttpPut]
[ActionPermissionFilter(Permission = "odfframes:edit")]
[Log(Title = "框-信息", BusinessType = BusinessType.UPDATE)]
public IActionResult UpdateOdfFrames([FromBody] OdfFramesDto parm)
{
var modal = parm.Adapt<OdfFrames>().ToUpdate(HttpContext);
var response = _OdfFramesService.UpdateOdfFrames(modal);
return ToResponse(response);
}
/// <summary>
/// 删除框-信息
/// </summary>
/// <returns></returns>
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "odfframes:delete")]
[Log(Title = "框-信息", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteOdfFrames([FromRoute] string ids)
{
var idArr = Tools.SplitAndConvert<int>(ids);
return ToResponse(_OdfFramesService.Delete(idArr, "删除框-信息"));
}
}
}

View File

@ -0,0 +1,340 @@
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;
//创建时间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("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 OdfPortsMDto() { Id = it.Id, Name = it.Name, Status = it.Status }).ToListAsync();
item.odfPortsList = l;
}
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("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;
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>
/// <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);
}
}
}

View File

@ -0,0 +1,283 @@
using Microsoft.AspNetCore.Mvc;
using ZR.Model.Business.Dto;
using ZR.Model.Business;
using ZR.Service.Business.IBusinessService;
using MiniExcelLibs;
using ZR.Service.Business;
//创建时间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;
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<OdfPorts> ports = new List<OdfPorts>();
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,
PortNumber = port,
OpticalAttenuation = "",
HistoryRemarks = "",
Remarks = "",
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);
}
/// <summary>
/// 更新机架列表
/// </summary>
/// <returns></returns>
[HttpPut]
[ActionPermissionFilter(Permission = "odfracks:edit")]
[Log(Title = "机架列表", BusinessType = BusinessType.UPDATE)]
public IActionResult UpdateOdfRacks([FromBody] OdfRacksDto parm)
{
var modal = parm.Adapt<OdfRacks>().ToUpdate(HttpContext);
var response = _OdfRacksService.UpdateOdfRacks(modal);
return ToResponse(response);
}
/// <summary>
/// 删除机架列表
/// </summary>
/// <returns></returns>
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "odfracks:delete")]
[Log(Title = "机架列表", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteOdfRacks([FromRoute] string ids)
{
var idArr = Tools.SplitAndConvert<int>(ids);
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);
}
}
}

View File

@ -0,0 +1,482 @@
using Microsoft.AspNetCore.Mvc;
using ZR.Model.Business.Dto;
using ZR.Model.Business;
using ZR.Service.Business.IBusinessService;
using MiniExcelLibs;
using ZR.ServiceCore.Services;
using System.Threading.Tasks;
using ZR.Service.Business;
using SqlSugar;
//创建时间2025-08-05
namespace ZR.Admin.WebApi.Controllers.Business
{
/// <summary>
/// 机房列表
/// </summary>
[Route("business/OdfRooms")]
public class OdfRoomsController : BaseController
{
/// <summary>
/// 机房列表接口
/// </summary>
private readonly IOdfRoomsService _OdfRoomsService;
/// <summary>
/// 部门接口
/// </summary>
private readonly ISysDeptService sysDeptService;
/// <summary>
///
/// </summary>
private readonly ISysUserService _SysUserService;
/// <summary>
///机架
/// </summary>
private readonly IOdfRacksService _OdfRacksService;
/// <summary>
/// 框
/// </summary>
private readonly IOdfFramesService _OdfFramesService;
/// <summary>
/// 端口
/// </summary>
private readonly IOdfPortsService _OdfPortsService;
public OdfRoomsController(IOdfRoomsService OdfRoomsService,
ISysDeptService sysDeptService,
ISysUserService sysUserService,
IOdfPortsService odfPortsService,
IOdfFramesService odfFramesService,
IOdfRacksService odfRacksService)
{
_OdfRoomsService = OdfRoomsService;
this.sysDeptService = sysDeptService;
_SysUserService = sysUserService;
_OdfPortsService = odfPortsService;
_OdfFramesService = odfFramesService;
_OdfRacksService = odfRacksService;
}
/// <summary>
/// 查询机房列表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpGet("list")]
[ActionPermissionFilter(Permission = "odfrooms:list")]
public IActionResult QueryOdfRooms([FromQuery] OdfRoomsQueryDto parm)
{
//long userId = HttpContext.GetUId();
//var user = _SysUserService.SelectUserById(userId);
////user.RoleIds
//if (!user.IsAdmin && user.Roles.Any(it => it.DataScope == 4))
//{
// //user.DeptId;
// //parm.DeptIds = user.DeptIds;
//}
//else if (!user.IsAdmin && user.Roles.Any(it => it.DataScope == 3))
//{
// parm.DeptIds = new List<long>() { user.DeptId };
//}
var response = _OdfRoomsService.GetList(parm);
return SUCCESS(response);
}
/// <summary>
/// 查询机房列表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpGet("tree")]
[ActionPermissionFilter(Permission = "odfrooms:list")]
public IActionResult GetTreeList([FromQuery] OdfRoomsTreeQueryDto parm)
{
List<OdfRoomsTreeDto> list = new List<OdfRoomsTreeDto>();
if (parm.Level == 1)
{
var response = _OdfRoomsService.GetList(parm);
response.ForEach(it =>
{
list.Add(new OdfRoomsTreeDto
{
Key = it.Id.ToString(),
Id = it.Id.ToString(),
Name = it.RoomName,
DeptId = it.DeptId ?? 0,
Level = 2,
Leaf = false,
RoomId = it.Id,
});
});
}
else if (parm.Level == 2)
{
var response = _OdfRacksService.AsQueryable().Where(it => it.RoomId == parm.RoomId).OrderBy(it => it.SequenceNumber).ToList();
response.ForEach(it =>
{
list.Add(new OdfRoomsTreeDto
{
Key = parm.RoomId + "_" + it.Id.ToString(),
Id = parm.RoomId + "_" + it.Id.ToString(),
Name = it.RackName,
DeptId = it.DeptId,
Level = 3,
Leaf = false,
RoomId = parm.RoomId,
RacksId = it.Id,
});
});
}
else if (parm.Level == 3)
{
var response = _OdfFramesService.AsQueryable().Where(it => it.RackId == parm.RacksId).OrderBy(it => it.SequenceNumber).ToList();
response.ForEach(it =>
{
list.Add(new OdfRoomsTreeDto
{
Key = parm.RoomId + "_" + parm.RacksId + "_" + it.Id.ToString(),
Id = parm.RoomId + "_" + parm.RacksId + "_" + it.Id.ToString(),
Name = it.PortsName,
DeptId = it.DeptId ?? 0,
Level = 4,
Leaf = true,
RoomId = parm.RoomId,
RacksId = parm.RacksId,
FramesId = it.Id,
});
});
}
return SUCCESS(list);
}
/// <summary>
/// 查询机房列表详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("{Id}")]
[ActionPermissionFilter(Permission = "odfrooms:query")]
public IActionResult GetOdfRooms(int Id)
{
var response = _OdfRoomsService.GetInfo(Id);
var info = response.Adapt<OdfRoomsDto>();
return SUCCESS(info);
}
/// <summary>
/// 添加机房列表
/// </summary>
/// <returns></returns>
[HttpPost]
[ActionPermissionFilter(Permission = "odfrooms:add")]
[Log(Title = "机房列表", BusinessType = BusinessType.INSERT)]
public async Task<IActionResult> AddOdfRooms([FromBody] OdfRoomsDto parm)
{
parm.CreatedAt = DateTime.Now;
parm.UpdatedAt = DateTime.Now;
if (parm.DeptId == 0)
{
parm.DeptName = "未知部门";
}
else
{
var dept = await sysDeptService.AsQueryable().Where(it => it.DeptId == parm.DeptId).FirstAsync();
if (dept == null)
{
return ToResponse(ResultCode.CUSTOM_ERROR, "部门不存在,请选择正确的部门!");
}
//var dept = _DeptService.GetInfo(parm.DeptId);
parm.DeptName = dept.DeptName;
}
var modal = parm.Adapt<OdfRooms>().ToCreate(HttpContext);
var response = _OdfRoomsService.AddOdfRooms(modal);
return SUCCESS(response);
}
/// <summary>
/// 添加机房列表
/// </summary>
/// <returns></returns>
[HttpPost("expert")]
[ActionPermissionFilter(Permission = "odfrooms:add")]
[Log(Title = "机房列表", BusinessType = BusinessType.INSERT)]
public async Task<IActionResult> AddExpertOdfRooms([FromBody] OdfRoomsExpertDto parm)
{
parm.CreatedAt = DateTime.Now;
parm.UpdatedAt = DateTime.Now;
if (parm.DeptId == 0)
{
parm.DeptName = "未知部门";
}
else
{
var dept = await sysDeptService.AsQueryable().Where(it => it.DeptId == parm.DeptId).FirstAsync();
if (dept == null)
{
return ToResponse(ResultCode.CUSTOM_ERROR, "部门不存在,请选择正确的部门!");
}
//var dept = _DeptService.GetInfo(parm.DeptId);
parm.DeptName = dept.DeptName;
}
var modal = parm.Adapt<OdfRooms>().ToCreate(HttpContext);
modal.DeptId = parm.DeptId;
modal.DeptName = parm.DeptName;
var response = _OdfRoomsService.AddOdfRooms(modal);
if (parm.RacksCount > 0)
{
var roomId = response.Id;
var roomName = response.RoomName;
List<OdfRacks> racksList = new List<OdfRacks>();
//添加机架
for (int i = 0; i < parm.RacksCount; i++)
{
var t = await _OdfRacksService.InsertReturnEntityAsync(new OdfRacks
{
CreatedAt = DateTime.Now,
FrameCount = parm.FramesCount,
DeptId = response.DeptId ?? 0,
RackName = $"odf-{(i + 1)}",
RoomId = roomId,
SequenceNumber = i + 1,
UpdatedAt = DateTime.Now,
}); // 直接插入机架
racksList.Add(t);
}
//机架添加完成
//return Insertable(model).ExecuteReturnEntity();
if (parm.FramesCount > 0)
{
//添加机框
List<OdfFrames> framesList = new List<OdfFrames>();
foreach (var rack in racksList)
{
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 = racksList.Find(it => it.Id == frame.RackId);
if (ra == null)
{
continue;
}
List<OdfPorts> ports = new List<OdfPorts>();
for (int row = 0; row < parm.RowCount; row++)
{
for (int port = 0; port < parm.PortsCount; port++)
{
ports.Add(new OdfPorts()
{
CreatedAt = DateTime.Now,
DeptId = frame.DeptId ?? 0,
DeptName = modal.DeptName,
RackId = frame.RackId,
RackName = ra.RackName,
RoomId = roomId,
RoomName = roomName,
FrameId = frame.Id,
FrameName = frame.PortsName,
Name = $"{(row + 1)}-{(port + 1)}",
RowNumber = row,
PortNumber = port,
OpticalAttenuation = "",
HistoryRemarks = "",
Remarks = "",
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);
}
/// <summary>
/// 更新机房列表
/// </summary>
/// <returns></returns>
[HttpPut]
[ActionPermissionFilter(Permission = "odfrooms:edit")]
[Log(Title = "机房列表", BusinessType = BusinessType.UPDATE)]
public async Task<IActionResult> UpdateOdfRooms([FromBody] OdfRoomsDto parm)
{
parm.UpdatedAt = DateTime.Now;
if (parm.DeptId == 0)
{
parm.DeptName = "未知部门";
}
else
{
var dept = await sysDeptService.AsQueryable().Where(it => it.DeptId == parm.DeptId).FirstAsync();
if (dept == null)
{
return ToResponse(ResultCode.CUSTOM_ERROR, "部门不存在,请选择正确的部门!");
}
//var dept = _DeptService.GetInfo(parm.DeptId);
parm.DeptName = dept.DeptName;
}
var oldModel = _OdfRoomsService.GetById(parm.Id);
var modal = parm.Adapt<OdfRooms>().ToUpdate(HttpContext);
var response = _OdfRoomsService.UpdateOdfRooms(modal);
if (response > 0)
{
if (oldModel.DeptId != modal.DeptId)
{
var deptId = modal.DeptId ?? 0;
var deptName = modal.DeptName;
var roomId = oldModel.Id;
// 最直接的转换
await _OdfPortsService.UpdateAsync(
it => it.RoomId == roomId, // WHERE条件
it => new OdfPorts // SET部分
{
DeptId = deptId,
DeptName = deptName
}
);
// 1. 更新 odf_racks
var racksUpdated = await _OdfRacksService.UpdateAsync(
r => r.RoomId == roomId,
r => new OdfRacks { DeptId = deptId }
);
// 2. 更新 odf_frames方法1子查询
var framesUpdated = await _OdfFramesService.UpdateAsync(
f => SqlFunc.Subqueryable<OdfRacks>()
.Where(r => r.RoomId == roomId && r.Id == f.RackId)
.Any(),
f => new OdfFrames { DeptId = deptId }
);
// update odf_frames f set DeptId=0 where RackId exists ( select id from odf_racks where roomid=1 and id=f.RackId )
// update odf_racks set DeptId=0 where roomid=1
//_OdfFramesService
//_OdfRacksService
}
}
return ToResponse(response);
}
/// <summary>
/// 删除机房列表
/// </summary>
/// <returns></returns>
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "odfrooms:delete")]
[Log(Title = "机房列表", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteOdfRooms([FromRoute] string ids)
{
var idArr = Tools.SplitAndConvert<int>(ids);
return ToResponse(_OdfRoomsService.Delete(idArr, "删除机房列表"));
}
/// <summary>
/// 导出机房列表
/// </summary>
/// <returns></returns>
[Log(Title = "机房列表", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[HttpGet("export")]
[ActionPermissionFilter(Permission = "odfrooms:export")]
public IActionResult Export([FromQuery] OdfRoomsQueryDto parm)
{
var list = _OdfRoomsService.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 = "odfrooms:import")]
public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
{
List<OdfRoomsDto> list = new();
using (var stream = formFile.OpenReadStream())
{
list = stream.Query<OdfRoomsDto>(startCell: "A1").ToList();
}
return SUCCESS(_OdfRoomsService.ImportOdfRooms(list.Adapt<List<OdfRooms>>()));
}
/// <summary>
/// 机房列表导入模板下载
/// </summary>
/// <returns></returns>
[HttpGet("importTemplate")]
[Log(Title = "机房列表模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[AllowAnonymous]
public IActionResult ImportTemplateExcel()
{
var result = DownloadImportTemplate(new List<OdfRoomsDto>() { }, "OdfRooms");
return ExportExcel(result.Item2, result.Item1);
}
}
}

View File

@ -1,5 +1,7 @@
using Lazy.Captcha.Core;
using Microsoft.AspNetCore.Mvc;
using ZR.Model.Models;
using ZR.Model.System;
using ZR.Model.System.Dto;
@ -67,8 +69,8 @@ namespace ZR.Admin.WebApi.Controllers.System
List<SysRole> roles = roleService.SelectUserRoleListByUserId(user.UserId);
//权限集合 eg *:*:*,system:user:list
List<string> permissions = permissionService.GetMenuPermission(new SysUserDto() { UserId = user.UserId});
List<string> permissions = permissionService.GetMenuPermission(new SysUserDto() { UserId = user.UserId });
TokenModel loginUser = new(user.Adapt<TokenModel>(), roles.Adapt<List<Roles>>())
{
TenantId = loginBody.TenantId,
@ -78,6 +80,39 @@ namespace ZR.Admin.WebApi.Controllers.System
return SUCCESS(JwtUtil.GenerateJwtToken(JwtUtil.AddClaims(loginUser)));
}
/// <summary>
/// 登录
/// </summary>
/// <param name="loginBody">登录对象</param>
/// <returns></returns>
[Route("appLogin")]
[HttpPost]
[Log(Title = "登录")]
[AllowAnonymous]
public IActionResult AppLogin([FromBody] LoginBodyDto loginBody)
{
if (loginBody == null) { throw new CustomException("请求参数错误"); }
loginBody.LoginIP = HttpContextExtension.GetClientUserIp(HttpContext);
sysLoginService.CheckLockUser(loginBody.Username);
string location = HttpContextExtension.GetIpInfo(loginBody.LoginIP);
var user = sysLoginService.Login(loginBody, new SysLogininfor() { LoginLocation = location });
List<SysRole> roles = roleService.SelectUserRoleListByUserId(user.UserId);
//权限集合 eg *:*:*,system:user:list
List<string> permissions = permissionService.GetMenuPermission(new SysUserDto() { UserId = user.UserId });
TokenModel loginUser = new(user.Adapt<TokenModel>(), roles.Adapt<List<Roles>>())
{
TenantId = loginBody.TenantId,
Permissions = permissions,
};
//CacheService.SetUserPerms(GlobalConstant.UserPermKEY + user.UserId, permissions);
var jwt = JwtUtil.GenerateJwtToken(JwtUtil.AddClaims(loginUser));
return SUCCESS(new { jwt, user.UserId, user.UserName });
}
//
/// <summary>
/// 注销
/// </summary>
@ -103,7 +138,7 @@ namespace ZR.Admin.WebApi.Controllers.System
{
long userId = HttpContext.GetUId();
var user = sysUserService.SelectUserById(userId);
//前端校验按钮权限使用
//角色集合 eg: admin,yunying,common
List<string> roles = permissionService.GetRolePermission(user);

View File

@ -36,8 +36,8 @@
"Issuer": "ZRAdmin.NET", //token
"Audience": "ZRAdmin.NET", //token
"SecretKey": "SecretKey-ZRADMIN.NET-202311281883838",
"Expire": 1440, //jwt
"RefreshTokenTime": 30, //
"Expire": 60, //jwt
"RefreshTokenTime": 7200, //
"TokenType": "Bearer"
},
"MainDb": "0", // ID

Binary file not shown.

View File

@ -0,0 +1,61 @@
namespace ZR.Model.Business.Dto
{
/// <summary>
/// 框-信息查询对象
/// </summary>
public class OdfFramesQueryDto : PagerInfo
{
public int? RackId { get; set; }
public string PortsName { get; set; }
}
/// <summary>
/// 框-信息输入输出对象
/// </summary>
public class OdfFramesDto
{
[Required(ErrorMessage = "Id不能为空")]
public int Id { get; set; }
[Required(ErrorMessage = "ODF机架ID不能为空")]
public int RackId { get; set; }
public string PortsName { get; set; }
public long? DeptId { get; set; }
public int? SequenceNumber { get; set; }
public int? PortsCount { get; set; }
public int? PortsCol { get; set; }
public int? PortsRow { get; set; }
public DateTime? CreatedAt { get; set; }
public DateTime? UpdateAt { get; set; }
}
public class OdfFramesExpertDto : OdfFramesDto
{
public int RoomId { get; set; }
/// <summary>
/// 行数
/// </summary>
public int RowCount { get; set; }
/// <summary>
/// 端口数量
/// </summary>
public int PortsCount { get; set; }
/// <summary>
///
/// </summary>
public int DefaultStatus { get; set; }
}
}

View File

@ -0,0 +1,190 @@
namespace ZR.Model.Business.Dto
{
/// <summary>
/// 端口查询对象
/// </summary>
public class OdfPortsQueryDto : PagerInfo
{
/// <summary>
///
/// </summary>
public long? DeptId { get; set; }
/// <summary>
///
/// </summary>
public string Name { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
/// <summary>
/// 历史故障记录
/// </summary>
public string HistoryRemarks { get; set; }
/// <summary>
/// 机房id
/// </summary>
public int? RoomId { get; set; }
/// <summary>
/// 机架id
/// </summary>
public int? RacksId { get; set; }
/// <summary>
/// 框id
/// </summary>
public int? FramesId { get; set; }
}
public class OdfPortsMQueryDto
{
/// <summary>
/// 机房id
/// </summary>
public int? RoomId { get; set; }
/// <summary>
/// 机架id
/// </summary>
public int? RackId { get; set; }
}
public class OdfPortsMListDto
{
public int Id { get; set; }
public string Name { get; set; }
public List<OdfPortsMDto> odfPortsList { get; set; } = new List<OdfPortsMDto>();
}
public class OdfPortsMDto
{
public int Id { get; set; }
public string Name { get; set; }
public int Status { get; set; }
}
/// <summary>
/// 端口输入输出对象
/// </summary>
public class OdfPortsDto
{
[Required(ErrorMessage = "Id不能为空")]
[ExcelColumn(Name = "Id")]
[ExcelColumnName("Id")]
public int Id { get; set; }
[Required(ErrorMessage = "端口名称不能为空")]
[ExcelColumn(Name = "端口名称")]
[ExcelColumnName("端口名称")]
public string Name { get; set; }
[Required(ErrorMessage = "机房ID不能为空")]
[ExcelColumn(Name = "机房ID")]
[ExcelColumnName("机房ID")]
public int RoomId { get; set; }
[Required(ErrorMessage = "机房名称不能为空")]
[ExcelColumn(Name = "机房名称")]
[ExcelColumnName("机房名称")]
public string RoomName { get; set; }
[Required(ErrorMessage = "机架ID不能为空")]
[ExcelColumn(Name = "机架ID")]
[ExcelColumnName("机架ID")]
public int RackId { get; set; }
[Required(ErrorMessage = "机架名称不能为空")]
[ExcelColumn(Name = "机架名称")]
[ExcelColumnName("机架名称")]
public string RackName { get; set; }
[Required(ErrorMessage = "框ID不能为空")]
[ExcelColumn(Name = "框ID")]
[ExcelColumnName("框ID")]
public int FrameId { get; set; }
[Required(ErrorMessage = "框名称不能为空")]
[ExcelColumn(Name = "框名称")]
[ExcelColumnName("框名称")]
public string FrameName { get; set; }
[Required(ErrorMessage = "部门ID不能为空")]
[ExcelColumn(Name = "部门ID")]
[ExcelColumnName("部门ID")]
public long DeptId { get; set; }
[Required(ErrorMessage = "行号1-6不能为空")]
[ExcelColumn(Name = "行号1-6")]
[ExcelColumnName("行号1-6")]
public int RowNumber { get; set; }
[Required(ErrorMessage = "端口号1-12不能为空")]
[ExcelColumn(Name = "端口号1-12")]
[ExcelColumnName("端口号1-12")]
public int PortNumber { get; set; }
[Required(ErrorMessage = "连接状态0正常1断开不能为空")]
[ExcelColumn(Name = "连接状态0正常1断开")]
[ExcelColumnName("连接状态0正常1断开")]
public int Status { get; set; }
[ExcelColumn(Name = "备注")]
[ExcelColumnName("备注")]
public string Remarks { get; set; }
[ExcelColumn(Name = "光衰值dB")]
[ExcelColumnName("光衰值dB")]
public string OpticalAttenuation { get; set; }
[ExcelColumn(Name = "历史故障表")]
[ExcelColumnName("历史故障表")]
public string HistoryRemarks { get; set; }
[Required(ErrorMessage = "创建时间不能为空")]
[ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("创建时间")]
public DateTime? CreatedAt { get; set; }
[Required(ErrorMessage = "修改时间不能为空")]
[ExcelColumn(Name = "修改时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("修改时间")]
public DateTime? UpdatedAt { get; set; }
[ExcelColumn(Name = "连接状态0正常1断开")]
public string StatusLabel { get; set; }
/// <summary>
/// 部门名称
/// </summary>
[ExcelColumn(Name = "部门名称")]
public string DeptName { get; set; }
}
/// <summary>
/// 端口输入输出对象
/// </summary>
public class OdfPortsMMDto
{
[Required(ErrorMessage = "Id不能为空")]
[ExcelColumn(Name = "Id")]
[ExcelColumnName("Id")]
public int Id { get; set; }
public int Status { get; set; }
public string Remarks { get; set; }
public string OpticalAttenuation { get; set; }
[ExcelColumn(Name = "历史故障表")]
[ExcelColumnName("历史故障表")]
public string HistoryRemarks { get; set; }
}
}

View File

@ -0,0 +1,76 @@
namespace ZR.Model.Business.Dto
{
/// <summary>
/// 机架列表查询对象
/// </summary>
public class OdfRacksQueryDto : PagerInfo
{
public int? RoomId { get; set; }
public string RackName { get; set; }
}
/// <summary>
/// 机架列表输入输出对象
/// </summary>
public class OdfRacksDto
{
[Required(ErrorMessage = "Id不能为空")]
[ExcelColumn(Name = "Id")]
[ExcelColumnName("Id")]
public int Id { get; set; }
[Required(ErrorMessage = "机房不能为空")]
[ExcelColumn(Name = "机房")]
[ExcelColumnName("机房")]
public int RoomId { get; set; }
[Required(ErrorMessage = "序号不能为空")]
[ExcelColumn(Name = "序号")]
[ExcelColumnName("序号")]
public int SequenceNumber { get; set; }
[Required(ErrorMessage = "ODF名称不能为空")]
[ExcelColumn(Name = "ODF名称")]
[ExcelColumnName("ODF名称")]
public string RackName { get; set; }
[ExcelColumn(Name = "框数量固定9框")]
[ExcelColumnName("框数量固定9框")]
public int? FrameCount { get; set; }
[ExcelColumn(Name = "CreatedAt", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("CreatedAt")]
public DateTime? CreatedAt { get; set; }
[ExcelColumn(Name = "UpdatedAt", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("UpdatedAt")]
public DateTime? UpdatedAt { get; set; }
}
public class OdfRacksExpertDto : OdfRacksDto
{
/// <summary>
/// 机框数量
/// </summary>
public int FramesCount { get; set; }
/// <summary>
/// 行数
/// </summary>
public int RowCount { get; set; }
/// <summary>
/// 端口数量
/// </summary>
public int PortsCount { get; set; }
/// <summary>
///
/// </summary>
public int DefaultStatus { get; set; }
}
}

View File

@ -0,0 +1,137 @@
namespace ZR.Model.Business.Dto
{
/// <summary>
/// 机房列表查询对象
/// </summary>
public class OdfRoomsQueryDto : PagerInfo
{
public string RoomName { get; set; }
public string RoomAddress { get; set; }
public string Remarks { get; set; }
public List<long> DeptIds { get; set; }
}
/// <summary>
/// 机房列表查询对象
/// </summary>
public class OdfRoomsTreeQueryDto : PagerInfo
{
public string Name { get; set; }
public int? DeptId { get; set; }
public int Level { get; set; }
/// <summary>
/// 机房id
/// </summary>
public int? RoomId { get; set; }
/// <summary>
/// 机架id
/// </summary>
public int? RacksId { get; set; }
/// <summary>
/// 框id
/// </summary>
public int? FramesId { get; set; }
}
/// <summary>
/// 机房树结构
/// </summary>
public class OdfRoomsTreeDto
{
public string Key { get; set; }
public string Id { get; set; }
public string Name { get; set; }
public long DeptId { get; set; }
public int Level { get; set; }
public bool Leaf { get; set; }
/// <summary>
/// 机房id
/// </summary>
public int? RoomId { get; set; }
/// <summary>
/// 机架id
/// </summary>
public int? RacksId { get; set; }
/// <summary>
/// 框id
/// </summary>
public int? FramesId { get; set; }
}
/// <summary>
/// 机房列表输入输出对象
/// </summary>
public class OdfRoomsDto
{
[Required(ErrorMessage = "Id不能为空")]
[ExcelColumn(Name = "Id")]
[ExcelColumnName("Id")]
public int Id { get; set; }
[ExcelColumn(Name = "部门ID")]
[ExcelColumnName("部门ID")]
public long? DeptId { get; set; }
[ExcelColumn(Name = "部门名称")]
[ExcelColumnName("部门名称")]
public string DeptName { get; set; }
[Required(ErrorMessage = "机房名称不能为空")]
[ExcelColumn(Name = "机房名称")]
[ExcelColumnName("机房名称")]
public string RoomName { get; set; }
[Required(ErrorMessage = "机房位置不能为空")]
[ExcelColumn(Name = "机房位置")]
[ExcelColumnName("机房位置")]
public string RoomAddress { get; set; }
[ExcelColumn(Name = "机架数量")]
[ExcelColumnName("机架数量")]
public int? RacksCount { get; set; }
[ExcelColumn(Name = "备注")]
[ExcelColumnName("备注")]
public string Remarks { get; set; }
[ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("创建时间")]
public DateTime? CreatedAt { get; set; }
[ExcelColumn(Name = "修改时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
[ExcelColumnName("修改时间")]
public DateTime? UpdatedAt { get; set; }
}
/// <summary>
///
/// </summary>
public class OdfRoomsExpertDto : OdfRoomsDto
{
/// <summary>
/// 机框数量
/// </summary>
public int FramesCount { get; set; }
/// <summary>
/// 行数
/// </summary>
public int RowCount { get; set; }
/// <summary>
/// 端口数量
/// </summary>
public int PortsCount { get; set; }
/// <summary>
///
/// </summary>
public int DefaultStatus { get; set; }
}
}

View File

@ -0,0 +1,62 @@
namespace ZR.Model.Business
{
/// <summary>
/// 框-信息
/// </summary>
[SugarTable("odf_frames")]
public class OdfFrames
{
/// <summary>
/// Id
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// ODF机架ID
/// </summary>
public int RackId { get; set; }
/// <summary>
/// 名称
/// </summary>
public string PortsName { get; set; }
/// <summary>
/// 所属部门
/// </summary>
public long? DeptId { get; set; }
/// <summary>
/// 序号
/// </summary>
public int? SequenceNumber { get; set; }
/// <summary>
/// 端口数量
/// </summary>
public int? PortsCount { get; set; }
/// <summary>
/// 列数量
/// </summary>
public int? PortsCol { get; set; }
/// <summary>
/// 行数量
/// </summary>
public int? PortsRow { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreatedAt { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? UpdateAt { get; set; }
}
}

View File

@ -0,0 +1,102 @@
namespace ZR.Model.Business
{
/// <summary>
/// 端口
/// </summary>
[SugarTable("odf_ports")]
public class OdfPorts
{
/// <summary>
/// Id
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 端口名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 机房ID
/// </summary>
public int RoomId { get; set; }
/// <summary>
/// 机房名称
/// </summary>
public string RoomName { get; set; }
/// <summary>
/// 机架ID
/// </summary>
public int RackId { get; set; }
/// <summary>
/// 机架名称
/// </summary>
public string RackName { get; set; }
/// <summary>
/// 框ID
/// </summary>
public int FrameId { get; set; }
/// <summary>
/// 框名称
/// </summary>
public string FrameName { get; set; }
/// <summary>
/// 部门ID
/// </summary>
public long DeptId { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string DeptName { get; set; }
/// <summary>
/// 行号1-6
/// </summary>
public int RowNumber { get; set; }
/// <summary>
/// 端口号1-12
/// </summary>
public int PortNumber { get; set; }
/// <summary>
/// 连接状态0正常1断开
/// </summary>
public int Status { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
/// <summary>
/// 光衰值dB
/// </summary>
public string OpticalAttenuation { get; set; }
/// <summary>
/// 历史故障表
/// </summary>
public string HistoryRemarks { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreatedAt { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? UpdatedAt { get; set; }
}
}

View File

@ -0,0 +1,51 @@
namespace ZR.Model.Business
{
/// <summary>
/// 机架列表
/// </summary>
[SugarTable("odf_racks")]
public class OdfRacks
{
/// <summary>
/// Id
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 机房
/// </summary>
public int RoomId { get; set; }
/// <summary>
/// 序号
/// </summary>
public int SequenceNumber { get; set; }
/// <summary>
/// ODF名称
/// </summary>
public string RackName { get; set; }
/// <summary>
/// 框数量固定9框
/// </summary>
public int? FrameCount { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreatedAt { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? UpdatedAt { get; set; }
/// <summary>
/// 部门
/// </summary>
public long DeptId { get; set; }
}
}

View File

@ -0,0 +1,57 @@
namespace ZR.Model.Business
{
/// <summary>
/// 机房列表
/// </summary>
[SugarTable("odf_rooms")]
public class OdfRooms
{
/// <summary>
/// Id
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 部门ID
/// </summary>
public long? DeptId { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string DeptName { get; set; }
/// <summary>
/// 机房名称
/// </summary>
public string RoomName { get; set; }
/// <summary>
/// 机房位置
/// </summary>
public string RoomAddress { get; set; }
/// <summary>
/// 机架数量
/// </summary>
public int? RacksCount { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreatedAt { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? UpdatedAt { get; set; }
}
}

View File

@ -32,4 +32,31 @@ namespace ZR.Model.System.Dto
/// </summary>
public string TenantId { get; set; }
}
public class LoginMBodyDto
{
/// <summary>
/// 用户名
/// </summary>
[Required(ErrorMessage = "用户名不能为空")]
public string Username { get; set; }
/// <summary>
/// 用户密码
/// </summary>
[Required(ErrorMessage = "密码不能为空")]
public string Password { get; set; }
/// <summary>
/// 验证码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 唯一标识
/// </summary>
public string Uuid { get; set; } = "";
}
}

View File

@ -0,0 +1,21 @@
using ZR.Model.Business.Dto;
using ZR.Model.Business;
namespace ZR.Service.Business.IBusinessService
{
/// <summary>
/// 框-信息service接口
/// </summary>
public interface IOdfFramesService : IBaseService<OdfFrames>
{
PagedInfo<OdfFramesDto> GetList(OdfFramesQueryDto parm);
OdfFrames GetInfo(int Id);
OdfFrames AddOdfFrames(OdfFrames parm);
int UpdateOdfFrames(OdfFrames parm);
}
}

View File

@ -0,0 +1,23 @@
using ZR.Model.Business.Dto;
using ZR.Model.Business;
namespace ZR.Service.Business.IBusinessService
{
/// <summary>
/// 端口service接口
/// </summary>
public interface IOdfPortsService : IBaseService<OdfPorts>
{
PagedInfo<OdfPortsDto> GetList(OdfPortsQueryDto parm);
OdfPorts GetInfo(int Id);
OdfPorts AddOdfPorts(OdfPorts parm);
int UpdateOdfPorts(OdfPorts parm);
(string, object, object) ImportOdfPorts(List<OdfPorts> list);
PagedInfo<OdfPortsDto> ExportList(OdfPortsQueryDto parm);
}
}

View File

@ -0,0 +1,23 @@
using ZR.Model.Business.Dto;
using ZR.Model.Business;
namespace ZR.Service.Business.IBusinessService
{
/// <summary>
/// 机架列表service接口
/// </summary>
public interface IOdfRacksService : IBaseService<OdfRacks>
{
PagedInfo<OdfRacksDto> GetList(OdfRacksQueryDto parm);
OdfRacks GetInfo(int Id);
OdfRacks AddOdfRacks(OdfRacks parm);
int UpdateOdfRacks(OdfRacks parm);
(string, object, object) ImportOdfRacks(List<OdfRacks> list);
PagedInfo<OdfRacksDto> ExportList(OdfRacksQueryDto parm);
}
}

View File

@ -0,0 +1,24 @@
using ZR.Model.Business.Dto;
using ZR.Model.Business;
namespace ZR.Service.Business.IBusinessService
{
/// <summary>
/// 机房列表service接口
/// </summary>
public interface IOdfRoomsService : IBaseService<OdfRooms>
{
PagedInfo<OdfRoomsDto> GetList(OdfRoomsQueryDto parm);
List<OdfRooms> GetList(OdfRoomsTreeQueryDto parm);
OdfRooms GetInfo(int Id);
OdfRooms AddOdfRooms(OdfRooms parm);
int UpdateOdfRooms(OdfRooms parm);
(string, object, object) ImportOdfRooms(List<OdfRooms> list);
PagedInfo<OdfRoomsDto> ExportList(OdfRoomsQueryDto parm);
}
}

View File

@ -0,0 +1,82 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using ZR.Model.Business.Dto;
using ZR.Model.Business;
using ZR.Repository;
using ZR.Service.Business.IBusinessService;
namespace ZR.Service.Business
{
/// <summary>
/// 框-信息Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOdfFramesService), ServiceLifetime = LifeTime.Transient)]
public class OdfFramesService : BaseService<OdfFrames>, IOdfFramesService
{
/// <summary>
/// 查询框-信息列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfFramesDto> GetList(OdfFramesQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
//.OrderBy("SequenceNumber asc")
.Where(predicate.ToExpression())
.ToPage<OdfFrames, OdfFramesDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public OdfFrames GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加框-信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public OdfFrames AddOdfFrames(OdfFrames model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改框-信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateOdfFrames(OdfFrames model)
{
return Update(model, true, "修改框-信息");
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<OdfFrames> QueryExp(OdfFramesQueryDto parm)
{
var predicate = Expressionable.Create<OdfFrames>();
predicate = predicate.AndIF(parm.RackId != null, it => it.RackId == parm.RackId);
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.PortsName), it => it.PortsName.Contains(parm.PortsName));
return predicate;
}
}
}

View File

@ -0,0 +1,171 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using ZR.Model.Business.Dto;
using ZR.Model.Business;
using ZR.Repository;
using ZR.Service.Business.IBusinessService;
namespace ZR.Service.Business
{
/// <summary>
/// 端口Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOdfPortsService), ServiceLifetime = LifeTime.Transient)]
public class OdfPortsService : BaseService<OdfPorts>, IOdfPortsService
{
/// <summary>
/// 查询端口列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfPortsDto> GetList(OdfPortsQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
//.OrderBy("Id asc")
.Where(predicate.ToExpression())
.OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc")
//.OrderBy(it => it.RoomId)
//.OrderBy(it => it.RackId)
//.OrderBy(it => it.Id)
//.OrderBy(it => it.Name)
.ToPage<OdfPorts, OdfPortsDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public OdfPorts GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加端口
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public OdfPorts AddOdfPorts(OdfPorts model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改端口
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateOdfPorts(OdfPorts model)
{
return Update(model, true, "修改端口");
}
/// <summary>
/// 导入端口
/// </summary>
/// <returns></returns>
public (string, object, object) ImportOdfPorts(List<OdfPorts> list)
{
var x = Context.Storageable(list)
.SplitInsert(it => !it.Any())
.SplitError(x => x.Item.Name.IsEmpty(), "端口名称不能为空")
.SplitError(x => x.Item.RoomId.IsEmpty(), "机房ID不能为空")
.SplitError(x => x.Item.RoomName.IsEmpty(), "机房名称不能为空")
.SplitError(x => x.Item.RackId.IsEmpty(), "机架ID不能为空")
.SplitError(x => x.Item.RackName.IsEmpty(), "机架名称不能为空")
.SplitError(x => x.Item.FrameId.IsEmpty(), "框ID不能为空")
.SplitError(x => x.Item.FrameName.IsEmpty(), "框名称不能为空")
.SplitError(x => x.Item.DeptId.IsEmpty(), "部门ID不能为空")
.SplitError(x => x.Item.RowNumber.IsEmpty(), "行号1-6不能为空")
.SplitError(x => x.Item.PortNumber.IsEmpty(), "端口号1-12不能为空")
.SplitError(x => x.Item.Status.IsEmpty(), "连接状态0正常1断开不能为空")
.SplitError(x => x.Item.CreatedAt.IsEmpty(), "创建时间不能为空")
.SplitError(x => x.Item.UpdatedAt.IsEmpty(), "修改时间不能为空")
//.WhereColumns(it => it.UserName)//如果不是主键可以这样实现多字段it=>new{it.x1,it.x2}
.ToStorage();
var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
Console.WriteLine(msg);
//输出错误信息
foreach (var item in x.ErrorList)
{
Console.WriteLine("错误" + item.StorageMessage);
}
foreach (var item in x.IgnoreList)
{
Console.WriteLine("忽略" + item.StorageMessage);
}
return (msg, x.ErrorList, x.IgnoreList);
}
/// <summary>
/// 导出端口
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfPortsDto> ExportList(OdfPortsQueryDto parm)
{
parm.PageNum = 1;
parm.PageSize = 100000;
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.OrderBy("RoomId asc,RackId asc,FrameId asc,Name asc")
.Select((it) => new OdfPortsDto()
{
}, true)
.ToPage(parm);
return response;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<OdfPorts> QueryExp(OdfPortsQueryDto parm)
{
var predicate = Expressionable.Create<OdfPorts>();
if (parm.RoomId != null)
{
predicate = predicate.And(f => f.RoomId == parm.RoomId);
}
if (parm.RacksId != null)
{
predicate = predicate.And(f => f.RackId == parm.RacksId);
}
if (parm.FramesId != null)
{
predicate = predicate.And(f => f.FrameId == parm.FramesId);
}
if (!string.IsNullOrEmpty(parm.Name))
{
predicate = predicate.And(f => f.Name.Contains(parm.Name));
}
if (!string.IsNullOrEmpty(parm.Remarks))
{
predicate = predicate.And(f => f.Remarks.Contains(parm.Remarks));
}
if (!string.IsNullOrEmpty(parm.HistoryRemarks))
{
predicate = predicate.And(f => f.HistoryRemarks.Contains(parm.HistoryRemarks));
}
return predicate;
}
}
}

View File

@ -0,0 +1,138 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using ZR.Model.Business.Dto;
using ZR.Model.Business;
using ZR.Repository;
using ZR.Service.Business.IBusinessService;
namespace ZR.Service.Business
{
/// <summary>
/// 机架列表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOdfRacksService), ServiceLifetime = LifeTime.Transient)]
public class OdfRacksService : BaseService<OdfRacks>, IOdfRacksService
{
/// <summary>
/// 查询机架列表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfRacksDto> GetList(OdfRacksQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.OrderBy("RoomId asc,SequenceNumber asc")
.Where(predicate.ToExpression())
.ToPage<OdfRacks, OdfRacksDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public OdfRacks GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加机架列表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public OdfRacks AddOdfRacks(OdfRacks model)
{
model.CreatedAt = DateTime.Now;
model.UpdatedAt=DateTime.Now;
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改机架列表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateOdfRacks(OdfRacks model)
{
model.UpdatedAt = DateTime.Now;
return Update(model, true, "修改机架列表");
}
/// <summary>
/// 导入机架列表
/// </summary>
/// <returns></returns>
public (string, object, object) ImportOdfRacks(List<OdfRacks> list)
{
var x = Context.Storageable(list)
.SplitInsert(it => !it.Any())
.SplitError(x => x.Item.RoomId.IsEmpty(), "机房不能为空")
.SplitError(x => x.Item.SequenceNumber.IsEmpty(), "序号不能为空")
.SplitError(x => x.Item.RackName.IsEmpty(), "ODF名称不能为空")
//.WhereColumns(it => it.UserName)//如果不是主键可以这样实现多字段it=>new{it.x1,it.x2}
.ToStorage();
var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
Console.WriteLine(msg);
//输出错误信息
foreach (var item in x.ErrorList)
{
Console.WriteLine("错误" + item.StorageMessage);
}
foreach (var item in x.IgnoreList)
{
Console.WriteLine("忽略" + item.StorageMessage);
}
return (msg, x.ErrorList, x.IgnoreList);
}
/// <summary>
/// 导出机架列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfRacksDto> ExportList(OdfRacksQueryDto parm)
{
parm.PageNum = 1;
parm.PageSize = 100000;
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.Select((it) => new OdfRacksDto()
{
}, true)
.ToPage(parm);
return response;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<OdfRacks> QueryExp(OdfRacksQueryDto parm)
{
var predicate = Expressionable.Create<OdfRacks>();
predicate = predicate.AndIF(parm.RoomId != null, it => it.RoomId == parm.RoomId);
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RackName), it => it.RackName.Contains(parm.RackName));
return predicate;
}
}
}

View File

@ -0,0 +1,173 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using ZR.Model.Business.Dto;
using ZR.Model.Business;
using ZR.Repository;
using ZR.Service.Business.IBusinessService;
using Infrastructure;
using SqlSugar.IOC;
namespace ZR.Service.Business
{
/// <summary>
/// 机房列表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOdfRoomsService), ServiceLifetime = LifeTime.Transient)]
public class OdfRoomsService : BaseService<OdfRooms>, IOdfRoomsService
{
/// <summary>
/// 查询机房列表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfRoomsDto> GetList(OdfRoomsQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
//.OrderBy("Id desc")
.Where(predicate.ToExpression())
.ToPage<OdfRooms, OdfRoomsDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public OdfRooms GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加机房列表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public OdfRooms AddOdfRooms(OdfRooms model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改机房列表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateOdfRooms(OdfRooms model)
{
return Update(model, true, "修改机房列表");
}
/// <summary>
/// 导入机房列表
/// </summary>
/// <returns></returns>
public (string, object, object) ImportOdfRooms(List<OdfRooms> list)
{
var x = Context.Storageable(list)
.SplitInsert(it => !it.Any())
.SplitError(x => x.Item.RoomName.IsEmpty(), "机房名称不能为空")
.SplitError(x => x.Item.RoomAddress.IsEmpty(), "机房位置不能为空")
//.WhereColumns(it => it.UserName)//如果不是主键可以这样实现多字段it=>new{it.x1,it.x2}
.ToStorage();
var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
Console.WriteLine(msg);
//输出错误信息
foreach (var item in x.ErrorList)
{
Console.WriteLine("错误" + item.StorageMessage);
}
foreach (var item in x.IgnoreList)
{
Console.WriteLine("忽略" + item.StorageMessage);
}
return (msg, x.ErrorList, x.IgnoreList);
}
/// <summary>
/// 导出机房列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfRoomsDto> ExportList(OdfRoomsQueryDto parm)
{
parm.PageNum = 1;
parm.PageSize = 100000;
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.Select((it) => new OdfRoomsDto()
{
}, true)
.ToPage(parm);
return response;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<OdfRooms> QueryExp(OdfRoomsQueryDto parm)
{
var predicate = Expressionable.Create<OdfRooms>();
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RoomName), it => it.RoomName.Contains(parm.RoomName));
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RoomAddress), it => it.RoomAddress.Contains(parm.RoomAddress));
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Remarks), it => it.Remarks.Contains(parm.Remarks));
predicate = predicate.AndIF(parm.DeptIds != null && parm.DeptIds.Count > 0, it => parm.DeptIds.Contains(it.DeptId ?? 0));
return predicate;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<OdfRooms> QueryExp(OdfRoomsTreeQueryDto parm)
{
var predicate = Expressionable.Create<OdfRooms>();
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Name), it => (it.RoomName.Contains(parm.Name) || it.RoomAddress.Contains(parm.Name) || it.DeptName.Contains(parm.Name)));
if (parm.DeptId != null)
{
if (parm.DeptId == 0)
{
predicate = predicate.AndIF(parm.DeptId != null, it => parm.DeptId == (it.DeptId ?? 0));
}
else
{
var db = DbScoped.SugarScope.GetConnectionScope("0");
string sql = "WITH DeptCTE AS( SELECT DeptId, ParentId, DeptName FROM sys_dept WHERE DeptId =" + parm.DeptId + " UNION ALL SELECT d.DeptId, d.ParentId, d.DeptName FROM sys_dept d INNER JOIN DeptCTE cte ON d.ParentId = cte.DeptId WHERE d.DelFlag = 0) SELECT DeptId FROM DeptCTE ORDER BY DeptId";
var list = db.Ado.SqlQuery<long>(sql);
predicate = predicate.And(it => list.Contains(it.DeptId ?? 0));
}
}
return predicate;
}
public List<OdfRooms> GetList(OdfRoomsTreeQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToList();
return response;
}
}
}

View File

@ -156,6 +156,7 @@ namespace ZR.ServiceCore.Services
/// <returns></returns>
public List<SysDictDataDto> SelectDictDataByCustomSql(SysDictType sysDictType)
{
return Context.Ado.SqlQuery<SysDictDataDto>(sysDictType?.CustomSql).ToList();
}
}

View File

@ -1,8 +1,12 @@
using Infrastructure;
using Infrastructure.Attribute;
using SqlSugar.IOC;
using ZR.Model;
using ZR.Model.System;
using ZR.Model.System.Dto;
using ZR.ServiceCore.SqlSugar;
namespace ZR.ServiceCore.Services
{
@ -123,12 +127,59 @@ namespace ZR.ServiceCore.Services
/// <returns></returns>
public List<SysDictDataDto> SelectDictDataByCustomSql(string dictType)
{
var dictInfo = Queryable()
.Where(f => f.DictType == dictType).First();
if (dictInfo == null || !dictInfo.CustomSql.StartsWith("select", StringComparison.OrdinalIgnoreCase))
{
return null;
}
if (dictInfo.DictType == "sql_odf_room")
{
//获取当前用户的信息
var user = JwtUtil.GetLoginUser(App.HttpContext);
if (user == null)
{
dictInfo.CustomSql += " and DeptId = 0";
}
else
{
//管理员不过滤
if (!user.RoleKeys.Any(f => f.Equals(GlobalConstant.AdminRole)))
{
foreach (var role in user.Roles.OrderBy(f => f.DataScope))
{
var dataScope = (DataPermiEnum)role.DataScope;
if (DataPermiEnum.All.Equals(dataScope))//所有权限
{
break;
}
else if (DataPermiEnum.CUSTOM.Equals(dataScope))//自定数据权限
{
}
else if (DataPermiEnum.DEPT.Equals(dataScope))//本部门数据
{
//user.DeptId
dictInfo.CustomSql += " and DeptId = " + user.DeptId;
}
else if (DataPermiEnum.DEPT_CHILD.Equals(dataScope))//本部门及以下数据
{
//SQl OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )
var db = DbScoped.SugarScope.GetConnectionScope("0");
var allChildDepts = db.Queryable<SysDept>().ToChildList(it => it.ParentId, user.DeptId);
var allDeptId = allChildDepts.Select(f => f.DeptId).ToList();
dictInfo.CustomSql += " and DeptId in ( " + string.Join(",", allDeptId) + ")";
}
}
}
}
}
return DictDataService.SelectDictDataByCustomSql(dictInfo);
}
}

View File

@ -1,6 +1,9 @@
using Infrastructure;
using SqlSugar.IOC;
using ZR.Model;
using ZR.Model.Business;
using ZR.Model.Models;
using ZR.Model.System;
@ -51,7 +54,9 @@ namespace ZR.ServiceCore.SqlSugar
var expLoginlog = Expressionable.Create<SysLogininfor>();
var expSysMsg = Expressionable.Create<SysUserMsg>().And(it => it.IsDelete == 0);
var expDept = Expressionable.Create<SysDept>();
var expOdfRooms = Expressionable.Create<OdfRooms>();
var expOdfRacks = Expressionable.Create<OdfRacks>();
var expOdfPorts = Expressionable.Create<OdfPorts>();
db.QueryFilter.AddTableFilter(expSysMsg.ToExpression());
//管理员不过滤
if (user.RoleKeys.Any(f => f.Equals(GlobalConstant.AdminRole))) return;
@ -73,6 +78,9 @@ namespace ZR.ServiceCore.SqlSugar
{
expUser.And(it => it.DeptId == user.DeptId);
expDept.And(it => it.DeptId == user.DeptId);
expOdfRooms.And(it => (it.DeptId == user.DeptId || it.DeptId == 0));
expOdfRacks.And(it => (it.DeptId == user.DeptId || it.DeptId == 0));
expOdfPorts.And(it => (it.DeptId == user.DeptId || it.DeptId == 0));
}
else if (DataPermiEnum.DEPT_CHILD.Equals(dataScope))//本部门及以下数据
{
@ -82,6 +90,9 @@ namespace ZR.ServiceCore.SqlSugar
expUser.Or(it => allDeptId.Contains(it.DeptId));
expDept.And(it => allDeptId.Contains(it.DeptId));
expOdfRooms.And(it => (allDeptId.Contains(it.DeptId ?? 0) || it.DeptId == 0));
expOdfRacks.And(it => (allDeptId.Contains(it.DeptId) || it.DeptId == 0));
expOdfPorts.And(it => (allDeptId.Contains(it.DeptId) || it.DeptId == 0));
}
else if (DataPermiEnum.SELF.Equals(dataScope))//仅本人数据
{
@ -95,6 +106,9 @@ namespace ZR.ServiceCore.SqlSugar
db.QueryFilter.AddTableFilter(expUser.ToExpression());
db.QueryFilter.AddTableFilter(expRole.ToExpression());
db.QueryFilter.AddTableFilter(expLoginlog.ToExpression());
db.QueryFilter.AddTableFilter(expOdfRooms.ToExpression());
db.QueryFilter.AddTableFilter(expOdfRacks.ToExpression());
db.QueryFilter.AddTableFilter(expOdfPorts.ToExpression());
db.QueryFilter.AddTableFilter<UserOnlineLog>(f => f.UserId == user.UserId, QueryFilterProvider.FilterJoinPosition.Where);
}
}