tangjiang 1 月之前
父節點
當前提交
bf2a529806

+ 0 - 11
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -1,16 +1,11 @@
 using DotNetCore.CAP;
 using Hotline.CallCenter.Tels.CallTelDomain;
-using ExtendedNumerics.Exceptions;
-using Hotline.Ai.Quality;
-using Hotline.Application.CallCenter.Calls;
 using Hotline.Application.Systems;
 using Hotline.Application.Tels;
 using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Calls;
-using Hotline.CallCenter.Configs;
 using Hotline.CallCenter.Tels;
 using Hotline.Orders;
-using Hotline.Permissions;
 using Hotline.Quality;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Settings;
@@ -24,21 +19,15 @@ using Hotline.Users;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
 using Newtonsoft.Json;
-using System.Threading;
 using Hotline.EventBus;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
-using Hotline.FlowEngine.Notifications;
 using Hotline.Quality.Notifications;
 using Hotline.Share.Dtos.Quality;
-using MongoDB.Driver;
-using Hotline.Repository.SqlSugar.CallCenter;
-using SqlSugar;
 using Hotline.Tools;
 using Hotline.Api.Filter;
 using XF.Domain.Cache;

+ 42 - 4
src/Hotline.Api/Controllers/OrderController.cs

@@ -166,6 +166,7 @@ public class OrderController : BaseController
     private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
     private readonly IRepository<OrderComplement> _orderComplementRepository;
     private readonly ICircularRecordDomainService _circularRecordDomainService;
+    private readonly IRepository<Hotline.Special.SpecialNumber> _specialNumberRepository;
 
     public OrderController(
         IOrderDomainService orderDomainService,
@@ -241,7 +242,8 @@ public class OrderController : BaseController
         IRepository<SystemDicData> sysDicDataRepository,
         IRepository<SystemOrganize> systemOrganizeRepository,
         IRepository<OrderComplement> orderComplementRepository,
-        ICircularRecordDomainService circularRecordDomainService)
+        ICircularRecordDomainService circularRecordDomainService,
+        IRepository<Hotline.Special.SpecialNumber> specialNumberRepository)
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -317,6 +319,7 @@ public class OrderController : BaseController
         _systemOrganizeRepository = systemOrganizeRepository;
         _orderComplementRepository = orderComplementRepository;
         _circularRecordDomainService = circularRecordDomainService;
+        _specialNumberRepository = specialNumberRepository;
     }
 
     #endregion
@@ -3072,7 +3075,7 @@ public class OrderController : BaseController
                     {
                         newPrevStep.FlowAssignType = EFlowAssignType.Org;
                     }
