Эх сурвалжийг харах

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

田爽 4 сар өмнө
parent
commit
5228a7f472
31 өөрчлөгдсөн 499 нэмэгдсэн , 449 устгасан
  1. 0 11
      src/Hotline.Api/Controllers/ArticleController.cs
  2. 1 1
      src/Hotline.Api/Controllers/Bi/BiCallController.cs
  3. 0 3
      src/Hotline.Api/Controllers/CalloldController.cs
  4. 54 2
      src/Hotline.Api/Controllers/IPPbxController.cs
  5. 0 5
      src/Hotline.Api/Controllers/KnowledgeCommonController.cs
  6. 0 27
      src/Hotline.Api/Controllers/KnowledgeController.cs
  7. 57 81
      src/Hotline.Api/Controllers/OrderController.cs
  8. 0 1
      src/Hotline.Api/Controllers/OrderTerminateController.cs
  9. 0 6
      src/Hotline.Api/Controllers/OrgController.cs
  10. 0 17
      src/Hotline.Api/Controllers/QualityController.cs
  11. 0 4
      src/Hotline.Api/Controllers/RoleController.cs
  12. 0 11
      src/Hotline.Api/Controllers/SettingController.cs
  13. 0 9
      src/Hotline.Api/Controllers/SysController.cs
  14. 0 3
      src/Hotline.Api/Controllers/UserController.cs
  15. 0 7
      src/Hotline.Api/Controllers/WorkflowController.cs
  16. 1 1
      src/Hotline.Api/StartupExtensions.cs
  17. 12 0
      src/Hotline.Application/Knowledge/KnowApplication.cs
  18. 1 0
      src/Hotline.Application/Mappers/OrderMapperConfigs.cs
  19. 3 2
      src/Hotline.Application/Orders/OrderApplication.cs
  20. 2 2
      src/Hotline.Application/Orders/OrderScreenHandler/OrderScreenEndWorkflowHandler.cs
  21. 10 0
      src/Hotline.Application/StatisticalReport/CallReport/CallReportApplicationBase.cs
  22. 9 0
      src/Hotline.Application/StatisticalReport/CallReport/YiBinCallReportApplication.cs
  23. 6 1
      src/Hotline.Application/StatisticalReport/ICallReportApplication.cs
  24. 1 1
      src/Hotline.Application/StatisticalReport/OrderReportApplication.cs
  25. 130 90
      src/Hotline.Share/Dtos/Knowledge/KnowledgePagedDto.cs
  26. 1 1
      src/Hotline.Share/Dtos/Order/Detail/OrderFlowTraceDto.cs
  27. 31 6
      src/Hotline.Share/Dtos/Order/OrderDto.cs
  28. 127 118
      src/Hotline.Share/Dtos/Order/Publish/QueryOrderPublishDto.cs
  29. 40 37
      src/Hotline/Orders/OrderDomainService.cs
  30. 5 0
      src/Hotline/Settings/SettingConstants.cs
  31. 8 2
      src/Hotline/dataview.md

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

@@ -118,7 +118,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.QueryCircularList)]
         [HttpGet("circular/query")]
         public async Task<PagedDto<CircularDto>> QueryCircularList([FromQuery] QueryCircularListRequestDto dto)
         {
@@ -155,7 +154,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.ExamineCircular)]
         [HttpPost("circular/examine")]
         public async Task ExamineCircular([FromBody] ExamineCircularDto dto)
         {
@@ -217,7 +215,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.CommitCircular)]
         [HttpGet("circular/commit/{id}")]
         public async Task CommitCircular(string id)
         {
@@ -238,7 +235,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateCircular)]
         [HttpPost("circular/update")]
         public async Task UpdateCircular([FromBody] UpdateCircularDto dto)
         {
@@ -280,7 +276,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.DelCircular)]
         [HttpGet("circular/del/{id}")]
         public async Task DelCircular(string id)
         {
@@ -300,7 +295,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddCircular)]
         [HttpPost("circular/add")]
         public async Task AddCircular([FromBody] AddCircularDto dto)
         {
@@ -475,7 +469,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.ExamineBulletin)]
         [HttpPost("bulletin/examine")]
         public async Task ExamineBulletin([FromBody] ExamineBulletinDto dto)
         {
@@ -515,7 +508,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.CommitBulletin)]
         [HttpGet("bulletin/commit")]
         public async Task CommitBulletin(string id)
         {
@@ -536,7 +528,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateBulletin)]
         [HttpPost("bulletin/update")]
         public async Task UpdateBulletin([FromBody] UpdateBulletinDto dto)
         {
@@ -564,7 +555,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.DelBulletin)]
         [HttpGet("bulletin/del/{id}")]
         public async Task DelBulletin(string id)
         {
@@ -584,7 +574,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddBulletin)]
         [HttpPost("bulletin/add")]
         public async Task AddBulletin([FromBody] AddBulletinDto dto)
         {

+ 1 - 1
src/Hotline.Api/Controllers/Bi/BiCallController.cs

@@ -636,7 +636,7 @@ public class BiCallController : BaseController
     [HttpGet("query-callout-date-statistics")]
     public async Task<object> QueryCallOutDateStatisticsDetail([FromQuery] QueryCallDateStatisticsDetailDto dto)
     {
-        //var list = await _callReportApplication.QueryCallOutDateStatisticsDetail(dto);
+        var list = await _callReportApplication.QueryCallOutDateStatisticsDetail(dto);
         //return new { List = null, Total = null };
         return null;
 

+ 0 - 3
src/Hotline.Api/Controllers/CalloldController.cs

@@ -175,7 +175,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddBlackList)]
         [HttpPost("blacklist")]
         public async Task AddBlacklist([FromBody] AddBlacklistDto dto)
         {
@@ -186,7 +185,6 @@ namespace Hotline.Api.Controllers
         /// 删除黑名单数据
         /// </summary>
         /// <param name="phone"></param>
-        [Permission(EPermission.RemoveBlacklist)]
         [HttpDelete("blacklist/{phone}")]
         public void RemoveBlacklist(string phone)
         {
@@ -198,7 +196,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.QueryPagedBlack)]
         [HttpGet("blacklist/paged")]
         public async Task<PagedDto<Blacklist>> QueryPaged([FromQuery] BlacklistPagedDto dto)
         {

+ 54 - 2
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -43,6 +43,7 @@ using Hotline.Repository.SqlSugar.CallCenter;
 using SqlSugar;
 using Hotline.Tools;
 using Hotline.Api.Filter;
+using XF.Domain.Cache;
 
 namespace Hotline.Api.Controllers
 {
@@ -69,7 +70,7 @@ namespace Hotline.Api.Controllers
         private readonly IRepository<QualityTemplate> _qualityTemplate;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly IRepository<TelActionRecord> _telActionRecordRepository;
-        
+        private readonly ITypedCache<Work> _cacheWork;
         private readonly ISystemMobilAreaApplication _systemMobilAreaApplication;
         private readonly IRepository<Work> _workRepository;
         private readonly Publisher _publisher;
@@ -85,7 +86,7 @@ namespace Hotline.Api.Controllers
             ITelApplication telApplication, IRepository<Quality.Quality> qualiteyRepository,
             IAiQualityService aiQualityService, IRepository<QualityTemplate> qualityTemplate,
             ISystemSettingCacheManager systemSettingCacheManager, IRepository<TelActionRecord> telActionRecordRepository,
-            ISystemMobilAreaApplication systemMobilAreaApplication, IRepository<Work> workRepository, Publisher publisher, ITrCallRecordRepository callRecordRepository)
+            ISystemMobilAreaApplication systemMobilAreaApplication, IRepository<Work> workRepository, Publisher publisher, ITrCallRecordRepository callRecordRepository, ITypedCache<Work> cacheWork)
         {
             _trClient = trClient;
             _mapper = mapper;
@@ -112,6 +113,7 @@ namespace Hotline.Api.Controllers
             _workRepository = workRepository;
             _publisher = publisher;
             _callRecordRepository = callRecordRepository;
+            _cacheWork = cacheWork;
         }
 
         #region 添添呼
@@ -885,6 +887,56 @@ namespace Hotline.Api.Controllers
 
         #endregion
 
+        #region 话机状态
+
+        /// <summary>
+        /// 重置话机状态
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("tels-status-refreshservice")]
+        [AllowAnonymous]
+        public async Task TelsStatusRefreshService()
+        {
+            try
+            {
+                var list = await _workRepository.Queryable().Where(x => 1 == 1 && !x.EndTime.HasValue).ToListAsync();
+                var tellist = await _trClient.QueryTelStateAsync(new Tr.Sdk.Tels.QueryTelStateRequest { },HttpContext.RequestAborted);
+                foreach (var item in list)
+                {
+                    var telmodel = tellist.AgentList.First(x => x.TelNo == item.TelNo);
+                    if (telmodel != null)
+                    {
+                        if (telmodel.State == "logout")
+                        {
+                            var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && !x.EndTime.HasValue, HttpContext.RequestAborted);
+                            if (telRest is not null)
+                            {
+                                telRest.EndRest();
+                                await _telRestRepository.UpdateAsync(telRest, HttpContext.RequestAborted);
+                            }
+
+                            item.OffDuty();
+                            await _workRepository.UpdateAsync(item, HttpContext.RequestAborted);
+                            _cacheWork.Remove(item.GetKey(KeyMode.UserId));
+                            _cacheWork.Remove(item.GetKey(KeyMode.TelNo));
+                            var listx = await _telActionRecordRepository.Queryable().Where(x => x.TelNo == item.TelNo && !x.EndTime.HasValue).ToListAsync();
+                            foreach (var itemx in listx)
+                            {
+                                itemx.EndAction();
+                                await _telActionRecordRepository.UpdateAsync(itemx);
+                            }
+                        }
+                    }
+                }
+            }
+            catch
+            {
+
+            }
+        }
+
+        #endregion
+
         #endregion
     }
 }

+ 0 - 5
src/Hotline.Api/Controllers/KnowledgeCommonController.cs

