Kaynağa Gözat

visit update order

xf 1 yıl önce
ebeveyn
işleme
1413cb8a39

+ 20 - 16
src/Hotline.Api/Controllers/OrderController.cs

@@ -54,7 +54,7 @@ public class OrderController : BaseController
     private readonly IOrderDelayRepository _orderDelayRepository;
     private readonly ITimeLimitApplication _timeLimitApplication;
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
-    private readonly IOrderRedoRecordRepository _orderRedoRecordRepository;
+    private readonly IOrderRedoRepository _orderRedoRepository;
 
     public OrderController(
         IOrderDomainService orderDomainService,
@@ -76,7 +76,7 @@ public class OrderController : BaseController
         IOrderDelayRepository orderDelayRepository,
         ITimeLimitApplication timeLimitApplication,
         ISystemSettingCacheManager systemSettingCacheManager,
-        IOrderRedoRecordRepository orderRedoRecordRepository)
+        IOrderRedoRepository orderRedoRepository)
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -97,7 +97,7 @@ public class OrderController : BaseController
         _orderDelayRepository = orderDelayRepository;
         _timeLimitApplication = timeLimitApplication;
         _systemSettingCacheManager = systemSettingCacheManager;
-        _orderRedoRecordRepository = orderRedoRecordRepository;
+        _orderRedoRepository = orderRedoRepository;
     }
 
     #region 工单发布
@@ -295,7 +295,10 @@ public class OrderController : BaseController
     [HttpPost("visit")]
     public async Task Visit([FromBody]VisitDto dto)
     {
-        var visit = await _orderVisitedRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+        //var visit = await _orderVisitedRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+        var visit = await _orderVisitedRepository.Queryable()
+            .Includes(d => d.Order)
+            .FirstAsync(d => d.Id == dto.Id, HttpContext.RequestAborted);
         if (visit is null)
             throw UserFriendlyException.SameMessage("未知回访信息");
 
@@ -314,16 +317,17 @@ public class OrderController : BaseController
         visit.AgainState = dto.IsAgain? EAgainState.NeedAgain : EAgainState.NoAgain;
         visit.EmployeeId = _sessionContext.UserId;
         visit.NowEvaluate = first.OrgProcessingResults;
-        if (visit.FirstEvaluate is null)
-        {
-            visit.FirstEvaluate = first.OrgProcessingResults;
-        }
-        await _orderVisitedRepository.UpdateAsync(visit,HttpContext.RequestAborted);
+        //await _orderVisitedRepository.UpdateAsync(visit,HttpContext.RequestAborted);
+        
+        //update order
+        visit.Order.Visited(first.OrgProcessingResults.Id, first.OrgProcessingResults.Name);
 
         //更新明細
-        var visitDetails = _mapper.Map <List<OrderVisitDetail>>(dto.VisitDetails);
+        //var visitDetails = _mapper.Map <List<OrderVisitDetail>>(dto.VisitDetails);
+        //await _orderVisitedDetailRepository.UpdateRangeAsync(visitDetails, HttpContext.RequestAborted);
+        visit.VisitDetails = _mapper.Map<List<OrderVisitDetail>>(dto.VisitDetails);
 
-        await _orderVisitedDetailRepository.UpdateRangeAsync(visitDetails, HttpContext.RequestAborted);
+        _orderVisitedRepository.UpdateNav(visit);
 
         //推省上
         //_capPublisher.Publish(EventNames.HotlineOrderSubmitVisitInfo,new PublishVisitDto(){ OrderDto = null,NowVisit = null,FirstVisit=null })
@@ -340,16 +344,16 @@ public class OrderController : BaseController
     /// <returns></returns>
     [Permission(EPermission.QueryOrderRedoRecord)]
     [HttpGet("order-redorecord-list")]
-    public async Task<PagedDto<OrderRedoRecord>> QueryOrderRedoRecord([FromQuery]QueryOrderRedoRecordDto dto)
+    public async Task<PagedDto<OrderRedo>> QueryOrderRedoRecord([FromQuery]QueryOrderRedoRecordDto dto)
     {
-        var (total,items) = await _orderRedoRecordRepository.Queryable()
+        var (total,items) = await _orderRedoRepository.Queryable()
             .Includes(x => x.Order)
             .Includes(x => x.Employee)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
             .OrderByDescending(x => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
-        return new PagedDto<OrderRedoRecord>(total, items);
+        return new PagedDto<OrderRedo>(total, items);
     }
 
     /// <summary>
@@ -359,9 +363,9 @@ public class OrderController : BaseController
     /// <returns></returns>
     [Permission(EPermission.OrderRedoRecord)]
     [HttpGet("order-redorecord-entity/{id}")]
-    public async Task<OrderRedoRecord> OrderRedoRecord(string id)
+    public async Task<OrderRedo> OrderRedoRecord(string id)
     {
-        return await _orderRedoRecordRepository.Queryable()
+        return await _orderRedoRepository.Queryable()
             .Includes(x => x.Order)
             .Includes(x => x.Employee)
             .FirstAsync(x => x.Id == id);

+ 13 - 6
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -243,7 +243,7 @@ public class WorkflowController : BaseController
     }
 
     /// <summary>
-    /// 查询流程办理下一步选节点
+    /// 查询流程办理下一步选节点
     /// </summary>
     [HttpGet("{workflowId}/nextsteps")]
     public async Task<DefinedNextStepsDto> GetNextStepDefine(string workflowId)
@@ -304,7 +304,7 @@ public class WorkflowController : BaseController
     /// <returns></returns>
     [Permission(EPermission.FlowRecall)]
     [HttpGet("{workflowId}/recall")]
-    public async Task<DefinedNextStepsDto> GetRecallOptions(string workflowId)
+    public async Task<DefinedNextStepsDto> GetRecallSteps(string workflowId)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true, cancellationToken: HttpContext.RequestAborted);
         var stepCodes = workflow.StepBoxes.Where(d => d.StepType != EStepType.Start && d.StepType != EStepType.End)
@@ -330,12 +330,12 @@ public class WorkflowController : BaseController
     }
 
     /// <summary>