-                    else if(prevStepDefine.HandlerType is EHandlerType.Role)
+                    else if (prevStepDefine.HandlerType is EHandlerType.Role)
                     {
                         newPrevStep.Assign(
                             new StepAssignInfo
@@ -4271,6 +4274,21 @@ public class OrderController : BaseController
     {
         dto.InitAddress();
 
+        //工单保存特殊身份验证
+        var specialIdentityVerification = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.SpecialIdentityVerification).SettingValue[0]);
+        if (specialIdentityVerification)
+        {
+            var specialNumber = await _specialNumberRepository.GetAsync(p => p.PhoneNumber == dto.FromPhone, HttpContext.RequestAborted);
+            if (specialNumber != null && specialNumber.PoliticalIdentityValue == "1")
+            {
+                if (dto.OrderPushTypes == null || dto.OrderPushTypes.Count() == 0)
+                    throw UserFriendlyException.SameMessage("人大代表来电,请选择推送分类人大代表意见快办!");
+
+                if (dto.OrderPushTypes.Exists(p => p.PushTypeCode == "9") == false)
+                    throw UserFriendlyException.SameMessage("人大代表来电,请选择推送分类人大代表意见快办!");
+            }
+        }
+
         //泸州任务 311 投诉件需限制受理内容的字数等需求
         if (_appOptions.Value.IsLuZhou && dto.AcceptTypeCode == "35")
         {
@@ -4322,9 +4340,11 @@ public class OrderController : BaseController
             var orderPushTypes = _mapper.Map<List<OrderPushType>>(dto.OrderPushTypes);
             await _orderPushTypeRepository.AddRangeAsync(orderPushTypes);
             var pushTypes = dto.OrderPushTypes.Select(x => x.PushType);
+            var pushTypeCode = dto.OrderPushTypes.Select(x => x.PushTypeCode);
+            order.PushTypeCode = string.Join(",", pushTypeCode);
             order.PushType = string.Join(",", pushTypes);
         }
-
+        
         if (dto.Tags != null && dto.Tags.Any())
         {
             var orderTags = new List<SystemDicData>();
@@ -4504,6 +4524,21 @@ public class OrderController : BaseController
     {
         dto.InitAddress();
 
+        //工单保存特殊身份验证
+        var specialIdentityVerification = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.SpecialIdentityVerification).SettingValue[0]);
+        if (specialIdentityVerification)
+        {
+            var specialNumber = await _specialNumberRepository.GetAsync(p => p.PhoneNumber == dto.FromPhone, HttpContext.RequestAborted);
+            if (specialNumber != null && specialNumber.PoliticalIdentityValue == "1")
+            {
+                if (dto.OrderPushTypes == null || dto.OrderPushTypes.Count() == 0)
+                    throw UserFriendlyException.SameMessage("人大代表来电,请选择推送分类人大代表意见快办!");
+
+                if (dto.OrderPushTypes.Exists(p => p.PushTypeCode == "9") == false)
+                    throw UserFriendlyException.SameMessage("人大代表来电,请选择推送分类人大代表意见快办!");
+            }
+        }
+
         //泸州任务 311 投诉件需限制受理内容的字数等需求
         if (_appOptions.Value.IsLuZhou && dto.AcceptTypeCode == "35")
         {
@@ -4580,6 +4615,7 @@ public class OrderController : BaseController
         {
             await _orderPushTypeRepository.RemoveAsync(x => x.OrderId == order.Id);
             order.PushType = string.Empty;
+            order.PushTypeCode = string.Empty;
         }
 
         // 工单推送分类
@@ -4589,6 +4625,8 @@ public class OrderController : BaseController
             var orderPushTypes = _mapper.Map<List<OrderPushType>>(dto.OrderPushTypes);
             await _orderPushTypeRepository.AddRangeAsync(orderPushTypes);
             var pushTypes = dto.OrderPushTypes.Select(x => x.PushType);
+            var pushTypeCode = dto.OrderPushTypes.Select(x => x.PushTypeCode);
+            order.PushTypeCode = string.Join(",", pushTypeCode);
             order.PushType = string.Join(",", pushTypes);
         }
 
@@ -6621,7 +6659,7 @@ public class OrderController : BaseController
                 //})
                 //    .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
 
-                if ((expiredTime?.ExpiredTime > order.ExpiredTime ) || _appOptions.Value.IsLuZhou)
+                if ((expiredTime?.ExpiredTime > order.ExpiredTime) || _appOptions.Value.IsLuZhou)
                 {
                     order.ExpiredTime = expiredTime.ExpiredTime;
                     order.NearlyExpiredTime = expiredTime.NearlyExpiredTime;

+ 24 - 2
src/Hotline.Api/Controllers/SpecialController.cs

@@ -5,6 +5,10 @@ using Hotline.Share.Dtos;
 using Hotline.Share.Tools;
 using Hotline.Application.SpecialNumber;
 using Hotline.Share.Dtos.Special;
+using Hotline.Settings;
+using Hotline.Caching.Interfaces;
+using Hotline.Repository.SqlSugar.Extensions;
+using Hotline.Share.Dtos.Order;
 
 namespace Hotline.Api.Controllers
 {
@@ -18,16 +22,19 @@ namespace Hotline.Api.Controllers
         private readonly IMapper _mapper;
         private readonly ISessionContext _sessionContext;
         private readonly ISpecialNumberApplication _specialNumberApplication;
+        private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
 
 
         public SpecialController(
            IMapper mapper,
            ISessionContext sessionContext,
-           ISpecialNumberApplication specialNumberApplication)
+           ISpecialNumberApplication specialNumberApplication,
+           ISystemDicDataCacheManager sysDicDataCacheManager)
         {
             _mapper = mapper;
             _sessionContext = sessionContext;
             _specialNumberApplication = specialNumberApplication;
+            _sysDicDataCacheManager = sysDicDataCacheManager;
         }
 
         #endregion
@@ -42,7 +49,9 @@ namespace Hotline.Api.Controllers
         [HttpGet("number/list")]
         public async Task<PagedDto<SpecialNumberInfoDto>> QueryAllSpecialNumberListAsync([FromQuery] SpecialNumberDto pagedDto)
         {
-            return (await _specialNumberApplication.QueryAllSpecialNumberListAsync(pagedDto, HttpContext.RequestAborted)).ToPaged();
+            var (total, items) = await _specialNumberApplication.QueryAllSpecialNumberListAsync(pagedDto)
+                 .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
+            return new PagedDto<SpecialNumberInfoDto>(total, _mapper.Map<IReadOnlyList<SpecialNumberInfoDto>>(items));
         }
 
         /// <summary>
@@ -100,6 +109,19 @@ namespace Hotline.Api.Controllers
             return await _specialNumberApplication.GetSpecialNumberByAsync(PhoneNumber, HttpContext.RequestAborted);
         }
 
+        /// <summary>
+        /// 特殊号码[政治身份]basedata
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("number/basedata")]
+        public Dictionary<string, dynamic> GetBaseData()
+        {
+            return new Dictionary<string, dynamic>
+            {
+                { "PoliticalIdentity", _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.PoliticalIdentity)}
+            };
+        }
+
         #endregion
     }
 }

