Browse Source

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

Dun.Jason 1 year ago
parent
commit
dbd1e6a37d

+ 1 - 1
src/Hotline.Api.Sdk/Hotline.Api.Sdk.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.4</Version>
+    <Version>1.0.5</Version>
     <Company>fw</Company>
     <Description>hotline.api.sdk</Description>
   </PropertyGroup>

+ 30 - 6
src/Hotline.Api.Sdk/Order/IHotlineClient.Order.cs

@@ -18,15 +18,39 @@ namespace Hotline.Api.Sdk
             ExecuteAsync("api/v1/Order/delay/province/result", Method.Post, request, cancellationToken);
 
         /// <summary>
-        /// 新增工单
+        /// 接受省平台工单数据
         /// </summary>
-        public Task<ApiResponse<AddOrderResponse>> AddOrderAsync(AddOrderDto request, CancellationToken cancellationToken) =>
-            ExecuteAsync<AddOrderDto, AddOrderResponse>("api/v1/Order/add", Method.Post, request, cancellationToken);
+        public Task<ApiResponse<AddOrderResponse>> ReceiveOrderFromProvinceAsync(AddOrderDto request, CancellationToken cancellationToken) =>
+            ExecuteAsync<AddOrderDto, AddOrderResponse>("rec/province", Method.Post, request, cancellationToken);
+
+        /// <summary>
+        /// 接受省平台工单扩展信息
+        /// </summary>
+        public Task<ApiResponse<string>> ReceiveExtensionFromProvinceAsync(OrderExtensionDto request, CancellationToken cancellationToken) =>
+            ExecuteAsync<OrderExtensionDto, string>("rec/province/extension", Method.Post, request, cancellationToken);
 
         /// <summary>
         /// 工单退回结果
         /// </summary>
         public Task<ApiResponse> OrderSendBackResultAsync(OrderSendBackResultDto request, CancellationToken cancellationToken) =>
-	        ExecuteAsync("api/v1/Order/send_back/result", Method.Post, request, cancellationToken);
-	}
-}
+            ExecuteAsync("api/v1/Order/send_back/result", Method.Post, request, cancellationToken);
+
+        /// <summary>
+        /// 督办工单派发
+        /// </summary>
+        public Task<ApiResponse> ProvinceOrderSuperviseAsync(ProvinceOrderSuperviseDto request, CancellationToken cancellationToken) =>
+            ExecuteAsync("api/v1/Order/supervise/province", Method.Post, request, cancellationToken);
+
+        /// <summary>
+        /// 催办工单派发
+        /// </summary>
+        public Task<ApiResponse> ProvinceOrderUrgeAsync(ProvinceOrderUrgeDto request, CancellationToken cancellationToken) =>
+            ExecuteAsync("api/v1/Order/urge/province", Method.Post, request, cancellationToken);
+
+        /// <summary>
+        /// 省工单甄别结果
+        /// </summary>
+        public Task<ApiResponse> ScreenProvinceResultAsync(ProvinceScreenResult request, CancellationToken cancellationToken) =>
+            ExecuteAsync("api/v1/Order/screen/province/result", Method.Post, request, cancellationToken);
+    }
+}

