Dun.Jason 1 yıl önce
ebeveyn
işleme
d689780667

+ 41 - 4
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Mvc;
 using SharpCompress.Archives;
 using SqlSugar;
 using System.Transactions;
+using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 
@@ -38,6 +39,7 @@ namespace Hotline.Api.Controllers.Bi
         private readonly IRepository<OrderPublish> _orderPublishRepository;
         private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
         private readonly IRepository<AiOrderVisitDetail> _aiOrderVisitDetailRepository;
+        private readonly ISessionContext _sessionContext;
 
 
         public BiOrderController(
@@ -53,7 +55,8 @@ namespace Hotline.Api.Controllers.Bi
             IRepository<TrCallRecord> trCallRecordRepository,
             IRepository<OrderPublish> orderPublishRepository,
             IRepository<SystemOrganize> systemOrganizeRepository,
-            IRepository<AiOrderVisitDetail> aiOrderVisitDetailRepository
+            IRepository<AiOrderVisitDetail> aiOrderVisitDetailRepository,
+            ISessionContext sessionContext
             )
         {
             _orderRepository = orderRepository;
@@ -69,6 +72,7 @@ namespace Hotline.Api.Controllers.Bi
             _orderPublishRepository = orderPublishRepository;
             _systemOrganizeRepository = systemOrganizeRepository;
             _aiOrderVisitDetailRepository = aiOrderVisitDetailRepository;
+            _sessionContext = sessionContext;
         }
 
         /// <summary>
@@ -312,6 +316,7 @@ namespace Hotline.Api.Controllers.Bi
 
         /// <summary>
         /// 部门不满意统计
+        /// 已加验证部门
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
@@ -322,6 +327,9 @@ namespace Hotline.Api.Controllers.Bi
 
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
 
+            var IsCenter = _sessionContext.OrgIsCenter;
+
+
             var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
             List<dynamic>? list = new List<dynamic>();
             //DataTable dt = new DataTable();
@@ -336,6 +344,7 @@ namespace Hotline.Api.Controllers.Bi
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.VisitOrgName.Contains(dto.OrgName))
                 .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))
                 .GroupBy(x => new { x.VisitOrgName, x.VisitOrgCode })
                 .Select(x => new BiVisitNoSatisfiedDto
                 {
@@ -364,7 +373,9 @@ namespace Hotline.Api.Controllers.Bi
             if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
 
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-            
+
+            var IsCenter = _sessionContext.OrgIsCenter;
+
             var (total, items) = await _orderVisitDetailRepository.Queryable()
                 .Includes(x => x.OrderVisit, d => d.Order)
                 .Includes(x => x.OrderVisit, d => d.Employee)
@@ -373,6 +384,7 @@ namespace Hotline.Api.Controllers.Bi
                 .Where(x => x.OrderVisit.VisitTime >= dto.StartTime.Value)
                 .Where(x => x.OrderVisit.VisitTime <= dto.EndTime.Value)
                 .Where(x => SqlFunc.JsonListObjectAny(x.OrgNoSatisfiedReason, "Key", dto.DissatisfiedKey))
+                .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrderVisit.Order.No.Contains(dto.Keyword) || x.OrderVisit.Order.Title.Contains(dto.Keyword))
                 .OrderBy(x => x.OrderVisit.VisitTime)
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
@@ -393,11 +405,14 @@ namespace Hotline.Api.Controllers.Bi
 
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
 
+            var IsCenter = _sessionContext.OrgIsCenter;
+
             var list = await _orderDelayRepository.Queryable()
                 .LeftJoin<SystemOrganize>((x, o) => x.ApplyOrgCode == o.Id)
                 .WhereIF(dto.StartTime.HasValue, (x, o) => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, (x, o) => x.CreationTime <= dto.EndTime)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.ApplyOrgName.Contains(dto.OrgName))
