321321
This commit is contained in:
parent
23223d6fc8
commit
88140f8ab9
|
|
@ -13,6 +13,8 @@ using Aliyun.OSS;
|
|||
using System.Linq;
|
||||
using ZR.Model.System.Dto;
|
||||
using Microsoft.AspNetCore.Connections.Features;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Text;
|
||||
|
||||
//创建时间:2025-08-05
|
||||
namespace ZR.Admin.WebApi.Controllers.Business
|
||||
|
|
@ -310,6 +312,7 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
|||
var modal = parm.Adapt<OdfPorts>().ToCreate(HttpContext);
|
||||
modal.CreatedAt = DateTime.Now;
|
||||
modal.UpdatedAt = DateTime.Now;
|
||||
modal.HistoryRemarks = ToHistoryString(parm.HistoryFault);
|
||||
var response = _OdfPortsService.AddOdfPorts(modal);
|
||||
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);
|
||||
modal.UpdatedAt = DateTime.Now;
|
||||
modal.HistoryRemarks = ToHistoryString(parm.HistoryFault);
|
||||
var response = _OdfPortsService.UpdateOdfPorts(modal);
|
||||
var count = await _OdfPortFaultService.CountAsync(it => it.PortId == modal.Id);
|
||||
if (count > 0)
|
||||
|
|
@ -386,10 +390,12 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
|||
if (port.Status == 0)
|
||||
{
|
||||
port.Remarks = "";
|
||||
port.OpticalCableOffRemarks = "";
|
||||
}
|
||||
|
||||
port.HistoryRemarks = ToHistoryString(parm.HistoryFault);
|
||||
var response = _OdfPortsService.UpdateOdfPorts(port);
|
||||
var count = await _OdfPortFaultService.CountAsync(it => it.PortId == port.Id);
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
await _OdfPortFaultService.DeleteAsync(it => it.PortId == port.Id);
|
||||
|
|
@ -411,6 +417,32 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
|||
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>
|
||||
|
|
@ -611,12 +643,13 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
|||
HistoryRemarks = excelItem.HistoryRemarks?.Trim(),
|
||||
OpticalCableOffRemarks = excelItem.OpticalCableOffRemarks
|
||||
};
|
||||
await _OdfPortsService.InsertAsync(port);
|
||||
port = _OdfPortsService.AddOdfPorts(port);
|
||||
addPortCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
port.HistoryRemarks = excelItem.HistoryRemarks?.Trim();
|
||||
|
||||
port.Remarks = excelItem.Remarks?.Trim();
|
||||
port.OpticalAttenuation = excelItem.OpticalAttenuation?.Trim();
|
||||
port.Status = excelItem.Status;
|
||||
|
|
@ -624,6 +657,40 @@ namespace ZR.Admin.WebApi.Controllers.Business
|
|||
port.UpdatedAt = DateTime.Now;
|
||||
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++;
|
||||
}
|
||||
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 + "条" : "")}");
|
||||
}
|
||||
|
||||
/// <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>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -200,6 +200,122 @@ namespace ZR.Model.Business.Dto
|
|||
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;
|
||||
[ExcelColumn(Name = "连接状态,0正常,1断开")]
|
||||
public string StatusLabel
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace ZR.Service.Business.IBusinessService
|
|||
|
||||
(string, object, object) ImportOdfPorts(List<OdfPorts> list);
|
||||
|
||||
PagedInfo<OdfPortsDto> ExportList(OdfPortsQueryDto parm);
|
||||
PagedInfo<OdfPortsDto> ExportList(OdfPortsQuerysDto parm);
|
||||
PagedInfo<OdfPortsfDto> ExportList(OdfPortsQueryDto parm);
|
||||
PagedInfo<OdfPortsfDto> ExportList(OdfPortsQuerysDto parm);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,16 +134,16 @@ namespace ZR.Service.Business
|
|||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<OdfPortsDto> ExportList(OdfPortsQueryDto parm)
|
||||
public PagedInfo<OdfPortsfDto> ExportList(OdfPortsQueryDto parm)
|
||||
{
|
||||
parm.PageNum = 1;
|
||||
parm.PageSize = 100000;
|
||||
parm.PageSize = 10000000;
|
||||
var predicate = QueryExp(parm);
|
||||
|
||||
var response = Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc")
|
||||
.Select((it) => new OdfPortsDto()
|
||||
.Select((it) => new OdfPortsfDto()
|
||||
{
|
||||
}, true)
|
||||
.ToPage(parm);
|
||||
|
|
@ -156,16 +156,16 @@ namespace ZR.Service.Business
|
|||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<OdfPortsDto> ExportList(OdfPortsQuerysDto parm)
|
||||
public PagedInfo<OdfPortsfDto> ExportList(OdfPortsQuerysDto parm)
|
||||
{
|
||||
parm.PageNum = 1;
|
||||
parm.PageSize = 100000;
|
||||
parm.PageSize = 10000000;
|
||||
var predicate = QueryExp(parm);
|
||||
|
||||
var response = Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc")
|
||||
.Select((it) => new OdfPortsDto()
|
||||
.Select((it) => new OdfPortsfDto()
|
||||
{
|
||||
}, true)
|
||||
.ToPage(parm);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user