Pārlūkot izejas kodu

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

田爽 1 gadu atpakaļ
vecāks
revīzija
5d78daac84

+ 253 - 197
src/Hotline.Api/Controllers/OrderController.cs

@@ -88,7 +88,7 @@ public class OrderController : BaseController
 
 
 
-	public OrderController(
+    public OrderController(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowApplication workflowApplication,
@@ -128,7 +128,7 @@ public class OrderController : BaseController
         IRepository<OrderSendBack> orderSendBackRepository,
         IRepository<OrderSpecial> orderSpecialRepository,
         IRepository<WorkflowTrace> workflowTraceRepository
-	)
+    )
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -169,7 +169,7 @@ public class OrderController : BaseController
         _orderSendBackRepository = orderSendBackRepository;
         _orderSpecialRepository = orderSpecialRepository;
         _workflowTraceRepository = workflowTraceRepository;
-	}
+    }
 
     #region 工单发布
 
@@ -628,7 +628,7 @@ public class OrderController : BaseController
     /// <returns></returns>
     [Permission(EPermission.OrderVisitAgainList)]
     [HttpGet("visitapply/visitagainlist")]
-    public async Task<PagedDto<OrderCanVisitAgainDto>> OrderVisitAgainList([FromQuery]OrderVisitAgainListDto dto)
+    public async Task<PagedDto<OrderCanVisitAgainDto>> OrderVisitAgainList([FromQuery] OrderVisitAgainListDto dto)
     {
         var (total, items) = await _orderVisitedDetailRepository.Queryable()
             .Includes(x => x.OrderVisit, x => x.Order)
@@ -650,7 +650,7 @@ public class OrderController : BaseController
     /// <exception cref="UserFriendlyException"></exception>
     [Permission(EPermission.ApplyOrderVisit)]
     [HttpPost("visitapply/add")]
-    public async Task ApplyOrderVisit([FromBody]AddVisitApplyDto dto)
+    public async Task ApplyOrderVisit([FromBody] AddVisitApplyDto dto)
     {
         var orderVisitApply = _mapper.Map<OrderVisitApply>(dto);
         //验证是否可以申请二次回访
@@ -683,7 +683,7 @@ public class OrderController : BaseController
     /// <returns></returns>
     [Permission(EPermission.ExaminOrderVisit)]
     [HttpPost("visitapply/examin")]
-    public async Task ExaminOrderVisit([FromBody]ExaminOrderVisitDto dto)
+    public async Task ExaminOrderVisit([FromBody] ExaminOrderVisitDto dto)
     {
         //获取二次回访申请
         var visitApplyModel = await _orderVisitApplyRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
@@ -699,7 +699,7 @@ public class OrderController : BaseController
         visitApplyModel.ExaminOpinion = dto.ExaminOpinion;
         visitApplyModel.ExaminManId = _sessionContext.RequiredUserId;
         visitApplyModel.ExaminTime = DateTime.Now;
-        await _orderVisitApplyRepository.UpdateAsync(visitApplyModel,HttpContext.RequestAborted);
+        await _orderVisitApplyRepository.UpdateAsync(visitApplyModel, HttpContext.RequestAborted);
         //TODO 处理通过后的业务
         if (dto.IsPass)
         {
@@ -1215,7 +1215,7 @@ public class OrderController : BaseController
         try
         {
             await _orderRepository.OrderScreenRevisionVisit(visit.Id, false, HttpContext.RequestAborted);
-			var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
+            var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
             startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderScreen;
             startDto.Title = dto.Data.Content;
             workflowId = await _workflowApplication.StartWorkflowAsync(startDto, id, cancellationToken: HttpContext.RequestAborted);
@@ -1820,7 +1820,10 @@ public class OrderController : BaseController
         return orderId;
     }
 
-    [HttpPost("add")]
+    /// <summary>
+    /// 接受省平台工单数据
+    /// </summary>
+    [HttpPost("rec/province")]
     public async Task<AddOrderResponse> AddByService([FromBody] AddOrderDto dto)
     {
         var order = _mapper.Map<Order>(dto);
@@ -1833,6 +1836,59 @@ public class OrderController : BaseController
         };
     }
 
+    public async Task<AddOrderResponse> ReceiveOrderFromProvince([FromBody] AddOrderDto dto)
+    {
+        if (string.IsNullOrEmpty(dto.ProvinceNo))
+            throw new UserFriendlyException("无效省工单编号");
+
+        var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, HttpContext.RequestAborted);
+        if (order is null)
+        {
+            var exists = await _orderDomainService.IsOrderExtensionExistsAsync(dto.ProvinceNo, HttpContext.RequestAborted);
+            if (exists)
+                await _orderDomainService.UpdateExtensionIdAsync(dto.ProvinceNo, order.Id, HttpContext.RequestAborted);
+
+            order = _mapper.Map<Order>(dto);
+            var orderId = await _orderDomainService.AddAsync(order, HttpContext.RequestAborted);
+            return new AddOrderResponse
+            {
+                Id = orderId,
+                No = order.No,
+                Password = order.Password
+            };
+        }
+        else
+        {
+            //todo 特提(撤回至派单)
+
+            return _mapper.Map<AddOrderResponse>(order);
+        }
+    }
+
+    [HttpPost("rec/province/ext")]
+    public async Task<string> ReceiveExtensionFromProvince(OrderExtensionDto dto)
+    {
+        if (string.IsNullOrEmpty(dto.ProvinceNo))
+            throw new UserFriendlyException("无效省工单编号");
+
+        var exists = await _orderDomainService.IsOrderExtensionExistsAsync(dto.ProvinceNo, HttpContext.RequestAborted);
+        if (exists) return string.Empty;
+
+        var extension = _mapper.Map<OrderExtension>(dto);
+        var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, HttpContext.RequestAborted);
+        if (order is null)
+        {
+            await _orderDomainService.AddExtensionAsync(extension, HttpContext.RequestAborted);
+        }
+        else
+        {
+            order.OrderExtension = extension;
+            await _orderRepository.UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
+        }
+
+        return extension.Id;
+    }
+
     /// <summary>
     /// 删除工单
     /// </summary>
@@ -2092,8 +2148,8 @@ public class OrderController : BaseController
     /// <returns></returns>
     [Permission(EPermission.SendBackOrderList)]
     [HttpGet("send_back")]
-	public async Task<PagedDto<OrderSendBackDto>> UrgeList([FromQuery] OrderSendBackListDto dto)
-	{
+    public async Task<PagedDto<OrderSendBackDto>> UrgeList([FromQuery] OrderSendBackListDto dto)
+    {
         var (total, items) = await _orderSendBackRepository.Queryable()
             .Includes(x => x.Order)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
@@ -2102,11 +2158,11 @@ public class OrderController : BaseController
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
             .WhereIF(dto.State is > 0, d => d.State > 0)
             .WhereIF(dto.State is 0, d => d.State == 0)
-			.OrderByDescending(x => x.CreationTime)
-			.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+            .OrderByDescending(x => x.CreationTime)
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
-		return new PagedDto<OrderSendBackDto>(total, _mapper.Map<IReadOnlyList<OrderSendBackDto>>(items));
-	}
+        return new PagedDto<OrderSendBackDto>(total, _mapper.Map<IReadOnlyList<OrderSendBackDto>>(items));
+    }
 
     /// <summary>
     /// 退回申请
@@ -2115,167 +2171,167 @@ public class OrderController : BaseController
     /// <returns></returns>
     [Permission(EPermission.ApplySendBack)]
     [HttpPost("send_back/apply")]
-	public async Task ApplyUrge([FromBody] OrderSendBackAddDto dto)
-	{
-		//验证工单是否可以申请
-		var order = await _orderRepository.GetAsync(dto.OrderId, HttpContext.RequestAborted);
-		if (order is null)
-			throw UserFriendlyException.SameMessage("无效工单");
-        if((int)order.Status > 1)
-	        throw UserFriendlyException.SameMessage("工单状态无效,请确认当前工单状态");
+    public async Task ApplyUrge([FromBody] OrderSendBackAddDto dto)
+    {
+        //验证工单是否可以申请
+        var order = await _orderRepository.GetAsync(dto.OrderId, HttpContext.RequestAborted);
+        if (order is null)
+            throw UserFriendlyException.SameMessage("无效工单");
+        if ((int)order.Status > 1)
+            throw UserFriendlyException.SameMessage("工单状态无效,请确认当前工单状态");
         if ((int)order.Source <= 1)
-	        throw UserFriendlyException.SameMessage("工单来源无效,请确认当前工单来源");
-		var model = _mapper.Map<OrderSendBack>(dto);
-		var id =await _orderSendBackRepository.AddAsync(model, HttpContext.RequestAborted);
-		if (dto.Files.Any()) await _fileRepository.AddFileAsync(dto.Files, id, HttpContext.RequestAborted);
-		if (!string.IsNullOrEmpty(id)) 
+            throw UserFriendlyException.SameMessage("工单来源无效,请确认当前工单来源");
+        var model = _mapper.Map<OrderSendBack>(dto);
+        var id = await _orderSendBackRepository.AddAsync(model, HttpContext.RequestAborted);
+        if (dto.Files.Any()) await _fileRepository.AddFileAsync(dto.Files, id, HttpContext.RequestAborted);
+        if (!string.IsNullOrEmpty(id))
         {
-	        order = await _orderRepository.GetAsync(dto.OrderId, HttpContext.RequestAborted);
-			order.Status = EOrderStatus.BackToProvince;
-	        await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted); 
-		}
-	}
+            order = await _orderRepository.GetAsync(dto.OrderId, HttpContext.RequestAborted);
+            order.Status = EOrderStatus.BackToProvince;
+            await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
+        }
+    }
 
