Explorar el Código

Merge branch 'master' of http://git.12345lm.cn/Fengwo/hotline

TANG JIANG hace 1 año
padre
commit
b4784c7861

+ 44 - 11
src/Hotline.Api/Controllers/OrderController.cs

@@ -1473,12 +1473,27 @@ public class OrderController : BaseController
     /// <param name="id"></param>
     /// <returns></returns>
     [HttpGet("supervise/{id}")]
-    public async Task<OrderSupervise> SuperviseEntity(string id)
+    public async Task<OrderSuperviseDto> SuperviseEntity(string id)
     {
-        return await _orderSuperviseRepository.Queryable()
+       var orderSupervise =  await _orderSuperviseRepository.Queryable()
             .Includes(x => x.Order)
             .FirstAsync(x => x.Id == id);
-    }
+        var orderSuperviseDto = new OrderSuperviseDto();
+        if (orderSupervise != null) 
+        {
+            orderSuperviseDto = _mapper.Map<OrderSuperviseDto>(orderSupervise);
+            var files = await  _fileRepository.Queryable().Where(x => x.Key == orderSupervise.Id).ToListAsync();
+			if (files.Any())
+			{
+				var applyFiles = files.Where(x => x.Classify == "督办申请").ToList();
+				if (applyFiles.Any())  orderSuperviseDto.Files = _mapper.Map<List<FileDto>>(applyFiles);
+				var replyFiles = files.Where(x => x.Classify == "督办回复").ToList();
+				if (replyFiles.Any()) orderSuperviseDto.ReplyFiles = _mapper.Map<List<FileDto>>(replyFiles);
+			}
+           
+		}
+		return orderSuperviseDto;
+	}
 
     #endregion
 
@@ -1607,12 +1622,20 @@ public class OrderController : BaseController
     /// <param name="id"></param>
     /// <returns></returns>
     [HttpGet("urge/{id}")]
-    public async Task<OrderUrge> UrgeEntity(string id)
+    public async Task<OrderUrgeDto> UrgeEntity(string id)
     {
-        return await _orderUrgeRepository.Queryable()
+        var orderUrge = await _orderUrgeRepository.Queryable()
             .Includes(x => x.Order)
             .FirstAsync(x => x.Id == id);
-    }
+        var orderUrgeDto = new OrderUrgeDto();
+        if (orderUrge != null)
+        {
+	        orderUrgeDto = _mapper.Map<OrderUrgeDto>(orderUrge);
+	        var files = await _fileRepository.Queryable().Where(x => x.Key == orderUrge.Id).ToListAsync();
+	        if (files.Any()) orderUrgeDto.Files = _mapper.Map<List<FileDto>>(files);
+        }
+        return orderUrgeDto;
+	}
 
     #endregion
 
@@ -2158,7 +2181,9 @@ public class OrderController : BaseController
         model.OrgId = _sessionContext.OrgId;
         model.OrgName = _sessionContext.OrgName;
         if (!dto.Audit) model.State = 1;
-        await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
+        model.InitId();
+        if (dto.Files.Any()) model.FileJson = await _fileRepository.AddFileAsync(dto.Files, model.Id, "", HttpContext.RequestAborted);
+		await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
         if (model.State == 1)
         {
             var recall = new RecallDto
@@ -2170,7 +2195,7 @@ public class OrderController : BaseController
                 Opinion = dto.Cause
             };
             if (dto.AlterTime) recall.External = new External { TimeLimit = dto.TimeLimit, TimeLimitUnit = dto.TimeLimitUnit };
-			if (dto.Files.Any()) recall.Files = dto.Files;
+			//if (dto.Files.Any()) recall.Files = dto.Files;
 			await _workflowApplication.RecallAsync(recall, HttpContext.RequestAborted);
 		}
     }
@@ -2188,7 +2213,8 @@ public class OrderController : BaseController
         if (special is null) throw UserFriendlyException.SameMessage("无效特提审批信息!");
         if (special.State != 0) throw UserFriendlyException.SameMessage("无效特提审批信息,特提审批信息错误,该信息已审核!");
         _mapper.Map(dto, special);
-        await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
+        if (dto.Files.Any()) special.ReplyFileJson = await _fileRepository.AddFileAsync(dto.Files, special.Id, "", HttpContext.RequestAborted);
+		await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
         if (special.State == 1)
         {
             var recall = new RecallDto
@@ -2200,7 +2226,7 @@ public class OrderController : BaseController
                 Opinion = dto.Opinion
             };
             if (dto.AlterTime) recall.External = new External { TimeLimit = dto.TimeLimit, TimeLimitUnit = dto.TimeLimitUnit };