-    /// 获取跳转参数
+    /// 获取跳转可选节点
     /// </summary>
     /// <param name="workflowId"></param>
     /// <returns></returns>
     [HttpGet("{workflowId}/jump")]
-    public async Task<DefinedNextStepsDto> GetJumpOptions(string workflowId)
+    public async Task<DefinedNextStepsDto> GetJumpSteps(string workflowId)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true, cancellationToken: HttpContext.RequestAborted);
         var steps = workflow.Definition.Steps.Where(d => d.StepType != EStepType.Start && d.StepType != EStepType.End).ToList();
@@ -357,8 +357,15 @@ public class WorkflowController : BaseController
     public async Task Jump([FromBody] NextWorkflowDto dto)
     {
         await _workflowApplication.JumpAsync(dto, HttpContext.RequestAborted);
-        //var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, true, true, cancellationToken: HttpContext.RequestAborted);
-        //await _workflowDomainService.JumpAsync(workflow, dto, HttpContext.RequestAborted);
+    }
+
+    /// <summary>
+    /// 重办
+    /// </summary>
+    [HttpPost("redo")]
+    public async Task Redo([FromBody] NextWorkflowDto dto)
+    {
+        await _workflowApplication.RedoAsync(dto, HttpContext.RequestAborted);
     }
 
     /// <summary>

+ 5 - 0
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -29,6 +29,11 @@ namespace Hotline.Application.FlowEngine
         /// </summary>
         Task JumpAsync(NextWorkflowDto dto, CancellationToken cancellationToken);
 
+        /// <summary>
+        /// 重办
+        /// </summary>
+        Task RedoAsync(NextWorkflowDto dto, CancellationToken cancellationToken);
+
         /// <summary>
         /// 查询流程开始节点的下一节点配置
         /// </summary>

+ 11 - 1
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -161,6 +161,17 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         await _workflowDomainService.JumpAsync(workflow, dto, targetStepDefine, dto.IsStartCountersign, flowAssignMode, cancellationToken);
     }
 
+    /// <summary>
+    /// 重办
+    /// </summary>
+    public async Task RedoAsync(NextWorkflowDto dto, CancellationToken cancellationToken)
+    {
+        var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, true, true, cancellationToken: cancellationToken);
+        var targetStepDefine = _workflowDomainService.GetStepBoxDefine(workflow.Definition, dto.NextStepCode);
+        var flowAssignInfo = await GetFlowAssignModeAsync(targetStepDefine, dto.IsStartCountersign, dto.NextHandlers, cancellationToken);
+        await _workflowDomainService.RedoAsync(workflow, dto, targetStepDefine, flowAssignInfo, cancellationToken);
+    }
+
     public async Task<DefinedNextStepsDto> GetStartOptionsAsync(string moduleCode, CancellationToken cancellationToken)
     {
         var wfModule = await GetWorkflowModuleAsync(moduleCode, cancellationToken);
@@ -253,7 +264,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         return dto;
     }
 