-	/// <summary>
-	/// 退回审核
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[Permission(EPermission.AuditSendBack)]
-	[HttpPost("send_back/audit")]
-	public async Task ReplyUrge([FromBody] AuditOrderSendBackDto dto)
-	{
-		//验证是否存在退回
-		var sendBack = await _orderSendBackRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
-		if (sendBack is null)
-			throw UserFriendlyException.SameMessage("无效退回");
-		if (sendBack.State > 0)
-			throw UserFriendlyException.SameMessage("退回已审核,请勿重复审核");
-
-		_mapper.Map(dto, sendBack);
+    /// <summary>
+    /// 退回审核
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [Permission(EPermission.AuditSendBack)]
+    [HttpPost("send_back/audit")]
+    public async Task ReplyUrge([FromBody] AuditOrderSendBackDto dto)
+    {
+        //验证是否存在退回
+        var sendBack = await _orderSendBackRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+        if (sendBack is null)
+            throw UserFriendlyException.SameMessage("无效退回");
+        if (sendBack.State > 0)
+            throw UserFriendlyException.SameMessage("退回已审核,请勿重复审核");
+
+        _mapper.Map(dto, sendBack);
         sendBack.AuditName = _sessionContext.UserName;
         sendBack.AuditTime = DateTime.Now;
-		await _orderSendBackRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
+        await _orderSendBackRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
         //推省上
-        if (sendBack.State == 1) 
+        if (sendBack.State == 1)
         {
-            var order =  await _orderRepository.GetAsync(sendBack.OrderId);
-	        var sendBackDto = _mapper.Map<OrderSendBackDto>(sendBack);
-	        var OrderDto = _mapper.Map<OrderDto>(order);
-			_capPublisher.Publish(EventNames.HotlineOrderSendBackApplyed, new PublishOrderSendBackDto() { Order = OrderDto, SendBack = sendBackDto, ClientGuid = "" });
-		}
-	}
+            var order = await _orderRepository.GetAsync(sendBack.OrderId);
+            var sendBackDto = _mapper.Map<OrderSendBackDto>(sendBack);
+            var OrderDto = _mapper.Map<OrderDto>(order);
+            _capPublisher.Publish(EventNames.HotlineOrderSendBackApplyed, new PublishOrderSendBackDto() { Order = OrderDto, SendBack = sendBackDto, ClientGuid = "" });
+        }
+    }
 
