Browse Source

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

xf 1 month ago
parent
commit
bd58132eca

+ 68 - 33
src/Hotline.Api/Controllers/Bigscreen/DataScreenController.cs

@@ -527,39 +527,74 @@ namespace Hotline.Api.Controllers.Bigscreen
         /// <returns></returns>
         [AllowAnonymous]
         [HttpGet("ordervisit-orgsatisfaction-rank")]
-        public async Task<List<OrderVisitOrgSatisfactionRankDto>> OrderVisitOrgSatisfactionRank(DateTime StartTime, DateTime EndTime)
-        {
-            var list = await _orderVisitDetailRepository.Queryable()
-                .Includes(x => x.OrderVisit)
-                .Where(x => x.OrderVisit.VisitTime >= StartTime && x.OrderVisit.VisitTime <= EndTime && x.VisitTarget == EVisitTarget.Org &&
-                            x.VisitOrgCode.Length >= 6 && x.OrderVisit.VisitState == EVisitState.Visited)
-                .GroupBy(x => new
-                {
-                    VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
-                    x.VisitOrgName
-                })
-                .Select(x => new OrderVisitOrgSatisfactionRankDto()
-                {
-                    VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
-                    VisitOrgName = x.VisitOrgName,
-                    SatisfiedCount =
-                        SqlFunc.AggregateSum(SqlFunc.IIF(
-                            SqlFunc.JsonField(x.OrgProcessingResults, "Key") != "1" && SqlFunc.JsonField(x.OrgProcessingResults, "Key") != "2", 1,
-                            0)),
-                    VisitCount = SqlFunc.AggregateCount(x.VisitOrgName)
-                }).MergeTable().OrderByDescending(x => x.SatisfiedCount).Take(10).ToListAsync();
-            list = list.OrderByDescending(x => x.SatisfiedRate).ToList();
-            return list;
-        }
-
-        /// <summary>
-        /// 占比分析
-        /// </summary>
-        /// <param name="StartTime"></param>
-        /// <param name="EndTime"></param>
-        /// <param name="IsSource"></param>
-        /// <returns></returns>
-        [AllowAnonymous]
+		public async Task<List<OrderVisitOrgSatisfactionRankDto>> OrderVisitOrgSatisfactionRank(DateTime StartTime, DateTime EndTime)
+		{
+			var list = new List<OrderVisitOrgSatisfactionRankDto>();
+
+			if (_appOptions.Value.IsLuZhou)
+			{
+				list = await _orderVisitDetailRepository.Queryable()
+                      .LeftJoin<OrderVisit>((x,ov)=>x.VisitId == ov.Id)
+					  .Where((x, ov) => ov.VisitTime >= StartTime && ov.VisitTime <= EndTime && x.VisitTarget == EVisitTarget.Org &&
+								  x.VisitOrgCode.Length >= 6 && ov.VisitState == EVisitState.Visited)
+					  .GroupBy((x, ov) => new
+					  {
+						  VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
+					  })
+					  .Select((x, ov) => new OrderVisitOrgSatisfactionRankDto()
+					  {
+						  VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+						  SatisfiedCount =
+							  SqlFunc.AggregateSum(SqlFunc.IIF(
+								  SqlFunc.JsonField(x.OrgProcessingResults, "Key") != "1" && SqlFunc.JsonField(x.OrgProcessingResults, "Key") != "2", 1,
+								  0)),
+						  VisitCount = SqlFunc.AggregateCount(x.VisitOrgName)
+					  }).MergeTable()
+					  .LeftJoin<SystemOrganize>((x, so) => x.VisitOrgCode == so.Id)
+					  .Select((x, so) => new OrderVisitOrgSatisfactionRankDto()
+					  {
+						  VisitOrgCode = x.VisitOrgCode,
+						  VisitOrgName = so.Name,
+						  SatisfiedCount = x.SatisfiedCount,
+						  VisitCount = x.VisitCount
+					  })
+					  .OrderByDescending(x => x.SatisfiedCount).Take(10).ToListAsync();
+				list = list.OrderByDescending(x => x.SatisfiedRate).ToList();
+			}
+			else
+			{
+				list = await _orderVisitDetailRepository.Queryable()
+					.Includes(x => x.OrderVisit)
+					.Where(x => x.OrderVisit.VisitTime >= StartTime && x.OrderVisit.VisitTime <= EndTime && x.VisitTarget == EVisitTarget.Org &&
+							x.VisitOrgCode.Length >= 6 && x.OrderVisit.VisitState == EVisitState.Visited)
+					.GroupBy(x => new
+					{
+						VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+						x.VisitOrgName
+					})
+					.Select(x => new OrderVisitOrgSatisfactionRankDto()
+					{
+						VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+						VisitOrgName = x.VisitOrgName,
+						SatisfiedCount =
+						SqlFunc.AggregateSum(SqlFunc.IIF(
+							SqlFunc.JsonField(x.OrgProcessingResults, "Key") != "1" && SqlFunc.JsonField(x.OrgProcessingResults, "Key") != "2", 1,
+							0)),
+						VisitCount = SqlFunc.AggregateCount(x.VisitOrgName)
+					}).MergeTable().OrderByDescending(x => x.SatisfiedCount).Take(10).ToListAsync();
+				list = list.OrderByDescending(x => x.SatisfiedRate).ToList();
+			}
+			return list;
+		}
+
+		/// <summary>
+		/// 占比分析
+		/// </summary>
+		/// <param name="StartTime"></param>
+		/// <param name="EndTime"></param>
+		/// <param name="IsSource"></param>
+		/// <returns></returns>
+		[AllowAnonymous]
         [HttpGet("order-source-accepttype-statistics")]
         public async Task<List<OrderSourceAndAcceptTtoeStatisticsDto>> OrderSourceAndAcceptTtoeStatistics(DateTime StartTime, DateTime EndTime,
             bool IsSource)