-
     /// <summary>
     /// 查询指派办理人的处理方式及实际办理人
     /// </summary>

+ 66 - 0
src/Hotline.Application/Handlers/FlowEngine/RedoHandler.cs

@@ -0,0 +1,66 @@
+using DotNetCore.CAP;
+using Hotline.FlowEngine.Notifications;
+using Hotline.FlowEngine.WfModules;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Mq;
+using MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Orders;
+using MapsterMapper;
+
+namespace Hotline.Application.Handlers.FlowEngine
+{
+    public class RedoHandler : INotificationHandler<RedoNotify>
+    {
+        private readonly IOrderDomainService _orderDomainService;
+        private readonly IOrderRepository _orderRepository;
+        private readonly ICapPublisher _capPublisher;
+        private readonly IMapper _mapper;
+
+        public RedoHandler(
+            IOrderDomainService orderDomainService,
+            IOrderRepository orderRepository,
+            ICapPublisher capPublisher,
+            IMapper mapper)
+        {
+            _orderDomainService = orderDomainService;
+            _orderRepository = orderRepository;
+            _capPublisher = capPublisher;
+            _mapper = mapper;
+        }
+
+        /// <summary>Handles a notification</summary>
+        /// <param name="notification">The notification</param>
+        /// <param name="cancellationToken">Cancellation token</param>
+        public async Task Handle(RedoNotify notification, CancellationToken cancellationToken)
+        {
+            var workflow = notification.Workflow;
+            var data = notification.Dto;
+
+            switch (workflow.ModuleCode)
+            {
+                case WorkflowModuleConsts.OrderManage:
+                    var order = await _orderDomainService.GetOrderAsync(workflow.ExternalId, cancellationToken);
+                    _mapper.Map(workflow, order);
+                    await _orderRepository.UpdateAsync(order, cancellationToken);
+
+                    if (notification.IsOrgToCenter)
+                    {
+                        var dto = _mapper.Map<OrderDto>(order);
+                        await _capPublisher.PublishAsync(EventNames.HotlineOrderExpiredTimeUpdate, dto, cancellationToken: cancellationToken);
+                    }
+
+                    break;
+                case WorkflowModuleConsts.KnowledgeAdd:
+                case WorkflowModuleConsts.KnowledgeUpdate:
+                case WorkflowModuleConsts.KnowledgeDelete:
+                case WorkflowModuleConsts.TelRestApply:
+                    break;
+            }
+        }
+    }
+}

+ 0 - 14
src/Hotline.Repository.SqlSugar/Orders/OrderRedoRecordRepository.cs

@@ -1,14 +0,0 @@
-using Hotline.Orders;
-using Hotline.Repository.SqlSugar.DataPermissions;
-using SqlSugar;
-using XF.Domain.Dependency;
-
-namespace Hotline.Repository.SqlSugar.Orders
-{
-    public class OrderRedoRecordRepository : BaseRepository<OrderRedoRecord>, IOrderRedoRecordRepository, IScopeDependency
-    {
-        public OrderRedoRecordRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
-        {
-        }
-    }
-}

+ 14 - 0
src/Hotline.Repository.SqlSugar/Orders/OrderRedoRepository.cs

@@ -0,0 +1,14 @@
+using Hotline.Orders;
+using Hotline.Repository.SqlSugar.DataPermissions;
+using SqlSugar;
+using XF.Domain.Dependency;
+
+namespace Hotline.Repository.SqlSugar.Orders
+{
+    public class OrderRedoRepository : BaseRepository<OrderRedo>, IOrderRedoRepository, IScopeDependency
+    {
+        public OrderRedoRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+        {
+        }
+    }
+}

+ 2 - 0
src/Hotline/FlowEngine/Notifications/WorkflowNotify.cs