+ 6 - 0
src/Hotline.Api/Controllers/TelRestController.cs

@@ -98,7 +98,13 @@ namespace Hotline.Api.Controllers
             };
             var id = await _telRestApplyRepository.AddAsync(telRestApply, HttpContext.RequestAborted);
             if (!string.IsNullOrEmpty(id))
+            {
+                //查询小休审批人
+
+                //给审批人发送提醒
+
                 return "小休申请成功!";
+            }
             else
                 return "小休申请失败!";
 

+ 22 - 5
src/Hotline.Api/Controllers/TestController.cs

@@ -4,6 +4,7 @@ using Hotline.Application.CallCenter;
 using Hotline.Application.ExportExcel;
 using Hotline.Application.FlowEngine;
 using Hotline.Application.JudicialManagement;
+using Hotline.Application.OrderApp;
 using Hotline.Application.Quality;
 using Hotline.Application.StatisticalReport;
 using Hotline.Caching.Interfaces;
@@ -31,7 +32,6 @@ using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Home;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Realtime;
-using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Dtos.Snapshot;
 using Hotline.Share.Dtos.TrCallCenter;
 using Hotline.Share.Enums.CallCenter;
@@ -40,7 +40,6 @@ using Hotline.Share.Enums.JudicialManagement;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Mq;
 using Hotline.ThirdAccountDomainServices.Interfaces;
-using Hotline.Tools;
 using Hotline.Users;
 using Mapster;
 using MapsterMapper;
@@ -50,10 +49,7 @@ using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Options;
 using MiniExcelLibs;
 using NETCore.Encrypt;
-using Senparc.Weixin.MP.AdvancedAPIs.MerChant;
 using SqlSugar;
-using System.Threading;
-using Hotline.Application.OrderApp;
 using XC.RSAUtil;
 using XF.Domain.Authentications;
 using XF.Domain.Cache;
@@ -1477,5 +1473,26 @@ public class TestController : BaseController
     //    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: cancellationToken);
     //}
 
+
+    /// <summary>
+    /// 工单 PushTypeCode 重推处理
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("order_push_type_code")]
+    [AllowAnonymous]
+    public async Task OrderPushTypeCode([FromBody] OrderPushTypeCodeDto dto)
+    {
+        var orders = await _orderRepository.Queryable()
+            .Where(d => d.PushTypeCode.Contains(dto.PushTypeCode))
+            .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime) //受理时间开始
+            .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime) //受理时间结束
+            .ToListAsync(HttpContext.RequestAborted);
+        foreach (var order in orders)
+        {
+            var orderDto = _mapper.Map<OrderDto>(order);
+            await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
+                cancellationToken: HttpContext.RequestAborted);
+        }
+    }
 }
 

+ 0 - 13
src/Hotline.Api/Hotline.Api.csproj

@@ -42,17 +42,4 @@
     <None Remove="logs\**" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Compile Remove="Controllers\Order\OrderComplementController.cs" />
-    <Compile Remove="logs\**" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <EmbeddedResource Remove="logs\**" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Content Remove="logs\**" />
-  </ItemGroup>
-
 </Project>

+ 1 - 1
src/Hotline.Api/StartupExtensions.cs

@@ -206,7 +206,7 @@ internal static class StartupExtensions
         services.AddPdfManager();
 
         //compression
