Dun.Jason 1 年之前
父节点
当前提交
b2bc9249c6

+ 10 - 3
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -1,4 +1,5 @@
-using Hotline.Api.Filter;
+using DotNetCore.CAP;
+using Hotline.Api.Filter;
 using Hotline.Application.FlowEngine;
 using Hotline.Application.Knowledge;
 using Hotline.File;
@@ -15,11 +16,13 @@ using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Enums.KnowledgeBase;
+using Hotline.Share.Mq;
 using Hotline.Users;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
+using System.Threading;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -51,6 +54,7 @@ namespace Hotline.Api.Controllers
 		private readonly IRepository<KnowledgeComment> _knowledgeCommentRepository;
 		private readonly ISystemOrganizeRepository _systemOrganizeRepository;
 		private readonly IFileRepository _fileRepository;
+		private readonly ICapPublisher _capPublisher;
 
 
 		public KnowledgeController(
@@ -73,7 +77,8 @@ namespace Hotline.Api.Controllers
 		   ISystemDomainService systemDomainService,
 		   IRepository<KnowledgeComment> knowledgeCommentRepository,
 		   ISystemOrganizeRepository systemOrganizeRepository,
-		   IFileRepository fileRepository
+		   IFileRepository fileRepository,
+		   ICapPublisher capPublisher
 		   )
 		{
 			_knowledgeRepository = knowledgeRepository;
@@ -96,6 +101,7 @@ namespace Hotline.Api.Controllers
 			_knowledgeCommentRepository = knowledgeCommentRepository;
 			_systemOrganizeRepository = systemOrganizeRepository;
 			_fileRepository = fileRepository;
+			_capPublisher = capPublisher;
 		}
 
 		#endregion
@@ -156,10 +162,11 @@ namespace Hotline.Api.Controllers
 				know.OnShelfTime = null;
 				know.OffShelfTime = DateTime.Now;
 				await _knowledgeRepository.UpdateAsync(know, HttpContext.RequestAborted);
+				//推省上
+				await _capPublisher.PublishAsync(EventNames.HotlineKnowledgeRemove, _mapper.Map<KnowledgeSendDto>(know), cancellationToken: HttpContext.RequestAborted);
 			}
 			else
 				throw UserFriendlyException.SameMessage("知识下架失败");
-
 		}
 
 		/// <summary>

+ 128 - 20
src/Hotline.Application/Subscribers/DatasharingSubscriber.cs

@@ -7,13 +7,22 @@ using DotNetCore.CAP;
 using Hotline.Application.FlowEngine;
 using Hotline.Application.Quality;
 using Hotline.Orders;
+using Hotline.Application.FlowEngine;
+using Hotline.File;
+using Hotline.FlowEngine.Workflows;
+using Hotline.Orders;
+using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Quality;
 using MapsterMapper;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Authentications;
 using XF.Domain.Dependency;
 using XF.Domain.Repository;
