瀏覽代碼

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

田爽 3 周之前
父節點
當前提交
cadd16b899

+ 5 - 3
src/Hotline.Api/Controllers/SysController.cs

@@ -45,6 +45,7 @@ namespace Hotline.Api.Controllers
     public class SysController : BaseController
     {
         private readonly IMapper _mapper;
+        private readonly IHybridCachingProvider _hybridCaching;
         private readonly IRepository<SystemSetting> _systemSettingsRepository;
         private readonly ISystemMenuRepository _systemMenuRepository;
         private readonly IRepository<SystemDicType> _sysDicTypeRepository;
@@ -100,7 +101,8 @@ namespace Hotline.Api.Controllers
 ,
             IOptionsSnapshot<AppConfiguration> appOptions,
             ISystemLogApplication systemLogApplication,
-            IExportApplication exportApplication)
+            IExportApplication exportApplication,
+            IHybridCachingProvider hybridCaching)
         {
             _mapper = mapper;
             _systemSettingsRepository = systemSettingsRepository;
@@ -121,6 +123,7 @@ namespace Hotline.Api.Controllers
             _appOptions = appOptions;
             _systemLogApplication = systemLogApplication;
             _exportApplication = exportApplication;
+            _hybridCaching = hybridCaching;
         }
 
         #region 菜单管理
@@ -670,8 +673,7 @@ namespace Hotline.Api.Controllers
         {
             foreach (var key in dto.Keys)
             {
-                await _easyCaching.RemoveAsync(key, HttpContext.RequestAborted);
-                await _redisCaching.KeyDelAsync(key);
+                await _hybridCaching.RemoveAsync(key, HttpContext.RequestAborted);
             }
             return Ok();
         }

+ 62 - 0
src/Hotline.Api/Filter/UserNameSessionContextFilter.cs

@@ -0,0 +1,62 @@
+using Hotline.Identity.Accounts;
+using Hotline.Settings;
+using Hotline.Share.Dtos.CallCenter;
+using Hotline.Share.Tools;
+using Hotline.Users;
+using IdentityModel;
+using Microsoft.AspNetCore.Mvc.Filters;
+using System.Security.Claims;
+using XF.Domain.Authentications;
+using XF.Domain.Repository;
+using static Hotline.AppDefaults;
+
+namespace Hotline.Api.Filter;
+
+public class UserNameSessionContextFilter : ActionFilterAttribute
+{
+    private IAccountRepository _accountRepository;
+    private IRepository<User> _userRepository;
+    private readonly string Name;  
+
+    public UserNameSessionContextFilter(string name)
+    {
+        Name = name;
+    }
+
+    public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
+    {
+        await ReloadUser(context);
+        await next();
+    }
+
+    private async Task ReloadUser(ActionExecutingContext context)
+    {
+        try
+        {
+            _accountRepository = context.HttpContext.RequestServices.GetRequiredService<IAccountRepository>();
+            _userRepository = context.HttpContext.RequestServices.GetRequiredService<IRepository<User>>();
+            var user = _userRepository.Queryable().Where(m => m.Name == Name).First();
+            if (user == null) return;
+            var account = await _accountRepository.GetExtAsync(m => m.Id == user.Id, m => m.Includes(x => x.Roles));
+
+            List<Claim> userClaims = [
+                new(JwtClaimTypes.Subject, account.Id),
+                new(JwtClaimTypes.PhoneNumber, account.PhoneNo ?? string.Empty),
+                new(ClaimTypes.NameIdentifier, user.Id),
+                new(AppClaimTypes.UserDisplayName, account.Name),
+                new(AppClaimTypes.DepartmentId, user.OrgId ?? string.Empty),
+                new(AppClaimTypes.DepartmentIsCenter, user.Organization?.IsCenter.ToString() ?? string.Empty),
+                new(AppClaimTypes.DepartmentName, user.Organization?.Name ?? string.Empty),
+                new(AppClaimTypes.DepartmentAreaCode, user.Organization?.AreaCode ?? string.Empty),
+                new(AppClaimTypes.DepartmentAreaName, user.Organization?.AreaName ?? string.Empty),
+                new(AppClaimTypes.DepartmentLevel, user.Organization?.Level.ToString() ?? string.Empty),
+                new(AppClaimTypes.AreaId, user.OrgId?.GetHigherOrgId() ?? string.Empty),
+            ];
+            userClaims.AddRange(account.Roles.Select(d => new Claim(JwtClaimTypes.Role, d.Name)));
+            context.HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
+        }
+        catch
+        {
+        }
+    }
+}

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

