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); } } }