Browse Source

Merge branch 'dev' of http://110.188.24.182:10023/Fengwo/hotline into dev

tangjiang 6 months ago
parent
commit
db98b0d7b4

+ 5 - 5
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -516,7 +516,7 @@ namespace Hotline.Api.Controllers
             }
 
             var info = await _knowledgeRepository.GetAsync(dto.Ids[0]) ?? throw UserFriendlyException.SameMessage("知识不存在");
-            return info.Content.HtmlToStream(dto.FileType).GetWordFile("知识详情");
+            return info.Content.HtmlToStream(dto.FileType).GetFileStreamResult(dto.FileType, "知识详情");
         }
 
         /// <summary>
@@ -580,7 +580,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <returns></returns>
         [HttpGet("knowledge-status-data")]
-        public async Task<object> KnowledgeStatus()
+        public async Task<Dictionary<string, dynamic>> KnowledgeStatus()
         {
             var tabNames = new List<KeyValuePair<int, string>>
             {
@@ -591,7 +591,7 @@ namespace Hotline.Api.Controllers
             };
 
             return _baseDataApplication
-                .FileType(0)
+                .FileType(EFileType.excel | EFileType.pdf)
                 .Add("tabNames", tabNames)
                 .Build();
         }
@@ -1511,7 +1511,7 @@ namespace Hotline.Api.Controllers
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpPut("hotword")]
-        public async Task UpdateKnowledgeHotWordAsync([FromQuery] UpdateKnowledgeHotWordInDto dto)
+        public async Task UpdateKnowledgeHotWordAsync([FromBody] UpdateKnowledgeHotWordInDto dto)
         {
             await _knowApplication.UpdateKnowledgeHotWordAsync(dto, HttpContext.RequestAborted);
         }
@@ -1522,7 +1522,7 @@ namespace Hotline.Api.Controllers
         /// <param name="id"></param>
         /// <returns></returns>
         [HttpDelete("hotword")]
