Browse Source

合并冲突

qinchaoyue 3 months ago
parent
commit
768660e2c2

+ 1 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -4997,7 +4997,7 @@ public class OrderController : BaseController
                 dto.Handler = handler;
             }
         }
-
+         
         if (oneSendBack || twoSendBack)
         {
             var sendBack = await _orderSendBackAuditRepository.Queryable()

+ 12 - 10
src/Hotline.Api/Controllers/Snapshot/IndustryController.cs

@@ -26,14 +26,16 @@ public class IndustryController : BaseController
     private readonly IIndustryApplication _industryApplication;
     private readonly ISystemAreaDomainService _systemAreaDomainService;
     private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
+    private readonly ISystemOrganizeRepository _systemOrganizeRepository;
 
-    public IndustryController(IIndustryRepository industryRepository, IIndustryApplication industryApplication, ISystemDicDataCacheManager systemDicDataCacheManager, ISystemAreaDomainService systemAreaDomainService, IOptionsSnapshot<AppConfiguration> appOptions)
+    public IndustryController(IIndustryRepository industryRepository, IIndustryApplication industryApplication, ISystemDicDataCacheManager systemDicDataCacheManager, ISystemAreaDomainService systemAreaDomainService, IOptionsSnapshot<AppConfiguration> appOptions, ISystemOrganizeRepository systemOrganizeRepository)
     {
         _industryRepository = industryRepository;
         _industryApplication = industryApplication;
         _systemDicDataCacheManager = systemDicDataCacheManager;
         _systemAreaDomainService = systemAreaDomainService;
         _appOptions = appOptions;
+        _systemOrganizeRepository = systemOrganizeRepository;
     }
 
     /// <summary>
@@ -41,11 +43,11 @@ public class IndustryController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpGet("basedata")]
-    public Dictionary<string, object> GetBaseData()
+    public async Task<Dictionary<string, object>> GetBaseData()
     {
         return new Dictionary<string, object>
         {
-            { "department", _systemDicDataCacheManager.SnapshotDepartment },
+            { "department", await _systemOrganizeRepository.GetOrgEnabled() },
             { "acceptType", _systemDicDataCacheManager.AcceptType},
             { "bulletinType", _systemDicDataCacheManager.SnapshotBulletinType}
         };
@@ -109,7 +111,7 @@ public class IndustryController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPut("case")]
-    public async Task UpdateIndustryCaseAsync([FromBody]UpdateIndustryCaseDto dto)
+    public async Task UpdateIndustryCaseAsync([FromBody] UpdateIndustryCaseDto dto)
         => await _industryApplication.UpdateIndustryCaseAsync(dto);
 
     /// <summary>
@@ -145,7 +147,7 @@ public class IndustryController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpGet("sms_template")]
-    public async Task<PagedDto<SnapshotSMSTemplateItemsOutDto>> GetSmsTemplateItemsAsync([FromQuery]SnapshotSMSTemplateItemsInDto dto)
+    public async Task<PagedDto<SnapshotSMSTemplateItemsOutDto>> GetSmsTemplateItemsAsync([FromQuery] SnapshotSMSTemplateItemsInDto dto)
         => (await _industryApplication.GetSMSTemplates(dto).ToPagedListAsync(dto, HttpContext.RequestAborted)).ToPaged();
 
     /// <summary>
@@ -191,7 +193,7 @@ public class IndustryController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("practitioner")]
-    public async Task<string> AddPractitionerAsync([FromBody]AddPractitionerInDto dto)
+    public async Task<string> AddPractitionerAsync([FromBody] AddPractitionerInDto dto)
         => await _industryApplication.AddPractitionerAsync(dto);
 
     /// <summary>
@@ -200,7 +202,7 @@ public class IndustryController : BaseController
     /// <param name="ids"></param>
     /// <returns></returns>
     [HttpDelete("practitioner")]
-    public async Task DeletePractitionerAsync([FromBody]IList<string> ids)
+    public async Task DeletePractitionerAsync([FromBody] IList<string> ids)
         => await _industryApplication.DeletePractitionerAsync(ids);
 
     /// <summary>
