TANG JIANG 2 years ago
parent
commit
a9fb2b1528

+ 47 - 1
src/Sharing.Api/Controllers/HotlineMessageReceiveController.cs

@@ -34,6 +34,8 @@ namespace Sharing.Api.Controllers
         private readonly ISendSuperviseResultInfoRepository _sendSuperviseResultInfoRepository;
         private readonly ISubmitCaseInfoRepository _submitCaseInfoRepository;
         private readonly ISubmitCaseResultRepository _submitCaseResultRepository;
+        private readonly ISubmitCaseProcessRepository _submitCaseProcessRepository;
+        private readonly ISubmitVisitInfoRepository _submitVisitInfoRepository;
 
         /// <summary>
         /// 
@@ -55,7 +57,8 @@ namespace Sharing.Api.Controllers
             , IGetVisitInfoReceiveRepository getVisitInfoReceiveRepository, IGetCaseBackApplyRepository getCaseBackApplyRepository
             , IDelayCaseInfoSendRepository delayCaseInfoSendRepository, ISendSuperviseProcessInfoRepository sendSuperviseProcessInfoRepository
             , ISendSuperviseResultInfoRepository sendSuperviseResultInfoRepository, ISubmitCaseInfoRepository submitCaseInfoRepository
-            , ISubmitCaseResultRepository submitCaseResultRepository)
+            , ISubmitCaseResultRepository submitCaseResultRepository, ISubmitCaseProcessRepository submitCaseProcessRepository
+            , ISubmitVisitInfoRepository submitVisitInfoRepository)
         {
             _dataOrderRepository = dataOrderRepository;
             _mediator = mediator;
@@ -70,6 +73,8 @@ namespace Sharing.Api.Controllers
             _sendSuperviseResultInfoRepository = sendSuperviseResultInfoRepository;
             _submitCaseInfoRepository = submitCaseInfoRepository;
             _submitCaseResultRepository = submitCaseResultRepository;
+            _submitCaseProcessRepository = submitCaseProcessRepository;
+            _submitVisitInfoRepository = submitVisitInfoRepository;
         }
         #endregion
 
@@ -385,5 +390,46 @@ namespace Sharing.Api.Controllers
             await _mediator.Publish(new SubmitCaseResultNotification(data));
 
         }
+
+        /// <summary>
+        /// 服务工单处理过程
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [NonAction]
+        //[CapSubscribe(Hotline.Share.Mq.EventNames.HotlineOrderCreated)]
+        public async Task SubmitCaseProcess(CaseProcess dto)
+        {
+            var data = _mapper.Map<SubmitCaseProcess>(dto);
+
+            //将上报信息写入本地库
+            var id = await _submitCaseProcessRepository.AddAsync(data);
+
+            data.Id = id;
+            //信息上报
+            await _mediator.Publish(new SubmitCaseProcessNotification(data));
+
+        }
+
+        /// <summary>
+        /// 服务工单回访评价
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [NonAction]
+        //[CapSubscribe(Hotline.Share.Mq.EventNames.HotlineOrderCreated)]
+        public async Task SubmitVisitInfo(VisitInfo dto)
+        {
+            var data = _mapper.Map<SubmitVisitInfo>(dto);
+
+            //将上报信息写入本地库
+            var id = await _submitVisitInfoRepository.AddAsync(data);
+
+            data.Id = id;
+            //信息上报
+            await _mediator.Publish(new SubmitVisitInfoNotification(data));
+
+        }
+
     }
 }

+ 24 - 0
src/Sharing.Province/DefaultPusher.cs

@@ -132,4 +132,28 @@ public class DefaultPusher : IProvincePusher
         var response = await _huiJuClient.RequestAsync<SubmitCaseResultRequest, ProvinceResponse>(request, cancellationToken);
         return response.ReturnInfo;
     }
+
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    /// <param name="request"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<BaseProvinceResponse> PushSubmitCaseProcessAsync(SubmitCaseProcessRequest request, CancellationToken cancellationToken)
+    {
+        var response = await _huiJuClient.RequestAsync<SubmitCaseProcessRequest, ProvinceResponse>(request, cancellationToken);
+        return response.ReturnInfo;
+    }
+
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    /// <param name="request"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<BaseProvinceResponse> PushSubmitVisitInfoAsync(SubmitVisitInfoRequest request, CancellationToken cancellationToken)
+    {
+        var response = await _huiJuClient.RequestAsync<SubmitVisitInfoRequest, ProvinceResponse>(request, cancellationToken);
+        return response.ReturnInfo;
+    }
 }

