using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using ZR.Model.Business.Dto;
using ZR.Service.Business.IBusinessService;
//创建时间:2025-09-21
namespace ZR.Admin.WebApi.Controllers.Business
{
///
/// 干线故障管理
///
[Route("business/OdfCableFaults")]
public class OdfCableFaultsController : BaseController
{
///
/// 干线故障接口
///
private readonly IOdfCableFaultsService _OdfCableFaultsService;
public OdfCableFaultsController(IOdfCableFaultsService OdfCableFaultsService)
{
_OdfCableFaultsService = OdfCableFaultsService;
}
///
/// 故障列表分页查询
///
///
///
[HttpGet("list")]
[ActionPermissionFilter(Permission = "odfcablefaults:list")]
public IActionResult GetList([FromQuery] OdfCableFaultsQueryDto parm)
{
var response = _OdfCableFaultsService.GetList(parm);
return SUCCESS(response);
}
///
/// 故障详情(含图片)
///
///
///
[HttpGet("{id}")]
[ActionPermissionFilter(Permission = "odfcablefaults:query")]
public IActionResult GetDetail(int id)
{
var response = _OdfCableFaultsService.GetDetail(id);
return SUCCESS(response);
}
///
/// 新增故障(含图片上传,APP端调用)
///
///
[HttpPost("add")]
[ActionPermissionFilter(Permission = "odfcablefaults:list")]
[Log(Title = "干线故障", BusinessType = BusinessType.INSERT)]
public async Task Add([FromForm] OdfCableFaultAddDto dto)
{
dto.UserId = HttpContext.GetUId();
var response = await _OdfCableFaultsService.AddFault(dto);
return ToResponse(response);
}
///
/// 增加故障频次
///
[HttpPost("incrementFaultCount/{id}")]
[ActionPermissionFilter(Permission = "odfcablefaults:list")]
[Log(Title = "干线故障", BusinessType = BusinessType.UPDATE)]
public IActionResult IncrementFaultCount(int id)
{
var response = _OdfCableFaultsService.IncrementFaultCount(id);
return SUCCESS(response);
}
///
/// 删除故障并级联删除图片
///
///
[HttpPost("delete/{id}")]
[ActionPermissionFilter(Permission = "odfcablefaults:delete")]
[Log(Title = "干线故障", BusinessType = BusinessType.DELETE)]
public IActionResult Delete(int id)
{
var response = _OdfCableFaultsService.Delete(id);
return ToResponse(response);
}
///
/// 导出故障列表
///
///
[Log(Title = "干线故障", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[HttpGet("export")]
[ActionPermissionFilter(Permission = "odfcablefaults:export")]
public IActionResult Export([FromQuery] OdfCableFaultsQueryDto parm)
{
var list = _OdfCableFaultsService.ExportList(parm);
if (list == null || list.Result == null || list.Result.Count <= 0)
{
return ToResponse(ResultCode.FAIL, "没有要导出的数据");
}
// 将英文属性名转换为中文列头
var exportList = new List>();
foreach (var item in list.Result)
{
var obj = (object)item;
var props = obj.GetType().GetProperties();
var dict = props.ToDictionary(p => p.Name, p => p.GetValue(obj));
var row = new Dictionary
{
["编号"] = dict.GetValueOrDefault("Id"),
["光缆编号"] = dict.GetValueOrDefault("CableId"),
["故障时间"] = dict.GetValueOrDefault("FaultTime"),
["人员"] = dict.GetValueOrDefault("Personnel"),
["故障原因"] = dict.GetValueOrDefault("FaultReason"),
["表显故障里程"] = dict.GetValueOrDefault("Mileage"),
["地点"] = dict.GetValueOrDefault("Location"),
["纬度"] = dict.GetValueOrDefault("Latitude"),
["经度"] = dict.GetValueOrDefault("Longitude"),
["备注"] = dict.GetValueOrDefault("Remark"),
["创建时间"] = dict.GetValueOrDefault("CreatedAt"),
["所属光缆"] = dict.GetValueOrDefault("CableName")
};
exportList.Add(row);
}
var result = ExportExcelMini(exportList, "故障列表", "故障列表");
return ExportExcel(result.Item2, result.Item1);
}
///
/// 批量导入故障
///
[HttpPost("importData")]
[Log(Title = "干线故障导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
[ActionPermissionFilter(Permission = "odfcablefaults:import")]
public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
{
if (formFile == null || formFile.Length <= 0)
{
return ToResponse(ResultCode.FAIL, "请选择要导入的文件");
}
List list = new();
using (var stream = formFile.OpenReadStream())
{
list = stream.Query(startCell: "A1").ToList();
}
if (list.Count <= 0)
{
return ToResponse(ResultCode.FAIL, "导入数据为空");
}
var (successCount, errorCount, errorMsg) = _OdfCableFaultsService.ImportFaults(list);
var msg = $"导入成功{successCount}条,失败{errorCount}条";
if (!string.IsNullOrEmpty(errorMsg))
{
msg += $"。{errorMsg}";
}
return SUCCESS(msg);
}
///
/// 干线故障导入模板下载
///
[HttpGet("importTemplate")]
[Log(Title = "干线故障模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[AllowAnonymous]
public IActionResult ImportTemplateExcel()
{
var result = DownloadImportTemplate(new List() { }, "OdfCableFaults");
return ExportExcel(result.Item2, result.Item1);
}
}
}