Browse Source

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

tangjiang 1 month ago
parent
commit
2fe6bb7c15

+ 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)

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

@@ -4397,12 +4397,27 @@ public class OrderController : BaseController
             await _orderSnapshotRepository.Queryable()
                 .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, })
+                .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 =>
                 {
                     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;
                 });
         }
 

+ 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)
 			{

+ 13 - 1
src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs

@@ -51,8 +51,9 @@ public class SnapshotController : BaseController
     private readonly ISessionContext _sessionContext;
     private readonly IThirdAccountRepository _thirdAccountRepository;
     private readonly ILogger<SnapshotController> _logger;
+    private readonly IRepository<SystemWebPageSetting> _webPageRepository;
 
-    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService, IIndustryRepository industryRepository, IOrderDomainService orderDomainService, IFileRepository fileRepository, IOrderSnapshotRepository orderSnapshotRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISessionContext sessionContext, IThirdAccountRepository thirdAccountRepository, ILogger<SnapshotController> logger)
+    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService, IIndustryRepository industryRepository, IOrderDomainService orderDomainService, IFileRepository fileRepository, IOrderSnapshotRepository orderSnapshotRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISessionContext sessionContext, IThirdAccountRepository thirdAccountRepository, ILogger<SnapshotController> logger, IRepository<SystemWebPageSetting> webPageRepository)
     {
         _orderRepository = orderRepository;
         _snapshotApplication = snapshotApplication;
@@ -65,6 +66,7 @@ public class SnapshotController : BaseController
         _sessionContext = sessionContext;
         _thirdAccountRepository = thirdAccountRepository;
         _logger = logger;
+        _webPageRepository = webPageRepository;
     }
 
     /// <summary>
@@ -76,6 +78,16 @@ public class SnapshotController : BaseController
     public async Task<HomePageOutDto> GetHomePageAsync()
         => await _snapshotApplication.GetHomePageAsync();
 
+    /// <summary>
+    /// 获取页面设置
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("page/setting")]
+    [AllowAnonymous]
+    public async Task<IList<SystemWebPageSetting>> GetSystemWebPageAsync([FromQuery] SystemWebPageInDto dto)
+        => await _webPageRepository.Queryable().Where(m => m.Name == dto.Name && m.PageType == dto.PageType).ToListAsync(HttpContext.RequestAborted);
+
     /// <summary>
     /// 行业界面基础信息
     /// </summary>

+ 1 - 0
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -632,6 +632,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             CurrentStepType = currentStep.StepType,
             CurrentHandlerType = currentStep.HandlerType,
             CurrentTag = currentStep.Tag ?? string.Empty,
+            CurrentIsCountersignEndStep = currentStep.IsCountersignEndStep,
             TimeTypeOptions = EnumExts.GetDescriptions<ETimeType>().ToList(),
             IsMainHandlerShow = workflow.WorkflowDefinition.IsMainHandlerShow,
             StepId = currentStep.Id,

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

@@ -5702,6 +5702,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         var query = _orderSendBackAuditRepository.Queryable()
             .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.OrgName), x=>x.ApplyOrgName == dto.OrgName)
             .GroupBy(x => new { x.ApplyOrgId, x.ApplyOrgName })
             .Select(x => new OrgSendBackAuditListVo
             {
@@ -5719,7 +5720,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 - 0
src/Hotline.Share/Dtos/FlowEngine/NextStepsDto.cs

@@ -54,6 +54,11 @@ public class NextStepsDto
     /// </summary>
     public string CurrentTag { get; set; }
 
+    /// <summary>
+    /// 当前节点是否是会签结束节点
+    /// </summary>
+    public bool CurrentIsCountersignEndStep { get; set; }
+
     /// <summary>
     /// 时间类型
     /// </summary>

+ 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; }
 	}
 
 

+ 17 - 0
src/Hotline.Share/Dtos/Snapshot/IndustryDto.cs

@@ -1,6 +1,7 @@
 using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Settings;
 using Hotline.Share.Enums.Snapshot;
 using Hotline.Share.Requests;
 using Hotline.Share.Tools;
@@ -206,6 +207,22 @@ public record IndustryListInDto(string? Name, string? ApproveOrgName) : PagedReq
 public record IndustryCaseItemInDto(string? CaseName, string? IndustryName) : PagedRequest;
 
 
+public class SystemWebPageInDto
+{
+    /// <summary>
+    /// 页面类型;
+    /// 1: 正常;
+    /// 2: 关怀;
+    /// </summary>
+    [Required]
+    public EPageType PageType { get; set; }
+
+    /// <summary>
+    /// 页面名称
+    /// </summary>
+    [Required]
+    public string Name { get; set; }
+}
 public class IndustryBaseOutDto
 {
     /// <summary>

+ 23 - 0
src/Hotline.Share/Enums/Settings/EPageType.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Enums.Settings;
+
+public enum EPageType
+{
+    /// <summary>
+    /// 正常
+    /// </summary>
+    [Description("正常")]
+    Normal = 1,
+
+    /// <summary>
+    /// 关怀
+    /// </summary>
+    [Description("关怀")]
+    Care = 2
+}

+ 32 - 0
src/Hotline/Settings/SystemWebPageSetting.cs

@@ -0,0 +1,32 @@
+using Hotline.Share.Enums.Settings;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Settings;
+
+public class SystemWebPageSetting : CreationEntity
+{
+    /// <summary>
+    /// 页面名字
+    /// </summary>
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 页面类型
+    /// </summary>
+    public EPageType PageType { get; set; }
+
+    /// <summary>
+    /// 页面元素名称
+    /// </summary>
+    public string TagName { get; set; }
+
+    /// <summary>
+    /// 页面元素值
+    /// </summary>
+    public string TagValue { get; set; }
+}