-        services.RejisterCompression();
+        services.RegisterCompression();
 
         services.AddSingleton<IAuthorizationPolicyProvider, AuthorizationPolicyProvider>();
         services.AddSingleton<IAuthorizationHandler, PermissionHandler>();

+ 1 - 1
src/Hotline.Api/StartupHelper.cs

@@ -385,7 +385,7 @@ namespace Hotline.Api
             return services;
         }
 
-        public static IServiceCollection RejisterCompression(this IServiceCollection services)
+        public static IServiceCollection RegisterCompression(this IServiceCollection services)
         {
             services.Configure<BrotliCompressionProviderOptions>(options =>
             {

+ 17 - 1
src/Hotline.Application/CallCenter/DefaultCallApplication.cs

@@ -201,6 +201,22 @@ public abstract class DefaultCallApplication : ICallApplication
             dto.GroupId, _sessionContext.StaffNo, null);
         await _workRepository.AddAsync(work, cancellationToken);
 
+        //如果有未结束的小休,先结束
+        var telRest = await _telRestRepository.GetAsync(x => x.TelNo == work.TelNo && !x.EndTime.HasValue, cancellationToken);
+        if (telRest != null)
+        {
+            telRest.EndRest();
+            await _telRestRepository.UpdateAsync(telRest, cancellationToken);
+        }
+
+        //如果有未结束的话机动作先结束话机动作
+        var telAction = await _telActionRecordRepository.GetAsync(x => x.TelNo == work.TelNo && x.ActionType == EActionType.TelRest && !x.EndTime.HasValue, cancellationToken);
+        if (telAction != null)
+        {
+            telAction.EndAction();
+            await _telActionRecordRepository.UpdateAsync(telAction);
+        }
+
         //记录签入日志
         var actionRecord = new TelActionRecord(work.UserId, work.UserName, work.TelNo, work.QueueId, EActionType.SignIn);
 
@@ -360,7 +376,7 @@ public abstract class DefaultCallApplication : ICallApplication
                         .Max(m => m.TelNo)
                     ),
             }, true)