@@ -29,6 +29,8 @@ public record RecallNotify(Workflow Workflow, NextWorkflowDto Dto, bool IsOrgToC
 
 public record JumpNotify(Workflow Workflow, NextWorkflowDto Dto, FlowAssignInfo FlowAssignInfo, bool IsCenterToOrg, bool IsOrgToCenter) : INotification;
 
+public record RedoNotify(Workflow Workflow, NextWorkflowDto Dto, bool IsOrgToCenter) : INotification;
+
 public record EndWorkflowNotify(Workflow Workflow, WorkflowTrace Trace) : INotification;
 
 public record TerminalWorkflowNotify(Workflow Workflow) : INotification;

+ 6 - 0
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -55,6 +55,11 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         Task JumpAsync(Workflow workflow, NextWorkflowDto dto, StepDefine targetStepDefine, bool isStartCountersign, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
 
+        /// <summary>
+        /// 重办
+        /// </summary>
+        Task RedoAsync(Workflow workflow, NextWorkflowDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
+
         /// <summary>
         /// 补充
         /// </summary>
@@ -83,5 +88,6 @@ namespace Hotline.FlowEngine.Workflows
         /// 更新一级部门信息
         /// </summary>
         Task UpdateOrgLevelOneAsync(Workflow workflow, string orgCode, string orgName, CancellationToken cancellationToken);
+
     }
 }

+ 7 - 0
src/Hotline/FlowEngine/Workflows/Workflow.cs

@@ -565,6 +565,13 @@ public class Workflow : CreationEntity
        CenterToOrgTime = null;
     }
 
+    public void Redo()
+    {
+        ResetOption();
+        Status = EWorkflowStatus.Runnable;
+
+    }
+
     #endregion
 
 

+ 24 - 1
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -570,6 +570,29 @@ namespace Hotline.FlowEngine.Workflows
             await _mediator.Publish(new JumpNotify(workflow, dto, flowAssignInfo, isCenterToOrg, isOrgToCenter), cancellationToken);
         }
 
+        /// <summary>
+        /// 重办
+        /// </summary>
+        public async Task RedoAsync(Workflow workflow, NextWorkflowDto dto, StepDefine targetStepDefine,
+            FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
+        {
+            if (targetStepDefine.StepType is EStepType.Start or EStepType.End)
+                throw UserFriendlyException.SameMessage("开始/结束节点不支持重办");
+            
+            var targetStepBox = workflow.StepBoxes.FirstOrDefault(d => d.Code == dto.NextStepCode);
+            if (targetStepBox is null)
+                throw UserFriendlyException.SameMessage("未找到该节点配置");
+
+            var isOrgToCenter = await RecallAsync(workflow, dto, targetStepDefine, targetStepBox, EWorkflowTraceStatus.Redo, cancellationToken);
+
+            workflow.Redo();
+            workflow.ResetHandlers(flowAssignInfo.FlowAssignType, flowAssignInfo.HandlerObjects);
+
+            await _workflowRepository.UpdateAsync(workflow, cancellationToken);
+
+            await _mediator.Publish(new RedoNotify(workflow, dto, isOrgToCenter), cancellationToken);
+        }
+
         /// <summary>
         /// 补充
         /// </summary>
@@ -591,7 +614,7 @@ namespace Hotline.FlowEngine.Workflows
             var workflow = await _workflowRepository.GetAsync(dto.WorkflowId, cancellationToken);
             if (workflow == null)
                 throw UserFriendlyException.SameMessage("无效的流程编号");
-            workflow.Terminate(dto.Opinion);
+            //workflow.Terminate(dto.Opinion);
             await _workflowRepository.UpdateAsync(workflow, cancellationToken);
 
             await _mediator.Publish(new TerminalWorkflowNotify(workflow));

+ 0 - 10
src/Hotline/IOrderRedoRecordRepository.cs

@@ -1,10 +0,0 @@
-using Hotline.Orders;
-using XF.Domain.Repository;
-
-namespace Hotline
-{
-    public interface IOrderRedoRecordRepository: IRepository<OrderRedoRecord>
-    {
-
-    }
-}

+ 14 - 0
src/Hotline/Orders/IOrderDomainService.cs

@@ -12,6 +12,8 @@ namespace Hotline.Orders
 {
     public interface IOrderDomainService
     {
+        #region OrderHandle
+
         Task<Order> GetOrderAsync(string? orderId, CancellationToken cancellationToken);
 
         Task<string> AddAsync(Order order, CancellationToken cancellationToken);
@@ -20,5 +22,17 @@ namespace Hotline.Orders
         /// 归档
         /// </summary>
         Task FileAsync(string? orderId, CancellationToken cancellationToken);
+
+        #endregion
+
+        #region OrderRedo
+
+        Task<string> AddOrderRedoAsync(OrderRedo orderRedo, CancellationToken cancellationToken);
+
+        Task RemoveOrderRedoAsync(string id, CancellationToken cancellationToken);
+
+        Task UpdateOrderRedoAsync(OrderRedo orderRedo, CancellationToken cancellationToken);
+
+        #endregion
     }
 }

+ 0 - 17
src/Hotline/Orders/IOrderRedoRecordDomainService.cs

@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Hotline.Orders
-{
-    public interface IOrderRedoRecordDomainService
-    {
-        Task<string> AddOrderRedoRecord(OrderRedoRecord entity,CancellationToken cancellationToken);
-
-        Task<bool> DelOrderRedoRecord(string id,CancellationToken cancellationToken);
-
-        Task<bool> UpdateRedoRecord(OrderRedoRecord entity, CancellationToken cancellationToken);
-    }
-}

+ 9 - 0
src/Hotline/Orders/IOrderRedoRepository.cs

@@ -0,0 +1,9 @@
+using XF.Domain.Repository;
+
+namespace Hotline.Orders
+{
+    public interface IOrderRedoRepository : IRepository<OrderRedo>
+    {
+
+    }
+}

+ 22 - 6
src/Hotline/Orders/Order.cs

@@ -1,5 +1,6 @@
 using Hotline.FlowEngine.Workflows;
 using Hotline.Settings.Hotspots;
+using Hotline.Share.Dtos;
 using Hotline.Share.Enums.Order;
 using Hotline.Users;
 using SqlSugar;
@@ -394,6 +395,13 @@ namespace Hotline.Orders
         #endregion
 
         #endregion
+
+
+        /// <summary>
+        /// 第一次评价结果
+        /// </summary>
+        public string? FirstVisitResult { get; set; }
+        public string? FirstVisitResultCode { get; set; }
     }
 
     public partial class Order