@@ -55,7 +55,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddKnowledgeType)]
         [HttpPost("add")]
         public async Task<string> AddType([FromBody] AddKnowledgeTypeDto dto)
         {
@@ -67,7 +66,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateKnowledgeType)]
         [HttpPut("update")]
         public async Task UpdateType([FromBody] UpdateKnowledgeTypeDto dto)
         {
@@ -108,7 +106,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
-       [Permission(EPermission.RemoveKnowledgeType)]
         [HttpDelete("remove")]
         public async Task RemoveType(string Id)
         {
@@ -262,7 +259,6 @@ namespace Hotline.Api.Controllers
         /// 编写规范-查询详情
         /// </summary>
         /// <returns></returns>
-        [Permission(EPermission.KnowledgeStandardInfo)]
         [HttpGet("info-standard")]
         public async Task<KnowledgeStandard> GetStandard()
         {
@@ -285,7 +281,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.KnowledgeStandardUpdate)]
         [HttpPut("update-standard")]
         public async Task UpdateStandard([FromBody] UpdateKnowledgeStandardDto dto)
         {

+ 0 - 27
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -167,7 +167,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddKnowledge)]
         [HttpPost("add")]
         [LogFilter("知识新增")]
         public async Task<string> AddKnowledge([FromBody] AddStartFlowDto dto)
@@ -214,7 +213,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
-        [Permission(EPermission.KnowledgeOffShelf)]
         [HttpPut("offshelf")]
         [LogFilter("知识下架")]
         public async Task KnowledgeOffShelf([FromBody] OffShelfStartFlowDto dto)
@@ -256,7 +254,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
-        [Permission(EPermission.KnowledgeOnTheShelf)]
         [HttpPut("ontheshelf")]
         [LogFilter("知识上架")]
         public async Task KnowledgeOnTheShelf(string Id)
@@ -951,7 +948,6 @@ namespace Hotline.Api.Controllers
         ///// <param name="id">知识id</param>
         ///// <param name="dto">流程开启参数</param>
         ///// <returns></returns>
-        //[Permission(EPermission.AddKnowledge)]
         //[HttpPost("{id}/add-startflow")]
         //public async Task AddStartFlow(string id, [FromBody] StartWorkflowDto dto)
         //{
@@ -964,7 +960,6 @@ namespace Hotline.Api.Controllers
         ///// <param name="id">知识id</param>
         ///// <param name="dto">流程开启参数</param>
         ///// <returns></returns>
-        //[Permission(EPermission.KnowledgeDelete)]
         //[HttpPost("{id}/remove-startflow")]
         //public async Task RemoveStartFlow(string id, [FromBody] StartWorkflowDto dto)
         //{
@@ -975,7 +970,6 @@ namespace Hotline.Api.Controllers
         /// 查询知识库办理流程开启参数-新增
         /// </summary>
         /// <returns></returns>
-        //[Permission(EPermission.AddKnowledge)]
         [HttpGet("add-flow-start")]
         public async Task<NextStepsDto> GetAddFlowStartOptionsAsync()
         {
@@ -987,7 +981,6 @@ namespace Hotline.Api.Controllers
         /// 查询知识库办理流程开启参数-新增
         /// </summary>
         /// <returns></returns>
-        //[Permission(EPermission.AddKnowledge)]
         [HttpGet("update-flow-start")]
         public async Task<NextStepsDto> GetUpdateFlowStartOptionsAsync()
         {
@@ -999,7 +992,6 @@ namespace Hotline.Api.Controllers
         /// 查询知识库办理流程开启参数-删除
         /// </summary>
         /// <returns></returns>
-        //[Permission(EPermission.KnowledgeDelete)]
         [HttpGet("remove-flow-start")]
         public async Task<NextStepsDto> GetRemoveFlowStartOptionsAsync()
         {
@@ -1011,7 +1003,6 @@ namespace Hotline.Api.Controllers
         /// 查询知识库办理流程开启参数-下架
         /// </summary>
         /// <returns></returns>
-        //[Permission(EPermission.KnowledgeDelete)]
         [HttpGet("offshelf-flow-start")]
         public async Task<NextStepsDto> GetOffshelfFlowStartOptionsAsync()
         {
@@ -1054,7 +1045,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dtos"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddKnowledgeWord)]
         [HttpPost("knowledge_word")]
         [LogFilter("新增知识库词库")]
         public async Task Add([FromBody] KnowledgeWordAddDto dto)
@@ -1068,7 +1058,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.DeleteKnowledgeWord)]
         [HttpDelete("knowledge_word")]
         [LogFilter("删除知识库词库")]
         public async Task Delete([FromBody] KnowledgeWordDeleteDto dto)
@@ -1081,7 +1070,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateKnowledgeWord)]
         [HttpPut("knowledge_word")]
         [LogFilter("更新知识库词库")]
         public async Task Update([FromBody] KnowledgeWordUpdateDto dto)
@@ -1145,7 +1133,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dtos"></param>
         /// <returns></returns>
-        //[Permission(EPermission.AddKnowledgeCorrection)]
         [HttpPost("knowledge_correction")]
         [LogFilter("新增知识纠错")]
         public async Task Add([FromBody] KnowledgeCorrectionAddDto dto)
@@ -1159,7 +1146,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        //[Permission(EPermission.DeleteKnowledgeCorrection)]
         //[HttpDelete("knowledge_correction")]
         //public async Task Delete([FromBody] KnowledgeCorrectionDeleteDto dto)
         //{
@@ -1171,7 +1157,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        //[Permission(EPermission.UpdateKnowledgeCorrection)]
         //[HttpPut("knowledge_correction")]
         //public async Task Update([FromBody] KnowledgeCorrectionUpdateDto dto)
         //{
@@ -1187,7 +1172,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.ReplyKnowledgeCorrection)]
         [HttpPut("knowledge_correction/Reply")]
         [LogFilter("答复知识纠错")]
         public async Task Reply([FromBody] KnowledgeCorrectionUpdateDto dto)
@@ -1207,7 +1191,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.KnowledgeCorrectionList)]
         [HttpGet("knowledge_correction/list")]
         public async Task<PagedDto<KnowledgeCorrectionDto>> List([FromQuery] KnowledgeCorrectionListDto dto)
         {
@@ -1235,7 +1218,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        //[Permission(EPermission.KnowledgeCorrectionEntity)]
         [HttpGet("knowledge_correction/{id}")]
         public async Task<KnowledgeCorrection> CorrectionEntity(string id)
         {
@@ -1251,7 +1233,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dtos"></param>
         /// <returns></returns>
-        //[Permission(EPermission.AddKnowledgeQuestions)]
         [HttpPost("knowledge_questions")]
         [LogFilter("新增知识提问")]
         public async Task Add([FromBody] KnowledgeQuestionsAddDto dto)
@@ -1265,7 +1246,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        //[Permission(EPermission.DeleteKnowledgeQuestions)]
         //[HttpDelete("knowledge_questions")]
         //public async Task Delete([FromBody] KnowledgeQuestionsDeleteDto dto)
         //{
@@ -1277,7 +1257,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        //[Permission(EPermission.UpdateKnowledgeQuestions)]
         //[HttpPut("knowledge_questions")]
         //public async Task Update([FromBody] KnowledgeQuestionsUpdateDto dto)
         //{
@@ -1293,7 +1272,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.ReplyKnowledgeQuestions)]
         [HttpPut("knowledge_questions/Reply")]
         [LogFilter("答复知识提问")]
         public async Task Reply([FromBody] KnowledgeQuestionsUpdateDto dto)