-                 .WhereIF(!string.IsNullOrEmpty(dto.StaffNo), p => p.StaffNo == dto.StaffNo);
+                .WhereIF(!string.IsNullOrEmpty(dto.StaffNo), p => p.StaffNo == dto.StaffNo);
         }
         return query.Select((d, o, v) => new CallNativeDto
         {

+ 1 - 1
src/Hotline.Application/CallCenter/XingTangCallApplication.cs

@@ -70,7 +70,7 @@ namespace Hotline.Application.CallCenter
             IRepository<TelActionRecord> telActionRecordRepository
         ) : base(telRepository, telGroupRepository, workRepository, telRestRepository, callNativeRepository,
             teloperationRepository, callidRelationRepository, cacheWork, userCacheManager, sessionContext, mapper,
-            logger, orderVisitDomainService,callDomainService
+            logger, orderVisitDomainService, callDomainService
             , orderVisitRepository, systemSettingCacheManager, capPublisher, orderRepository, systemLogRepository, telActionRecordRepository)
         {
             // _telRepository = telRepository;

+ 1 - 2
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -1,7 +1,6 @@
 using System.Data;
 using System.Dynamic;
 using DotNetCore.CAP;
-using ExtendedNumerics.Exceptions;
 using FluentValidation;
 using Hotline.Application.FlowEngine;
 using Hotline.Application.Quality;
@@ -5486,7 +5485,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     throw new UserFriendlyException($"该部门领导角色未设置用户,部门:{step.HandlerOrgId}, 角色:{SettingConstants.RoleJingBanRen}");
                 break;
             default:
-                throw new OutOfRangeException(nameof(GetHandlerRandomAsync));
+                throw new ArgumentOutOfRangeException(nameof(GetHandlerRandomAsync));
         }
 
         return user;

+ 3 - 2
src/Hotline.Application/SpecialNumber/ISpecialNumberApplication.cs

@@ -1,4 +1,5 @@
 using Hotline.Share.Dtos.Special;
+using SqlSugar;
 
 namespace Hotline.Application.SpecialNumber
 {
@@ -9,9 +10,9 @@ namespace Hotline.Application.SpecialNumber
         /// <summary>
         /// 特殊号码 - 列表
         /// </summary>
-        /// <param name="pagedDto"></param>
+        /// <param name="dto"></param>
         /// <returns></returns>
-        Task<(int, IList<SpecialNumberInfoDto>)> QueryAllSpecialNumberListAsync(SpecialNumberDto pagedDto, CancellationToken cancellationToken);
+        ISugarQueryable<Hotline.Special.SpecialNumber> QueryAllSpecialNumberListAsync(SpecialNumberDto dto);
 
         /// <summary>
         /// 特殊号码 - 新增

+ 10 - 9
src/Hotline.Application/SpecialNumber/SpecialNumberApplication.cs

@@ -6,6 +6,7 @@ using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Share.Dtos.Special;
+using Hotline.Orders;
 
 namespace Hotline.Application.SpecialNumber
 {
@@ -36,25 +37,23 @@ namespace Hotline.Application.SpecialNumber
         /// <summary>
         /// 特殊号码 - 列表
         /// </summary>
-        /// <param name="pagedDto"></param>
+        /// <param name="dto"></param>
         /// <returns></returns>
-        public async Task<(int, IList<SpecialNumberInfoDto>)> QueryAllSpecialNumberListAsync(SpecialNumberDto dto, CancellationToken cancellationToken)
+        public ISugarQueryable<Hotline.Special.SpecialNumber> QueryAllSpecialNumberListAsync(SpecialNumberDto dto)
         {
-            var typeSpliceName = string.Empty;
-
             //单表分页
-            var (total, temp) = await _specialNumberRepository.Queryable()
-
+            var query = _specialNumberRepository.Queryable()
                 .WhereIF(!string.IsNullOrEmpty(dto.PhoneNumber), x => x.PhoneNumber.Contains(dto.PhoneNumber))
                 .WhereIF(!string.IsNullOrEmpty(dto.Notes), x => x.Notes.Contains(dto.Notes))
+                .WhereIF(!string.IsNullOrEmpty(dto.PoliticalIdentityValue), x => x.PoliticalIdentityValue == dto.PoliticalIdentityValue)
+                .WhereIF(!string.IsNullOrEmpty(dto.PoliticalIdentityName), x => x.PoliticalIdentityName == dto.PoliticalIdentityName)
                 .WhereIF(dto.CreationTimeStart.HasValue, x => x.CreationTime >= dto.CreationTimeStart)
                 .WhereIF(dto.CreationTimeEnd.HasValue, x => x.CreationTime <= dto.CreationTimeEnd)
                 .OrderByIF(dto is { SortField: "creationTime", SortRule: 0 }, x => x.CreationTime, OrderByType.Asc)  //创建时间升序
                 .OrderByIF(dto is { SortField: "creationTime", SortRule: 1 }, x => x.CreationTime, OrderByType.Desc) //创建时间降序
                 .OrderByIF(string.IsNullOrEmpty(dto.SortField), x => x.CreationTime, OrderByType.Desc) //创建时间降序
-                .ToPagedListAsync(dto.PageIndex, dto.PageSize, cancellationToken);
-            return (total, _mapper.Map<IList<SpecialNumberInfoDto>>(temp));
-            //return (total, temp);
+              ;
+            return query;
         }
 
         #endregion
@@ -103,6 +102,8 @@ namespace Hotline.Application.SpecialNumber
 
             data.PhoneNumber = dto.PhoneNumber;
             data.Notes = dto.Notes;
+            data.PoliticalIdentityValue = dto.PoliticalIdentityValue;
+            data.PoliticalIdentityName = dto.PoliticalIdentityName;
 
             await _specialNumberRepository.UpdateAsync(data, cancellationToken);
         }

+ 2 - 1
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs

@@ -2353,7 +2353,7 @@ namespace Hotline.Application.StatisticalReport
               })
               .WhereIF(dto.OrgType == 1, (it, o) => o.OrgType != EOrgType.County)
               .WhereIF(dto.OrgType == 2, (it, o) => o.OrgType == EOrgType.County)
