田爽 1 år sedan
förälder
incheckning
5ddb25188d

+ 118 - 39
src/Hotline.Api/Controllers/OrderController.cs

@@ -60,8 +60,8 @@ public class OrderController : BaseController
     private readonly IRepository<OrderRedo> _orderRedoRepository;
     private readonly IRepository<OrderSupervise> _orderSuperviseRepository;
     private readonly IRepository<OrderUrge> _orderUrgeRepository;
-    private readonly IFileRepository _file;
-    private readonly IRepository<OrderScreen> _orderScreen;
+    private readonly IFileRepository _fileRepository;
+    private readonly IRepository<OrderScreen> _orderScreenRepository;
 
 
 	public OrderController(
@@ -87,8 +87,8 @@ public class OrderController : BaseController
 		 IRepository<OrderRedo> orderRedoRepository,
 		 IRepository<OrderSupervise> orderSuperviseRepository,
 		 IRepository<OrderUrge> orderUrgeRepository,
-        IFileRepository file,
-        IRepository<OrderScreen> orderScreen
+        IFileRepository fileRepository,
+        IRepository<OrderScreen> orderScreenRepository
 		)
     {
         _orderDomainService = orderDomainService;
@@ -113,8 +113,8 @@ public class OrderController : BaseController
         _orderRedoRepository = orderRedoRepository;
         _orderSuperviseRepository = orderSuperviseRepository;
         _orderUrgeRepository = orderUrgeRepository;
-        _file = file;
-        _orderScreen = orderScreen;
+		_fileRepository = fileRepository;
+		_orderScreenRepository = orderScreenRepository;
 
 	}
 
@@ -518,23 +518,109 @@ public class OrderController : BaseController
             .FirstAsync(x => x.Id == id);
     }
 
-    #endregion
+	#endregion
+
+	#region 工单甄别
+
+	/// <summary>
+	/// 工单甄别列表
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	[Permission(EPermission.OrderScreenList)]
+	[HttpGet("screen")]
+	public async Task<PagedDto<OrderScreen>> ScreenList([FromQuery] ScreenListDto dto)
+	{
+		var (total, items) = await _orderScreenRepository.Queryable()
+			.Includes(x => x.Visit,d=>d.Order)
+			.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Visit.Order.Title.Contains(dto.Keyword!) || d.Visit.Order.No.Contains(dto.Keyword!))
+			.WhereIF(dto.Status == EScreenStatus.Apply || dto.Status == EScreenStatus.Approval || dto.Status == EScreenStatus.End, x => x.Status == dto.Status)
+			.WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
+			.WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
+			.OrderByDescending(x => x.CreationTime)
+			.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+		return new PagedDto<OrderScreen>(total, items);
+	}
 
-    #region 工单甄别
 
+	/// <summary>
+	/// 开始工单甄别流程
+	/// </summary>
+	[Permission(EPermission.ApplyScreen)]
+	[HttpPost("screen/startflow")]
+	public async Task StartFlow([FromBody] ScreenStartFlowDto dto)
+	{
+		var model = _mapper.Map<OrderScreen>(dto.Data);
+		model.Status =  EScreenStatus.Apply;
+	    var id = await _orderScreenRepository.AddAsync(model, HttpContext.RequestAborted);
+
+		try
+		{
+			var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
+			startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderHandle;
+			startDto.Title = dto.Data.Content;
+			await _workflowApplication.StartWorkflowAsync(startDto, id, HttpContext.RequestAborted);
+		}
+		catch (Exception e)
+		{
+			await Remove(id);
+			throw new UserFriendlyException($"工单开启甄别流程失败!, {e.Message}", "工单开启甄别流程失败");
+		}
+	}
 
+	/// <summary>
+	/// 查询工单甄别流程开启参数
+	/// </summary>
+	/// <returns></returns>
+	[HttpGet("screen/startflow")]
+	public async Task<DefinedStepDto> GetScreenFlowStartOptionsAsync()
+	{
+		return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.OrderScreen, HttpContext.RequestAborted);
+	}
 
+	/// <summary>
+	/// 列表页面基础数据
+	/// </summary>
+	/// <returns></returns>
+	[HttpGet("screen/base")]
+	public async Task<object> ScreenBaseData()
+	{
+		var rsp = new
+		{
+			ScreenStatus = EnumExts.GetDescriptions<EScreenStatus>(),
+			ScreenType = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.ScreenType),
+		};
+		return rsp;
+	}
 
-    #endregion
 