-	/// <summary>
-	/// 省上退回结果返回
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[Permission(EPermission.ReplySendBack)]
-	[HttpPost("send_back/result")]
-	public async Task ReplyUrge([FromBody] OrderSendBackResultDto dto)
-	{
-		//验证是否存在退回
-		var sendBack = await _orderSendBackRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
-		if (sendBack is null)
-			throw UserFriendlyException.SameMessage("无效退回");
-
-		_mapper.Map(dto, sendBack);
-		sendBack.Result = dto.Result;
-		sendBack.Reason = dto.Reason;
-		await _orderSendBackRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
-		var order = await _orderRepository.GetAsync(sendBack.OrderId, HttpContext.RequestAborted);
-		order.Status = EOrderStatus.WaitForAccept;
-		await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
-	}
+    /// <summary>
+    /// 省上退回结果返回
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [Permission(EPermission.ReplySendBack)]
+    [HttpPost("send_back/result")]
+    public async Task ReplyUrge([FromBody] OrderSendBackResultDto dto)
+    {
+        //验证是否存在退回
+        var sendBack = await _orderSendBackRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+        if (sendBack is null)
+            throw UserFriendlyException.SameMessage("无效退回");
 
-	/// <summary>
-	/// 退回详情
-	/// </summary>
-	/// <param name="id"></param>
-	/// <returns></returns>
-	[Permission(EPermission.SendBackEntity)]
-	[HttpGet("send_back/{id}")]
-	public async Task<OrderSendBack> SendBackEntity(string id)
-	{
-		return await _orderSendBackRepository.Queryable()
-			.Includes(x => x.Order)
-			.FirstAsync(x => x.Id == id);
-	}
+        _mapper.Map(dto, sendBack);
+        sendBack.Result = dto.Result;
+        sendBack.Reason = dto.Reason;
+        await _orderSendBackRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
+        var order = await _orderRepository.GetAsync(sendBack.OrderId, HttpContext.RequestAborted);
+        order.Status = EOrderStatus.WaitForAccept;
+        await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
+    }
 