-        public async Task DeleteKnowledgeHotWordAsync([FromBody] string id)
+        public async Task DeleteKnowledgeHotWordAsync([FromQuery] string id)
         {
             await _knowledgeHotWordRepository
                 .RemoveAsync(id);

+ 1 - 0
src/Hotline.Api/Controllers/OrderController.cs

@@ -908,6 +908,7 @@ public class OrderController : BaseController
             .VisitSatisfaction()
             .VisitManner()
             .VisitStateQuery()
+            .SourceChannel()
             .Build();
 
     /// <summary>

+ 8 - 17
src/Hotline.Application/ExportWord/WordHelper.cs

@@ -2,13 +2,7 @@
 using DocumentFormat.OpenXml.Wordprocessing;
 using Hotline.Share.Dtos.ExportWord;
 using HtmlToOpenXml;
-using System.Drawing.Imaging;
-using System.Drawing.Printing;
-using System;
-using DinkToPdf;
-using ColorMode = DinkToPdf.ColorMode;
-using PaperKind = DinkToPdf.PaperKind;
-using DinkToPdf.Contracts;
+using OpenHtmlToPdf;
 
 namespace Hotline.Application.ExportWord
 {
@@ -16,18 +10,15 @@ namespace Hotline.Application.ExportWord
     {
         public static Stream ConvertHtmlToPdf(string htmlContent)
         {
-            var doc = new HtmlToPdfDocument()
+            var pdf = Pdf
+                .From(htmlContent)
+                .WithObjectSetting("web.defaultEncoding", "utf-8")
+                .Content();
+            var stream = new MemoryStream(pdf)
             {
-                GlobalSettings = { ColorMode = ColorMode.Color, Orientation = Orientation.Portrait, PaperSize = PaperKind.A4 },
-                Objects = { new ObjectSettings() { PagesCount = true, HtmlContent = htmlContent } }
+                Position = 0
             };
-
-            IConverter _converter = new SynchronizedConverter(new PdfTools());
-            byte[] pdfBytes = _converter.Convert(doc);
-
-            var memoryStream = new MemoryStream(pdfBytes);
-            memoryStream.Position = 0;
-            return memoryStream;
+            return stream;
         }
 
         public static Stream ConvertHtmlToWord(string htmlContent)

+ 1 - 1
src/Hotline.Application/Hotline.Application.csproj

@@ -7,11 +7,11 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="DinkToPdf" Version="1.0.8" />
     <PackageReference Include="HtmlToOpenXml.dll" Version="3.2.0" />
     <PackageReference Include="JiebaAspNetCore.Segmenter" Version="1.0.1" />
     <PackageReference Include="JV.PanGu.Core" Version="1.0.1" />
     <PackageReference Include="NPOI" Version="2.7.0" />
+    <PackageReference Include="OpenHtmlToPdf" Version="1.12.0" />
     <PackageReference Include="XC.RSAUtil" Version="1.3.6" />
     <PackageReference Include="Quartz.Jobs" Version="3.8.0" />
   </ItemGroup>

+ 1 - 1
src/Hotline.Application/Knowledge/KnowApplication.cs

@@ -212,7 +212,7 @@ namespace Hotline.Application.Knowledge
                 .WhereIF(dto.Title.NotNullOrEmpty(), (p, k, r) => k.Title.Contains(dto.Title))
                 .WhereIF(dto.CreatorName.NotNullOrEmpty(), (p, k, r) => p.CreatorName.Contains(dto.CreatorName))
                 .WhereIF(dto.KnowledgeTypeId.NotNullOrEmpty(), (p, k, r) => r.KnowledgeTypeId == dto.KnowledgeTypeId)
-                .Where(m => m.CreationTime >= dto.StartTime && m.CreationTime <= dto.EndTime)
+                .Where((p, k, r) => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
                 .OrderByDescending((p, k, r) => p.CreationTime);
 
             if (_sessionContext.OrgIsCenter == false)

+ 20 - 3
src/Hotline.Application/Systems/BaseDataApplication.cs

@@ -11,6 +11,7 @@ using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Diagnostics;
+using System.Globalization;
 using System.Linq;
 using System.Reflection;
 using System.Text;
@@ -72,7 +73,12 @@ public class BaseDataApplication : IScopeDependency
 
     public Dictionary<string, dynamic> Build()
     {
-        return new Dictionary<string, dynamic>(_baseData);
+        var newDict = _baseData.ToDictionary(
+            entry => char.ToLower(entry.Key[0], CultureInfo.InvariantCulture) + entry.Key.Substring(1),
+            entry => entry.Value
+        );
+
+        return newDict;
     }
 
     public BaseDataApplication VoiceEvaluate()
@@ -145,10 +151,15 @@ public class BaseDataApplication : IScopeDependency
         return this;
     }
 
-    public BaseDataApplication FileType(int ignoreKey)
+    public BaseDataApplication FileType(EFileType ignoreFileType = EFileType.None)
     {
         var items = EnumExts.GetDescriptions<EFileType>();
-        _baseData.TryAdd("FileType", items.Where(m => m.Key != ignoreKey).ToList());
+        var filteredDictionary = items
+             .Where(kvp => (ignoreFileType & (EFileType)kvp.Key) == 0)
+             .ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
+             .ToList();
+        _baseData.TryAdd("FileType", filteredDictionary);
+
         return this;
     }
 
@@ -157,4 +168,10 @@ public class BaseDataApplication : IScopeDependency
         _baseData.TryAdd(name, items);
         return this;
     }
+
+    public BaseDataApplication SourceChannel()
+    {
+        Add(SysDicTypeConsts.SourceChannel);
+        return this;
+    }
 }

+ 1 - 0
src/Hotline.Share/Dtos/Knowledge/KnowledgeDto.cs

@@ -421,6 +421,7 @@ namespace Hotline.Share.Dtos.Knowledge
         }
         public KnowledgeWordOutDto(string keyId, string tag)
         {
+            Id = keyId;
             Tag = tag;
         }
 

+ 7 - 4
src/Hotline.Share/Enums/Article/EFileType.cs

@@ -2,15 +2,19 @@
 using System.ComponentModel;
 
 namespace Hotline.Share.Enums.Article;
+
+[Flags]
 public enum EFileType
 {
+    None = 0, 
+
     /// <summary>
     /// Excel文件
     /// </summary>
     [Description("导出Excel")]
     [FileExtension(".xlsx")]
     [ContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")]
-    excel,
+    excel = 1,
 
     /// <summary>
     /// Word文件
@@ -18,8 +22,7 @@ public enum EFileType
     [Description("导出Word")]
     [FileExtension(".docx")]
     [ContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document")]
-    word,
-
+    word = 2,
 
     /// <summary>
     /// PDF文件
@@ -27,5 +30,5 @@ public enum EFileType
     [Description("导出PDF")]
     [FileExtension(".pdf")]
     [ContentType("application/pdf")]
-    pdf,
+    pdf = 4,
 }