-              .WhereIF(!string.IsNullOrEmpty(dto.OrgName), (it, o) => o.Name.StartsWith(dto.OrgName))
+              .WhereIF(!string.IsNullOrEmpty(dto.OrgName), (it, o) => o.Name.Contains(dto.OrgName))
               .Select((it, o) => new DepartmentAcceptanceTypeStatisticsV1Dto
               {
                   OrgName = o.Id == "001" ? centerOrgName : o.Name,
@@ -2414,6 +2414,7 @@ namespace Hotline.Application.StatisticalReport
                  .LeftJoin<SystemOrganize>((x, o) => x.ActualHandleOrgCode == o.Id)
                  .WhereIF(dto.OrgType == 1, (x, o) => o.OrgType != EOrgType.County)
                  .WhereIF(dto.OrgType == 2, (x, o) => o.OrgType == EOrgType.County)
+                 .WhereIF(!string.IsNullOrEmpty(dto.OrgName), (x, o) => o.Name.Contains(dto.OrgName))
                  .OrderByDescending(x => x.CreationTime);
         }
 

+ 2 - 0
src/Hotline.Share/Dtos/CallCenter/QueryCallsFixedDto.cs

@@ -23,6 +23,8 @@ namespace Hotline.Share.Dtos.CallCenter
 
         public EEndBy? EndBy { get; set; }
 
+        public string? StaffNo {  get; set; }
+
         /// <summary>
         /// 工号
         /// </summary>

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

@@ -610,27 +610,27 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 一级热点
         /// </summary>
-        public string OneHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && !string.IsNullOrEmpty(HotspotId) && HotspotId.Length >= 2 ? HotspotSpliceName.Split("-")[0] : string.Empty;
+        public string OneHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >= 1 ? HotspotSpliceName.Split("-")[0] : string.Empty;
 
         /// <summary>
         /// 二级热点
         /// </summary>
-		public string TwoHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && !string.IsNullOrEmpty(HotspotId) && HotspotId.Length >= 4 ? HotspotSpliceName.Split("-")[1] : string.Empty;
+		public string TwoHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >= 2 ? HotspotSpliceName.Split("-")[1] : string.Empty;
 
         /// <summary>
         /// 三级热点
         /// </summary>
-		public string ThreeHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && !string.IsNullOrEmpty(HotspotId) && HotspotId.Length >= 6 ? HotspotSpliceName.Split("-")[2] : string.Empty;
+		public string ThreeHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >= 3 ? HotspotSpliceName.Split("-")[2] : string.Empty;
 
 		/// <summary>
 		/// 四级热点
 		/// </summary>
-		public string FourHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && !string.IsNullOrEmpty(HotspotId) && HotspotId.Length >= 8 ? HotspotSpliceName.Split("-")[3] : string.Empty;
+		public string FourHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >=4 ? HotspotSpliceName.Split("-")[3] : string.Empty;
 
 		/// <summary>
 		/// 五级热点
 		/// </summary>
-		public string FiveHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && !string.IsNullOrEmpty(HotspotId) && HotspotId.Length >= 10 ? HotspotSpliceName.Split("-")[4] : string.Empty;
+		public string FiveHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >= 5 ? HotspotSpliceName.Split("-")[4] : string.Empty;
 
 		/// <summary>
 		/// 特提次数

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

@@ -301,7 +301,25 @@ namespace Hotline.Share.Dtos.Order
         public bool IsReviewPass { get; set; }
     }
 
-    public class PublishOrderDelayDto
+	public record OrderPushTypeCodeDto
+	{
+		/// <summary>
+		/// 开始时间
+		/// </summary>
+		public DateTime? StartTime { get; set; }
+
+		/// <summary>
+		/// 结束时间
+		/// </summary>
+		public DateTime? EndTime { get; set; }
+
+		/// <summary>
+		/// pushTypeCode
+		/// </summary>
+		public string PushTypeCode { get; set; }
+	}
+
+	public class PublishOrderDelayDto
     {
         public string Id { get; set; }
 

+ 31 - 1
src/Hotline.Share/Dtos/Special/SpecialNumberDto.cs

@@ -13,6 +13,16 @@ namespace Hotline.Share.Dtos.Special
         /// 备注
         /// </summary>
         public string? Notes { get; set; }
+
+        /// <summary>
+        /// 政治身份ID
+        /// </summary>
+        public string? PoliticalIdentityValue { get; set; }
+
+        /// <summary>
+        /// 政治身份
+        /// </summary>
+        public string? PoliticalIdentityName { get; set; }
     }
 
     public record UpdateSpecialNumberDto : AddSpecialNumberDto
@@ -41,6 +51,16 @@ namespace Hotline.Share.Dtos.Special
 
         public string? Notes { get; set; }
 
+        /// <summary>
+        /// 政治身份ID
+        /// </summary>
+        public string? PoliticalIdentityValue { get; set; }
+
+        /// <summary>
+        /// 政治身份
+        /// </summary>
+        public string? PoliticalIdentityName { get; set; }
+
         /// <summary>
         /// 创建开始时间
         /// </summary>