-	#endregion
+    /// <summary>
+    /// 退回详情
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    [Permission(EPermission.SendBackEntity)]
+    [HttpGet("send_back/{id}")]
+    public async Task<OrderSendBack> SendBackEntity(string id)
+    {
+        return await _orderSendBackRepository.Queryable()
+            .Includes(x => x.Order)
+            .FirstAsync(x => x.Id == id);
+    }
 
-	#region 工单特提
+    #endregion
 
-	/// <summary>
-	/// 工单特提信息
-	/// </summary>
-	/// <param name="dtos"></param>
-	/// <returns></returns>
-	//[Permission(EPermission.AddCitizen)]
-	[HttpPost("special")]
-	public async Task Add([FromBody] OrderSpecialAddDto dto)
-	{
-        var specialAny =await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0).AnyAsync();
-        if(specialAny) throw UserFriendlyException.SameMessage("工单已存在待审批特提信息!");
-		var model = _mapper.Map<OrderSpecial>(dto);
+    #region 工单特提
+
+    /// <summary>
+    /// 工单特提信息
+    /// </summary>
+    /// <param name="dtos"></param>
+    /// <returns></returns>
+    //[Permission(EPermission.AddCitizen)]
+    [HttpPost("special")]
+    public async Task Add([FromBody] OrderSpecialAddDto dto)
+    {
+        var specialAny = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0).AnyAsync();
+        if (specialAny) throw UserFriendlyException.SameMessage("工单已存在待审批特提信息!");
+        var model = _mapper.Map<OrderSpecial>(dto);
         model.OrgId = _sessionContext.OrgId;
         model.OrgName = _sessionContext.OrgName;
         if (!dto.Audit) model.State = 1;
         await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
         if (model.State == 1)
         {
-	        //TODO 调用流程
+            //TODO 调用流程
         }
-	}
+    }
 
-	/// <summary>
-	/// 审批工单特提信息
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	//[Permission(EPermission.UpdateCitizen)]
-	[HttpPut("special")]
-	public async Task Update([FromBody] AuditOrderSpecialDto dto)
-	{
-		var special = await _orderSpecialRepository.GetAsync(dto.Id);
-		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 (special.State == 1)
-		{
-			//TODO 调用流程
-		}
-	}
+    /// <summary>
+    /// 审批工单特提信息
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    //[Permission(EPermission.UpdateCitizen)]
+    [HttpPut("special")]
+    public async Task Update([FromBody] AuditOrderSpecialDto dto)
+    {
+        var special = await _orderSpecialRepository.GetAsync(dto.Id);
+        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 (special.State == 1)
+        {
+            //TODO 调用流程
+        }
+    }
 
