using Hotline.Application.ExportWord; using Hotline.Orders; using Hotline.Share.Dtos.OrderExportWord; using MapsterMapper; using Microsoft.AspNetCore.Mvc; using XF.Domain.Repository; namespace Hotline.Api.Controllers { public class ExportWordController : BaseController { private readonly IOrderRepository _orderRepository; private readonly IWordHelperService _wordHelperService; private readonly IMapper _mapper; private readonly IRepository _orderVisitRepository; private readonly IRepository _orderVisitedDetailRepository; private readonly ILogger _logger; public ExportWordController(IOrderRepository orderRepository, IWordHelperService wordHelperService, IMapper mapper, IRepository orderVisitRepository, IRepository orderVisitedDetailRepository, ILogger logger) { _orderRepository = orderRepository; _wordHelperService = wordHelperService; _mapper = mapper; _orderVisitRepository = orderVisitRepository; _orderVisitedDetailRepository = orderVisitedDetailRepository; _logger = logger; } /// /// 工单交办单导出 /// /// [HttpPost("order_submission_form")] public async Task OrderSubmissionForm([FromBody] List Ids) { var streams = new Dictionary(); var path = $"{Directory.GetCurrentDirectory()}/Template/AssignmentForm.doc"; foreach (var item in Ids) { var order = await _orderRepository.GetAsync(item, HttpContext.RequestAborted); if (order == null) continue; var exportTest = _mapper.Map(order); //查询回访信息 var visitData = await _orderVisitRepository.GetAsync(p => p.OrderId == order.Id, HttpContext.RequestAborted); if (visitData != null) { //回访明细 var visitDetail = await _orderVisitedDetailRepository.Queryable().Where(p => p.VisitId == visitData.Id && p.VisitTarget == Share.Enums.Order.EVisitTarget.Org).ToListAsync(); string visit = ""; foreach (var itemVisit in visitDetail) { visit += "回访部门:" + itemVisit.VisitOrgName; visit += " \n办件结果:" + itemVisit.OrgProcessingResults?.Value + " 办事态度:" + itemVisit.OrgHandledAttitude?.Value + "\n"; if (itemVisit.VisitOrgCode == order.ActualHandleOrgCode) exportTest.VisitContent = "回访内容:" + itemVisit.VisitContent; } exportTest.VisitOrg = visit; } if (Ids.Count > 1) streams.Add(order.No + path.Substring(path.LastIndexOf(".")), _wordHelperService.WordStream(path, exportTest)); else { var btyes = _wordHelperService.WordByte(path, exportTest); HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition"); return File(btyes, "application/vnd.ms-word", order.No + path.Substring(path.LastIndexOf("."))); } } //调用压缩方法 进行压缩 (接收byte[] 数据) byte[] fileBytes = _wordHelperService.ConvertZipStream(streams); HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition"); var name = DateTime.Now.ToString("yyyyMMddHHmmss"); return File(fileBytes, "application/octet-stream", $"{name}.zip"); } } }