Преглед на файлове

Merge branch 'test' into lib/test

libin преди 3 месеца
родител
ревизия
b651040fe6

+ 1 - 1
src/Hotline.Api/Controllers/ExportData/ExportDataController.cs

@@ -40,7 +40,7 @@ public class ExportDataController : BaseController
     /// 动态导出数据
     /// </summary>
     /// <returns></returns>
-    [HttpPost]
+    [HttpPost, HttpGet]
     public async Task<FileStreamResult> HandleExportPost()
     {
         var fullPath = HttpContext.Request.Path.Value;

+ 15 - 9
src/Hotline.Api/Controllers/KnowledgeCommonController.cs

@@ -3,6 +3,7 @@ using Hotline.Permissions;
 using Hotline.Settings;
 using Hotline.Settings.Hotspots;
 using Hotline.Share.Dtos.Knowledge;
+using Hotline.Share.Enums.KnowledgeBase;
 using MapsterMapper;
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
@@ -137,25 +138,30 @@ namespace Hotline.Api.Controllers
         /// <summary>
         /// 知识分类- 获取层级分类
         /// </summary>
-        /// <param name="IsEnable">不传查询所有</param>
-        /// <returns></returns>
         [HttpGet("treelist")]
-        public async Task<List<KnowledgeTypeDto>> GetTreeList(bool? IsEnable, string? Attribution)
+        public async Task<List<KnowledgeTypeDto>> GetTreeList(bool? isEnable, string? attribution, EKnowledgeStatus? status)
         {
             var isCenter = _sessionContext.OrgIsCenter;
             var query = _knowledgeTypeRepository.Queryable()
-                .WhereIF(IsEnable.HasValue, x => x.IsEnable == IsEnable);
+                .WhereIF(isEnable.HasValue, x => x.IsEnable == isEnable);
             if (!isCenter)
                 query.Where(x => x.Orgs.Any(s => s.Id == _sessionContext.RequiredOrgId));
             return await query
                  .Select(x => new KnowledgeTypeDto()
                  {
                      Id = x.Id.SelectAll(),
-                     KnowledgeNum = SqlFunc.Subqueryable<KnowledgeRelationType>()
-                         .LeftJoin<Knowledge>((kr, k) => kr.KnowledgeId == k.Id)
-                         .Where((kr, k) => kr.KnowledgeTypeSpliceName.StartsWith(x.SpliceName))
-                         .WhereIF(!string.IsNullOrEmpty(Attribution) && !isCenter, (kr, k) => k.Attribution == Attribution)
-                         .DistinctCount(kr => kr.KnowledgeId),
+                     //KnowledgeNum = SqlFunc.Subqueryable<KnowledgeRelationType>()
+                     //    .LeftJoin<Knowledge>((kr, k) => kr.KnowledgeId == k.Id)
+                     //    .Where((kr, k) => kr.KnowledgeTypeSpliceName.StartsWith(x.SpliceName))
+                     //    .WhereIF(!string.IsNullOrEmpty(attribution) && !isCenter, (kr, k) => k.Attribution == attribution)
+                     //    .DistinctCount(kr => kr.KnowledgeId),
+                     KnowledgeNum = SqlFunc.Subqueryable<Knowledge>()
+                         .InnerJoin<KnowledgeRelationType>((k, krt) => k.Id == krt.KnowledgeId)
+                         .InnerJoin<KnowledgeType>((k, krt, t) => krt.KnowledgeTypeId == t.Id)
+                         .Where((k, krt, t) => t.SpliceName.StartsWith(x.SpliceName))
+                         .WhereIF(!string.IsNullOrEmpty(attribution) && !isCenter, (k, krt, t) => k.Attribution == attribution)
+                         .WhereIF(status != null, k => k.Status == status)
+                         .DistinctCount(k => k.Id)
                  })
                  .OrderBy(x => x.Sort)
                  .ToTreeAsync(it => it.children, it => it.ParentId, null, it => it.Id);

+ 113 - 111
src/Hotline.Api/Controllers/OrderController.cs

@@ -6,6 +6,7 @@ using Hotline.Application.ExportExcel;
 using Hotline.Application.FlowEngine;
 using Hotline.Application.Orders;
 using Hotline.Application.Quality;
+using Hotline.Application.Snapshot;
 using Hotline.Application.Systems;
 using Hotline.Authentications;
 using Hotline.Caching.Interfaces;
@@ -40,7 +41,9 @@ using Hotline.Share.Dtos.Order.Detail;
 using Hotline.Share.Dtos.Order.Handle;
 using Hotline.Share.Dtos.Order.Migration;
 using Hotline.Share.Dtos.Order.Publish;
+using Hotline.Share.Dtos.Org;
 using Hotline.Share.Dtos.Settings;
+using Hotline.Share.Dtos.Snapshot;
 using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
@@ -49,6 +52,8 @@ using Hotline.Share.Enums.Settings;
 using Hotline.Share.Mq;
 using Hotline.Share.Requests;
 using Hotline.Share.Tools;
+using Hotline.Snapshot;
+using Hotline.Snapshot.Interfaces;
 using Hotline.Tools;
 using Hotline.Users;
 using Hotline.YbEnterprise.Sdk;
@@ -68,20 +73,6 @@ using XF.Domain.Entities;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
-using Hotline.Application.Contracts.Validators.FlowEngine;
-using Hotline.Authentications;
-using Hotline.Share.Dtos.CallCenter;
-using Hotline.Share.Mq;
-using Hotline.CallCenter.Calls;
-using Hotline.FlowEngine.Notifications;
-using Hotline.Share.Dtos.Order.Detail;
-using Hotline.Share.Dtos.File;
-using Hotline.Share.Dtos.Org;
-using Hotline.Snapshot.Interfaces;
-using Hotline.Snapshot.Notifications;
-using Hotline.Snapshot;
-using Hotline.Application.Snapshot;
-using Hotline.Share.Dtos.Snapshot;
 using OrderDto = Hotline.Share.Dtos.Order.OrderDto;
 
 namespace Hotline.Api.Controllers;
@@ -380,7 +371,7 @@ public class OrderController : BaseController
     public async Task<PagedDto<PublishDto>> PublishOrderList([FromQuery] QueryOrderPublishDto dto)
     {
         var (total, items) = await _orderRepository.Queryable()
-            .Includes(d=>d.OrderTags)
+            .Includes(d => d.OrderTags)
             //.Includes(d => d.OrderPublish)
             .Where(x => x.Status == EOrderStatus.Filed)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword!))
@@ -389,9 +380,9 @@ public class OrderController : BaseController
             //.WhereIF(dto.PubState == EPubState.Pub, d => d.Status >= EOrderStatus.Published)
             //.WhereIF(dto.PubState == EPubState.NoPub, d => d.Status == EOrderStatus.Filed)
             .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
-			//.WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTagCode == dto.OrderTag!) //工单标签
-			.WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTags.Any(ot=>ot.DicDataValue == dto.OrderTag)) //工单标签
-			.WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName == dto.CenterToOrgHandlerName!) //派单人
+            //.WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTagCode == dto.OrderTag!) //工单标签
+            .WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTag)) //工单标签
+            .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName == dto.CenterToOrgHandlerName!) //派单人
             .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