-    #region 工单督办
+	/// <summary>
+	/// 甄别详情
+	/// </summary>
+	/// <param name="id"></param>
+	/// <returns></returns>
+	[Permission(EPermission.ScreenEntity)]
+	[HttpGet("screen/{id}")]
+	public async Task<OrderScreen> ScreenEntity(string id)
+	{
+		return await _orderScreenRepository.Queryable()
+			.Includes(x => x.Visit, d=>d.Order)
+			.FirstAsync(x => x.Id == id);
+	}
 
-    /// <summary>
-    /// 工单督办列表
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <returns></returns>
-    [Permission(EPermission.SuperviseOrderList)]
+
+
+
+	#endregion
+
+	#region 工单督办
+
+	/// <summary>
+	/// 工单督办列表
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	[Permission(EPermission.SuperviseOrderList)]
     [HttpGet("supervise")]
     public async Task<PagedDto<SuperviseOrderDto>> SuperviseList([FromQuery] SuperviseListDto dto)
     {
@@ -586,12 +672,10 @@ public class OrderController : BaseController
         if (supervise.State > 0)
             throw UserFriendlyException.SameMessage("督办已回复,请勿重复回复");
 
-        var model = _mapper.Map<OrderSupervise>(dto);
-        model.ReplyId = _sessionContext.UserId;
-        model.ReplyTime = DateTime.Now;
-        model.State = 1;
-        model.Id = dto.Id;
-        await _orderSuperviseRepository.UpdateAsync(model, HttpContext.RequestAborted);
+        supervise.ReplyId = _sessionContext.UserId;
+        supervise.ReplyTime = DateTime.Now;
+        supervise.State = 1;
+        await _orderSuperviseRepository.UpdateAsync(supervise, HttpContext.RequestAborted);
     }
 
     /// <summary>
@@ -607,11 +691,8 @@ public class OrderController : BaseController
         var supervise = await _orderSuperviseRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
         if (supervise is null)
             throw UserFriendlyException.SameMessage("无效督办");
-
-        var model = _mapper.Map<OrderSupervise>(dto);
-        model.SignTime = DateTime.Now;
-        model.Id = dto.Id;
-        await _orderSuperviseRepository.UpdateAsync(model, HttpContext.RequestAborted);
+        supervise.SignTime = DateTime.Now;
+        await _orderSuperviseRepository.UpdateAsync(supervise, HttpContext.RequestAborted);
     }
 
 
@@ -669,7 +750,9 @@ public class OrderController : BaseController
             throw UserFriendlyException.SameMessage("无效工单");
 
         var model = _mapper.Map<OrderUrge>(dto);
-        await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
+        model.CreatorOrgName = _sessionContext.OrgName;
+        model.State = 0;
+		await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
     }
 
     /// <summary>
@@ -688,12 +771,10 @@ public class OrderController : BaseController
         if (urge.State > 0)
             throw UserFriendlyException.SameMessage("督办已回复,请勿重复回复");
 
-        var model = _mapper.Map<OrderUrge>(dto);
-        model.ReplyId = _sessionContext.UserId;
-        model.ReplyTime = DateTime.Now;
-        model.State = 1;
-        model.Id = dto.Id;
-        await _orderUrgeRepository.UpdateAsync(model, HttpContext.RequestAborted);
+        urge.ReplyId = _sessionContext.UserId;
+        urge.ReplyTime = DateTime.Now;
+        urge.State = 1;
+        await _orderUrgeRepository.UpdateAsync(urge, HttpContext.RequestAborted);
     }
 
     /// <summary>
@@ -710,10 +791,8 @@ public class OrderController : BaseController
         if (urge is null)
             throw UserFriendlyException.SameMessage("无效催办");
 
-        var model = _mapper.Map<OrderUrge>(dto);
-        model.SignTime = DateTime.Now;
-        model.Id = dto.Id;
-        await _orderUrgeRepository.UpdateAsync(model, HttpContext.RequestAborted);
+        urge.SignTime = DateTime.Now;
+        await _orderUrgeRepository.UpdateAsync(urge, HttpContext.RequestAborted);
     }
 
 
@@ -850,7 +929,7 @@ public class OrderController : BaseController
     {
         var order = _mapper.Map<Order>(dto);
         var orderNo = await _orderDomainService.AddAsync(order, HttpContext.RequestAborted);
-        if (dto.Files.Any()) await _file.AddFileAsync(dto.Files, orderNo, HttpContext.RequestAborted);
+        if (dto.Files.Any()) await _fileRepository.AddFileAsync(dto.Files, orderNo, HttpContext.RequestAborted);
 		return orderNo;
     }
 

+ 48 - 0
src/Hotline.Share/Dtos/Order/OrderScreenDto.cs