@@ -4082,7 +4082,6 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             OrgId = startStep.HandlerOrgId,
             OrgName = startStep.HandlerOrgName,
         };
-        //_sessionContext.ChangeSession(startStep.HandlerId);
         await _sessionContextManager.ChangeSessionContextByUserIdAsync(startStep.HandlerId, cancellationToken);
         var isAutoFillSummaryOpinion = _systemSettingCacheManager.IsAutoFillSummaryOpinion;
 

+ 72 - 62
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs

@@ -1,5 +1,6 @@
 using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Calls;
+using Hotline.Configurations;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Identity.Accounts;
@@ -23,6 +24,7 @@ using Hotline.Tools;
 using Hotline.Users;
 using MapsterMapper;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
 using Quartz.Simpl;
 using SqlSugar;
 using System.Data;
@@ -52,28 +54,29 @@ namespace Hotline.Application.StatisticalReport
         private readonly IRepository<SystemOrganize> _systemOrganizerepository;
         private readonly IRepository<OrderSpecial> _orderSpecialRepository;
         private readonly IRepository<OrderSendBackAudit> _orderSendBackAuditRepository;
-		private readonly IRepository<Hotspot> _hotspotTypeRepository;
-
-		/// <summary>
-		/// 
-		/// </summary>
-		/// <param name="orderRepository"></param>
-		/// <param name="orderVisitDetailRepository"></param>
-		/// <param name="orderDelayRepository"></param>
-		/// <param name="mapper"></param>
-		/// <param name="orderPublishRepository"></param>
-		/// <param name="sessionContext"></param>
-		/// <param name="workflowTraceRepository"></param>
-		/// <param name="orderScreenRepository"></param>
-		/// <param name="sysDicDataCacheManager"></param>
-		/// <param name="trCallRecordRepository"></param>
-		/// <param name="systemSettingCacheManager"></param>
-		/// <param name="userRepository"></param>
-		/// <param name="accountRepository"></param>
-		/// <param name="statisticsDepartRepository"></param>
-		/// <param name="systemOrganizerepository"></param>
-		/// <param name="orderSpecialRepository"></param>
-		public OrderReportApplication(
+        private readonly IRepository<Hotspot> _hotspotTypeRepository;
+        private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="orderRepository"></param>
+        /// <param name="orderVisitDetailRepository"></param>
+        /// <param name="orderDelayRepository"></param>
+        /// <param name="mapper"></param>
+        /// <param name="orderPublishRepository"></param>
+        /// <param name="sessionContext"></param>
+        /// <param name="workflowTraceRepository"></param>
+        /// <param name="orderScreenRepository"></param>
+        /// <param name="sysDicDataCacheManager"></param>
+        /// <param name="trCallRecordRepository"></param>
+        /// <param name="systemSettingCacheManager"></param>
+        /// <param name="userRepository"></param>
+        /// <param name="accountRepository"></param>
+        /// <param name="statisticsDepartRepository"></param>
+        /// <param name="systemOrganizerepository"></param>
+        /// <param name="orderSpecialRepository"></param>
+        public OrderReportApplication(
             IOrderRepository orderRepository,
             IRepository<OrderVisitDetail> orderVisitDetailRepository,
             IRepository<OrderDelay> orderDelayRepository,
@@ -91,8 +94,9 @@ namespace Hotline.Application.StatisticalReport
             IRepository<SystemOrganize> systemOrganizerepository,
              IRepository<OrderSpecial> orderSpecialRepository,
              IRepository<OrderSendBackAudit> orderSendBackAuditRepository,
-			IRepository<Hotspot> hotspotTypeRepository
-			)
+            IRepository<Hotspot> hotspotTypeRepository,
+             IOptionsSnapshot<AppConfiguration> appOptions
+            )
         {
             _orderRepository = orderRepository;
             _orderVisitDetailRepository = orderVisitDetailRepository;
@@ -112,8 +116,10 @@ namespace Hotline.Application.StatisticalReport
             _orderSpecialRepository = orderSpecialRepository;
             _orderSendBackAuditRepository = orderSendBackAuditRepository;
             _hotspotTypeRepository = hotspotTypeRepository;
+            _appOptions = appOptions;
 
-		}
+
+        }
 
         #region 宜宾、自贡
         /// <summary>