+ 37 - 7
src/Hotline.Api/Controllers/OrderController.cs

@@ -4395,16 +4395,29 @@ public class OrderController : BaseController
         if (_systemSettingCacheManager.Snapshot)
         {
             await _orderSnapshotRepository.Queryable()
-                .Where(m => m.Id == order.Id)
-                .Select(m => new { m.IndustryId, m.IndustryName, m.IndustryCase })
+                .LeftJoin<IndustryCase>((snapshot, industryCase) => snapshot.IndustryCase == industryCase.Id)
+                .Where((snapshot, industryCase) => snapshot.Id == order.Id)
+                .Select((snapshot, industryCase) => new {
+                    snapshot.IndustryId, snapshot.IndustryName, industryCase.Name, 
+                    snapshot.IsRectifyDepartment,
+                    snapshot.IsDangerDepartment,
+                    snapshot.IsSafetyDepartment,
+                    snapshot.SignRemark,snapshot.SignUserId,
+                    snapshot.SignUserName,
+                    snapshot.SignTime
+                })
                 .FirstAsync(HttpContext.RequestAborted)
                 .Then(async snapshot =>
                 {
-                    if (snapshot.IndustryCase.IsNullOrEmpty())
-                        dto.IndustryName = snapshot.IndustryName;
-                    else
-                        dto.IndustryName = snapshot.IndustryName + " " + snapshot.IndustryCase;
+                    dto.IndustryName = snapshot.IndustryName + " " + snapshot.Name;
                     dto.IndustryId = snapshot.IndustryId;
+                    dto.IsRectifyDepartment = snapshot.IsRectifyDepartment;
+                    dto.IsDangerDepartment = snapshot.IsDangerDepartment;
+                    dto.IsSafetyDepartment = snapshot.IsSafetyDepartment;
+                    dto.SignUserId = snapshot.SignUserId;
+                    dto.SignUserName = snapshot.SignUserName;
+                    dto.SignTime = snapshot.SignTime;
+                    dto.SignRemark = snapshot.SignRemark;
                 });
         }
 