-	/// <summary>
-	/// 获取工单特提信息列表
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	//[Permission(EPermission.CitizenList)]
-	[HttpGet("special/list")]
-	public async Task<PagedDto<OrderSpecialDto>> List([FromQuery] OrderSpecialListDto dto)
-	{
-		var (total, items) = await _orderSpecialRepository.Queryable()
-            .Includes(x=>x.Order)
-            .Includes(x=>x.Trace)
-            .WhereIF(!string.IsNullOrEmpty(dto.Keyword),x=>x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
-            .WhereIF(dto.State.HasValue, x=>x.State == dto.State)
-			.OrderByDescending(x => x.CreationTime)
-			.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
-		return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
-	}
+    /// <summary>
+    /// 获取工单特提信息列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    //[Permission(EPermission.CitizenList)]
+    [HttpGet("special/list")]
+    public async Task<PagedDto<OrderSpecialDto>> List([FromQuery] OrderSpecialListDto dto)
+    {
+        var (total, items) = await _orderSpecialRepository.Queryable()
+            .Includes(x => x.Order)
+            .Includes(x => x.Trace)
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
+            .WhereIF(dto.State.HasValue, x => x.State == dto.State)
+            .OrderByDescending(x => x.CreationTime)
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+        return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
+    }
 
-	/// <summary>
-	/// 工单列表
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[HttpGet("special/apply_list")]
-	public async Task<PagedDto<OrderDto>> SpecialList([FromQuery] QueryOrderDto dto)
-	{
+    /// <summary>
+    /// 工单列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("special/apply_list")]
+    public async Task<PagedDto<OrderDto>> SpecialList([FromQuery] QueryOrderDto dto)
+    {
         var query = _orderRepository.Queryable()
            .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
                d => d.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
@@ -2303,42 +2359,42 @@ public class OrderController : BaseController
             query = query.Where(x => x.AcceptorOrgCode.StartsWith(oneCode) && !x.AcceptorOrgCode.StartsWith(_sessionContext.OrgId));
         }
         var (total, items) = await query
-			.OrderByDescending(d => d.CreationTime)
-			.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
-		return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
-	}
+            .OrderByDescending(d => d.CreationTime)
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+        return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+    }
 
-	/// <summary>
-	/// 获取工单特提信息
-	/// </summary>
-	/// <param name="id"></param>
-	/// <returns></returns>
-	//[Permission(EPermission.CitizenEntity)]
-	[HttpGet("special/{id}")]
-	public async Task<OrderSpecialDto> SpecialEntity(string id)
-	{
-		 var item = await _orderSpecialRepository.Queryable()
-			.Includes(x => x.Order)
-			.Includes(x => x.Trace)
-			.FirstAsync(x => x.Id == id);
+    /// <summary>
+    /// 获取工单特提信息
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    //[Permission(EPermission.CitizenEntity)]
+    [HttpGet("special/{id}")]
+    public async Task<OrderSpecialDto> SpecialEntity(string id)
+    {
+        var item = await _orderSpecialRepository.Queryable()
+           .Includes(x => x.Order)
+           .Includes(x => x.Trace)
+           .FirstAsync(x => x.Id == id);
         return _mapper.Map<OrderSpecialDto>(item);
-	}
+    }
 
-	/// <summary>
-	/// 列表页面基础数据
-	/// </summary>
-	/// <returns></returns>
-	[HttpGet("special/base/{id}")]
-	public async Task<object> SpecialBaseData(string id)
-	{
-		var rsp = new
-		{
-			SpecialTimeType = EnumExts.GetDescriptions<ETimeType>(),
-			SpecialReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SpecialReason),
-			Traces = await _workflowTraceRepository.Queryable().Where(x=>x.WorkflowId == id).ToListAsync()
-		};
-		return rsp;
-	}
+    /// <summary>
+    /// 列表页面基础数据
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet("special/base/{id}")]
+    public async Task<object> SpecialBaseData(string id)
+    {
+        var rsp = new
+        {
+            SpecialTimeType = EnumExts.GetDescriptions<ETimeType>(),
+            SpecialReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SpecialReason),
+            Traces = await _workflowTraceRepository.Queryable().Where(x => x.WorkflowId == id).ToListAsync()
+        };
+        return rsp;
+    }
 
     /// <summary>
     /// 获取办理时限
@@ -2346,24 +2402,24 @@ public class OrderController : BaseController
     /// <param name="id"></param>
     /// <returns></returns>
 	[HttpGet("special/handle_time")]