@@ -54,7 +74,7 @@ namespace Hotline.Share.Dtos.Special
         /// <summary>
         /// 排序字段
         /// </summary>
-        public string? SortField { get; set; } = "creationTime";
+        public string? SortField { get; set; }
 
         /// <summary>
         /// 排序方式 // 0 升序 1 降序
@@ -79,6 +99,16 @@ namespace Hotline.Share.Dtos.Special
         /// </summary>
         public string? Notes { get; set; }
 
+        /// <summary>
+        /// 政治身份ID
+        /// </summary>
+        public string? PoliticalIdentityValue { get; set; }
+
+        /// <summary>
+        /// 政治身份
+        /// </summary>
+        public string? PoliticalIdentityName { get; set; }
+
         /// <summary>
         /// 创建时间
         /// </summary>

+ 0 - 1
src/Hotline.XingTang/Hotline.XingTang.csproj

@@ -7,7 +7,6 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\Hotline.Application\Hotline.Application.csproj" />
     <ProjectReference Include="..\Hotline\Hotline.csproj" />
     <ProjectReference Include="..\XingTang.Sdk\XingTang.Sdk.csproj" />
   </ItemGroup>

+ 1 - 11
src/Hotline.XingTang/ServiceCollectionExtensions.cs

@@ -1,15 +1,5 @@
-using Fw.Utility.UnifyResponse;
-using Hotline.CallCenter.Tels;
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Http;
+using Hotline.CallCenter.Tels;
 using Microsoft.Extensions.DependencyInjection;
-using NPOI.SS.Formula.Functions;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace Hotline.XingTang;
 public static class ServiceCollectionExtensions

+ 1 - 1
src/Hotline/Orders/Order.cs

@@ -256,7 +256,7 @@ namespace Hotline.Orders
         public List<string>? DuplicateIds { get; set; }
 
         /// <summary>
-        /// 推送分类 -- 弃用 转为表存储
+        /// 推送分类 --  转为表存储
         /// </summary>
         [SugarColumn(ColumnDescription = "推送分类代码")]
         public string? PushTypeCode { get; set; }

+ 1 - 1
src/Hotline/Orders/OrderDomainService.cs

@@ -445,7 +445,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         if (string.IsNullOrEmpty(orderId))
             throw UserFriendlyException.SameMessage("无效工单编号");
 
-        var query = _orderRepository.Queryable();
+        var query = _orderRepository.Queryable().Includes(d=>d.OrderPushTypes);
         if (withHotspot)
             query = query.Includes(d => d.Hotspot);
         if (withAcceptor)

+ 6 - 0
src/Hotline/Settings/SettingConstants.cs

@@ -1,5 +1,6 @@
 using Hotline.Share.Enums.Order;
 using Hotline.Users;
+using IdentityModel;
 using Org.BouncyCastle.Bcpg.OpenPgp;
 
 namespace Hotline.Settings
@@ -749,6 +750,11 @@ namespace Hotline.Settings
         /// </summary>
         public const string LuZhouHaoChaPing = "lzhcp";
 
+        /// <summary>
+        /// 工单保存特殊身份验证
+        /// </summary>
+        public const string SpecialIdentityVerification = "SpecialIdentityVerification";
+
         /// <summary>
         /// 甄别统计查询节点
         /// </summary>

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

@@ -316,4 +316,10 @@ public class SysDicTypeConsts
     /// 随手拍特殊红包审核类型
     /// </summary>
     public static string SnapshotRedPackSpecialType = "SnapshotRedPackSpecialType";
+
+    /// <summary>
+    /// 政治身份
+    /// </summary>
+    public static string PoliticalIdentity = "PoliticalIdentity";
+    
 }

+ 12 - 0
src/Hotline/Special/SpecialNumber.cs

@@ -18,5 +18,17 @@ namespace Hotline.Special
         /// </summary>
         [SugarColumn(ColumnDescription = "备注")]
         public string? Notes { get; set; }
+
+        /// <summary>
+        /// 政治身份ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "政治身份ID")]
+        public string? PoliticalIdentityValue { get; set; }
+
+        /// <summary>
+        /// 政治身份
+        /// </summary>
+        [SugarColumn(ColumnDescription = "政治身份")]
+        public string? PoliticalIdentityName { get; set; }
     }
 }