@@ -4455,6 +4468,15 @@ public class OrderController : BaseController
             }
         }
 
+        if (_systemSettingCacheManager.Snapshot)
+        {
+            await _orderSnapshotRepository.Queryable()
+                .Where(m => m.Id == id)
+                .Select(m => new { m.IndustryId, m.IndustryName })
+                .FirstAsync(HttpContext.RequestAborted)
+                .Then(m => { dto.IndustryName = m.IndustryName; dto.IndustryId = m.IndustryId; });
+        }
+
         return _sessionContext.OrgIsCenter ? dto : dto.DataMask();
     }
 
@@ -4762,6 +4784,14 @@ public class OrderController : BaseController
             if (dto.IsEdit != true && order.Status > EOrderStatus.HandOverToUnAccept)
                 throw UserFriendlyException.SameMessage("工单已发起流程,不可编辑");
         }
+        if (_systemSettingCacheManager.Snapshot)
+        {
+            await _orderSnapshotRepository.Updateable()
+                .SetColumns(m => m.IndustryId, dto.IndustryId)
+                .SetColumns(m => m.IndustryName, dto.IndustryName)
+                .Where(m => m.Id == dto.Id)
+                .ExecuteCommandAsync();
+        }
 
         // 副本工单
         var copy = new OrderCopy();
@@ -5275,7 +5305,7 @@ public class OrderController : BaseController
                 orderHandleFlowDto.CrossSteps = orderHandleFlowDto.CrossSteps.OrderBy(d => d.Sort).ToList();
                 var stepCount = orderHandleFlowDto.CrossSteps.Count;
                 var unhandleSteps = new List<WorkflowStep> { startStep };
-                for (int i = 0; i < stepCount; i++)
+                for (int i = 0;i < stepCount;i++)
                 {
                     var crossStep = orderHandleFlowDto.CrossSteps[i];
                     var tempSteps = new List<WorkflowStep>();

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

@@ -383,7 +383,7 @@ namespace Hotline.Api.Controllers
 			var endTime =startTime.AddMonths(1).AddDays(-1);
 			DataTable data = await _schedulingRepository.Queryable().Where(x=>x.SchedulingTime >= startTime && x.SchedulingTime <= endTime).ToDataTableAsync();
 			if (data == null || data.Rows.Count <= 0) return res;
-			var names = data.AsEnumerable().Select(x=>new { SchedulingUserName = x.Field<string>("SchedulingUserName") , SchedulingUserId  = x.Field<string>("SchedulingUserId") }).Distinct().ToList();
+			var names = data.AsEnumerable().Select(x=>new { SchedulingUserName = x.Field<string>("SchedulingUserName") , SchedulingUserId  = x.Field<string>("SchedulingUserId") }).Distinct().OrderBy(x=>x.SchedulingUserName).ToList();
 		
 			foreach (var item in names)
 			{

+ 20 - 2
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -1572,7 +1572,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             await _orderVisitRepository.Updateable()
                 .Where(m => m.Id == item.Id)
                 .SetColumns(m => m.VisitState == EVisitState.SMSVisiting)
-                // .SetColumns(m => m.VisitType == EVisitType.SmsVisit)
+                //.SetColumns(m => m.IsPutThrough == true)
                 .SetColumns(m => m.EmployeeId == _sessionContext.RequiredUserId)
                 .ExecuteCommandAsync(cancellationToken);
 
@@ -3767,6 +3767,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSVisiting, d => d.VisitState == EVisitState.SMSVisiting)
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
                 d => d.IsPutThrough == false && d.VisitState != EVisitState.Visited && d.VisitState != EVisitState.None)
