Эх сурвалжийг харах

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

tangjiang 8 сар өмнө
parent
commit
1de0f9929d

+ 85 - 5
src/Hotline.Api/Controllers/OrderController.cs

@@ -122,8 +122,9 @@ public class OrderController : BaseController
     private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
     private readonly IOrderSendBackAuditApplication _orderSendBackAuditApplication;
     private readonly Publisher _publisher;
+    private readonly IOrderAnalysisApplication _orderAnalysisApplication;
 
-    public OrderController(
+	public OrderController(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowApplication workflowApplication,
@@ -179,8 +180,9 @@ public class OrderController : BaseController
         IOptionsSnapshot<AppConfiguration> appOptions,
         IRepository<OrderModifyingRecords> orderModifyingRecordsRepository,
         IOrderSendBackAuditApplication orderSendBackAuditApplication,
-        Publisher publisher
-        )
+        Publisher publisher,
+        IOrderAnalysisApplication orderAnalysisApplication
+		)
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -238,7 +240,9 @@ public class OrderController : BaseController
         _appOptions = appOptions;
         _orderSendBackAuditApplication = orderSendBackAuditApplication;
         _publisher = publisher;
-    }
+        _orderAnalysisApplication = orderAnalysisApplication;
+
+	}
     #endregion 
 
     #region 工单发布
@@ -6362,5 +6366,81 @@ public class OrderController : BaseController
         }
     }
 
-    #endregion
+	#endregion
+
+	#region 分析报告
+	/// <summary>
+	/// 新增分析报告
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[HttpPost("analysis")]
+	[LogFilter("新增分析报告")]
+	public async Task OrderAnalysisAdd([FromBody] AddOrderAnalysisDto dto)
+	{
+		await _orderAnalysisApplication.AddAsync(dto, HttpContext.RequestAborted);
+	}
+
+	/// <summary>
+	/// 修改分析报告
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[HttpPut("analysis")]
+	[LogFilter("修改分析报告")]
+	public async Task OrderAnalysisUpdate([FromBody] UpdateOrderAnalysisDto dto)
+	{
+		await _orderAnalysisApplication.UpdateAsync(dto, HttpContext.RequestAborted);
+	}
+
+	/// <summary>
+	/// 删除分析报告
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[HttpDelete("analysis")]
+	[LogFilter("删除分析报告")]
+	public async Task OrderAnalysisDelete([FromBody] DeleteOrderAnalysisDto dto)
+	{
+		await _orderAnalysisApplication.DeleteAsync(dto, HttpContext.RequestAborted);
+	}
+
+	/// <summary>
+	/// 分析报告列表
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[HttpGet("analysis_list")]
+	[LogFilter("分析报告列表")]
+	public async Task<PagedDto<OrderAnalysisDto>> OrderAnalysisListQuery([FromQuery] OrderAnalysisListDto dto)
+	{
+		var (total, items) = await _orderAnalysisApplication.ListQuery(dto, HttpContext.RequestAborted).ToPagedListAsync(dto, HttpContext.RequestAborted);
+		return new PagedDto<OrderAnalysisDto>(total, items);
+	}
+
+	/// <summary>
+	/// 分析报告明细
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[HttpGet("analysis_detail")]
+	[LogFilter("分析报告明细")]
+	public async Task<PagedDto<OrderDto>> OrderAnalysisDetailQuery([FromQuery] OrderAnalysisDetailDto dto)
+	{
+		var(total, items) = await _orderAnalysisApplication.DetailQuery(dto, HttpContext.RequestAborted).ToPagedListAsync(dto, HttpContext.RequestAborted);
+		return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+	}
+
+	/// <summary>
+	/// 生成分析报告
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[HttpGet("analysis_report")]
+	[LogFilter("生成分析报告")]
+	public async Task<object> OrderAnalysisReportQuery([FromQuery] OrderAnalysisDetailDto dto)
+	{
+		 return await _orderAnalysisApplication.ReportQuery(dto, HttpContext.RequestAborted);
+	}
+	#endregion
 }

+ 2 - 2
src/Hotline.Api/config/appsettings.Development.json