-	public async Task<int> SpecialHandleTime([FromQuery] OrderSpecialHandleTime dto) 
+    public async Task<int> SpecialHandleTime([FromQuery] OrderSpecialHandleTime dto)
     {
         var order = await _orderRepository.GetAsync(dto.OrderId);
         var trace = await _workflowTraceRepository.GetAsync(dto.TraceId);
         var org = await _organizeRepository.GetAsync(trace.HandlerOrgId);
         if (org != null && org.IsCenter) return _timeLimitDomainService.GetOrderTimeLimitConfig(string.Empty);
         return _timeLimitDomainService.GetOrderTimeLimitConfig(order.AcceptTypeCode);
-	}
-	#endregion
+    }
+    #endregion
 
-	#region  市民信息
+    #region  市民信息
 
-	/// <summary>
-	/// 新增市民信息
-	/// </summary>
-	/// <param name="dtos"></param>
-	/// <returns></returns>
-	[Permission(EPermission.AddCitizen)]
+    /// <summary>
+    /// 新增市民信息
+    /// </summary>
+    /// <param name="dtos"></param>
+    /// <returns></returns>
+    [Permission(EPermission.AddCitizen)]
     [HttpPost("citizen")]
     public async Task Add([FromBody] CitizenAddDto dto)
     {

+ 1 - 47
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -50,56 +50,10 @@ namespace Hotline.Repository.SqlSugar.Orders
             order.AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager);
 
             await AddNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
-
-            //if (order.OrderType == EOrderType.MarketSupervisionBy12315)
-            //{
-            //    //弥补AddNav方法没有自动指派到创建人
-            //    order.AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager);
-
-            //    if (order.AcceptTypeCode == AcceptTypeConst.TouSu)
-            //    {
-            //        order.OrderComplain.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
-            //        await AddNav(order).Include(d => d.OrderComplain).ExecuteCommandAsync();
-            //    }
-            //    else if (order.AcceptTypeCode == AcceptTypeConst.JuBao)
-            //    {
-            //        order.OrderReport.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
-            //        await AddNav(order).Include(d => d.OrderReport).ExecuteCommandAsync();
-            //    }
-            //    else
-            //    {
-            //        throw UserFriendlyException.SameMessage("12315工单不支持该受理类型");
-            //    }
-            //}
-            //else
-            //{
-            //    await AddAsync(order, cancellationToken);
-            //}
+            
             return order.Id;
         }
 
-        public async Task UpdateOrderNavAsync(Order order, CancellationToken cancellationToken)
-        {
-            //await UpdateAsync(order, cancellationToken);
-            //if (order.OrderType == EOrderType.MarketSupervisionBy12315)
-            //{
-            //    if (order.AcceptTypeCode == AcceptTypeConst.TouSu)
-            //    {
-            //        await Db.Insertable<OrderComplain>(order.OrderComplain).ExecuteCommandAsync();
-            //    }
-            //    else if (order.AcceptTypeCode == AcceptTypeConst.JuBao)
-            //    {
-            //        await Db.Insertable<OrderReport>(order.OrderReport).ExecuteCommandAsync();
-            //    }
-            //    else
-            //    {
-            //        throw UserFriendlyException.SameMessage("12315工单不支持该受理类型");
-            //    }
-            //}
-
-            await UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
-        }
-
         /// <summary>
 		/// 即将超期列表
 		/// </summary>

+ 11 - 11
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -401,8 +401,8 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 来源渠道
         /// </summary>
-        public string SourceChannel { get; set; }
-        public string SourceChannelCode { get; set; }
+        public string? SourceChannel { get; set; }
+        public string? SourceChannelCode { get; set; }
 
         /// <summary>
         /// 渠道为电话时,此字段存在
@@ -427,7 +427,7 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 来电/信人姓名
         /// </summary>
-        public string FromName { get; set; }
+        public string? FromName { get; set; }
 
         /// <summary>
         /// 来电/信人性别
@@ -437,7 +437,7 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 来电/信人身份
         /// </summary>
-        public EIdentityType IdentityType { get; set; }
+        public EIdentityType? IdentityType { get; set; }
 
         /// <summary>
         /// 证件类型
@@ -490,13 +490,13 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 受理类型
         /// </summary>
-        public string AcceptType { get; set; }
-        public string AcceptTypeCode { get; set; }
+        public string? AcceptType { get; set; }
+        public string? AcceptTypeCode { get; set; }
 
         /// <summary>
         /// 紧急程度
         /// </summary>
