Просмотр исходного кода

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

xf 2 недель назад
Родитель
Сommit
93b3dddf84

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

@@ -601,7 +601,7 @@ namespace Hotline.Api.Controllers
                             }
                             catch (Exception e)
                             {
-                                _logger.LogError($"写入智能质检异常!, \r\n{e.Message}");
+                                _logger.LogError($"写入智能质检异常2!, \r\n{e.Message}");
                             }
 
                         }

+ 258 - 251
src/Hotline.Api/Controllers/OrderTerminateController.cs

@@ -28,285 +28,292 @@ using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Requests;
 using Hotline.Tools;
+using Hotline.Configurations;
+using Microsoft.Extensions.Options;
 
 namespace Hotline.Api.Controllers
 {
-	/// <summary>
-	/// 终止管理
-	/// </summary>
-	public class OrderTerminateController : BaseController
-	{
-		private readonly ISessionContext _sessionContext;
-		private readonly IMapper _mapper;
-		private readonly IFileRepository _fileRepository;
-		private readonly IWorkflowApplication _workflowApplication;
-		private readonly IRepository<Workflow> _workflowRepository;
-		private readonly IWorkflowDomainService _workflowDomainService;
-		private readonly IOrderRepository _orderRepository;
-		private readonly IOrderDomainService _orderDomainService;
-		private readonly IOrderTerminateRepository _orderTerminateRepository;
-		private readonly IOrderApplication _orderApplication;
+    /// <summary>
+    /// 终止管理
+    /// </summary>
+    public class OrderTerminateController : BaseController
+    {
+        private readonly ISessionContext _sessionContext;
+        private readonly IMapper _mapper;
+        private readonly IFileRepository _fileRepository;
+        private readonly IWorkflowApplication _workflowApplication;
+        private readonly IRepository<Workflow> _workflowRepository;
+        private readonly IWorkflowDomainService _workflowDomainService;
+        private readonly IOrderRepository _orderRepository;
+        private readonly IOrderDomainService _orderDomainService;
+        private readonly IOrderTerminateRepository _orderTerminateRepository;
+        private readonly IOrderApplication _orderApplication;
+        private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
 
-		public OrderTerminateController(
-			ISessionContext sessionContext,
-			IMapper mapper,
-			IFileRepository fileRepository,
-			IWorkflowApplication workflowApplication,
-			IRepository<Workflow> workflowRepository,
-			IWorkflowDomainService workflowDomainService,
-			IOrderRepository orderRepository,
-			IOrderDomainService orderDomainService,
-			IOrderTerminateRepository orderTerminateRepository,
-			IOrderApplication orderApplication
-			) 
-		{ 
-			_sessionContext = sessionContext;
-			_mapper = mapper;
-			_fileRepository = fileRepository;
-			_workflowApplication = workflowApplication;
-			_workflowRepository = workflowRepository;
-			_workflowDomainService = workflowDomainService;
-			_orderRepository = orderRepository;
-			_orderDomainService = orderDomainService;
-			_orderTerminateRepository = orderTerminateRepository;
-			_orderApplication= orderApplication;
-		}
+        public OrderTerminateController(
+            ISessionContext sessionContext,
+            IMapper mapper,
+            IFileRepository fileRepository,
+            IWorkflowApplication workflowApplication,
+            IRepository<Workflow> workflowRepository,
+            IWorkflowDomainService workflowDomainService,
+            IOrderRepository orderRepository,
+            IOrderDomainService orderDomainService,
+            IOrderTerminateRepository orderTerminateRepository,
+            IOrderApplication orderApplication,
+             IOptionsSnapshot<AppConfiguration> appOptions
+            )
+        {
+            _sessionContext = sessionContext;
+            _mapper = mapper;
+            _fileRepository = fileRepository;
+            _workflowApplication = workflowApplication;
+            _workflowRepository = workflowRepository;
+            _workflowDomainService = workflowDomainService;
+            _orderRepository = orderRepository;
+            _orderDomainService = orderDomainService;
+            _orderTerminateRepository = orderTerminateRepository;
+            _orderApplication = orderApplication;
+            _appOptions = appOptions;
 
-		/// <summary>
-		/// 工单终止待申请列表
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpGet("may-terminate")]
-		public async Task<PagedDto<OrderDto>> MayOrderTerminateList([FromQuery] OrderTerminateListDto dto)
-		{
-			var isAdmin = _orderDomainService.IsCheckAdmin();
-			var (total, items) =await _orderRepository.Queryable(isAdmin:isAdmin)
-				.Includes(d=>d.OrderTerminates)
-				.Where(d=> SqlFunc.Subqueryable<OrderTerminate>().Where(t=> t.OrderId  == d.Id && t.Status != ETerminateStatus.SendBackStart).NotAny())
-				.Where(d => d.Status >= EOrderStatus.Filed && d.ActualHandleOrgCode.StartsWith(_sessionContext.OrgId))
-				.WhereIF(!string.IsNullOrEmpty(dto.No),d=>d.No!.Contains(dto.No!))
-				.WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title!.Contains(dto.Title!))
-				.WhereIF(dto.ApplyStartTime.HasValue && dto.ApplyEndTime.HasValue,
-					d => d.OrderTerminates.Any(t=>t.CreationTime >= dto.ApplyStartTime && t.CreationTime<= dto.ApplyEndTime))
-				.WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue,d=>d.StartTime >= dto.StartTime && d.StartTime <= dto.EndTime)
-				.OrderByDescending(d => d.StartTime)
-				.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
-			return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
-		}
+        }
 