+ 7 - 4
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -279,7 +279,8 @@ namespace Hotline.Api.Controllers
 		public async Task<PagedDto<KnowledgeDto>> SearchNumList([FromQuery] KnowledgeCollectListDto dto)
 		{
 			var (total, items) = await _knowledgeRepository.Queryable()
-				.Where(x=>x.Status == EKnowledgeStatus.OnShelf)
+				.Where(x => x.Status == EKnowledgeStatus.OnShelf)
+				.Where(x => (x.ExpiredTime != null &&  x.ExpiredTime >= DateTime.Now) || x.ExpiredTime == null)
 				.OrderByDescending(x => x.SearchNum)
 				.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 			return new PagedDto<KnowledgeDto>(total, _mapper.Map<IReadOnlyList<KnowledgeDto>>(items));
@@ -345,7 +346,7 @@ namespace Hotline.Api.Controllers
 			if (collect != null)
 				knowledgeShowInfoDto.Collect = _mapper.Map<KnowledgeCollectDto>(collect);
 			//关联知识
-			var knowledges = await _knowledgeRepository.Queryable().In(x => x.Id, knowledge.Knowledges).ToListAsync();
+			var knowledges = await _knowledgeRepository.Queryable().In(x => x.Id, knowledge.Knowledges).Where(x=>x.Status == EKnowledgeStatus.OnShelf &&((x.ExpiredTime != null && x.ExpiredTime >= DateTime.Now) || x.ExpiredTime == null)).ToListAsync();
 			if (knowledges.Any())
 				knowledgeShowInfoDto.KnowledgeDtos = _mapper.Map<List<KnowledgeDto>>(knowledges);
 			//关键词
@@ -383,7 +384,8 @@ namespace Hotline.Api.Controllers
 		   //将结果合并成一个表
 		   .MergeTable()
 		   //取第一条数据
-		   .Where(x=>x.IsDeleted ==false && DateTime.Now <= x.ExpiredTime)
+		   .Where(x=>x.IsDeleted ==false )
+		   .Where(x=> (x.ExpiredTime != null && x.ExpiredTime >= DateTime.Now) || x.ExpiredTime == null)
 		   .Where(d => d.index == 1 && d.Status == EKnowledgeStatus.OnShelf)
 		  .ToListAsync();
 			//返回数据
@@ -456,9 +458,10 @@ namespace Hotline.Api.Controllers
 				.Includes(x => x.SystemOrganize)
 				.Includes(x => x.KnowledgeType)
 				.Includes(x => x.HotspotType)
+				.Includes(x=>x.SourceOrganize)
 				.Where(x => x.IsDeleted == false)
 				.WhereIF(!string.IsNullOrEmpty(pagedDto.Title), x => x.Title.Contains(pagedDto.Title!))
-				.WhereIF(pagedDto.Status.HasValue, x => x.Status == pagedDto.Status)
+				.WhereIF(pagedDto.Status.HasValue, x => x.Status == pagedDto.Status && ((x.ExpiredTime != null  && x.ExpiredTime > DateTime.Now)|| x.ExpiredTime == null))
 				.WhereIF(pagedDto.IsPublic.HasValue, x => x.IsPublic == pagedDto.IsPublic)
 				.WhereIF(!string.IsNullOrEmpty(pagedDto.Summary), x => x.Summary != null && x.Summary.Contains(pagedDto.Summary!))
 				.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeType.SpliceName.EndsWith(typeSpliceName!))

File diff suppressed because it is too large
+ 504 - 291
src/Hotline.Api/Controllers/OrderController.cs


+ 1 - 1
src/Hotline.Api/config/appsettings.Development.json

@@ -60,7 +60,7 @@
     }
   },
   "DatabaseConfiguration": {
-    "ApplyDbMigrations": true,
+    "ApplyDbMigrations": false,
     "ApplySeed": false
   },
   "MqConfiguration": {

+ 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>

+ 10 - 0
src/Hotline.Share/Dtos/Knowledge/KnowledgeDataDto.cs

@@ -122,6 +122,16 @@ namespace Hotline.Share.Dtos.Knowledge
         public string? Attribution { get; set; }
 
 		public WorkflowDto? Workflow { get; set; }
+
+		/// <summary>
+		/// 来源部门
+		/// </summary>
+		public string? SourceOrganizeId { get; set; }
+
+		/// <summary>
+		/// 来源部门
+		/// </summary>
+		public OrgDto SourceOrganize { get; set; }
 	}
 
     /// <summary>

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

@@ -308,6 +308,20 @@ namespace Hotline.Share.Dtos.Order
         public ECounterSignType? CounterSignType { get; set; }
         public string? CounterSignTypeText => CounterSignType?.GetDescription() ?? "未会签";
 
+        #region 签收
+
+        /// <summary>
+        /// 签收人id
+        /// </summary>
+        public string? SignerId { get; set; }
+
+        /// <summary>
+        /// 签收人名称
+        /// </summary>
+        public string? SignerName { get; set; }
+
+        #endregion
+
         #endregion
 
 
@@ -353,6 +367,16 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public string ExpiredText => CalculateExpiredText();
 
