TANG JIANG 1 năm trước cách đây
mục cha
commit
9fc0e03e22

+ 94 - 13
src/Hotline.Api/Controllers/DataSharing/EnterpriseController.cs

@@ -1,10 +1,13 @@
-using DotNetCore.CAP;
-using Hotline.DataSharing;
+using Hotline.DataSharing;
 using Hotline.DataSharing.Enterprise;
 using Hotline.DataSharing.Order;
+using Hotline.DataSharing.Province;
 using Hotline.DataSharing.Province.Notifications;
 using Hotline.Share.Dtos.DataSharing;
 using Hotline.Share.Dtos.DataSharing.Enterprise.Receive;
+using Hotline.Share.Dtos.DataSharing.Province;
+using Hotline.Share.Dtos.File;
+using Hotline.Share.Dtos.FlowEngine.Workflow;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
@@ -25,6 +28,7 @@ namespace Hotline.Api.Controllers.DataSharing
         private readonly EnterpriseClient _enterpriseClient;
         private readonly IMediator _mediator;
         private readonly IRepository<DsOrder> _dataOrderRepository;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
 
         /// <summary>
         /// 
@@ -34,14 +38,17 @@ namespace Hotline.Api.Controllers.DataSharing
         /// <param name="enterpriseClient"></param>
         /// <param name="mediator"></param>
         /// <param name="dataOrderRepository"></param>
+        /// <param name="channelConfigurationManager"></param>
         public EnterpriseController(IMapper mapper, IRepository<DsReceiveWriteResult> receiveWriteResultRepository, EnterpriseClient enterpriseClient,
-         IMediator mediator, IRepository<DsOrder> dataOrderRepository)
+         IMediator mediator, IRepository<DsOrder> dataOrderRepository,
+         IChannelConfigurationManager channelConfigurationManager)
         {
             _mapper = mapper;
             _receiveWriteResultRepository = receiveWriteResultRepository;
             _enterpriseClient = enterpriseClient;
             _mediator = mediator;
             _dataOrderRepository = dataOrderRepository;
+            _channelConfigurationManager = channelConfigurationManager;
         }
 
         /// <summary>
@@ -87,23 +94,97 @@ namespace Hotline.Api.Controllers.DataSharing
             var data = _mapper.Map<DsReceiveWriteResult>(dto);
 
             var id = await _receiveWriteResultRepository.AddAsync(data, HttpContext.RequestAborted);
+            var order = await _dataOrderRepository.GetAsync(p => p.OrderNo == dto.ReplyCode, HttpContext.RequestAborted);
+            List<FileDto> Files = null;
+            if (dto.ReplyFiles != null && dto.ReplyFiles.Count > 0)
+            {
+                foreach (var item in dto.ReplyFiles)
+                {
+                    byte[] fileContentBytes = Convert.FromBase64String(item.FileText);
+                    var fileData = await SendFileData(fileContentBytes, item.Filename, item.Fileformat, dto.ReplyResultType == 2 ? "退回附件" : "办理上传");
+                    if (fileData != null)
+                    {
+                        Files.Add(fileData);
+                    }
+                }
+            }
+
             if (!string.IsNullOrEmpty(id))
             {
-                string FinishType = "";
-                if (dto.ReplyResultType == 2)
-                    FinishType = "0";
-                else if (dto.ReplyResultType == 1)
-                    FinishType = "1";
+                //如果是办理中调用
+                if (dto.ReplyResultType != 0)
+                {
+                    string FinishType = "";
+                    if (dto.ReplyResultType == 2)
+                        FinishType = "0";
+                    else if (dto.ReplyResultType == 1)
+                        FinishType = "1";
+
+                    if (order != null)
+                        await _mediator.Send(new OrderResultNotify { OrderId = order.OrderId, FinishType = FinishType, Opinion = dto.ReplyContent, Files = Files }, HttpContext.RequestAborted);
+                }
+                else
+                {
+                    //这里调用业务接口,推送办理数据
+                    List<WorkflowTraceDto> Traces = new List<WorkflowTraceDto>
+                    {
+                        new()
+                        {
+                            HandlerName = dto.ReplyUserName,
+                            HandlerOrgName = dto.ReplyBMName,
+                            HandleTime = dto.ReplyDate,
+                            Opinion = dto.ReplyContent,
+                            Files=Files
+                        }
+                    };
+                    if (order != null)
+                        await _mediator.Send(new AddOrderTracesAsyncNotify { OrderId = order.OrderId, Traces = Traces }, HttpContext.RequestAborted);
+                }
 
-                var order = await _dataOrderRepository.GetAsync(p => p.OrderNo == dto.ReplyCode, HttpContext.RequestAborted);
-                if (order != null)
-                    await _mediator.Send(new OrderResultNotify { OrderId = order.OrderId, FinishType = FinishType, Opinion = dto.ReplyContent }, HttpContext.RequestAborted);
-                //向业务系统推送消息
-                // await _capPublisher.PublishAsync("", _mapper.Map<DataWriteResultDto>(dto), cancellationToken: HttpContext.RequestAborted);
                 //这里往业务系统推送数据
                 return OpenResponse.Ok(EnterpriseDeResponse.Success("回复提交成功"));
             }
             return OpenResponse.Ok(EnterpriseDeResponse.Failed("接口调用失败!"));
         }