+        /// <summary>
+        /// 工单终止待申请列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("may-terminate")]
+        public async Task<PagedDto<OrderDto>> MayOrderTerminateList([FromQuery] OrderTerminateListDto dto)
+        {
+            var isAdmin = _orderDomainService.IsCheckAdmin();
+            var (total, items) = await _orderRepository.Queryable(isAdmin: isAdmin)
+                .Includes(d => d.OrderTerminates)
+                .WhereIF(_appOptions.Value.IsZiGong, d => d.Source != ESource.ProvinceStraight)//自贡任务  495 终止申请页面只显示市工单
+                .Where(d => SqlFunc.Subqueryable<OrderTerminate>().Where(t => t.OrderId == d.Id && t.Status != ETerminateStatus.SendBackStart).NotAny())
+                .Where(d => d.Status >= EOrderStatus.Filed && d.ActualHandleOrgCode.StartsWith(_sessionContext.OrgId))
+                .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No!.Contains(dto.No!))
+                .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title!.Contains(dto.Title!))
+                .WhereIF(dto.ApplyStartTime.HasValue && dto.ApplyEndTime.HasValue,
+                    d => d.OrderTerminates.Any(t => t.CreationTime >= dto.ApplyStartTime && t.CreationTime <= dto.ApplyEndTime))
+                .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, d => d.StartTime >= dto.StartTime && d.StartTime <= dto.EndTime)
+                .OrderByDescending(d => d.StartTime)
+                .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+            return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+        }
 
-		/// <summary>
-		/// 工单终止列表
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpGet]
-		public async Task<PagedDto<OrderTerminateEntityDto>> OrderTerminateList([FromQuery] OrderTerminateListDto dto)
-		{
-			var (total, items) = await _orderApplication.OrderTerminateList(dto)
-				.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
-			return new PagedDto<OrderTerminateEntityDto>(total, _mapper.Map<IReadOnlyList<OrderTerminateEntityDto>>(items));
-		}
 
-		/// <summary>
-		/// 工单终止列表导出
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
+        /// <summary>
+        /// 工单终止列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<PagedDto<OrderTerminateEntityDto>> OrderTerminateList([FromQuery] OrderTerminateListDto dto)
+        {
+            var (total, items) = await _orderApplication.OrderTerminateList(dto)
+                .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+            return new PagedDto<OrderTerminateEntityDto>(total, _mapper.Map<IReadOnlyList<OrderTerminateEntityDto>>(items));
+        }
 
