using Castle.Core.Internal; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using Ropin.Inspection.Api.Common; using Ropin.Inspection.Common.Helper; using Ropin.Inspection.Common; using Ropin.Inspection.Model; using Ropin.Inspection.Model.Common; using Ropin.Inspection.Service; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; namespace Ropin.Inspection.Api.Controllers { public class TsysMessageController : BaseController { public ILogger _logger { get; } private readonly ITsysMessageService _TsysMessageService; /// /// 构造函数 /// /// /// public TsysMessageController(ITsysMessageService TsysMessageService, ILogger logger) { _TsysMessageService = TsysMessageService; _logger = logger; } /// /// 通过ID获取消息信息 /// /// /// [HttpGet("GetMessageAsync/{id}")] public async Task GetMessageAsync(string id) { if (string.IsNullOrEmpty(id)) { return new ApiResult(ReturnCode.GeneralError); } try { var content = await _TsysMessageService.GetByIdAsync(id); return new ApiResult(content); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } /// /// 获取所有消息 /// /// [HttpGet("GetMessagesAsync")] public async Task GetMessagesAsync() { try { var contentList = await _TsysMessageService.GetAllAsync(); return new ApiResult>(contentList); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } /// /// 通过消息名称条件查询 /// /// /// [HttpPost("GetMessagesByAsync")] public async Task GetMessagesByAsync(TsysMessageSearchModel searchModel) { if (searchModel == null) { return new ApiResult(ReturnCode.ArgsError); } try { var contentList = await _TsysMessageService.GetConditionAsync(searchModel); return new ApiResult>(new PagesModel(contentList, searchModel)); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } /// /// 通过消息名称条件查询【内容实体化】 /// /// /// [HttpPost("GetConditionScreenAsync")] public async Task GetConditionScreenAsync(TsysMessageSearchModel searchModel) { if (searchModel == null) { return new ApiResult(ReturnCode.ArgsError); } try { var contentList = await _TsysMessageService.GetConditionScreenAsync(searchModel); return new ApiResult>(new PagesModel(contentList, searchModel)); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } /// /// 创建消息 /// /// /// [HttpPost("CreateMessageAsync")] public async Task CreateMessageAsync(TsysMessageViewModel content) { if (content == null) { return new ApiResult(ReturnCode.ArgsError); } try { await _TsysMessageService.CreateOneAsync(content); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } return new ApiResult(ReturnCode.Success); } /// /// 删除消息 /// /// /// [HttpDelete("DeleteMessageAsync/{id}")] public async Task DeleteMessageAsync(string id) { if (string.IsNullOrEmpty(id)) { return new ApiResult(ReturnCode.GeneralError); } try { await _TsysMessageService.DeleteAsync(id); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } return new ApiResult(ReturnCode.Success); } /// /// 更新消息 /// /// /// /// [HttpPut("UpdateMessageAsync/{id}")] public async Task UpdateMessageAsync(string id, TsysMessageUpdateModel updateModel) { if (string.IsNullOrEmpty(id)) { return new ApiResult(ReturnCode.GeneralError); } try { await _TsysMessageService.UpdateAsync(id, updateModel); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } return new ApiResult(ReturnCode.Success); } /// /// 更新消息状态 /// /// /// /// [HttpGet("UpdateMessageAsync/{id}/{msgStstus}")] public async Task UpdateMsgStuats(string id, int msgStstus) { if (string.IsNullOrEmpty(id)) { return new ApiResult(ReturnCode.GeneralError); } try { await _TsysMessageService.UpdateMsgStatusAsync(id, msgStstus); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } return new ApiResult(ReturnCode.Success); } /// /// 发送邮件(附件为报警记录) /// /// /// [HttpPost("SendMessageToEmail")] public async Task SendMessageToEmail(SendMessageToEmailModel searchModel) { if (searchModel == null) { return; } try { TsysMessageSearchModel tsysMessage = new TsysMessageSearchModel { IsPagination = false, C_PushMsgToCode= searchModel.C_PushMsgToCode, C_StoreCode = searchModel.C_StoreCode, C_DevCode = searchModel.C_DevCode, C_MsgTypeCode = searchModel.C_MsgTypeCode, MsgTypeList = searchModel.MsgTypeList, C_Content = searchModel.C_Content, I_GenerationType = searchModel.I_GenerationType, MsgStatus = searchModel.MsgStatus, C_Status = searchModel.C_Status, BeginTime = searchModel.BeginTime, EndTime = searchModel.EndTime, }; var contentList = await _TsysMessageService.GetConditionScreenAsync(tsysMessage); var pushMsg = contentList.Select(x => x.PushMsg).ToList(); IWorkbook workbook = new XSSFWorkbook(); ISheet sheet = workbook.CreateSheet("sheet1"); sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 6)); var titleRow = sheet.CreateRow(0); titleRow.Height = 20 * 25; ICell titleCell = titleRow.CreateCell(0); titleCell.SetCellValue("设备报警记录"); //第一行字体样式 IFont font = workbook.CreateFont(); font.IsBold = true; font.FontHeightInPoints = 16; font.FontName = "宋体"; ICellStyle titleCellStyle = workbook.CreateCellStyle(); titleCellStyle.SetFont(font); titleCellStyle.Alignment = HorizontalAlignment.Center; //字体居中 //边框 titleCellStyle.BorderBottom = BorderStyle.Thin; titleCellStyle.BorderLeft = BorderStyle.Thin; titleCellStyle.BorderRight = BorderStyle.Thin; titleCellStyle.BorderTop = BorderStyle.Thin; titleCell.CellStyle = titleCellStyle; var headRow = sheet.CreateRow(1); headRow.CreateCell(0).SetCellValue("设备名称"); headRow.CreateCell(1).SetCellValue("设备编号"); headRow.CreateCell(2).SetCellValue("报警时间"); headRow.CreateCell(3).SetCellValue("报警类型"); headRow.CreateCell(4).SetCellValue("报警内容"); headRow.CreateCell(5).SetCellValue("报警来源"); //第二行,列名 IFont font1 = workbook.CreateFont(); font1.IsBold = true; font1.FontHeightInPoints = 12; font1.FontName = "宋体"; ICellStyle headCellStyle = workbook.CreateCellStyle(); headCellStyle.SetFont(font1); //边框 headCellStyle.BorderBottom = BorderStyle.Thin; headCellStyle.BorderLeft = BorderStyle.Thin; headCellStyle.BorderRight = BorderStyle.Thin; headCellStyle.BorderTop = BorderStyle.Thin; foreach (var item in headRow.Cells) { item.CellStyle = headCellStyle; } int start = 2; IFont font3 = workbook.CreateFont(); font3.FontHeightInPoints = 9; font3.FontName = "宋体"; ICellStyle contentCellStyle = workbook.CreateCellStyle(); contentCellStyle.SetFont(font3); //边框 contentCellStyle.BorderBottom = BorderStyle.Thin; contentCellStyle.BorderLeft = BorderStyle.Thin; contentCellStyle.BorderRight = BorderStyle.Thin; contentCellStyle.BorderTop = BorderStyle.Thin; foreach (var item in pushMsg) { var row = sheet.CreateRow(start); row.CreateCell(0).SetCellValue(item.DevName); row.CreateCell(1).SetCellValue(item.DevNumber); row.CreateCell(2).SetCellValue(item.CreateOn); row.CreateCell(3).SetCellValue(item.Subject); row.CreateCell(4).SetCellValue(item.Msg); row.CreateCell(5).SetCellValue(!string.IsNullOrEmpty(item.UserName) ? item.UserName : ""); start++; foreach (var cell in row.Cells) { cell.CellStyle = contentCellStyle; } } // 自适应单元格 for (int i = 0; i < sheet.LastRowNum; i++) { sheet.AutoSizeRow(i); } for (int i = 0; i < 7; i++) { sheet.AutoSizeColumn(i, true); } using (var stream = new NpoiMemoryStream()) { workbook.Write(stream); stream.Seek(0, SeekOrigin.Begin); string emailName = $"{searchModel.DevName} 设备报警记录报表 {searchModel.BeginTime?.ToString("yyyy-MM-dd HH:mm:ss")}至{searchModel.EndTime?.ToString("yyyy-MM-dd HH:mm:ss")}"; EmailHelper.SendEmail(searchModel.Mails, emailName, "", "报表见附件", $"{emailName}.xlsx", "application/vnd.ms-excel", stream); } } catch (Exception ex) { throw; } } } }