+        /// <summary>
+        /// 是否可编辑
+        /// </summary>
+        public bool CanEdit => Status is EOrderStatus.WaitForAccept or EOrderStatus.BackToUnAccept;
+
+        /// <summary>
+        /// 是否可签收
+        /// </summary>
+        public bool CanSign => string.IsNullOrEmpty(SignerId);
+
         private string CalculateExpiredText()
         {
             //todo 完整处理方案:1.创建待过期表,Id,过期时间,即将过期时间等字段。2.延迟消息通知处理过期,删除子表数据,处理order过期状态字段。3.此处即可采用expiredStatus进行判断
@@ -401,8 +425,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 +451,7 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 来电/信人姓名
         /// </summary>
-        public string FromName { get; set; }
+        public string? FromName { get; set; }
 
         /// <summary>
         /// 来电/信人性别
@@ -437,7 +461,7 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 来电/信人身份
         /// </summary>
-        public EIdentityType IdentityType { get; set; }
+        public EIdentityType? IdentityType { get; set; }
 
         /// <summary>
         /// 证件类型
@@ -490,13 +514,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 +529,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>

+ 29 - 16
src/Hotline.Share/Dtos/Order/OrderScreenDto.cs

@@ -200,33 +200,46 @@ namespace Hotline.Share.Dtos.Order
 		/// </summary>
 		public string ClientGuid { get; set; }
 	}
+	public class ProvinceScreenResult
+	{
+		/// <summary>
+		/// 省工单编号
+		/// </summary>
+		public string CaseSerial { get; set; }
 
-	public class PublishSuperviseDto {
-		// <summary>
-		/// 工单对象
+		/// <summary>
+		/// 审核结果是否通过
 		/// </summary>
-		public OrderDto Order { get; set; }
+		public string AuditResult { get; set; }
 
+		/// <summary>
+		/// 审核意见
+		/// </summary>
+		public string AuditOpinion { get; set; }
 
-		public SuperviseOrderDto Supervise { get; set; }
+		/// <summary>
+		/// 审核时间
+		/// </summary>
+		public DateTime AuditTime { get; set; }
 
 		/// <summary>
-		/// 附件
+		/// 审核部门
 		/// </summary>
-		public string ClientGuid { get; set; }
-	}
-	public class PublishUrgeDto
-	{
-		// <summary>
-		/// 工单对象
+		public string AuditOuname { get; set; }
+
+		/// <summary>
+		/// 审核人
 		/// </summary>
-		public OrderDto Order { get; set; }
+		public string AuditPerson { get; set; }
 
-		public UrgeOrderDto Urge { get; set; }
+		/// <summary>
+		/// 行政区划代码
+		/// </summary>
+		public string AreaCode { get; set; }
 
 		/// <summary>
-		/// 附件
+		/// 材料标识
 		/// </summary>
-		public string ClientGuid { get; set; }
+		public string CliengGuid { get; set; }
 	}
 }

+ 78 - 0
src/Hotline.Share/Dtos/Order/OrderSuperviseDto.cs

@@ -81,4 +81,82 @@ namespace Hotline.Share.Dtos.Order
 	}
 
 
+	public class ProvinceOrderSuperviseDto
+	{
+		/// <summary>
+		/// 督办编号
+		/// </summary>
+		public string SuperviseSerial { get; set; }
+
+		/// <summary>
+		/// 省工单编号
+		/// </summary>
+		public string CaseSerial { get; set; }
+
+		/// <summary>
+		/// 督办标题
+		/// </summary>
+		public string SuperviseTitle { get; set; }
+
+		/// <summary>
+		/// 督办内容
+		/// </summary>
+		public string SuperviseContent { get; set; }
+
+		/// <summary>
+		/// 督办发起人
+		/// </summary>
+		public string SupervisePerson { get; set; }
+
+		/// <summary>
+		/// 督办发起时间
+		/// </summary>
+		public DateTime SuperviseTime { get; set; }
+
+		/// <summary>
+		/// 督办发起单位
+		/// </summary>
+		public string SuperviseSendDept { get; set; }
+
+		/// <summary>
+		/// 被督办单位
+		/// </summary>
+		public string SuperviseRsvDept { get; set; }
+
+		/// <summary>
+		/// 督办类型
+		/// </summary>
+		public string SuperviseType { get; set; }
+
+		/// <summary>
+		/// 督办反馈截止时间
+		/// </summary>
+		public DateTime SuperviseReturnDate { get; set; }
+
+		/// <summary>
+		/// 行政区划代码
+		/// </summary>
+		public string AreaCode { get; set; }
+
+		/// <summary>
+		/// 材料标识
+		/// </summary>
+		public string CliengGuid { get; set; }
+	}
+	public class PublishSuperviseDto
+	{
+		// <summary>
+		/// 工单对象
+		/// </summary>
+		public OrderDto Order { get; set; }
+
+
+		public SuperviseOrderDto Supervise { get; set; }
+
+		/// <summary>
+		/// 附件
+		/// </summary>
+		public string ClientGuid { get; set; }
+	}
+
 }