-		[HttpPost("export")]
-		public async Task<FileStreamResult> OrderTerminateListExport([FromBody] ExportExcelDto<OrderTerminateListDto> dto)
-		{
-			var query = _orderApplication.OrderTerminateList(dto.QueryDto);
-			List<OrderTerminate> data;
-			if (dto.IsExportAll)
-			{
-				data = await query.ToListAsync(HttpContext.RequestAborted);
-			}
-			else
-			{
-				var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
-				data = items;
-			}
+        /// <summary>
+        /// 工单终止列表导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
 
-			var dataDtos = _mapper.Map<ICollection<OrderTerminateEntityDto>>(data);
+        [HttpPost("export")]
+        public async Task<FileStreamResult> OrderTerminateListExport([FromBody] ExportExcelDto<OrderTerminateListDto> dto)
+        {
+            var query = _orderApplication.OrderTerminateList(dto.QueryDto);
+            List<OrderTerminate> data;
+            if (dto.IsExportAll)
+            {
+                data = await query.ToListAsync(HttpContext.RequestAborted);
+            }
+            else
+            {
+                var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+                data = items;
+            }
 
-			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<OrderTerminateEntityDto>(dto.ColumnInfos);
+            var dataDtos = _mapper.Map<ICollection<OrderTerminateEntityDto>>(data);
 
-			var dtos = dataDtos
-				.Select(stu => _mapper.Map(stu, typeof(OrderTerminateEntityDto), dynamicClass))
-				.Cast<object>()
-				.ToList();
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<OrderTerminateEntityDto>(dto.ColumnInfos);
 
-			var stream = ExcelHelper.CreateStream(dtos);
+            var dtos = dataDtos
+                .Select(stu => _mapper.Map(stu, typeof(OrderTerminateEntityDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
 
-			return ExcelStreamResult(stream, "工单终止列表");
-		}
+            var stream = ExcelHelper.CreateStream(dtos);
 
+            return ExcelStreamResult(stream, "工单终止列表");
+        }
 
-		/// <summary>
-		/// 开始工单终止流程
-		/// </summary>
-		[HttpPost("startflow")]
-		[LogFilter("开始工单终止流程")]
-		public async Task StartFlow([FromBody] StartWorkflowDto<OrderTerminateDto> dto)
-		{
-			var screenAny = await _orderTerminateRepository.AnyAsync(x =>
-				x.OrderId == dto.Data.OrderId && x.Status == ETerminateStatus.Approval);
-			if (screenAny)
-				throw UserFriendlyException.SameMessage("该工单已提起终止申请,正在审批过程中,不能申请");
 
-			var isNoPass = await _orderTerminateRepository.AnyAsync(x => x.Status ==  ETerminateStatus.Refuse && x.OrderId == dto.Data.OrderId);
-			if (isNoPass)
-				throw UserFriendlyException.SameMessage("该工单已被拒绝过终止申请,不能再次申请");
+        /// <summary>
+        /// 开始工单终止流程
+        /// </summary>
+        [HttpPost("startflow")]
+        [LogFilter("开始工单终止流程")]
+        public async Task StartFlow([FromBody] StartWorkflowDto<OrderTerminateDto> dto)
+        {
+            var screenAny = await _orderTerminateRepository.AnyAsync(x =>
+                x.OrderId == dto.Data.OrderId && x.Status == ETerminateStatus.Approval);
+            if (screenAny)
+                throw UserFriendlyException.SameMessage("该工单已提起终止申请,正在审批过程中,不能申请");
 
-			var model = _mapper.Map<OrderTerminate>(dto.Data);
-			model.Status = ETerminateStatus.Approval ;
-			model.InitId();
-			if (dto.Data.Files.Any())
-				model.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, model.Id, "", HttpContext.RequestAborted);
-			else
-				model.FileJson = new List<Share.Dtos.File.FileJson>();
-			await _orderTerminateRepository.AddAsync(model, HttpContext.RequestAborted);
-			try
-			{
-				var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
-				startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderTerminate;
-				startDto.Opinion = dto.Data.Content;
-				startDto.Title = "申请终止流程";
-				// await _workflowApplication.StartWorkflowAsync(startDto, model.Id, cancellationToken: HttpContext.RequestAborted);
-				// await _workflowDomainService.StartAsync(startDto, model.Id, cancellationToken: HttpContext.RequestAborted);
-				await _workflowDomainService.StartToFirstStepAsync(startDto, model.Id, cancellationToken: HttpContext.RequestAborted);
-			}
-			catch (Exception e)
-			{
-				await _orderTerminateRepository.RemoveAsync(model.Id);
-				model.Id = string.Empty;
-				throw new UserFriendlyException($"工单开启终止流程失败!, {e.Message}", "工单开启终止流程失败");
-			}
-		}
+            var isNoPass = await _orderTerminateRepository.AnyAsync(x => x.Status == ETerminateStatus.Refuse && x.OrderId == dto.Data.OrderId);
+            if (isNoPass)
+                throw UserFriendlyException.SameMessage("该工单已被拒绝过终止申请,不能再次申请");
 
+            var model = _mapper.Map<OrderTerminate>(dto.Data);
+            model.Status = ETerminateStatus.Approval;
+            model.InitId();
+            if (dto.Data.Files.Any())
+                model.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, model.Id, "", HttpContext.RequestAborted);
+            else
+                model.FileJson = new List<Share.Dtos.File.FileJson>();
+            await _orderTerminateRepository.AddAsync(model, HttpContext.RequestAborted);
+            try
+            {
+                var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
+                startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderTerminate;
+                startDto.Opinion = dto.Data.Content;
+                startDto.Title = "申请终止流程";
+                // await _workflowApplication.StartWorkflowAsync(startDto, model.Id, cancellationToken: HttpContext.RequestAborted);
+                // await _workflowDomainService.StartAsync(startDto, model.Id, cancellationToken: HttpContext.RequestAborted);
+                await _workflowDomainService.StartToFirstStepAsync(startDto, model.Id, cancellationToken: HttpContext.RequestAborted);
+            }
+            catch (Exception e)
+            {
+                await _orderTerminateRepository.RemoveAsync(model.Id);
+                model.Id = string.Empty;
+                throw new UserFriendlyException($"工单开启终止流程失败!, {e.Message}", "工单开启终止流程失败");
+            }
+        }
 
-		/// <summary>
-		/// 工单终止修改后下一步流程
-		/// </summary>
-		[HttpPost("initial_nextFlow")]
-		[LogFilter("办理工单终止流程")]
-		public async Task InitialNextFlow([FromBody] TerminateNextFlowDto dto)
-		{
-			var model = await _orderTerminateRepository.GetAsync(dto.Data.Id);
 
-			if (dto.Data.Files.Any())
-				model.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, model.Id, "", HttpContext.RequestAborted);
-			else
-				model.FileJson = new List<Share.Dtos.File.FileJson>();
+        /// <summary>
+        /// 工单终止修改后下一步流程
+        /// </summary>
+        [HttpPost("initial_nextFlow")]
+        [LogFilter("办理工单终止流程")]
+        public async Task InitialNextFlow([FromBody] TerminateNextFlowDto dto)
+        {
+            var model = await _orderTerminateRepository.GetAsync(dto.Data.Id);
 
-			model.Status = ETerminateStatus.Approval;
-			model.Content = dto.Data.Content;
-			model.IsRecommit = true;
-			await _orderTerminateRepository.UpdateAsync(model, HttpContext.RequestAborted);
-			try
-			{
-				dto.NextWorkflow.WorkflowId = model.WorkflowId;
-				await _workflowDomainService.NextAsync(dto.NextWorkflow, cancellationToken: HttpContext.RequestAborted);
-			}
-			catch (Exception e)
-			{
-				throw new UserFriendlyException($"工单终止下一步流程失败!, {e.Message}", "工单终止下一步流程失败");
-			}
-		}
+            if (dto.Data.Files.Any())
+                model.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, model.Id, "", HttpContext.RequestAborted);
+            else
+                model.FileJson = new List<Share.Dtos.File.FileJson>();
 