@@ -1174,10 +1165,10 @@ public class OrderController : BaseController
         //    x => x.OrderId == orderVisit.OrderId && x.AgainState == EAgainState.DoAgain, HttpContext.RequestAborted);
         var voiceEvaluate = EnumExts.GetDescriptions<EVoiceEvaluate>();
         var seatEvaluate = EnumExts.GetDescriptions<ESeatEvaluate>();
-        if (_appOptions.Value.IsZiGong==true)
+        if (_appOptions.Value.IsZiGong == true)
         {
             voiceEvaluate = EnumExtensions.GetEnumKeyValueList<EVoiceEvaluate>();
-            seatEvaluate=EnumExtensions.GetEnumKeyValueList<ESeatEvaluate>();
+            seatEvaluate = EnumExtensions.GetEnumKeyValueList<ESeatEvaluate>();
         }
         var visitSatisfaction = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitSatisfaction);
         var visitManner = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitManner);
@@ -1991,7 +1982,7 @@ public class OrderController : BaseController
             if (_appOptions.Value.IsZiGong)
             {
                 count = await _orderDelayRepository.CountAsync(x =>
-                    x.OrderId == delaydto.OrderId &&  x.ApplyOrgCode == _sessionContext.RequiredOrgId &&
+                    x.OrderId == delaydto.OrderId && x.ApplyOrgCode == _sessionContext.RequiredOrgId &&
                     (x.DelayState == EDelayState.Pass || x.DelayState == EDelayState.NoPass));
             }
 
@@ -2071,97 +2062,108 @@ public class OrderController : BaseController
         }
     }
 
-	/// <summary>
-	/// 批量审批延期
-	/// </summary>
-	[HttpPost("delay/batch_audit")]
-	[LogFilter("批量审批延期")]
-	public async Task<string> BatchAuditDelay([FromBody] BatchDelayNextFlowDto dto) {
-		var result = new StringBuilder();
-		var fail = 0;
-		var success = 0;
-		foreach (var item in dto.DelayId)
-		{
-			try
-			{
+    /// <summary>
+    /// 批量审批延期
+    /// </summary>
+    [HttpPost("delay/batch_audit")]
+    [LogFilter("批量审批延期")]
+    public async Task<string> BatchAuditDelay([FromBody] BatchDelayNextFlowDto dto)
+    {
+        var result = new StringBuilder();
+        var fail = 0;
+        var success = 0;
+        foreach (var item in dto.DelayId)
+        {
+            try
+            {
                 var workflow = dto.NextWorkflow;
+				if (workflow.NextHandlers.Any() && workflow.NextHandlers.Count() == 1)
+				{
+					var handler = workflow.NextHandlers.FirstOrDefault();
+					if (string.IsNullOrEmpty(handler.UserId))
+					{
+						workflow.NextHandlers = new List<FlowStepHandler>();
+					}
+				}
 				var delay = await _orderDelayRepository.Queryable().Includes(x=>x.Order).Where(x=>x.Id == item).FirstAsync(HttpContext.RequestAborted);
 				workflow.WorkflowId = delay.WorkflowId;
 				var workflowEntuty = await _workflowDomainService.GetWorkflowAsync(workflow.WorkflowId, withDefine: true, withSteps: true,cancellationToken: HttpContext.RequestAborted);
 				var currentStep =
 					workflowEntuty.Steps.FirstOrDefault(d => d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
 
-				NextStepsWithOpinionDto<NextStepOption> next = null;
+                NextStepsWithOpinionDto<NextStepOption> next = null;
 
-				try
-				{
-					next = await _workflowApplication.GetNextStepsAsync(delay.WorkflowId, HttpContext.RequestAborted);
-				}
-				catch (UserFriendlyException e)
-				{
-					if (e.Message.Contains("未找到对应节点"))
-					{
-						result.Append("无权审核:" + delay.No);
-						fail++;
-					}
-					else
-					{
-						throw;
-					}
-				}
-				if (next == null) continue;
+                try
+                {
+                    next = await _workflowApplication.GetNextStepsAsync(delay.WorkflowId, HttpContext.RequestAborted);
+                }
+                catch (UserFriendlyException e)
+                {
+                    if (e.Message.Contains("未找到对应节点"))
+                    {
+                        result.Append("无权审核:" + delay.No);
+                        fail++;
+                    }
+                    else
+                    {
+                        throw;
+                    }
+                }
+                if (next == null) continue;
 
-				if (!delay.Order.IsProvince)
-				{
-					if (next.Steps.Any(x => x.Value == "省审批"))
-					{
-						next.Steps.Remove(next.Steps.First(x => x.Value == "省审批"));
-					}
-				}
+                if (!delay.Order.IsProvince)
+                {
+                    if (next.Steps.Any(x => x.Value == "省审批"))
+                    {
+                        next.Steps.Remove(next.Steps.First(x => x.Value == "省审批"));
+                    }
+                }
 
-				if (!_sessionContext.OrgIsCenter && currentStep.Name != "中心初审")
-				{
-					if (next.Steps.Any(x => x.Value == "中心终审"))
-					{
-						next.Steps.Remove(next.Steps.First(x => x.Value == "中心终审"));
-					}
-				}
+                if (!_sessionContext.OrgIsCenter && currentStep.Name != "中心初审")
+                {
+                    if (next.Steps.Any(x => x.Value == "中心终审"))
+                    {
+                        next.Steps.Remove(next.Steps.First(x => x.Value == "中心终审"));
+                    }
+                }
 
-				var isBatch = next.Steps.Where(x => x.Value == workflow.NextStepName).Any();
+                var isBatch = next.Steps.Where(x => x.Value == workflow.NextStepName).Any();
                 if (isBatch)
                 {
-					var step = next.Steps.Where(x => x.Value == workflow.NextStepName).FirstOrDefault();
-					workflow.NextStepCode = step.Key;
-					workflow.NextStepName = step.Value;
-				}
-                else {
-					result.Append("无权审核:" + delay.No);
-					fail++;
+                    var step = next.Steps.Where(x => x.Value == workflow.NextStepName).FirstOrDefault();
+                    workflow.NextStepCode = step.Key;
+                    workflow.NextStepName = step.Value;
+                }
+                else
+                {
+                    result.Append("无权审核:" + delay.No);
+                    fail++;
                     continue;
-				}
+                }
 
-				workflow.StepId = next.StepId;
+                workflow.StepId = next.StepId;
                 workflow.ReviewResult = dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed;
 
-				if (workflow.ReviewResult == EReviewResult.Approval) {
-					await _workflowDomainService.NextAsync(_sessionContext, workflow,cancellationToken: HttpContext.RequestAborted);
-				}
-				else
-				{
-					var reject = workflow.Adapt<RejectDto>();
-					await _workflowApplication.RejectAsync(reject, HttpContext.RequestAborted);
-				}
-				success++;
-			}
-			catch (UserFriendlyException e)
-			{
-				result.Append(e.Message);
-				fail++;
-			}
-		}
-		return $"总共: {dto.DelayId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result.ToString()}";
+                if (workflow.ReviewResult == EReviewResult.Approval)
+                {
+                    await _workflowDomainService.NextAsync(_sessionContext, workflow, cancellationToken: HttpContext.RequestAborted);
+                }
+                else
+                {
+                    var reject = workflow.Adapt<RejectDto>();
+                    await _workflowApplication.RejectAsync(reject, HttpContext.RequestAborted);
+                }
+                success++;
+            }
+            catch (UserFriendlyException e)
+            {
+                result.Append(e.Message);
+                fail++;
+            }
+        }
+        return $"总共: {dto.DelayId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result.ToString()}";
 
-	}
+    }
 
     /// <summary>
     ///  延期查询流程办理下一步可选节点