+                .WhereIF(IsCenter==false,x=>x.ApplyOrgCode.StartsWith(_sessionContext.RequiredOrgId))
                 .GroupBy(x => new { x.ApplyOrgCode, x.ApplyOrgName })
                 .Select(x => new BiOrderDelayDataDto
                 {
@@ -423,9 +438,14 @@ namespace Hotline.Api.Controllers.Bi
         {
             if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+
+            var IsCenter = _sessionContext.OrgIsCenter;
+
+
             var query = _orderSpecialRepository.Queryable()
                 .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
+                .WhereIF(IsCenter==false,x=>x.OrgId.StartsWith(_sessionContext.RequiredOrgId))
                 .GroupBy(x => new { x.Cause })
                 .Select(x => new OrderBiSpecialListVo
                 {
@@ -460,6 +480,8 @@ namespace Hotline.Api.Controllers.Bi
         {
             if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+
+            var IsCenter = _sessionContext.OrgIsCenter;
             var (total, items) = await _orderSpecialRepository.Queryable()
                 .Includes(x => x.Order)
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
@@ -469,6 +491,7 @@ namespace Hotline.Api.Controllers.Bi
                 .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
                 .WhereIF(dto.State.HasValue, x => x.State == dto.State)
+                .WhereIF(IsCenter==false,x=> x.OrgId.StartsWith(_sessionContext.OrgId))
                 .OrderByDescending(x => x.CreationTime)
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
             return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
@@ -559,7 +582,8 @@ namespace Hotline.Api.Controllers.Bi
         public async Task<object> HotPortJoinOrgStatistics([FromQuery] HotPortJoinOrgStatisticsRequest dto)
         {
             dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
-            return await _orderRepository.HotPortJoinOrgStatistics(dto.StartTime, dto.EndTime);
+            var IsCenter = _sessionContext.OrgIsCenter;
+            return await _orderRepository.HotPortJoinOrgStatistics(dto.StartTime, dto.EndTime,IsCenter,_sessionContext.OrgId);
         }
 
         /// <summary>
@@ -688,11 +712,14 @@ namespace Hotline.Api.Controllers.Bi
         public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgSatisfactionStatistics(DateTime StartDate, DateTime EndDate, string OrgName, int TypeId, string? LineNum)
         {
             EndDate = EndDate.AddDays(1).AddSeconds(-1);
+
+            bool IsCenter = _sessionContext.OrgIsCenter;
+
             var list = await _orderVisitDetailRepository.Queryable()
-                //.Includes(x => x.OrderVisit,o=>o.Order,d=>d.CallRecord)
                 .Where(x => x.OrderVisit.VisitTime >= StartDate && x.OrderVisit.VisitTime <= EndDate && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(x.VisitOrgCode))
                 .WhereIF(!string.IsNullOrEmpty(OrgName), x => x.VisitOrgName.Contains(OrgName))
                 .WhereIF(!string.IsNullOrEmpty(LineNum), x => x.OrderVisit.Order.CallRecord.Gateway.Contains(LineNum))
+                .WhereIF(IsCenter==false,x=>x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
                 .GroupBy(x => new
                 {
                     VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
@@ -785,10 +812,14 @@ namespace Hotline.Api.Controllers.Bi
         public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgStatisfactionOrgDetail(DateTime StartDate, DateTime EndDate, string OrgCode, int TypeId, string? LineNum)
         {
             EndDate = EndDate.AddDays(1).AddSeconds(-1);
+
+            bool IsCenter = _sessionContext.OrgIsCenter;
+
             var list = await _systemOrganizeRepository.Queryable().Where(x => x.Id.StartsWith(OrgCode))
                 .LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode)
                 .Where((x, it) => it.OrderVisit.VisitTime >= StartDate && it.OrderVisit.VisitTime <= EndDate && it.VisitTarget == EVisitTarget.Org && it.OrderVisit.VisitState == EVisitState.Visited)
                 .WhereIF(!string.IsNullOrEmpty(LineNum), (x, it) => it.OrderVisit.Order.CallRecord.Gateway.Contains(LineNum))
+                .WhereIF(IsCenter == false, (x,it) => it.VisitOrgCode.StartsWith(_sessionContext.OrgId))
                  .GroupBy((x, it) => new
                  {
                      VisitOrgCode = it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9"))
@@ -879,6 +910,8 @@ namespace Hotline.Api.Controllers.Bi
         public async Task<PagedDto<OrderVisitDetailDto>> VisitAndOrgSatisfactionDetail([FromQuery] VisitAndOrgSatisfactionDetailDto dto)
         {
             dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
+
+
             var (total, items) = await _orderVisitDetailRepository.Queryable()
                 .Includes(x => x.OrderVisit, o => o.Order, d => d.CallRecord)
                 .Where(x => x.OrderVisit.VisitTime >= dto.StartDate && x.OrderVisit.VisitTime <= dto.EndDate && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited)
@@ -1124,11 +1157,15 @@ namespace Hotline.Api.Controllers.Bi
         public async Task<List<DepartmentAcceptanceTypeStatisticsDto>> DepartmentAcceptanceTypeStatistics(DateTime StartDate, DateTime EndDate, int TypeCode)
         {
             EndDate = EndDate.AddDays(1).AddSeconds(-1);
+
+            var IsCenter = _sessionContext.OrgIsCenter;
+
             var orderData = await _orderRepository.Queryable()
               .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
               .Where((it, o) => it.CreationTime >= StartDate && it.CreationTime <= EndDate && (int)it.Status >= 300)
                 .WhereIF(TypeCode == 1, (it, o) => it.OrgLevelOneCode == "001")
                 .WhereIF(TypeCode == 2, (it, o) => it.OrgLevelOneCode != "001")
+                .WhereIF(IsCenter==false,(it,o)=> it.OrgLevelOneCode.StartsWith(_sessionContext.RequiredOrgId))
                .GroupBy((it, o) => new
                {
                    it.OrgLevelOneCode,

+ 2 - 1
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -95,7 +95,7 @@ namespace Hotline.Repository.SqlSugar.Orders
             return propertyInfo.GetValue(obj, null);
         }
 
-        public async Task<object> HotPortJoinOrgStatistics(DateTime StartTime, DateTime EndTime)
+        public async Task<object> HotPortJoinOrgStatistics(DateTime StartTime, DateTime EndTime, bool IsCenter, string? OrgCode)
         {
             //查询一级热点
             var hotSpotList = await Db.Queryable<Hotspot>().Where(x => string.IsNullOrEmpty(x.ParentId)).ToListAsync();
@@ -105,6 +105,7 @@ namespace Hotline.Repository.SqlSugar.Orders
                 var table = await Db.Queryable<Order>()
                     .LeftJoin<SystemOrganize>((it, o) => it.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == o.Id)
                     .Where((it, o) => it.StartTime >= StartTime && it.StartTime <= EndTime)
+                    .WhereIF(IsCenter==false,(it,o)=> o.Id.StartsWith(OrgCode))
                     .GroupBy((it, o) => new
                     {
                         CurrentHandleOrgCode = (it.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),

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

@@ -19,7 +19,7 @@ namespace Hotline.Orders
         Task OrderScreenRevisionVisit(string VisitId, bool canHandle, CancellationToken cancellationToken);
         Task FileAsync(Order order, CancellationToken cancellationToken);
 
-        Task<object> HotPortJoinOrgStatistics(DateTime StartTime, DateTime EndTime);
+        Task<object> HotPortJoinOrgStatistics(DateTime StartTime, DateTime EndTime,bool IsCenter,string? OrgCode);
 
     }