ソースを参照

禅道 121 特提部分工单

田爽 5 ヶ月 前
コミット
5c44bd40f8
1 ファイル変更83 行追加18 行削除
  1. 83 18
      src/Hotline.Api/Controllers/OrderController.cs

+ 83 - 18
src/Hotline.Api/Controllers/OrderController.cs

@@ -75,6 +75,7 @@ using Hotline.CallCenter.Calls;
 using Hotline.CallCenter.BlackLists;
 using Hotline.Share.Mq;
 using Hotline.Share.Dtos.CallCenter;
+using Hotline.Share.Dtos.File;
 using NPOI.SS.Formula.Functions;
 
 namespace Hotline.Api.Controllers;
@@ -5167,25 +5168,23 @@ public class OrderController : BaseController
     [LogFilter("工单重办")]
     public async Task Add([FromBody] OrderReTransactDto dto)
     {
-        var specialAny = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0)
+	    var order = await _orderRepository
+		    .Queryable()
+		    .Includes(d => d.Workflow)
+		    .FirstAsync(d => d.Id == dto.OrderId);
+	    if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行重办!");
+		var specialAny = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0)
             .AnyAsync();
-        if (specialAny) throw UserFriendlyException.SameMessage("工单已存在待审批特提信息!");
+        if (specialAny) throw UserFriendlyException.SameMessage(order.No + " 工单已存在待审批特提信息!");
 
         var screen = await _orderScreenRepository.Queryable().Where(x => x.OrderId == dto.OrderId && (int)x.Status < 2).AnyAsync();
-        if (screen) throw UserFriendlyException.SameMessage("工单存在甄别中的信息!");
+        if (screen) throw UserFriendlyException.SameMessage(order.No + " 工单存在甄别中的信息!");
 
         if (await _orderSendBackAuditRepository.AnyAsync(x => x.OrderId == dto.OrderId && x.State == ESendBackAuditState.Apply,
                 HttpContext.RequestAborted))
         {
-            throw UserFriendlyException.SameMessage("该工单存在正在审核中的退回,不能办理");
+            throw UserFriendlyException.SameMessage(order.No + " 工单存在正在审核中的退回,不能办理");
         }
-
-        var order = await _orderRepository
-            .Queryable()
-            .Includes(d => d.Workflow)
-            .FirstAsync(d => d.Id == dto.OrderId);
-        if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行重办!");
-
         var model = _mapper.Map<OrderSpecial>(dto);
 
         var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true,
@@ -5864,16 +5863,82 @@ public class OrderController : BaseController
         return rsp;
     }
 
+	/// <summary>
+	/// 部门批量重提 该部门及下级部门回访结果 不满意 未评价 视为满意 
+	/// </summary>
+	/// <returns></returns>
+	[HttpPost("org_batch_special/{orgId}")]
+    [AllowAnonymous]
+	public async Task OrgBatchSpecial(string orgId)
+	{
+        //部门信息
+		var org = await _organizeRepository.Queryable().Where(o => o.Id == orgId).FirstAsync(HttpContext.RequestAborted);
+		if (org is null)
+			throw UserFriendlyException.SameMessage("部门信息不存在 请检查部门信息是否正确!");
+		//用户信息  && !u.Name.Contains("测试")
+		var user = await _userRepository.Queryable().Where(u => u.OrgId == orgId ).FirstAsync(HttpContext.RequestAborted);
+		if (user is null)
+			throw UserFriendlyException.SameMessage("用户信息不存在 请检查部门下用户信息是否正确!");
+		//工单信息
+		var orders = await _orderRepository.Queryable(isAdmin: true)
+			.Includes(o=>o.Workflow)
+	        .Includes(o=>o.OrderVisits)
+	        .Where(o=>o.OrderVisits.Any(ov=> ov.VisitState != EVisitState.None && 
+	                                         ov.OrderVisitDetails.Any(ord=> ord.VisitOrgCode.StartsWith(orgId) &&
+	                                                                        (SqlFunc.JsonField(ord.OrgProcessingResults, "Key") == "2" || 
+	                                                                         SqlFunc.JsonField(ord.OrgProcessingResults, "Key") == "7" ||
+	                                                                         SqlFunc.JsonField(ord.OrgProcessingResults, "Key") == "-1" )
+	                                                                        ))).ToListAsync();
+		if (!orders.Any())
+			throw UserFriendlyException.SameMessage(org.Name + " 部门及下级部门不存在回访结果为不满意、未评价、视为满意的工单!");
+		foreach (var order in orders)
+		{
+			var nextStep = await _workflowStepRepository.Queryable().Where(step =>
+					step.WorkflowId == order.WorkflowId && step.HandlerOrgId == orgId &&
+					step.StepType == EStepType.Normal).OrderByDescending(step => step.CreationTime)
+				.FirstAsync(HttpContext.RequestAborted);
+			if (nextStep is null)
+				continue;
+			var dto = new OrderReTransactDto
+			{
+				AlterTime = true,
+				BusinessType = EBusinessType.Department,
+				FlowDirection = EFlowDirection.FiledToOrg,
+				HandlerType = EHandlerType.OrgLevel,
+				NextHandlers = new List<FlowStepHandler>()
+				{
+					new FlowStepHandler
+					{
+						UserId = user.Id, Username = user.Name, Key = org.Id, Value = org.Name, OrgId = org.Id,
+						OrgName = org.Name
+					}
+				},
+				NextStepCode = nextStep.Code,
+				NextStepName = nextStep.Name,
+				OrderId = order.Id,
+				Cause = "不满意二次办理",
+				Reason = "部门回访不满意  批量特提",
+				SpecialType = ESpecialType.SendBack,
+				StepType = EStepType.Normal,
+                TimeLimit = 0,
+				TimeLimitUnit = ETimeType.WorkDay,
+				WorkflowId = order.WorkflowId
+			};
+			await Add(dto);
+		}
+
+	}
+
     #endregion
 
-    #region 市民信息
+	#region 市民信息
 
-    /// <summary>
-    /// 新增市民信息
-    /// </summary>
-    /// <param name="dtos"></param>
-    /// <returns></returns>
-    [HttpPost("citizen")]
+	/// <summary>
+	/// 新增市民信息
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[HttpPost("citizen")]
     [LogFilter("新增市民信息")]
     public async Task Add([FromBody] CitizenAddDto dto)
     {