@@ -262,7 +264,7 @@ public class IndustryController : BaseController
     /// <param name="ids"></param>
     /// <returns></returns>
     [HttpDelete("volunteer")]
-    public async Task DeleteVolunteerAsync([FromBody]IList<string> ids)
+    public async Task DeleteVolunteerAsync([FromBody] IList<string> ids)
         => await _industryApplication.DeleteVolunteerAsync(ids);
 
     /// <summary>
@@ -280,7 +282,7 @@ public class IndustryController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPut("volunteer")]
-    public async Task UpdateVolunteerAsync([FromBody]UpdateVolunteerInDto dto)
+    public async Task UpdateVolunteerAsync([FromBody] UpdateVolunteerInDto dto)
         => await _industryApplication.UpdateVolunteerAsync(dto);
 
     /// <summary>
@@ -289,7 +291,7 @@ public class IndustryController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpGet("volunteer/report")]
-    public async Task<PagedDto<VolunteerReportItemsOutDto>> GetVolunteerReportItemsAsync([FromQuery]VolunteerReportItemsInDto dto)
+    public async Task<PagedDto<VolunteerReportItemsOutDto>> GetVolunteerReportItemsAsync([FromQuery] VolunteerReportItemsInDto dto)
         => (await _industryApplication.GetVolunteerReportItemsAsync(dto).ToPagedListAsync(dto)).ToPaged();
     #endregion
 

+ 2 - 2
src/Hotline.Api/Controllers/TestController.cs

@@ -547,8 +547,8 @@ ICallApplication callApplication,
         //var r = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToCenter, batchId);
         //var r = _timeLimitDomainService.CalcEndTime(DateTime.Parse("2024-09-12 14:45:47"), Share.Enums.Settings.ETimeType.WorkDay, 2, 80, 50);
         //_capPublisher.PublishDelay((DateTime.Now.AddMinutes(2) - DateTime.Now), EventNames.OrderRelateCall, "123");
-        //var times = _expireTime.CalcExpiredTime(DateTime.Parse("2024-12-11 14:45:58"), DateTime.Parse("2024-12-11 14:45:58"), EFlowDirection.CenterToOrg,new OrderTimeClacInfo() { AcceptTypeCode= "20" });
-        var times = await _expireTime.CalcWorkTimeToDecimal(DateTime.Parse("2024-12-16 21:36:27"), DateTime.Parse("2024-12-17 12:47:05"), false);
+        var times =await _expireTime.CalcExpiredTime(DateTime.Parse("2024-12-31 13:25:13.137977"), DateTime.Parse("2024-12-31 13:25:13.137977"), EFlowDirection.CenterToOrg,new OrderTimeClacInfo() { AcceptTypeCode= "10" });
+        //var times = await _expireTime.CalcWorkTimeToDecimal(DateTime.Parse("2024-12-16 21:36:27"), DateTime.Parse("2024-12-17 12:47:05"), false);
         //await _capPublisher.PublishDelay(EventNames.OrderRelateCall, "123", cancellationToken: HttpContext.RequestAborted);
         return OpenResponse.Ok(times);
     }

+ 39 - 0
src/Hotline.Application.Tests/Application/DefaultCallApplicationTest.cs

@@ -99,6 +99,7 @@ public class DefaultCallApplicationTest : TestBase
 
     /// <summary>
     /// 测试三方通话后, 工单保存时没有关联到正确的通话记录, 使用本方法能不能修复
+    /// 测试如果通话记录有两通都是呼入的,就不需要修复了
     /// </summary>
     /// <returns></returns>
     [Fact]
@@ -109,6 +110,7 @@ public class DefaultCallApplicationTest : TestBase
             .With(m => m.Id, Ulid.NewUlid().ToString())
             .With(m => m.CallNo, callNo)
             .With(m => m.Direction, ECallDirection.In)