@@ -3404,7 +3406,7 @@ public class OrderController : BaseController
             .Includes(d => d.OrderPublish)
             .Includes(d => d.OrderPushTypes)
             .Includes(d => d.OrderComplements)
-            .Includes(d=>d.OrderTags)
+            .Includes(d => d.OrderTags)
             //.Includes(d => d.OrderScreens)
             .Includes(d => d.OrderVisits.Where(x => x.VisitState == EVisitState.Visited).ToList(), x => x.OrderVisitDetails)
             .Includes(d => d.OrderVisits.Where(x => x.VisitState == EVisitState.Visited).ToList(), x => x.Employee)
@@ -3743,7 +3745,7 @@ public class OrderController : BaseController
             foreach (var item in dto.Tags)
             {
                 orderTags.Add(new SystemDicData() { Id = item });
-			}
+            }
             order.OrderTags = orderTags;
         }
 
@@ -3983,19 +3985,19 @@ public class OrderController : BaseController
             var pushTypes = dto.OrderPushTypes.Select(x => x.PushType);
             order.PushType = string.Join(",", pushTypes);
         }
-		if (dto.Tags != null && dto.Tags.Any())
-		{
-			var orderTags = new List<SystemDicData>();
-			foreach (var item in dto.Tags)
-			{
-				orderTags.Add(new SystemDicData() { Id = item });
-			}
-			order.OrderTags = orderTags;
-		}
+        if (dto.Tags != null && dto.Tags.Any())
+        {
+            var orderTags = new List<SystemDicData>();
+            foreach (var item in dto.Tags)
+            {
+                orderTags.Add(new SystemDicData() { Id = item });
+            }
+            order.OrderTags = orderTags;
+        }
 
-		//处理工单的期满时间
-		//首先是工单编辑页面提交的、流程已经开启、工单未归档的工单才能修改期满时间
-		if (dto.IsEdit && !string.IsNullOrEmpty(order.WorkflowId) && order.Status < EOrderStatus.Filed && dto.AcceptTypeCode != acceptTypeCode)
+        //处理工单的期满时间
+        //首先是工单编辑页面提交的、流程已经开启、工单未归档的工单才能修改期满时间
+        if (dto.IsEdit && !string.IsNullOrEmpty(order.WorkflowId) && order.Status < EOrderStatus.Filed && dto.AcceptTypeCode != acceptTypeCode)
         {
             //查询当前工单的实际办理节点,如果在热线中心不处理,如果在部门需要更新期满时间
             var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true, withTraces: true,
@@ -4023,7 +4025,7 @@ public class OrderController : BaseController
             }
         }
 
-        await _orderRepository.UpdateNav(order, new UpdateNavRootOptions { IgnoreColumns = ["CallId"] }).Include(d => d.OrderExtension).Include(d=>d.OrderTags).ExecuteCommandAsync();
+        await _orderRepository.UpdateNav(order, new UpdateNavRootOptions { IgnoreColumns = ["CallId"] }).Include(d => d.OrderExtension).Include(d => d.OrderTags).ExecuteCommandAsync();
 
         //订阅此事件的内部处理工单数据只能更新各自业务的字段,不能全部更新
         //修改工单其他处理事件  (受理短信)