+
+        /// <summary>
+        /// 将文件流上传到附件服务器
+        /// </summary>
+        /// <param name="fileContentBytes">文件流</param>
+        /// <param name="fileName">文件名称</param>
+        /// <param name="type">文件类型</param>
+        /// <param name="classify">文件分类</param>
+        /// <returns></returns>
+        private async Task<FileDto> SendFileData(byte[] fileContentBytes, string fileName, string type, string classify)
+        {
+            var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
+            // 构造字典文件数据
+            // 接口参数名称为files
+            CFormUpload.FileParameter fileParameter = new("fileData", fileContentBytes, fileName, "multipart/form-data");
+
+            Dictionary<string, object> dicParam = new()
+            {
+                { fileName, fileParameter }
+            };
+            string url = string.Format("{0}{1}?source={2}", businessFile.BaseUrl, businessFile.UploadUrlAddress, businessFile.Source);
+            var result = CFormUpload.MultipartFormDataPost(url, null, dicParam, "");
+            FileDto fileDto = null;
+            if (!string.IsNullOrEmpty(result))
+            {
+                var resultData = Newtonsoft.Json.JsonConvert.DeserializeObject<BusinessFileResponse>(result);
+                if (resultData != null && resultData.code == 0)
+                {
+                    fileDto = new()
+                    {
+                        Name = fileName,
+                        Type = type,
+                        Classify = classify,
+                        Additions = resultData.result.id,
+                        Path = resultData.result.path
+                    };
+                }
+            }
+            return fileDto;
+        }
     }
 }

+ 8 - 6
src/Hotline.Api/Controllers/DataSharing/ProvinceController.cs

@@ -14,6 +14,7 @@ using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Org.BouncyCastle.Ocsp;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
 
@@ -532,8 +533,8 @@ namespace Hotline.Api.Controllers.DataSharing
                     //将工单的办理状态改为办理完成,终止拉取办理信息
                     tempData.IsEnd = true;
                     await _sendCaseInfoRepository.UpdateAsync(tempData, HttpContext.RequestAborted);
-
-                    await _mediator.Send(new OrderResultNotify { OrderId = tempData.OrderID, FinishType = dto.FinishType, Opinion = dto.FdBack }, HttpContext.RequestAborted);
+                    var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "办理上传");
+                    await _mediator.Send(new OrderResultNotify { OrderId = tempData.OrderID, FinishType = dto.FinishType, Opinion = dto.FdBack, Files = listFiles }, HttpContext.RequestAborted);
                 }
 
                 //向业务系统推送消息
@@ -780,10 +781,10 @@ namespace Hotline.Api.Controllers.DataSharing
                             break;
                         case "supply_case_info_receive":
                             listFiles = await InitFileData(listData, "工单补充");
-
+                            await _mediator.Send(new AddOrderComplementAsyncNotify { OrderComplementDto = new() { Files = listFiles, OrderId = "" } }, HttpContext.RequestAborted);
                             break;
                         case "revoke_case_info":
-                            listFiles = await InitFileData(listData, "工单撤单");
+                            listFiles = await InitFileData(listData, "工单撤单");//暂无附件
                             break;
                         case "send_warn_info":
                             listFiles = await InitFileData(listData, "工单预警");
@@ -794,8 +795,9 @@ namespace Hotline.Api.Controllers.DataSharing
 
                             break;
                         case "get_case_result_send":
-                            listFiles = await InitFileData(listData, "工单处理结果");
-
+                            listFiles = await InitFileData(listData, "办理上传");
+                            var dataOrder = await _dataOrderRepository.GetAsync(p => p.ProvinceNo == tmpCaseMaterialInfo.CaseSerial, HttpContext.RequestAborted);
+                            await _mediator.Send(new OrderResultNotify { OrderId = dataOrder.OrderId, Files = listFiles }, HttpContext.RequestAborted);
                             break;
                         case "get_visit_info_send":
                             listFiles = await InitFileData(listData, "上报工单评价");

+ 53 - 18
src/Hotline/DataSharing/Province/Services/ProvinceService.cs

@@ -612,7 +612,7 @@ namespace Hotline.DataSharing.Province.Services
                 //推送服务工单结果信息-组装110数据
                 await SubmitCaseResult(dto, cancellationToken);
             }
-           
+
             //修改本地工单数据
             var data = await _dataOrderRepository.GetAsync(p => p.OrderId == dto.Order.Id, cancellationToken);
             if (data != null)