+            .With(m => m.IsDeleted, false)
             .Create();
         await _callNativeRepository.AddAsync(inDto);
 
@@ -116,6 +118,7 @@ public class DefaultCallApplicationTest : TestBase
             .With(m => m.Id, Ulid.NewUlid().ToString())
             .With(m => m.Direction, ECallDirection.Out)
             .With(m => m.CallNo, callNo)
+            .With(m => m.IsDeleted, false)
             .Create();
         await _callNativeRepository.AddAsync(inDto2);
 
@@ -133,6 +136,42 @@ public class DefaultCallApplicationTest : TestBase
         await _defaultCallApplication.OrderRelateCallHandlerAsync(orderId, CancellationToken.None);
         (await _orderRepository.Queryable().Where(m => m.Id == orderId).Select(m => m.CallId).FirstAsync())
             .ShouldBe(inDto.Id);
+
+        // 测试如果通话记录有两通都是呼入的,就不需要修复了
+
+        callNo = DateTime.Now.ToString("yyyyMMddhhmmss") + "Flow";
+        inDto = _fixture.Build<CallNative>()
+            .With(m => m.Id, Ulid.NewUlid().ToString())
+            .With(m => m.CallNo, callNo)
+            .With(m => m.Direction, ECallDirection.In)
+            .With(m => m.Duration, 20)
+            .With(m => m.IsDeleted, false)
+            .Create();
+        await _callNativeRepository.AddAsync(inDto);
+
+        inDto2 = _fixture.Build<CallNative>()
+            .With(m => m.Id, Ulid.NewUlid().ToString())
+            .With(m => m.Direction, ECallDirection.In)
+            .With(m => m.CallNo, callNo)
+            .With(m => m.Duration, 10)
+            .With(m => m.IsDeleted, false)
+            .Create();
+        await _callNativeRepository.AddAsync(inDto2);
+
+        orderId = await _orderRepository.Queryable()
+            .Where(m => string.IsNullOrEmpty(m.CallId))
+            .OrderByDescending(m => m.CreationTime)
+            .Select(m => m.Id)
+            .FirstAsync();
+
+        await _orderRepository.Updateable()
+            .SetColumns(m => m.CallId == inDto2.Id)
+            .Where(m => m.Id == orderId)
+            .ExecuteCommandAsync();
+
+        await _defaultCallApplication.OrderRelateCallHandlerAsync(orderId, CancellationToken.None);
+        (await _orderRepository.Queryable().Where(m => m.Id == orderId).Select(m => m.CallId).FirstAsync())
+            .ShouldBe(inDto2.Id);
     }
 
     //[Fact]

+ 37 - 0
src/Hotline.Application.Tests/Controller/IndustryControllerTest.cs

@@ -0,0 +1,37 @@
+using Hotline.Api.Controllers;
+using Hotline.Api.Controllers.Snapshot;
+using Hotline.Identity.Accounts;
+using Hotline.Identity.Roles;
+using Hotline.Snapshot.Interfaces;
+using Hotline.Users;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using Shouldly;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Tests.Controller;
+public class IndustryControllerTest : TestBase
+{
+    private readonly IndustryController _industryController;
+    public IndustryControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, IndustryController industryController) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository)
+    {
+        _industryController = industryController;
+        _industryController.ControllerContext = new ControllerContext
+        {
+            HttpContext = new DefaultHttpContext()
+        };
+    }
+
+    [Fact]
+    public async Task GetBaseData_Test()
+    {
+        var result = await _industryController.GetBaseData();
+        result.Count.ShouldNotBe(0);
+    }
+}

+ 1 - 0
src/Hotline.Application.Tests/Startup.cs

@@ -178,6 +178,7 @@ public class Startup
             services.AddScoped<IMediator, MediatorMock>();
             services.AddScoped<IExportApplication, ExportApplication>();
             services.AddScoped<OrderController>();
+            services.AddScoped<IndustryController>();
             services.AddScoped<UserController>();
             services.AddScoped<SnapshotController>();
             services.AddScoped<KnowledgeController>();

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