-        public EEmergencyLevel EmergencyLevel { get; set; } = EEmergencyLevel.Normal;
+        public EEmergencyLevel EmergencyLevel { get; set; }
 
         public string Title { get; set; }
 
@@ -505,14 +505,14 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 热点
         /// </summary>
-        public string HotspotId { get; set; }
-        public string HotspotName { get; set; }
-        public string HotspotSpliceName { get; set; }
+        public string? HotspotId { get; set; }
+        public string? HotspotName { get; set; }
+        public string? HotspotSpliceName { get; set; }
 
         /// <summary>
         /// 外部数据(为前端提供级联功能)
         /// </summary>
-        public string HotspotExternal { get; set; }
+        public string? HotspotExternal { get; set; }
 
         #endregion
 

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

@@ -9,6 +9,11 @@ public class OrderExtensionDto
     /// </summary>
     public DateTime CreationTime { get; set; }
 
+    /// <summary>
+    /// 同步省工单编号和省上传下来的工单都用这个字段(冗余:省工单的扩展信息)
+    /// </summary>
+    public string? ProvinceNo { get; set; }
+
     /// <summary>
     /// 工单类型
     /// </summary>

+ 20 - 0
src/Hotline/Orders/IOrderDomainService.cs

@@ -43,5 +43,25 @@ namespace Hotline.Orders
         Task UpdateOrderRedoAsync(OrderRedo orderRedo, CancellationToken cancellationToken);
 
         #endregion
+
+        #region 扩展信息
+
+        /// <summary>
+        /// 根据省工单编号检查工单扩展信息是否存在
+        /// </summary>
+        Task<bool> IsOrderExtensionExistsAsync(string provinceNo, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 更新工单扩展信息Id
+        /// </summary>
+        Task UpdateExtensionIdAsync(string provinceNo, string id, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 新增工单扩展信息
+        /// </summary>
+        Task AddExtensionAsync(OrderExtension extension, CancellationToken cancellationToken);
+
+        #endregion
+
     }
 }

+ 1 - 2
src/Hotline/Orders/IOrderRepository.cs

@@ -13,7 +13,6 @@ namespace Hotline.Orders
     public interface IOrderRepository : IRepositoryWorkflow<Order>
     {
         Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken);
-        Task UpdateOrderNavAsync(Order order, CancellationToken cancellationToken);
         Task RemoveOrderWrodBatchAsync(List<string> ids, CancellationToken cancellationToken);
         Task RemoveOrderObserveBatchAsync(List<string> ids, CancellationToken cancellationToken);
         Task RemoveOrderFinalityBatchAsync(List<string> ids, CancellationToken cancellationToken);
@@ -23,5 +22,5 @@ namespace Hotline.Orders
         //Task<PagedDto<WorkflowOrderDto>> GetAboutToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         Task OrderParticiple(string inputStr, string orderId, CancellationToken cancellationToken);
         Task OrderScreenRevisionVisit(string VisitId, bool canHandle, CancellationToken cancellationToken);
-	}
+    }
 }

+ 13 - 15
src/Hotline/Orders/Order.cs

@@ -32,11 +32,9 @@ namespace Hotline.Orders
         /// <summary>
         /// 来源渠道(电话、网站、APP等)
         /// </summary>
-        [SugarColumn(DefaultValue = "其他")]
-        public string SourceChannel { get; set; }
+        public string? SourceChannel { get; set; }
 
-        [SugarColumn(DefaultValue = "QT")]
-        public string SourceChannelCode { get; set; }
+        public string? SourceChannelCode { get; set; }
 
         /// <summary>
         /// 渠道为电话时,此字段存在(Call.Id)
@@ -61,7 +59,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 来电/信人姓名
         /// </summary>
-        public string FromName { get; set; }
+        public string? FromName { get; set; }
 
         /// <summary>
         /// 来电/信人性别
@@ -71,7 +69,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 来电/信人身份
         /// </summary>
-        public EIdentityType IdentityType { get; set; }
+        public EIdentityType? IdentityType { get; set; }
 
         /// <summary>
         /// 证件类型
@@ -129,9 +127,9 @@ namespace Hotline.Orders
         /// <summary>
         /// 受理类型
         /// </summary>
-        public string AcceptType { get; set; }
+        public string? AcceptType { get; set; }
 
-        public string AcceptTypeCode { get; set; }
+        public string? AcceptTypeCode { get; set; }
 
         /// <summary>
         /// 紧急程度
