Explorar el Código

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

xf hace 1 año
padre
commit
f9cdaff5ff

+ 12 - 4
src/Hotline.Api/Controllers/EnforcementOrderController.cs

@@ -30,8 +30,18 @@ namespace Hotline.Api.Controllers
         private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
         private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
         private readonly ISessionContext _sessionContext;
-        private readonly IRepository<SystemArea> _systemAreaRepository;
 
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="enforcementOrdersRepository"></param>
+        /// <param name="judicialComplaintsEventTypeRepository"></param>
+        /// <param name="enforcementHotspotRepository"></param>
+        /// <param name="mapper"></param>
+        /// <param name="workflowApplication"></param>
+        /// <param name="sysDicDataCacheManager"></param>
+        /// <param name="systemOrganizeRepository"></param>
+        /// <param name="sessionContext"></param>
         public EnforcementOrderController(IRepository<EnforcementOrders> enforcementOrdersRepository,
          IRepository<JudicialComplaintsEventType> judicialComplaintsEventTypeRepository,
          IRepository<EnforcementHotspot> enforcementHotspotRepository,
@@ -39,8 +49,7 @@ namespace Hotline.Api.Controllers
          IWorkflowApplication workflowApplication,
          ISystemDicDataCacheManager sysDicDataCacheManager,
          IRepository<SystemOrganize> systemOrganizeRepository,
-         ISessionContext sessionContext,
-         IRepository<SystemArea> systemAreaRepository)
+         ISessionContext sessionContext)
         {
             _enforcementOrdersRepository = enforcementOrdersRepository;
             _judicialComplaintsEventTypeRepository = judicialComplaintsEventTypeRepository;
@@ -50,7 +59,6 @@ namespace Hotline.Api.Controllers
             _sysDicDataCacheManager = sysDicDataCacheManager;
             _systemOrganizeRepository = systemOrganizeRepository;
             _sessionContext = sessionContext;
-            _systemAreaRepository = systemAreaRepository;
         }
 
         /// <summary>

+ 12 - 2
src/Hotline.Api/Controllers/HomeController.cs

@@ -62,16 +62,26 @@ public class HomeController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpGet("myinfo")]
-    public async Task<User?> GetMyInfo()
+    public async Task<Object> GetMyInfo()
     {
         if (!string.IsNullOrEmpty(_sessionContext.UserId))
         {
-            return await _userRepository.Queryable()
+	        var monitor = false;
+	        var setting = _systemSettingCacheManager.GetSetting(SettingConstants.SeatsMonitor);
+	        var settingStr = setting?.SettingValue;
+	        var roles = _sessionContext.Roles;
+	        foreach (var item in settingStr)
+	        {
+		        if (roles != null && roles.Contains(item)) monitor = true;
+	        }
+
+			var user = await _userRepository.Queryable()
                 .Includes(x => x.Organization)
                 .Includes(x => x.Account)
                 .Includes(x => x.Roles)
                 .FirstAsync(x => x.Id == _sessionContext.UserId);
             //return await _userRepository.GetAsync(_sessionContext.UserId);
+            return new { User = user, Monitor = monitor };
         }
         throw UserFriendlyException.SameMessage("无效登录信息");
     }

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

@@ -3283,7 +3283,7 @@ public class OrderController : BaseController
 			var orderDto = _mapper.Map<OrderDto>(order);
 			await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto, cancellationToken: HttpContext.RequestAborted);
 			//}
