using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Hosting.Internal;
using Microsoft.Extensions.Logging;
using NPOI.SS.UserModel;
using NPOI.Util;
using NPOI.XSSF.UserModel;
using NPOI.XWPF.UserModel;
using Ropin.Inspection.Api.Common;
using Ropin.Inspection.Common.Helper;
using Ropin.Inspection.Model;
using Ropin.Inspection.Model.Common;
using Ropin.Inspection.Model.SearchModel;
using Ropin.Inspection.Model.ViewModel;
using Ropin.Inspection.Service;
using Ropin.Inspection.Service.Interface;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Threading.Tasks;
namespace Ropin.Inspection.Api.Controllers
{
///
/// 巡检记录
///
public class TispRecordController : BaseController
{
public ILogger _logger { get; }
private readonly ITispRecordService _tispRecordService;
private readonly ITispRecordImageService _tispRecordImageService;
//private readonly IWebHostEnvironment _hostingEnvironment;
private readonly IWebHostEnvironment _hostingEnvironment;
private readonly IPushMsgService _pushMsgService;
private readonly ITispRecordItemService _tispRecordItemService;
private readonly ITpntStoreService _TpntStoreService;
///
/// 构造函数
///
///
///
///
///
public TispRecordController(ITispRecordService tispRecordService, IPushMsgService pushMsgService, ITispRecordImageService tispRecordImageService, IWebHostEnvironment hostingEnvironment, ILogger logger, ITispRecordItemService tispRecordItemService,ITpntStoreService TpntStoreService)
{
_tispRecordService = tispRecordService;
_tispRecordImageService = tispRecordImageService;
_hostingEnvironment = hostingEnvironment;
_logger = logger;
_pushMsgService = pushMsgService;
_tispRecordItemService = tispRecordItemService;
_TpntStoreService = TpntStoreService;
}
///
/// 通过ID获取巡检点信息
///
///
///
[HttpGet("GetRecordAsync/{id}")]
public async Task GetRecordAsync(Guid id)
{
if (Guid.Empty == id)
{
return new ApiResult(ReturnCode.ArgsError);
}
try
{
TispRecordViewModel record = await _tispRecordService.GetByIdAsync(id);
return new ApiResult(record);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
/////
///// 获取所有巡检
/////
/////
//[HttpGet("GetRecordsAsync")]
//public async Task GetRecordsAsync()
//{
// try
// {
// var recordList = await _tispRecordService.GetAllAsync();
// return new ApiResult>(recordList);
// }
// catch (Exception ex)
// {
// return new ApiResult(ReturnCode.GeneralError, ex.Message);
// }
//}
///
/// 条件获取巡检记录
///
///
///
[HttpPost("GetRecordsConditionAsync")]
public async Task GetRecordsConditionAsync(TispRecordSearchModel searchModel)
{
if (searchModel == null || string.IsNullOrEmpty(searchModel.C_StoreCode))
{
return new ApiResult(ReturnCode.ArgsError);
}
try
{
var recordList = await _tispRecordService.GetRecordsConditionAsync(searchModel);
return new ApiResult>(new PagesModel(recordList?.ToList(), searchModel));
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 创建巡检记录
///
///
///
[Route("CreateRecordAsync")]
[HttpPost]
public async Task CreateRecordAsync(TispRecordCreateViewModel record)
{
if (record == null || record.TispRecordItemList == null || !record.TispRecordItemList.Any())
{
return new ApiResult(ReturnCode.ArgsError);
}
try
{
await _tispRecordService.CreateRecordAsync(record);
if (record.TispRecordItemList.Where(i => i.C_Status == "0").Any())
{
//没有设备ID不能发消息
//await _pushMsgService.PushAlarmMsgAsync(new TpushMsgModel
//{
// C_DevStoreCode = "",
// C_MsgTypeCode = "MSG_TYPE_002",
// Msg = record.TispRecordItemList.Where(i => i.C_Status == "0").Select(x => x.C_InspectionContent).First(),
// Subject = "点检异常",
// DevNumber = record.C_SpotCode.ToString(),
// DevName = "未知",
// GenerationType = 2,
// msgStatus = 0,
//}, "点检异常");
//await _pushMsgService.PushAlarmMsgAsync(new TpushMsgModel
//{
// C_DevStoreCode = updateModel.C_DevStoreCode,
// C_MsgTypeCode = "MSG_TYPE_009",
// Msg = updateModel.C_Name + " " + updateModel.C_Remark,
// Subject = updateModel.C_Status == "5" ? "维保取消,设备名:" : "维保确认,设备名:" + updateModel.C_DevStoreName,
// DevNumber = updateModel.C_DevStoreCode,
// DevName = updateModel.C_DevStoreName,
//});
}
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message + ex.InnerException);
}
return new ApiResult(ReturnCode.Success);
}
///
/// 创建巡检记录,带照片
///
///
///
///
[Route("CreateRecordAndImageAsync")]
[HttpPost]
public async Task CreateRecordAndImageAsync(IEnumerable records, IFormCollection Files)
{
if (records == null)
{
return new ApiResult(ReturnCode.ArgsError);
}
try
{
await _tispRecordService.CreateRecordAndImageAsync(records);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
return new ApiResult(ReturnCode.Success);
}
///
/// 删除
///
///
///
[HttpDelete("DeleteRecordAsync/{id}")]
public async Task DeleteRecordAsync(Guid id)
{
if (Guid.Empty == id)
{
return new ApiResult(ReturnCode.ArgsError);
}
try
{
await _tispRecordService.DeleteAsync(id);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
return new ApiResult(ReturnCode.Success);
}
///
/// 更新巡检记录
///
///
///
///
[HttpPut("UpdateRecordAsync/{id}")]
public async Task UpdateSpotAsync(Guid id, TispRecordUpdateViewModel updateModel)
{
if (Guid.Empty == id)
{
return new ApiResult(ReturnCode.ArgsError);
}
try
{
await _tispRecordService.UpdateAsync(id, updateModel);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
return new ApiResult(ReturnCode.Success);
}
///
/// 上传巡检图片
///
/// 巡检记录Id
///
///
[HttpPost("UploadRecordImageAsync/{id}")]
public async Task UploadRecordImageAsync(Guid id, IFormCollection Files)
{
try
{
//var form = Request.Form;//直接从表单里面获取文件名不需要参数
string dd = Files["File"];
var form = Files;//定义接收类型的参数
Hashtable hash = new Hashtable();
IFormFileCollection cols = Request.Form.Files;
if (cols == null || cols.Count == 0)
{
return new ApiResult(ReturnCode.GeneralError, "没有上传文件");
}
foreach (IFormFile file in cols)
{
//定义图片数组后缀格式
string[] LimitPictureType = { ".JPG", ".JPEG", ".GIF", ".PNG", ".BMP" };
//获取图片后缀是否存在数组中
string currentPictureExtension = Path.GetExtension(file.FileName).ToUpper();
if (LimitPictureType.Contains(currentPictureExtension))
{
//为了查看图片就不在重新生成文件名称了
var dateDirectory = DateTime.Now.ToString("yyyyMM");
var relativePath = Path.Combine("wwwroot/uploads/images/", dateDirectory);
var directoryPath = Path.Combine(Directory.GetCurrentDirectory(), relativePath);
var fileRelativePath = Path.Combine(relativePath + "/", file.FileName);
if (!Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
var path = Path.Combine(directoryPath + "/", file.FileName);
//var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", filePath);
////文件存储路径
//var new_path = string.Format("/uploads/images/" + dateName + "/", file.FileName);
////获取当前web目录
//var webRootPath = _hostingEnvironment.WebRootPath;
//var path = webRootPath + new_path;
using (var stream = new FileStream(path, FileMode.Create))
{
//图片路径保存到数据库里面去
bool flage = true;
await _tispRecordImageService.CreateOneAsync(new TispRecordImageViewModel{ C_RecordItemCode = id,C_ImageURL = fileRelativePath, C_Status= '1' });
if (flage == true)
{
//再把文件保存的文件夹中
file.CopyTo(stream);
hash.Add("file", "/" + fileRelativePath);
}
}
}
else
{
return new ApiResult(ReturnCode.GeneralError, "请上传指定格式的图片");
}
}
return new ApiResult(new Hashtable(hash));
//return new ApiResult(ReturnCode.Success, "上传成功");
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message + ex.InnerException);
}
}
///
/// 获取所有巡检点的巡检状况
///
///
///
[HttpGet("GetAllSpotRecordAsync")]
[AllowAnonymous]
public async Task GetAllSpotRecordAsync([FromQuery] AllSpotRecordSearchModel searchModel)
{
try
{
if (null == searchModel || string.IsNullOrEmpty(searchModel.C_StoreCode))
{
return new ApiResult(ReturnCode.ArgsError);
}
searchModel.IsPagination = false;
IEnumerable allSpotRecordList = await _tispRecordService.GetAllSpotRecordAsync(searchModel);
return new ApiResult>(new PagesModel(allSpotRecordList?.ToList(), searchModel));
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 获取巡检员的分配的巡检点巡检情况
///
///
///
[HttpGet("GetUserSpotRecordAsync")]
public async Task GetUserSpotRecordAsync([FromQuery] UserSpotRecordSearchModel searchModel)
{
try
{
if (null == searchModel || string.IsNullOrEmpty(searchModel.C_StoreCode))
{
return new ApiResult(ReturnCode.ArgsError);
}
IEnumerable allSpotRecordList = await _tispRecordService.GetUserSpotRecordAsync(searchModel);
return new ApiResult>(new PagesModel(allSpotRecordList?.ToList(), searchModel));
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 获取用户当天已经巡检过的巡检点数
///
///
///
///
[HttpGet("GetUserTodaySpotRecordCountAsync/{usrId}/{storeCode}")]
public async Task GetUserTodaySpotRecordCountAsync(Guid usrId,string storeCode)
{
try
{
int result = await _tispRecordService.GetUserTodaySpotRecordCountAsync(usrId, storeCode);
return new ApiResult(result);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 获取用户当天已经巡检过的巡检点记录
///
///
///
///
[HttpGet("GetUserTodaySpotRecordsAsync/{usrId}/{storeCode}")]
public async Task GetUserTodaySpotRecordsAsync(Guid usrId, string storeCode)
{
try
{
IEnumerable allSpotRecordList = await _tispRecordService.GetUserTodaySpotRecordsAsync(usrId, storeCode);
return new ApiResult>(allSpotRecordList);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 获取用户当天还未巡检过的巡检点数
///
///
///
///
[HttpGet("GetUserTodayNotSpotRecordCountAsync/{usrId}/{storeCode}")]
public async Task GetUserTodayNotSpotRecordCountAsync(Guid usrId, string storeCode)
{
try
{
int result = await _tispRecordService.GetUserTodayNotSpotRecordCountAsync(usrId, storeCode);
return new ApiResult(result);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 获取用户当天还未巡检过的巡检点
///
///
///
///
[HttpGet("GetUserTodayNotSpotRecordsAsync/{usrId}/{storeCode}")]
public async Task GetUserTodayNotSpotRecordsAsync(Guid usrId,string storeCode)
{
if (Guid.Empty.Equals(usrId) || string.IsNullOrEmpty(storeCode))
{
return new ApiResult(ReturnCode.ArgsError);
}
try
{
IEnumerable allSpotRecordList = await _tispRecordService.GetUserTodayNotSpotRecordsAsync(usrId, storeCode);
return new ApiResult>(allSpotRecordList);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 最近三十天巡检统计
///
///
///
[HttpGet("GetRecords30DaysStatisticsAsync/{storeCode}")]
public async Task GetRecords30DaysStatisticsAsync(string storeCode)
{
try
{
TispRecord30DaysStatisticsViewModel statistics = await _tispRecordService.GetRecords30DaysStatisticsAsync(storeCode);
return new ApiResult(statistics);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 最近7天异常处理统计
///
///
///
[HttpGet("GetAlarmRecovery7DaysStatisticsAsync/{storeCode}")]
public async Task GetAlarmRecovery7DaysStatisticsAsync(string storeCode)
{
try
{
TispAlarmRecovery7DaysStatisticsViewModel statistics = await _tispRecordService.GetAlarmRecovery7DaysStatisticsAsync(storeCode);
return new ApiResult(statistics);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 取当天关于巡检点的正常,异常统计
///
///
///
[HttpGet("GetTodaySpotStatisticsAsync/{storeCode}")]
public async Task GetTodaySpotStatisticsAsync(string storeCode)
{
try
{
TodaySpotStatistics statistics = await _tispRecordService.GetTodaySpotStatisticsAsync(storeCode);
return new ApiResult(statistics);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 取当天关于巡检点内容的正常,异常,恢复统计
///
///
///
[HttpGet("GetTodaySpotContentStatisticsAsync/{storeCode}")]
public async Task GetTodaySpotContentStatisticsAsync(string storeCode)
{
try
{
TodaySpotContentStatistics statistics = await _tispRecordService.GetTodaySpotContentStatisticsAsync(storeCode);
return new ApiResult(statistics);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 最近12个月巡检次数统计
///
///
///
[HttpGet("GetRecord12MonthStatisticsAsync/{storeCode}")]
public async Task GetRecord12MonthStatisticsAsync(string storeCode)
{
try
{
Record12MonthStatisticsViewModel statistics = await _tispRecordService.GetRecord12MonthStatisticsAsync(storeCode);
return new ApiResult(statistics);
}
catch (Exception ex)
{
return new ApiResult(ReturnCode.GeneralError, ex.Message);
}
}
///
/// 最近12个月巡检次数统计,大屏
///
///
///
[HttpGet("GetRecord12MonthStatisticsFullScreenAsync/{storeCode}")]
[AllowAnonymous]
public async Task> GetRecord12MonthStatisticsFullScreenAsync(string storeCode)
{
if (string.IsNullOrEmpty(storeCode))
{
return null;
}
try
{
var content = await _tispRecordService.GetRecord12MonthStatisticsFullScreenAsync(storeCode);
return content;
}
catch (Exception ex)
{
return null;
}
}
///
/// 最近12个月点检、维保、维修次数统计,大屏
///
///
///
[HttpGet("GetAllDevOpsRecord12MonthStatisticsFullScreenAsync/{storeCode}")]
[AllowAnonymous]
public async Task> GetAllDevOpsRecord12MonthStatisticsFullScreenAsync(string storeCode)
{
if (string.IsNullOrEmpty(storeCode))
{
return null;
}
try
{
var content = await _tispRecordService.GetAllDevOpsRecord12MonthStatisticsFullScreenAsync(storeCode);
return content;
}
catch (Exception ex)
{
return null;
}
}
///
/// 发送邮件(附件为巡检记录)
///
///
///
[HttpPost("SendRecordsToEmail")]
public async Task SendRecordsToEmail(SendRecordToEmailModel searchModel)
{
if (searchModel == null || string.IsNullOrEmpty(searchModel.C_StoreCode))
{
return;
}
try
{
var recordList = await _tispRecordService.GetRecordsConditionAsync(searchModel);
string zip = @"wwwroot\\ZipFile";
if (!System.IO.Directory.Exists(zip))
{
Directory.CreateDirectory(zip);
}
string zipPaht = zip + "\\点检记录下载_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".zip";
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet("sheet1");
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 5));
var titleRow = sheet.CreateRow(0);
titleRow.Height = 20 * 25;
NPOI.SS.UserModel.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(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 recordList)
{
if (item!=null)
{
var row = sheet.CreateRow(start);
row.CreateCell(0).SetCellValue(item.C_Name);
row.CreateCell(1).SetCellValue(item.C_Number);
row.CreateCell(2).SetCellValue(item.C_CreateByName);
row.CreateCell(3).SetCellValue(item.D_CreateOn.ToString("yyyy-MM-dd hh:mm:ss"));
switch (item.C_Status)
{
case "0":
row.CreateCell(4).SetCellValue("禁用");
break;
case "1":
row.CreateCell(4).SetCellValue("正常");
break;
case "2":
row.CreateCell(4).SetCellValue("异常");
break;
case "3":
row.CreateCell(4).SetCellValue("确认异常");
break;
case "4":
row.CreateCell(4).SetCellValue("取消异常");
break;
default:
row.CreateCell(4).SetCellValue("未知状态");
break;
}
row.CreateCell(5).SetCellValue(item.C_Remark);
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 zipFile = new FileStream(zipPaht, FileMode.Create))
{
// 列表Excel
using (var memoryStream = new NpoiMemoryStream())
{
workbook.Write(memoryStream);
byte[] excelData = memoryStream.ToArray();
using (var archive = new ZipArchive(zipFile, ZipArchiveMode.Update))
{
archive.CreateEntry("点检记录报表.xlsx").Open().Write(excelData, 0, excelData.Length);
}
}
}
//内容word
foreach (var cell in recordList.ToList())
{
if (cell != null)
{
var repairOrders = await _tispRecordItemService.GetRecordItemsByRecordIdAsync(cell.C_ID);
List> recordItems = repairOrders.ToList();
if (recordItems.Count > 0)
{
XWPFDocument doc = new XWPFDocument();
var paragraph = doc.CreateParagraph();
var run1 = paragraph.CreateRun();
run1.FontSize = 18;
int serialNum = 1;
run1.SetText("点检主题:" + cell.C_Name);
foreach (var itemList in recordItems)
{
if (itemList==null)
{
continue;
}
var p0 = doc.CreateParagraph();
var run0 = p0.CreateRun();
run0.FontSize = 16;
run0.SetText(" " + serialNum.ToString() + "、"+ itemList.FirstOrDefault()?.C_Name);
int serialNum1 = 1;
foreach (var item in itemList)
{
if(item==null)continue;
var p1 = doc.CreateParagraph();
var run = p1.CreateRun();
run.FontSize = 14;
string status = string.Empty;
//1 = 正常;0 = 异常;2 = 恢复;3 = 确认异常;4 = 取消异常
switch (item.C_Status)
{
case "1":
status = "正常";
break;
case "2":
status = "异常已处理";
break;
case "3":
status = "确认异常";
break;
case "4":
status = "取消异常";
break;
case "0":
status = "巡检异常";
break;
}
run.SetText(" " + serialNum.ToString() + "." + serialNum1.ToString());
run.AddCarriageReturn();
run.AppendText(" 操作时间:" + item.D_CreateOn.ToString("yyyy-MM-dd HH:mm"));
run.AddCarriageReturn();
run.AppendText(" 状态:" + status);
run.AddCarriageReturn();
run.AppendText(" 处理人员:" + item.ReportUserName);
if (item.RecordImageList != null && item.RecordImageList.Count() > 0)
{
run.AddCarriageReturn();
run.AppendText(" 现场拍照:");
foreach (var path in item.RecordImageList)
{
string pathFile = path.C_ImageURL;
if (pathFile != null)
{
if (pathFile[0].ToString() == @"/")
{
pathFile = pathFile.Substring(1);
}
if (!System.IO.File.Exists(pathFile))
{
pathFile = @"wwwroot/error.png";
}
FileStream fileStream = new FileStream(pathFile, FileMode.Open, FileAccess.Read);
run.AddCarriageReturn();
run.AddPicture(fileStream, 6, pathFile, Units.ToEMU(100), Units.ToEMU(100));
}
}
}
run.AddCarriageReturn();
run.AppendText(" 现场描述:" + item.C_Remark);
serialNum1++;
}
serialNum++;
}
using (var zipFile = new FileStream(zipPaht, FileMode.OpenOrCreate))
{
using (var memoryStream = new NpoiMemoryStream())
{
doc.Write(memoryStream);
byte[] excelData = memoryStream.ToArray();
using (var archive = new ZipArchive(zipFile, ZipArchiveMode.Update))
{
archive.CreateEntry("点检记录/" + cell.C_ID + ".docx").Open().Write(excelData, 0, excelData.Length);
}
}
}
}
}
}
var zipFile1 = new FileStream(zipPaht, FileMode.Open);
string emailName = $"{searchModel.DevName} 设备点检记录 {searchModel.Start.ToString("yyyy-MM-dd HH:mm:ss")}至{searchModel.End.ToString("yyyy-MM-dd HH:mm:ss")}";
EmailHelper.SendEmail(searchModel.Mails, emailName, "", "报表见附件", $"{emailName}.zip", "application/zip", zipFile1);
System.IO.File.Delete(zipPaht);
//using var stream = new NpoiMemoryStream();
//workbook.Write(stream);
//stream.Seek(0, SeekOrigin.Begin);
//EmailHelper.SendEmail(searchModel.Mails, $"{searchModel.Start}-{searchModel.End}设备点检记录报表", "", "报表见附件", $"{searchModel.Start}-{searchModel.End}设备点检记录报表.xlsx", "application/vnd.ms-excel", stream);
}
catch (Exception ex)
{
throw;
}
}
///
/// 导出点检记录压缩包
///
///
///
[HttpPost("ExportZip")]
[AllowAnonymous]
public async Task ExportZip(TispRecordSearchModel searchModel)
{
var recordList = await _tispRecordService.GetRecordsConditionAsync(searchModel);
string zip = @"wwwroot\\ZipFile";
if (!System.IO.Directory.Exists(zip))
{
Directory.CreateDirectory(zip);
}
string zipPaht = zip + "\\点检记录下载.zip";
System.IO.File.Delete(zipPaht);
TpntStoreViewModel spotModel = null;
if (!string.IsNullOrEmpty(searchModel.C_StoreCode))
{
Guid guid = Guid.Parse(searchModel.C_StoreCode);
spotModel = await _TpntStoreService.GetByIdAsync(guid);
}
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet();
#region
//标题加粗居中.
IFont font = workbook.CreateFont();
font.IsBold = true;
font.FontHeightInPoints = 25;
font.FontName = "宋体";
ICellStyle titleCellStyle = workbook.CreateCellStyle();
titleCellStyle.SetFont(font);
titleCellStyle.Alignment = HorizontalAlignment.Center; //字体居中
//边框
titleCellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
titleCellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
titleCellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
titleCellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
titleCellStyle.WrapText = true;
#endregion
#region
//表头加粗居中.
IFont font1 = workbook.CreateFont();
font1.IsBold = true;
font1.FontHeightInPoints = 14;
font1.FontName = "宋体";
ICellStyle headCellStyle = workbook.CreateCellStyle();
headCellStyle.SetFont(font1);
headCellStyle.Alignment = HorizontalAlignment.Center; //字体居中
//边框
headCellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
headCellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
headCellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
headCellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
headCellStyle.WrapText = true;
#endregion
#region
//行.
IFont font2 = workbook.CreateFont();
font2.IsBold = false;
font2.FontHeightInPoints = 12;
font2.FontName = "宋体";
ICellStyle rowCellStyle = workbook.CreateCellStyle();
rowCellStyle.SetFont(font2);
rowCellStyle.Alignment = HorizontalAlignment.Center; //字体居中
//边框
rowCellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
rowCellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
rowCellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
rowCellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
rowCellStyle.WrapText = true;
#endregion
#region 超链接
// 创建样式
ICellStyle styleLInk = workbook.CreateCellStyle();
// 设置字体颜色为蓝色
IFont fontLink = workbook.CreateFont();
fontLink.IsBold = false;
fontLink.FontHeightInPoints = 12;
fontLink.FontName = "宋体";
fontLink.Color = IndexedColors.Green.Index;
styleLInk.SetFont(fontLink);
// 设置下划线
fontLink.Underline = FontUnderlineType.Single;
styleLInk.SetFont(fontLink);
styleLInk.Alignment = HorizontalAlignment.Center; //字体居中
//边框
styleLInk.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
styleLInk.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
styleLInk.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
styleLInk.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
styleLInk.WrapText = true;
#endregion
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 7));
IRow title = sheet.CreateRow(0);
title.Height = 30 * 25;
title.CreateCell(0).SetCellValue("点检记录报表" + (spotModel == null ? "" : "(" + spotModel.C_Name + ")"));
foreach (var item in title.Cells)
{
item.CellStyle = titleCellStyle;
}
IRow head = sheet.CreateRow(1);
head.CreateCell(0).SetCellValue("序号");
head.CreateCell(1).SetCellValue("点检点名称");
head.CreateCell(2).SetCellValue("点检点编号");
head.CreateCell(3).SetCellValue("点检人");
head.CreateCell(4).SetCellValue("点检时间");
head.CreateCell(5).SetCellValue("状态");
head.CreateCell(6).SetCellValue("备注");
head.CreateCell(7).SetCellValue("附件");
foreach (var item in head.Cells)
{
item.CellStyle = headCellStyle;
}
int rowNumber = 2; int number = 1;
if (recordList.Any() && recordList.FirstOrDefault() != null)
{
foreach (var x in recordList)
{
IRow content = sheet.CreateRow(rowNumber);
content.CreateCell(0).SetCellValue(number);
content.CreateCell(1).SetCellValue(x.C_Name);
content.CreateCell(2).SetCellValue(x.C_Number);
content.CreateCell(3).SetCellValue(x.C_CreateByName);
content.CreateCell(4).SetCellValue(x.D_CreateOn.ToString("yyyy-MM-dd HH:mm"));
string statusVal = "";
switch (x.C_Status)
{
case "0": statusVal = "禁用"; break;
case "1": statusVal = "正常"; break;
case "2": statusVal = "异常"; break;
case "3": statusVal = "确认异常"; break;
case "4": statusVal = "取消异常"; break;
default: statusVal = "未知状态"; break;
}
content.CreateCell(5).SetCellValue(statusVal);
content.CreateCell(6).SetCellValue(x.C_Remark);
//超链接
NPOI.SS.UserModel.ICell cell = content.CreateCell(7);
cell.SetCellValue("附件");
IHyperlink link = new XSSFHyperlink(HyperlinkType.Url);
link.Address = ("点检记录/" + x.C_ID + ".docx");
cell.Hyperlink = link;
foreach (var item in content.Cells)
{
item.CellStyle = rowCellStyle;
}
// 应用样式到单元格
cell.CellStyle = styleLInk;
rowNumber++; number++;
}
}
else
{
IRow content1 = sheet.CreateRow(rowNumber);
content1.CreateCell(0).SetCellValue("暂无数据");
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 0, 7));
}
for (int i = 0; i <= 7; i++)
{
if (i == 0)
{
sheet.SetColumnWidth(i, 2000);
}
else if (i == 1)
{
sheet.SetColumnWidth(i, 7000);
}
else
{
sheet.SetColumnWidth(i, 4500);
}
}
using (var zipFile = new FileStream(zipPaht, FileMode.Create))
{
// 列表Excel
using (var memoryStream = new NpoiMemoryStream())
{
workbook.Write(memoryStream);
byte[] excelData = memoryStream.ToArray();
using (var archive = new ZipArchive(zipFile, ZipArchiveMode.Update))
{
archive.CreateEntry("点检记录报表.xlsx").Open().Write(excelData, 0, excelData.Length);
}
}
}
//内容word
foreach (var cell in recordList.ToList())
{
if (cell != null)
{
var repairOrders = await _tispRecordItemService.GetRecordItemsByRecordIdAsync(cell.C_ID);
List> recordItems = repairOrders.ToList();
if (recordItems.Count > 0)
{
XWPFDocument doc = new XWPFDocument();
var paragraph = doc.CreateParagraph();
var run1 = paragraph.CreateRun();
run1.FontSize = 18;
int serialNum = 1;
run1.SetText("点检主题:" + cell.C_Name);
foreach (var itemList in recordItems)
{
if (itemList == null) { continue; }
var p0 = doc.CreateParagraph();
var run0 = p0.CreateRun();
run0.FontSize = 16;
run0.SetText(" " + serialNum.ToString() + "、" + itemList.FirstOrDefault()?.C_Name);
int serialNum1 = 1;
foreach (var item in itemList)
{
if(item == null) { continue; }
var p1 = doc.CreateParagraph();
var run = p1.CreateRun();
run.FontSize = 14;
string status = string.Empty;
//1 = 正常;0 = 异常;2 = 恢复;3 = 确认异常;4 = 取消异常
switch (item.C_Status)
{
case "1":
status = "正常";
break;
case "2":
status = "异常已处理";
break;
case "3":
status = "确认异常";
break;
case "4":
status = "取消异常";
break;
case "0":
status = "巡检异常";
break;
}
run.SetText(" " + serialNum.ToString() + "." + serialNum1.ToString());
run.AddCarriageReturn();
run.AppendText(" 操作时间:" + item.D_CreateOn.ToString("yyyy-MM-dd HH:mm"));
run.AddCarriageReturn();
run.AppendText(" 状态:" + status);
run.AddCarriageReturn();
run.AppendText(" 处理人员:" + item.ReportUserName);
if (item.RecordImageList != null && item.RecordImageList.Count() > 0)
{
run.AddCarriageReturn();
run.AppendText(" 现场拍照:");
foreach (var path in item.RecordImageList)
{
string pathFile = path.C_ImageURL;
if (pathFile != null)
{
if (pathFile[0].ToString() == @"/")
{
pathFile = pathFile.Substring(1);
}
if (!System.IO.File.Exists(pathFile))
{
pathFile = @"wwwroot/error.png";
}
FileStream fileStream = new FileStream(pathFile, FileMode.Open, FileAccess.Read);
run.AddCarriageReturn();
run.AddPicture(fileStream, 6, pathFile, Units.ToEMU(100), Units.ToEMU(100));
}
}
}
run.AddCarriageReturn();
run.AppendText(" 现场描述:" + item.C_Remark);
serialNum1++;
}
serialNum++;
}
using (var zipFile = new FileStream(zipPaht, FileMode.OpenOrCreate))
{
using (var memoryStream = new NpoiMemoryStream())
{
doc.Write(memoryStream);
byte[] excelData = memoryStream.ToArray();
using (var archive = new ZipArchive(zipFile, ZipArchiveMode.Update))
{
archive.CreateEntry("点检记录/" + cell.C_ID + ".docx").Open().Write(excelData, 0, excelData.Length);
}
}
}
}
}
}
var zipFile1 = new FileStream(zipPaht, FileMode.Open);
// 将压缩后的数据作为响应返回给客户端(这里假设你使用的是HTTP GET请求)
return File(zipFile1, "application/zip", "点检记录报表.zip"); // 这里假设你的文件类型是.xlsx的GZip压缩文件。你可以根据需要调整MIME类型和文件扩展名。
}
}
}