Преглед изворни кода

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

xf пре 1 година
родитељ
комит
231f0b4652

+ 164 - 20
src/Hotline.Api/Controllers/DataSharing/ConvergenceMediaController.cs

@@ -1,11 +1,12 @@
-using DotNetCore.CAP;
-using Fw.Utility.UnifyResponse;
-using Hotline.DataSharing;
+using Hotline.DataSharing;
 using Hotline.DataSharing.ConvergenceMedia;
 using Hotline.DataSharing.Order;
+using Hotline.DataSharing.Province;
 using Hotline.DataSharing.Province.Notifications;
 using Hotline.Share.Dtos.DataSharing;
 using Hotline.Share.Dtos.DataSharing.ConvergenceMedia;
+using Hotline.Share.Dtos.DataSharing.Province;
+using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.DataSharing;
 using Hotline.Share.Enums.Order;
@@ -170,11 +171,13 @@ namespace Hotline.Api.Controllers.DataSharing
                 data.Address = "四川省宜宾市" + areaName;
 
                 //调用工单创建接口
-                var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data }, HttpContext.RequestAborted);
+                var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data, Files = new List<FileDto>() }, HttpContext.RequestAborted);
                 if (result != null && !string.IsNullOrEmpty(result.Id))
                 {
                     dto.Id = id;
                     dto.OrderId = result.Id;
+                    dto.Password = result.Password;
+                    dto.OrderNo = result.No;
                     await _mediaDataReceiveRepository.UpdateAsync(dto, HttpContext.RequestAborted);
                     return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Success(new WriteOrderResponseDto() { AcceptCode = result.No, AcceptPwd = result.Password, msg = "写信成功", Code = "1" }, "您已成功提交数据!"));
                 }
@@ -447,7 +450,7 @@ namespace Hotline.Api.Controllers.DataSharing
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<GetOrderByRunDataDto>>.Failed(null, "0", strResult));
 
             //验证信件是否存在
-            var data = await _dataOrderRepository.GetAsync(p => p.OrderNo == dto.AcceptCode && p.Password == dto.AcceptPwd && p.Source == ESource.ConvergenceMedia.ToString());
+            var data = await _dataOrderRepository.GetAsync(p => p.OrderNo == dto.AcceptCode && p.Password == dto.AcceptPwd && p.Source == ESource.ConvergenceMedia.ToString(), HttpContext.RequestAborted);
             if (data != null)
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<GetOrderByRunDataDto>>.Failed(null, "0", "编号、密码错误!"));
 
@@ -472,38 +475,179 @@ namespace Hotline.Api.Controllers.DataSharing
         /// <returns></returns>
         [HttpPost("WriteFiles")]
         [AllowAnonymous]
-        public async Task<byte[]> WriteFiles([FromForm] IFormCollection formData)
+        public async Task<OpenResponse> WriteFiles([FromForm] IFormCollection formData)
         {
             string Code = formData["Code"];
             string AcceptCode = formData["AcceptCode"];
             string AcceptPwd = formData["AcceptPwd"];
 
+            //验证密钥
+            var mediaCode = _channelConfigurationManager.GetConfigurationMediaCode();
+            if (mediaCode.MediaCode.ToLower().Trim() != Code.ToLower().Trim())
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Failed(null, "-900", "密钥错误"));
+
+            var dataOrder = await _mediaDataReceiveRepository.GetAsync(p => p.OrderNo == AcceptCode && p.Password == AcceptPwd, HttpContext.RequestAborted);
+            if (dataOrder == null)
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Failed(null, "0", "编号或者密码错误"));
+
             IFormFileCollection files = formData.Files;//等价于Request.Form.Files
-            long size = files.Sum(f => f.Length);
-            var file = files[0];
 
