Prechádzať zdrojové kódy

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

xf 1 mesiac pred
rodič
commit
bed297a497

+ 61 - 14
src/Hotline.Api/Controllers/OrderController.cs

@@ -35,6 +35,7 @@ using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Article;
 using Hotline.Share.Dtos.CallCenter;
+using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Order;
@@ -2782,8 +2783,10 @@ public class OrderController : BaseController
     [HttpGet("screen/{workflowId}/nextsteps")]
     public async Task<NextStepsDto> OrderScreenNextsteps(string workflowId)
     {
-        var workflow = await _workflowRepository.GetAsync(workflowId, HttpContext.RequestAborted);
-        if (workflow != null)
+		var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, withDefine: true, withSteps: true,  cancellationToken: HttpContext.RequestAborted);
+		var currentStep =
+			workflow.Steps.FirstOrDefault(d => d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
+		if (workflow != null)
         {
             var orderScreen = await _orderScreenRepository.Queryable().Includes(x => x.Order).Where(x => x.Id == workflow.ExternalId)
                 .FirstAsync(HttpContext.RequestAborted);
@@ -2805,8 +2808,8 @@ public class OrderController : BaseController
                         result.Steps.Remove(result.Steps.First(x => x.Value == "中心班长"));
                     }
                 }
-
-                return result;
+				result.IsPickFile = _appOptions.Value.IsYiBin && currentStep.Name == "中心领导";
+				return result;
             }
         }
 
@@ -2918,16 +2921,60 @@ public class OrderController : BaseController
             .Where(x => x.Id == dto.Id).ExecuteCommandAsync();
     }
 