@@ -145,11 +143,11 @@ namespace Hotline.Orders
         /// <summary>
         /// 热点
         /// </summary>
-        public string HotspotId { get; set; }
+        public string? HotspotId { get; set; }
 
-        public string HotspotName { get; set; }
+        public string? HotspotName { get; set; }
 
-        public string HotspotSpliceName { get; set; }
+        public string? HotspotSpliceName { get; set; }
 
         /// <summary>
         /// 外部数据(为前端提供级联功能)
@@ -533,7 +531,7 @@ namespace Hotline.Orders
         public string? AcceptorOrgName { get; set; }
 
         #endregion
-        
+
         /// <summary>
         /// 会签类型
         /// </summary>
@@ -585,8 +583,8 @@ namespace Hotline.Orders
         /// </summary>
         public string? TagNames { get; set; }
 
-		#endregion
-	}
+        #endregion
+    }
 
     public partial class Order
     {
@@ -607,7 +605,7 @@ namespace Hotline.Orders
         /// </summary>
         [Navigate(NavigateType.OneToOne, nameof(WorkflowId))]
         public Workflow Workflow { get; set; }
-        
+
         /// <summary>
         /// 工单扩展信息
         /// </summary>

+ 29 - 0
src/Hotline/Orders/OrderDomainService.cs

@@ -28,6 +28,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     private readonly IRepository<OrderRedo> _orderRedoRepository;
     private readonly IRepository<OrderPublish> _orderPublishRepository;
     private readonly IRepository<OrderVisit> _orderVisitRepository;
+    private readonly IRepository<OrderExtension> _orderExtensionRepository;
     private readonly ITypedCache<CacheOrderNO> _cacheOrderNo;
     private readonly ISessionContext _sessionContext;
     private readonly ICapPublisher _capPublisher;
@@ -40,6 +41,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         IRepository<OrderRedo> orderRedoRepository,
         IRepository<OrderPublish> orderPublishRepository,
         IRepository<OrderVisit> orderVisitRepository,
+        IRepository<OrderExtension> orderExtensionRepository,
         ITypedCache<CacheOrderNO> cacheOrderNo,
         ISessionContext sessionContext,
         ICapPublisher capPublisher,
@@ -51,6 +53,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         _orderRedoRepository = orderRedoRepository;
         _orderPublishRepository = orderPublishRepository;
         _orderVisitRepository = orderVisitRepository;
+        _orderExtensionRepository = orderExtensionRepository;
         _cacheOrderNo = cacheOrderNo;
         _sessionContext = sessionContext;
         _capPublisher = capPublisher;
@@ -140,6 +143,32 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     public Task UpdateOrderRedoAsync(OrderRedo orderRedo, CancellationToken cancellationToken) =>
         _orderRedoRepository.UpdateAsync(orderRedo, cancellationToken);
 
+    #region 工单扩展信息
+
+    /// <summary>
+    /// 根据省工单编号检查工单扩展信息是否存在
+    /// </summary>
+    public async Task<bool> IsOrderExtensionExistsAsync(string provinceNo, CancellationToken cancellationToken) => 
+        await _orderExtensionRepository.AnyAsync(d => d.ProvinceNo == provinceNo, cancellationToken);
+
+    /// <summary>
+    /// 更新工单扩展信息Id
+    /// </summary>
+    public async Task UpdateExtensionIdAsync(string provinceNo, string id, CancellationToken cancellationToken)
+    {
+        throw new NotImplementedException();
+    }
+
+    /// <summary>
+    /// 新增工单扩展信息
+    /// </summary>
+    public async Task AddExtensionAsync(OrderExtension extension, CancellationToken cancellationToken)
+    {
+        throw new NotImplementedException();
+    }
+
+    #endregion
+
     #region private
 
     private async Task<Order> GetOrderByFlowIdAsync(string workflowId, CancellationToken cancellationToken)

+ 5 - 0
src/Hotline/Orders/OrderExtension.cs

@@ -9,6 +9,11 @@ namespace Hotline.Orders;
 
 public class OrderExtension : CreationEntity
 {
+    /// <summary>
+    /// 同步省工单编号和省上传下来的工单都用这个字段(冗余:省工单的扩展信息)
+    /// </summary>
+    public string? ProvinceNo { get; set; }
+
     /// <summary>
     /// 工单类型
     /// </summary>