@@ -0,0 +1,48 @@
+using Hotline.Share.Enums.Order;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.Order
+{
+	public class OrderScreenDto
+	{
+		/// <summary>
+		/// 工单编号
+		/// </summary>
+		public string No { get; set; }
+
+		/// <summary>
+		/// 工单id
+		/// </summary>
+		public string VisitId { get; set; }
+
+		/// <summary>
+		/// 工单id
+		/// </summary>
+		public string OrderId { get; set; }
+
+		/// <summary>
+		/// 甄别申请类型id
+		/// </summary>
+		public string TypeDicId { get; set; }
+
+		/// <summary>
+		/// 甄别申请类型名称
+		/// </summary>
+		public string TypeDicName { get; set; }
+
+
+		/// <summary>
+		/// 甄别申请原因
+		/// </summary>
+		public string Content { get; set; }
+
+		/// <summary>
+		/// 甄别申请状态
+		/// </summary>
+		public EScreenStatus? Status { get; set; }
+	}
+}

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

@@ -11,4 +11,9 @@ namespace Hotline.Share.Dtos.Order
     {
 
     }
+
+    public class ScreenStartFlowDto : StartWorkflowDto<OrderScreenDto>
+    {
+
+    }
 }

+ 5 - 6
src/Hotline.Share/Dtos/Order/OrderSuperviseDto.cs

@@ -9,12 +9,6 @@ namespace Hotline.Share.Dtos.Order
 {
 	public class OrderSuperviseDto
 	{
-
-		/// <summary> 
-		/// 督办状态
-		/// </summary>
-		public int? State { get; set; }
-
 		/// <summary>
 		/// 附件
 		/// </summary>
@@ -47,6 +41,11 @@ namespace Hotline.Share.Dtos.Order
 		/// 督办申请内容
 		/// </summary>
 		public string ApplyContent { get; set; }
+
+		/// <summary>
+		/// 是否接受短信,勾选校验手机号
+		/// </summary>
+		public bool AcceptSms { get; set; }
 	}
 	public class ReplyOrderSuperviseDto : OrderSuperviseDto
 	{

+ 5 - 5
src/Hotline.Share/Dtos/Order/OrderUrgeDto.cs

@@ -9,11 +9,6 @@ namespace Hotline.Share.Dtos.Order
 {
 	public class OrderUrgeDto
 	{
-		/// <summary> 
-		/// 催办状态
-		/// </summary>
-		public int? State { get; set; }
-
 		/// <summary>
 		/// 附件
 		/// </summary>
@@ -46,6 +41,11 @@ namespace Hotline.Share.Dtos.Order
 		/// 催办申请内容
 		/// </summary>
 		public string ApplyContent { get; set; }
+
+		/// <summary>
+		/// 是否接受短信,勾选校验手机号
+		/// </summary>
+		public bool AcceptSms { get; set; }
 	}
 	public class ReplyOrderUrgeDto : OrderUrgeDto
 	{

+ 12 - 1
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -264,7 +264,18 @@ namespace Hotline.Share.Dtos.Order
 	    public DateTime? CreationTimeEnd { get; set; }
 	}
 
-    public record UrgeListDto : PagedKeywordRequest
+    public record ScreenListDto : PagedKeywordRequest
+    {
+		/// <summary>
+		/// 甄别申请状态
+		/// </summary>
+		public EScreenStatus Status { get; set; }
+
+		public DateTime? CreationTimeStart { get; set; }
+	    public DateTime? CreationTimeEnd { get; set; }
+    }
+
+	public record UrgeListDto : PagedKeywordRequest
     {
 	    /// <summary>
 	    /// 督办回复状态

+ 0 - 6
src/Hotline/Permissions/EPermission.cs

@@ -1038,12 +1038,6 @@ namespace Hotline.Permissions
         [Display(GroupName = "ApplyScreen", Name = "申请甄别", Description = "申请甄别")]
         ApplyScreen = 500802,
 
-        /// <summary>
-        /// 提交流程
-        /// </summary>
-        [Display(GroupName = "OrderScreen", Name = "提交流程", Description = "提交流程")]
-		ScreenFlowStart = 500803,
-
         /// <summary>
         /// 甄别详情
         /// </summary>

+ 5 - 0
src/Hotline/Settings/SysDicTypeConsts.cs

@@ -139,4 +139,9 @@ public class SysDicTypeConsts
     /// 附件分类
     /// </summary>
     public const string FileClassify = "FileClassify";
+
+	/// <summary>
+	/// 甄别申请类型
+	/// </summary>
+	public const string ScreenType = "ScreenType";
 }