TsysOrganizeController.cs 29 KB

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