+ 80 - 0
src/Sharing.Province/Dtos/HuiJu/Send/SubmitCaseProcessRequest.cs

@@ -0,0 +1,80 @@
+using Microsoft.AspNetCore.Http;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send
+{
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    public class SubmitCaseProcessRequest : ProvinceRequest<SubmitCaseProcessData>
+    {
+        //服务工单处理结果
+
+        public override string GetRequestUrl() => "submit_case_process";
+
+        public override string GetHttpMethod() => HttpMethods.Post;
+    }
+
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    public class SubmitCaseProcessData
+    {
+        [JsonPropertyName("jsonList")]
+        public IReadOnlyList<CaseProcess> CaseProcesss { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class CaseProcess : BaseModel
+    {
+        /// <summary>
+        /// 处理部门
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public string DeptName { get; set; }
+
+        /// <summary>
+        /// 环节名称
+        /// </summary>
+        [JsonPropertyName("TACHE_NAME")]
+        public string TacheName { get; set; }
+
+        /// <summary>
+        /// 处理时间
+        /// </summary>
+        [JsonPropertyName("PROCESS_TIME")]
+        public DateTime? ProcessTime { get; set; }
+
+        /// <summary>
+        /// 处理人员
+        /// </summary>
+        [JsonPropertyName("PROCESS_NAME")]
+        public string ProcessName { get; set; }
+
+        /// <summary>
+        /// 处理意见
+        /// </summary>
+        [JsonPropertyName("PROCESS_NOTE")]
+        public string ProcessNote { get; set; }
+
+        /// <summary>
+        /// 办理部门所在区、市、县行政区划代码
+        /// </summary>
+        [JsonPropertyName("END_AREACODE")]
+        public string EndAreaCode { get; set; }
+
+        /// <summary>
+        /// 办理部门所在区、市、县行政区划名称
+        /// </summary>
+        [JsonPropertyName("END_AREANAME")]
+        public string EndAreaName { get; set; }
+
+        /// <summary>
+        /// 过程记录唯一标识
+        /// </summary>
+        [JsonPropertyName("case_id")]
+        public string CaseId { get; set; }
+    }
+}

+ 66 - 0
src/Sharing.Province/Dtos/HuiJu/Send/SubmitVisitInfoRequest.cs

@@ -0,0 +1,66 @@
+using Microsoft.AspNetCore.Http;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send
+{
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    public class SubmitVisitInfoRequest : ProvinceRequest<SubmitVisitInfoData>
+    {
+        public override string GetRequestUrl() => "submit_visit_info";
+
+        public override string GetHttpMethod() => HttpMethods.Post;
+    }
+
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    public class SubmitVisitInfoData
+    {
+        [JsonPropertyName("jsonList")]
+        public IReadOnlyList<VisitInfo> VisitInfos { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class VisitInfo : BaseModel
+    {
+        /// <summary>
+        /// 回访评价方式
+        /// </summary>
+        [JsonPropertyName("VISIT_TYPE")]
+        public string VisitType { get; set; }
+
+        /// <summary>
+        /// 回访人员
+        /// </summary>
+        [JsonPropertyName("VISIT_NAME")]
+        public string VisitName { get; set; }
+
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        [JsonPropertyName("VISIT_TIME")]
+        public DateTime? VisitTime { get; set; }
+
+        /// <summary>
+        /// 回访评价情况
+        /// </summary>
+        [JsonPropertyName("VISIT_REMARK")]
+        public string VisitRemark { get; set; }
+
+        /// <summary>
+        /// 回访结果满意度
+        /// </summary>
+        [JsonPropertyName("SUBJECT_RESULT_SATIFY")]
+        public string SubjectResultSatify { get; set; }
+
+        /// <summary>
+        /// 工单回访首次结果满意度
+        /// </summary>
+        [JsonPropertyName("FirstSatisfaction")]
+        public string FirstSatisfaction { get; set; }
+    }
+}

+ 73 - 0
src/Sharing.Province/Handlers/HuiJu/SubmitCaseProcessHandler.cs

@@ -0,0 +1,73 @@
+using MapsterMapper;
+using MediatR;
+using Sharing.Notifications.HuiJu;
+using Sharing.Province.Dtos.HuiJu.Send;
+using Sharing.Province.HuiJu.Send;
+
+namespace Sharing.Province.Handlers.HuiJu
+{
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    public class SubmitCaseProcessHandler : INotificationHandler<SubmitCaseProcessNotification>
+    {
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly PusherProvider _pusherProvider;
+        private readonly IMapper _mapper;
+        private readonly ISubmitCaseProcessRepository _submitCaseProcessRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="pusherProvider"></param>
+        /// <param name="mapper"></param>
+        /// <param name="submitCaseProcessRepository"></param>
+        public SubmitCaseProcessHandler(IChannelConfigurationManager channelConfigurationManager, PusherProvider pusherProvider, IMapper mapper
+            , ISubmitCaseProcessRepository submitCaseProcessRepository)
+        {
+            _channelConfigurationManager = channelConfigurationManager;
+            _pusherProvider = pusherProvider;
+            _mapper = mapper;
+            _submitCaseProcessRepository = submitCaseProcessRepository;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="notification"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task Handle(SubmitCaseProcessNotification notification, CancellationToken cancellationToken)
+        {
+            var order = notification.DataOrder;
+            var pusher = _pusherProvider.CreatePusher(_channelConfigurationManager);
+
+            var dataReceive = _mapper.Map<CaseProcess>(order);
+
+            var data = new SubmitCaseProcessData
+            {
+                CaseProcesss = new List<CaseProcess>
+                {
+                    dataReceive
+                }
+            };
+            var request = new SubmitCaseProcessRequest();
+            request.SetData(data);
+
+            var response = await pusher.PushSubmitCaseProcessAsync(request, cancellationToken);
+
+            //如果推送成功修改数据状态
+            if (response != null)
+            {
+                if (response.Code == "1")
+                    notification.DataOrder.SyncState = "1";
+                else
+                    notification.DataOrder.SyncState = "2";
+
+                notification.DataOrder.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
+                await _submitCaseProcessRepository.UpdateAsync(notification.DataOrder);
+            }
+        }
+    }
+}

+ 73 - 0
src/Sharing.Province/Handlers/HuiJu/SubmitVisitInfoHandler.cs

@@ -0,0 +1,73 @@
+using MapsterMapper;
+using MediatR;
+using Sharing.Notifications.HuiJu;
+using Sharing.Province.Dtos.HuiJu.Send;
+using Sharing.Province.HuiJu.Send;
+
+namespace Sharing.Province.Handlers.HuiJu
+{
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    public class SubmitVisitInfoHandler : INotificationHandler<SubmitVisitInfoNotification>
+    {
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly PusherProvider _pusherProvider;
+        private readonly IMapper _mapper;
+        private readonly ISubmitVisitInfoRepository _submitVisitInfoRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="pusherProvider"></param>
+        /// <param name="mapper"></param>
+        /// <param name="submitVisitInfoRepository"></param>
+        public SubmitVisitInfoHandler(IChannelConfigurationManager channelConfigurationManager, PusherProvider pusherProvider, IMapper mapper
+            , ISubmitVisitInfoRepository submitVisitInfoRepository)
+        {
+            _channelConfigurationManager = channelConfigurationManager;
+            _pusherProvider = pusherProvider;
+            _mapper = mapper;
+            _submitVisitInfoRepository = submitVisitInfoRepository;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="notification"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task Handle(SubmitVisitInfoNotification notification, CancellationToken cancellationToken)
+        {
+            var order = notification.DataOrder;
+            var pusher = _pusherProvider.CreatePusher(_channelConfigurationManager);
+
+            var dataReceive = _mapper.Map<VisitInfo>(order);
+
+            var data = new SubmitVisitInfoData
+            {
+                VisitInfos = new List<VisitInfo>
+                {
+                    dataReceive
+                }
+            };
+            var request = new SubmitVisitInfoRequest();
+            request.SetData(data);
+
+            var response = await pusher.PushSubmitVisitInfoAsync(request, cancellationToken);
+
+            //如果推送成功修改数据状态
+            if (response != null)
+            {
+                if (response.Code == "1")
+                    notification.DataOrder.SyncState = "1";
+                else
+                    notification.DataOrder.SyncState = "2";
+
+                notification.DataOrder.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
+                await _submitVisitInfoRepository.UpdateAsync(notification.DataOrder);
+            }
+        }
+    }
+}

+ 16 - 0
src/Sharing.Province/IProvincePusher.cs

@@ -81,4 +81,20 @@ public interface IProvincePusher
     /// <param name="cancellationToken"></param>
     /// <returns></returns>
     Task<BaseProvinceResponse> PushSubmitCaseResultAsync(SubmitCaseResultRequest request, CancellationToken cancellationToken);
+
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    /// <param name="request"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    Task<BaseProvinceResponse> PushSubmitCaseProcessAsync(SubmitCaseProcessRequest request, CancellationToken cancellationToken);
+
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    /// <param name="request"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    Task<BaseProvinceResponse> PushSubmitVisitInfoAsync(SubmitVisitInfoRequest request, CancellationToken cancellationToken);
 }

+ 22 - 0
src/Sharing.Province/SmartPusher.cs

@@ -108,4 +108,26 @@ public class SmartPusher : IProvincePusher
     {
         throw new NotImplementedException();
     }
+
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    /// <param name="request"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<BaseProvinceResponse> PushSubmitCaseProcessAsync(SubmitCaseProcessRequest request, CancellationToken cancellationToken)
+    {
+        throw new NotImplementedException();
+    }
+
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    /// <param name="request"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<BaseProvinceResponse> PushSubmitVisitInfoAsync(SubmitVisitInfoRequest request, CancellationToken cancellationToken)
+    {
+        throw new NotImplementedException();
+    }
 }

+ 14 - 0
src/Sharing.Repository/Province/HuiJu/SubmitCaseProcessRepository.cs

@@ -0,0 +1,14 @@
+using Sharing.Province.HuiJu.Send;
+using SqlSugar;
+using XF.Domain.Dependency;
+
+namespace Sharing.Repository.Province.HuiJu
+{
+    public class SubmitCaseProcessRepository : BaseRepository<SubmitCaseProcess>, ISubmitCaseProcessRepository, IScopeDependency
+    {
+        public SubmitCaseProcessRepository(ISugarUnitOfWork<SharingDbContext> uow) : base(uow)
+        {
+
+        }
+    }
+}

+ 14 - 0
src/Sharing.Repository/Province/HuiJu/SubmitVisitInfoRepository.cs

@@ -0,0 +1,14 @@
+using Sharing.Province.HuiJu.Send;
+using SqlSugar;
+using XF.Domain.Dependency;
+
+namespace Sharing.Repository.Province.HuiJu
+{
+    public class SubmitVisitInfoRepository : BaseRepository<SubmitVisitInfo>, ISubmitVisitInfoRepository, IScopeDependency
+    {
+        public SubmitVisitInfoRepository(ISugarUnitOfWork<SharingDbContext> uow) : base(uow)
+        {
+
+        }
+    }
+}

+ 7 - 0
src/Sharing/Notifications/HuiJu/SubmitCaseProcessNotification.cs

@@ -0,0 +1,7 @@
+using MediatR;
+using Sharing.Province.HuiJu.Send;
+
+namespace Sharing.Notifications.HuiJu
+{
+    public record SubmitCaseProcessNotification(SubmitCaseProcess DataOrder) : INotification;
+}

+ 7 - 0
src/Sharing/Notifications/HuiJu/SubmitVisitInfoNotification.cs

@@ -0,0 +1,7 @@
+using MediatR;
+using Sharing.Province.HuiJu.Send;
+
+namespace Sharing.Notifications.HuiJu
+{
+    public record SubmitVisitInfoNotification(SubmitVisitInfo DataOrder) : INotification;
+}

+ 8 - 0
src/Sharing/Province/HuiJu/Send/ISubmitCaseProcessRepository.cs

@@ -0,0 +1,8 @@
+using XF.Domain.Repository;
+
+namespace Sharing.Province.HuiJu.Send
+{
+    public interface ISubmitCaseProcessRepository : IRepository<SubmitCaseProcess>
+    {
+    }
+}

+ 8 - 0
src/Sharing/Province/HuiJu/Send/ISubmitVisitInfoRepository.cs

@@ -0,0 +1,8 @@
+using XF.Domain.Repository;
+
+namespace Sharing.Province.HuiJu.Send
+{
+    public interface ISubmitVisitInfoRepository : IRepository<SubmitVisitInfo>
+    {
+    }
+}

+ 1 - 2
src/Sharing/Province/HuiJu/Send/SubmitCaseInfo.cs

@@ -1,6 +1,5 @@
 using SqlSugar;
 using System.ComponentModel;
-using XF.Domain.Repository;
 
 namespace Sharing.Province.HuiJu.Send
 {
@@ -163,7 +162,7 @@ namespace Sharing.Province.HuiJu.Send
         /// <summary>
         /// 关联服务工单
         /// </summary>
-        [SugarColumn(ColumnDescription = "关联服务工单", ColumnDataType = "varchar(50)",IsNullable =true)]
+        [SugarColumn(ColumnDescription = "关联服务工单", ColumnDataType = "varchar(50)", IsNullable = true)]
         public string RelateSerial { get; set; }
 
         /// <summary>

+ 60 - 0
src/Sharing/Province/HuiJu/Send/SubmitCaseProcess.cs

@@ -0,0 +1,60 @@
+using SqlSugar;
+using System.ComponentModel;
+
+namespace Sharing.Province.HuiJu.Send
+{
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    [Description("服务工单处理过程")]
+    public class SubmitCaseProcess : BaseSendAllResult
+    {
+        /// <summary>
+        /// 处理部门
+        /// </summary>
+        [SugarColumn(ColumnDescription = "处理部门", ColumnDataType = "varchar(200)")]
+        public string DeptName { get; set; }
+
+        /// <summary>
+        /// 环节名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "环节名称", ColumnDataType = "varchar(50)")]
+        public string TacheName { get; set; }
+
+        /// <summary>
+        /// 处理时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "处理时间")]
+        public DateTime? ProcessTime { get; set; }
+
+        /// <summary>
+        /// 处理人员
+        /// </summary>
+        [SugarColumn(ColumnDescription = "处理人员", ColumnDataType = "varchar(100)")]
+        public string ProcessName { get; set; }
+
+        /// <summary>
+        /// 处理意见
+        /// </summary>
+        [SugarColumn(ColumnDescription = "处理意见", ColumnDataType = "text")]
+        public string ProcessNote { get; set; }
+
+        /// <summary>
+        /// 办理部门所在区、市、县行政区划代码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "办理部门所在区、市、县行政区划代码", ColumnDataType = "varchar(24)")]
+        public string EndAreaCode { get; set; }
+
+        /// <summary>
+        /// 办理部门所在区、市、县行政区划名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "办理部门所在区、市、县行政区划名称", ColumnDataType = "varchar(24)")]
+        public string EndAreaName { get; set; }
+
+        /// <summary>
+        /// 过程记录唯一标识
+        /// </summary>
+        [SugarColumn(ColumnDescription = "过程记录唯一标识", ColumnDataType = "varchar(50)")]
+        public string CaseId { get; set; }
+    }
+}

+ 48 - 0
src/Sharing/Province/HuiJu/Send/SubmitVisitInfo.cs

@@ -0,0 +1,48 @@
+using SqlSugar;
+using System.ComponentModel;
+
+namespace Sharing.Province.HuiJu.Send
+{
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    [Description("服务工单回访评价")]
+    public class SubmitVisitInfo : BaseSendAllResult
+    {
+        /// <summary>
+        /// 回访评价方式
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访评价方式", ColumnDataType = "varchar(50)")]
+        public string VisitType { get; set; }
+
+        /// <summary>
+        /// 回访人员
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访人员", ColumnDataType = "varchar(200)")]
+        public string VisitName { get; set; }
+
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访时间")]
+        public DateTime? VisitTime { get; set; }
+
+        /// <summary>
+        /// 回访评价情况
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访评价情况", ColumnDataType = "varchar(1000)")]
+        public string VisitRemark { get; set; }
+
+        /// <summary>
+        /// 回访结果满意度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访结果满意度", ColumnDataType = "varchar(4)")]
+        public string SubjectResultSatify { get; set; }
+
+        /// <summary>
+        /// 工单回访首次结果满意度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "工单回访首次结果满意度", ColumnDataType = "varchar(4)")]
+        public string FirstSatisfaction { get; set; }
+    }
+}