-			await _workflowApplication.RecallAsync(recall, order.ExpiredTime, HttpContext.RequestAborted);
+			await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, HttpContext.RequestAborted);
             var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
             if (publish != null)
             {
@@ -3468,7 +3468,7 @@ public class OrderController : BaseController
 
 			//todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
 
-			await _workflowApplication.RecallAsync(recall, order.ExpiredTime, HttpContext.RequestAborted);
+			await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, HttpContext.RequestAborted);
             var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
             if (publish != null)
             {

+ 13 - 1
src/Hotline.Api/Controllers/SchedulingController.cs

@@ -23,18 +23,21 @@ namespace Hotline.Api.Controllers
 		private readonly IRepository<Scheduling> _schedulingRepository;
 		private readonly IRepository<SchedulingShift> _schedulingShiftRepository;
 		private readonly IRepository<SchedulingUser> _schedulingUserRepository;
+		private readonly IRepository<User> _userRepository;
 		private readonly IMapper _mapper;
 
 		public SchedulingController(
 			IRepository<Scheduling> schedulingRepository,
 			IRepository<SchedulingShift> schedulingShiftRepository,
 			IRepository<SchedulingUser> schedulingUserRepository,
+			IRepository<User> userRepository,
 			IMapper mapper
 			) {
 			_schedulingRepository = schedulingRepository;
 			_schedulingShiftRepository = schedulingShiftRepository;
 			_schedulingUserRepository = schedulingUserRepository;
 			_mapper= mapper;
+			_userRepository = userRepository;
 		}
 		#region 排班人员
 
@@ -51,8 +54,11 @@ namespace Hotline.Api.Controllers
 			{
 				if (string.IsNullOrEmpty(dto.UserId))
 					throw UserFriendlyException.SameMessage("请带上用户信息");
-
+				
 				var model = _mapper.Map<SchedulingUser>(dto);
+				var sysUser = await _userRepository.Queryable().Includes(u => u.Organization).Where(x => x.Id == dto.UserId).FirstAsync(HttpContext.RequestAborted);
+				model.OrgId = sysUser.Organization.Id;
+				model.OrgIdName = sysUser.Organization.Name;
 				user.Add(model);
 			}
 			await _schedulingUserRepository.AddRangeAsync(user, HttpContext.RequestAborted);
@@ -84,6 +90,9 @@ namespace Hotline.Api.Controllers
 			if (user is null)
 				throw UserFriendlyException.SameMessage("无效排班人员");
 			_mapper.Map(dto, user);
+			var sysUser = await _userRepository.Queryable().Includes(u => u.Organization).Where(x => x.Id == dto.UserId).FirstAsync(HttpContext.RequestAborted);
+			user.OrgId = sysUser.Organization.Id;
+			user.OrgIdName = sysUser.Organization.Name;
 			await _schedulingUserRepository.UpdateAsync(user, HttpContext.RequestAborted);
 		}
 
@@ -102,6 +111,9 @@ namespace Hotline.Api.Controllers
 				if (user is null)
 					throw UserFriendlyException.SameMessage("无效排班人员");
 				_mapper.Map(dto, user);
+				var sysUser = await _userRepository.Queryable().Includes(u => u.Organization).Where(x => x.Id == item.UserId).FirstAsync(HttpContext.RequestAborted);
+				user.OrgId = sysUser.Organization.Id;
+				user.OrgIdName = sysUser.Organization.Name;
 				users.Add(user);
 			}
 			await _schedulingUserRepository.UpdateRangeAsync(users, HttpContext.RequestAborted);

+ 2 - 0
src/Hotline.Api/Realtimes/RealtimeGroupNames.cs

@@ -6,5 +6,7 @@
         public const string BigScreenDataShow = "BigScreen-DataShow";
         public const string BigScreenSeatState = "BigScreen-SeatState";
         public const string BigDataScreen = "BigData-Screen";
+        public const string EnforcementBigDataScreen = "Enforcement-BigData-Screen";
+
     }
 }

+ 4 - 0
src/Hotline.Api/Realtimes/RealtimeMethods.cs

@@ -71,6 +71,10 @@
         public static string OrderHandlingDetail = "OrderHandlingDetail";
 
         #endregion
+
+        #region 司法大屏
+        public static string EnforcementOrderHandlingDetail = "EnforcementOrderHandlingDetail"; 
+        #endregion
     }
 }
     

+ 11 - 0
src/Hotline.Api/Realtimes/RealtimeService.cs

@@ -221,6 +221,17 @@ public class RealtimeService : IRealtimeService, IScopeDependency
 
     #endregion
 
+    /// <summary>
+    /// 司法大屏--工单明细
+    /// </summary>
+    /// <param name="obj"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public Task EnforcementOrderHandlingDetailAsync(object obj, CancellationToken cancellationToken) =>
+        SendToGroupAsync(RealtimeGroupNames.EnforcementBigDataScreen, RealtimeMethods.EnforcementOrderHandlingDetail, obj, cancellationToken);
+
+    
+
     #region private
 
     private async Task SendCallCenterMsgAsync(string userId, string msg, object? value, CancellationToken cancellationToken)