@@ -1313,7 +1291,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.KnowledgeQuestionsList)]
         [HttpGet("knowledge_questions/list")]
         public async Task<PagedDto<KnowledgeQuestionsDto>> List([FromQuery] KnowledgeQuestionsListDto dto)
         {
@@ -1340,7 +1317,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        //[Permission(EPermission.KnowledgeQuestionsEntity)]
         [HttpGet("knowledge_questions/{id}")]
         public async Task<KnowledgeQuestions> QuestionsEntity(string id)
         {
@@ -1357,7 +1333,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.KnowledgeCollectList)]
         [HttpGet("knowledge_collect/list")]
         public async Task<PagedDto<KnowledgeCollectDto>> List([FromQuery] KnowledgeCollectListDto dto)
         {
@@ -1378,7 +1353,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dtos"></param>
         /// <returns></returns>
-        //[Permission(EPermission.AddKnowledgeCollect)]
         [HttpPost("knowledge_collect")]
         [LogFilter("知识收藏")]
         public async Task Add([FromBody] KnowledgeCollectAddDto dto)
@@ -1408,7 +1382,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        //[Permission(EPermission.AddKnowledgeScore)]
         [HttpDelete("knowledge_score")]
         [LogFilter("知识评分")]
         public async Task Delete([FromBody] KnowledgeCollectAddDto dto)

+ 57 - 81
src/Hotline.Api/Controllers/OrderController.cs

@@ -413,7 +413,7 @@ public class OrderController : BaseController
         if (hasHuiQian)
             throw UserFriendlyException.SameMessage("选择的工单中含有会签工单, 不能批量发布. 请排除会签工单.");
 
-        var hasProvince = await _orderRepository.Queryable().AnyAsync(x => dto.Ids.Contains(x.Id) && x.IsProvince == true);
+        var hasProvince = await _orderRepository.Queryable().AnyAsync(x => dto.Ids.Contains(x.Id) && x.Source == ESource.ProvinceStraight);
         if (hasProvince)
             throw UserFriendlyException.SameMessage("选择的工单中含有省工单, 不能批量发布. 请排除省工单.");
 
@@ -438,7 +438,6 @@ public class OrderController : BaseController
     /// 发布工单
     /// </summary>
     /// <returns></returns>
-    [Permission(EPermission.PublishOrder)]
     [HttpPost("publish")]
     [LogFilter("发布工单")]
     public async Task PublishOrder([FromBody] PublishOrderDto dto)
@@ -607,46 +606,52 @@ public class OrderController : BaseController
 
         //需求251  某些工单需自动发送短信
         //任何类型的省工单都不需要发送短信
-        try
+
+        var isOpenSendEndSms = _systemSettingCacheManager.GetSetting(SettingConstants.IsOpenSendEndSms)?.SettingValue[0];
+        if (isOpenSendEndSms == "true")
         {
-            if (order.Source != ESource.ProvinceStraight && _appOptions.Value.IsYiBin)
+            try
             {
-                var code = "";
-                //受理类型为“投诉、举报”
-                if ((order.AcceptTypeCode == "30" || order.AcceptTypeCode == "35") && orderVisit.VisitState != EVisitState.Visited)
+                if (order.Source != ESource.ProvinceStraight)
                 {
-                    code = "1017";
-                    orderVisit.VisitState = EVisitState.SMSVisiting;
-                    await _orderVisitRepository.UpdateAsync(orderVisit);
-                }
-                else
-                    code = "1018";
 
-                var messageDto = new Share.Dtos.Push.MessageDto
-                {
-                    PushBusiness = EPushBusiness.SearchSms,
-                    ExternalId = visitId,
-                    OrderId = order.Id,
-                    PushPlatform = EPushPlatform.Sms,
-                    Remark = order.Title,
-                    Name = order.FromName,
-                    TemplateCode = code,
-                    Params = new List<string>() { order.No, order.Password },
-                    TelNumber = order.Contact,
-                };
-                await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
-
-                // 发送短信后推送一个 48小时的延迟消息队列. 当消息队列收到消息时, 判断用户是否回复了, 如果未回复短信就 默认满意
-                var delaySecond = _systemSettingCacheManager.DefaultVisitSmsDelaySecond;
-                await _capPublisher.PublishDelayAsync(
-                    TimeSpan.FromSeconds(delaySecond),
-                    EventNames.UpdateVisitDelaySms,
-                    messageDto,
-                    cancellationToken: HttpContext.RequestAborted);
+                    var code = "";
+                    //受理类型为“投诉、举报”
+                    if ((order.AcceptTypeCode == "30" || order.AcceptTypeCode == "35") && orderVisit.VisitState != EVisitState.Visited)
+                    {
+                        code = "1017";
+                        orderVisit.VisitState = EVisitState.SMSVisiting;
+                        await _orderVisitRepository.UpdateAsync(orderVisit);
+                    }
+                    else
+                        code = "1018";
+
+                    var messageDto = new Share.Dtos.Push.MessageDto
+                    {
+                        PushBusiness = EPushBusiness.SearchSms,
+                        ExternalId = visitId,
+                        OrderId = order.Id,
+                        PushPlatform = EPushPlatform.Sms,
+                        Remark = order.Title,
+                        Name = order.FromName,
+                        TemplateCode = code,
+                        Params = new List<string>() { order.No, order.Password },
+                        TelNumber = order.Contact,
+                    };
+                    await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
+
+                    // 发送短信后推送一个 48小时的延迟消息队列. 当消息队列收到消息时, 判断用户是否回复了, 如果未回复短信就 默认满意
+                    var delaySecond = _systemSettingCacheManager.DefaultVisitSmsDelaySecond;
+                    await _capPublisher.PublishDelayAsync(
+                        TimeSpan.FromSeconds(delaySecond),
+                        EventNames.UpdateVisitDelaySms,
+                        messageDto,
+                        cancellationToken: HttpContext.RequestAborted);
+                }
+            }
+            catch (Exception)
+            {
             }
-        }
-        catch (Exception)
-        {
         }
 
         if (orderVisit.VisitState == EVisitState.Visited && !order.IsProvince)
@@ -759,11 +764,15 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpGet("published/items")]
-    public async Task<IList<PublishedDto>> GetPublishedOrderListAsync([FromQuery] PublishedPagedRequest dto)
+    public async Task<IReadOnlyList<PublishedDto>> GetPublishedOrderListAsync([FromQuery] PublishedPagedRequest dto)
     {
-        var query = _orderApplication.GetPublishedOrder(dto);
-        return (await query.ToFixedListAsync(dto.QueryIndex, 200, HttpContext.RequestAborted))
-            .Adapt<List<PublishedDto>>();
+        //var query = _orderApplication.GetPublishedOrder(dto);
+        //return (await query.ToFixedListAsync(dto.QueryIndex, 200, HttpContext.RequestAborted))
+        //.Adapt<List<PublishedDto>>();
+        var orderPublishs = await _orderApplication.GetPublishedOrder(dto)
+            .ToPageListWithoutTotalAsync(dto, HttpContext.RequestAborted);
+
+        return _mapper.Map<IReadOnlyList<PublishedDto>>(orderPublishs);
     }
 
     /// <summary>
@@ -848,7 +857,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.PublishedModify)]
     [HttpPost("published-order-modify")]
     [LogFilter("修改发布内容")]
     public async Task PublishedModify([FromBody] PublishOrderModifyDto dto)
@@ -1230,7 +1238,6 @@ public class OrderController : BaseController
     /// 回访保存
     /// </summary>
     /// <returns></returns>
-    [Permission(EPermission.Visit)]
     [HttpPost("visit")]
     [LogFilter("工单回访")]
     public async Task Visit([FromBody] VisitDto dto)
@@ -1246,7 +1253,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.Visit)]
     [HttpPost("visit/batch")]
     [LogFilter("批量工单回访")]
     public async Task<VisitBatchOutDto> VisitBatch([FromBody] VisitBatchInDto dto)
@@ -1873,7 +1879,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    //[Permission(EPermission.ApplyDelay)]
     [HttpPost("delay")]
     [LogFilter("新增工单延期申请")]
     public async Task ApplyDelay([FromBody] StartWorkflowDto<ApplyDelayDto> dto)
@@ -2067,7 +2072,6 @@ public class OrderController : BaseController
     /// 延期列表
     /// </summary>
     /// <returns></returns>
-    //[Permission(EPermission.DelayList)]
     [HttpGet("delay")]
     public async Task<PagedDto<OrderDelayDto>> DelayList([FromQuery] DelayListDto dto)
     {
@@ -2120,7 +2124,6 @@ public class OrderController : BaseController
     /// 延期列表
     /// </summary>
     /// <returns></returns>
-    //[Permission(EPermission.DelayList)]
     [HttpGet("wait_delay")]
     public async Task<PagedDto<OrderDelayDto>> WaitDelayList([FromQuery] DelayListDto dto)
     {
@@ -2147,7 +2150,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    //[Permission(EPermission.DelayEntity)]
     [HttpGet("delay/{id}")]
     public async Task<OrderDelayDto> DelayEntity(string id)
     {
@@ -2244,7 +2246,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.CanOrderScreen)]
     [HttpGet("mayscreen")]
     public async Task<PagedDto<OrderVisitDetailDto>> MayScreenList([FromQuery] MayScreenListDto dto)
     {
@@ -2358,7 +2359,6 @@ public class OrderController : BaseController
     /// <summary>
     /// 开始工单甄别流程
     /// </summary>
-    [Permission(EPermission.ApplyScreen)]
     [HttpPost("screen/startflow")]
     [LogFilter("开始工单甄别流程")]
     public async Task StartFlow([FromBody] StartWorkflowDto<OrderScreenDto> dto)
@@ -2674,7 +2674,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.ApplySupervise)]
     [HttpPost("supervise/apply")]
     [LogFilter("新增工单督办")]
     public async Task ApplySupervise([FromBody] ApplyOrderSuperviseDto dto)
@@ -2924,7 +2923,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.ApplyUrge)]
     [HttpPost("urge/apply")]
     [LogFilter("新增工单催办")]
     public async Task ApplyUrge([FromBody] ApplyOrderUrgeDto dto)
@@ -3087,12 +3085,14 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpGet]
-    public async Task<PagedDto<OrderDto>> Query([FromQuery] QueryOrderDto dto)
+    public async Task<IReadOnlyList<OrderDto>> Query([FromQuery] QueryOrderDto dto)
     {
-        var query = _orderApplication.QueryOrders(dto);
-        var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
-
-        return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+        //var query = _orderApplication.QueryOrders(dto);
+        //var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
+        //return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+        var orders = await _orderApplication.QueryOrders(dto)
+            .ToPageListWithoutTotalAsync(dto, HttpContext.RequestAborted);
+        return _mapper.Map<IReadOnlyList<OrderDto>>(orders);
     }
 
     /// <summary>
@@ -3478,7 +3478,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.OrderAdd)]
     [HttpPost]
     [LogFilter("新增工单")]
     public async Task<object> Add([FromBody] AddOrderDto dto)
@@ -4351,9 +4350,6 @@ public class OrderController : BaseController
             .OrderBy(d => d.CreationTime)
             .ToTreeAsync(d => d.Traces, d => d.ParentId, null);
 
-        //todo files
-        //await _fileRepository.WorkflowTraceRecursion(workflowDto.Traces, HttpContext.RequestAborted);
-
         return _mapper.Map<IReadOnlyList<OrderFlowTraceDto>>(traces);
     }
 
@@ -4758,7 +4754,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.OrderPreviousAudit)]
     [HttpPost("order_previous_audit")]
     public async Task Audit([FromBody] AuditSendBackDto dto)
     {
@@ -4900,7 +4895,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    //[Permission(EPermission.OrderPreviousList)]
     [HttpGet("order_previous_list")]
     public async Task<PagedDto<SendBackDto>> AuditList([FromQuery] SendBackListDto dto)
     {
@@ -5010,7 +5004,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.SendBackOrder)]
     [HttpGet("send_back")]
     public async Task<PagedDto<OrderSendBackDto>> UrgeList([FromQuery] OrderSendBackListDto dto)
     {
@@ -5093,7 +5086,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.ApplySendBack)]
     [HttpPost("send_back/apply")]
     [LogFilter("新增工单退回申请")]
     public async Task ApplyUrge([FromBody] OrderSendBackAddDto dto)
@@ -5133,7 +5125,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.AuditSendBack)]
     [HttpPost("send_back/audit")]
     [LogFilter("审核工单退回申请")]
     public async Task ReplyUrge([FromBody] AuditOrderSendBackDto dto)
@@ -5192,7 +5183,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dtos"></param>
     /// <returns></returns>
-    [Permission(EPermission.ApplySpecial)]
     [HttpPost("special")]
     [LogFilter("新增工单特提")]
     public async Task Add([FromBody] OrderSpecialAddDto dto)
@@ -5581,7 +5571,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.AuditSpecial)]
     [HttpPut("special")]
     [LogFilter("审批工单特提")]
     public async Task Update([FromBody] AuditOrderSpecialDto dto)