+            .WhereIF(_appOptions.Value.IsZiGong && dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
+                d => d.VisitState != EVisitState.SMSVisiting)//自贡未接通的短信回访了不在未接通中查询
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.ChipVoiceVisiting, d => d.VisitState == EVisitState.AiVisiting) //任务 162:回访状态快捷查询条件
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!))
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
@@ -5717,7 +5719,23 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .Where(x => x.State == ESendBackAuditState.End && x.ApplyOrgId != OrgSeedData.CenterId && x.SendBackOrgId == OrgSeedData.CenterId)
                 .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.AuditTime >= dto.StartTime && x.AuditTime <= dto.EndTime)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgId), x => x.ApplyOrgId == dto.OrgId)
-                .OrderByIF(string.IsNullOrEmpty(dto.SortField), x => x.CreationTime, OrderByType.Desc)
+				 .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Order.No.Contains(dto.No!))
+				.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title!))
+				.WhereIF(!string.IsNullOrEmpty(dto.OrgId), x => x.ApplyOrgId == dto.OrgId)
+				.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.Order.AcceptTypeCode == dto.AcceptType) //受理类型
+				.WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel) //来源渠道
+				.WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
+					x => x.Order.HotspotSpliceName != null && x.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
+				.WhereIF(dto.CreationTimeStart.HasValue, x => x.Order.CreationTime >= dto.CreationTimeStart) //受理时间开始
+				.WhereIF(dto.CreationTimeEnd.HasValue, x => x.Order.CreationTime <= dto.CreationTimeEnd) //受理时间结束
+				.WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), x => x.ApplyOrgName == dto.ApplyOrgName!) //申请部门
+				.WhereIF(!string.IsNullOrEmpty(dto.ApplyUserName), x => x.CreatorName == dto.ApplyUserName!) //申请人
+				.WhereIF(dto.State.HasValue, x => x.State == dto.State) //退回审批状态
+				.WhereIF(!string.IsNullOrEmpty(dto.AuditUser), x => x.AuditUser == dto.AuditUser!) //审批人
+				.WhereIF(dto.AuditTimeStart.HasValue && dto.AuditTimeEnd.HasValue,
+					x => x.AuditTime >= dto.AuditTimeStart && x.AuditTime <= dto.AuditTimeEnd) // 审批时间
+				.WhereIF(!string.IsNullOrEmpty(dto.AuditContent), x => x.AuditContent.Contains(dto.AuditContent!)) //审批意见
+				.OrderByIF(string.IsNullOrEmpty(dto.SortField), x => x.CreationTime, OrderByType.Desc)
                 .OrderByIF(dto is { SortField: "order.startTime", SortRule: 0 }, x => x.Order.StartTime, OrderByType.Asc)
                 .OrderByIF(dto is { SortField: "order.startTime", SortRule: 1 }, x => x.Order.StartTime, OrderByType.Desc)
                 .OrderByIF(dto is { SortField: "creationTime", SortRule: 0 }, x => x.CreationTime, OrderByType.Asc)

+ 5 - 3
src/Hotline.Application/Snapshot/SnapshotOrderApplication.cs

@@ -213,10 +213,9 @@ public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDepende
     {
         var query = _orderSnapshotRepository.Queryable()
             .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
-            .LeftJoin<WorkflowStep>((snapshot, order, step) => step.ExternalId == order.Id)
+            .LeftJoin<WorkflowStep>((snapshot, order, step) => step.ExternalId == order.Id && step.Tag == TagDefaults.OrderMark && step.Status != EWorkflowStepStatus.Handled)
             .Where((snapshot, order, step) => snapshot.IndustryName == "安全隐患")
-            //.WhereIF(dto.Status == 0, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark) // 全部
-            .WhereIF(dto.Status == 1, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark && step.Status != EWorkflowStepStatus.Handled &&  _sessionContext.Roles.Contains(step.RoleId)) // 待标记
+            .WhereIF(dto.Status == 1, (snapshot, order, step) => step.Id != null && snapshot.IsSafetyDepartment == null) // 待标记
             .WhereIF(dto.Status == 2, (snapshot, order, step) => snapshot.IsSafetyDepartment != null) // 已标记
             .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order, step) => order.No.Contains(dto.No))
             .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order, step) => order.Title.Contains(dto.Title))