@@ -4242,7 +4244,7 @@ public class OrderController : BaseController
                     continue;
                 }
                 throw;
-            }            
+            }
             var stepInfo = nextSteps.Steps.FirstOrDefault(m => m.BusinessType == EBusinessType.Send);
             if (stepInfo == null)
             {
@@ -4334,7 +4336,7 @@ public class OrderController : BaseController
                 orderHandleFlowDto.CrossSteps = orderHandleFlowDto.CrossSteps.OrderBy(d => d.Sort).ToList();
                 var stepCount = orderHandleFlowDto.CrossSteps.Count;
                 var unhandleSteps = new List<WorkflowStep> { startStep };
-                for (int i = 0;i < stepCount;i++)
+                for (int i = 0; i < stepCount; i++)
                 {
                     var crossStep = orderHandleFlowDto.CrossSteps[i];
                     var tempSteps = new List<WorkflowStep>();

+ 1 - 1
src/Hotline.Api/Controllers/QualityController.cs

@@ -680,7 +680,7 @@ namespace Hotline.Api.Controllers
             else {
 				var notStarted = await _qualityTransferRecordsRepository.Queryable().Where(x => x.IsFinished == false && x.TransferState == EQualityTransferState.NotStarted).OrderBy(x => x.TransferTime).FirstAsync();
 				await _qualityTransferRecordsRepository.Updateable().SetColumns(x => new QualityTransferRecords { TransferState = EQualityTransferState.Translating , TransferTime = DateTime.Now }).Where(x => x.Id == notStarted.Id).ExecuteCommandAsync();
-				await _qualityApplication.Transfer_XT(notStarted.QualityId, HttpContext.RequestAborted);
+				Task.Run(async () => await _qualityApplication.Transfer_XT(notStarted.QualityId, HttpContext.RequestAborted));
 			}
 		}
 

+ 6 - 6
src/Hotline.Api/Controllers/SysController.cs

@@ -587,12 +587,12 @@ namespace Hotline.Api.Controllers
 
         }
 
-        /// <summary>
-        /// 获取日志实体
-        /// </summary>
-        /// <param name="id"></param>
-        /// <returns></returns>
-        [HttpGet("log/{id}")]
+		/// <summary>
+		/// 获取日志实体
+		/// </summary>
+		/// <param name="id"></param>
+		/// <returns></returns>
+		[HttpGet("log/{id}")]
         public async Task<SystemLogDto> ItemEntity(string id)
         {
             var log = await _systemLogRepository.Queryable()

+ 4 - 0
src/Hotline.Api/Controllers/TestController.cs

@@ -79,6 +79,10 @@ using Microsoft.AspNetCore.DataProtection;
 using Hotline.Share.Tools;
 using NETCore.Encrypt;
 using Hotline.Ai.Quality;
+using Hotline.EventBus;
+using Hotline.JudicialManagement.Notifies;
+using Hotline.Snapshot.Notifications;
+using XF.Domain.Entities;
 
 namespace Hotline.Api.Controllers;
 

+ 2 - 2
src/Hotline.Api/Controllers/WebPortalController.cs

@@ -1055,8 +1055,8 @@ namespace Hotline.Api.Controllers
                     data.Source = ESource.APP;
                     break;
                 case "3":
-                    data.SourceChannel = "微信";
-                    data.SourceChannelCode = "WX";
+                    data.SourceChannel = "微信小程序";
+                    data.SourceChannelCode = "XCX";
                     data.Source = ESource.WeChat;
                     break;
                 case "9"://宜宾人社专用

+ 27 - 27
src/Hotline.Api/Middleware/HeaderMiddleware.cs

@@ -1,34 +1,34 @@
-using Microsoft.AspNetCore.Mvc;
+//using Microsoft.AspNetCore.Mvc;
 
-namespace Hotline.Api.Middleware;
+//namespace Hotline.Api.Middleware;
 
-/// <summary>
-/// 为特定的返回结果添加 头部信息 的中间件
-/// </summary>
-public class HeaderMiddleware
-{
-    private readonly RequestDelegate _next;
+///// <summary>
+///// 为特定的返回结果添加 头部信息 的中间件
+///// </summary>
+//public class HeaderMiddleware
+//{
+//    private readonly RequestDelegate _next;
 
-    public HeaderMiddleware(RequestDelegate next)
-    {
-        _next = next;
-    }
+//    public HeaderMiddleware(RequestDelegate next)
+//    {
+//        _next = next;
+//    }
 
-    public async Task InvokeAsync(HttpContext context)
-    {
-        var originalBodyStream = context.Response.Body;
-        using var responseBody = new MemoryStream();
-        context.Response.Body = responseBody;
+//    public async Task InvokeAsync(HttpContext context)
+//    {
+//        var originalBodyStream = context.Response.Body;
+//        using var responseBody = new MemoryStream();
+//        context.Response.Body = responseBody;
 
-        await _next(context);
+//        await _next(context);
 
-        // 为返回类型是 FileStreamResult 的请求添加 头部信息
-        if (context.Response.StatusCode == 200 && context.Response is FileStreamResult)
-        {
-            context.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
-        }
+//        // 为返回类型是 FileStreamResult 的请求添加 头部信息
+//        if (context.Response.StatusCode == 200 && context.Response is FileStreamResult)
+//        {
+//            context.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
+//        }
 
-        context.Response.Body.Seek(0, SeekOrigin.Begin);
-        await responseBody.CopyToAsync(originalBodyStream);
-    }
-}
+//        context.Response.Body.Seek(0, SeekOrigin.Begin);
+//        await responseBody.CopyToAsync(originalBodyStream);
+//    }
+//}

+ 1 - 10
src/Hotline.Api/StartupExtensions.cs

@@ -1,5 +1,4 @@
-using System.IO.Compression;
-using System.Reflection;
+using System.Reflection;
 using FluentValidation;
 using FluentValidation.AspNetCore;
 using Hotline.Api.Realtimes;
@@ -26,26 +25,18 @@ using Hotline.Application.CallCenter.Calls;
 using Hotline.Application.CallCenter;
 using Hotline.Authentications;
 using Hotline.CallCenter.Calls;
-using Swashbuckle.AspNetCore.SwaggerUI;
 using Hotline.Configurations;
 using Hotline.DI;
-using Hotline.Share.Tools;
 using Hotline.Settings.TimeLimitDomain.ExpireTimeSupplier;
-using Hotline.Api.Middleware;
 using XF.Domain.Authentications;
 using Hotline.XingTang;
-using Hotline.Logger;
 using HotPot.Mvc.Filters;
-using Microsoft.AspNetCore.ResponseCompression;
 using Hotline.WeChat;
 using Hotline.Snapshot.Interfaces;
 using TianQue.Sdk;
-using Hotline.Application.Snapshot;
 using Hotline.Orders;
 using XF.Domain.Repository.Events;
 using Hotline.Orders.DatabaseEventHandler;
-using Hotline.Snapshot;
-using Hotline.WeChat;
 using Hotline.Ai.XingTang;
 using Hotline.Pdf;
 

+ 4 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -241,7 +241,10 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                     }
 
                     await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: cancellationToken);