+using Hotline.Repository.SqlSugar.Orders;
+using static StackExchange.Redis.Role;
 
 namespace Hotline.Application.Subscribers
 {
@@ -29,26 +38,73 @@ namespace Hotline.Application.Subscribers
         private readonly ICapPublisher _capPublisher;
         private readonly IQualityApplication _qualityApplication;
         private readonly IRepository<OrderDelay> _orderDelayRepository;
+        private readonly IRepository<OrderSendBack> _orderSendBackRepository;
         private readonly IWorkflowApplication _workflowApplication;
+        private readonly ISessionContext _sessionContext;
+        private readonly IWorkflowDomainService _workflowDomainService;
+        private readonly IFileRepository _fileRepository;
+        private readonly IRepository<OrderUrge> _orderUrgeRepository;
+        private readonly IRepository<OrderSupervise> _orderSuperviseRepository;
+        private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
+        private readonly IOrderScreenRepository _orderScreenRepository;
 
-        public DataSharingSubscriber(IRepository<OrderVisit> orderVisitRepository, IRepository<OrderVisitDetail> orderVisitDetailRepository, IMapper mapper, IOrderRepository orderRepository, ICapPublisher capPublisher, IQualityApplication qualityApplication, IRepository<OrderDelay> orderDelayRepository,IWorkflowApplication workflowApplication)
+		public DataSharingSubscriber()
         {
-            _orderVisitRepository = orderVisitRepository;
-            _orderVisitDetailRepository = orderVisitDetailRepository;
-            _mapper = mapper;
-            _orderRepository = orderRepository;
-            _capPublisher = capPublisher;
-            _orderDelayRepository = orderDelayRepository;
-            _workflowApplication = workflowApplication;
+           
         }
+	    
+
+		public DataSharingSubscriber(
+			IRepository<OrderVisit> orderVisitRepository,
+            IRepository<OrderVisitDetail> orderVisitDetailRepository,
+            IMapper mapper,
+            IOrderRepository orderRepository,
+            ICapPublisher capPublisher,
+            IQualityApplication qualityApplication,
+            IRepository<OrderDelay> orderDelayRepository,
+			IRepository<OrderSendBack> orderSendBackRepository,
+            IWorkflowApplication workflowApplication,
+            IWorkflowDomainService workflowDomainService,
+            IRepository<OrderUrge> orderUrgeRepository,
+            IRepository<OrderSupervise> orderSuperviseRepository,
+            IRepository<OrderVisitDetail> orderVisitedDetailRepository,
+			IOrderScreenRepository orderScreenRepository,
+			IFileRepository fileRepository) 
+		{
+			_orderSendBackRepository = orderSendBackRepository;
+			_workflowApplication = workflowApplication;
+			_workflowDomainService = workflowDomainService;
+			_orderUrgeRepository = orderUrgeRepository;
+			_orderSuperviseRepository = orderSuperviseRepository;
+			_orderScreenRepository = orderScreenRepository;
+			_orderVisitedDetailRepository = orderVisitedDetailRepository;
+			_orderRepository = orderRepository;
+			_fileRepository = fileRepository;
+			_orderVisitRepository = orderVisitRepository;
+			_orderVisitDetailRepository = orderVisitDetailRepository;
+			_mapper = mapper;
+			_capPublisher = capPublisher;
+			_orderDelayRepository = orderDelayRepository;
+		}
+
         /// <summary>
         /// 接收工单退回结果
         /// </summary>
         [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderReturnFeedback)]
         public async Task RecOrderReturnAsync(OrderSendBackResultDto dto, CancellationToken cancellationToken)
         {
-
-        }
+            var sendBack = await _orderSendBackRepository.GetAsync(dto.Id, cancellationToken);
+            if (sendBack != null)
+            {
+                sendBack.Result = dto.Result;
+                sendBack.Reason = dto.Reason;
+                if (dto.Result is 1) 
+                {
+                    var order = await _orderRepository.GetAsync(sendBack.OrderId, cancellationToken);
+                    await _workflowApplication.JumpToEndAsync(order.WorkflowId, "省工单同意退回", null, cancellationToken: cancellationToken);
+				}
+            }
+		}
 
         /// <summary>
         /// 服务工单撤单
@@ -56,8 +112,9 @@ namespace Hotline.Application.Subscribers
         [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderRevoke)]
         public async Task RecCancelOrderAsync(CancelOrderDto dto, CancellationToken cancellationToken)
         {
-
-        }
+	        var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
+			await _workflowApplication.JumpToEndAsync(order.WorkflowId, dto.Opinion, null, cancellationToken: cancellationToken);
+		}
 
         /// <summary>
         /// 服务工单催单