@@ -5890,7 +5879,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.AuditSpecialOrderList)]
     [HttpGet("special/list")]
     public async Task<PagedDto<OrderSpecialDto>> List([FromQuery] OrderSpecialListDto dto)
     {
@@ -5909,7 +5897,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="pagedDto"></param>
     /// <returns></returns>
-    // [Permission(EPermission.AuditSpecialOrderList)]
     [HttpGet("special/getspeciallist")]
     public async Task<PagedDto<SpecialOrderListDto>> GetSpecialList([FromQuery] SpecialPagedListDto pagedDto)
     {
@@ -6275,7 +6262,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.DeleteCitizen)]
     [HttpDelete("citizen")]
     [LogFilter("删除市民信息")]
     public async Task Delete([FromBody] CitizenDeleteDto dto)
@@ -6288,7 +6274,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.UpdateCitizen)]
     [HttpPut("citizen")]
     [LogFilter("更新市民信息")]
     public async Task Update([FromBody] CitizenUpdateDto dto)
@@ -6306,7 +6291,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.CitizenList)]
     [HttpGet("citizen/list")]
     public async Task<PagedDto<CitizenDto>> List([FromQuery] CitizenListDto dto)
     {
@@ -6536,7 +6520,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.UpdateRepeatableEvent)]
     [HttpPut("repeatable_event")]
     [LogFilter("更新重复性事件")]
     public async Task Update([FromBody] RepeatableEventUpdateDto dto)
@@ -6605,7 +6588,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dtos"></param>
     /// <returns></returns>
-    [Permission(EPermission.AddOrderWord)]
     [HttpPost("order_word")]
     [LogFilter("新增工单词库")]
     public async Task Add([FromBody] OrderWordAddDto dto)
@@ -6619,7 +6601,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.DeleteOrderWord)]
     [HttpDelete("order_word")]
     [LogFilter("删除工单词库")]
     public async Task Delete([FromBody] OrderWordDeleteDto dto)
@@ -6632,7 +6613,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.UpdateOrderWord)]
     [HttpPut("order_word")]
     [LogFilter("更新工单词库")]
     public async Task Update([FromBody] OrderWordUpdateDto dto)