+ 79 - 0
src/Hotline.Application/Bigscreen/EnforcementDataScreenRefreshService.cs

@@ -0,0 +1,79 @@
+using Hotline.Caching.Interfaces;
+using Hotline.JudicialManagement;
+using Hotline.Orders;
+using Hotline.Realtimes;
+using Hotline.Settings;
+using Hotline.Share.Dtos.JudicialManagement;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using XF.Domain.Constants;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Bigscreen
+{
+    internal class EnforcementDataScreenRefreshService : BackgroundService
+    {
+        private readonly IServiceScopeFactory _serviceScopeFactory;
+
+        public EnforcementDataScreenRefreshService(IServiceScopeFactory serviceScopeFactory)
+        {
+            _serviceScopeFactory = serviceScopeFactory;
+        }
+
+        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+        {
+            using var scope = _serviceScopeFactory.CreateScope();
+            var realtimeService = scope.ServiceProvider.GetRequiredService<IRealtimeService>();
+            var _enforcementOrdersRepository = scope.ServiceProvider.GetRequiredService<IRepository<EnforcementOrders>>();
+            var _mapper = scope.ServiceProvider.GetRequiredService<IMapper>();
+            var systemSettingCacheManager = scope.ServiceProvider.GetRequiredService<ISystemSettingCacheManager>();
+
+            int times = int.Parse(systemSettingCacheManager.GetSetting(SettingConstants.EnforcementDataOrderChangedTimes)?.SettingValue[0]);
+            while (!stoppingToken.IsCancellationRequested)
+            {
+                try
+                {
+
+                    var list = await _enforcementOrdersRepository.Queryable()
+                  .LeftJoin<Order>((x, o) => x.Id == o.Id)
+                  .LeftJoin<SystemArea>((x, o, p) => o.AreaCode == p.Id)
+                  .Where((x, o, p) => o.Id != null)
+                  .Where((x, o) => o.Status > EOrderStatus.WaitForAccept && o.StartTime.Value.Date == DateTime.Now.Date)
+                  .Select((x, o, p) => new OrderOverviewDto
+                  {
+                      Id = o.Id,
+                      WorkflowId = o.WorkflowId,
+                      SourceChannel = o.SourceChannel,
+                      SourceChannelCode = o.SourceChannelCode,
+                      Title = o.Title,
+                      AcceptType = o.AcceptType,
+                      AcceptTypeCode = o.AcceptTypeCode,
+                      HotspotId = o.HotspotId,
+                      HotspotName = o.HotspotName,
+                      ActualHandleOrgName = o.ActualHandleOrgName,
+                      ActualHandleOrgCode = o.ActualHandleOrgCode,
+                      Status = o.Status,
+                      ActualHandleTime = o.ActualHandleTime,
+                      ExpiredTime = o.ExpiredTime,
+                      NearlyExpiredTime = o.NearlyExpiredTime,
+                      StartTime = o.StartTime,
+                      AreaName = p.AreaName
+                  })
+                  .MergeTable()
+                  .OrderByDescending(d => d.StartTime)
+                  .Take(50)
+                  .ToListAsync();
+
+                    var orderlist = _mapper.Map<List<OrderOverviewDto>>(list);
+
+                    await realtimeService.EnforcementOrderHandlingDetailAsync(orderlist, stoppingToken);
+                }
+                catch { }
+
+                await Task.Delay(times);
+            }
+        }
+    }
+}

+ 2 - 4
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -9,7 +9,6 @@ using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.KnowledgeBase;
 using Hotline.Orders;
-using Hotline.Repository.SqlSugar.Knowledge;
 using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
@@ -19,10 +18,7 @@ using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Quality;
 using MapsterMapper;
 using MediatR;
-using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
-using XF.Domain.Authentications;
-using XF.Domain.Entities;
 using XF.Domain.Repository;
 
 namespace Hotline.Application.Handlers.FlowEngine;