@@ -65,8 +122,24 @@ namespace Hotline.Application.Subscribers
         [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderRemind)]
         public async Task RecOrderUrgeAsync(ProvinceOrderUrgeDto dto, CancellationToken cancellationToken)
         {
-
-        }
+            var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync(cancellationToken);
+            var org = await _workflowDomainService.GetCurrentHandOrganizeAsync(order.WorkflowId,cancellationToken);
+            foreach (var item in org)
+            {
+				var model = new OrderUrge();
+				model.InitId();
+				model.OrgId = item.Id;
+				model.OrgName = item.Name;
+				model.State = 0;
+				model.CreatorOrgName = "省12345";
+				model.CrUser = dto.RemindName;
+				model.ApplyContent = dto.RemindReasion;
+				if (dto.Files.Any())
+					model.FileJson =
+						await _fileRepository.AddFileAsync(dto.Files, model.Id, "", cancellationToken);
+				await _orderUrgeRepository.AddAsync(model, cancellationToken);
+			}
+		}
 
         /// <summary>
         /// 督办工单派发接口
@@ -74,8 +147,20 @@ namespace Hotline.Application.Subscribers
         [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderSupervise)]
         public async Task RecOrderSuperviseAsync(ProvinceSendOrderSuperviseDto dto, CancellationToken cancellationToken)
         {
-
-        }
+	        var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.ProvinceOrderSuperviseDto!.CaseSerial).FirstAsync(cancellationToken);
+			var model = new OrderSupervise();
+			model.InitId();
+			model.OrderId = order.Id;
+			model.ReplyLimitTime = dto.ProvinceOrderSuperviseDto.SuperviseReturnDate;
+			model.OrgName = dto.ProvinceOrderSuperviseDto.SuperviseRsvDept;
+			model.LaunchOrgName = dto.ProvinceOrderSuperviseDto.SuperviseSendDept;
+			model.State = 0;
+			model.ApplyContent = dto.ProvinceOrderSuperviseDto.SuperviseContent;
+			if (dto.Files.Any())
+				model.FileJson =
+					await _fileRepository.AddFileAsync(dto.Files, model.Id, "", cancellationToken);
+			await _orderSuperviseRepository.AddAsync(model, cancellationToken);
+		}
 
         /// <summary>
         /// 服务工单甄别结果
@@ -83,8 +168,27 @@ namespace Hotline.Application.Subscribers
         [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderScreen)]
         public async Task RecOrderScreenResultAsync(ProvinceSendScreenResultDto dto, CancellationToken cancellationToken)
         {
-
-        }
+	        var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.ProvinceScreenResult!.CaseSerial).FirstAsync(cancellationToken);
+			var orderScreen = await _orderScreenRepository.Queryable().Where(x=>x.OrderId == order.Id && x.Status == Share.Enums.Order.EScreenStatus.Approval).FirstAsync(cancellationToken);
+			await _workflowApplication.JumpToEndAsync(orderScreen.WorkflowId, "省上推送甄别结果", null, cancellationToken: cancellationToken);
+			orderScreen.Status = "1".Equals(dto.ProvinceScreenResult.AuditResult) ? Share.Enums.Order.EScreenStatus.End : Share.Enums.Order.EScreenStatus.Refuse;
+			if (orderScreen.Status == Share.Enums.Order.EScreenStatus.End)
+			{
+				var visitDetail = await _orderVisitedDetailRepository.GetAsync(orderScreen.VisitDetailId, cancellationToken);
+				if (visitDetail != null) 
+				{
+					var screenSatisfy = new Kv() { Key = "6", Value = "甄别满意" };
+					visitDetail.OrgProcessingResults = screenSatisfy;
+					visitDetail.OrgHandledAttitude = screenSatisfy;
+					await _orderVisitedDetailRepository.UpdateAsync(visitDetail, cancellationToken);
+				}
+			}
+			orderScreen.ReplyContent = dto.ProvinceScreenResult.AuditOpinion;
+			if (dto.Files.Any())
+				orderScreen.FileJson =
+					await _fileRepository.AddFileAsync(dto.Files, orderScreen.Id, "", cancellationToken);
+			await _orderScreenRepository.UpdateAsync(orderScreen, cancellationToken);
+		}
 
         /// <summary>
         /// 更新工单受理附件