-		/// <summary>
-		/// 查询工单终止流程开启参数
-		/// </summary>
-		/// <returns></returns>
-		[HttpGet("screen/startflow")]
-		public async Task<NextStepsDto> GetTerminateFlowStartOptionsAsync()
-		{
-			return await _workflowApplication.GetStartStepsAsync(WorkflowModuleConsts.OrderTerminate,
-				HttpContext.RequestAborted);
-		}
+            model.Status = ETerminateStatus.Approval;
+            model.Content = dto.Data.Content;
+            model.IsRecommit = true;
+            await _orderTerminateRepository.UpdateAsync(model, HttpContext.RequestAborted);
+            try
+            {
+                dto.NextWorkflow.WorkflowId = model.WorkflowId;
+                await _workflowDomainService.NextAsync(dto.NextWorkflow, cancellationToken: HttpContext.RequestAborted);
+            }
+            catch (Exception e)
+            {
+                throw new UserFriendlyException($"工单终止下一步流程失败!, {e.Message}", "工单终止下一步流程失败");
+            }
+        }
 
-		/// <summary>
-		/// 查询工单终止流程参数
-		/// </summary>
-		/// <returns></returns>
-		[HttpGet("workflow/{id}")]
-		public async Task<string> GetTerminateWorkFlowAsync(string id)
-		{
-			var workflow = await _workflowRepository.Queryable().FirstAsync(x => x.ExternalId == id);
-			return workflow.Id;
-		}
+        /// <summary>
+        /// 查询工单终止流程开启参数
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("screen/startflow")]
+        public async Task<NextStepsDto> GetTerminateFlowStartOptionsAsync()
+        {
+            return await _workflowApplication.GetStartStepsAsync(WorkflowModuleConsts.OrderTerminate,
+                HttpContext.RequestAborted);
+        }
 