@@ -193,6 +189,8 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                             visitDetail.OrgProcessingResults = screenSatisfy;
                             visitDetail.OrgHandledAttitude = screenSatisfy;
                             await _orderVisitedDetailRepository.UpdateAsync(visitDetail, cancellationToken);
+                            // 修改主表当前评价结果
+                            await _orderVisitRepository.Updateable().SetColumns(v=> new OrderVisit() { NowEvaluate = screenSatisfy }).Where(v=>v.Id == visitDetail.VisitId).ExecuteCommandAsync(cancellationToken);
                             //获取回访信息
                             var visit = await _orderVisitRepository.Queryable().Includes(x => x.Order)
                                 .Includes(x => x.OrderVisitDetails)

+ 0 - 4
src/Hotline.Application/Handlers/FlowEngine/WorkflowNextHandler.cs

@@ -11,17 +11,13 @@ using Hotline.Settings;
 using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Order;
-using Hotline.Share.Dtos.Settings;
-using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Push;
-using Hotline.Share.Enums.Quality;
 using Hotline.Share.Mq;
 using Hotline.Users;
 using MapsterMapper;
 using MediatR;
 using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
 using XF.Domain.Authentications;
 using XF.Domain.Entities;
 using XF.Domain.Repository;

+ 5 - 6
src/Hotline.Application/JudicialManagement/EnforcementApplication.cs

@@ -12,7 +12,6 @@ namespace Hotline.Application.JudicialManagement
     {
         private readonly IRepository<EnforcementOrderHander> _enforcementOrderHanderRepository;
         private readonly IRepository<EnforcementOrders> _enforcementOrdersRepository;
-        private readonly IRepository<JudicialComplaintsEventType> _judicialComplaintsEventTypeRepository;
         private readonly IRepository<EnforcementHotspot> _enforcementHotspotRepository;
         private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
@@ -23,17 +22,17 @@ namespace Hotline.Application.JudicialManagement
         /// </summary>
         /// <param name="enforcementOrderHanderRepository"></param>
         /// <param name="enforcementOrdersRepository"></param>
-        /// <param name="judicialComplaintsEventTypeRepository"></param>
+        /// <param name="enforcementHotspotRepository"></param>
+        /// <param name="sysDicDataCacheManager"></param>
+        /// <param name="systemSettingCacheManager"></param>
         public EnforcementApplication(IRepository<EnforcementOrderHander> enforcementOrderHanderRepository,
            IRepository<EnforcementOrders> enforcementOrdersRepository,
-          IRepository<JudicialComplaintsEventType> judicialComplaintsEventTypeRepository,
           IRepository<EnforcementHotspot> enforcementHotspotRepository,
         ISystemDicDataCacheManager sysDicDataCacheManager,
        ISystemSettingCacheManager systemSettingCacheManager)
         {
             _enforcementOrderHanderRepository = enforcementOrderHanderRepository;
             _enforcementOrdersRepository = enforcementOrdersRepository;
-            _judicialComplaintsEventTypeRepository = judicialComplaintsEventTypeRepository;
             _enforcementHotspotRepository = enforcementHotspotRepository;
             _sysDicDataCacheManager = sysDicDataCacheManager;
             _systemSettingCacheManager = systemSettingCacheManager;
@@ -82,7 +81,7 @@ namespace Hotline.Application.JudicialManagement
                         Id = order.Id,
                         OrderNo = order.No,
                         IsEnforcementOrder = order.IsEnforcementOrder.HasValue ? order.IsEnforcementOrder.Value : false,
-                        IsTheClueTrue = false,
+                        IsTheClueTrue = null,
                         IsPassTheBuckOrder = false
                     };
 
@@ -161,7 +160,7 @@ namespace Hotline.Application.JudicialManagement
                             Id = order.Id,
                             OrderNo = order.No,
                             IsEnforcementOrder = order.IsEnforcementOrder.HasValue ? order.IsEnforcementOrder.Value : false,
-                            IsTheClueTrue = false,
+                            IsTheClueTrue = null,
                             IsPassTheBuckOrder = true
                         };
                         await _enforcementOrdersRepository.AddAsync(orderData, cancellationToken);