@@ -92,8 +196,12 @@ namespace Hotline.Application.Subscribers
         [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderUpdataFiles)]
         public async Task RecOrderUpdataFilesAsync(OrderUpdataFiles dto, CancellationToken cancellationToken)
         {
-
-        }
+	        if (dto == null && dto.Files.Any())
+	        {
+		        var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
+		        order.FileJson = await _fileRepository.AddFileAsync(dto.Files, dto.OrderId, "", cancellationToken);
+	        }
+		}
 
         /// <summary>
         /// 工单回访

+ 0 - 5
src/Hotline.Share/Dtos/Order/OrderScreenDto.cs

@@ -255,10 +255,5 @@ namespace Hotline.Share.Dtos.Order
 		/// 行政区划代码
 		/// </summary>
 		public string AreaCode { get; set; }
-
-		/// <summary>
-		/// 材料标识
-		/// </summary>
-		public string CliengGuid { get; set; }
 	}
 }

+ 2 - 2
src/Hotline.Share/Dtos/Order/OrderSuperviseDto.cs

@@ -154,9 +154,9 @@ namespace Hotline.Share.Dtos.Order
 		public string AreaCode { get; set; }
 
 		/// <summary>
-		/// 材料标识
+		/// 附件列表
 		/// </summary>
-		public string CliengGuid { get; set; }
+		public List<FileDto> Files { get; set; } = new();
 	}
 	public class PublishSuperviseDto
 	{

+ 2 - 2
src/Hotline.Share/Dtos/Order/OrderUrgeDto.cs

@@ -115,9 +115,9 @@ namespace Hotline.Share.Dtos.Order
 		public string AreaCode { get; set; }
 
 		/// <summary>
-		/// 材料标识
+		/// 附件列表
 		/// </summary>
-		public string CliengGuid { get; set; }
+		public List<FileDto> Files { get; set; } = new();
 	}
 	public class PublishUrgeDto
 	{

+ 5 - 1
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -1,5 +1,6 @@
 using Hotline.FlowEngine.Definitions;
 using Hotline.FlowEngine.WorkflowModules;
+using Hotline.Settings;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Settings;
@@ -167,5 +168,8 @@ namespace Hotline.FlowEngine.Workflows
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
         Task<Workflow> TerminalCountersignAsync(string countersignId, CancellationToken cancellationToken);
-    }
+
+        Task<List<SystemOrganize>> GetCurrentHandOrganizeAsync(string workflowId, CancellationToken cancellationToken);
+
+	}
 }

+ 6 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -849,9 +849,13 @@ namespace Hotline.FlowEngine.Workflows
             return startStep;
         }
 
-        #region private method
+        public Task<List<SystemOrganize>> GetCurrentHandOrganizeAsync(string workflowId, CancellationToken cancellationToken) {
+            return  Task.FromResult(new List<SystemOrganize>());
+        }
+
+		#region private method
 
-        public async Task<WorkflowStep> CreateStartStepAsync(Workflow workflow, StepDefine startStepDefine,
+		public async Task<WorkflowStep> CreateStartStepAsync(Workflow workflow, StepDefine startStepDefine,
             BasicWorkflowDto dto,
             List<Kv> handles, EWorkflowTraceStatus traceStatus, CancellationToken cancellationToken)
         {

+ 1 - 1
src/Hotline/Orders/OrderSupervise.cs

@@ -25,7 +25,7 @@ namespace Hotline.Orders {
 		/// 被督办部门ID
 		/// </summary>
 		[SugarColumn(ColumnDescription = "被督办部门ID")]
-		public string OrgId { get; set; }
+		public string? OrgId { get; set; }
 
 		/// <summary>
 		/// 被督办部门名称

+ 1 - 1
src/Hotline/Orders/OrderUrge.cs

@@ -55,7 +55,7 @@ namespace Hotline.Orders {
 		/// 催办回复时限
 		/// </summary>
 		[SugarColumn(ColumnDescription = "催办回复时限")]
-		public DateTime ReplyLimitTime { get; set; }
+		public DateTime? ReplyLimitTime { get; set; }
 
 		/// <summary>
 		/// 催办申请内容