-            if (dto.Files.Any()) recall.Files = dto.Files;
+            //if (dto.Files.Any()) recall.Files = dto.Files;
             await _workflowApplication.RecallAsync(recall, HttpContext.RequestAborted);
         }
     }
@@ -2279,7 +2305,14 @@ public class OrderController : BaseController
         var item = await _orderSpecialRepository.Queryable()
             .Includes(x => x.Order)
             .FirstAsync(x => x.Id == id);
-        return _mapper.Map<OrderSpecialDto>(item);
+        var itemDto = new OrderSpecialDto();
+        if (item != null)
+        {
+	        itemDto = _mapper.Map<OrderSpecialDto>(item);
+	        var files = await _fileRepository.Queryable().Where(x => x.Key == item.Id).ToListAsync();
+	        if (files.Any()) itemDto.Files = _mapper.Map<List<FileDto>>(files);
+        }
+        return itemDto;
     }
 
     /// <summary>

+ 24 - 7
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -748,7 +748,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
                 var users1 = roles.SelectMany(d => d.Accounts).Select(d => d.User);
 
-                //工单办理:除一级部门选择中心汇总,其余只能选下级部门
+                //工单办理:除一级部门选择中心汇总(中心会签流程,返回topCountersignStep场景),其余只能选下级部门
                 if (flowType is EFlowType.Handle
                     && (stepDefine.StepType != EStepType.Summary || stepDefine.BusinessType != EBusinessType.Center))
                     users1 = users1.Where(d => d.OrgId.StartsWith(levelOneOrgId));
@@ -757,11 +757,28 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 break;
             case EHandlerType.OrgLevel:
                 //当前操作人所属部门的垂直部门并且属于配置orgLevel的部门
-                var levels = stepDefine.HandlerTypeItems.Select(d => d.Key).Select(d => int.Parse(d));
-                var orgs1 = await _organizeRepository.Queryable()
-                    .Where(d => d.IsEnable && levels.Contains(d.Level))
-                    .WhereIF(!isCenter, d => d.Id.StartsWith(levelOneOrgId))
-                    .ToListAsync(cancellationToken);
+                var levels = stepDefine.HandlerTypeItems.Select(d => int.Parse(d.Key)).ToList();
+                var upLevels = levels.Where(d => d > _sessionContext.OrgLevel);
+                var lowLevels = levels.Where(d => d < _sessionContext.OrgLevel);
+                // var orgs1 = await _organizeRepository.Queryable()
+                //     .Where(d => d.IsEnable && levels.Contains(d.Level))
+                //     .WhereIF(!isCenter, d => d.Id.StartsWith(levelOneOrgId))
+                //     .ToListAsync(cancellationToken);
+
+                var query = _organizeRepository.Queryable()
+                    .Where(d => d.IsEnable);
+                List<SystemOrganize> orgs1;
+                if (isCenter)
+                {
+                    orgs1 = await query.ToListAsync(cancellationToken);
+                }
+                else
+                {
+                    orgs1 = await query
+                        .Where(d => (upLevels.Contains(d.Level) && d.Id.StartsWith(levelOneOrgId)) ||
+                                    (lowLevels.Contains(d.Level) && d.Id.Contains(orgId)))
+                        .ToListAsync(cancellationToken);
+                }
 
                 handlers = orgs1.Select(d => new Kv(d.Id, d.Name)).ToList();
                 break;
@@ -770,7 +787,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .Select(d => Enum.Parse<EOrgType>(d));
                 var orgs2 = await _organizeRepository.Queryable()
                     .Where(d => d.IsEnable && types.Contains(d.OrgType))
-                    .WhereIF(!isCenter, d => d.Id.StartsWith(orgId))
+                    .WhereIF(!isCenter, d => d.Id.StartsWith(levelOneOrgId))
                     .ToListAsync(cancellationToken);
 
                 handlers = orgs2.Select(d => new Kv(d.Id, d.Name)).ToList();

+ 2 - 1
src/Hotline.Repository.SqlSugar/File/FileRepository.cs