@@ -2693,6 +2699,7 @@ namespace Hotline.Application.StatisticalReport
                .LeftJoin<WorkflowStep>((o, w) => o.Id == w.ExternalId)
                .Where((o, w) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && w.ModuleCode == WorkflowModuleConsts.OrderHandle
                        && w.Status == EWorkflowStepStatus.WaitForAccept && w.CountersignPosition == ECountersignPosition.None)
+               .WhereIF(_appOptions.Value.IsZiGong, (o, w) => o.Status < EOrderStatus.Filed)//自贡需要排除已办理完成的
                .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (o, w) => o.Source == ESource.ProvinceStraight)
                .WhereIF(dto.TypeId != null && dto.TypeId == 1, (o, w) => o.IdentityType == EIdentityType.Citizen)
                .WhereIF(dto.TypeId != null && dto.TypeId == 2, (o, w) => o.IdentityType == EIdentityType.Enterprise)
@@ -2721,6 +2728,7 @@ namespace Hotline.Application.StatisticalReport
                 .LeftJoin<WorkflowStep>((o, w) => o.Id == w.ExternalId)
                 .Where((o, w) => w.CreationTime >= dto.StartTime && w.CreationTime <= dto.EndTime && w.ModuleCode == WorkflowModuleConsts.OrderHandle
                         && w.Status == EWorkflowStepStatus.WaitForAccept && w.CountersignPosition > ECountersignPosition.None)
+                   .WhereIF(_appOptions.Value.IsZiGong, (o, w) => o.Status < EOrderStatus.Filed)//自贡需要排除已办理完成的
                 .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (o, w) => o.Source == ESource.ProvinceStraight)
                 .WhereIF(dto.TypeId != null && dto.TypeId == 1, (o, w) => o.IdentityType == EIdentityType.Citizen)
                 .WhereIF(dto.TypeId != null && dto.TypeId == 2, (o, w) => o.IdentityType == EIdentityType.Enterprise)
@@ -2773,6 +2781,7 @@ namespace Hotline.Application.StatisticalReport
                     .LeftJoin<WorkflowStep>((o, w) => o.Id == w.ExternalId)
                     .Where((o, w) => w.CreationTime >= dto.StartTime && w.CreationTime <= dto.EndTime && w.ModuleCode == WorkflowModuleConsts.OrderHandle
                             && w.Status == EWorkflowStepStatus.WaitForAccept && w.CountersignPosition > ECountersignPosition.None)
+                       .WhereIF(_appOptions.Value.IsZiGong, (o, w) => o.Status < EOrderStatus.Filed)//自贡需要排除已办理完成的
                     .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (o, w) => o.Source == ESource.ProvinceStraight)
                     .WhereIF(dto.TypeId != null && dto.TypeId == 1, (o, w) => o.IdentityType == EIdentityType.Citizen)
                     .WhereIF(dto.TypeId != null && dto.TypeId == 2, (o, w) => o.IdentityType == EIdentityType.Enterprise)
@@ -2787,6 +2796,7 @@ namespace Hotline.Application.StatisticalReport
                     .LeftJoin<WorkflowStep>((o, w) => o.Id == w.ExternalId)
                     .Where((o, w) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && w.ModuleCode == WorkflowModuleConsts.OrderHandle
                             && w.Status == EWorkflowStepStatus.WaitForAccept && w.CountersignPosition == ECountersignPosition.None)
+                       .WhereIF(_appOptions.Value.IsZiGong, (o, w) => o.Status < EOrderStatus.Filed)//自贡需要排除已办理完成的
                     .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (o, w) => o.Source == ESource.ProvinceStraight)
                     .WhereIF(dto.TypeId != null && dto.TypeId == 1, (o, w) => o.IdentityType == EIdentityType.Citizen)
                     .WhereIF(dto.TypeId != null && dto.TypeId == 2, (o, w) => o.IdentityType == EIdentityType.Enterprise)
@@ -3003,43 +3013,43 @@ namespace Hotline.Application.StatisticalReport
             return query;
         }
 