-    #endregion
-
-    #region 工单督办
-
-    /// <summary>
-    /// 工单督办列表
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <returns></returns>
-    [HttpGet("supervise")]
+	/// <summary>
+	/// 获取工单甄别所有文件
+	/// </summary>
+	/// <param name="id"></param>
+	/// <returns></returns>
+	[HttpGet("screen/all_file/{id}")]
+	public async Task<List<FileDto>> GetOrderScreenAllFile(string id)
+	{
+		var screen = await _orderScreenRepository.GetAsync(id);
+		var steps = await _workflowStepRepository.Queryable().Where(x => x.WorkflowId == screen.WorkflowId).ToListAsync();
+		var allFiles = new List<FileDto>();
+		if (screen != null)
+		{
+			var ids = screen.FileJson.Select(x => x.Id).ToList();
+			allFiles = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
+		}
+		foreach (var step in steps)
+		{
+            if (step.FileJson != null &&  step.FileJson.Any())
+            {
+				var ids = step.FileJson.Select(x => x.Id).ToList();
+				var stepFiles = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
+				allFiles.AddRange(stepFiles);
+			}
+		}
+		return allFiles;
+	}
+
+	/// <summary>
+	/// 甄别审批办理
+	/// </summary>
+	[HttpPost("screen/next")]
+	[LogFilterAlpha("甄别审批办理")]
+	public async Task Next([FromBody] OrderScreenNextWorkflowDto dto)
+	{
+        if (dto.ProvinceFiles.Any())
+        {
+            var fileJson = await _fileRepository.AddFileAsync(dto.ProvinceFiles, dto.ScreenId, "", HttpContext.RequestAborted);
+            await _orderScreenRepository.Updateable().SetColumns(x => new OrderScreen { ProvinceFileJson = fileJson }).ExecuteCommandAsync(HttpContext.RequestAborted);
+		}
+		await _workflowDomainService.NextAsync(dto, cancellationToken: HttpContext.RequestAborted);
+	}
+
+
+	#endregion
+
+	#region 工单督办
+
+	/// <summary>
+	/// 工单督办列表
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	[HttpGet("supervise")]
     public async Task<PagedDto<SuperviseOrderDto>> SuperviseList([FromQuery] SuperviseListDto dto)
     {
         var (total, items) = await _orderSuperviseRepository.Queryable()

+ 2 - 2
src/Hotline.Application/Identity/IdentityAppService.cs

@@ -294,10 +294,10 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
             var scheduling = await _schedulingRepository.Queryable()
                 .Includes(x => x.SchedulingUser)
                 .Where(x => x.SchedulingTime == time &&
-                            (x.AtWork == true || x.AtWork == null) &&
+                            //(x.AtWork == true || x.AtWork == null) &&
                             x.SchedulingUser.UserId == id)
                 .OrderBy(x => x.SendOrderNum).FirstAsync(cancellationToken);
-            if (scheduling != null)
+            if (scheduling != null && (!scheduling.AtWork.HasValue || scheduling.AtWork == false))
             {
                 scheduling.AtWork = true;
                 //执行登录平均派单

+ 15 - 4
src/Hotline.Application/Orders/Handlers/OrderScreenHandler/OrderScreenNextWorkflowHandler.cs

@@ -1,5 +1,6 @@
 using DotNetCore.CAP;
 using Hotline.Configurations;
+using Hotline.File;
 using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.Orders;
@@ -8,6 +9,7 @@ using Hotline.Share.Enums.Order;
 using Hotline.Share.Mq;
 using MapsterMapper;
 using MediatR;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Options;
 using XF.Domain.Authentications;
 using XF.Domain.Extensions;
@@ -22,14 +24,16 @@ public class OrderScreenNextWorkflowHandler : INotificationHandler<NextStepNotif
     private readonly ISessionContext _sessionContext;
     private readonly IRepository<OrderScreenDetail> _orderScreenDetailRepository;
     private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
+	private readonly IFileRepository _fileRepository;
 
-    public OrderScreenNextWorkflowHandler(
+	public OrderScreenNextWorkflowHandler(
         ICapPublisher capPublisher,
         IMapper mapper,
         IOrderScreenRepository orderScreenRepository,
         ISessionContext sessionContext,
         IOptionsSnapshot<AppConfiguration> appOptions,
-        IRepository<OrderScreenDetail> orderScreenDetailRepository)
+        IRepository<OrderScreenDetail> orderScreenDetailRepository,
+		IFileRepository fileRepository)
     {
         _capPublisher = capPublisher;
         _mapper = mapper;
@@ -37,7 +41,9 @@ public class OrderScreenNextWorkflowHandler : INotificationHandler<NextStepNotif
         _sessionContext = sessionContext;
         _orderScreenDetailRepository = orderScreenDetailRepository;
         _appOptions = appOptions;
-    }
+		_fileRepository = fileRepository;
+
+	}
 
     /// <summary>Handles a notification</summary>
     /// <param name="notification">The notification</param>
@@ -75,7 +81,12 @@ public class OrderScreenNextWorkflowHandler : INotificationHandler<NextStepNotif
                                 if (_appOptions.Value.IsYiBin)
                                 {
                                     screenDto.Content = notification.Dto.Opinion;
-                                    screenDto.Files = new List<Share.Dtos.File.FileDto>();
+									screenDto.Files = new List<Share.Dtos.File.FileDto>();
+									if (screenDto.ProvinceFileJson.Any())
+                                    {
+                                        var fileIds = screenDto.ProvinceFileJson.Select(x => x.Id).ToList();
+										screenDto.Files = await _fileRepository.GetFilesAsync(fileIds, cancellationToken);
+									}
                                 }
 								if (_appOptions.Value.IsLuZhou)
 								{

+ 5 - 0
src/Hotline.Share/Dtos/FlowEngine/NextStepsDto.cs

@@ -103,6 +103,11 @@ public class NextStepsWithOpinionDto<TSteps> : NextStepsDto<TSteps>
     /// </summary>
     public bool? IsAlterDay { get; set; }
 
+	/// <summary>
+	/// 宜宾需求:是否需要选择文件
+	/// </summary>
+	public bool? IsPickFile { get; set; }
+
 	#region 随手拍
 	/// <summary>
 	/// 线索分类

+ 16 - 1
src/Hotline.Share/Dtos/FlowEngine/Workflow/NextWorkflowDto.cs

@@ -1,4 +1,6 @@
-namespace Hotline.Share.Dtos.FlowEngine.Workflow;
+using Hotline.Share.Dtos.File;
+
+namespace Hotline.Share.Dtos.FlowEngine.Workflow;
 
 /// <summary>
 /// 办理参数
@@ -25,4 +27,17 @@ public class NextWorkflowDto<TData>
     /// 流程数据
     /// </summary>
     public NextWorkflowDto Workflow { get; set; }
+}
+
+public class OrderScreenNextWorkflowDto : NextWorkflowDto {
+
+	/// <summary>
+	/// 省附件
+	/// </summary>
+	public List<FileDto> ProvinceFiles { get; set; } = new();
+
+	/// <summary>
+	/// 甄别申请id
+	/// </summary>
+	public string ScreenId { get; set; } 
 }

+ 11 - 4
src/Hotline.Share/Dtos/Order/OrderScreenDto.cs

@@ -250,10 +250,17 @@ namespace Hotline.Share.Dtos.Order
 
         public List<FileDto> Files { get; set; }
 
-        /// <summary>
-        /// 甄别耗时
-        /// </summary>
-        public decimal? TimeConsuming { get; set; }
+		/// <summary>
+		/// 附件
+		/// </summary>
+		public List<FileJson>? ProvinceFileJson { get; set; } = new();
+
+		public List<FileDto> ProvinceFiles { get; set; }
+
+		/// <summary>
+		/// 甄别耗时
+		/// </summary>
+		public decimal? TimeConsuming { get; set; }
 
         public string TimeConsuminText => TimeConsuming.HasValue ? TimeConsuming.ToString() + "天" : "-";
         /// <summary>

+ 5 - 0
src/Hotline/Orders/OrderScreen.cs

@@ -137,6 +137,11 @@ namespace Hotline.Orders
         [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
         public List<FileJson>? FileJson { get; set; }
 
+		/// <summary>
+		/// 上传省平台附件
+		/// </summary>
+		[SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+		public List<FileJson>? ProvinceFileJson { get; set; }
 
 		/// <summary>
 		/// 甄别耗时