@@ -59,7 +59,7 @@
     }
   },
   "ConnectionStrings": {
-    "Hotline": "PORT=5432;DATABASE=hotline;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
+    "Hotline": "PORT=5432;DATABASE=hotline_dev;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
   },
   "Cache": {
     "Host": "110.188.24.182",
@@ -100,7 +100,7 @@
     }
   },
   "DatabaseConfiguration": {
-    "ApplyDbMigrations": false,
+    "ApplyDbMigrations": true,
     "ApplySeed": false
   },
   "MqConfiguration": {

+ 21 - 0
src/Hotline.Application/Orders/IOrderAnalysisApplication.cs

@@ -0,0 +1,21 @@
+using Hotline.Share.Dtos.Order;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Orders;
+
+namespace Hotline.Application.Orders
+{
+	public interface IOrderAnalysisApplication
+	{
+		Task AddAsync(AddOrderAnalysisDto dto, CancellationToken cancellationToken);
+		Task UpdateAsync(UpdateOrderAnalysisDto dto, CancellationToken cancellationToken);
+		Task DeleteAsync(DeleteOrderAnalysisDto dto, CancellationToken cancellationToken);
+		ISugarQueryable<OrderAnalysisDto> ListQuery(OrderAnalysisListDto dto, CancellationToken cancellationToken);
+		ISugarQueryable<Order> DetailQuery(OrderAnalysisDetailDto dto, CancellationToken cancellationToken);
+		Task<object> ReportQuery(OrderAnalysisDetailDto dto, CancellationToken cancellationToken);
+	}
+}

+ 159 - 0
src/Hotline.Application/Orders/OrderAnalysisApplication.cs

@@ -0,0 +1,159 @@
+using Hotline.Orders;
+using Hotline.Settings;
+using Hotline.Share.Dtos.Order;
+using MapsterMapper;
+using NPOI.SS.Formula.Functions;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Share.Enums.Order;
+using XF.Domain.Dependency;
+using XF.Domain.Exceptions;
+using XF.Domain.Repository;
+using XF.Utility.SequentialId;
+using static Hotline.AppDefaults;
+
+namespace Hotline.Application.Orders
+{
+	public class OrderAnalysisApplication : IOrderAnalysisApplication, IScopeDependency
+	{
+		private readonly IRepository<OrderAnalysis> _orderAnalysisRepository;
+		private readonly IMapper _mapper;
+		private readonly IOrderRepository _orderRepository;
+		private readonly IRepository<SystemArea> _systemAreaRepository;
+
+		public OrderAnalysisApplication(
+			IMapper mapper,
+			IOrderRepository orderRepository,
+			IRepository<SystemArea> systemAreaRepository,
+			IRepository<OrderAnalysis> orderAnalysisRepository
+			) 
+		{
+			_mapper = mapper;
+			_orderRepository = orderRepository;
+			_orderAnalysisRepository = orderAnalysisRepository;
+			_systemAreaRepository = systemAreaRepository;
+		}
+
+		/// <summary>
+		/// 新增
+		/// </summary>
+		/// <returns></returns>
+		public async Task AddAsync(AddOrderAnalysisDto dto, CancellationToken cancellationToken) {
+			var analysisAny =  await _orderAnalysisRepository.Queryable().AnyAsync(x => x.AnalysisName == dto.AnalysisName, cancellationToken);
+			if (analysisAny)
+				throw UserFriendlyException.SameMessage("当前报告名称已经存在,请修改报告名称!");
+
+			var analysisId = SequentialStringGenerator.Create();
+			var generatedTime = DateTime.Now;
+			var analysiss = new List<OrderAnalysis>();
+			foreach (var item in dto.AnalysisList)
+			{
+				var analysis = _mapper.Map<OrderAnalysis>(item);
+				analysis.AnalysisId = analysisId;
+				analysis.AnalysisName =  dto.AnalysisName;
+				analysis.Remark = dto.Remark;
+				analysis.GeneratedTime = generatedTime;
+				analysiss.Add(analysis);
+			}
+			await _orderAnalysisRepository.AddRangeAsync(analysiss, cancellationToken);
+		}
+		
+		/// <summary>
+		/// 修改
+		/// </summary>
+		/// <returns></returns>
+		public async Task UpdateAsync(UpdateOrderAnalysisDto dto, CancellationToken cancellationToken) 
+		{
+			var analysisIdAny = await _orderAnalysisRepository.Queryable().AnyAsync(x =>  x.AnalysisId == dto.AnalysisId, cancellationToken);
+			if (!analysisIdAny)
+				throw UserFriendlyException.SameMessage("当前报告不存在,请查询报告是否已变更!");
+			var analysisNameAny = await _orderAnalysisRepository.Queryable().AnyAsync(x => x.AnalysisName == dto.AnalysisName && x.AnalysisId != dto.AnalysisId, cancellationToken);
+			if (analysisNameAny)
+				throw UserFriendlyException.SameMessage("当前报告名称已经存在,请修改报告名称!");
+			await _orderAnalysisRepository.Updateable().SetColumns(x => new OrderAnalysis { AnalysisName = dto.AnalysisName, Remark = dto.Remark })
+				.Where(x => x.AnalysisId == dto.AnalysisId).ExecuteCommandAsync(cancellationToken);
+		}
+
+		/// <summary>
+		/// 删除
+		/// </summary>
+		/// <returns></returns>
+		public async Task DeleteAsync(DeleteOrderAnalysisDto dto, CancellationToken cancellationToken) {
+
+			await _orderAnalysisRepository.Removeable().In(x => x.AnalysisId, dto.AnalysisIds).ExecuteCommandAsync(cancellationToken);
+		}
+
+
+		/// <summary>
+		/// 查询列表
+		/// </summary>
+		/// <returns></returns>
+		public ISugarQueryable<OrderAnalysisDto> ListQuery(OrderAnalysisListDto dto, CancellationToken cancellationToken) {
+			if (dto.GeneratedEndTime.HasValue)
+				dto.GeneratedEndTime = dto.GeneratedEndTime.Value.AddDays(1).AddSeconds(-1);
+			var query = _orderAnalysisRepository.Queryable()
+				.WhereIF(!string.IsNullOrEmpty(dto.AnalysisName), x => x.AnalysisName == dto.AnalysisName)
+				.WhereIF(dto.GeneratedStartTime.HasValue && dto.GeneratedEndTime.HasValue, x => x.GeneratedTime >= dto.GeneratedStartTime && x.GeneratedTime <= dto.GeneratedEndTime)
+				.GroupBy(x => new { x.AnalysisId, x.AnalysisName, x.Remark, x.GeneratedTime })
+				.Select(x => new OrderAnalysisDto { AnalysisId = x.AnalysisId, AnalysisName = x.AnalysisName, Remark = x.Remark, GeneratedTime = x.GeneratedTime })
+				.OrderByDescending(x=> x.GeneratedTime);
+			return query;
+		}
+
+		/// <summary>
+		///  查看预警事件
+		/// </summary>
+		/// <returns></returns>
+		public ISugarQueryable<Order> DetailQuery(OrderAnalysisDetailDto dto, CancellationToken cancellationToken) {
+			var query = _orderAnalysisRepository.Queryable()
+				.LeftJoin<Order>((a, o) => a.AcceptTypeCode == o.AcceptTypeCode && a.HotspotId == o.HotspotId && o.AreaCode.StartsWith(a.AreaCode))
+				.Where((a, o) => a.AnalysisId == dto.AnalysisId)
+				.Select((a, o) => o);
+			return query;
+		}
+
+		/// <summary>
+		/// 生成报告
+		/// </summary>
+		/// <returns></returns>
+		public async Task<object> ReportQuery(OrderAnalysisDetailDto dto, CancellationToken cancellationToken) {
+			var orders = await _orderAnalysisRepository.Queryable()
+				.LeftJoin<Order>((a, o) => a.AcceptTypeCode == o.AcceptTypeCode && a.HotspotId == o.HotspotId && o.AreaCode.StartsWith(a.AreaCode))
+				.Where((a, o) => a.AnalysisId == dto.AnalysisId)
+				.Select((a, o) => o).ToListAsync(cancellationToken) ;
+			var introductionData = orders.GroupBy(x=>x.SourceChannel)
+				.Select(x=>new { SourceChannel = x.Key, Num  = x.Count(), Rate = Math.Round((x.Count() /(double)orders.Count) * 100, 2) })
+				.OrderByDescending(x=>x.Num);
+			var introduction = new { total = orders.Count, data = introductionData };
+			var orderAreas = orders.GroupBy(x=>x.AreaCode.Substring(0,6))
+				.Select(x=> new { AreaCode =x.Key, Num = x.Count(), Rate = Math.Round((x.Count() / (double)orders.Count) * 100, 2) })
+				.OrderByDescending(x => x.Num);
+			var areaList = await _systemAreaRepository.Queryable().Where(x=>x.Id.Length == 6).ToListAsync(cancellationToken);
+			var areaData = (from t1 in orderAreas
+							join t2 in areaList on t1.AreaCode equals t2.Id into t1_t2
+				from item in t1_t2.DefaultIfEmpty()
+				select new
+				{
+					AreaCode = t1.AreaCode,
+					Num = t1.Num,
+					Rate = t1.Rate,
+					AreaName = t1_t2.Select(x => x.AreaName).FirstOrDefault(),
+				}).OrderByDescending(x=>x.Num).ToList();
+			var areaNames = areaData.Select(x=>x.AreaName).ToList();
+
+			var area = new { AreaNames = areaNames, data = areaData };
+
+			var handle = new { HandleFiled = orders.Count(x => x.Status >= EOrderStatus.Filed), Handle = orders.Count(x => x.Status < Share.Enums.Order.EOrderStatus.Filed) };
+
+			var first = _mapper.Map<List<OrderDto>>(orders.OrderByDescending(x=>x.CreationTime).Take(2).ToList());
+			return new { Introduction = introduction, Area = area, Handle = handle, First = first };
+		}
+
+
+	}
+}

+ 3 - 3
src/Hotline.Application/Orders/OrderSecondaryHandlingApplication.cs

@@ -228,9 +228,9 @@ namespace Hotline.Application.Orders
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.OrderVisit.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
                 .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.OrderVisit.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
                 .WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue, x => x.OrderVisit.Order!.ActualHandleTime >= dto.CurrentHandleTime && x.OrderVisit.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
-                .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue, x => x.OrderVisit.Order!.FiledTime == dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
-                .WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue, x => x.OrderVisit.Order!.CreationTime == dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
-                .WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue, x => x.OrderVisit.VisitTime == dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
+                .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue, x => x.OrderVisit.Order!.FiledTime >= dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
+                .WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue, x => x.OrderVisit.Order!.CreationTime >= dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
+                .WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue, x => x.OrderVisit.VisitTime >= dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
                 .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude), x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))