+ 47 - 0
src/Hotline.Share/Dtos/Order/OrderUrgeDto.cs

@@ -76,4 +76,51 @@ namespace Hotline.Share.Dtos.Order
 		public string OrgName { get; set; }
 
 	}
+
+	public class ProvinceOrderUrgeDto 
+	{
+		/// <summary>
+		/// 省工单编号
+		/// </summary>
+		public string CaseSerial { get; set; }
+
+		/// <summary>
+		/// 催单时间
+		/// </summary>
+		public DateTime RemindTime { get; set; }
+
+		/// <summary>
+		/// 操作人员
+		/// </summary>
+		public string RemindName { get; set; }
+
+		/// <summary>
+		/// 催单理由
+		/// </summary>
+		public string RemindReasion { get; set; }
+
+		/// <summary>
+		/// 行政区划代码
+		/// </summary>
+		public string AreaCode { get; set; }
+
+		/// <summary>
+		/// 材料标识
+		/// </summary>
+		public string CliengGuid { get; set; }
+	}
+	public class PublishUrgeDto
+	{
+		// <summary>
+		/// 工单对象
+		/// </summary>
+		public OrderDto Order { get; set; }
+
+		public UrgeOrderDto Urge { get; set; }
+
+		/// <summary>
+		/// 附件
+		/// </summary>
+		public string ClientGuid { get; set; }
+	}
 }

+ 1 - 1
src/Hotline.Share/Hotline.Share.csproj

@@ -7,7 +7,7 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.34</Version>
+    <Version>1.0.36</Version>
   </PropertyGroup>
 
   <ItemGroup>

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

@@ -43,5 +43,19 @@ namespace Hotline.Orders
         Task UpdateOrderRedoAsync(OrderRedo orderRedo, CancellationToken cancellationToken);
 
         #endregion
+
+        #region 扩展信息
+
+        Task<OrderExtension?> GetOrderExtensionsAsync(string provinceNo, CancellationToken cancellationToken);
+
+        Task UpdateExtensionAsync(OrderExtension orderExtension, 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);
-	}
+    }
 }

+ 49 - 34
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>
         /// 外部数据(为前端提供级联功能)
@@ -226,13 +224,11 @@ namespace Hotline.Orders
         /// <summary>
         /// 是否公开
         /// </summary>
-        [SugarColumn(DefaultValue = "f")]
         public bool IsPublicity { get; set; }
 
         /// <summary>
         /// 是否为省工单(省派发工单非政民互动直派的为省工单)
         /// </summary>
-        [SugarColumn(DefaultValue = "f")]
         public bool IsProvince { get; set; }
 
         /// <summary>
@@ -243,7 +239,6 @@ namespace Hotline.Orders
         /// <summary>
         /// 是否已撤销
         /// </summary>
-        [SugarColumn(DefaultValue = "f")]
         public bool IsCancel { get; set; }
 
         /// <summary>
@@ -320,13 +315,11 @@ namespace Hotline.Orders
         /// <summary>
         /// 实际办理节点code(会签状态此字段保存最外层会签发起节点code)
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? ActualHandleStepCode { get; set; }
 
         /// <summary>
         /// 实际办理节点名称(会签状态此字段保存最外层会签发起节点名称)
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? ActualHandleStepName { get; set; }
 
         /// <summary>
@@ -347,37 +340,31 @@ namespace Hotline.Orders
         /// <summary>
         /// 实际办理人id
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? ActualHandlerId { get; set; }
 
         /// <summary>
         /// 实际办理人名称
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? ActualHandlerName { get; set; }
 
         /// <summary>
         /// 实际办理部门名称
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? ActualHandleOrgName { get; set; }
 
         /// <summary>
         /// 实际办理部门编码
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? ActualHandleOrgCode { get; set; }
 
         /// <summary>
         /// 实际办理部门行政区划编码
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? ActualHandleOrgAreaCode { get; set; }
 
         /// <summary>
         /// 实际办理部门行政区划名称
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? ActualHandleOrgAreaName { get; set; }
 
         /// <summary>