@@ -503,11 +511,6 @@ namespace Hotline.Orders
             FiledTime = DateTime.Now;
         }
 
-        //public void Jump()
-        //{
-        //    Status = EOrderStatus.WaitForSign;
-        //}
-
         /// <summary>
         /// 发布
         /// </summary>
@@ -516,7 +519,20 @@ namespace Hotline.Orders
         {
             Progress = EProgress.Published;
             IsPublicity = isPublicity;
-            //IsPub = true;
+        }
+
+        /// <summary>
+        /// 已回访
+        /// </summary>
+        public void Visited(string resultCode, string result)
+        {
+            if (string.IsNullOrEmpty(resultCode) || string.IsNullOrEmpty(result))
+                throw new UserFriendlyException("无效参数");
+            if (!string.IsNullOrEmpty(FirstVisitResultCode)) return;
+            FirstVisitResultCode = resultCode;
+            FirstVisitResult = result;
+
+            Progress = EProgress.Visited;
         }
 
         #endregion

+ 24 - 12
src/Hotline/Orders/OrderDomainService.cs

@@ -20,6 +20,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 {
     private const string OrderNoPrefix = "OrderNo:";
     private readonly IOrderRepository _orderRepository;
+    private readonly IOrderRedoRepository _orderRedoRepository;
     private readonly ITypedCache<CacheOrderNO> _cacheOrderNo;
     private readonly ISessionContext _sessionContext;
     private readonly ICapPublisher _capPublisher;
@@ -28,6 +29,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 
     public OrderDomainService(
         IOrderRepository orderRepository,
+        IOrderRedoRepository orderRedoRepository,
         ITypedCache<CacheOrderNO> cacheOrderNo,
         ISessionContext sessionContext,
         ICapPublisher capPublisher,
@@ -35,6 +37,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         ILogger<OrderDomainService> logger)
     {
         _orderRepository = orderRepository;
+        _orderRedoRepository = orderRedoRepository;
         _cacheOrderNo = cacheOrderNo;
         _sessionContext = sessionContext;
         _capPublisher = capPublisher;
@@ -42,6 +45,20 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         _logger = logger;
     }
 
+    public async Task<Order> GetOrderAsync(string? orderId, CancellationToken cancellationToken)
+    {
+        if (string.IsNullOrEmpty(orderId))
+            throw UserFriendlyException.SameMessage("无效工单编号");
+        var order = await _orderRepository.Queryable()
+            .Includes(d => d.Hotspot)
+            .Includes(d => d.Acceptor)
+            .FirstAsync(d => d.Id == orderId, cancellationToken);
+
+        if (order == null)
+            throw new UserFriendlyException($"无效工单编号, orderId: {orderId}", "无效工单编号");
+        return order;
+    }
+
     public async Task<string> AddAsync(Order order, CancellationToken cancellationToken)
     {
         if (order.OrderType == EOrderType.MarketSupervisionBy12315 && order.AcceptType == EAcceptType.Complain && order.OrderComplain == null)
@@ -72,19 +89,14 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         await _orderRepository.UpdateAsync(order, cancellationToken);
     }
 
-    public async Task<Order> GetOrderAsync(string? orderId, CancellationToken cancellationToken)
-    {
-        if (string.IsNullOrEmpty(orderId))
-            throw UserFriendlyException.SameMessage("无效工单编号");
-        var order = await _orderRepository.Queryable()
-            .Includes(d => d.Hotspot)
-            .Includes(d => d.Acceptor)
-            .FirstAsync(d => d.Id == orderId, cancellationToken);
+    public Task<string> AddOrderRedoAsync(OrderRedo orderRedo, CancellationToken cancellationToken) =>
+        _orderRedoRepository.AddAsync(orderRedo, cancellationToken);
 
-        if (order == null)
-            throw new UserFriendlyException($"无效工单编号, orderId: {orderId}", "无效工单编号");
-        return order;
-    }
+    public Task RemoveOrderRedoAsync(string id, CancellationToken cancellationToken) =>
+        _orderRedoRepository.RemoveAsync(id, cancellationToken: cancellationToken);
+
+    public Task UpdateOrderRedoAsync(OrderRedo orderRedo, CancellationToken cancellationToken) =>
+        _orderRedoRepository.UpdateAsync(orderRedo, cancellationToken);
 
     #region private
 

+ 1 - 1
src/Hotline/Orders/OrderRedoRecord.cs → src/Hotline/Orders/OrderRedo.cs

@@ -6,7 +6,7 @@ using XF.Domain.Repository;
 
 namespace Hotline.Orders
 {
-    public class OrderRedoRecord:CreationEntity
+    public class OrderRedo:CreationEntity
     {
         /// <summary>
         /// 工单编号(冗余)

+ 0 - 47
src/Hotline/Orders/OrderRedoRecordDomainService.cs

@@ -1,47 +0,0 @@
-using XF.Domain.Dependency;
-
-namespace Hotline.Orders
-{
-    public class OrderRedoRecordDomainService : IOrderRedoRecordDomainService, IScopeDependency
-    {
-        private readonly IOrderRedoRecordRepository _orderRedoRecordRepository;
-
-
-        public OrderRedoRecordDomainService(IOrderRedoRecordRepository orderRedoRecordRepository)
-        {
-            _orderRedoRecordRepository = orderRedoRecordRepository;
-        }
-
-
-        public async Task<string> AddOrderRedoRecord(OrderRedoRecord entity, CancellationToken cancellationToken)
-        {
-            return await _orderRedoRecordRepository.AddAsync(entity,cancellationToken);
-        }
-
-        public async Task<bool> DelOrderRedoRecord(string id,CancellationToken cancellationToken)
-        {
-            try
-            {
-                await _orderRedoRecordRepository.RemoveAsync(id, false, cancellationToken);
-                return true;
-            }
-            catch
-            {
-                return false;
-            }
-        }
-
-        public async Task<bool> UpdateRedoRecord(OrderRedoRecord entity, CancellationToken cancellationToken)
-        {
-            try
-            {
-                await _orderRedoRecordRepository.UpdateAsync(entity, cancellationToken);
-                return true;
-            }
-            catch
-            {
-                return false;
-            }
-        }
-    }
-}

+ 0 - 6
src/Hotline/Orders/OrderVisit.cs

@@ -87,10 +87,4 @@ public class OrderVisit : CreationEntity
     [SugarColumn(ColumnDataType = "json",IsJson = true,IsNullable = true)]
     public IdName? NowEvaluate { get; set; }
 
-    /// <summary>
-    /// 第一次评价结果
-    /// </summary>
-    [SugarColumn(ColumnDataType = "json", IsJson = true,IsNullable = true)]
-    public IdName? FirstEvaluate { get; set; }
-
 }