|
@@ -1,11 +1,17 @@
|
|
|
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;
|
|
|
|
|
@@ -204,6 +210,134 @@ namespace Ropin.Inspection.Api.Controllers
|
|
|
return new ApiResult(ReturnCode.Success);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 发送邮件(附件为报警记录)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="searchModel"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|