@@ -389,13 +376,11 @@ namespace Hotline.Orders
         /// <summary>
         /// 真实办理人姓名(手动填写)
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? RealHandlerName { get; set; }
 
         /// <summary>
         /// 真实办理人电话(手动填写)
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? RealHandlerPhone { get; set; }
 
         /// <summary>
@@ -411,7 +396,6 @@ namespace Hotline.Orders
         /// <summary>
         /// 沟通地点(手动填写)
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? RealCommunicationAddress { get; set; }
 
         /// <summary>
@@ -431,13 +415,11 @@ namespace Hotline.Orders
         /// <summary>
         /// 当前办理节点code(非会签:当前被指派节点,会签:会签发起节点)
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? CurrentStepCode { get; set; }
 
         /// <summary>
         /// 当前节点名称
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? CurrentStepName { get; set; }
 
         /// <summary>
@@ -507,19 +489,16 @@ namespace Hotline.Orders
         /// <summary>
         /// 受理人id
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? AcceptorId { get; set; }
 
         /// <summary>
         /// 受理人名称
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? AcceptorName { get; set; }
 
         /// <summary>
         /// 受理人工号
         /// </summary>
-        [SugarColumn(IsNullable = true)]
         public string? AcceptorStaffNo { get; set; }
 
         /// <summary>
@@ -533,12 +512,26 @@ namespace Hotline.Orders
         public string? AcceptorOrgName { get; set; }
 
         #endregion
-        
+
         /// <summary>
         /// 会签类型
         /// </summary>
         public ECounterSignType? CounterSignType { get; set; }
 
+        #region 签收
+
+        /// <summary>
+        /// 签收人id
+        /// </summary>
+        public string? SignerId { get; set; }
+
+        /// <summary>
+        /// 签收人名称
+        /// </summary>
+        public string? SignerName { get; set; }
+
+        #endregion
+
         #endregion
 
         #region 省工单字段
@@ -585,8 +578,8 @@ namespace Hotline.Orders
         /// </summary>
         public string? TagNames { get; set; }
 
-		#endregion
-	}
+        #endregion
+    }
 
     public partial class Order
     {
@@ -607,7 +600,7 @@ namespace Hotline.Orders
         /// </summary>
         [Navigate(NavigateType.OneToOne, nameof(WorkflowId))]
         public Workflow Workflow { get; set; }
-        
+
         /// <summary>
         /// 工单扩展信息
         /// </summary>
@@ -729,6 +722,28 @@ namespace Hotline.Orders
             CenterToOrgTime = null;
         }
 
+        /// <summary>
+        /// 是否已签收
+        /// </summary>
+        public bool IsSigned() => !string.IsNullOrEmpty(SignerId);
+
+        /// <summary>
+        /// 签收
+        /// </summary>
+        public void Sign(string userId, string userName)
+        {
+            SignerId = userId;
+            SignerName = userName;
+        }
+
+        /// <summary>
+        /// 返回未签收状态
+        /// </summary>
+        public void BackToUnsign()
+        {
+            SignerId = null;
+            SignerName = null;
+        }
         #endregion
     }
 }

+ 39 - 21
src/Hotline/Orders/OrderDomainService.cs

@@ -23,11 +23,11 @@ namespace Hotline.Orders;
 
 public class OrderDomainService : IOrderDomainService, IScopeDependency
 {
-    private const string OrderNoPrefix = "OrderNo:";
     private readonly IOrderRepository _orderRepository;
     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 +40,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 +52,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         _orderRedoRepository = orderRedoRepository;
         _orderPublishRepository = orderPublishRepository;
         _orderVisitRepository = orderVisitRepository;
+        _orderExtensionRepository = orderExtensionRepository;
         _cacheOrderNo = cacheOrderNo;
         _sessionContext = sessionContext;
         _capPublisher = capPublisher;
@@ -78,19 +80,8 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         order.Init(_sessionContext.RequiredUserId, _sessionContext.UserName, _sessionContext.StaffNo);
         order.No = GenerateNewOrderNo();
         order.Password = Random.Shared.Next(100000, 1000000).ToString();
+        order.ProvinceNo ??= ""; //todo
 
-        //if (order.SourceChannelCode == OrderDefaults.SourceChannel.DianHua && !string.IsNullOrEmpty(order.CallId))
-        //{
-        //    var callRecord = await _wexCallRecordRepository.GetAsync(x => x.CallId == order.CallId,cancellationToken);
-        //    if (callRecord != null)
-        //    {
-        //        await _capPublisher.PublishAsync(EventNames.HotlineCallConnectWithOrder, new CallConnectOrderDto
-        //        {
-        //            Order = _mapper.Map<OrderDto>(order),
-        //            CallRecord = _mapper.Map<CallRecordDto>(callRecord)
-        //        }, cancellationToken: cancellationToken);
-        //    }
-        //}
         return await _orderRepository.AddOrderNavAsync(order, cancellationToken);
     }
 