@@ -6650,7 +6630,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.OrderWordList)]
     [HttpGet("order_word/list")]
     public async Task<PagedDto<OrderWordDto>> List([FromQuery] OrderWordListDto dto)
     {
@@ -6698,7 +6677,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dtos"></param>
     /// <returns></returns>
-    [Permission(EPermission.AddOrderObserve)]
     [HttpPost("order_observe")]
     [LogFilter("新增工单观察")]
     public async Task Add([FromBody] OrderObserveAddDto dto)
@@ -6825,7 +6803,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dtos"></param>
     /// <returns></returns>
-    [Permission(EPermission.AddOrderFinality)]
     [HttpPost("order_finality")]
     [LogFilter("新增工单终结")]
     public async Task Add([FromBody] OrderFinalityAddDto dto)
@@ -6965,7 +6942,6 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    //[Permission(EPermission.OverdueOrderV1)]
     [HttpGet("order/about_expire/list_optimize")]
     public async Task<PagedDto<OrderDto>> GetAboutToExpireAsyncV1([FromQuery] AboutToExpireListDto dto)
     {

+ 0 - 1
src/Hotline.Api/Controllers/OrderTerminateController.cs

@@ -147,7 +147,6 @@ namespace Hotline.Api.Controllers
 		/// <summary>
 		/// 开始工单终止流程
 		/// </summary>
-		//[Permission(EPermission.ApplyTerminate)]
 		[HttpPost("startflow")]
 		[LogFilter("开始工单终止流程")]
 		public async Task StartFlow([FromBody] StartWorkflowDto<OrderTerminateDto> dto)

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

@@ -46,7 +46,6 @@ namespace Hotline.Api.Controllers
         /// 组织机构获取树形列表
         /// </summary>
         /// <returns></returns>
-        [Permission(EPermission.GetOrgJson)]
         [HttpGet("getorgjson")]
         [AllowAnonymous]
         public async Task<IReadOnlyList<SystemOrganize>> GetOrgJson()
@@ -54,7 +53,6 @@ namespace Hotline.Api.Controllers
             return await _systemOrganizeRepository.GetOrgJson();
         }
 
-        [Permission(EPermission.GetOrgJson)]
         [HttpGet("getorgjsonforuser")]
         [AllowAnonymous]
         public async Task<IReadOnlyList<SystemOrganize>> GetOrgJsonForUser()
@@ -74,7 +72,6 @@ namespace Hotline.Api.Controllers
         ///// </summary>
         ///// <param name="dto"></param>
         ///// <returns></returns>
-        //[Permission(EPermission.AddOrg)]
         //[HttpPost("add-org")]
         //[Obsolete]
         //public async Task AddOrg([FromBody] AddOrgDto dto)
@@ -98,7 +95,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddOrg)]
         [HttpPost]
         public async Task Add([FromBody] AddOrgDto dto)
         {
@@ -115,7 +111,6 @@ namespace Hotline.Api.Controllers
         ///// </summary>
         ///// <param name="dto"></param>
         ///// <returns></returns>
-        //[Permission(EPermission.UpdateOrg)]
         //[HttpPost("update-org")]
         //[Obsolete]
         //public async Task UpdateOrg([FromBody] UpdateOrgDto dto)
@@ -140,7 +135,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateOrg)]
         [HttpPut]
         public async Task Update([FromBody] UpdateOrgDto dto)
         {

+ 0 - 17
src/Hotline.Api/Controllers/QualityController.cs

@@ -111,7 +111,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateQuality)]
         [HttpPut]
         public async Task Update([FromBody] UpdateQualityDto dto)
         {
@@ -237,7 +236,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dtos"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddQualityItem)]
         [HttpPost("item")]
         public async Task Add([FromBody] QualityItemAddDto dto)
         {
@@ -253,7 +251,6 @@ namespace Hotline.Api.Controllers
         ///// </summary>
         ///// <param name="dto"></param>
         ///// <returns></returns>
-        //[Permission(EPermission.DeleteQualityItem)]
         //[HttpDelete("item")]
         //public async Task Delete([FromBody] QualityItemDeleteDto dto)
         //{
@@ -265,7 +262,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.DeleteQualityItem)]
         [HttpDelete("itemBatch")]
         public async Task Delete([FromBody] QualityItemBatchDeleteDto dto)
         {
@@ -289,7 +285,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateQualityItem)]
         [HttpPut("item")]
         public async Task Update([FromBody] QualityItemUpdateDto dto)
         {
@@ -311,7 +306,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.QualityItemList)]
         [HttpGet("item/list")]
         public async Task<PagedDto<QualityItemDto>> List([FromQuery] QualityItemListDto dto)
         {
@@ -344,7 +338,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dtos"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddQualityTemplate)]
         [HttpPost("template")]
         public async Task Add([FromBody] TemplateAddDto dto)
         {
@@ -373,7 +366,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.DeleteQualityTemplate)]
         [HttpDelete("template")]
         public async Task Delete([FromBody] TemplateDeleteDto dto)
         {
@@ -387,7 +379,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.DeleteQualityTemplate)]
         [HttpDelete("templateBatch")]
         public async Task Delete([FromBody] TemplateBatchDeleteDto dto)
         {
@@ -402,7 +393,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateQualityTemplate)]
         [HttpPut("template")]
         public async Task Update([FromBody] TemplateUpdateDto dto)
         {
@@ -433,7 +423,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.QualityTemplateList)]
         [HttpGet("template/list")]
         public async Task<PagedDto<QualityTemplateDto>> List([FromQuery] TemplateListDto dto)
         {
@@ -467,7 +456,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.EnableQualityTemplate)]
         [HttpPut("template/enable")]
         public async Task Enable([FromBody] TemplateUpdateDto dto)
         {
@@ -489,7 +477,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dtos"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddQualityProhibited)]
         [HttpPost("prohibited")]
         public async Task Add([FromBody] ProhibitedAddDto dto)
         {
@@ -502,7 +489,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.DeleteQualityProhibited)]
         [HttpDelete("prohibited")]
         public async Task Delete([FromBody] ProhibitedDeleteDto dto)
         {
@@ -514,7 +500,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.DeleteQualityProhibited)]
         [HttpDelete("prohibitedBatch")]
         public async Task Delete([FromBody] ProhibitedBatchDeleteDto dto)
         {
@@ -527,7 +512,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateQualityProhibited)]
         [HttpPut("prohibited")]
         public async Task Update([FromBody] ProhibitedUpdateDto dto)
         {
@@ -544,7 +528,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.QualityProhibitedList)]
         [HttpGet("prohibited/list")]
         public async Task<PagedDto<QualityProhibitedDto>> List([FromQuery] ProhibitedListDto dto)
         {

+ 0 - 4
src/Hotline.Api/Controllers/RoleController.cs

@@ -93,7 +93,6 @@ public class RoleController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.AddRole)]
     [HttpPost]
     public async Task<string> Add([FromBody] AddRoleDto dto)
     {
@@ -120,7 +119,6 @@ public class RoleController : BaseController
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Permission(EPermission.RemoveRole)]
     [HttpDelete("{id}")]
     public async Task Remove(string id)
     {
@@ -144,7 +142,6 @@ public class RoleController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.UpdateRole)]
     [HttpPut]
     public async Task Update([FromBody] UpdateRoleDto dto)
     {
@@ -176,7 +173,6 @@ public class RoleController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.AllocationAuthority)]
     [HttpPost("allocationauthority")]
     public async Task AllocationAuthority(RoleAuthorityDto dto)
     {

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

@@ -101,7 +101,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        //[Permission(EPermission.GetSettingEntity)]
         [HttpGet("getsetting-entity/{id}")]
         public async Task<SystemSetting?> GetSettingEntity(string id)
         {
@@ -126,7 +125,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddSetting)]
         [HttpPost("setting-add")]
         public async Task AddSetting([FromBody]AddSettingDto dto)
         {
@@ -139,7 +137,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.ModifySettings)]
         [HttpPost("modifysettings")]
         public async Task ModifySettingsAsync([FromBody]ModifySettingDto  dto)
         {
@@ -164,7 +161,6 @@ namespace Hotline.Api.Controllers
         /// <param name="year"></param>
         /// <param name="month"></param>
         /// <returns></returns>
-        //[Permission(EPermission.DaySetingsList)]
         [HttpGet("getdaysettings-month/{year}/{month}")]
         public async Task<List<DaySetting>> GetDaySettingsByMonth(int year,int month)
         {
@@ -176,7 +172,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>`
-        [Permission(EPermission.SetDaySetting)]
         [HttpPost("setdaysettings")]
         public async Task SetDaySettings([FromBody]SetDaySettingsRequest request)
         {
@@ -204,7 +199,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.BusinessTagList)]
 		[HttpGet("businessTag")]
 		public async Task<PagedDto<BusinessTagListVo>> BusinessTagList([FromQuery] BusinessTagListDto dto)
 		{
@@ -222,7 +216,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dtos"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddBusinessTag)]
 		[HttpPost("businessTag")]
 		public async Task AddBusinessTag([FromBody] List<BusinessTagDto> dtos)
 		{
@@ -240,7 +233,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.DeleteBusinessTag)]
 		[HttpDelete("businessTag")]
 		public async Task DeleteBusinessTag([FromBody] DeleteBusinessTagDto dto)
 		{
@@ -255,7 +247,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateBusinessTag)]
 		[HttpPut("businessTag")]
 		public async Task UpdateBusinessTag([FromBody] UpdateBusinessTagDto dto)
 		{
@@ -272,7 +263,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.BusinessTagEntity)]
 		[HttpGet("businessTag/{id}")]
 		public async Task<BusinessTag> BusinessTagEntity(string id)
 		{
@@ -300,7 +290,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.BusinessTagBinding)]
         [HttpPut("businessTag/binding")]
         public async Task BusinessTagBinding([FromBody]BusinessTagBindingDto dto)
         {

+ 0 - 9
src/Hotline.Api/Controllers/SysController.cs

@@ -119,7 +119,6 @@ namespace Hotline.Api.Controllers
         /// 获取菜单
         /// </summary>
         /// <returns></returns>
-        //[Permission(EPermission.GetMenuJson)]
         [AllowAnonymous]
         [HttpGet("getmenujson")]
         public async Task<IReadOnlyList<SystemMenu>> GetMenuJson()
@@ -133,7 +132,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddMenu)]
         [HttpPost("add-menu")]
         public async Task AddMenu([FromBody] AddMenuDto dto)
         {
@@ -146,7 +144,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateMenu)]
         [HttpPost("update-menu")]
         public async Task UpdateMenu([FromBody] UpdateMenuDto dto)
         {
@@ -163,7 +160,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.RemoveMenu)]
         [HttpDelete("removemenu/{id}")]
         public async Task RemoveMenu(string id)
         {
@@ -203,7 +199,6 @@ namespace Hotline.Api.Controllers
         ///// </summary>
         ///// <param name="menuid"></param>
         ///// <returns></returns>
-        //[Permission(EPermission.GetButtonByMenu)]
         //[HttpGet("getbuttonmenu")]
         //public async Task<IReadOnlyList<SystemButton>> GetButtonByMenu(string menuid)
         //{
@@ -215,7 +210,6 @@ namespace Hotline.Api.Controllers
         ///// </summary>
         ///// <param name="dto"></param>
         ///// <returns></returns>
-        //[Permission(EPermission.AddButton)]
         //[HttpPost("add-button")]
         //public async Task AddButton([FromBody] AddButtonDto dto)
         //{
@@ -228,7 +222,6 @@ namespace Hotline.Api.Controllers
         ///// </summary>
         ///// <param name="dto"></param>
         ///// <returns></returns>
-        //[Permission(EPermission.UpdateButton)]
         //[HttpPost("update-button")]
         //public async Task UpdateButton([FromBody] UpdateButtonDto dto)
         //{
@@ -244,7 +237,6 @@ namespace Hotline.Api.Controllers
         ///// </summary>
         ///// <param name="id"></param>
         ///// <returns></returns>
-        //[Permission(EPermission.RemoveButton)]
         //[HttpDelete("removebutton/{id}")]
         //public async Task RemoveButton(string id)
         //{
@@ -259,7 +251,6 @@ namespace Hotline.Api.Controllers
         ///// </summary>
         ///// <param name="id"></param>
         ///// <returns></returns>
-        //[Permission(EPermission.GetButton)]
         //[HttpGet("button/{id}")]
         //public async Task<SystemButton> GetButton(string id)
         //{

+ 0 - 3
src/Hotline.Api/Controllers/UserController.cs

@@ -225,7 +225,6 @@ public class UserController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.UpdateUser)]
     [HttpPut]
     public async Task Update([FromBody] UpdateUserDto dto)
     {
@@ -275,7 +274,6 @@ public class UserController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.AddUser)]
     [HttpPost]
     public async Task<string> Add([FromBody] AddUserDto dto)
     {
@@ -341,7 +339,6 @@ public class UserController : BaseController
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Permission(EPermission.RemoveUser)]
     [HttpDelete("{id}")]
     [LogFilter("删除用户")]
     public async Task Remove(string id)

+ 0 - 7
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -133,7 +133,6 @@ public class WorkflowController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.FlowDefinitionQuery)]
     [HttpGet("definition")]
     public async Task<PagedDto<DefinitionDto>> QueryDefinitions([FromQuery] QueryDefinitionDto dto)
     {
@@ -191,7 +190,6 @@ public class WorkflowController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.FlowDefinitionAdd)]
     [HttpPost("definition")]
     public async Task<string> AddDefinition([FromBody] AddDefinitionDto dto)
     {
@@ -203,7 +201,6 @@ public class WorkflowController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.FlowDefinitionUpdate)]
     [HttpPut("definition")]
     public async Task UpdateDefinition([FromBody] UpdateDefinitionDto dto)
     {
@@ -228,7 +225,6 @@ public class WorkflowController : BaseController
     /// <param name="id"></param>
     /// <returns></returns>
     /// <exception cref="UserFriendlyException"></exception>
-    [Permission(EPermission.FlowDefinitionRemove)]
     [HttpDelete("definition/{id}")]
     public async Task RemoveDefinition(string id)
     {
@@ -243,7 +239,6 @@ public class WorkflowController : BaseController
     /// 发布(列表操作)
     /// </summary>
     /// <returns></returns>
-    [Permission(EPermission.FlowDefinitionPublish)]
     [HttpPost("definition/{id}/publish")]
     public async Task Publish(string id)
     {
@@ -255,7 +250,6 @@ public class WorkflowController : BaseController
     /// </summary>
     /// <returns></returns>
     [Obsolete]
-    [Permission(EPermission.FlowDefinitionPublish)]
     [HttpPost("definition/publish")]
     public async Task Publish([FromBody] AddDefinitionDto dto)
     {
@@ -405,7 +399,6 @@ public class WorkflowController : BaseController
     // /// </summary>
     // /// <param name="dto"></param>
     // /// <returns></returns>
-    // //[Permission(EPermission.FlowSupplement)]
     // [HttpPost("supplement")]
     // public async Task Supplement([FromBody] SupplementDto dto)
     // {

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

@@ -168,7 +168,7 @@ internal static class StartupExtensions
                     .AddScoped<ICallApplication, TianRunCallApplication>()
                     .AddScoped<ITrApplication, TrApplication>()
                     .AddHostedService<CurrentWaitNumService>()
-                    .AddHostedService<TelsStatusRefreshService>()
+                    //.AddHostedService<TelsStatusRefreshService>()
                     .AddTrSdk(callCenterConfiguration.TianRun.Address,
                         callCenterConfiguration.TianRun.Username,
                         callCenterConfiguration.TianRun.Password);

+ 12 - 0
src/Hotline.Application/Knowledge/KnowApplication.cs

@@ -102,6 +102,18 @@ namespace Hotline.Application.Knowledge
                 .WhereIF(pagedDto.Status ==  EKnowledgeStatus.NewDrafts ,x=>x.Status == EKnowledgeStatus.Drafts || x.Status == EKnowledgeStatus.Revert)
                 .WhereIF(pagedDto.NewDraftsStatus is EKnowledgeStatus.Drafts , x=>x.Status == EKnowledgeStatus.Drafts)
                 .WhereIF(pagedDto.NewDraftsStatus is EKnowledgeStatus.Revert, x => x.Status == EKnowledgeStatus.Revert)
+
+                .WhereIF(pagedDto.CreationStartTime.HasValue,x=>x.CreationTime>= pagedDto.CreationStartTime)
+                .WhereIF(pagedDto.CreationEndTime.HasValue, x => x.CreationTime <= pagedDto.CreationEndTime)
+
+                  .WhereIF(pagedDto.StartOnShelfTime.HasValue, x => x.OnShelfTime >= pagedDto.StartOnShelfTime)
+                  .WhereIF(pagedDto.EndOnShelfTime.HasValue, x => x.OnShelfTime <= pagedDto.EndOnShelfTime)
+
+                   .WhereIF(pagedDto.StartOffShelfTime.HasValue, x => x.OffShelfTime >= pagedDto.StartOffShelfTime)
+                  .WhereIF(pagedDto.EndOffShelfTime.HasValue, x => x.OffShelfTime <= pagedDto.EndOffShelfTime)
+
+                  .WhereIF(pagedDto.StartUpdateTime.HasValue, x => x.LastModificationTime >= pagedDto.StartUpdateTime)
+                  .WhereIF(pagedDto.EndUpdateTime.HasValue, x => x.LastModificationTime <= pagedDto.EndUpdateTime)
                 .WhereIF(!string.IsNullOrEmpty(pagedDto.Attribution),x=>x.Attribution == pagedDto.Attribution)
 				.OrderByDescending(d => d.CreationTime)
                 .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);

+ 1 - 0
src/Hotline.Application/Mappers/OrderMapperConfigs.cs

@@ -18,6 +18,7 @@ public class OrderMapperConfigs : IRegister
         config.ForType<Order, OrderDto>()
             .IgnoreIf((s, d) => s.OrderExtension == null, d => d.OrderExtension)
             .IgnoreIf((s, d) => s.Hotspot == null, d => d.Hotspot)
+               .IgnoreIf((s, d) => s.FwCallRecord == null, d => d.FwCallRecord)
             //.Map(d => d.IsRed, s => string.IsNullOrEmpty(s.SignerId) || !s.ActualHandleStepAcceptTime.HasValue)
             .Map(d => d.IsRed, s => s.WorkflowSteps != null
                                     && s.WorkflowSteps.Any()

+ 3 - 2
src/Hotline.Application/Orders/OrderApplication.cs

@@ -736,7 +736,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
               .WhereIF(dto.ExpiredTimeProvinceStart.HasValue, d => d.ExpiredTimeProvince >= dto.ExpiredTimeProvinceStart)//省期满时间开始
               .WhereIF(dto.ExpiredTimeProvinceEnd.HasValue, d => d.ExpiredTimeProvince <= dto.ExpiredTimeProvinceEnd)//省期满时间结束
-
+              .WhereIF(dto.Iszgzfw.HasValue && dto.Iszgzfw == true, d => d.ReceiveProvinceNo.StartsWith("ZGZFW"))
+              .WhereIF(dto.Isgjzwfwpt.HasValue && dto.Isgjzwfwpt == true, d => d.ReceiveProvinceNo.StartsWith("GJZWFWPT"))
               .WhereIF(dto.QuerySelf.HasValue && dto.QuerySelf.Value, d => d.WaitForPublisherId == _sessionContext.RequiredUserId)
                .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
               .WhereIF(dto.IsOverTime == true,
@@ -1040,7 +1041,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         {
             if (_appOptions.Value.IsLuZhou)
             {
-                await _expireTime.CalcEndTime(DateTime.Now, DateTime.Now, new TimeConfig() { Count = dto.Data.TimeLimit, TimeType = dto.Data.TimeLimitUnit.Value }, order.AcceptTypeCode);
+                expiredTimeConfig = await _expireTime.CalcEndTime(DateTime.Now, DateTime.Now, new TimeConfig() { Count = dto.Data.TimeLimit, TimeType = dto.Data.TimeLimitUnit.Value }, order.AcceptTypeCode);
             }
             else
             {

+ 2 - 2
src/Hotline.Application/Orders/OrderScreenHandler/OrderScreenEndWorkflowHandler.cs

@@ -81,8 +81,8 @@ public class OrderScreenEndWorkflowHandler : INotificationHandler<EndWorkflowNot
                         {
                             var screenSatisfy = new Kv() { Key = "-1", Value = "视为满意" };
                             visitDetail.OrgProcessingResults = screenSatisfy;
-                            if (_appOptions.Value.IsYiBin)
-                                visitDetail.OrgNoSatisfiedReason = new List<Kv>();
+                            //if (_appOptions.Value.IsYiBin)
+                            //    visitDetail.OrgNoSatisfiedReason = new List<Kv>();
 
                             //visitDetail.OrgHandledAttitude = screenSatisfy;
                             await _orderVisitedDetailRepository.UpdateAsync(visitDetail, cancellationToken);

+ 10 - 0
src/Hotline.Application/StatisticalReport/CallReport/CallReportApplicationBase.cs

@@ -257,6 +257,16 @@ public abstract class CallReportApplicationBase : ICallReportApplication
         throw new NotImplementedException();
     }
 
+    /// <summary>
+    /// 呼出话务统计明细
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public virtual Task<List<QueryCallOutDateStatisticsDetailResp>> QueryCallOutDateStatisticsDetail(QueryCallDateStatisticsDetailDto dto)
+    {
+        throw new NotImplementedException();
+    }
+
     /// <summary>
     /// 坐席话务统计分析
     /// </summary>

+ 9 - 0
src/Hotline.Application/StatisticalReport/CallReport/YiBinCallReportApplication.cs

@@ -280,6 +280,15 @@ public class YiBinCallReportApplication : CallReportApplicationBase, ICallReport
         return await _trCallRecordRepositoryEx.QueryEnterpriseCallDateStatisticsDetail(dto.StartTime.Value, dto.EndTime.Value);
     }
 
+    /// <summary>
+    /// 呼出话务统计明细
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public override async Task<List<QueryCallOutDateStatisticsDetailResp>> QueryCallOutDateStatisticsDetail(QueryCallDateStatisticsDetailDto dto)
+    {
+        return null;
+    }
 
 
     //public override async Task<PagedDto<TrCallDto>> GetCallDetailListAsync(GetCallListDto dto, CancellationToken cancellationToken)

+ 6 - 1
src/Hotline.Application/StatisticalReport/ICallReportApplication.cs

@@ -70,6 +70,11 @@ namespace Hotline.Application.StatisticalReport
         /// <returns></returns>
         Task<List<QueryEnterpriseCallDateStatisticsDetailResp>> QueryEnterpriseCallDateStatisticsDetail(QueryCallDateStatisticsDetailDto dto);
 
-        //Task<List<object>> QueryCallOutDateStatisticsDetail(QueryCallDateStatisticsDetailDto dto);
+        /// <summary>
+        /// 呼出话务统计明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        Task<List<QueryCallOutDateStatisticsDetailResp>> QueryCallOutDateStatisticsDetail(QueryCallDateStatisticsDetailDto dto);
     }
 }

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

@@ -1648,7 +1648,7 @@ namespace Hotline.Application.StatisticalReport
                 .WhereIF(dto.StartTime.HasValue, x => x.OrderVisit.VisitTime >= dto.StartTime.Value)
                 .WhereIF(dto.EndTime.HasValue, x => x.OrderVisit.VisitTime <= dto.EndTime.Value)
                 .WhereIF(isCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
-                .WhereIF(dto.OrgProcessingResults == "-1", x => SqlFunc.JsonArrayLength(x.OrgNoSatisfiedReason) > 1 && x.OrgNoSatisfiedReason != null)
+                .WhereIF(dto.OrgProcessingResults == "-1", x => SqlFunc.JsonArrayLength(x.OrgNoSatisfiedReason) > 0)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
                 .GroupBy((x, org) => new { VisitOrgName = org.Name, VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) })
                 .Select((x, org) => new BiVisitNoSatisfiedDto

+ 130 - 90
src/Hotline.Share/Dtos/Knowledge/KnowledgePagedDto.cs

@@ -14,68 +14,68 @@ namespace Hotline.Share.Dtos.Knowledge
     /// <param name="id"></param>
     public record AuditLogListPagedDto(string? id) : PagedKeywordRequest;
 
-	/// <summary>
-	/// 审核管理
-	/// </summary>
-	/// <param name="EKnowledgeApplyType">申请类型</param>
-	/// <param name="EKnowledgeWorkFlowStatus">审核状态</param>
-	public record KnowledgeApprovalPagedListDto(EKnowledgeApplyType? EKnowledgeApplyType, EKnowledgeWorkFlowStatus? EKnowledgeWorkFlowStatus) : PagedKeywordRequest;
-
-	/// <summary>
-	/// 知识检索
-	/// </summary>
-	/// <param name="RetrievalType">检索类型</param>
-	/// <param name="Attribution">归属</param>
-	/// <param name="Sort">排序字段</param>
-	/// <param name="CreateOrgId">部门id</param>
-	/// <param name="HotspotId">热点id</param>
-	/// <param name="HotspotName">热点名称</param>;
-	/// <param name="KnowledgeTypeId">类型id</param>
-	/// <param name="Content">受理内容</param>
-	public record KnowledgeRetrievalPagedListDto : PagedKeywordRequest
-	{
-		/// <summary>
-		/// 检索类型
-		/// </summary>
-		public EKnowledgeRetrievalType? RetrievalType { get; set; }
-
-		/// <summary>
-		/// 归属
-		/// </summary>
-		public string? Attribution { get; set; }
-
-		/// <summary>
-		/// 排序字段
-		/// </summary>
-		public string Sort { get; set; }
-
-		/// <summary>
-		/// 部门id
-		/// </summary>
-		public string? CreateOrgId { get; set; }
-
-		/// <summary>
-		/// 热点id
-		/// </summary>
-		public string? HotspotId { get; set; }
-
-		/// <summary>
-		/// 热点名称
-		/// </summary>
-		public string? HotspotName { get; set; }
-
-		/// <summary>
-		/// 类型id
-		/// </summary>
-		public string? KnowledgeTypeId { get; set; }
-
-		/// <summary>
-		/// 受理内容
-		/// </summary>
-		public string? Content { get; set; }
-	};
-
-	/// <summary>
+    /// <summary>
+    /// 审核管理
+    /// </summary>
+    /// <param name="EKnowledgeApplyType">申请类型</param>
+    /// <param name="EKnowledgeWorkFlowStatus">审核状态</param>
+    public record KnowledgeApprovalPagedListDto(EKnowledgeApplyType? EKnowledgeApplyType, EKnowledgeWorkFlowStatus? EKnowledgeWorkFlowStatus) : PagedKeywordRequest;
+
+    /// <summary>
+    /// 知识检索
+    /// </summary>
+    /// <param name="RetrievalType">检索类型</param>
+    /// <param name="Attribution">归属</param>
+    /// <param name="Sort">排序字段</param>
+    /// <param name="CreateOrgId">部门id</param>
+    /// <param name="HotspotId">热点id</param>
+    /// <param name="HotspotName">热点名称</param>;
+    /// <param name="KnowledgeTypeId">类型id</param>
+    /// <param name="Content">受理内容</param>
+    public record KnowledgeRetrievalPagedListDto : PagedKeywordRequest
+    {
+        /// <summary>
+        /// 检索类型
+        /// </summary>
+        public EKnowledgeRetrievalType? RetrievalType { get; set; }
+
+        /// <summary>
+        /// 归属
+        /// </summary>
+        public string? Attribution { get; set; }
+
+        /// <summary>
+        /// 排序字段
+        /// </summary>
+        public string Sort { get; set; }
+
+        /// <summary>
+        /// 部门id
+        /// </summary>
+        public string? CreateOrgId { get; set; }
+
+        /// <summary>
+        /// 热点id
+        /// </summary>
+        public string? HotspotId { get; set; }
+
+        /// <summary>
+        /// 热点名称
+        /// </summary>
+        public string? HotspotName { get; set; }
+
+        /// <summary>
+        /// 类型id
+        /// </summary>
+        public string? KnowledgeTypeId { get; set; }
+
+        /// <summary>
+        /// 受理内容
+        /// </summary>
+        public string? Content { get; set; }
+    };
+
+    /// <summary>
     /// 来电弹屏知识库查询
     /// </summary>
     /// <param name="HotspotId">热点ID</param>
@@ -87,7 +87,7 @@ namespace Hotline.Share.Dtos.Knowledge
     /// <param name="EKnowledgeWorkFlowStatus"></param>
     /// <param name="StartApplyTime"></param>
     /// <param name="EndApplyTime"></param>
-    public record KnowledgeDeletelPagedListDto(EKnowledgeWorkFlowStatus? EKnowledgeWorkFlowStatus,DateTime? StartApplyTime, DateTime? EndApplyTime) : PagedKeywordRequest;
+    public record KnowledgeDeletelPagedListDto(EKnowledgeWorkFlowStatus? EKnowledgeWorkFlowStatus, DateTime? StartApplyTime, DateTime? EndApplyTime) : PagedKeywordRequest;
 
     /// <summary>
     /// 
@@ -105,42 +105,42 @@ namespace Hotline.Share.Dtos.Knowledge
     //public record KnowPagedListDto(string? CreateOrgId, string? HotspotId, string? KnowledgeTypeId, EKnowledgeStatus? Status, DateTime? CreationStartTime, DateTime? CreationEndTime,
     //  DateTime? StartOnShelfTime, DateTime? EndOnShelfTime, DateTime? StartOffShelfTime, DateTime? EndOffShelfTime) : PagedKeywordRequest;
 
-    public record KnowPagedListDto : PagedKeywordRequest 
+    public record KnowPagedListDto : PagedKeywordRequest
     {
         /// <summary>
         /// 标题
         /// </summary>
-        public string? Title { get; set; }  
+        public string? Title { get; set; }
 
         /// <summary>
         /// 状态
         /// </summary>
         public EKnowledgeStatus? Status { get; set; }
 
-		/// <summary>
-		/// 草稿状态下的查询条件
-		/// </summary>
-		public EKnowledgeStatus? NewDraftsStatus { get; set; }
+        /// <summary>
+        /// 草稿状态下的查询条件
+        /// </summary>
+        public EKnowledgeStatus? NewDraftsStatus { get; set; }
 
-		/// <summary>
-		/// 是否公开
-		/// </summary>
-		public bool? IsPublic { get; set; }
+        /// <summary>
+        /// 是否公开
+        /// </summary>
+        public bool? IsPublic { get; set; }
 
-		/// <summary>
-		/// 摘要
-		/// </summary>
-		public string? Summary { get; set; }
+        /// <summary>
+        /// 摘要
+        /// </summary>
+        public string? Summary { get; set; }
 
-		/// <summary>
-		/// 部门
-		/// </summary>
-		public string? CreateOrgId { get; set; }
+        /// <summary>
+        /// 部门
+        /// </summary>
+        public string? CreateOrgId { get; set; }
 
-		/// <summary>
-		/// 热点
-		/// </summary>
-		public string? HotspotId { get; set; }
+        /// <summary>
+        /// 热点
+        /// </summary>
+        public string? HotspotId { get; set; }
 
         /// <summary>
         /// 分类
@@ -152,10 +152,50 @@ namespace Hotline.Share.Dtos.Knowledge
         /// </summary>
         public string? ModuleCode { get; set; }
 
-		/// <summary>
-		///   归属
-		/// </summary>
-		public string? Attribution { get; set; }
+        /// <summary>
+        ///   归属
+        /// </summary>
+        public string? Attribution { get; set; }
+
+        /// <summary>
+        /// 创建开始
+        /// </summary>
+        public DateTime? CreationStartTime { get; set; }
+
+        /// <summary>
+        /// 创建结束
+        /// </summary>
+        public DateTime? CreationEndTime { get; set; }
+
+        /// <summary>
+        /// 上架开始
+        /// </summary>
+        public DateTime? StartOnShelfTime { get; set; }
+
+        /// <summary>
+        /// 上架结束
+        /// </summary>
+        public DateTime? EndOnShelfTime { get; set; }
+
+        /// <summary>
+        /// 下架开始
+        /// </summary>
+        public DateTime? StartOffShelfTime { get; set; }
+
+        /// <summary>
+        /// 下架结束
+        /// </summary>
+        public DateTime? EndOffShelfTime { get; set; }
+
+        /// <summary>
+        /// 更新时间开始
+        /// </summary>
+        public DateTime? StartUpdateTime { get; set; }
+
+        /// <summary>
+        /// 更新时间结束
+        /// </summary>
+        public DateTime? EndUpdateTime { get; set; }
 
-	}
+    }
 }

+ 1 - 1
src/Hotline.Share/Dtos/Order/Detail/OrderFlowTraceDto.cs

@@ -97,7 +97,7 @@ public class OrderFlowTraceDto
     /// <summary>
     /// 附件
     /// </summary>
-    public List<FileDto>? Files { get; set; }
+    public List<FileJson>? FileJson { get; set; }
 
     /// <summary>
     /// 备注

+ 31 - 6
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -1,4 +1,5 @@
-using Hotline.Share.Dtos.File;
+using Hotline.Share.Dtos.CallCenter;
+using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Hotspots;
 using Hotline.Share.Enums.FlowEngine;
@@ -31,10 +32,10 @@ namespace Hotline.Share.Dtos.Order
 
         public string ActualHandleOrgName { get; set; }
 
-		/// <summary>
-		/// 工单状态
-		/// </summary>
-		public EOrderStatus Status { get; set; }
+        /// <summary>
+        /// 工单状态
+        /// </summary>
+        public EOrderStatus Status { get; set; }
 
         public string StatusText => Status.GetDescription();
     }
@@ -171,7 +172,7 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 第一次评价结果代码
         /// </summary>
-        public string? FirstVisitResultCode { get; set; }        
+        public string? FirstVisitResultCode { get; set; }
 
         #region 实际办理信息(节点,部门,意见)
 
@@ -648,6 +649,28 @@ namespace Hotline.Share.Dtos.Order
             return string.Empty;
         }
 
+        /// <summary>
+        /// 剩余办理时长
+        /// </summary>
+        public string RemainingTime => RemainingTimeTextVoid();
+
+        public string RemainingTimeTextVoid()
+        {
+            if (Status >= EOrderStatus.Filed && FiledTime !=null)
+            {
+                return Math.Round((ExpiredTime.Value - FiledTime.Value).TotalDays,1) + "天";
+            }
+            else if(Status < EOrderStatus.Filed && ExpiredTime!=null)
+            {
+                return Math.Round((ExpiredTime.Value - DateTime.Now).TotalDays,1) + "天";
+            }
+            else
+            {
+                return "-";
+            }
+        }
+
+
         /// <summary>
         /// 超期部门
         /// </summary>
@@ -707,6 +730,8 @@ namespace Hotline.Share.Dtos.Order
 
         public List<OrderVisitDto>? OrderVisits { get; set; }
 
+        public CallNativeDto? FwCallRecord { get; set; }
+
         public List<FileJson>? FileJson { get; set; }
 
         /// <summary>

+ 127 - 118
src/Hotline.Share/Dtos/Order/Publish/QueryOrderPublishDto.cs

@@ -5,35 +5,35 @@ namespace Hotline.Share.Dtos.Order.Publish;
 
 public record QueryOrderPublishDto : PagedKeywordRequest
 {
-	/// <summary>
-	/// 发布状态
-	/// </summary>
-	public EPubState? PubState { get; set; }
-
-	/// <summary>
-	/// 工单编号
-	/// </summary>
-	public string? No { get; set; }
-
-	/// <summary>
-	/// 工单标题
-	/// </summary>
-	public string? Title { get; set; }
-
-	/// <summary>
-	/// 受理时间(工单创建时间)
-	/// </summary>
-	public DateTime? CreationTimeStart { get; set; }
-	public DateTime? CreationTimeEnd { get; set; }
-
-	/// <summary>
-	/// 省期满时间开始
-	/// </summary>
-	public DateTime? ExpiredTimeProvinceStart { get; set; }
-
-	/// <summary>
-	/// 省期满时间结束
-	/// </summary>
+    /// <summary>
+    /// 发布状态
+    /// </summary>
+    public EPubState? PubState { get; set; }
+
+    /// <summary>
+    /// 工单编号
+    /// </summary>
+    public string? No { get; set; }
+
+    /// <summary>
+    /// 工单标题
+    /// </summary>
+    public string? Title { get; set; }
+
+    /// <summary>
+    /// 受理时间(工单创建时间)
+    /// </summary>
+    public DateTime? CreationTimeStart { get; set; }
+    public DateTime? CreationTimeEnd { get; set; }
+
+    /// <summary>
+    /// 省期满时间开始
+    /// </summary>
+    public DateTime? ExpiredTimeProvinceStart { get; set; }
+
+    /// <summary>
+    /// 省期满时间结束
+    /// </summary>
     public DateTime? ExpiredTimeProvinceEnd { get; set; }
 
     /// <summary>
@@ -41,101 +41,101 @@ public record QueryOrderPublishDto : PagedKeywordRequest
     /// </summary>
     public string? FromPhone { get; set; }
 
-	/// <summary>
-	/// 接办名称(综合查询使用)
-	/// </summary>
-	public string? ActualHandleOrgName { get; set; }
-
-	/// <summary>
-	/// 受理类型
-	/// </summary>
-	public List<string>? AcceptTypes { get; set; } = new();
-
-
-	/// <summary>
-	/// 受理类型(√)
-	/// </summary>
-	public string? AcceptType { get; set; }
-
-	/// <summary>
-	/// 热点分类关键词
-	/// </summary>
-	public string? Hotspot { get; set; }
-
-	/// <summary>
-	/// 热点分类
-	/// </summary>
-	public List<string>? HotspotIds { get; set; } = new();
-
-	/// <summary>
-	/// 受理坐席名字或工号(×)
-	/// </summary>
-	public string? NameOrNo { get; set; }
-
-	/// <summary>
-	/// 派单人
-	/// </summary>
-	public string? CenterToOrgHandlerName { get; set; }
-
-	/// <summary>
-	/// 发布范围
-	/// </summary>
-	public EPublicState? PubRange { get; set; }
-
-	/// <summary>
-	/// 归档时间
-	/// </summary>
-	public DateTime? FiledTimeStart { get; set; }
-	public DateTime? FiledTimeEnd { get; set; }
-
-	/// <summary>
-	/// 工单标签
-	/// </summary>
-	public string? OrderTag { get; set; }
-
-	/// <summary>
-	/// 归档方式
-	/// </summary>
-	public FiledType? FiledType { get; set; }
-
-	/// <summary>
-	/// 是否会签
-	/// </summary>
-	public bool? IsCountersign { get; set; }
-
-	/// <summary>
-	/// 是否解决
-	/// </summary>
-	public bool? Resolve { get; set; }
-
-	/// <summary>
-	/// 是否只查询自己的待发布工单
-	/// </summary>
-	public bool? QuerySelf { get; set; }
-
-	/// <summary>
-	/// 是否省工单(空为全部  true为省工单 false为市工单)
-	/// </summary>
-	public bool? IsProvinceOrder { get; set; }
-
-	/// <summary>
-	/// 来源渠道(√)
-	/// </summary>
-	public string? Channel { get; set; }
-
-	/// <summary>
-	/// 是否超期
-	/// </summary>
-	public bool? IsOverTime { get; set; }
+    /// <summary>
+    /// 接办名称(综合查询使用)
+    /// </summary>
+    public string? ActualHandleOrgName { get; set; }
+
+    /// <summary>
+    /// 受理类型
+    /// </summary>
+    public List<string>? AcceptTypes { get; set; } = new();
+
+
+    /// <summary>
+    /// 受理类型(√)
+    /// </summary>
+    public string? AcceptType { get; set; }
+
+    /// <summary>
+    /// 热点分类关键词
+    /// </summary>
+    public string? Hotspot { get; set; }
+
+    /// <summary>
+    /// 热点分类
+    /// </summary>
+    public List<string>? HotspotIds { get; set; } = new();
+
+    /// <summary>
+    /// 受理坐席名字或工号(×)
+    /// </summary>
+    public string? NameOrNo { get; set; }
+
+    /// <summary>
+    /// 派单人
+    /// </summary>
+    public string? CenterToOrgHandlerName { get; set; }
+
+    /// <summary>
+    /// 发布范围
+    /// </summary>
+    public EPublicState? PubRange { get; set; }
+
+    /// <summary>
+    /// 归档时间
+    /// </summary>
+    public DateTime? FiledTimeStart { get; set; }
+    public DateTime? FiledTimeEnd { get; set; }
+
+    /// <summary>
+    /// 工单标签
+    /// </summary>
+    public string? OrderTag { get; set; }
+
+    /// <summary>
+    /// 归档方式
+    /// </summary>
+    public FiledType? FiledType { get; set; }
+
+    /// <summary>
+    /// 是否会签
+    /// </summary>
+    public bool? IsCountersign { get; set; }
+
+    /// <summary>
+    /// 是否解决
+    /// </summary>
+    public bool? Resolve { get; set; }
+
+    /// <summary>
+    /// 是否只查询自己的待发布工单
+    /// </summary>
+    public bool? QuerySelf { get; set; }
+
+    /// <summary>
+    /// 是否省工单(空为全部  true为省工单 false为市工单)
+    /// </summary>
+    public bool? IsProvinceOrder { get; set; }
+
+    /// <summary>
+    /// 来源渠道(√)
+    /// </summary>
+    public string? Channel { get; set; }
+
+    /// <summary>
+    /// 是否超期
+    /// </summary>
+    public bool? IsOverTime { get; set; }
 
     /// <summary>
     /// 查询批次
     /// </summary>
     public int QueryIndex { get; set; }
 
-	/// <summary>
-	/// 一级部门
-	/// </summary>
+    /// <summary>
+    /// 一级部门
+    /// </summary>
     public string? OrgLevelOneName { get; set; }
 
     /// <summary>
@@ -143,4 +143,13 @@ public record QueryOrderPublishDto : PagedKeywordRequest
     /// </summary>
     public EIdentityType? IdentityType { get; set; }
 
+    /// <summary>
+    /// 中国政府网
+    /// </summary>
+    public bool? Iszgzfw { get; set; }
+
+    /// <summary>
+    /// 国家平台转办件
+    /// </summary>
+    public bool? Isgjzwfwpt { get; set; }
 }

+ 40 - 37
src/Hotline/Orders/OrderDomainService.cs

@@ -295,49 +295,52 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 
         //需求251  某些工单需自动发送短信
         //任何类型的省工单都不需要发送短信
-        try
+        var isOpenSendEndSms = _systemSettingCacheManager.GetSetting(SettingConstants.IsOpenSendEndSms)?.SettingValue[0];
+        if (isOpenSendEndSms == "true")
         {
-            if (order.Source != ESource.ProvinceStraight && _appOptions.Value.IsYiBin)
+            try
             {
-                var code = "";
-                //受理类型为“投诉、举报”
-                if ((order.AcceptTypeCode == "30" || order.AcceptTypeCode == "35") && orderVisit.VisitState != EVisitState.Visited)
-                {
-                    code = "1017";
-                    orderVisit.VisitState = EVisitState.SMSVisiting;
-                    await _orderVisitRepository.UpdateAsync(orderVisit);
-                }
-                else
-                    code = "1018";
-
-                //发送查询短信
-                var messageDto = new Share.Dtos.Push.MessageDto
+                if (order.Source != ESource.ProvinceStraight)
                 {
-                    PushBusiness = EPushBusiness.SearchSms,
-                    ExternalId = visitId,
-                    OrderId = order.Id,
-                    PushPlatform = EPushPlatform.Sms,
-                    Remark = order.Title,
-                    Name = order.FromName,
-                    TemplateCode = code,
-                    Params = new List<string>() { order.No, order.Password },
-                    TelNumber = order.Contact,
-                };
-                await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                    var code = "";
+                    //受理类型为“投诉、举报”
+                    if ((order.AcceptTypeCode == "30" || order.AcceptTypeCode == "35") && orderVisit.VisitState != EVisitState.Visited)
+                    {
+                        code = "1017";
+                        orderVisit.VisitState = EVisitState.SMSVisiting;
+                        await _orderVisitRepository.UpdateAsync(orderVisit);
+                    }
+                    else
+                        code = "1018";
 
-                // 发送短信后推送一个 48小时的延迟消息队列. 当消息队列收到消息时, 判断用户是否回复了, 如果未回复短信就 默认满意
-                var delaySecond = _systemSettingCacheManager.DefaultVisitSmsDelaySecond;
-                await _capPublisher.PublishDelayAsync(
-                    TimeSpan.FromSeconds(delaySecond),
-                    EventNames.UpdateVisitDelaySms,
-                    messageDto,
-                    cancellationToken: cancellationToken);
+                    //发送查询短信
+                    var messageDto = new Share.Dtos.Push.MessageDto
+                    {
+                        PushBusiness = EPushBusiness.SearchSms,
+                        ExternalId = visitId,
+                        OrderId = order.Id,
+                        PushPlatform = EPushPlatform.Sms,
+                        Remark = order.Title,
+                        Name = order.FromName,
+                        TemplateCode = code,
+                        Params = new List<string>() { order.No, order.Password },
+                        TelNumber = order.Contact,
+                    };
+                    await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+
+                    // 发送短信后推送一个 48小时的延迟消息队列. 当消息队列收到消息时, 判断用户是否回复了, 如果未回复短信就 默认满意
+                    var delaySecond = _systemSettingCacheManager.DefaultVisitSmsDelaySecond;
+                    await _capPublisher.PublishDelayAsync(
+                        TimeSpan.FromSeconds(delaySecond),
+                        EventNames.UpdateVisitDelaySms,
+                        messageDto,
+                        cancellationToken: cancellationToken);
+                }
+            }
+            catch (Exception)
+            {
             }
         }
-        catch (Exception)
-        {
-        }
-
         if (order.IsProvince == false && orderVisit.VisitState == EVisitState.Visited)
         {
             //推省上

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

@@ -667,5 +667,10 @@ namespace Hotline.Settings
         /// 交办单是否保密
         /// </summary>
         public const string IsTheAssignmentFormConfidential = "IsTheAssignmentFormConfidential";
+
+        /// <summary>
+        /// 办结是否发送查询短信
+        /// </summary>
+        public const string IsOpenSendEndSms = "IsOpenSendEndSms";
     }
 }

+ 8 - 2
src/Hotline/dataview.md

@@ -342,7 +342,7 @@ WHERE ordervisitdetailtemp."VisitTarget" = 20 and ordervisittemp."VisitTime">='2
 
 
  ### 信件清单查询(新)
- select '' as "序号",
+  select '' as "序号",
 aaa.信件状态,aaa."是否超期",aaa.来源,aaa.转接来源,aaa.当前节点,aaa.重办次数,aaa.甄别状态,aaa.受理编号,aaa.省编号,aaa.受理时间,aaa.标题,aaa.期满时间,aaa."一级部门",
 aaa.二级部门,aaa."接办部门",aaa."办结时间",aaa."受理类型",aaa."热点类型",aaa.热点全称,aaa."区域",aaa.区域全称,aaa."受理人",aaa."姓名",aaa."联系电话",aaa."来电电话",
 aaa."事发地址",aaa."具体对象",aaa."来电人主体",aaa."性别",ccc."SeatVisitResult" as "坐席满意度",bbb."OrgProcessingResults" as "满意度",aaa."推送分类",aaa."受理内容",
@@ -411,7 +411,12 @@ CASE
   WHEN "County" is not null and "County" <>'' THEN "County"
 	ELSE "City"
 END AS "区域",
-"Address"  As "区域全称",
+--"Address"  As "区域全称",
+CASE 
+	WHEN "Town" is not null and "Town" <> '' THEN "City" || '-' || "County" || '-' || "Town"
+	WHEN "County" is not null and "Town" <> '' THEN "City" || '-' || "County"
+	ELSE "City"
+END "区域全称",
 "AcceptorName" AS "受理人" ,
  "FromName" AS "姓名" , 
  "Contact" AS "联系电话" , 
@@ -458,6 +463,7 @@ where visittemp."CreationTime">='2024-08-29' and visitdetailtemp."VisitTarget"=1
 on aaa."SugarNav_Id" = ccc."OrderId"
 
 
+
 ### 重置工单回访部门信息
 update order_visit_detail set 
 "VisitOrgCode"= hhh."HandlerOrgId","VisitOrgName"=hhh."HandlerOrgName"