123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590 |
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
- 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.Common;
- using Ropin.Inspection.Model;
- using Ropin.Inspection.Model.ViewModel;
- using Ropin.Inspection.Service.Interface;
- using System;
- using System.Collections.Generic;
- using System.IO.Compression;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- using Ropin.Inspection.Service;
- using Ropin.Inspection.Model.SearchModel;
- using ICSharpCode.SharpZipLib.Zip;
- using Ropin.Inspection.Model.SearchModel.SYS;
- namespace Ropin.Inspection.Api.Controllers
- {
- [AllowAnonymous]
- /// <summary>
- /// 组织架构
- /// </summary>
- public class TsysOrganizeController : BaseController
- {
- public ILogger<TsysOrganizeController> _logger { get; }
- private readonly ITsysOrganizeService _service;
- private readonly ITpntStoreOrgService _TpntStoreOrgService;
- private readonly ITsysUserService _tsysUserService;
- private readonly ITdevDevStoreService _TdevDevStoreService;
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="service"></param>
- /// <param name="logger"></param>
- public TsysOrganizeController(ITsysOrganizeService service, ILogger<TsysOrganizeController> logger, ITpntStoreOrgService TpntStoreOrgService, ITsysUserService tsysUserService, ITdevDevStoreService TdevDevStoreService)
- {
- _service = service;
- _logger = logger;
- _TpntStoreOrgService = TpntStoreOrgService;
- _tsysUserService = tsysUserService;
- _TdevDevStoreService = TdevDevStoreService;
- }
- /// <summary>
- /// 获取所有的组织架构,状态为非禁用
- /// </summary>
- /// <returns></returns>
- [HttpGet("GetOrganizeListTreeAsync")]
- [ResponseCache(Duration = 60)]
- public async Task<ApiResult> GetListTreeAsync()
- {
- try
- {
- var list = await _service.GetOrganizeListTreeAsync();
- return new ApiResult<List<TsysOrganizeTree>>(list);
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- }
- /// <summary>
- /// 获取所有的组织架构
- /// </summary>
- /// <returns></returns>
- [HttpGet("GetAllOrganizeListTreeAsync")]
- public async Task<ApiResult> GetAllOrganizeListTreeAsync()
- {
- try
- {
- var list = await _service.GetListTreeAsync();
- return new ApiResult<List<TsysOrganizeTree>>(list);
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- }
- /// <summary>
- /// 通过名称获取组织架构
- /// </summary>
- /// <returns></returns>
- [HttpGet("GetAllOrganizeListTreeByNameAsync/{name}")]
- public async Task<ApiResult> GetAllOrganizeListTreeByNameAsync(string name)
- {
- try
- {
- var list = await _service.GetListTreeAsync();
- if(string.IsNullOrWhiteSpace(name))
- return new ApiResult<List<TsysOrganizeTree>>(list);
- else
- return new ApiResult<List<TsysOrganizeTree>>(list.Where(x=>x.C_Name.Contains(name)).ToList());
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- }
- /// <summary>
- /// 获取组织架构,通过License和类型
- /// </summary>
- /// <returns></returns>
- [HttpGet("GetOrgsByAsync")]
- public async Task<ApiResult> GetOrgsByAsync()
- {
- try
- {
- var list = await _service.GetOrgsByAsync();
- return new ApiResult<TsysOrg>(list);
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- }
- /// <summary>
- /// 通过组织架构Code获取单个组织架构信息
- /// </summary>
- /// <param name="code"></param>
- /// <returns></returns>
- [HttpGet("GetOrganizeAsync/{code}")]
- public async Task<ApiResult> GetOrganizeAsync(Guid code)
- {
- if (Guid.Empty == code)
- {
- return new ApiResult(ReturnCode.GeneralError);
- }
- try
- {
- var Organize = await _service.GetByIdAsync(code);
- return new ApiResult<TsysOrganizeViewModel>(Organize);
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- }
- /// <summary>
- /// 创建组织架构
- /// </summary>
- /// <param name="Organize"></param>
- /// <returns></returns>
- [Route("CreateOrganizeAsync")]
- [HttpPost]
- public async Task<ApiResult> CreateOrganizeAsync(TsysOrganizeCreateViewModel Organize)
- {
- if (Organize == null)
- {
- return new ApiResult(ReturnCode.ArgsError);
- }
- try
- {
- await _service.CreateAsync(Organize);
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- return new ApiResult(ReturnCode.Success);
- }
- /// <summary>
- /// 删除组织架构
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- [HttpDelete("DeleteOrganizeAsync/{id}")]
- public async Task<ApiResult> DeleteOrganizeAsync(Guid id)
- {
- if (Guid.Empty == id)
- {
- return new ApiResult(ReturnCode.GeneralError);
- }
- try
- {
- await _service.DeleteAsync(id);
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- return new ApiResult(ReturnCode.Success);
- }
- /// <summary>
- /// 更新组织架构
- /// </summary>
- /// <param name="id"></param>
- /// <param name="updateModel"></param>
- /// <returns></returns>
- [HttpPut("UpdateOrganizeAsync/{id}")]
- public async Task<ApiResult> UpdateOrganizeAsync(Guid id, TsysOrganizeUpdateViewModel updateModel)
- {
- if (Guid.Empty == id)
- {
- return new ApiResult(ReturnCode.GeneralError);
- }
- try
- {
- await _service.UpdateAsync(id, updateModel);
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- return new ApiResult(ReturnCode.Success);
- }
- /// <summary>
- /// 通过组织架构ID取组织架构树
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- [HttpGet("GetByOrganizeTreeCodeAsync/{id}")]
- public async Task<ApiResult> GetByOrganizeCodeAsync(Guid id)
- {
- if (Guid.Empty == id)
- {
- return new ApiResult(ReturnCode.GeneralError);
- }
- try
- {
- var OrganizeTree = await _service.GetByOrganizeCodeAsync(id);
- return new ApiResult<List<TsysOrganizeTree>>(OrganizeTree);
- }
- catch (Exception ex)
- {
- return new ApiResult(ReturnCode.GeneralError, ex.Message);
- }
- }
- /// <summary>
- /// 发送邮件(设备、人员、业主信息)
- /// </summary>
- /// <param name="orgCode"></param>
- /// <returns></returns>
- [HttpPost("SendDevUserStoreToEmail")]
- public async Task SendDevUserStoreToEmail(SendToEmailModel model)
- {
- try
- {
- TpntStoreSearchModel searchModel=new TpntStoreSearchModel();
- searchModel.orgCode = model.orgCode;
- var contentList = await _TpntStoreOrgService.GetStoresByOrgCodeAsync(searchModel);//业主信息
- TsysUserSearchByNameModel searchUserModel=new TsysUserSearchByNameModel() { C_Status="1",G_OrganizeCode=model.orgCode,IsPagination=false};
- var userList = await _tsysUserService.GetByNameAsync(searchUserModel);//人员
- IWorkbook workbook = new XSSFWorkbook();
- #region //第一行字体样式
- 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;
- #endregion
- #region //第二行,列名
- 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;
- #endregion
- #region 内容
- 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;
- #endregion
-
- #region 人员
- ISheet sheet = workbook.CreateSheet("人员信息");
- sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 11));
- var titleRow = sheet.CreateRow(0);
- titleRow.Height = 20 * 25;
- NPOI.SS.UserModel.ICell titleCell = titleRow.CreateCell(0);
- titleCell.SetCellValue("人员信息");
- 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("所属组织");
- headRow.CreateCell(6).SetCellValue("岗 位");
- headRow.CreateCell(7).SetCellValue("角 色");
- headRow.CreateCell(8).SetCellValue("手机号码");
- headRow.CreateCell(9).SetCellValue("Email");
- headRow.CreateCell(10).SetCellValue("状 态");
- headRow.CreateCell(11).SetCellValue("备 注");
- foreach (var item in headRow.Cells)
- {
- item.CellStyle = headCellStyle;
- }
- int start = 2;
- if (userList!=null&&userList.Count()>0)
- {
- foreach (var item in userList)
- {
- if (item != null)
- {
- List<string> roleList = null;
- if (item.Roles != null && item.Roles.Count() > 0) {
- roleList= item.Roles.Select(t => t.RoleName).ToList();
- };
- var row = sheet.CreateRow(start);
- row.CreateCell(0).SetCellValue(item.C_Name);
- row.CreateCell(1).SetCellValue(item.I_Render==1?"男": "女");
- row.CreateCell(2).SetCellValue(item.C_IDNum);
- row.CreateCell(3).SetCellValue(item.D_BirthDay?.ToString("yyyy-MM-dd"));
- row.CreateCell(4).SetCellValue(item.C_Address);
- row.CreateCell(5).SetCellValue(item.OrgName);
- row.CreateCell(6).SetCellValue(item.C_Post);
- row.CreateCell(7).SetCellValue((roleList!=null&&roleList.Count>0)?string.Join(",",roleList):"");
- row.CreateCell(8).SetCellValue(item.C_Mobile);
- row.CreateCell(9).SetCellValue(item.C_Email);
- row.CreateCell(10).SetCellValue(item.C_Status=="1"?"正常":"禁用");
- row.CreateCell(11).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 < 12; i++)
- {
- sheet.AutoSizeColumn(i, true);
- }
- #endregion
- #region 业主
- ISheet sheet1 = workbook.CreateSheet("业主信息");
- sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 8));
- var titleRow1 = sheet1.CreateRow(0);
- titleRow1.Height = 20 * 25;
- NPOI.SS.UserModel.ICell titleCell1 = titleRow1.CreateCell(0);
- titleCell1.SetCellValue("业主信息");
- titleCell1.CellStyle = titleCellStyle;
- var headRow1 = sheet1.CreateRow(1);
- headRow1.CreateCell(0).SetCellValue("名 称");
- headRow1.CreateCell(1).SetCellValue("简 称");
- headRow1.CreateCell(2).SetCellValue("网点类型");
- headRow1.CreateCell(3).SetCellValue("行政区名称");
- headRow1.CreateCell(4).SetCellValue("地 址");
- headRow1.CreateCell(5).SetCellValue("GPS地址");
- headRow1.CreateCell(6).SetCellValue("大屏GPS");
- headRow1.CreateCell(7).SetCellValue("状 态");
- headRow1.CreateCell(8).SetCellValue("备 注");
- foreach (var item in headRow1.Cells)
- {
- item.CellStyle = headCellStyle;
- }
- int start1 = 2;
- if (contentList != null && contentList.Count() > 0)
- {
- foreach (var item in contentList)
- {
- if (item != null)
- {
- var row = sheet1.CreateRow(start1);
- row.CreateCell(0).SetCellValue(item.C_Name);
- row.CreateCell(1).SetCellValue(item.C_SName);
- row.CreateCell(2).SetCellValue(item.TypeName);
- row.CreateCell(3).SetCellValue(item.AreaName);
- row.CreateCell(4).SetCellValue(item.C_Address);
- row.CreateCell(5).SetCellValue(item.C_GPS);
- row.CreateCell(6).SetCellValue(item.C_LargeScreenGPS);
- row.CreateCell(7).SetCellValue(item.C_Status == "1" ? "正常" : "禁用");
- row.CreateCell(8).SetCellValue(item.C_Remark);
- start1++;
- foreach (var cell in row.Cells)
- {
- cell.CellStyle = contentCellStyle;
- }
- }
- }
- }
- // 自适应单元格
- for (int i = 0; i < sheet1.LastRowNum; i++)
- {
- sheet1.AutoSizeRow(i);
- }
- for (int i = 0; i < 9; i++)
- {
- sheet1.AutoSizeColumn(i, true);
- }
- #endregion
- #region 设备
- if (contentList != null && contentList.Count() > 0)
- {
- foreach (var item in contentList)
- {
- if (item != null)
- {
- TdevDevStoreSearchModel searchDevModel = new TdevDevStoreSearchModel() { C_StoreCode =item.C_Code};
- var devList = await _TdevDevStoreService.GetConditionAsync(searchDevModel);
- string sheetName = item.C_Name + "-设备信息";
- ISheet sheetDev = workbook.CreateSheet(sheetName);
- sheetDev.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 11));
- var titleRowDev = sheetDev.CreateRow(0);
- titleRowDev.Height = 20 * 25;
- NPOI.SS.UserModel.ICell titleCellDev = titleRowDev.CreateCell(0);
- titleCellDev.SetCellValue(sheetName);
- titleCellDev.CellStyle = titleCellStyle;
- var headRowDev = sheetDev.CreateRow(1);
- headRowDev.CreateCell(0).SetCellValue("名 称");
- headRowDev.CreateCell(1).SetCellValue("设备编码");
- headRowDev.CreateCell(2).SetCellValue("合同编号");
- headRowDev.CreateCell(3).SetCellValue("运维开始");
- headRowDev.CreateCell(4).SetCellValue("运维结束");
- headRowDev.CreateCell(5).SetCellValue("设备二维码地址");
- headRowDev.CreateCell(6).SetCellValue("设备地址");
- headRowDev.CreateCell(7).SetCellValue("动态设备图片");
- headRowDev.CreateCell(8).SetCellValue("静态设备图片");
- headRowDev.CreateCell(9).SetCellValue("创建时间");
- headRowDev.CreateCell(10).SetCellValue("状 态");
- headRowDev.CreateCell(11).SetCellValue("备 注");
- foreach (var itemDev in headRowDev.Cells)
- {
- itemDev.CellStyle = headCellStyle;
- }
- int startDev = 2;
- foreach (var dev in devList)
- {
- if (dev != null)
- {
- var row = sheetDev.CreateRow(startDev);
- row.HeightInPoints = 70;
- row.CreateCell(0).SetCellValue(dev.C_Name);
- row.CreateCell(1).SetCellValue(dev.C_NumberCode);
- row.CreateCell(2).SetCellValue(dev.C_ContractNumber);
- row.CreateCell(3).SetCellValue(dev.D_DevOpsStart?.ToString("yyyy-MM-dd"));
- row.CreateCell(4).SetCellValue(dev.D_DevOpsEnd?.ToString("yyyy-MM-dd"));
- if (System.IO.File.Exists(dev.C_DevQRUrl))
- {
- // 创建一个画图的对象
- IDrawing drawing = sheetDev.CreateDrawingPatriarch();
- // 获取要插入图片的单元格位置
- NPOI.SS.UserModel.ICell cell = row.CreateCell(5);
- // 把图片加入到工作簿中
- byte[] imageBytes = null;
- using (FileStream fs = new FileStream(dev.C_DevQRUrl, FileMode.Open))
- {
- imageBytes = new byte[fs.Length];
- fs.Read(imageBytes, 0, (int)fs.Length);
- }
- int pictureIdx = workbook.AddPicture(imageBytes, NPOI.SS.UserModel.PictureType.JPEG);
- // 创建图片对象,并设置其属性
- XSSFPicture picture = (XSSFPicture)drawing.CreatePicture(new XSSFClientAnchor(0, 0, 1, 1, (short)cell.ColumnIndex, cell.RowIndex, (short)(cell.ColumnIndex + 1), cell.RowIndex + 1), pictureIdx);
- }
- else
- {
- row.CreateCell(5).SetCellValue("");
- }
- row.CreateCell(6).SetCellValue(dev.C_GPS);
- if (System.IO.File.Exists(dev.C_Url))
- {
- // 创建一个画图的对象
- IDrawing drawing = sheetDev.CreateDrawingPatriarch();
- // 获取要插入图片的单元格位置
- NPOI.SS.UserModel.ICell cell = row.CreateCell(7);
- // 把图片加入到工作簿中
- byte[] imageBytes = null;
- using (FileStream fs = new FileStream(dev.C_DevQRUrl, FileMode.Open))
- {
- imageBytes = new byte[fs.Length];
- fs.Read(imageBytes, 0, (int)fs.Length);
- }
- int pictureIdx = workbook.AddPicture(imageBytes, NPOI.SS.UserModel.PictureType.JPEG);
- // 创建图片对象,并设置其属性
- XSSFPicture picture = (XSSFPicture)drawing.CreatePicture(new XSSFClientAnchor(0, 0, 1, 1, (short)cell.ColumnIndex, cell.RowIndex, (short)(cell.ColumnIndex + 1), cell.RowIndex + 1), pictureIdx);
- }
- else
- {
- row.CreateCell(7).SetCellValue("");
- }
- if (System.IO.File.Exists(dev.C_StaticUrl))
- {
- // 创建一个画图的对象
- IDrawing drawing = sheetDev.CreateDrawingPatriarch();
- // 获取要插入图片的单元格位置
- NPOI.SS.UserModel.ICell cell = row.CreateCell(8);
- // 把图片加入到工作簿中
- byte[] imageBytes = null;
- using (FileStream fs = new FileStream(dev.C_DevQRUrl, FileMode.Open))
- {
- imageBytes = new byte[fs.Length];
- fs.Read(imageBytes, 0, (int)fs.Length);
- }
- int pictureIdx = workbook.AddPicture(imageBytes, NPOI.SS.UserModel.PictureType.JPEG);
- // 创建图片对象,并设置其属性
- XSSFPicture picture = (XSSFPicture)drawing.CreatePicture(new XSSFClientAnchor(0, 0, 1, 1, (short)cell.ColumnIndex, cell.RowIndex, (short)(cell.ColumnIndex + 1), cell.RowIndex + 1), pictureIdx);
- }
- else
- {
- row.CreateCell(8).SetCellValue("");
- }
- row.CreateCell(9).SetCellValue(dev.D_CreateOn.ToString("yyyy-MM-dd HH:mm:ss"));
- string status = "";
- switch (dev.C_Status)
- {
- case "0": status = "禁用";break;
- case "1": status = "分配、业主已购买"; break;
- case "2": status = "启运"; break;
- case "3": status = "停运"; break;
- case "4": status = "报警"; break;
- case "5": status = "报废"; break;
- case "6": status = "预警"; break;
- default: status = ""; break;
- }
- row.CreateCell(10).SetCellValue(status);
- row.CreateCell(11).SetCellValue(dev.C_Remark);
- startDev++;
- foreach (var cell in row.Cells)
- {
- cell.CellStyle = contentCellStyle;
- }
- }
- }
- // 自适应单元格
- //for (int i = 0; i < sheetDev.LastRowNum; i++)
- //{
- // sheetDev.AutoSizeRow(i);
- //}
- for (int i = 0; i < 12; i++)
- {
- sheetDev.AutoSizeColumn(i, true);
- }
- }
- }
- }
- #endregion
- using (var stream = new NpoiMemoryStream())
- {
- workbook.Write(stream);
- stream.Seek(0, SeekOrigin.Begin);
- //return File(stream, "pplication/vnd.ms-excel", $"{model.OrgName}-设备清单记录报表.xlsx");
- EmailHelper.SendEmail(model.Mails, $"{model.OrgName}-设备清单记录报表", "", "报表见附件", $"{model.OrgName}-设备清单记录报表.xlsx", "application/vnd.ms-excel", stream);
- }
- }
- catch (Exception ex)
- {
- throw;
- }
- }
- }
- }
|