@@ -140,6 +131,23 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     public Task UpdateOrderRedoAsync(OrderRedo orderRedo, CancellationToken cancellationToken) =>
         _orderRedoRepository.UpdateAsync(orderRedo, cancellationToken);
 
+    #region 工单扩展信息
+
+    public async Task<OrderExtension?> GetOrderExtensionsAsync(string provinceNo, CancellationToken cancellationToken) =>
+        await _orderExtensionRepository.GetAsync(d => d.ProvinceNo == provinceNo, cancellationToken);
+
+    public Task UpdateExtensionAsync(OrderExtension orderExtension, CancellationToken cancellationToken) =>
+        _orderExtensionRepository.UpdateAsync(orderExtension, cancellationToken);
+
+
+    /// <summary>
+    /// 新增工单扩展信息
+    /// </summary>
+    public async Task AddExtensionAsync(OrderExtension extension, CancellationToken cancellationToken) => 
+        await _orderExtensionRepository.AddAsync(extension, cancellationToken);
+
+    #endregion
+
     #region private
 
     private async Task<Order> GetOrderByFlowIdAsync(string workflowId, CancellationToken cancellationToken)
@@ -155,16 +163,26 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         return order;
     }
 
-    //private void CheckOrderIfFiled(Order order)
-    //{
-    //    if (order.Status is EOrderStatus.Filed)
-    //        throw UserFriendlyException.SameMessage("工单已归档");
-    //}
+    private CacheOrderNO GetCurrentOrderNo()
+    {
+        var today = DateTime.Today;
+        var cacheKey = today.ToString("yyyyMMdd");
+        var cacheOrderNo = _cacheOrderNo.GetOrSet(cacheKey, f =>
+        {
+            var todayOrderCount = _orderRepository.Queryable(includeDeleted: true, workflowFilter: false)
+                .CountAsync(d => d.CreationTime.Date == today.Date)
+                .GetAwaiter()
+                .GetResult();
+            return new CacheOrderNO { TotalCount = todayOrderCount };
+        }, TimeSpan.FromDays(1));
+
+        return cacheOrderNo;
+    }
 
     private string GenerateNewOrderNo()
     {
         var today = DateTime.Today;
-        var cacheKey = $"{OrderNoPrefix}{today:yyyyMMdd}";
+        var cacheKey = $"{today:yyyyMMdd}";
         var cacheOrderNo = _cacheOrderNo.GetOrSet(cacheKey, f =>
         {
             var todayOrderCount = _orderRepository.Queryable(true)
@@ -181,7 +199,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 
     private string GenerateOrderNo(DateTime today, int count)
     {
-        return $"{today:yyyyMMdd}{count.ToString("000000")}";
+        return $"{today:yyyyMMdd}{count:000000}";
     }
 
     #endregion
@@ -190,4 +208,4 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 public class CacheOrderNO
 {
     public int TotalCount { get; set; }
-}
+}

+ 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>

+ 3 - 3
src/Hotline/Orders/OrderSupervise.cs

@@ -32,10 +32,10 @@ namespace Hotline.Orders {
 		public string OrgName { get; set; }
 
 		/// <summary>
-		/// 创建部门名称
+		/// 发起部门名称
 		/// </summary>
-		[SugarColumn(ColumnDescription = "创建部门名称")]
-		public string? CreatorOrgName { get; set; }
+		[SugarColumn(ColumnDescription = "发起部门名称")]
+		public string? LaunchOrgName { get; set; }
 
 		/// <summary>
 		/// 督办状态

Some files were not shown because too many files changed in this diff