田爽 3 月之前
父節點
當前提交
94c4921ef2

+ 17 - 10
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,24 +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();
+            var query = _knowledgeTypeRepository.Queryable()
+                .WhereIF(isEnable.HasValue, x => x.IsEnable == isEnable);
             if (!isCenter)
                 query.Where(x => x.Orgs.Any(s => s.Id == _sessionContext.RequiredOrgId));
-            return await query.WhereIF(IsEnable.HasValue, x => x.IsEnable == IsEnable)
+            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);

+ 105 - 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,19 +2062,20 @@ 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)
 				{
@@ -2099,77 +2091,79 @@ public class OrderController : BaseController
 				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>
     ///  延期查询流程办理下一步可选节点
@@ -3412,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)
@@ -3751,7 +3745,7 @@ public class OrderController : BaseController
             foreach (var item in dto.Tags)
             {
                 orderTags.Add(new SystemDicData() { Id = item });
-			}
+            }
             order.OrderTags = orderTags;
         }
 
@@ -3991,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,
@@ -4031,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();
 
         //订阅此事件的内部处理工单数据只能更新各自业务的字段,不能全部更新
         //修改工单其他处理事件  (受理短信)
@@ -4250,7 +4244,7 @@ public class OrderController : BaseController
                     continue;
                 }
                 throw;
-            }            
+            }
             var stepInfo = nextSteps.Steps.FirstOrDefault(m => m.BusinessType == EBusinessType.Send);
             if (stepInfo == null)
             {
@@ -4342,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>();

File diff suppressed because it is too large
+ 925 - 541
src/Hotline.Api/Controllers/WebPortalController.cs


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

@@ -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) //工单编号升序

+ 13 - 13
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -98,12 +98,12 @@ namespace Hotline.Share.Dtos.Order
 
 		public List<SystemDicDataOutDto>? OrderTags { get; set; }
 
-		#region 流程信息
+        #region 流程信息
 
-		/// <summary>
-		/// 工单开始时间(受理/接办时间=流程开启时间)
-		/// </summary>
-		public DateTime? StartTime { get; set; }
+        /// <summary>
+        /// 工单开始时间(受理/接办时间=流程开启时间)
+        /// </summary>
+        public DateTime? StartTime { get; set; }
 
         /// <summary>
         /// 交办时间(中心交部门办理时间)
@@ -661,7 +661,7 @@ namespace Hotline.Share.Dtos.Order
         {
             try
             {
-                if (Status >= EOrderStatus.Filed && FiledTime != null)
+                if (Status >= EOrderStatus.Filed && FiledTime != null && ExpiredTime != null)
                 {
                     return Math.Round((ExpiredTime.Value - FiledTime.Value).TotalDays, 1) + "天";
                 }
@@ -1153,13 +1153,13 @@ namespace Hotline.Share.Dtos.Order
 
         public string Title { get; set; }
 
-  //      /// <summary>
-  //      /// 工单标签(自贡)
-  //      /// </summary>
-  //      public string? OrderTag => OrderTags != null && OrderTags.Any() ? string.Join(",", OrderTags.Select(x => x.DicDataName)) : string.Empty;
+        //      /// <summary>
+        //      /// 工单标签(自贡)
+        //      /// </summary>
+        //      public string? OrderTag => OrderTags != null && OrderTags.Any() ? string.Join(",", OrderTags.Select(x => x.DicDataName)) : string.Empty;
 
 
-		//public string? OrderTagCode { get; set; }
+        //public string? OrderTagCode { get; set; }
 
         #region 热点
 
@@ -1440,9 +1440,9 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 工单标签
         /// </summary>
-        public List<string>?  Tags { get; set; }
+        public List<string>? Tags { get; set; }
 
-	}
+    }
 
     public record CanLinkCallRecordOrderDto : PagedKeywordRequest
     {

+ 10 - 0
src/Hotline.Share/Dtos/Order/OrderVisitDto.cs

@@ -1124,6 +1124,16 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public string? VisitContent { get; set; }
 
+        /// <summary>
+        /// 部门是否联系
+        /// </summary>
+        public bool? IsContact { get; set; }
+
+        /// <summary>
+        /// 是否解决问题
+        /// </summary>
+        public bool? Volved { get; set; }
+
     }
 
     public class OrderVisitProvinceDto

+ 14 - 0
src/Hotline.Share/Dtos/WebPortal/WaitVisitListDataDto.cs

@@ -57,5 +57,19 @@
         /// </summary>
         public string? SatisfactionCode { get; set; }
 
+        /// <summary>
+        /// 部门是否联系
+        /// </summary>
+        public bool? IsContact { get; set; }
+
+        /// <summary>
+        /// 是否解决问题
+        /// </summary>
+        public bool? Volved { get; set; }
+
+        /// <summary>
+        /// 不满意原因
+        /// </summary>
+        public List<Kv>? OrgNoSatisfiedReason { 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
 {

+ 4 - 1
src/Hotline/KnowledgeBase/KnowledgeType.cs

@@ -50,8 +50,11 @@ public class KnowledgeType : FullStateEntity
     /// 类型关联机构
     /// </summary>
     [Navigate(NavigateType.OneToMany, nameof(KnowledgeTypeOrg.TypeId))]
-    public List<KnowledgeTypeOrg>  KnowledgeTypeOrgs { get; set; }
+    public List<KnowledgeTypeOrg> KnowledgeTypeOrgs { get; set; }
 
     [Navigate(typeof(KnowledgeTypeOrg), nameof(KnowledgeTypeOrg.TypeId), nameof(KnowledgeTypeOrg.OrgId))]
     public List<SystemOrganize> Orgs { get; set; }
+
+    [Navigate(typeof(KnowledgeRelationType), nameof(KnowledgeRelationType.KnowledgeTypeId), nameof(KnowledgeRelationType.KnowledgeId))]
+    public List<Knowledge> Knowledges { get; set; }
 }

Some files were not shown because too many files changed in this diff