@@ -542,6 +542,23 @@ public abstract class DefaultCallApplication : ICallApplication
         }
 
         var call = await _callNativeRepository.Queryable()
+            .Where(m => m.Id == orderCall.CallId)
+            .FirstAsync(cancellationToken);
+        // Order已经关联的通话记录是呼入的,并且有通话录音, 所以不需要再次关联
+        if (call != null && call.Direction == ECallDirection.In && call.AudioFile.NotNullOrEmpty())
+        {
+            // 推省上
+            await _capPublisher.PublishAsync(EventNames.HotlineCallConnectWithOrder, new PublishCallRecrodDto()
+            {
+                Order = (await _orderRepository.GetAsync(orderId, cancellationToken)).Adapt<OrderDto>(),
+                TrCallRecordDto = call.Adapt<TrCallDto>()
+            }, cancellationToken: cancellationToken);
+            var message = "Order已经关联的通话记录是呼入的,并且有通话录音, 所以不需要再次关联.(完成推省上)";
+            _systemLogRepository.Add("延迟更新工单通话", orderId, message, status: 1, ipUrl: orderCall.CallId);
+            return message;
+        }
+
+        call = await _callNativeRepository.Queryable()
             .Where(m => m.CallNo == orderCall.CallNo && m.Direction == ECallDirection.In)
             .OrderByDescending(m => m.Duration)
             .FirstAsync(cancellationToken);

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

@@ -3515,6 +3515,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         {
             order = _mapper.Map<Order>(dto);
             order.InitId();
+
+            //如果手里类型不等于空 并且受理类型名称等于空
             if (!string.IsNullOrEmpty(order.AcceptTypeCode))
             {
                 var acceptModel = _sysDicDataCacheManager.AcceptType.Where(x => x.DicDataValue == order.AcceptTypeCode).FirstOrDefault();
@@ -3523,13 +3525,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     order.AcceptType = acceptModel.DicDataName;
                 }
             }
-            if (order.IsSecret == true)
+            if (order.IsSecret == true && _appOptions.Value.IsYiBin == false)
             {
                 order.FocusOnEventsName = "保密";
                 order.FocusOnEvents = "99";
             }
-
-
             if (files != null && files.Any())
                 order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
             await _orderDomainService.AddAsync(order, cancellationToken: cancellationToken);

+ 5 - 1
src/Hotline.Application/Orders/OrderScreenHandler/OrderScreenNextWorkflowHandler.cs

@@ -75,8 +75,12 @@ public class OrderScreenNextWorkflowHandler : INotificationHandler<NextStepNotif
 								//省件甄别--以省审批前一个节点整理的甄别意见为准推送省上 宜宾
 								if (_appOptions.Value.IsYiBin)
 								{
+                                    screenDto.Content = notification.Dto.Opinion;
+                                    screenDto.Files = new List<Share.Dtos.File.FileDto>();
+								}
+								if (_appOptions.Value.IsLuZhou)
+								{
 									screenDto.Content = notification.Dto.Opinion;
-									screenDto.Files = new List<Share.Dtos.File.FileDto>();
 								}
 								if (_appOptions.Value.IsLuZhou)
 								{

+ 64 - 65
src/Hotline.Application/Orders/OrderSecondaryHandlingApplication.cs

@@ -231,71 +231,70 @@ namespace Hotline.Application.Orders
         }
 
 