@@ -26,7 +26,8 @@ namespace Hotline.Repository.SqlSugar.File
 		public async Task<List<FileJson>> AddFileAsync(List<FileDto> files, string id, string flowId = "", CancellationToken cancellationToken = default) 
 		{
 			List<Hotline.File.File> newFiles =  new List<Hotline.File.File>();
-			var query = Db.Queryable<Hotline.File.File>().Where(x => x.Key == id);
+			var classify = files[0].Classify;
+			var query = Db.Queryable<Hotline.File.File>().Where(x => x.Key == id && x.Classify == classify);
 			if (!string.IsNullOrEmpty(flowId)) query.Where(x => x.FlowKey == flowId);
 			var deleteFilesId = await query.Select(x=>x.Id).ToListAsync(cancellationToken);
 			await Db.Deleteable<Hotline.File.File>().In(x=>x.Id , deleteFilesId).ExecuteCommandAsync(cancellationToken);

+ 5 - 0
src/Hotline.Share/Dtos/Order/OrderSpecialDto.cs

@@ -188,6 +188,11 @@ namespace Hotline.Share.Dtos.Order
 		/// 工单
 		/// </summary>
 		public OrderDto Order { get; set; }
+
+		/// <summary>
+		/// 附件列表
+		/// </summary>
+		public List<FileDto> Files { get; set; } = new();
 	}
 	public class OrderSpecialBaseDto
 	{

+ 18 - 3
src/Hotline.Share/Dtos/Order/OrderSuperviseDto.cs

@@ -8,15 +8,20 @@ using System.Threading.Tasks;
 
 namespace Hotline.Share.Dtos.Order
 {
-	public class OrderSuperviseDto
+	public class OrderSuperviseDto: SuperviseOrderDto
 	{
 		/// <summary>
 		/// 附件列表
 		/// </summary>
 		public List<FileDto> Files { get; set; } = new();
+
+		/// <summary>
+		/// 附件列表
+		/// </summary>
+		public List<FileDto> ReplyFiles { get; set; } = new();
 	}
 
-	public class ApplyOrderSuperviseDto : OrderSuperviseDto
+	public class ApplyOrderSuperviseDto 
 	{
 		/// <summary>
 		/// 工单ID
@@ -44,8 +49,13 @@ namespace Hotline.Share.Dtos.Order
 		/// 督办省编号
 		/// </summary>
 		public string? SUPERVISE_SERIAL { get; set; }
+
+		/// <summary>
+		/// 附件列表
+		/// </summary>
+		public List<FileDto> Files { get; set; } = new();
 	}
-	public class ReplyOrderSuperviseDto : OrderSuperviseDto
+	public class ReplyOrderSuperviseDto 
 	{
 
 		public string Id { get; set; }
@@ -60,6 +70,11 @@ namespace Hotline.Share.Dtos.Order
 		/// 回复人
 		/// </summary>
 		public string? ReplyId { get; set; }
+
+		/// <summary>
+		/// 附件列表
+		/// </summary>
+		public List<FileDto> Files { get; set; } = new();
 	}
 
 	public class SignOrderSuperviseDto 

+ 13 - 3
src/Hotline.Share/Dtos/Order/OrderUrgeDto.cs

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
 
 namespace Hotline.Share.Dtos.Order
 {
-	public class OrderUrgeDto
+	public class OrderUrgeDto : UrgeOrderDto
 	{
 		/// <summary>
 		/// 附件列表
@@ -16,7 +16,7 @@ namespace Hotline.Share.Dtos.Order
 		public List<FileDto> Files { get; set; } = new();
 	}
 
-	public class ApplyOrderUrgeDto : OrderUrgeDto
+	public class ApplyOrderUrgeDto 
 	{
 		/// <summary>
 		/// 工单ID
@@ -40,8 +40,13 @@ namespace Hotline.Share.Dtos.Order
 		/// 是否接受短信,勾选校验手机号
 		/// </summary>
 		public bool AcceptSms { get; set; }
+
+		/// <summary>
+		/// 附件列表
+		/// </summary>
+		public List<FileDto> Files { get; set; } = new();
 	}
-	public class ReplyOrderUrgeDto : OrderUrgeDto
+	public class ReplyOrderUrgeDto 
 	{
 
 		public string Id { get; set; }
@@ -56,6 +61,11 @@ namespace Hotline.Share.Dtos.Order
 		/// 回复人
 		/// </summary>
 		public string ReplyId { get; set; }
+
+		/// <summary>
+		/// 附件列表
+		/// </summary>
+		public List<FileDto> Files { get; set; } = new();
 	}
 
 	public class SignOrderUrgeDto 

+ 7 - 0
src/Hotline/Orders/OrderSpecial.cs

@@ -6,6 +6,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.File;
 using Hotline.Share.Enums.Settings;
 using SqlSugar;
 using XF.Domain.Repository;
@@ -75,5 +76,11 @@ namespace Hotline.Orders
         /// </summary>
         [Navigate(NavigateType.OneToOne, nameof(OrderId))]
         public Order Order { get; set; }
+
+        [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+        public List<FileJson>? FileJson { get; set; }
+
+        [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+        public List<FileJson>? ReplyFileJson { get; set; }
 	}
 }