-                    await _publisher.PublishAsync(new SnapshotOrderFiledNotification(order.Id), PublishStrategy.ParallelWhenAll, cancellationToken);
+                    if (_systemSettingCacheManager.Snapshot)
+                    {
+                        await _publisher.PublishAsync(new SnapshotOrderFiledNotification(order.Id), PublishStrategy.ParallelWhenAll, cancellationToken);
+                    }
                     await _orderDomainService.OrderAutomaticPublishAsync(order, cancellationToken);
                     //try
                     //{

+ 2 - 2
src/Hotline.Application/Jobs/XingTangTelOperationSyncJob.cs

@@ -90,7 +90,7 @@ namespace Hotline.Application.Jobs
 
                     }
                     await _telOperationRepository.AddRangeAsync(operations, context.CancellationToken);
-                    _logger.LogInformation($"旧方法同步分机操作记录成功,数量:{operations.Count}");
+                    //_logger.LogInformation($"旧方法同步分机操作记录成功,数量:{operations.Count}");
                 }
                 else
                 {
@@ -108,7 +108,7 @@ namespace Hotline.Application.Jobs
                         operations.Add(operation);
                     }
                     await _telOperationRepository.AddRangeAsync(operations, context.CancellationToken);
-                    _logger.LogInformation($"新方法同步分机操作记录成功,数量:{operations.Count}");
+                    //_logger.LogInformation($"新方法同步分机操作记录成功,数量:{operations.Count}");
                 }
             }
             catch (Exception e)

+ 10 - 4
src/Hotline.Application/Knowledge/KnowApplication.cs

@@ -427,16 +427,22 @@ namespace Hotline.Application.Knowledge
                 dto.Attribution = "部门知识库";
             }
 
-            var sugar = _knowledgeRepository
-                .Queryable(false, false, false)
+            var query = _knowledgeRepository.Queryable(false, false, false);
+
+            if (!_sessionContext.OrgIsCenter)
+                query.Where(x => x.KnowledgeTypes.Any(t => t.Orgs.Any(to => to.Id == _sessionContext.RequiredOrgId)));
+
+            var sugar = query
                 .Includes(x => x.User)
                 .Includes(x => x.SystemOrganize)
                 .Includes(x => x.HotspotType)
                 .Includes(x => x.KnowledgeType)
                 .Where(x => x.IsDeleted == false)
                 .Where(x => x.Status == EKnowledgeStatus.OnShelf)
-                .Where(x => x.KnowledgeType.Any(t => t.KnowledgeType.KnowledgeTypeOrgs.Any(to => to.OrgId == _sessionContext.RequiredOrgId) || t.KnowledgeType.KnowledgeTypeOrgs.Any() == false))
-                .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeType.Any(t => t.KnowledgeTypeSpliceName.StartsWith(typeSpliceName)))
+                //.Where(x => x.KnowledgeType.Any(t => t.KnowledgeType.KnowledgeTypeOrgs.Any(to => to.OrgId == _sessionContext.RequiredOrgId)
+                //                                     || t.KnowledgeType.KnowledgeTypeOrgs.Any() == false))
+                //.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeType.Any(t => t.KnowledgeTypeSpliceName.StartsWith(typeSpliceName)))
+                .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeTypes.Any(t => t.SpliceName.StartsWith(typeSpliceName)))
                 .WhereIF(!string.IsNullOrEmpty(hotspotHotSpotFullName), x => x.HotspotType.HotSpotFullName.EndsWith(hotspotHotSpotFullName!))
                 .WhereIF(!string.IsNullOrEmpty(dto.HotspotName), x => x.HotspotType.HotSpotFullName.EndsWith(dto.HotspotName!))
                 .WhereIF(!string.IsNullOrEmpty(dto.CreateOrgId), x => x.CreatorOrgId != null && x.CreatorOrgId.EndsWith(dto.CreateOrgId!))

+ 75 - 75
src/Hotline.Application/Orders/OrderApplication.cs