-		/// <summary>
-		/// 获取申请列表
-		/// </summary>
-		/// <returns></returns>
-		public ISugarQueryable<OrderVisitDetail> ApplyQuery(MayScreenListDto dto, CancellationToken cancellationToken)
-		{
-			//dto.CreationTimeEnd = DateTime.Now;
-			////dto.CreationTimeStart = DateTime.Now;
-			//dto.CreationTimeStart = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
-			var isAdmin = _orderDomainService.IsCheckAdmin();
-			var query = _orderVisitedDetailRepository.Queryable(false, true)
-				.Includes(x => x.OrderVisit)
-				.Includes(x => x.OrderVisit, y => y.Order)
-				.Includes(x => x.OrderVisit, y => y.Employee)
-				.Includes(x => x.SecondaryHandling)
-				.Where(x => x.OrderVisit.Order.IsProvince == false)
-				.LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.Status < EScreenStatus.End && s.IsDeleted == false)
-				//.Where(x => SqlFunc.Subqueryable<OrderScreen>().Where(os => x.Id == os.VisitDetailId && os.Status < EScreenStatus.End && os.IsDeleted == false).Any() || SqlFunc.Subqueryable<OrderScreen>().Where(os => x.Id == os.VisitDetailId && os.IsDeleted == false).NotAny())
-				//.Where((x, s) => s.Id == null && (x.SecondaryHandling.State == ESecondaryHandlingState.NotApply || x.SecondaryHandling.Id == null))
-				.Where(x => SqlFunc.Subqueryable<OrderSecondaryHandling>().Where(osh => osh.VisitDetailId == x.Id && osh.State == ESecondaryHandlingState.NotApply).NotAny())
-				//.Where(x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
-				.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
-				.WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
-				.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order!.Title!.Contains(dto.Title!))
-				.WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.OrderVisit.Order!.SourceChannelCode! == dto.SourceChannel!)
-				.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.OrderVisit.Order!.AcceptTypeCode! == dto.AcceptType!)
-				.WhereIF(dto.CounterSignType.HasValue, x => x.OrderVisit.Order!.CounterSignType == dto.CounterSignType)
-				.WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.OrderVisit.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
-				.WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.OrderVisit.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
-				.WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue, x => x.OrderVisit.Order!.ActualHandleTime >= dto.CurrentHandleTime && x.OrderVisit.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
-				.WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue, x => x.OrderVisit.Order!.FiledTime >= dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
-				.WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue, x => x.OrderVisit.Order!.CreationTime >= dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
-				.WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue, x => x.OrderVisit.VisitTime >= dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
-				.WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
-				.WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
-				.WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude), x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
-				.WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason), x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
-				//.Where(x => SqlFunc.Subqueryable<OrderVisit>().Where(ov => ov.Id == x.VisitId && ov.VisitState == EVisitState.Visited && ov.IsCanHandle).Any())
-				.Where((x, s) => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle)
-				.WhereIF(!isAdmin, (x, s) => (x.OrderVisit.Order.CounterSignType == ECounterSignType.Department || x.OrderVisit.Order.CounterSignType == null) && x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
-				;
-			if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
-			{
-				query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-						(x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
-								  x.OrderVisit.Order.No.Contains(dto.Keyword!))
-					.Where((x, s) => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode.StartsWith(_sessionContext.OrgId) && (
-						SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
-						SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2"
-						|| SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
-						SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
-					));
-			}
-			else
-			{
-				query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-						(x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
-								  x.OrderVisit.Order.No.Contains(dto.Keyword!))
-					.Where((x, s) => x.VisitTarget == EVisitTarget.Org && (
-						SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
-						SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2"
-						|| SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
-						SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
-					));
-			}
+        /// <summary>
+        /// 获取申请列表
+        /// </summary>
+        /// <returns></returns>
+        public ISugarQueryable<OrderVisitDetail> ApplyQuery(MayScreenListDto dto, CancellationToken cancellationToken)
+        {
+            //dto.CreationTimeEnd = DateTime.Now;
+            ////dto.CreationTimeStart = DateTime.Now;
+            //dto.CreationTimeStart = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
+            var isAdmin = _orderDomainService.IsCheckAdmin();
+            var query = _orderVisitedDetailRepository.Queryable(false, true)
+                .Includes(x => x.OrderVisit)
+                .Includes(x => x.OrderVisit, y => y.Order)
+                .Includes(x => x.OrderVisit, y => y.Employee)
+                .Includes(x => x.SecondaryHandling)
+                .Where(x => x.OrderVisit.Order.IsProvince == false)
+                .LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.Status < EScreenStatus.End && s.IsDeleted == false)
+                //.Where((x, s) => s.Id == null && (x.SecondaryHandling.State == ESecondaryHandlingState.NotApply || x.SecondaryHandling.Id == null))
+                .Where(x=> SqlFunc.Subqueryable<OrderSecondaryHandling>().Where(osh => osh.VisitDetailId == x.Id &&  osh.State == ESecondaryHandlingState.NotApply).NotAny())
+                //.Where(x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
+                .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
+                .WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
+                .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order!.Title!.Contains(dto.Title!))
+                .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.OrderVisit.Order!.SourceChannelCode! == dto.SourceChannel!)
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.OrderVisit.Order!.AcceptTypeCode! == dto.AcceptType!)
+                .WhereIF(dto.CounterSignType.HasValue, x => x.OrderVisit.Order!.CounterSignType == dto.CounterSignType)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.OrderVisit.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
+                .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.OrderVisit.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
+                .WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue, x => x.OrderVisit.Order!.ActualHandleTime >= dto.CurrentHandleTime && x.OrderVisit.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
+                .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue, x => x.OrderVisit.Order!.FiledTime >= dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
+                .WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue, x => x.OrderVisit.Order!.CreationTime >= dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
+                .WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue, x => x.OrderVisit.VisitTime >= dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
+                .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude), x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason), x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
+                //.Where(x => SqlFunc.Subqueryable<OrderVisit>().Where(ov => ov.Id == x.VisitId && ov.VisitState == EVisitState.Visited && ov.IsCanHandle).Any())
+                .Where((x, s) => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle)
+                .WhereIF(!isAdmin, (x, s) => (x.OrderVisit.Order.CounterSignType ==  ECounterSignType.Department || x.OrderVisit.Order.CounterSignType == null) && x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
+                ;
+            if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
+            {
+                query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
+                        (x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
+                                  x.OrderVisit.Order.No.Contains(dto.Keyword!))
+                    .Where((x, s) => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode.StartsWith(_sessionContext.OrgId) && (
+                        SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
+                        SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2"
+                        || SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
+                        SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
+                    ));
+            }
+            else
+            {
+                query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
+                        (x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
+                                  x.OrderVisit.Order.No.Contains(dto.Keyword!))
+                    .Where((x, s) => x.VisitTarget == EVisitTarget.Org && (
+                        SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
+                        SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2"
+                        || SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
+                        SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
+                    ));
+            }
 
 			return query.OrderByDescending((x, s) => x.CreationTime);
 		}