-            string FileName = file.FileName;
+            List<FileDto> fileDtos = new List<FileDto>();
+
+            foreach (var item in files)
+            {
+                //这里需要上文件服务器上传
+                var businessFileDto = await SendFileData(item);
+
+                string strFileName = item.FileName;
+                string strSuffix = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(strFileName.LastIndexOf(".")) : "";
+                fileDtos.Add(new FileDto()
+                {
+                    Name = item.FileName,
+                    Type = strSuffix,
+                    Classify = "受理上传",
+                    Additions = businessFileDto.id,
+                    Path = businessFileDto.path
+                });
+            }
+
+            //组装工单数据
+            AddOrderDto data = new()
+            {
+                Title = dataOrder.Title,
+                FromName = dataOrder.LinkName,
+                Contact = dataOrder.Mobile,
+                Address = dataOrder.Address,
+                Content = dataOrder.Content,
+                IsSecret = dataOrder.Secrecy == 0 ? false : true,
+                Source = ESource.ConvergenceMedia,
+                FromGender = dataOrder.Gender switch
+                {
+                    "1" => EGender.Male,
+                    "2" => EGender.Female,
+                    _ => EGender.Unknown,
+                }
+            };
+            switch (dataOrder.PurTypeName)
+            {
+                case 17:
+                    data.AcceptType = "咨询";
+                    data.AcceptTypeCode = "10";
+                    break;
+                case 18:
+                    data.AcceptType = "举报";
+                    data.AcceptTypeCode = "30";
+                    break;
+                case 19:
+                    data.AcceptType = "投诉";
+                    data.AcceptTypeCode = "35";
+                    break;
+                case 20:
+                    data.AcceptType = "求助";
+                    data.AcceptTypeCode = "20";
+                    break;
+                case 21:
+                    data.AcceptType = "建议";
+                    data.AcceptTypeCode = "15";
+                    break;
+                case 25:
+                    data.AcceptType = "其他";
+                    data.AcceptTypeCode = "40";
+                    break;
+                default:
+                    data.AcceptType = "其他";
+                    data.AcceptTypeCode = "40";
+                    break;
+            }
+
+            string areaName = "";
+            switch (dataOrder.AreaID)
+            {
+                case 2:
+                    data.AreaCode = "511504"; areaName = "叙州区";
+                    break;
+                case 3:
+                    data.AreaCode = "511503"; areaName = "翠屏区";
+                    break;
+                case 4:
+                    data.AreaCode = "511504"; areaName = "南溪区";
+                    break;
+                case 5:
+                    data.AreaCode = "511524"; areaName = "长宁县";
+                    break;
+                case 6:
+                    data.AreaCode = "511528"; areaName = "兴文县";
+                    break;
+                case 7:
+                    data.AreaCode = "511526"; areaName = "珙县";
+                    break;
+                case 8:
+                    data.AreaCode = "511525"; areaName = "高县";
+                    break;
+                case 9:
+                    data.AreaCode = "511527"; areaName = "筠连县";
+                    break;
+                case 10:
+                    data.AreaCode = "511523"; areaName = "江安县";
+                    break;
+                case 11:
+                    data.AreaCode = "511529"; areaName = "屏山县";
+                    break;
+                case 12:
+                    data.AreaCode = "511504"; areaName = "叙州区";
+                    break;
+                default:
+                    break;
+            }
+            data.Address = "四川省宜宾市" + areaName;
+            var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data, Files = new List<FileDto>() }, HttpContext.RequestAborted);
 
-            var stream = file.OpenReadStream();
-            byte[] ByteFile = i_StreamToBytes(stream);
-            return ByteFile;
+            return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Success(null, "上传成功"));
         }
 
 
         #region 私有方法-将文件转化为文件流
+
         /// <summary>
-        /// 将文件转化为文件流
+        /// 将文件流上传到附件服务器
         /// </summary>
-        /// <param name="stream"></param>
+        /// <param name="file"></param>
         /// <returns></returns>
-        private byte[] i_StreamToBytes(Stream stream)
+        private async Task<BusinessFileDto> SendFileData(IFormFile file)
         {
-            byte[] bytes = new byte[stream.Length];
-            stream.Read(bytes, 0, bytes.Length);
-            // 设置当前流的位置为流的开始    
-            stream.Seek(0, SeekOrigin.Begin);
-            return bytes;
+            var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
+            // 文件名称
+            string fileName = file.FileName;
+
+            // 文件内容字节数据
+            using var memoryStream = new MemoryStream();
+            await file.CopyToAsync(memoryStream);
+            memoryStream.Seek(0, SeekOrigin.Begin);
+            byte[] fileContentBytes = memoryStream.ToArray();
+
+            // 构造字典文件数据
+            // 接口参数名称为files
+            CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("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, "");
+            if (!string.IsNullOrEmpty(result))
+            {
+                var resultData = Newtonsoft.Json.JsonConvert.DeserializeObject<BusinessFileResponse>(result);
+                if (resultData != null && resultData.code == 0)
+                {
+                    return resultData.result;
+                }
+            }
+            return new BusinessFileDto();
+
         }
+
+
         #endregion
     }
 }

+ 9 - 2
src/Hotline.Api/Controllers/DataSharing/ProvinceController.cs

@@ -149,8 +149,9 @@ namespace Hotline.Api.Controllers.DataSharing
 
             if (!string.IsNullOrEmpty(id))
             {
+                var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "受理上传");
                 //调用工单创建接口