@@ -327,73 +327,73 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public ISugarQueryable<Order> GetAboutToExpireAsync(AboutToExpireListDto dto)
     {
-        DateTime? dateTime = DateTime.Now;
-        var IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
-        int orgLevel = _sessionContextProvider.SessionContext.OrgLevel;
-        var orgCode = _sessionContextProvider.SessionContext.OrgId;
-        var query = _orderRepository.Queryable();
-        if (IsCenter == true)
-            query = _orderRepository.Queryable(canView: !IsCenter);
-        return query
-            .Includes(d => d.OrderDelays)
-            .WhereIF(orgLevel == 3, d => SqlFunc.Subqueryable<WorkflowStep>()
-                .Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
-                               ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
-                                 step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
-                                (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
-                                 step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
-                                (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
-                                 _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId))))
-                .Any())
-             .WhereIF(orgLevel == 2 || orgLevel == 1, d => SqlFunc.Subqueryable<WorkflowStep>()
-                .Where(step => step.ExternalId == d.Id &&
-                               step.Status != EWorkflowStepStatus.Handled &&
-                               (!string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId.StartsWith(orgCode)))
-                .Any())
-            .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
-            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No!))
-            .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title.Contains(dto.Title!))
-            .WhereIF(dto.Delay.HasValue && dto.Delay == 1, d => d.OrderDelays.Any() == true)
-            .WhereIF(dto.Delay.HasValue && dto.Delay == 2, d => d.OrderDelays.Any() == false)
-            .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
-            .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
-            .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
-            .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone.Contains(dto.FromPhone)) //来电号码
-            .WhereIF(!string.IsNullOrEmpty(dto.HotspotName), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.HotspotName))
-            .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
-            .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门
-                                                                                                                                   //&& stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value
-                                                                                                                                   //.Where(d => d.ExpiredTime != null &&
-                                                                                                                                   //         d.Status != EOrderStatus.Filed && d.Status != EOrderStatus.Published && d.Status != EOrderStatus.Visited && stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value)
-            .Where(d => d.Status < EOrderStatus.Filed && dateTime > d.NearlyExpiredTime && dateTime < d.ExpiredTime)
-            .OrderByIF(dto is { SortField: "no", SortRule: 0 }, x => x.No, OrderByType.Asc) //工单编号升序
-            .OrderByIF(dto is { SortField: "no", SortRule: 1 }, x => x.No, OrderByType.Desc) //工单编号降序
-            .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 0 }, x => x.IsProvince, OrderByType.Asc)//是否省工单升序
-            .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 1 }, x => x.IsProvince, OrderByType.Desc)//是否省工单降序
-            .OrderByIF(dto is { SortField: "currentStepName", SortRule: 0 }, x => x.CurrentStepName, OrderByType.Asc)//当前节点升序
-            .OrderByIF(dto is { SortField: "currentStepName", SortRule: 1 }, x => x.CurrentStepName, OrderByType.Desc)//当前节点降序
-            .OrderByIF(dto is { SortField: "delayText", SortRule: 0 }, x => x.OrderDelays.Count, OrderByType.Asc) //是否延期升序
-            .OrderByIF(dto is { SortField: "delayText", SortRule: 1 }, x => x.OrderDelays.Count, OrderByType.Desc) //是否延期升序
-            .OrderByIF(dto is { SortField: "statusText", SortRule: 0 }, x => x.Status, OrderByType.Asc) //工单状态升序
-            .OrderByIF(dto is { SortField: "statusText", SortRule: 1 }, x => x.Status, OrderByType.Desc) //工单状态升序
-            .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc) //受理时间升序
-            .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc) //受理时间降序
-            .OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, x => x.ExpiredTime, OrderByType.Asc) //期满时间升序
-            .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc) //期满时间降序
-            .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 0 }, x => x.ActualHandleOrgName, OrderByType.Asc)// 接办部门升序
-            .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 1 }, x => x.ActualHandleOrgName, OrderByType.Desc)// 接办部门降序
-            .OrderByIF(dto is { SortField: "acceptType", SortRule: 0 }, x => x.AcceptTypeCode, OrderByType.Asc) //受理类型升序
-            .OrderByIF(dto is { SortField: "acceptType", SortRule: 1 }, x => x.AcceptTypeCode, OrderByType.Desc) //受理类型降序
-            .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 0 }, x => x.CounterSignType, OrderByType.Asc) //是否会签升序
-            .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 1 }, x => x.CounterSignType, OrderByType.Desc) //是否会签降序
-            .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 0 }, x => x.OrgLevelOneName, OrderByType.Asc) //一级部门升序
-            .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 1 }, x => x.OrgLevelOneName, OrderByType.Desc)//一级部门降序
-            .OrderByIF(dto is { SortField: "hotspotName", SortRule: 0 }, x => x.HotspotId, OrderByType.Asc) //热点升序
-            .OrderByIF(dto is { SortField: "hotspotName", SortRule: 1 }, x => x.HotspotId, OrderByType.Desc) //热点降序
-            .OrderByIF(dto is { SortField: "acceptorName", SortRule: 0 }, x => x.AcceptorName, OrderByType.Asc)// 受理人升序
-            .OrderByIF(dto is { SortField: "acceptorName", SortRule: 1 }, x => x.AcceptorName, OrderByType.Desc);// 受理人升序
-    }
+		DateTime? dateTime = DateTime.Now;
+		var IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+		int orgLevel = _sessionContextProvider.SessionContext.OrgLevel;
+		var orgCode = _sessionContextProvider.SessionContext.OrgId;
+		var query = _orderRepository.Queryable();
+		if (IsCenter == true)
+			query = _orderRepository.Queryable(canView: !IsCenter);
+		return query
+			.Includes(d => d.OrderDelays)
+			.WhereIF(orgLevel == 3, d => SqlFunc.Subqueryable<WorkflowStep>()
+				.Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
+							   ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
+								 step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
+								(step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
+								 step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
+								(step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
+								 _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId))))
+				.Any())
+			 .WhereIF(orgLevel == 2 || orgLevel == 1, d => SqlFunc.Subqueryable<WorkflowStep>()
+				.Where(step => step.ExternalId == d.Id &&
+							   step.Status != EWorkflowStepStatus.Handled &&
+							   (!string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId.StartsWith(orgCode)))
+				.Any())
+			.WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
+			.WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No!))
+			.WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title.Contains(dto.Title!))
+			.WhereIF(dto.Delay.HasValue && dto.Delay == 1, d => d.OrderDelays.Any() == true)
+			.WhereIF(dto.Delay.HasValue && dto.Delay == 2, d => d.OrderDelays.Any() == false)
+			.WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
+			.WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
+			.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
+			.WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone.Contains(dto.FromPhone)) //来电号码
+			.WhereIF(!string.IsNullOrEmpty(dto.HotspotName), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.HotspotName))
+			.WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
+			.WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
+			.WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门
+																																   //&& stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value
+																																   //.Where(d => d.ExpiredTime != null &&
+																																   //         d.Status != EOrderStatus.Filed && d.Status != EOrderStatus.Published && d.Status != EOrderStatus.Visited && stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value)
+			.Where(d => d.Status < EOrderStatus.Filed && dateTime > d.NearlyExpiredTime && dateTime < d.ExpiredTime)
+			.OrderByIF(dto is { SortField: "no", SortRule: 0 }, x => x.No, OrderByType.Asc) //工单编号升序
+			.OrderByIF(dto is { SortField: "no", SortRule: 1 }, x => x.No, OrderByType.Desc) //工单编号降序
+			.OrderByIF(dto is { SortField: "isProvinceText", SortRule: 0 }, x => x.IsProvince, OrderByType.Asc)//是否省工单升序
+			.OrderByIF(dto is { SortField: "isProvinceText", SortRule: 1 }, x => x.IsProvince, OrderByType.Desc)//是否省工单降序
+			.OrderByIF(dto is { SortField: "currentStepName", SortRule: 0 }, x => x.CurrentStepName, OrderByType.Asc)//当前节点升序
+			.OrderByIF(dto is { SortField: "currentStepName", SortRule: 1 }, x => x.CurrentStepName, OrderByType.Desc)//当前节点降序
+			.OrderByIF(dto is { SortField: "delayText", SortRule: 0 }, x => x.OrderDelays.Count, OrderByType.Asc) //是否延期升序
+			.OrderByIF(dto is { SortField: "delayText", SortRule: 1 }, x => x.OrderDelays.Count, OrderByType.Desc) //是否延期升序
+			.OrderByIF(dto is { SortField: "statusText", SortRule: 0 }, x => x.Status, OrderByType.Asc) //工单状态升序
+			.OrderByIF(dto is { SortField: "statusText", SortRule: 1 }, x => x.Status, OrderByType.Desc) //工单状态升序
+			.OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc) //受理时间升序
+			.OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc) //受理时间降序
+			.OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, x => x.ExpiredTime, OrderByType.Asc) //期满时间升序
+			.OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc) //期满时间降序
+			.OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 0 }, x => x.ActualHandleOrgName, OrderByType.Asc)// 接办部门升序
+			.OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 1 }, x => x.ActualHandleOrgName, OrderByType.Desc)// 接办部门降序
+			.OrderByIF(dto is { SortField: "acceptType", SortRule: 0 }, x => x.AcceptTypeCode, OrderByType.Asc) //受理类型升序
+			.OrderByIF(dto is { SortField: "acceptType", SortRule: 1 }, x => x.AcceptTypeCode, OrderByType.Desc) //受理类型降序
+			.OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 0 }, x => x.CounterSignType, OrderByType.Asc) //是否会签升序
+			.OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 1 }, x => x.CounterSignType, OrderByType.Desc) //是否会签降序
+			.OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 0 }, x => x.OrgLevelOneName, OrderByType.Asc) //一级部门升序
+			.OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 1 }, x => x.OrgLevelOneName, OrderByType.Desc)//一级部门降序
+			.OrderByIF(dto is { SortField: "hotspotName", SortRule: 0 }, x => x.HotspotId, OrderByType.Asc) //热点升序
+			.OrderByIF(dto is { SortField: "hotspotName", SortRule: 1 }, x => x.HotspotId, OrderByType.Desc) //热点降序
+			.OrderByIF(dto is { SortField: "acceptorName", SortRule: 0 }, x => x.AcceptorName, OrderByType.Asc)// 受理人升序
+			.OrderByIF(dto is { SortField: "acceptorName", SortRule: 1 }, x => x.AcceptorName, OrderByType.Desc);// 受理人升序
+	}
 
     /// <summary>
     /// 即将超期列表
