ExportWordController.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Hotline.Application.ExportWord;
  2. using Hotline.Orders;
  3. using Hotline.Share.Dtos.OrderExportWord;
  4. using MapsterMapper;
  5. using Microsoft.AspNetCore.Mvc;
  6. using XF.Domain.Repository;
  7. namespace Hotline.Api.Controllers
  8. {
  9. public class ExportWordController : BaseController
  10. {
  11. private readonly IOrderRepository _orderRepository;
  12. private readonly IWordHelperService _wordHelperService;
  13. private readonly IMapper _mapper;
  14. private readonly IRepository<OrderVisit> _orderVisitRepository;
  15. private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
  16. private readonly ILogger<ExportWordController> _logger;
  17. public ExportWordController(IOrderRepository orderRepository,
  18. IWordHelperService wordHelperService,
  19. IMapper mapper,
  20. IRepository<OrderVisit> orderVisitRepository,
  21. IRepository<OrderVisitDetail> orderVisitedDetailRepository,
  22. ILogger<ExportWordController> logger)
  23. {
  24. _orderRepository = orderRepository;
  25. _wordHelperService = wordHelperService;
  26. _mapper = mapper;
  27. _orderVisitRepository = orderVisitRepository;
  28. _orderVisitedDetailRepository = orderVisitedDetailRepository;
  29. _logger = logger;
  30. }
  31. /// <summary>
  32. /// 工单交办单导出
  33. /// </summary>
  34. /// <returns></returns>
  35. [HttpPost("order_submission_form")]
  36. public async Task<IActionResult> OrderSubmissionForm([FromBody] List<string> Ids)
  37. {
  38. var streams = new Dictionary<string, Stream>();
  39. var path = $"{Directory.GetCurrentDirectory()}/Template/AssignmentForm.doc";
  40. foreach (var item in Ids)
  41. {
  42. var order = await _orderRepository.GetAsync(item, HttpContext.RequestAborted);
  43. if (order == null)
  44. continue;
  45. var exportTest = _mapper.Map<OrderSubmissionForm>(order);
  46. //查询回访信息
  47. var visitData = await _orderVisitRepository.GetAsync(p => p.OrderId == order.Id, HttpContext.RequestAborted);
  48. if (visitData != null)
  49. {
  50. //回访明细
  51. var visitDetail = await _orderVisitedDetailRepository.Queryable().Where(p => p.VisitId == visitData.Id && p.VisitTarget == Share.Enums.Order.EVisitTarget.Org).ToListAsync();
  52. string visit = "";
  53. foreach (var itemVisit in visitDetail)
  54. {
  55. visit += "回访部门:" + itemVisit.VisitOrgName;
  56. visit += " \n办件结果:" + itemVisit.OrgProcessingResults?.Value + " 办事态度:" + itemVisit.OrgHandledAttitude?.Value + "\n";
  57. if (itemVisit.VisitOrgCode == order.ActualHandleOrgCode)
  58. exportTest.VisitContent = "回访内容:" + itemVisit.VisitContent;
  59. }
  60. exportTest.VisitOrg = visit;
  61. }
  62. if (Ids.Count > 1)
  63. streams.Add(order.No + path.Substring(path.LastIndexOf(".")), _wordHelperService.WordStream(path, exportTest));
  64. else
  65. {
  66. var btyes = _wordHelperService.WordByte(path, exportTest);
  67. HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
  68. return File(btyes, "application/vnd.ms-word", order.No + path.Substring(path.LastIndexOf(".")));
  69. }
  70. }
  71. //调用压缩方法 进行压缩 (接收byte[] 数据)
  72. byte[] fileBytes = _wordHelperService.ConvertZipStream(streams);
  73. HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
  74. var name = DateTime.Now.ToString("yyyyMMddHHmmss");
  75. return File(fileBytes, "application/octet-stream", $"{name}.zip");
  76. }
  77. }
  78. }