@@ -756,7 +756,7 @@ namespace Hotline.DataSharing.Province.Services
         }
 
         /// <summary>
-        /// 上报补充诉求
+        /// 上报补充诉求---需要再次确认
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
@@ -1006,7 +1006,7 @@ namespace Hotline.DataSharing.Province.Services
             #endregion
 
             //这里业务系统处理
-            if (dto.SourceChannelCode== "ZGZFW")
+            if (dto.SourceChannelCode == "ZGZFW")
             {
 
             }
@@ -1607,7 +1607,7 @@ namespace Hotline.DataSharing.Province.Services
         }
         #endregion
 
-        #region 宜宾企业专班数据提交-------没搞完
+        #region 宜宾企业专班数据提交
         /// <summary>
         /// 企业专班数据提交
         /// </summary>
@@ -1616,30 +1616,65 @@ namespace Hotline.DataSharing.Province.Services
         private async Task InitEnterpriseData(OrderDto dto, CancellationToken cancellationToken)
         {
             var enterpriseData = _mapper.Map<DsDataWorkOrderSend>(dto);
-
+            var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
             //附件处理
-            List<ReplyFiles> replyFiles = new List<ReplyFiles>();
-            if (dto.Files != null)
+            List<ReplyFiles> replyFiles = new();
+            if (dto.FileJson != null && dto.FileJson.Count > 0)
             {
-                foreach (var item in dto.Files)
+                foreach (var item in dto.FileJson)
                 {
-                    ReplyFiles files = new ReplyFiles
+                    var data = await _fileRepository.GetAsync(p => p.Id == item.Id);
+                    if (data != null)
                     {
-                        Filename = item.Name,
-                        Fileformat = item.Classify
-                    };
-                    replyFiles.Add(files);
+                        #region 根据附件Id拉取附件文件流
+                        byte[] fileContentBytes = null;
+                        try
+                        {
+                            #region 读取数据
+                            string url = string.Format("{0}{1}?Source={2}&Id={3}", businessFile.BaseUrl, businessFile.DownloadUrlAddress, businessFile.Source, data.Additions);
+                            using (var client = _httpClientFactory.CreateClient())
+                            using (var response = await client.GetAsync(url))
+                            {
+                                if (response.StatusCode == HttpStatusCode.OK)
+                                {
+                                    using var memoryStream = new MemoryStream();
+                                    await response.Content.CopyToAsync(memoryStream);
+                                    memoryStream.Seek(0, SeekOrigin.Begin);
+                                    fileContentBytes = memoryStream.ToArray();
+                                }
+                            }
+                            #endregion
+
+                            #region 组装附件参数
+                            //组装附件参数
+                            if (fileContentBytes != null && fileContentBytes.Length > 0)
+                            {
+                                ReplyFiles files = new ReplyFiles
+                                {
+                                    Filename = data.Name,
+                                    Fileformat = data.Type,
+                                    FileText = Convert.ToBase64String(fileContentBytes)
+                                };
+                                //拉取文件流
+                                replyFiles.Add(files);
+                            }
+                            #endregion
+                        }
+                        catch (Exception)
+                        {
+
+                        }
+                        #endregion
+                    }
+                    enterpriseData.ReplyFiles = replyFiles;
                 }
-                enterpriseData.ReplyFiles = replyFiles;
             }
-
             //添加本地数据
             enterpriseData.Id = await _dataWorkOrderSendRepository.AddAsync(enterpriseData, cancellationToken);
 
             //推送数据
             await _enterpriseService.EnterpriseSendPusher(enterpriseData, cancellationToken);
-            //信息上报
-            // await _mediator.Publish(new EnterpriseSendNotification(enterpriseData));
+
         }
         #endregion
 
@@ -1723,7 +1758,7 @@ namespace Hotline.DataSharing.Province.Services
         #endregion
 
         /// <summary>
-        /// 附件处理-----还需要根据推送过来的数据改一下赋值
+        /// 附件处理
         /// </summary>
         /// <param name="dto"></param>
         /// <param name="CaseSerial">工单编号或者督办编号</param>

+ 2 - 2
src/Hotline/DataSharing/Province/Services/PusherProviderService.cs

@@ -1330,7 +1330,7 @@ namespace Hotline.DataSharing.Province.Services
         }
 
         /// <summary>
-        /// 将文件流上传到附件服务器 
+        /// 附件读取以及附件上传 
         /// </summary>
         /// <param name="dto"></param>
         /// <param name="fileName"></param>
@@ -1389,7 +1389,7 @@ namespace Hotline.DataSharing.Province.Services
         }
 
         /// <summary>
-        /// 
+        /// 更新待同步记录数据
         /// </summary>
         /// <param name="dataId"></param>
         /// <param name="SyncState"></param>