321321
This commit is contained in:
parent
23223d6fc8
commit
88140f8ab9
|
|
@ -13,6 +13,8 @@ using Aliyun.OSS;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using ZR.Model.System.Dto;
|
using ZR.Model.System.Dto;
|
||||||
using Microsoft.AspNetCore.Connections.Features;
|
using Microsoft.AspNetCore.Connections.Features;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
//创建时间:2025-08-05
|
//创建时间:2025-08-05
|
||||||
namespace ZR.Admin.WebApi.Controllers.Business
|
namespace ZR.Admin.WebApi.Controllers.Business
|
||||||
|
|
@ -310,6 +312,7 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
||||||
var modal = parm.Adapt<OdfPorts>().ToCreate(HttpContext);
|
var modal = parm.Adapt<OdfPorts>().ToCreate(HttpContext);
|
||||||
modal.CreatedAt = DateTime.Now;
|
modal.CreatedAt = DateTime.Now;
|
||||||
modal.UpdatedAt = DateTime.Now;
|
modal.UpdatedAt = DateTime.Now;
|
||||||
|
modal.HistoryRemarks = ToHistoryString(parm.HistoryFault);
|
||||||
var response = _OdfPortsService.AddOdfPorts(modal);
|
var response = _OdfPortsService.AddOdfPorts(modal);
|
||||||
if (parm.HistoryFault != null && parm.HistoryFault.Count > 0)
|
if (parm.HistoryFault != null && parm.HistoryFault.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -339,6 +342,7 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
||||||
{
|
{
|
||||||
var modal = parm.Adapt<OdfPorts>().ToUpdate(HttpContext);
|
var modal = parm.Adapt<OdfPorts>().ToUpdate(HttpContext);
|
||||||
modal.UpdatedAt = DateTime.Now;
|
modal.UpdatedAt = DateTime.Now;
|
||||||
|
modal.HistoryRemarks = ToHistoryString(parm.HistoryFault);
|
||||||
var response = _OdfPortsService.UpdateOdfPorts(modal);
|
var response = _OdfPortsService.UpdateOdfPorts(modal);
|
||||||
var count = await _OdfPortFaultService.CountAsync(it => it.PortId == modal.Id);
|
var count = await _OdfPortFaultService.CountAsync(it => it.PortId == modal.Id);
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
|
|
@ -386,10 +390,12 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
||||||
if (port.Status == 0)
|
if (port.Status == 0)
|
||||||
{
|
{
|
||||||
port.Remarks = "";
|
port.Remarks = "";
|
||||||
|
port.OpticalCableOffRemarks = "";
|
||||||
}
|
}
|
||||||
|
port.HistoryRemarks = ToHistoryString(parm.HistoryFault);
|
||||||
var response = _OdfPortsService.UpdateOdfPorts(port);
|
var response = _OdfPortsService.UpdateOdfPorts(port);
|
||||||
var count = await _OdfPortFaultService.CountAsync(it => it.PortId == port.Id);
|
var count = await _OdfPortFaultService.CountAsync(it => it.PortId == port.Id);
|
||||||
|
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
await _OdfPortFaultService.DeleteAsync(it => it.PortId == port.Id);
|
await _OdfPortFaultService.DeleteAsync(it => it.PortId == port.Id);
|
||||||
|
|
@ -411,6 +417,32 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
||||||
return ToResponse(response);
|
return ToResponse(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 将历史记录集合转换为字符串
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="items">日期+原因集合</param>
|
||||||
|
/// <param name="includeTime">是否输出时间(true: yyyy-MM-dd HH:mm:ss, false: 仅日期)</param>
|
||||||
|
/// <returns>拼接好的字符串</returns>
|
||||||
|
private string ToHistoryString(List<OdfPortsHistoryDto> items, bool includeTime = true)
|
||||||
|
{
|
||||||
|
if (items == null || items.Count == 0)
|
||||||
|
return string.Empty;
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
// 判断是否输出时间
|
||||||
|
string datePart = includeTime
|
||||||
|
? item.FaultTime.ToString("yyyy-MM-dd HH:mm:ss")
|
||||||
|
: item.FaultTime.ToString("yyyy-MM-dd");
|
||||||
|
|
||||||
|
sb.AppendLine($"{datePart} {item.FaultReason}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString().TrimEnd(); // 去掉最后多余的换行符
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -611,12 +643,13 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
||||||
HistoryRemarks = excelItem.HistoryRemarks?.Trim(),
|
HistoryRemarks = excelItem.HistoryRemarks?.Trim(),
|
||||||
OpticalCableOffRemarks = excelItem.OpticalCableOffRemarks
|
OpticalCableOffRemarks = excelItem.OpticalCableOffRemarks
|
||||||
};
|
};
|
||||||
await _OdfPortsService.InsertAsync(port);
|
port = _OdfPortsService.AddOdfPorts(port);
|
||||||
addPortCount++;
|
addPortCount++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
port.HistoryRemarks = excelItem.HistoryRemarks?.Trim();
|
port.HistoryRemarks = excelItem.HistoryRemarks?.Trim();
|
||||||
|
|
||||||
port.Remarks = excelItem.Remarks?.Trim();
|
port.Remarks = excelItem.Remarks?.Trim();
|
||||||
port.OpticalAttenuation = excelItem.OpticalAttenuation?.Trim();
|
port.OpticalAttenuation = excelItem.OpticalAttenuation?.Trim();
|
||||||
port.Status = excelItem.Status;
|
port.Status = excelItem.Status;
|
||||||
|
|
@ -624,6 +657,40 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
||||||
port.UpdatedAt = DateTime.Now;
|
port.UpdatedAt = DateTime.Now;
|
||||||
await _OdfPortsService.UpdateAsync(port);
|
await _OdfPortsService.UpdateAsync(port);
|
||||||
}
|
}
|
||||||
|
if (string.IsNullOrEmpty(port.HistoryRemarks))
|
||||||
|
{
|
||||||
|
var count = await _OdfPortFaultService.CountAsync(it => it.PortId == port.Id);
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
await _OdfPortFaultService.DeleteAsync(it => it.PortId == port.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var count = await _OdfPortFaultService.CountAsync(it => it.PortId == port.Id);
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
await _OdfPortFaultService.DeleteAsync(it => it.PortId == port.Id);
|
||||||
|
}
|
||||||
|
var list2 = ParseHistory(port.HistoryRemarks);
|
||||||
|
if (list2.Count > 0)
|
||||||
|
{
|
||||||
|
var list3 = new List<OdfPortFault>();
|
||||||
|
foreach (var item in list2)
|
||||||
|
{
|
||||||
|
var o = new OdfPortFault()
|
||||||
|
{
|
||||||
|
CreateTime = item.Date,
|
||||||
|
FaultReason = item.Reason,
|
||||||
|
FaultTime = item.Date,
|
||||||
|
PortId = port.Id,
|
||||||
|
};
|
||||||
|
list3.Add(o);
|
||||||
|
|
||||||
|
}
|
||||||
|
await _OdfPortFaultService.InsertRangeAsync(list3);
|
||||||
|
}
|
||||||
|
}
|
||||||
successCount++;
|
successCount++;
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
|
|
@ -636,6 +703,51 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
||||||
return SUCCESS($"共查询{list.Count}条数据,导入成功{successCount}条数据!导入失败{errorCount}条!{(addRoomCount > 0 ? "添加机房" + addRoomCount + "条," : "")}{(addRackCount > 0 ? "添加机架" + addRackCount + "条" : "")}{(addFrameCount > 0 ? "添加机框" + addFrameCount + "条" : "")}");
|
return SUCCESS($"共查询{list.Count}条数据,导入成功{successCount}条数据!导入失败{errorCount}条!{(addRoomCount > 0 ? "添加机房" + addRoomCount + "条," : "")}{(addRackCount > 0 ? "添加机架" + addRackCount + "条" : "")}{(addFrameCount > 0 ? "添加机框" + addFrameCount + "条" : "")}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 解析历史备注字符串,提取日期/时间和原因
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="historyRemarks">原始字符串</param>
|
||||||
|
/// <returns>日期+原因集合</returns>
|
||||||
|
private List<(DateTime Date, string Reason)> ParseHistory(string historyRemarks)
|
||||||
|
{
|
||||||
|
var result = new List<(DateTime, string)>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(historyRemarks))
|
||||||
|
return result;
|
||||||
|
|
||||||
|
// 按行拆分
|
||||||
|
string[] lines = historyRemarks.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
|
// 正则:日期 + 可选时间 + 原因
|
||||||
|
Regex regex = new Regex(@"^(?<date>\d{4}-\d{2}-\d{2})(\s+(?<time>\d{2}:\d{2}:\d{2}))?\s+(?<reason>.+)$");
|
||||||
|
|
||||||
|
foreach (var line in lines)
|
||||||
|
{
|
||||||
|
var match = regex.Match(line.Trim());
|
||||||
|
if (match.Success)
|
||||||
|
{
|
||||||
|
string datePart = match.Groups["date"].Value;
|
||||||
|
string timePart = match.Groups["time"].Success ? match.Groups["time"].Value : "00:00:00";
|
||||||
|
string reason = match.Groups["reason"].Value;
|
||||||
|
|
||||||
|
if (DateTime.TryParse($"{datePart} {timePart}", out DateTime date))
|
||||||
|
{
|
||||||
|
result.Add((date, reason));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 端口导入模板下载
|
/// 端口导入模板下载
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -200,6 +200,122 @@ namespace ZR.Model.Business.Dto
|
||||||
public DateTime? UpdatedAt { get; set; }
|
public DateTime? UpdatedAt { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
private string _statusLabel;
|
||||||
|
[ExcelColumn(Name = "连接状态,0正常,1断开")]
|
||||||
|
public string StatusLabel
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Status == 0 ? "断开" : "正常";
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this._statusLabel = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门名称
|
||||||
|
/// </summary>
|
||||||
|
[ExcelColumn(Name = "部门名称")]
|
||||||
|
public string DeptName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 端口输入输出对象
|
||||||
|
/// </summary>
|
||||||
|
public class OdfPortsfDto
|
||||||
|
{
|
||||||
|
[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 OpticalCableOffRemarks { 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; }
|
||||||
|
|
||||||
|
|
||||||
private string _statusLabel;
|
private string _statusLabel;
|
||||||
[ExcelColumn(Name = "连接状态,0正常,1断开")]
|
[ExcelColumn(Name = "连接状态,0正常,1断开")]
|
||||||
public string StatusLabel
|
public string StatusLabel
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ namespace ZR.Service.Business.IBusinessService
|
||||||
|
|
||||||
(string, object, object) ImportOdfPorts(List<OdfPorts> list);
|
(string, object, object) ImportOdfPorts(List<OdfPorts> list);
|
||||||
|
|
||||||
PagedInfo<OdfPortsDto> ExportList(OdfPortsQueryDto parm);
|
PagedInfo<OdfPortsfDto> ExportList(OdfPortsQueryDto parm);
|
||||||
PagedInfo<OdfPortsDto> ExportList(OdfPortsQuerysDto parm);
|
PagedInfo<OdfPortsfDto> ExportList(OdfPortsQuerysDto parm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -134,16 +134,16 @@ namespace ZR.Service.Business
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="parm"></param>
|
/// <param name="parm"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public PagedInfo<OdfPortsDto> ExportList(OdfPortsQueryDto parm)
|
public PagedInfo<OdfPortsfDto> ExportList(OdfPortsQueryDto parm)
|
||||||
{
|
{
|
||||||
parm.PageNum = 1;
|
parm.PageNum = 1;
|
||||||
parm.PageSize = 100000;
|
parm.PageSize = 10000000;
|
||||||
var predicate = QueryExp(parm);
|
var predicate = QueryExp(parm);
|
||||||
|
|
||||||
var response = Queryable()
|
var response = Queryable()
|
||||||
.Where(predicate.ToExpression())
|
.Where(predicate.ToExpression())
|
||||||
.OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc")
|
.OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc")
|
||||||
.Select((it) => new OdfPortsDto()
|
.Select((it) => new OdfPortsfDto()
|
||||||
{
|
{
|
||||||
}, true)
|
}, true)
|
||||||
.ToPage(parm);
|
.ToPage(parm);
|
||||||
|
|
@ -156,16 +156,16 @@ namespace ZR.Service.Business
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="parm"></param>
|
/// <param name="parm"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public PagedInfo<OdfPortsDto> ExportList(OdfPortsQuerysDto parm)
|
public PagedInfo<OdfPortsfDto> ExportList(OdfPortsQuerysDto parm)
|
||||||
{
|
{
|
||||||
parm.PageNum = 1;
|
parm.PageNum = 1;
|
||||||
parm.PageSize = 100000;
|
parm.PageSize = 10000000;
|
||||||
var predicate = QueryExp(parm);
|
var predicate = QueryExp(parm);
|
||||||
|
|
||||||
var response = Queryable()
|
var response = Queryable()
|
||||||
.Where(predicate.ToExpression())
|
.Where(predicate.ToExpression())
|
||||||
.OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc")
|
.OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc")
|
||||||
.Select((it) => new OdfPortsDto()
|
.Select((it) => new OdfPortsfDto()
|
||||||
{
|
{
|
||||||
}, true)
|
}, true)
|
||||||
.ToPage(parm);
|
.ToPage(parm);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user