-		/// <summary>
-		///  甄别查询流程办理下一步可选节点
-		/// </summary>
-		/// <param name="workflowId"></param>
-		/// <returns></returns>
-		[HttpGet("{workflowId}/nextsteps")]
-		public async Task<NextStepsDto> OrderTerminateNextsteps(string workflowId)
-		{
-			return await _workflowApplication.GetNextStepsAsync(workflowId, HttpContext.RequestAborted);
-		}
+        /// <summary>
+        /// 查询工单终止流程参数
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("workflow/{id}")]
+        public async Task<string> GetTerminateWorkFlowAsync(string id)
+        {
+            var workflow = await _workflowRepository.Queryable().FirstAsync(x => x.ExternalId == id);
+            return workflow.Id;
+        }
 
-		/// <summary>
-		/// 终止详情
-		/// </summary>
-		/// <param name="id"></param>
-		/// <returns></returns>
-		[HttpGet("{id}")]
-		public async Task<OrderTerminateEntityDto> Entity(string id)
-		{
-			var model = await _orderTerminateRepository.Queryable()
-				.Includes(x => x.Order) 
-				.Includes(x => x.Workflow, d => d.Steps)
-				.FirstAsync(x => x.Id == id);
-			var rspModel = _mapper.Map<OrderTerminateEntityDto>(model);
-			rspModel.IsCanHandle = model.Workflow?.IsCanHandle(
-				_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles) ?? false;
-			if (model.Status ==  ETerminateStatus.SendBackStart)
-				rspModel.IsCanHandle = false;
-			rspModel.Handle = false;
-			if (!string.IsNullOrEmpty(rspModel.WorkflowId))
-			{
-				rspModel.Handle = await _workflowDomainService.CheckCurrentIsStartStepAsync(rspModel.WorkflowId, _sessionContext.RequiredUserId,
-					_sessionContext.RequiredOrgId, HttpContext.RequestAborted);
-			}
+        /// <summary>
+        ///  甄别查询流程办理下一步可选节点
+        /// </summary>
+        /// <param name="workflowId"></param>
+        /// <returns></returns>
+        [HttpGet("{workflowId}/nextsteps")]
+        public async Task<NextStepsDto> OrderTerminateNextsteps(string workflowId)
+        {
+            return await _workflowApplication.GetNextStepsAsync(workflowId, HttpContext.RequestAborted);
+        }
 
-			if (rspModel.FileJson != null && rspModel.FileJson.Any())
-			{
-				var ids = rspModel.FileJson.Select(x => x.Id).ToList();
-				rspModel.Files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
-			}
-			return rspModel;
-		}
+        /// <summary>
+        /// 终止详情
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpGet("{id}")]
+        public async Task<OrderTerminateEntityDto> Entity(string id)
+        {
+            var model = await _orderTerminateRepository.Queryable()
+                .Includes(x => x.Order)
+                .Includes(x => x.Workflow, d => d.Steps)
+                .FirstAsync(x => x.Id == id);
+            var rspModel = _mapper.Map<OrderTerminateEntityDto>(model);
+            rspModel.IsCanHandle = model.Workflow?.IsCanHandle(
+                _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles) ?? false;
+            if (model.Status == ETerminateStatus.SendBackStart)
+                rspModel.IsCanHandle = false;
+            rspModel.Handle = false;
+            if (!string.IsNullOrEmpty(rspModel.WorkflowId))
+            {
+                rspModel.Handle = await _workflowDomainService.CheckCurrentIsStartStepAsync(rspModel.WorkflowId, _sessionContext.RequiredUserId,
+                    _sessionContext.RequiredOrgId, HttpContext.RequestAborted);
+            }
 
-		/// <summary>
-		/// 列表页面基础数据
-		/// </summary>
-		/// <returns></returns>
-		[HttpGet("base")]
-		public async Task<object> BaseData()
-		{
-			var rsp = new
-			{
-				Status = EnumExts.GetDescriptions<ETerminateStatus>(),
-			};
-			return rsp;
-		}
+            if (rspModel.FileJson != null && rspModel.FileJson.Any())
+            {
+                var ids = rspModel.FileJson.Select(x => x.Id).ToList();
+                rspModel.Files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
+            }
+            return rspModel;
+        }
 