@@ -739,7 +739,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public ISugarQueryable<Order> GetPublishOrderList(QueryOrderPublishDto dto)
     {
-        var query = _orderRepository.Queryable().Includes(d=>d.OrderTags);
+        var query = _orderRepository.Queryable().Includes(d => d.OrderTags);
         if (_appOptions.Value.IsLuZhou)
             query = query.Includes(d => d.FwCallRecord);
         //.Includes(d => d.OrderPublish)
@@ -750,9 +750,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
               //.WhereIF(dto.PubState == EPubState.Pub, d => d.Status >= EOrderStatus.Published)
               //.WhereIF(dto.PubState == EPubState.NoPub, d => d.Status == EOrderStatus.Filed)
               .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
-			  //.WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTagCode == dto.OrderTag!) //工单标签
-			  .WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTag)) //工单标签
-			  .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName.Contains(dto.CenterToOrgHandlerName)) //派单人
+              //.WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTagCode == dto.OrderTag!) //工单标签
+              .WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTag)) //工单标签
+              .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName.Contains(dto.CenterToOrgHandlerName)) //派单人
               .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName.Contains(dto.NameOrNo) || d.AcceptorStaffNo.Contains(dto.NameOrNo)) //受理人/坐席
               .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
               .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
@@ -1377,7 +1377,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     {
         var isCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
 
-        var query = _orderRepository.Queryable();
+        var query = _orderRepository.Queryable(canView: false);
         if (!isCenter)
         {
             query.Where(d => SqlFunc.Subqueryable<WorkflowStep>()
@@ -1386,7 +1386,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                                step.HandlerOrgId.StartsWith(_sessionContextProvider.SessionContext.RequiredOrgId)).Any());
         }
 
-        query = query.Includes(d => d.OrderScreens).Includes(d=>d.OrderTags);
+        query = query.Includes(d => d.OrderScreens).Includes(d => d.OrderTags);
 
         //if (!_appOptions.Value.IsYiBin)
         //{