+ 5 - 1
src/Hotline.Repository.SqlSugar/System/SystemOrganizeRepository.cs

@@ -1,6 +1,7 @@
 using Hotline.Repository.SqlSugar.DataPermissions;
 using Hotline.SeedData;
 using Hotline.Settings;
+using Hotline.Share.Dtos;
 using SqlSugar;
 using XF.Domain.Authentications;
 using XF.Domain.Dependency;
@@ -31,7 +32,10 @@ namespace Hotline.Repository.SqlSugar.System
             return list;
         }
 
-
+        public async Task<IReadOnlyCollection<Kv>> GetOrgEnabled()
+        { 
+            return await Queryable().Where(m => m.IsEnable == true).Select(m => new Kv { Key = m.Id, Value = m.Name }).ToListAsync();
+        }
 
         public async Task<IReadOnlyList<SystemOrganize>> GetCanUseOrg()
         {

+ 1 - 0
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -1023,6 +1023,7 @@ namespace Hotline.Share.Dtos.Order
 
         public bool? IsReTransact { get; set; }
     }
+>>>>>>>>> Temporary merge branch 2
 
     public class UpdateOrderDto : AddOrderDto
     {

+ 0 - 5
src/Hotline/Caching/Interfaces/ISysDicDataCacheManager.cs

@@ -51,11 +51,6 @@ namespace Hotline.Caching.Interfaces
         IReadOnlyList<SystemDicData> VisitMananer { get; }
         IReadOnlyList<SystemDicData> SourceChannel { get; }
 
-        /// <summary>
-        /// 自贡随手拍行业审批部门
-        /// </summary>
-        IReadOnlyCollection<SystemDicDataOutDto> SnapshotDepartment { get; }
-
         /// <summary>
         /// 随手拍公告来源
         /// </summary>

+ 0 - 5
src/Hotline/Caching/Services/SysDicDataCacheManager.cs

@@ -112,11 +112,6 @@ namespace Hotline.Caching.Services
         public IReadOnlyList<SystemDicData> VisitMananer => GetSysDicDataCache(SysDicTypeConsts.VisitManner);
         public IReadOnlyList<SystemDicData> SourceChannel => GetSysDicDataCache(SysDicTypeConsts.SourceChannel);
 
-        /// <summary>
-        /// 自贡随手拍行业审批部门
-        /// </summary>
-        public IReadOnlyCollection<SystemDicDataOutDto> SnapshotDepartment => GetOrAdd(SysDicTypeConsts.SnapshotDepartment);
-
         /// <summary>
         /// 随手拍公告来源
         /// </summary>

+ 2 - 0
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -998,11 +998,13 @@ namespace Hotline.FlowEngine.Workflows
                 prevStep.FlowAssignType = prevStep.BusinessType is EBusinessType.Seat ? EFlowAssignType.Role :
                     prevStep.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Org;
             }