-		public async Task<DataTable> HotspotStatisticsExprot_LZ(ExportExcelDto<HotspotStatisticsRep> dto)
-		{
-			var IsCenter = _sessionContext.OrgIsCenter;
-			DataTable data = new DataTable();
-
-			data = await _hotspotTypeRepository.Queryable()
-			.LeftJoin<Order>((it, o) => o.HotspotId.StartsWith(it.Id))
-			.Where((it, o) => o.CreationTime >= dto.QueryDto.StartTime && o.CreationTime <= dto.QueryDto.EndTime && o.Id != null)
-			.WhereIF(dto.QueryDto.TypeId == 1, (it, o) => o.IdentityType == EIdentityType.Citizen)
-			.WhereIF(dto.QueryDto.TypeId == 2, (it, o) => o.IdentityType == EIdentityType.Enterprise)
-			.WhereIF(IsCenter == false, (it, o) => o.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
+        public async Task<DataTable> HotspotStatisticsExprot_LZ(ExportExcelDto<HotspotStatisticsRep> dto)
+        {
+            var IsCenter = _sessionContext.OrgIsCenter;
+            DataTable data = new DataTable();
+
+            data = await _hotspotTypeRepository.Queryable()
+            .LeftJoin<Order>((it, o) => o.HotspotId.StartsWith(it.Id))
+            .Where((it, o) => o.CreationTime >= dto.QueryDto.StartTime && o.CreationTime <= dto.QueryDto.EndTime && o.Id != null)
+            .WhereIF(dto.QueryDto.TypeId == 1, (it, o) => o.IdentityType == EIdentityType.Citizen)
+            .WhereIF(dto.QueryDto.TypeId == 2, (it, o) => o.IdentityType == EIdentityType.Enterprise)
+            .WhereIF(IsCenter == false, (it, o) => o.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
             .GroupBy((it, o) => it.Id)
-			.OrderBy((it, o) => new { it.Id }, OrderByType.Asc)
-			.Select((it, o) => new
-			{
-				HotspotName = it.HotSpotName,
-				HotSpotFullName = it.HotSpotFullName,
-				SumCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.HotspotId.StartsWith(it.Id), 1, 0))
-			})
-			.ToDataTableAsync();
-
-			data.Columns["HotspotName"].SetOrdinal(0);
-			data.Columns["HotSpotFullName"].SetOrdinal(1);
-			data.Columns["SumCount"].ColumnName = "分类统计";
-			data.Columns["HotspotName"].ColumnName = "热点名称";
-			data.Columns["HotSpotFullName"].ColumnName = "热点分级";
-			//合计
-			DataRow sumRow = data.NewRow();
-			sumRow["热点名称"] = "合计";
-			decimal totalAmount = 0;
-			foreach (DataRow row in data.Rows)
-			{
-				totalAmount += Convert.ToDecimal(row["分类统计"]);
-			}
-			sumRow["分类统计"] = totalAmount;
-			data.Rows.Add(sumRow);
+            .OrderBy((it, o) => new { it.Id }, OrderByType.Asc)
+            .Select((it, o) => new
+            {
+                HotspotName = it.HotSpotName,
+                HotSpotFullName = it.HotSpotFullName,
+                SumCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.HotspotId.StartsWith(it.Id), 1, 0))
+            })
+            .ToDataTableAsync();
+
+            data.Columns["HotspotName"].SetOrdinal(0);
+            data.Columns["HotSpotFullName"].SetOrdinal(1);
+            data.Columns["SumCount"].ColumnName = "分类统计";
+            data.Columns["HotspotName"].ColumnName = "热点名称";
+            data.Columns["HotSpotFullName"].ColumnName = "热点分级";
+            //合计
+            DataRow sumRow = data.NewRow();
+            sumRow["热点名称"] = "合计";
+            decimal totalAmount = 0;
+            foreach (DataRow row in data.Rows)
+            {
+                totalAmount += Convert.ToDecimal(row["分类统计"]);
+            }
+            sumRow["分类统计"] = totalAmount;
+            data.Rows.Add(sumRow);
             return data;
-		}
-	}
+        }
+    }
 }

+ 22 - 2
src/Hotline.Share/Dtos/Article/BulletinDto.cs

@@ -545,6 +545,27 @@ namespace Hotline.Share.Dtos.Article
         public string IndustryId { get; set; }
     }
 
+    public class BulletinListOutDto
+    { 
+        /// <summary>
+        /// 公告ID
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string Title { get; set; }
+
+        private string content;
+        /// <summary>
+        /// 内容
+        /// </summary>
+        public string Content { get { return content.RemoveHtmlTags(); } set { content = value; } }
+
+        public DateTime CreationTime { get; set; }
+    }
+
     /// <summary>
     /// 微信小程序获取宣传学习列表出参
     /// </summary>
@@ -560,11 +581,10 @@ namespace Hotline.Share.Dtos.Article
         /// </summary>
         public string Title { get; set; }
 
-        private string content;
         /// <summary>
         /// 内容
         /// </summary>
-        public string Content { get { return content.RemoveHtmlTags(); } set { content = value; } }
+        public string Content { get; set; }
 
         public DateTime CreationTime { get; set; }
     }