+ 2 - 2
src/Hotline.Repository.SqlSugar/Extensions/SqlSugarStartupExtensions.cs

@@ -210,8 +210,8 @@ namespace Hotline.Repository.SqlSugar.Extensions
                 //获取原生SQL推荐 5.1.4.63  性能OK
                 //Log.Information(UtilMethods.GetNativeSql(sql, pars));
 
-                //Log.Information("Sql: {0}", sql);
-                //Log.Information("SqlParameters: {0}", string.Join(',', pars.Select(d => d.Value)));
+                Log.Information("Sql: {0}", sql);
+                Log.Information("SqlParameters: {0}", string.Join(',', pars.Select(d => d.Value)));
             };
             db.Aop.OnError = (exp) =>//SQL报错
             {

+ 178 - 0
src/Hotline.Share/Dtos/Order/OrderAnalysisDto.cs

@@ -0,0 +1,178 @@
+using Hotline.Share.Requests;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.Order
+{
+	public class AddOrderAnalysisDto
+	{
+		/// <summary>
+		/// 报告名称
+		/// </summary>
+		public string AnalysisName { get; set; }
+
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string? Remark { get; set; }
+
+		/// <summary>
+		/// 开始时间
+		/// </summary>
+		public DateTime? StartTime { get; set; }
+
+		/// <summary>
+		/// 结束时间
+		/// </summary>
+		public DateTime? EndTime { get; set; }
+
+		/// <summary>
+		///  多选对象
+		/// </summary>
+		public List<AddOrderAnalysisListDto> AnalysisList { get; set; }
+	}
+
+	public class AddOrderAnalysisListDto {
+		/// <summary>
+		/// 受理类型
+		/// </summary>
+		public string AcceptType { get; set; }
+
+		/// <summary>
+		/// 受理类型
+		/// </summary>
+		public string AcceptTypeCode { get; set; }
+
+		/// <summary>
+		/// 热点
+		/// </summary>
+		public string HotspotId { get; set; }
+
+		/// <summary>
+		/// 热点
+		/// </summary>
+		public string HotspotName { get; set; }
+
+		/// <summary>
+		/// 区域
+		/// </summary>
+		public string AreaCode { get; set; }
+
+		/// <summary>
+		/// 区域
+		/// </summary>
+		public string AreaName { get; set; }
+	}
+
+	public class DeleteOrderAnalysisDto 
+	{
+		/// <summary>
+		/// 报告id
+		/// </summary>
+		public List<string> AnalysisIds { get; set; }
+	}
+
+	public class UpdateOrderAnalysisDto
+	{
+		/// <summary>
+		/// 报告id
+		/// </summary>
+		public string AnalysisId { get; set; }
+
+		/// <summary>
+		/// 报告名称
+		/// </summary>
+		public string AnalysisName { get; set; }
+
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string? Remark { get; set; }
+	}
+	public class OrderAnalysisBaseDto
+	{
+		public DateTime? LastModificationTime { get; set; }
+
+		public bool IsDeleted { get; set; }
+
+		/// <summary>
+		/// 删除时间
+		/// </summary>
+		public DateTime? DeletionTime { get; set; }
+
+
+		/// <summary>
+		/// 创建时间
+		/// </summary>
+		public DateTime CreationTime { get; set; }
+
+		public string Id { get; set; }
+
+		/// <summary>
+		/// 组织Id
+		/// </summary>
+		public string? CreatorOrgId { get; set; }
+
+
+		public string? CreatorOrgName { get; set; }
+
+		/// <summary>
+		/// 创建人
+		/// </summary>
+		public string? CreatorId { get; set; }
+
+		public string? CreatorName { get; set; }
+	}
+
+	public class OrderAnalysisDto  {
+
+
+		/// <summary>
+		/// 报告id
+		/// </summary>
+		public string AnalysisId { get; set; }
+
+		/// <summary>
+		/// 报告名称
+		/// </summary>
+		public string AnalysisName { get; set; }
+
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string? Remark { get; set; }
+
+		/// <summary>
+		/// 生成时间
+		/// </summary>
+		public DateTime? GeneratedTime { get; set; }
+
+	}
+
+	public record OrderAnalysisListDto : PagedKeywordRequest {
+
+		/// <summary>
+		/// 报告名称
+		/// </summary>
+		public string AnalysisName { get; set; }
+
+		/// <summary>
+		/// 生成时间
+		/// </summary>
+		public DateTime? GeneratedStartTime { get; set; }
+
+		/// <summary>
+		/// 结束时间
+		/// </summary>
+		public DateTime? GeneratedEndTime { get; set; }
+	}
+
+	public record OrderAnalysisDetailDto : PagedKeywordRequest
+	{
+		public string AnalysisId { get; set; }
+	}
+
+}

+ 88 - 0
src/Hotline/Orders/OrderAnalysis.cs

@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace Hotline.Orders
+{
+	[Description("工单分析报告")]
+	public class OrderAnalysis : FullStateEntity
+	{
+		/// <summary>
+		/// 受理类型
+		/// </summary>
+		[SugarColumn(ColumnDescription = "受理类型")]
+		public string AcceptType { get; set; }
+
+		/// <summary>
+		/// 受理类型
+		/// </summary>
+		[SugarColumn(ColumnDescription = "受理类型")]
+		public string AcceptTypeCode { get; set; }
+
+		/// <summary>
+		/// 热点
+		/// </summary>
+		[SugarColumn(ColumnDescription = "热点")]
+		public string HotspotId { get; set; }
+
+		/// <summary>
+		/// 热点
+		/// </summary>
+		[SugarColumn(ColumnDescription = "热点")]
+		public string HotspotName { get; set; }
+
+		/// <summary>
+		/// 区域
+		/// </summary>
+		[SugarColumn(ColumnDescription = "区域")]
+		public string AreaCode { get; set; }
+
+		/// <summary>
+		/// 区域
+		/// </summary>
+		[SugarColumn(ColumnDescription = "区域")]
+		public string AreaName { get; set; }
+
+		/// <summary>
+		/// 报告id
+		/// </summary>
+		[SugarColumn(ColumnDescription = "报告id")]
+		public string AnalysisId { get; set; }
+
+		/// <summary>
+		/// 报告名称
+		/// </summary>
+		[SugarColumn(ColumnDescription = "报告名称")]
+		public string AnalysisName { get; set; }
+
+		/// <summary>
+		/// 备注
+		/// </summary>
+		[SugarColumn(ColumnDescription = "备注")]
+		public string? Remark { get; set; }
+
+		/// <summary>
+		/// 生成时间
+		/// </summary>
+		[SugarColumn(ColumnDescription = "生成时间")]
+		public DateTime? GeneratedTime { get; set; }
+
+		/// <summary>
+		/// 开始时间
+		/// </summary>
+		[SugarColumn(ColumnDescription = "开始时间")]
+		public DateTime? StartTime { get; set; }
+
+		/// <summary>
+		/// 结束时间
+		/// </summary>
+		[SugarColumn(ColumnDescription = "结束时间")]
+		public DateTime? EndTime { get; set; }
+
+	}
+}