-                var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data }, HttpContext.RequestAborted);
+                var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data, Files = listFiles }, HttpContext.RequestAborted);
                 if (result != null && !string.IsNullOrEmpty(result.Id))
                 {
                     return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
@@ -683,6 +684,9 @@ namespace Hotline.Api.Controllers.DataSharing
                 //这里需要上文件服务器上传
                 var businessFileDto = await SendFileData(file);
 
+                string strFileName = file.FileName;
+                string strSuffix = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(strFileName.LastIndexOf(".")) : "";
+
                 // 新增文件到列表
                 var materialInfo = new DsGetCaseMaterialInfo()
                 {
@@ -692,6 +696,7 @@ namespace Hotline.Api.Controllers.DataSharing
                     AreaCode = tmpCaseMaterialInfo.AreaCode,
                     FileName = file.FileName,
                     FileSize = file.Length,
+                    Type = strSuffix.Trim('.'),
                     Additions = businessFileDto.id,
                     Path = businessFileDto.path,
                     Direction = "2",
@@ -829,7 +834,9 @@ namespace Hotline.Api.Controllers.DataSharing
         {
             var list = await _getCaseMaterialInfoRepository.Queryable().Where(p => p.CliengGuid == CliengGuid && p.CaseSerial == CaseSerial).ToListAsync();
 
-            List<FileDto> fileDtos = new List<FileDto>();
+            List<FileDto> fileDtos = new();
+            if (fileDtos == null || fileDtos.Count == 0)
+                return fileDtos;
             foreach (var item in list)
             {
                 fileDtos.Add(new FileDto()

+ 24 - 5
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -20,9 +20,12 @@ using XF.Utility.EnumExtensions;
 using XF.Domain.Repository;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Caching.Interfaces;
+using Hotline.File;
 using Hotline.Orders;
 using Hotline.Share.Dtos.Order;
 using Mapster;
+using Hotline.Repository.SqlSugar.File;
+using Hotline.Share.Dtos.File;
 
 namespace Hotline.Api.Controllers;
 
@@ -47,8 +50,9 @@ public class WorkflowController : BaseController
     private readonly ISessionContext _sessionContext;
     private readonly IMapper _mapper;
     private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
+    private readonly IFileRepository _fileRepository;
 
-    public WorkflowController(
+	public WorkflowController(
         IDefinitionDomainService definitionDomainService,
         IRepository<WorkflowDefinition> definitionRepository,
         IWorkflowApplication workflowApplication,
@@ -64,8 +68,9 @@ public class WorkflowController : BaseController
         IRepository<WorkflowCountersign> workflowCountersignRepository,
         ISessionContext sessionContext,
         IMapper mapper,
-        ISystemDicDataCacheManager systemDicDataCacheManager
-    )
+        ISystemDicDataCacheManager systemDicDataCacheManager,
+        IFileRepository fileRepository
+	)
     {
         _definitionDomainService = definitionDomainService;
         _definitionRepository = definitionRepository;
@@ -83,7 +88,9 @@ public class WorkflowController : BaseController
         _workflowTraceRepository = workflowTraceRepository;
         _workflowCountersignRepository = workflowCountersignRepository;
         _systemDicDataCacheManager = systemDicDataCacheManager;
-    }
+        _fileRepository = fileRepository;
+
+	}
 
     /// <summary>
     /// 分页查询最新版本号的模板
@@ -458,7 +465,19 @@ public class WorkflowController : BaseController
             .OrderBy(d => d.CreationTime)
             .ToTreeAsync(d => d.Traces, d => d.ParentId, null);
 
-        return _mapper.Map<WorkflowDto>(workflow);
+        var workflowDto = _mapper.Map<WorkflowDto>(workflow);
+        if (workflowDto.Traces.Any())
+        {
+	        foreach (var item in workflowDto.Traces)
+	        {
+		        if (item.FileJson != null && item.FileJson.Any())
+		        {
+					var files = await _fileRepository.Queryable().Where(x => x.FlowKey == item.StepId).ToListAsync();
+					if (files.Any()) item.Files = _mapper.Map<List<FileDto>>(files);
+				}
+			}
+        }
+        return workflowDto;
     }
 
     /// <summary>

+ 4 - 1
src/Hotline.Share/Dtos/FlowEngine/Workflow/WorkflowTraceDto.cs

@@ -1,4 +1,5 @@
 using System.ComponentModel;
+using Hotline.Share.Dtos.File;
 using Hotline.Share.Enums.FlowEngine;
 using XF.Utility.EnumExtensions;
 
@@ -33,7 +34,9 @@ public class WorkflowTraceDto : StepBasicDto
     /// </summary>
     public List<WorkflowTraceDto> Traces { get; set; }
 
-    public ExpiredStatus ExpiredStatus
+    public List<FileDto>? Files { get; set; }
+
+	public ExpiredStatus ExpiredStatus
     {
         get
         {

+ 12 - 0
src/Hotline/DataSharing/ConvergenceMedia/DsMediaDataReceive.cs

@@ -74,5 +74,17 @@ namespace Hotline.DataSharing.ConvergenceMedia
         /// </summary>
         [SugarColumn(ColumnDescription = "区域类型编码", ColumnDataType = "varchar(50)")]
         public int AreaID { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "区域类型编码", ColumnDataType = "varchar(50)")]
+        public string? OrderNo { get; set; }
+
+        /// <summary>
+        /// 查询密码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "查询密码", ColumnDataType = "varchar(10)")]
+        public string? Password { get; set; }
     }
 }