@@ -1465,8 +1465,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
          .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == false, d => d.CurrentStepAcceptTime == null)
          .WhereIF(dto.FiledType is FiledType.CenterFiled, d => d.FileOrgIsCenter == true)//d => d.ProcessType == EProcessType.Zhiban
          .WhereIF(dto.FiledType is FiledType.OrgFiled, d => d.FileOrgIsCenter == false)//d => d.ProcessType == EProcessType.Jiaoban
-         //.WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTagCode == dto.OrderTagCode)// 工单标签
-         .WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTags.Any(ot=>ot.DicDataValue == dto.OrderTagCode)) //工单标签
+                                                                                       //.WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTagCode == dto.OrderTagCode)// 工单标签
+         .WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTagCode)) //工单标签
          .WhereIF(!string.IsNullOrEmpty(dto.FocusOnEvents), d => SqlFunc.SplitIn(d.FocusOnEvents, dto.FocusOnEvents))
          .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.CreationTime, OrderByType.Desc)//默认排序时间为创建时间
          .OrderByIF(dto is { SortField: "no", SortRule: 0 }, d => d.No, OrderByType.Asc) //工单编号升序

+ 1 - 1
src/Hotline.Application/Quality/QualityApplication.cs

@@ -426,7 +426,7 @@ namespace Hotline.Application.Quality
 							if (statement.Count() == 2)
 							{
 								model.Sort = sort;
-								model.Type = statement[0].ToString() == "spk_01" ? EQualityTransferType.Seats : EQualityTransferType.Citizen;
+								model.Type = statement[0].ToString() == "spk_00" ? EQualityTransferType.Seats : EQualityTransferType.Citizen;
 								model.Content = statement[1].ToString();
 								model.ReviseContent = model.Content;
 								if (!string.IsNullOrEmpty(model.Content))

+ 5 - 2
src/Hotline.Application/Snapshot/Notifications/SnapshotHandler.cs

@@ -57,17 +57,20 @@ public class SnapshotHandler : ICapSubscribe, IScopeDependency
 public class SnapshotOrderFiledNotificationHandler : INotificationHandler<SnapshotOrderFiledNotification>
 {
     private readonly ISnapshotApplication _snapshotApplication;
+    private readonly IOrderSnapshotRepository _orderSnapshotRepository;
     private readonly ILogger<SnapshotOrderFiledNotificationHandler> _logger;
-    public SnapshotOrderFiledNotificationHandler(ISnapshotApplication snapshotApplication, ILogger<SnapshotOrderFiledNotificationHandler> logger)
+    public SnapshotOrderFiledNotificationHandler(ISnapshotApplication snapshotApplication, ILogger<SnapshotOrderFiledNotificationHandler> logger, IOrderSnapshotRepository orderSnapshotRepository)
     {
         _snapshotApplication = snapshotApplication;
         _logger = logger;
+        _orderSnapshotRepository = orderSnapshotRepository;
     }
     public async Task Handle(SnapshotOrderFiledNotification notification, CancellationToken cancellationToken)
     {
         try
         {
-            await _snapshotApplication.AddRedPardAsync(notification.OrderId, cancellationToken);
+            if (_orderSnapshotRepository.HasOrder(notification.OrderId))
+                await _snapshotApplication.AddRedPardAsync(notification.OrderId, cancellationToken);
         }
         catch (Exception e)
         {

+ 5 - 0
src/Hotline.Repository.SqlSugar/Snapshot/OrderSnapshotRepository.cs

@@ -27,6 +27,11 @@ public class OrderSnapshotRepository : BaseRepository<OrderSnapshot>, IOrderSnap
         return await Queryable().Where(m => m.NetworkENumber == appealNumber).FirstAsync();
     }
 
+    public bool HasOrder(string orderId)
+    {
+        return Queryable().Any(m => m.Id == orderId);
+    }
+
     public async Task<OrderSnapshot> UpdateSafetyAsync(string orderId, bool isSafety, string remark)
     {
         OrderSnapshot order = null;

+ 1 - 1
src/Hotline.Share/Dtos/WebPortal/WebFlowAcceptDto.cs

@@ -81,7 +81,7 @@ namespace Hotline.Share.Dtos.WebPortal
         public string Content { get; set; }
 
         /// <summary>
-        /// 来源方式 APP来源为2,微信来源为3,宜宾人社来源9,
+        /// 来源方式 APP来源为2,微信小程序来源为3,宜宾人社来源9,
         /// </summary>
         public string? FromID { get; set; }
 

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

@@ -7,7 +7,7 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.116</Version>
+    <Version>1.0.117</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 0 - 1
src/Hotline/KnowledgeBase/Knowledge.cs

@@ -18,7 +18,6 @@ namespace Hotline.KnowledgeBase;
 /// </summary>
 [Description("知识库文档")]
 [SugarIndex("index_knowledge_hotspotId", nameof(Knowledge.HotspotId), OrderByType.Desc)]
-[SugarIndex("index_knowledge_attribution", nameof(Knowledge.Attribution), OrderByType.Desc)]
 [SugarIndex("index_knowledge_creatorOrgId", nameof(Knowledge.CreatorOrgId), OrderByType.Desc)]
 public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
 {

+ 2 - 4
src/Hotline/Orders/OrderDomainService.cs

@@ -760,8 +760,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         return valid;
     }
     #endregion
-
-
+    
     #region 即将超期和超期短信
 
     /// <summary>
@@ -817,8 +816,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     }
 
     #endregion
-
-
+    
     #region private
 
     private async Task<Order> GetOrderByFlowIdAsync(string workflowId, CancellationToken cancellationToken)

+ 7 - 0
src/Hotline/Snapshot/Interfaces/IOrderSnapshotRepository.cs

@@ -18,4 +18,11 @@ public interface IOrderSnapshotRepository : IRepository<OrderSnapshot>
     Task<OrderSnapshot> GetByNetworkENumberAsync(string appealNumber);
 
     Task<OrderSnapshot> UpdateSafetyAsync(string orderId, bool isSafety, string remark);
+
+    /// <summary>
+    /// 是否有随手拍工单
+    /// </summary>
+    /// <param name="orderId"></param>
+    /// <returns></returns>
+    bool HasOrder(string orderId);
 }