+ 4 - 5
src/Hotline/Orders/OrderDomainService.cs

@@ -242,8 +242,8 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             var sendNum = stepsList.Count() / schedulings;
             for (int i = 0; i < sendNum; i++)
             {
-                stepIds.Add(stepsList[i]);
-                stepsList.Remove(stepsList[i]);
+                stepIds.Add(stepsList[0]);
+                stepsList.Remove(stepsList[0]);
             }
             List<(string, string, string, string, IReadOnlyList<string> stepIds)> handlers = new();
             ; handlers.Add(new ValueTuple<string, string, string, string, IReadOnlyList<string>>(user.Id, user.Name, user.OrgId, user.Organization.Name, stepIds));
@@ -291,7 +291,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
                         stepIds.Add(stepsList[0]);
                         stepsList.Remove(stepsList[0]);
                     }
-                    handlers.Add(new ValueTuple<string, string, string, string, IReadOnlyList<string>>(scheduling.SchedulingUser.UserId, scheduling.SchedulingUser.UserName, "", "", stepIds));//todo
+                    handlers.Add(new ValueTuple<string, string, string, string, IReadOnlyList<string>>(scheduling.SchedulingUser.UserId, scheduling.SchedulingUser.UserName, scheduling.SchedulingUser.OrgId, scheduling.SchedulingUser.OrgIdName, stepIds));
 
                 }
             }
@@ -304,8 +304,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
                     stepIds.Add(stepsList[0]);
                     stepsList.Remove(stepsList[0]);
                 }
-                handlers.Add(new ValueTuple<string, string, string, string, IReadOnlyList<string>>(schedulings[0].SchedulingUser.UserId, schedulings[0].SchedulingUser.UserName, "", "", stepIds));//todo
-
+                handlers.Add(new ValueTuple<string, string, string, string, IReadOnlyList<string>>(schedulings[0].SchedulingUser.UserId, schedulings[0].SchedulingUser.UserName, schedulings[0].SchedulingUser.OrgId, schedulings[0].SchedulingUser.OrgIdName, stepIds));
             }
             if (handlers.Any())
             {

+ 4 - 0
src/Hotline/Realtimes/IRealtimeService.cs

@@ -61,5 +61,9 @@ namespace Hotline.Realtimes
         Task OrderHandlingDetailAsync(object obj, CancellationToken cancellationToken);
         #endregion
 
+        #region 司法大屏
+
+        Task EnforcementOrderHandlingDetailAsync(object obj, CancellationToken cancellationToken); 
+        #endregion
     }
 }

+ 18 - 0
src/Hotline/Schedulings/SchedulingUser.cs

@@ -1,4 +1,5 @@
 using Hotline.Orders;
+using Hotline.Settings;
 using Hotline.Users;
 using SqlSugar;
 using System;
@@ -26,10 +27,27 @@ namespace Hotline.Schedulings
 		[SugarColumn(ColumnDescription = "用户名称")]
 		public string? UserName { get; set; }
 
+
+		/// <summary>
+		/// 用户机构ID
+		/// </summary>
+		[SugarColumn(ColumnDescription = "用户机构ID")]
+		public string? OrgId { get; set; }
+
+
+		/// <summary>
+		/// 用户机构名称
+		/// </summary>
+		[SugarColumn(ColumnDescription = "用户机构名称")]
+		public string? OrgIdName { get; set; }
+
 		/// <summary>
 		/// 
 		/// </summary>
 		[Navigate(NavigateType.OneToOne, nameof(UserId))]
 		public User User { get; set; }
+
+		[Navigate(NavigateType.OneToOne, nameof(OrgId))]
+		public SystemOrganize Organize { get; set; }
 	}
 }

+ 4 - 1
src/XF.Domain/Constants/SettingConstants.cs

@@ -207,6 +207,9 @@ namespace XF.Domain.Constants
         /// </summary>
         public const string EnforcementPassTheBuckNum = "EnforcementPassTheBuckNum";
 
-
+        /// <summary>
+        /// 行政执法大屏工单数据推送间隔
+        /// </summary>
+        public const string EnforcementDataOrderChangedTimes = "EnforcementDataOrderChangedTimes";
     }
 }