@@ -237,6 +236,9 @@ public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDepende
                 LabelTime = snapshot.SignTime,
                 LabelUserName = snapshot.SignUserName
             });
+#if DEBUG
+        var sql = query.ToSqlString();
+#endif
         return query;
     }
 

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

@@ -1049,6 +1049,41 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public string? IndustryName { get; set; }
 
+        /// <summary>
+        /// 部门-是否整改
+        /// </summary>
+        public bool? IsRectifyDepartment { get; set; }
+
+        /// <summary>
+        /// 部门-是否存在安全隐患
+        /// </summary>
+        public bool? IsDangerDepartment { get; set; }
+
+        /// <summary>
+        /// 标记-部门标记是否安全生产
+        /// </summary>
+        public bool? IsSafetyDepartment { get; set; }
+
+        /// <summary>
+        /// 标记-标记人
+        /// </summary>
+        public string? SignUserId { get; set; }
+
+        /// <summary>
+        /// 标记-标记人
+        /// </summary>
+        public string? SignUserName { get; set; }
+
+        /// <summary>
+        /// 标记-标记时间
+        /// </summary>
+        public DateTime? SignTime { get; set; }
+
+        /// <summary>
+        /// 标记-标记备注
+        /// </summary>
+        public string? SignRemark { get; set; }
+
         #endregion
 
         public bool? IsReTransact { get; set; }

+ 60 - 0
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -927,6 +927,66 @@ namespace Hotline.Share.Dtos.Order
     {
 		public string? OrgName { get; set; }
 		public string? OrgId { get; set; }
+
+
+		public string? No { get; set; }
+
+		public string? Title { get; set; }
+
+
+		/// <summary>
+		/// 来源渠道(√)
+		/// </summary>
+		public string? Channel { get; set; }
+
+		/// <summary>
+		/// 受理类型(√)
+		/// </summary>
+		public string? AcceptType { get; set; }
+
+		/// <summary>
+		/// 热点分类
+		/// </summary>
+		public string? Hotspot { get; set; }
+
+
+		/// <summary>
+		/// 受理时间(工单创建时间)(√)
+		/// </summary>
+		public DateTime? CreationTimeStart { get; set; }
+		public DateTime? CreationTimeEnd { get; set; }
+
+		/// <summary>
+		/// 申请部门
+		/// </summary>
+		public string? ApplyOrgName { get; set; }
+
+		/// <summary>
+		/// 申请人
+		/// </summary>
+		public string? ApplyUserName { get; set; }
+
+		/// <summary>
+		/// 退回审批状态
+		/// </summary>
+		public ESendBackAuditState? State { get; set; }
+
+		/// <summary>
+		/// 审批人
+		/// </summary>
+		public string? AuditUser { get; set; }
+
+		/// <summary>
+		/// 审批时间
+		/// </summary>
+		public DateTime? AuditTimeStart { get; set; }
+
+		public DateTime? AuditTimeEnd { get; set; }
+
+		/// <summary>
+		/// 审批意见
+		/// </summary>
+		public string? AuditContent { get; set; }
 	}
 
 

+ 1 - 0
test/Hotline.Tests/Application/SnapshotApplicationTest.cs

@@ -93,6 +93,7 @@ public class SnapshotApplicationTest : TestBase
             IsPublished = true
         }).ToPageListAsync(0, 10);
         items.NotNullOrEmpty().ShouldBeTrue();
+        var signItems =  await _orderSnapshotApplication.GetSignOrderSnapshotItems(new SignOrderSnapshotItemsInDto()).ToListAsync();
     }
 
     [Fact]