瀏覽代碼

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

xf 1 年之前
父節點
當前提交
cd899bc390

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

@@ -471,6 +471,11 @@ namespace Hotline.Api.Controllers
 		{
 			var typeSpliceName = string.Empty;
 			var hotspotHotSpotFullName = string.Empty;
+			if (!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId))
+			{
+				var type = await _knowledgeTypeRepository.GetAsync(x => x.Id == pagedDto.KnowledgeTypeId);
+				typeSpliceName = type?.SpliceName;
+			}
 			if (!string.IsNullOrEmpty(pagedDto.HotspotId))
 			{
 				var hotspot = await _hotspotTypeRepository.GetAsync(x => x.Id == pagedDto.HotspotId);

+ 40 - 7
src/Hotline.Api/Controllers/OrderController.cs

@@ -1,4 +1,5 @@
 using DotNetCore.CAP;
+using DotNetCore.CAP.Monitoring;
 using Hotline.Api.Filter;
 using Hotline.Application.ExportExcel;
 using Hotline.Application.FlowEngine;
@@ -42,7 +43,9 @@ using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using MiniExcelLibs;
+using MongoDB.Driver.Linq;
 using SqlSugar;
+using System.Xml.Linq;
 using XF.Domain.Authentications;
 using XF.Domain.Cache;
 using XF.Domain.Constants;
@@ -806,7 +809,7 @@ public class OrderController : BaseController
         foreach (var id in dto.Ids)
         {
             var visit = await _orderVisitRepository.Queryable().FirstAsync(d => d.Id == id, HttpContext.RequestAborted);
-            if (visit != null && visit.VisitState != EVisitState.WaitForVisit)
+            if (visit != null && visit.VisitState == EVisitState.WaitForVisit)
             {
                 visit.EmployeeId = dto.EmployeeId;
                 await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
@@ -1456,7 +1459,7 @@ public class OrderController : BaseController
         }
 
         var (total, items) = await query
-            .OrderBy((x, s) => x.CreationTime)
+            .OrderByDescending((x, s) => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
     }
@@ -1610,6 +1613,31 @@ public class OrderController : BaseController
         return workflow.Id;
     }
 
+    /// <summary>
+    ///  甄别查询流程办理下一步可选节点
+    /// </summary>
+    /// <param name="workflowId"></param>
+    /// <returns></returns>
+    [HttpGet("screen/{workflowId}/nextsteps")]
+    public async Task<NextStepsDto> OrderScreenNextsteps(string workflowId)
+    {
+        var workflow = await _workflowRepository.GetAsync(workflowId, HttpContext.RequestAborted);
+        if (workflow != null)
+        {
+            var orderScreen = await _orderScreenRepository.Queryable().Includes(x => x.Order).Where(x => x.Id == workflow.ExternalId).FirstAsync(HttpContext.RequestAborted);
+            if (orderScreen != null)
+            {
+                var result = await _workflowApplication.GetNextStepsAsync(workflowId, HttpContext.RequestAborted);
+                if (!orderScreen.Order.IsProvince)
+                {
+                    result.Steps.Remove(result.Steps.First(x => x.Value == "省审批"));
+                }
+                return result;
+            }
+        }
+        return null;
+    }
+
     /// <summary>
     /// 列表页面基础数据
     /// </summary>
@@ -1716,11 +1744,11 @@ public class OrderController : BaseController
                 try
                 {
                     //查询部门所有账号
-                    var userlist = await _userRepository.Queryable().Where(x => x.OrgId == model.OrgId && !string.IsNullOrEmpty(x.PhoneNo)).ToListAsync();
+                    var userlist = await _userRepository.Queryable().Where(x => x.OrgId == model.OrgId && !string.IsNullOrEmpty(x.PhoneNo) && x.Roles.Any(d=>d.Id== "08dae71e-0eca-4bc4-89fe-7eaefae8a98e")).ToListAsync();
                     //发送短信
                     foreach (var user in userlist)
                     {
-                        var messageDto = new MessageDto
+                        var messageDto = new Share.Dtos.Push.MessageDto
                         {
                             PushBusiness = EPushBusiness.OrderSupervise,
                             ExternalId = order.Id,
@@ -1959,11 +1987,11 @@ public class OrderController : BaseController
                 try
                 {
                     //查询部门所有账号
-                    var userlist = await _userRepository.Queryable().Where(x => x.OrgId == model.OrgId && !string.IsNullOrEmpty(x.PhoneNo)).ToListAsync();
+                    var userlist = await _userRepository.Queryable().Where(x => x.OrgId == model.OrgId && !string.IsNullOrEmpty(x.PhoneNo) && x.Roles.Any(d => d.Id == "08dae71e-0eca-4bc4-89fe-7eaefae8a98e")).ToListAsync();
                     foreach (var user in userlist)
                     {
                         //发送短信
-                        var messageDto = new MessageDto
+                        var messageDto = new Share.Dtos.Push.MessageDto
                         {
                             PushBusiness = EPushBusiness.OrderUrge,
                             ExternalId = order.Id,
@@ -2277,7 +2305,7 @@ public class OrderController : BaseController
             {
                 _logger.LogInformation($"推送短信: orderNo: {order.No}");
 
-                var messageDto = new MessageDto
+                var messageDto = new Share.Dtos.Push.MessageDto
                 {
                     PushBusiness = EPushBusiness.OrderAccept,
                     ExternalId = order.Id,
@@ -2483,6 +2511,11 @@ public class OrderController : BaseController
         await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
 
         await _workflowApplication.NextAsync(dto, order.ExpiredTime, HttpContext.RequestAborted);
+
+        if (dto.IsSms)
+        {
+            //发送短信
+        }
     }
 
     /// <summary>

+ 4 - 2
src/Hotline.Application/CallCenter/Calls/TelsStatusRefreshService.cs

@@ -32,7 +32,9 @@ namespace Hotline.Application.CallCenter.Calls
             {
                 try
                 {
-                    var list = await _workRepository.Queryable().Where(x => !x.EndTime.HasValue).ToListAsync();
+                    //var list = await _workRepository.Queryable().Where(x => !x.EndTime.HasValue).ToListAsync();
+                    var list = await _workRepository.Queryable().Where(x => 1==1 && !x.EndTime.HasValue).ToListAsync();
+                    //var list = await _workRepository.Queryable().Where(x => x.EndTime is null).ToListAsync();
                     var tellist = await _trClient.QueryTelStateAsync(new Tr.Sdk.Tels.QueryTelStateRequest { }, stoppingToken);
                     foreach (var item in list)
                     {
@@ -41,7 +43,7 @@ namespace Hotline.Application.CallCenter.Calls
                         {
                             if (telmodel.State == "logout")
                             {
-                                var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && !x.EndTime.HasValue, stoppingToken);
+                                var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && x.EndTime != null, stoppingToken);
                                 if (telRest is not null)
                                 {
                                     telRest.EndRest();

+ 69 - 3
src/Hotline.Application/Handlers/FlowEngine/WorkflowNextHandler.cs

@@ -5,6 +5,7 @@ using Hotline.FlowEngine.WorkflowModules;
 using Hotline.FlowEngine.Workflows;
 using Hotline.KnowledgeBase;
 using Hotline.Orders;
+using Hotline.Push.Notifies;
 using Hotline.Settings;
 using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
@@ -12,13 +13,16 @@ using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Push;
 using Hotline.Share.Enums.Quality;
 using Hotline.Share.Mq;
+using Hotline.Users;
 using MapsterMapper;
 using MediatR;
 using Microsoft.Extensions.Logging;
 using Newtonsoft.Json;
 using XF.Domain.Authentications;
+using XF.Domain.Entities;
 using XF.Domain.Repository;
 
 namespace Hotline.Application.Handlers.FlowEngine;
@@ -39,8 +43,10 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
     private readonly IKnowledgeRepository _knowledgeRepository;
     private readonly IKnowledgeWorkFlowRepository _knowledgeWorkFlowRepository;
     private readonly ISessionContext _sessionContext;
+    private readonly IRepository<User> _userRepository;
+    private readonly IMediator _mediator;
 
-	public WorkflowNextHandler(
+    public WorkflowNextHandler(
         IOrderDomainService orderDomainService,
         IKnowledgeDomainService knowledgeDomainService,
         IOrderRepository orderRepository,
@@ -54,7 +60,9 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
         IKnowledgeRepository knowledgeRepository,
         IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository,
         ISessionContext sessionContext,
-		IOrderDelayRepository orderDelayRepository)
+		IOrderDelayRepository orderDelayRepository,
+        IRepository<User> userRepository,
+        IMediator mediator)
     {
         _orderDomainService = orderDomainService;
         _knowledgeDomainService = knowledgeDomainService;
@@ -70,7 +78,9 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
         _knowledgeRepository = knowledgeRepository;
         _knowledgeWorkFlowRepository = knowledgeWorkFlowRepository;
         _sessionContext = sessionContext;
-	}
+        _userRepository = userRepository;
+        _mediator = mediator;
+    }
 
     /// <summary>Handles a notification</summary>
     /// <param name="notification">The notification</param>
@@ -133,7 +143,63 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
                 //}
 
                 await _orderRepository.UpdateAsync(order, cancellationToken);
+                try
+                {
+                    if (notification.Dto.IsSms)
+                    {
+                        switch (notification.FlowAssignInfo.FlowAssignType)
+                        {
+                            case EFlowAssignType.Org:
+                                var orgCodes = notification.FlowAssignInfo.HandlerObjects.Select(x => x.Key);
+                                var orgList = await _userRepository.Queryable().Where(x => orgCodes.Contains(x.OrgId) && x.Roles.Any(d => d.Id == "08dae71e-0eca-4bc4-89fe-7eaefae8a98e")).ToListAsync();
+                                foreach (var item in orgList)
+                                {
+                                    if (!string.IsNullOrEmpty(item.PhoneNo))
+                                    {
+                                        var messageDto = new Share.Dtos.Push.MessageDto
+                                        {
+                                            PushBusiness = EPushBusiness.OrderSupervise,
+                                            ExternalId = order.Id,
+                                            OrderId = order.Id,
+                                            PushPlatform = EPushPlatform.Sms,
+                                            Remark = order.Title,
+                                            Name = item.PhoneNo,
+                                            TemplateCode = "1007",
+                                            Params = new List<string>() { order.No },
+                                            TelNumber = item.PhoneNo,
+
+                                        };
+                                        await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                                    }
+                                }
+                                break;
+                            case EFlowAssignType.User:
+                                var userCodes = notification.FlowAssignInfo.HandlerObjects.Select(x => x.Key);
+                                var userList = await _userRepository.Queryable().Where(x => userCodes.Contains(x.Id) && x.Roles.Any(d => d.Id == "08dae71e-0eca-4bc4-89fe-7eaefae8a98e")).ToListAsync();
+                                foreach (var item in userList)
+                                {
+                                    var messageDto = new Share.Dtos.Push.MessageDto
+                                    {
+                                        PushBusiness = EPushBusiness.OrderSupervise,
+                                        ExternalId = order.Id,
+                                        OrderId = order.Id,
+                                        PushPlatform = EPushPlatform.Sms,
+                                        Remark = order.Title,
+                                        Name = item.PhoneNo,
+                                        TemplateCode = "1007",
+                                        Params = new List<string>() { order.No },
+                                        TelNumber = item.PhoneNo,
 
+                                    };
+                                    await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                                }
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                }
+                catch { }
                 var orderDto = _mapper.Map<OrderDto>(order);
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFlowHandled, new OrderFlowDto
                 {

+ 70 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowStartHandler.cs

@@ -6,14 +6,19 @@ using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.KnowledgeBase;
 using Hotline.Orders;
+using Hotline.Push.Notifies;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.TrCallCenter;
+using Hotline.Share.Enums.Push;
 using Hotline.Share.Enums.Quality;
 using Hotline.Share.Mq;
+using Hotline.Users;
 using MapsterMapper;
 using MediatR;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
+using XF.Domain.Entities;
 using XF.Domain.Repository;
 
 namespace Hotline.Application.Handlers.FlowEngine
@@ -31,6 +36,8 @@ namespace Hotline.Application.Handlers.FlowEngine
         private readonly IRepository<TrCallRecord> _trCallRecordRepository;
         private readonly IOrderScreenRepository _orderScreenRepository;
         private readonly IOrderDelayRepository _orderDelayRepository;
+        private readonly IRepository<User> _userRepository;
+        private readonly IMediator _mediator;
 
         public WorkflowStartHandler(
             IOrderDomainService orderDomainService,
@@ -43,7 +50,9 @@ namespace Hotline.Application.Handlers.FlowEngine
             ILogger<WorkflowStartHandler> logger,
             IRepository<TrCallRecord> trCallRecordRepository,
             IOrderScreenRepository orderScreenRepository,
-            IOrderDelayRepository orderDelayRepository
+            IOrderDelayRepository orderDelayRepository,
+            IRepository<User> userRepository,
+            IMediator mediator
         )
         {
             _orderDomainService = orderDomainService;
@@ -57,6 +66,8 @@ namespace Hotline.Application.Handlers.FlowEngine
             _trCallRecordRepository = trCallRecordRepository;
             _orderScreenRepository = orderScreenRepository;
             _orderDelayRepository = orderDelayRepository;
+            _userRepository = userRepository;
+            _mediator = mediator;
         }
 
         /// <summary>Handles a notification</summary>
@@ -95,6 +106,64 @@ namespace Hotline.Application.Handlers.FlowEngine
                     await _capPublisher.PublishAsync(EventNames.HotlineOrderFlowStarted, publishCallRecordDto,
                         cancellationToken: cancellationToken);
 
+                    try
+                    {
+                        if (notification.Dto.IsSms)
+                        {
+                            switch (notification.FlowAssignInfo.FlowAssignType)
+                            {
+                                case EFlowAssignType.Org:
+                                    var orgCodes = notification.FlowAssignInfo.HandlerObjects.Select(x => x.Key);
+                                    var orgList = await _userRepository.Queryable().Where(x => orgCodes.Contains(x.OrgId) && x.Roles.Any(d => d.Id == "08dae71e-0eca-4bc4-89fe-7eaefae8a98e")).ToListAsync();
+                                    foreach (var item in orgList)
+                                    {
+                                        if (!string.IsNullOrEmpty(item.PhoneNo))
+                                        {
+                                            var messageDto = new Share.Dtos.Push.MessageDto
+                                            {
+                                                PushBusiness = EPushBusiness.OrderSupervise,
+                                                ExternalId = order.Id,
+                                                OrderId = order.Id,
+                                                PushPlatform = EPushPlatform.Sms,
+                                                Remark = order.Title,
+                                                Name = item.PhoneNo,
+                                                TemplateCode = "1007",
+                                                Params = new List<string>() { order.No },
+                                                TelNumber = item.PhoneNo,
+
+                                            };
+                                            await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                                        }
+                                    }
+                                    break;
+                                case EFlowAssignType.User:
+                                    var userCodes = notification.FlowAssignInfo.HandlerObjects.Select(x => x.Key);
+                                    var userList = await _userRepository.Queryable().Where(x => userCodes.Contains(x.Id) && x.Roles.Any(d => d.Id == "08dae71e-0eca-4bc4-89fe-7eaefae8a98e")).ToListAsync();
+                                    foreach (var item in userList)
+                                    {
+                                        var messageDto = new Share.Dtos.Push.MessageDto
+                                        {
+                                            PushBusiness = EPushBusiness.OrderSupervise,
+                                            ExternalId = order.Id,
+                                            OrderId = order.Id,
+                                            PushPlatform = EPushPlatform.Sms,
+                                            Remark = order.Title,
+                                            Name = item.PhoneNo,
+                                            TemplateCode = "1007",
+                                            Params = new List<string>() { order.No },
+                                            TelNumber = item.PhoneNo,
+
+                                        };
+                                        await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                                    }
+                                    break;
+                                default:
+                                    break;
+                            }
+                        }
+                    }
+                    catch{}
+
                     //写入质检
                     await _qualityApplication.AddQualityAsync(EQualitySource.Accepted, order.Id, cancellationToken);
                     break;

+ 5 - 0
src/Hotline/Permissions/EPermission.cs

@@ -1987,6 +1987,11 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName = "数据统计", Name = "部门延期统计", Description = "部门延期统计")]
         OrgDelayStatistics = 110603,
+        /// <summary>
+        /// 部门满意度统计
+        /// </summary>
+        [Display(GroupName ="数据统计",Name = "部门满意度统计",Description = "部门满意度统计")]
+        VisitAndOrgSatisfactionStatistics = 110604,
         #endregion
 
 

+ 1 - 1
src/XF.Domain.Repository/XF.Domain.Repository.csproj

@@ -10,7 +10,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="SqlSugarCore" Version="5.1.4.137" />
+    <PackageReference Include="SqlSugarCore" Version="5.1.4.149" />
     <PackageReference Include="XF.Utility.SequentialId" Version="1.0.2" />
   </ItemGroup>