TsysOrganizeController.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.Extensions.Logging;
  4. using NPOI.SS.UserModel;
  5. using NPOI.Util;
  6. using NPOI.XSSF.UserModel;
  7. using NPOI.XWPF.UserModel;
  8. using Ropin.Inspection.Api.Common;
  9. using Ropin.Inspection.Common.Helper;
  10. using Ropin.Inspection.Model.Common;
  11. using Ropin.Inspection.Model;
  12. using Ropin.Inspection.Model.ViewModel;
  13. using Ropin.Inspection.Service.Interface;
  14. using System;
  15. using System.Collections.Generic;
  16. using System.IO.Compression;
  17. using System.IO;
  18. using System.Linq;
  19. using System.Threading.Tasks;
  20. using Ropin.Inspection.Service;
  21. using Ropin.Inspection.Model.SearchModel;
  22. using ICSharpCode.SharpZipLib.Zip;
  23. using Ropin.Inspection.Model.SearchModel.SYS;
  24. namespace Ropin.Inspection.Api.Controllers
  25. {
  26. [AllowAnonymous]
  27. /// <summary>
  28. /// 组织架构
  29. /// </summary>
  30. public class TsysOrganizeController : BaseController
  31. {
  32. public ILogger<TsysOrganizeController> _logger { get; }
  33. private readonly ITsysOrganizeService _service;
  34. private readonly ITpntStoreOrgService _TpntStoreOrgService;
  35. private readonly ITsysUserService _tsysUserService;
  36. private readonly ITdevDevStoreService _TdevDevStoreService;
  37. /// <summary>
  38. /// 构造函数
  39. /// </summary>
  40. /// <param name="service"></param>
  41. /// <param name="logger"></param>
  42. public TsysOrganizeController(ITsysOrganizeService service, ILogger<TsysOrganizeController> logger, ITpntStoreOrgService TpntStoreOrgService, ITsysUserService tsysUserService, ITdevDevStoreService TdevDevStoreService)
  43. {
  44. _service = service;
  45. _logger = logger;
  46. _TpntStoreOrgService = TpntStoreOrgService;
  47. _tsysUserService = tsysUserService;
  48. _TdevDevStoreService = TdevDevStoreService;
  49. }
  50. /// <summary>
  51. /// 获取所有的组织架构,状态为非禁用
  52. /// </summary>
  53. /// <returns></returns>
  54. [HttpGet("GetOrganizeListTreeAsync")]
  55. [ResponseCache(Duration = 60)]
  56. public async Task<ApiResult> GetListTreeAsync()
  57. {
  58. try
  59. {
  60. var list = await _service.GetOrganizeListTreeAsync();
  61. return new ApiResult<List<TsysOrganizeTree>>(list);
  62. }
  63. catch (Exception ex)
  64. {
  65. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  66. }
  67. }
  68. /// <summary>
  69. /// 获取所有的组织架构
  70. /// </summary>
  71. /// <returns></returns>
  72. [HttpGet("GetAllOrganizeListTreeAsync")]
  73. public async Task<ApiResult> GetAllOrganizeListTreeAsync()
  74. {
  75. try
  76. {
  77. var list = await _service.GetListTreeAsync();
  78. return new ApiResult<List<TsysOrganizeTree>>(list);
  79. }
  80. catch (Exception ex)
  81. {
  82. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  83. }
  84. }
  85. /// <summary>
  86. /// 通过名称获取组织架构
  87. /// </summary>
  88. /// <returns></returns>
  89. [HttpGet("GetAllOrganizeListTreeByNameAsync/{name}")]
  90. public async Task<ApiResult> GetAllOrganizeListTreeByNameAsync(string name)
  91. {
  92. try
  93. {
  94. var list = await _service.GetListTreeAsync();
  95. if(string.IsNullOrWhiteSpace(name))
  96. return new ApiResult<List<TsysOrganizeTree>>(list);
  97. else
  98. return new ApiResult<List<TsysOrganizeTree>>(list.Where(x=>x.C_Name.Contains(name)).ToList());
  99. }
  100. catch (Exception ex)
  101. {
  102. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  103. }
  104. }
  105. /// <summary>
  106. /// 获取组织架构,通过License和类型
  107. /// </summary>
  108. /// <returns></returns>
  109. [HttpGet("GetOrgsByAsync")]
  110. public async Task<ApiResult> GetOrgsByAsync()
  111. {
  112. try
  113. {
  114. var list = await _service.GetOrgsByAsync();
  115. return new ApiResult<TsysOrg>(list);
  116. }
  117. catch (Exception ex)
  118. {
  119. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  120. }
  121. }
  122. /// <summary>
  123. /// 通过组织架构Code获取单个组织架构信息
  124. /// </summary>
  125. /// <param name="code"></param>
  126. /// <returns></returns>
  127. [HttpGet("GetOrganizeAsync/{code}")]
  128. public async Task<ApiResult> GetOrganizeAsync(Guid code)
  129. {
  130. if (Guid.Empty == code)
  131. {
  132. return new ApiResult(ReturnCode.GeneralError);
  133. }
  134. try
  135. {
  136. var Organize = await _service.GetByIdAsync(code);
  137. return new ApiResult<TsysOrganizeViewModel>(Organize);
  138. }
  139. catch (Exception ex)
  140. {
  141. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  142. }
  143. }
  144. /// <summary>
  145. /// 创建组织架构
  146. /// </summary>
  147. /// <param name="Organize"></param>
  148. /// <returns></returns>
  149. [Route("CreateOrganizeAsync")]
  150. [HttpPost]
  151. public async Task<ApiResult> CreateOrganizeAsync(TsysOrganizeCreateViewModel Organize)
  152. {
  153. if (Organize == null)
  154. {
  155. return new ApiResult(ReturnCode.ArgsError);
  156. }
  157. try
  158. {
  159. await _service.CreateAsync(Organize);
  160. }
  161. catch (Exception ex)
  162. {
  163. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  164. }
  165. return new ApiResult(ReturnCode.Success);
  166. }
  167. /// <summary>
  168. /// 删除组织架构
  169. /// </summary>
  170. /// <param name="id"></param>
  171. /// <returns></returns>
  172. [HttpDelete("DeleteOrganizeAsync/{id}")]
  173. public async Task<ApiResult> DeleteOrganizeAsync(Guid id)
  174. {
  175. if (Guid.Empty == id)
  176. {
  177. return new ApiResult(ReturnCode.GeneralError);
  178. }
  179. try
  180. {
  181. await _service.DeleteAsync(id);
  182. }
  183. catch (Exception ex)
  184. {
  185. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  186. }
  187. return new ApiResult(ReturnCode.Success);
  188. }
  189. /// <summary>
  190. /// 更新组织架构
  191. /// </summary>
  192. /// <param name="id"></param>
  193. /// <param name="updateModel"></param>
  194. /// <returns></returns>
  195. [HttpPut("UpdateOrganizeAsync/{id}")]
  196. public async Task<ApiResult> UpdateOrganizeAsync(Guid id, TsysOrganizeUpdateViewModel updateModel)
  197. {
  198. if (Guid.Empty == id)
  199. {
  200. return new ApiResult(ReturnCode.GeneralError);
  201. }
  202. try
  203. {
  204. await _service.UpdateAsync(id, updateModel);
  205. }
  206. catch (Exception ex)
  207. {
  208. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  209. }
  210. return new ApiResult(ReturnCode.Success);
  211. }
  212. /// <summary>
  213. /// 通过组织架构ID取组织架构树
  214. /// </summary>
  215. /// <param name="id"></param>
  216. /// <returns></returns>
  217. [HttpGet("GetByOrganizeTreeCodeAsync/{id}")]
  218. public async Task<ApiResult> GetByOrganizeCodeAsync(Guid id)
  219. {
  220. if (Guid.Empty == id)
  221. {
  222. return new ApiResult(ReturnCode.GeneralError);
  223. }
  224. try
  225. {
  226. var OrganizeTree = await _service.GetByOrganizeCodeAsync(id);
  227. return new ApiResult<List<TsysOrganizeTree>>(OrganizeTree);
  228. }
  229. catch (Exception ex)
  230. {
  231. return new ApiResult(ReturnCode.GeneralError, ex.Message);
  232. }
  233. }
  234. /// <summary>
  235. /// 发送邮件(设备、人员、业主信息)
  236. /// </summary>
  237. /// <param name="orgCode"></param>
  238. /// <returns></returns>
  239. [HttpPost("SendDevUserStoreToEmail")]
  240. public async Task SendDevUserStoreToEmail(SendToEmailModel model)
  241. {
  242. try
  243. {
  244. TpntStoreSearchModel searchModel=new TpntStoreSearchModel();
  245. searchModel.orgCode = model.orgCode;
  246. var contentList = await _TpntStoreOrgService.GetStoresByOrgCodeAsync(searchModel);//业主信息
  247. TsysUserSearchByNameModel searchUserModel=new TsysUserSearchByNameModel() { C_Status="1",G_OrganizeCode=model.orgCode,IsPagination=false};
  248. var userList = await _tsysUserService.GetByNameAsync(searchUserModel);//人员
  249. IWorkbook workbook = new XSSFWorkbook();
  250. #region //第一行字体样式
  251. IFont font = workbook.CreateFont();
  252. font.IsBold = true;
  253. font.FontHeightInPoints = 16;
  254. font.FontName = "宋体";
  255. ICellStyle titleCellStyle = workbook.CreateCellStyle();
  256. titleCellStyle.SetFont(font);
  257. titleCellStyle.Alignment = HorizontalAlignment.Center; //字体居中
  258. //边框
  259. titleCellStyle.BorderBottom = BorderStyle.Thin;
  260. titleCellStyle.BorderLeft = BorderStyle.Thin;
  261. titleCellStyle.BorderRight = BorderStyle.Thin;
  262. titleCellStyle.BorderTop = BorderStyle.Thin;
  263. #endregion
  264. #region //第二行,列名
  265. IFont font1 = workbook.CreateFont();
  266. font1.IsBold = true;
  267. font1.FontHeightInPoints = 12;
  268. font1.FontName = "宋体";
  269. ICellStyle headCellStyle = workbook.CreateCellStyle();
  270. headCellStyle.SetFont(font1);
  271. //边框
  272. headCellStyle.BorderBottom = BorderStyle.Thin;
  273. headCellStyle.BorderLeft = BorderStyle.Thin;
  274. headCellStyle.BorderRight = BorderStyle.Thin;
  275. headCellStyle.BorderTop = BorderStyle.Thin;
  276. #endregion
  277. #region 内容
  278. IFont font3 = workbook.CreateFont();
  279. font3.FontHeightInPoints = 9;
  280. font3.FontName = "宋体";
  281. ICellStyle contentCellStyle = workbook.CreateCellStyle();
  282. contentCellStyle.SetFont(font3);
  283. //边框
  284. contentCellStyle.BorderBottom = BorderStyle.Thin;
  285. contentCellStyle.BorderLeft = BorderStyle.Thin;
  286. contentCellStyle.BorderRight = BorderStyle.Thin;
  287. contentCellStyle.BorderTop = BorderStyle.Thin;
  288. #endregion
  289. #region 人员
  290. ISheet sheet = workbook.CreateSheet("人员信息");
  291. sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 11));
  292. var titleRow = sheet.CreateRow(0);
  293. titleRow.Height = 20 * 25;
  294. NPOI.SS.UserModel.ICell titleCell = titleRow.CreateCell(0);
  295. titleCell.SetCellValue("人员信息");
  296. titleCell.CellStyle = titleCellStyle;
  297. var headRow = sheet.CreateRow(1);
  298. headRow.CreateCell(0).SetCellValue("姓 名");
  299. headRow.CreateCell(1).SetCellValue("性 别");
  300. headRow.CreateCell(2).SetCellValue("身份证号码");
  301. headRow.CreateCell(3).SetCellValue("生 日");
  302. headRow.CreateCell(4).SetCellValue("联系地址");
  303. headRow.CreateCell(5).SetCellValue("所属组织");
  304. headRow.CreateCell(6).SetCellValue("岗 位");
  305. headRow.CreateCell(7).SetCellValue("角 色");
  306. headRow.CreateCell(8).SetCellValue("手机号码");
  307. headRow.CreateCell(9).SetCellValue("Email");
  308. headRow.CreateCell(10).SetCellValue("状 态");
  309. headRow.CreateCell(11).SetCellValue("备 注");
  310. foreach (var item in headRow.Cells)
  311. {
  312. item.CellStyle = headCellStyle;
  313. }
  314. int start = 2;
  315. if (userList!=null&&userList.Count()>0)
  316. {
  317. foreach (var item in userList)
  318. {
  319. if (item != null)
  320. {
  321. List<string> roleList = null;
  322. if (item.Roles != null && item.Roles.Count() > 0) {
  323. roleList= item.Roles.Select(t => t.RoleName).ToList();
  324. };
  325. var row = sheet.CreateRow(start);
  326. row.CreateCell(0).SetCellValue(item.C_Name);
  327. row.CreateCell(1).SetCellValue(item.I_Render==1?"男": "女");
  328. row.CreateCell(2).SetCellValue(item.C_IDNum);
  329. row.CreateCell(3).SetCellValue(item.D_BirthDay?.ToString("yyyy-MM-dd"));
  330. row.CreateCell(4).SetCellValue(item.C_Address);
  331. row.CreateCell(5).SetCellValue(item.OrgName);
  332. row.CreateCell(6).SetCellValue(item.C_Post);
  333. row.CreateCell(7).SetCellValue((roleList!=null&&roleList.Count>0)?string.Join(",",roleList):"");
  334. row.CreateCell(8).SetCellValue(item.C_Mobile);
  335. row.CreateCell(9).SetCellValue(item.C_Email);
  336. row.CreateCell(10).SetCellValue(item.C_Status=="1"?"正常":"禁用");
  337. row.CreateCell(11).SetCellValue(item.C_Remark);
  338. start++;
  339. foreach (var cell in row.Cells)
  340. {
  341. cell.CellStyle = contentCellStyle;
  342. }
  343. }
  344. }
  345. }
  346. // 自适应单元格
  347. for (int i = 0; i < sheet.LastRowNum; i++)
  348. {
  349. sheet.AutoSizeRow(i);
  350. }
  351. for (int i = 0; i < 12; i++)
  352. {
  353. sheet.AutoSizeColumn(i, true);
  354. }
  355. #endregion
  356. #region 业主
  357. ISheet sheet1 = workbook.CreateSheet("业主信息");
  358. sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 8));
  359. var titleRow1 = sheet1.CreateRow(0);
  360. titleRow1.Height = 20 * 25;
  361. NPOI.SS.UserModel.ICell titleCell1 = titleRow1.CreateCell(0);
  362. titleCell1.SetCellValue("业主信息");
  363. titleCell1.CellStyle = titleCellStyle;
  364. var headRow1 = sheet1.CreateRow(1);
  365. headRow1.CreateCell(0).SetCellValue("名 称");
  366. headRow1.CreateCell(1).SetCellValue("简 称");
  367. headRow1.CreateCell(2).SetCellValue("网点类型");
  368. headRow1.CreateCell(3).SetCellValue("行政区名称");
  369. headRow1.CreateCell(4).SetCellValue("地 址");
  370. headRow1.CreateCell(5).SetCellValue("GPS地址");
  371. headRow1.CreateCell(6).SetCellValue("大屏GPS");
  372. headRow1.CreateCell(7).SetCellValue("状 态");
  373. headRow1.CreateCell(8).SetCellValue("备 注");
  374. foreach (var item in headRow1.Cells)
  375. {
  376. item.CellStyle = headCellStyle;
  377. }
  378. int start1 = 2;
  379. if (contentList != null && contentList.Count() > 0)
  380. {
  381. foreach (var item in contentList)
  382. {
  383. if (item != null)
  384. {
  385. var row = sheet1.CreateRow(start1);
  386. row.CreateCell(0).SetCellValue(item.C_Name);
  387. row.CreateCell(1).SetCellValue(item.C_SName);
  388. row.CreateCell(2).SetCellValue(item.TypeName);
  389. row.CreateCell(3).SetCellValue(item.AreaName);
  390. row.CreateCell(4).SetCellValue(item.C_Address);
  391. row.CreateCell(5).SetCellValue(item.C_GPS);
  392. row.CreateCell(6).SetCellValue(item.C_LargeScreenGPS);
  393. row.CreateCell(7).SetCellValue(item.C_Status == "1" ? "正常" : "禁用");
  394. row.CreateCell(8).SetCellValue(item.C_Remark);
  395. start1++;
  396. foreach (var cell in row.Cells)
  397. {
  398. cell.CellStyle = contentCellStyle;
  399. }
  400. }
  401. }
  402. }
  403. // 自适应单元格
  404. for (int i = 0; i < sheet1.LastRowNum; i++)
  405. {
  406. sheet1.AutoSizeRow(i);
  407. }
  408. for (int i = 0; i < 9; i++)
  409. {
  410. sheet1.AutoSizeColumn(i, true);
  411. }
  412. #endregion
  413. #region 设备
  414. if (contentList != null && contentList.Count() > 0)
  415. {
  416. foreach (var item in contentList)
  417. {
  418. if (item != null)
  419. {
  420. TdevDevStoreSearchModel searchDevModel = new TdevDevStoreSearchModel() { C_StoreCode =item.C_Code};
  421. var devList = await _TdevDevStoreService.GetConditionAsync(searchDevModel);
  422. string sheetName = item.C_Name + "-设备信息";
  423. ISheet sheetDev = workbook.CreateSheet(sheetName);
  424. sheetDev.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 11));
  425. var titleRowDev = sheetDev.CreateRow(0);
  426. titleRowDev.Height = 20 * 25;
  427. NPOI.SS.UserModel.ICell titleCellDev = titleRowDev.CreateCell(0);
  428. titleCellDev.SetCellValue(sheetName);
  429. titleCellDev.CellStyle = titleCellStyle;
  430. var headRowDev = sheetDev.CreateRow(1);
  431. headRowDev.CreateCell(0).SetCellValue("名 称");
  432. headRowDev.CreateCell(1).SetCellValue("设备编码");
  433. headRowDev.CreateCell(2).SetCellValue("合同编号");
  434. headRowDev.CreateCell(3).SetCellValue("运维开始");
  435. headRowDev.CreateCell(4).SetCellValue("运维结束");
  436. headRowDev.CreateCell(5).SetCellValue("设备二维码地址");
  437. headRowDev.CreateCell(6).SetCellValue("设备地址");
  438. headRowDev.CreateCell(7).SetCellValue("动态设备图片");
  439. headRowDev.CreateCell(8).SetCellValue("静态设备图片");
  440. headRowDev.CreateCell(9).SetCellValue("创建时间");
  441. headRowDev.CreateCell(10).SetCellValue("状 态");
  442. headRowDev.CreateCell(11).SetCellValue("备 注");
  443. foreach (var itemDev in headRowDev.Cells)
  444. {
  445. itemDev.CellStyle = headCellStyle;
  446. }
  447. int startDev = 2;
  448. foreach (var dev in devList)
  449. {
  450. if (dev != null)
  451. {
  452. var row = sheetDev.CreateRow(startDev);
  453. row.HeightInPoints = 70;
  454. row.CreateCell(0).SetCellValue(dev.C_Name);
  455. row.CreateCell(1).SetCellValue(dev.C_NumberCode);
  456. row.CreateCell(2).SetCellValue(dev.C_ContractNumber);
  457. row.CreateCell(3).SetCellValue(dev.D_DevOpsStart?.ToString("yyyy-MM-dd"));
  458. row.CreateCell(4).SetCellValue(dev.D_DevOpsEnd?.ToString("yyyy-MM-dd"));
  459. if (System.IO.File.Exists(dev.C_DevQRUrl))
  460. {
  461. // 创建一个画图的对象
  462. IDrawing drawing = sheetDev.CreateDrawingPatriarch();
  463. // 获取要插入图片的单元格位置
  464. NPOI.SS.UserModel.ICell cell = row.CreateCell(5);
  465. // 把图片加入到工作簿中
  466. byte[] imageBytes = null;
  467. using (FileStream fs = new FileStream(dev.C_DevQRUrl, FileMode.Open))
  468. {
  469. imageBytes = new byte[fs.Length];
  470. fs.Read(imageBytes, 0, (int)fs.Length);
  471. }
  472. int pictureIdx = workbook.AddPicture(imageBytes, NPOI.SS.UserModel.PictureType.JPEG);
  473. // 创建图片对象,并设置其属性
  474. XSSFPicture picture = (XSSFPicture)drawing.CreatePicture(new XSSFClientAnchor(0, 0, 1, 1, (short)cell.ColumnIndex, cell.RowIndex, (short)(cell.ColumnIndex + 1), cell.RowIndex + 1), pictureIdx);
  475. }
  476. else
  477. {
  478. row.CreateCell(5).SetCellValue("");
  479. }
  480. row.CreateCell(6).SetCellValue(dev.C_GPS);
  481. if (System.IO.File.Exists(dev.C_Url))
  482. {
  483. // 创建一个画图的对象
  484. IDrawing drawing = sheetDev.CreateDrawingPatriarch();
  485. // 获取要插入图片的单元格位置
  486. NPOI.SS.UserModel.ICell cell = row.CreateCell(7);
  487. // 把图片加入到工作簿中
  488. byte[] imageBytes = null;
  489. using (FileStream fs = new FileStream(dev.C_DevQRUrl, FileMode.Open))
  490. {
  491. imageBytes = new byte[fs.Length];
  492. fs.Read(imageBytes, 0, (int)fs.Length);
  493. }
  494. int pictureIdx = workbook.AddPicture(imageBytes, NPOI.SS.UserModel.PictureType.JPEG);
  495. // 创建图片对象,并设置其属性
  496. XSSFPicture picture = (XSSFPicture)drawing.CreatePicture(new XSSFClientAnchor(0, 0, 1, 1, (short)cell.ColumnIndex, cell.RowIndex, (short)(cell.ColumnIndex + 1), cell.RowIndex + 1), pictureIdx);
  497. }
  498. else
  499. {
  500. row.CreateCell(7).SetCellValue("");
  501. }
  502. if (System.IO.File.Exists(dev.C_StaticUrl))
  503. {
  504. // 创建一个画图的对象
  505. IDrawing drawing = sheetDev.CreateDrawingPatriarch();
  506. // 获取要插入图片的单元格位置
  507. NPOI.SS.UserModel.ICell cell = row.CreateCell(8);
  508. // 把图片加入到工作簿中
  509. byte[] imageBytes = null;
  510. using (FileStream fs = new FileStream(dev.C_DevQRUrl, FileMode.Open))
  511. {
  512. imageBytes = new byte[fs.Length];
  513. fs.Read(imageBytes, 0, (int)fs.Length);
  514. }
  515. int pictureIdx = workbook.AddPicture(imageBytes, NPOI.SS.UserModel.PictureType.JPEG);
  516. // 创建图片对象,并设置其属性
  517. XSSFPicture picture = (XSSFPicture)drawing.CreatePicture(new XSSFClientAnchor(0, 0, 1, 1, (short)cell.ColumnIndex, cell.RowIndex, (short)(cell.ColumnIndex + 1), cell.RowIndex + 1), pictureIdx);
  518. }
  519. else
  520. {
  521. row.CreateCell(8).SetCellValue("");
  522. }
  523. row.CreateCell(9).SetCellValue(dev.D_CreateOn.ToString("yyyy-MM-dd HH:mm:ss"));
  524. string status = "";
  525. switch (dev.C_Status)
  526. {
  527. case "0": status = "禁用";break;
  528. case "1": status = "分配、业主已购买"; break;
  529. case "2": status = "启运"; break;
  530. case "3": status = "停运"; break;
  531. case "4": status = "报警"; break;
  532. case "5": status = "报废"; break;
  533. case "6": status = "预警"; break;
  534. default: status = ""; break;
  535. }
  536. row.CreateCell(10).SetCellValue(status);
  537. row.CreateCell(11).SetCellValue(dev.C_Remark);
  538. startDev++;
  539. foreach (var cell in row.Cells)
  540. {
  541. cell.CellStyle = contentCellStyle;
  542. }
  543. }
  544. }
  545. // 自适应单元格
  546. //for (int i = 0; i < sheetDev.LastRowNum; i++)
  547. //{
  548. // sheetDev.AutoSizeRow(i);
  549. //}
  550. for (int i = 0; i < 12; i++)
  551. {
  552. sheetDev.AutoSizeColumn(i, true);
  553. }
  554. }
  555. }
  556. }
  557. #endregion
  558. using (var stream = new NpoiMemoryStream())
  559. {
  560. workbook.Write(stream);
  561. stream.Seek(0, SeekOrigin.Begin);
  562. //return File(stream, "pplication/vnd.ms-excel", $"{model.OrgName}-设备清单记录报表.xlsx");
  563. EmailHelper.SendEmail(model.Mails, $"{model.OrgName}-设备清单记录报表", "", "报表见附件", $"{model.OrgName}-设备清单记录报表.xlsx", "application/vnd.ms-excel", stream);
  564. }
  565. }
  566. catch (Exception ex)
  567. {
  568. throw;
  569. }
  570. }
  571. }
  572. }