+            //甄别退回到最开始节点到部门
             if (workflow.FlowType == EFlowType.Review && workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
             {
                 prevStep.FlowAssignType = prevStep.StepType == EStepType.Start ? EFlowAssignType.Org : prevStep.FlowAssignType;
             }
 
+
             //复制上一个节点为待接办
             // var newPrevStep =
             //     await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);

+ 0 - 29
src/Hotline/SeedData/SystemDicDataSeedData.cs

@@ -50,31 +50,6 @@ public class SystemDicDataSeedData : ISeedData<SystemDicData>
                 new() { Id = "08dd0eca-66b8-4c98-8dec-0c76c29d77e3", DicDataValue = "2", DicDataName = "外部", Sort = 2},
                 ];
         }
-        if (dicTypeCode == SysDicTypeConsts.SnapshotDepartment)
-        {
-            return [
-                    new() { Id = "08dd1fd9-ec8b-455b-8a45-e7b449b760c6", DicDataValue = "1", DicDataName = "政务服务热线系统", Sort = 1 },
-                    new() { Id = "08dd1fd9-d8e4-4715-8605-de7c11d25ebf", DicDataValue = "2" , DicDataName = "热线中心" , Sort = 2},
-                    new() { Id = "08dd1fd9-d79d-4dc8-80fe-90d211edd1a9", DicDataValue = "2661", DicDataName = "自贡建工建设工程有限公司" , Sort = 3},
-                    new() { Id = "08dd1fd5-298b-49c4-813b-5a1ff2edcd29", DicDataValue = "2039", DicDataName = "自流井区人民政府" , Sort = 4},
-                    new() { Id = "08dd1fd5-0a4d-4e22-87bf-337653f883c1", DicDataValue = "2040", DicDataName = "贡井区人民政府" , Sort = 5},
-                    new() { Id = "08dd1fd5-0841-4119-89d6-cb923dfe3998", DicDataValue = "2041", DicDataName = "大安区人民政府" , Sort = 6},
-                    new() { Id = "08dd1fd5-0660-44a5-8104-4f6e4d0714e5", DicDataValue = "2042", DicDataName = "沿滩区人民政府" , Sort = 7},
-                    new() { Id = "08dd1f9f-e706-4cf9-8ee6-3c3cd7602c21", DicDataValue = "2043", DicDataName = "富顺县人民政府" , Sort = 8},
-                    new() { Id = "08dd1f67-0797-47f5-8da2-5742a98a53c4", DicDataValue = "2044", DicDataName = "荣县人民政府" , Sort = 9},
-                    new() { Id = "08dd1f66-441e-4eff-81fc-8b0afd78ca8f", DicDataValue = "2045", DicDataName = "高新区管委会" , Sort = 10},
-                    new() { Id = "08dd1f63-5682-456f-8596-8d99868334f6", DicDataValue = "2074", DicDataName = "荣县行政审批和营商环境局" , Sort = 11},
-                    new() { Id = "08dd1f62-ae99-474b-8a18-6351f9456bd9", DicDataValue = "2075", DicDataName = "荣县经开区管委会" , Sort = 12},
-                    new() { Id = "08dd1f61-3ec6-49c9-85d8-be35ddd9859b", DicDataValue = "2076", DicDataName = "荣县发展和改革局" , Sort = 13},
-                    new() { Id = "08dd1f5f-b885-4dae-86dc-4464660908ac", DicDataValue = "2077", DicDataName = "荣县科技和经信局" , Sort = 14},
-                    new() { Id = "08dd1f5f-b856-4e8c-8b33-0565dea6b56d", DicDataValue = "2078", DicDataName = "荣县教育和体育局" , Sort = 15},
-                    new() { Id = "08dd1f5f-af91-48c2-8b03-69f2c07ccefd", DicDataValue = "2079", DicDataName = "荣县公安局" , Sort = 16},
-                    new() { Id = "08dd1f5f-af5a-4fc7-85f5-034ba952d7fd", DicDataValue = "2834", DicDataName = "中国联通自贡分公司" , Sort = 17},
-                    new() { Id = "08dd1f5f-af18-42e6-8b8e-51923a92cf67", DicDataValue = "2081", DicDataName = "荣县民政局" , Sort = 18},
-                    new() { Id = "08dd1f5f-595d-4913-83be-ee71bebf3c30", DicDataValue = "2082", DicDataName = "荣县财政局" , Sort = 19},
-                    new() { Id = "08dd1f5e-d913-48cf-86f7-4bd3842669f4", DicDataValue = "2083", DicDataName = "荣县人力资源社会保障局" , Sort = 20}
-                ];
-        }
         if (dicTypeCode == SysDicTypeConsts.Workplace)
         {
             return
@@ -209,10 +184,6 @@ public class SystemDicDataSeedData : ISeedData<SystemDicData>
         {
             dicType = ["08dc0681-a6e1-473d-8b1d-1b0b67e0ec13", "随手拍公告类型"];
         }
-        if (dicTypeCode == SysDicTypeConsts.SnapshotDepartment)
-        {
-            dicType = ["08dd1f5d-ebd8-4dc1-861c-d3190ad4c528", "随手拍审核部门"];
-        }
         if (dicTypeCode == SysDicTypeConsts.SnapshotBulletinSource)
         {
             dicType = ["08dd060d-e27b-4786-879b-0469d6629d38", "随手拍公告来源"];

+ 4 - 1
src/Hotline/Settings/ISystemOrganizeRepository.cs

@@ -1,4 +1,5 @@
-using XF.Domain.Authentications;
+using Hotline.Share.Dtos;
+using XF.Domain.Authentications;
 using XF.Domain.Repository;
 
 namespace Hotline.Settings
@@ -13,6 +14,8 @@ namespace Hotline.Settings
 
         Task<IReadOnlyList<SystemOrganize>> GetCanUseOrg();
 
+        Task<IReadOnlyCollection<Kv>> GetOrgEnabled();
+
         Task<IReadOnlyList<SystemOrganize>> GetCanUseOrgByOrgCode(string orgCode);
 
         //Task<string> GetNewOrgCode(string? parentId);

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

@@ -292,11 +292,6 @@ public class SysDicTypeConsts
     /// </summary>
     public const string WorkArea = "WorkArea";
 
-    /// <summary>
-    /// 自贡随手拍行业审批部门
-    /// </summary>
-    public const string SnapshotDepartment = "SnapshotDepartment";
-
     /// <summary>
     /// 随手拍公告来源
     /// </summary>