-		/// <summary>
-		/// 终止修改理由
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpPut("update_content")]
-		[LogFilter("终止修改理由")]
-		public async Task Update([FromBody] OrderTerminateContentDto dto)
-		{
-			await _orderTerminateRepository.Updateable().SetColumns(x => new OrderTerminate { Content = dto.Content }).Where(x => x.Id == dto.Id).ExecuteCommandAsync();
-		}
+        /// <summary>
+        /// 列表页面基础数据
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("base")]
+        public async Task<object> BaseData()
+        {
+            var rsp = new
+            {
+                Status = EnumExts.GetDescriptions<ETerminateStatus>(),
+            };
+            return rsp;
+        }
 
-	}
+        /// <summary>
+        /// 终止修改理由
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPut("update_content")]
+        [LogFilter("终止修改理由")]
+        public async Task Update([FromBody] OrderTerminateContentDto dto)
+        {
+            await _orderTerminateRepository.Updateable().SetColumns(x => new OrderTerminate { Content = dto.Content }).Where(x => x.Id == dto.Id).ExecuteCommandAsync();
+        }
+
+    }
 }

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

@@ -757,7 +757,7 @@ namespace Hotline.Api.Controllers
                     }
                     catch (Exception e)
                     {
-                        _logger.LogError($"写入智能质检异常!, \r\n{e.Message}");
+                        _logger.LogError($"写入智能质检异常3!, \r\n{e.Message}");
                     }
                 }
                 await _qualitey.UpdateAsync(quality, HttpContext.RequestAborted);

+ 3 - 2
src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs

@@ -281,8 +281,9 @@ public class SnapshotController : BaseController
     /// <returns></returns>
     [HttpGet("wait_accept_count")]
     public async Task<int> GetSnapshotWaitForAcceptCountAsync()
-        => await _orderRepository
-            .CountAsync(m => m.SourceChannelCode == "ZGSSP" && m.Status == Share.Enums.Order.EOrderStatus.WaitForAccept);
+    { return 0; }
+    //=> await _orderRepository
+    //        .CountAsync(m => m.SourceChannelCode == "ZGSSP" && m.Status == Share.Enums.Order.EOrderStatus.WaitForAccept);
 
     /// <summary>
     /// 获取区域

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

@@ -193,14 +193,14 @@ namespace Hotline.Application.Quality
                     var audioFile = string.Empty;
                     var fromNo = string.Empty;
                     DateTime? callStartTime = null;
-                    if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.TianRun)
+                    if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.TianRun && !string.IsNullOrEmpty(order.CallId))
                     {
                         var call = await _callApplication.GetTianrunCallAsync(order.CallId, cancellationToken);
                         audioFile = call.RecordingAbsolutePath;
                         fromNo = call.CPN;
                         callStartTime = call.CreatedTime;
                     }
-                    else if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.XingTang)
+                    else if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.XingTang && !string.IsNullOrEmpty(order.CallId))
                     {
                         var call = await _callApplication.GetCallAsync(order.CallId, cancellationToken);
                         audioFile = call.AudioFile;
@@ -222,7 +222,7 @@ namespace Hotline.Application.Quality
                 }
                 catch (Exception e)
                 {
-                    _logger.LogError($"写入智能质检异常!, \r\n{e.Message}");
+                    _logger.LogError($"写入智能质检异常1!, \r\n{e.Message}");
                 }
             }
 

+ 1 - 1
src/Hotline.Application/Snapshot/RedPackApplication.cs

@@ -366,7 +366,7 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
         var has = await _supplementRecordRepository.Queryable()
             .Where(m => specialRedPackAuditIds.Contains(m.RedPackAuditId))
             .AnyAsync();
-        if (has) throw new UserFriendlyException("该工单已发放红包,不能撤销审批");
+        if (has) throw UserFriendlyException.SameMessage("该工单已发放红包,不能撤销审批");
         await _specialRedPackAuditRepository.Removeable()
             .Where(m => specialRedPackAuditIds.Contains(m.Id))
             .ExecuteCommandAsync();