TANG JIANG 1 жил өмнө
parent
commit
62ad3e32af

+ 8 - 1
Sharing.sln

@@ -37,7 +37,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sharing.Enterprise", "src\S
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sharing.DataExchange", "src\Sharing.DataExchange\Sharing.DataExchange.csproj", "{966D8C12-E439-4627-806F-6CD53706AEC9}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sharing.ConvergenceMedia", "src\Sharing.ConvergenceMedia\Sharing.ConvergenceMedia.csproj", "{43177B2E-2027-4B38-B0E1-3FA00A7D5C8A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sharing.ConvergenceMedia", "src\Sharing.ConvergenceMedia\Sharing.ConvergenceMedia.csproj", "{43177B2E-2027-4B38-B0E1-3FA00A7D5C8A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sharing.WebPortal", "src\Sharing.WebPortal\Sharing.WebPortal.csproj", "{B9ADDFB2-67B9-493F-B458-993C52B54885}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -89,6 +91,10 @@ Global
 		{43177B2E-2027-4B38-B0E1-3FA00A7D5C8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{43177B2E-2027-4B38-B0E1-3FA00A7D5C8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{43177B2E-2027-4B38-B0E1-3FA00A7D5C8A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B9ADDFB2-67B9-493F-B458-993C52B54885}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B9ADDFB2-67B9-493F-B458-993C52B54885}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B9ADDFB2-67B9-493F-B458-993C52B54885}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B9ADDFB2-67B9-493F-B458-993C52B54885}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -110,6 +116,7 @@ Global
 		{139B193B-B8B2-43B5-8332-63A984F6938B} = {542857FB-A00E-47B5-9F14-63E9532C0CAA}
 		{966D8C12-E439-4627-806F-6CD53706AEC9} = {542857FB-A00E-47B5-9F14-63E9532C0CAA}
 		{43177B2E-2027-4B38-B0E1-3FA00A7D5C8A} = {542857FB-A00E-47B5-9F14-63E9532C0CAA}
+		{B9ADDFB2-67B9-493F-B458-993C52B54885} = {542857FB-A00E-47B5-9F14-63E9532C0CAA}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {38EE029C-2A3A-441C-83E6-A41B16852FC3}

+ 1 - 0
src/Sharing.Api/Controllers/HotlineMessageReceiveController.cs

@@ -634,6 +634,7 @@ namespace Sharing.Api.Controllers
                 data.ActualHandleOrgName = dto.WorkflowTrace.HandlerOrgName;
                 data.ActualHandleOrgCode = dto.WorkflowTrace.HandlerOrgAreaCode;
                 data.ActualOpinion = dto.WorkflowTrace.Opinion;
+                data.ActualHandleTime = dto.WorkflowTrace.HandleTime;
                 await _dataOrderRepository.UpdateAsync(data);
             }
 

+ 1 - 0
src/Sharing.Api/Sharing.Api.csproj

@@ -22,6 +22,7 @@
     <ProjectReference Include="..\Sharing.DataExchange\Sharing.DataExchange.csproj" />
     <ProjectReference Include="..\Sharing.Enterprise\Sharing.Enterprise.csproj" />
     <ProjectReference Include="..\Sharing.Province\Sharing.Province.csproj" />
+    <ProjectReference Include="..\Sharing.WebPortal\Sharing.WebPortal.csproj" />
   </ItemGroup>
 
 </Project>

+ 3 - 0
src/Sharing.Api/StartupExtensions.cs

@@ -16,6 +16,7 @@ using XF.Utility.MQ;
 using Sharing.ConvergenceMedia;
 using Hotline.Api.Sdk;
 using Sharing.HotlineSetting;
+using Sharing.WebPortal;
 
 namespace Sharing.Api;
 
@@ -41,6 +42,7 @@ internal static class StartupExtensions
             .AddSharingEnterprise()
             .AddSharingDataExchange()
             .AddSharingConvergenceMedia()
+            .AddSharingWebPortal()
             ;
 
         //Authentication
@@ -84,6 +86,7 @@ internal static class StartupExtensions
             cfg.RegisterEnterpriseServices();
             cfg.RegisterDataExchangeServices();
             cfg.RegisterConvergenceMediaServices();
+            cfg.RegisterWebPortalServices();
         });
 
         //sqlsugar

+ 40 - 0
src/Sharing.Application/Mappers/MapperConfigs.cs

@@ -8,6 +8,7 @@ using Sharing.Province.Extend;
 using Sharing.Province.HuiJu.Send;
 using Sharing.Province.XieTong.Receive;
 using Sharing.Province.XieTong.Send;
+using Sharing.Share.Dtos.WebPortal;
 
 namespace Sharing.Application.Mappers
 {
@@ -612,6 +613,45 @@ namespace Sharing.Application.Mappers
                .Map(d => d.WorkflowId, x => x.Order.WorkflowId)
               ;
             #endregion
+
+
+            #region 门户网站数据
+            //办件摘编列表
+            config.ForType<DataOrder, OrderListDto>()
+            .Map(d => d.FlowID, x => x.OrderId)
+               .Map(d => d.FlowCode, x => x.OrderNo)
+               .Map(d => d.FlowPwd, x => x.Password)
+               .Map(d => d.FlowTitle, x => string.IsNullOrEmpty(x.ArrangeTitle) ? x.Title : x.ArrangeTitle)
+               .Map(d => d.FlowFromName, x => x.CaseSource)
+               .Map(d => d.FlowPurTypeName, x => x.CaseType)
+               .Map(d => d.ConTypeName, x => x.HotspotName)
+               .Map(d => d.FlowAddDate, x => x.CaseDate)
+               .Map(d => d.PubDate, x => x.PublishDate)
+               .Map(d => d.RSFlagName, x => x.HandleState)
+          ;
+
+            //办件摘编详情
+            config.ForType<DataOrder, OrderDetail>()
+            .Map(d => d.FlowID, x => x.OrderId)
+            .Map(d => d.FlowCode, x => x.OrderNo)
+            .Map(d => d.Pwd, x => x.Password)
+            .Map(d => d.FlowTitle, x => string.IsNullOrEmpty(x.ArrangeTitle) ? x.Title : x.ArrangeTitle)
+            .Map(d => d.FlowFromName, x => x.CaseSource)
+            .Map(d => d.FlowPurTypeName, x => x.CaseType)
+            .Map(d => d.FlowConTypeName, x => x.HotspotName)
+            .Map(d => d.FlowAddDate, x => x.CaseDate)
+            .Map(d => d.FlowEndDate, x => x.ActualHandleTime)
+            .Map(d => d.FlowBMID, x => x.ActualHandleOrgCode)
+            .Map(d => d.FlowBMName, x => x.ActualHandleOrgName)
+            .Map(d => d.FlowLKName, x => x.FromName)
+            .Map(d => d.FlowRSFlagName, x => x.HandleState)
+            .Map(d => d.FlowPubFlagName, x => x.IsPublish == Share.Enums.EPublishState.Open ? "公开" : x.IsPublish == Share.Enums.EPublishState.NotPublic ? "不公开" : "未发布")
+            .Map(d => d.FlowContent, x => string.IsNullOrEmpty(x.ArrangeContent) ? x.Content : x.ArrangeContent)
+            .Map(d => d.FlowResult, x => string.IsNullOrEmpty(x.ArrangeOpinion) ? x.ActualOpinion : x.ArrangeOpinion)
+       ; 
+            #endregion
+
+
         }
 
     }

+ 10 - 0
src/Sharing.Share/Dtos/Requests/PagedRequest.cs

@@ -0,0 +1,10 @@
+namespace Sharing.Share.Dtos.Requests
+{
+    public record PagedRequest
+    {
+        public int PageIndex { get; set; } = 1;
+        public int PageSize { get; set; } = 10;
+
+        public int Skip() => (PageIndex - 1) * PageSize;
+    }
+}

+ 315 - 0
src/Sharing.Share/Dtos/WebPortal/QueryOrderDto.cs

@@ -0,0 +1,315 @@
+using Sharing.Share.Dtos.Requests;
+
+namespace Sharing.Share.Dtos.WebPortal
+{
+    /// <summary>
+    /// 办件摘编列表查询参数
+    /// </summary>
+    public record QueryOrderListDto : PagedRequest
+    {
+        /// <summary>
+        /// 页码
+        /// </summary>
+        public int PageNum { get; set; } = 1;
+
+        /// <summary>
+        /// 每页条数
+        /// </summary>
+        public int PageSize { get; set; } = 10;
+
+        /// <summary>
+        /// 信件编号
+        /// </summary>
+        public string? FlowCode { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string? FlowName { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? FlowSType { get; set; }
+
+        /// <summary>
+        /// 热点类型
+        /// </summary>
+        public string? FlowRType { get; set; }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public string? FlowSDate { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public string? FlowEDate { get; set; }
+
+        /// <summary>
+        /// 来信人
+        /// </summary>
+        public string? FlowFrom { get; set; }
+    }
+
+    /// <summary>
+    /// 办件摘编列表数据
+    /// </summary>
+    public class OrderListDto
+    {
+        /// <summary>
+        /// 信件ID
+        /// </summary>
+        public string FlowID { get; set; }
+
+        /// <summary>
+        /// 信件编号
+        /// </summary>
+        public string FlowCode { get; set; }
+
+        /// <summary>
+        /// 查询密码
+        /// </summary>
+        public string FlowPwd { get; set; }
+
+        /// <summary>
+        /// 信件标题
+        /// </summary>
+        public string FlowTitle { get; set; }
+
+        /// <summary>
+        /// 来源
+        /// </summary>
+        public string FlowFromName { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string FlowPurTypeName { get; set; }
+
+        /// <summary>
+        /// 热点类型
+        /// </summary>
+        public string ConTypeName { get; set; }
+
+        /// <summary>
+        /// 来信时间
+        /// </summary>
+        public DateTime? FlowAddDate { get; set; }
+
+        /// <summary>
+        /// 发布时间
+        /// </summary>
+        public DateTime? PubDate { get; set; }
+
+        /// <summary>
+        /// 办理状态
+        /// </summary>
+        public string RSFlagName { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Source { get; set; } = 1;
+
+    }
+
+    /// <summary>
+    /// 办件摘编列表数据
+    /// </summary>
+    public class OrderListReturnDto
+    {
+        /// <summary>
+        /// 页码
+        /// </summary>
+        public int PageNum { get; set; }
+
+        /// <summary>
+        /// 总页数
+        /// </summary>
+        public int PageCount { get; set; }
+
+        /// <summary>
+        /// 数据对象
+        /// </summary>
+        public IReadOnlyList<OrderListDto> Data { get; set; }
+    }
+
+    /// <summary>
+    /// 信件明细
+    /// </summary>
+    public class OrderDetail
+    {
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public string FlowID { get; set; }
+
+        /// <summary>
+        /// 部门id
+        /// </summary>
+        public string FlowBMID { get; set; }
+
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string FlowBMName { get; set; }
+
+        /// <summary>
+        /// 信件编号
+        /// </summary>
+        public string FlowCode { get; set; }
+
+        /// <summary>
+        /// 查询密码
+        /// </summary>
+        public string Pwd { get; set; }
+
+        /// <summary>
+        /// 信件标题
+        /// </summary>
+        public string FlowTitle { get; set; }
+
+        /// <summary>
+        /// 来源
+        /// </summary>
+        public string FlowFromName { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string FlowPurTypeName { get; set; }
+
+        /// <summary>
+        /// 热点类型
+        /// </summary>
+        public string FlowConTypeName { get; set; }
+
+        /// <summary>
+        /// 来信时间
+        /// </summary>
+        public DateTime? FlowAddDate { get; set; }
+
+        /// <summary>
+        /// 办结时间
+        /// </summary>
+        public DateTime? FlowEndDate { get; set; }
+
+        /// <summary>
+        /// 来信人
+        /// </summary>
+        public string FlowLKName { get; set; }
+
+        /// <summary>
+        /// 办理状态
+        /// </summary>
+        public string FlowRSFlagName { get; set; }
+
+        /// <summary>
+        /// 是否公开
+        /// </summary>
+        public string FlowPubFlagName { get; set; }
+
+        /// <summary>
+        /// 受理内容
+        /// </summary>
+        public string FlowContent { get; set; }
+
+        /// <summary>
+        /// 办理意见
+        /// </summary>
+        public string FlowResult { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PubFlag { get; set; }
+    }
+
+    /// <summary>
+    /// 受理信息返回
+    /// </summary>
+    public class OrderAcceptanceReturnDto
+    {
+        public string State { get; set; }
+
+        public string Code { get; set; }
+
+        public string PWD { get; set; }
+    }
+
+    /// <summary>
+    /// 受理类型统计
+    /// </summary>
+    public class OrderFormCount
+    {
+        /// <summary>
+        /// 名称
+        /// </summary>
+        public string name { get; set; }
+
+        /// <summary>
+        /// 数量
+        /// </summary>
+        public int value { get; set; }
+    }
+
+    /// <summary>
+    /// 热点统计
+    /// </summary>
+    public class OrderHotCount
+    {
+        /// <summary>
+        /// 名称
+        /// </summary>
+        public string typeName { get; set; }
+
+        /// <summary>
+        /// 数量
+        /// </summary>
+        public int num { get; set; }
+    }
+
+    /// <summary>
+    /// 返回数据
+    /// </summary>
+    public class GetChartDataDto
+    {
+        /// <summary>
+        /// 受理类型统计
+        /// </summary>
+        public IReadOnlyList<OrderFormCount> formCount { get; set; }
+
+        /// <summary>
+        /// 热点统计
+        /// </summary>
+        public IReadOnlyList<OrderHotCount> hotCount { get; set; }
+    }
+
+    /// <summary>
+    /// 办件统计
+    /// </summary>
+    public class GetStatistDto
+    {
+        /// <summary>
+        /// 累计接件
+        /// </summary>
+        public int AllCount { get; set; }
+
+        /// <summary>
+        /// 累计已办
+        /// </summary>
+        public int AllTrandCount { get; set; }
+
+        /// <summary>
+        /// 今日接件
+        /// </summary>
+        public int DayCount { get; set; }
+
+        /// <summary>
+        /// 今日已办
+        /// </summary>
+        public int DayTrandCount { get; set; }
+    }
+}

+ 4 - 0
src/Sharing.Share/Sharing.Share.csproj

@@ -7,4 +7,8 @@
     <Version>1.0.0</Version>
   </PropertyGroup>
 
+  <ItemGroup>
+    <Folder Include="Dtos\WebPortal\Order\" />
+  </ItemGroup>
+
 </Project>

+ 36 - 0
src/Sharing.WebPortal/Controllers/NoticeController.cs

@@ -0,0 +1,36 @@
+using Hotline.Api.Sdk;
+using MapsterMapper;
+using Sharing.Orders;
+using Sharing.WebCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Sharing.WebPortal.Controllers
+{
+    /// <summary>
+    /// 通知公告
+    /// </summary>
+    public class NoticeController : BaseController
+    {
+        private readonly IMapper _mapper;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly IHotlineClient _hotlineClient;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="hotlineClient"></param>
+        public NoticeController(IMapper mapper, IChannelConfigurationManager channelConfigurationManager, IHotlineClient hotlineClient)
+        {
+            _mapper = mapper;
+            _channelConfigurationManager = channelConfigurationManager;
+            _hotlineClient = hotlineClient;
+        }
+    }
+}

+ 211 - 0
src/Sharing.WebPortal/Controllers/OrderController.cs

@@ -0,0 +1,211 @@
+using Hotline.Api.Sdk;
+using Hotline.Share.Dtos.Order;
+using MapsterMapper;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Sharing.Orders;
+using Sharing.Share.Dtos.WebPortal;
+using Sharing.WebCore;
+using Sharing.WebPortal.Dtos;
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace Sharing.WebPortal.Controllers
+{
+    public class OrderController : BaseController
+    {
+        private readonly IMapper _mapper;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly IDataOrderRepository _dataOrderRepository;
+        private readonly IRepository<DataOrderWorkFlow> _dataOrderWorkFlowRepository;
+        private readonly IHotlineClient _hotlineClient;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="dataOrderRepository"></param>
+        /// <param name="dataOrderWorkFlowRepository"></param>
+        /// <param name="hotlineClient"></param>
+        public OrderController(IMapper mapper,
+            IChannelConfigurationManager channelConfigurationManager,
+            IDataOrderRepository dataOrderRepository,
+            IRepository<DataOrderWorkFlow> dataOrderWorkFlowRepository, IHotlineClient hotlineClient)
+        {
+            _mapper = mapper;
+            _channelConfigurationManager = channelConfigurationManager;
+            _dataOrderRepository = dataOrderRepository;
+            _dataOrderWorkFlowRepository = dataOrderWorkFlowRepository;
+            _hotlineClient = hotlineClient;
+        }
+
+        /// <summary>
+        /// 办件摘编列表数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("GetOrderList")]
+        [AllowAnonymous]
+        public async Task<DeReponse<OrderListReturnDto>> GetOrderList([FromBody] QueryOrderListDto dto)
+        {
+            RefAsync<int> total = 0;
+            var items = await _dataOrderRepository.Queryable()
+                .Where(p => p.IsPublish == Share.Enums.EPublishState.Open)
+                .Where(p => p.HandleState == "办理完成")
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowCode), d => d.OrderNo == dto.FlowCode)
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowName), d => d.Title.Contains(dto.FlowName))
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowSType), d => d.CaseTypeCode == dto.FlowSType)
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowRType), d => d.HotspotId == dto.FlowRType)
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowSDate), d => d.CaseDate >= DateTime.Parse(DateTime.Parse(dto.FlowSDate).ToString("yyyy-MM-dd 00:00:00")))//dto.FlowSDate
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowEDate), d => d.CaseDate <= DateTime.Parse(DateTime.Parse(dto.FlowEDate).ToString("yyyy-MM-dd 00:00:00")))// dto.FlowEDate
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowFrom), d => d.FromName.Contains(dto.FlowFrom))
+                .OrderByDescending(p => p.PublishDate)
+                .ToPageListAsync(dto.PageNum, dto.PageSize, total);
+
+            //计算总页数
+            int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
+            OrderListReturnDto returnDto = new()
+            {
+                PageNum = dto.PageNum,
+                PageCount = nPageCount,
+                Data = _mapper.Map<IReadOnlyList<OrderListDto>>(items)
+            };
+
+            return DeReponse<OrderListReturnDto>.Success(returnDto, "成功");
+        }
+
+        /// <summary>
+        /// 办件摘编详情
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getorderdetailbyid")]
+        public async Task<DeReponse<OrderDetail>> GetOrderDetailById(string id)
+        {
+            var data = await _dataOrderRepository.GetAsync(p => p.OrderId == id);
+
+            var orderDetail = _mapper.Map<OrderDetail>(data);
+            return DeReponse<OrderDetail>.Success(orderDetail);
+        }
+
+        /// <summary>
+        /// 根据编号和密码查询信件ID
+        /// </summary>
+        /// <param name="OrderNo"></param>
+        /// <param name="Pwd"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getorderid")]
+        public async Task<DeReponse<string>> GetOrderId(string OrderNo, string Pwd)
+        {
+            var data = await _dataOrderRepository.GetAsync(p => p.OrderNo == OrderNo && p.Password == Pwd);
+
+            return DeReponse<string>.Success(data?.OrderId);
+        }
+
+        /// <summary>
+        /// 写信接口
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("orderacceptance")]
+        public async Task<DeReponse<OrderAcceptanceReturnDto>> OrderAcceptance([FromBody] AddOrderDto dto)
+        {
+            var result = await _hotlineClient.AddOrderAsync(dto, default);
+
+            OrderAcceptanceReturnDto returnDto = new();
+            if (result.IsSuccess)
+            {
+                returnDto.PWD = result.Result.Password;
+                returnDto.Code = result.Result.No;
+                returnDto.State = "1";
+            }
+            else
+                returnDto.State = "0";
+
+            return DeReponse<OrderAcceptanceReturnDto>.Success(returnDto);
+        }
+
+        /// <summary>
+        /// 受理类型和热点统计
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getchartdata")]
+        public async Task<DeReponse<GetChartDataDto>> GetChartData()
+        {
+            var startDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
+            var endDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
+
+            //数据查询
+            var listType = _dataOrderRepository.Queryable()
+                .Where(p => p.CaseDate >= startDate)
+                .Where(p => p.CaseDate <= endDate)
+                .Select(it => new
+                {
+                    it.CaseType,
+                    it.CaseTypeCode
+                })
+                .MergeTable()//将查询出来的结果合并成一个新表
+                 .GroupBy(it => new { it.CaseType, it.CaseTypeCode })//对新表进行分组
+                 .Select(it => new
+                 {
+                     name = it.CaseType,
+                     value = SqlFunc.AggregateCount(it.CaseTypeCode)
+                 })
+                 .ToListAsync();
+
+            //数据查询-查询总数前5的数据
+            var listHot = _dataOrderRepository.Queryable()
+                .Where(p => p.CaseDate >= startDate)
+                .Where(p => p.CaseDate <= endDate)
+                .Select(it => new
+                {
+                    it.HotspotId,
+                    it.HotspotName
+                })
+                .MergeTable()//将查询出来的结果合并成一个新表
+                 .GroupBy(it => new { it.HotspotId, it.HotspotName })//对新表进行分组
+                 .Select(it => new
+                 {
+                     typeName = it.HotspotName,
+                     num = SqlFunc.AggregateCount(it.HotspotId)
+                 })
+                 .OrderByDescending(it => it.num)
+                 .Take(5)
+                 .ToListAsync();
+
+            GetChartDataDto dataDto = new()
+            {
+                formCount = _mapper.Map<IReadOnlyList<OrderFormCount>>(listType),
+                hotCount = _mapper.Map<IReadOnlyList<OrderHotCount>>(listHot)
+            };
+
+            return DeReponse<GetChartDataDto>.Success(dataDto);
+        }
+
+        /// <summary>
+        /// 获取统计数据
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getstatist")]
+        public async Task<DeReponse<GetStatistDto>> GetStatist()
+        {
+            var startDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
+            var endDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
+            GetStatistDto getStatistDto = new()
+            {
+                AllCount = _dataOrderRepository.Queryable().GroupBy(p => p.OrderId).Count(),
+                AllTrandCount = _dataOrderRepository.Queryable().GroupBy(p => p.OrderId).Where(p => p.HandleState == "办理完成").Count(),
+                DayCount = _dataOrderRepository.Queryable().GroupBy(p => p.OrderId).Where(p => p.CaseDate >= startDate).Where(p => p.CaseDate <= endDate).Count(),
+                DayTrandCount = _dataOrderRepository.Queryable().GroupBy(p => p.OrderId).Where(p => p.HandleState == "办理完成").Where(p => p.CaseDate >= startDate).Where(p => p.CaseDate <= endDate).Count()
+            };
+
+            return DeReponse<GetStatistDto>.Success(getStatistDto);
+        }
+    }
+}

+ 53 - 0
src/Sharing.WebPortal/Dtos/DeReponse.cs

@@ -0,0 +1,53 @@
+namespace Sharing.WebPortal.Dtos
+{
+    public class DeReponse<TData>
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 数据
+        /// </summary>
+        public TData data { get; set; }
+
+        /// <summary>
+        /// 成功
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DeReponse<TData> Success(TData data, string? description = "")
+        {
+            return new DeReponse<TData>
+            {
+                code = "1",
+                data = data,
+                msg = (description ?? "接口调用成功!")
+            };
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="code"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DeReponse<TData> Failed(TData data, string? code = "0", string? description = "")
+        {
+            return new DeReponse<TData>
+            {
+                code = code,
+                data = data,
+                msg = (description ?? "接口调用失败!")
+            };
+        }
+    }
+}

+ 13 - 0
src/Sharing.WebPortal/Sharing.WebPortal.csproj

@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net7.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\Sharing.WebCore\Sharing.WebCore.csproj" />
+  </ItemGroup>
+
+</Project>

+ 17 - 0
src/Sharing.WebPortal/StartupExtensions.cs

@@ -0,0 +1,17 @@
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Sharing.WebPortal
+{
+    public static class StartupExtensions
+    {
+        public static IServiceCollection AddSharingWebPortal(this IServiceCollection services)
+        {
+            return services;
+        }
+
+        public static void RegisterWebPortalServices(this MediatRServiceConfiguration config)
+        {
+            config.RegisterServicesFromAssembly(typeof(StartupExtensions).Assembly);
+        }
+    }
+}

+ 14 - 2
src/Sharing/Orders/DataOrder.cs

@@ -217,6 +217,12 @@ public class DataOrder : CreationModificationEntity
     [SugarColumn(ColumnDescription = "是否公开---工单发布的时候选择是否公开", IsNullable = true)]
     public EPublishState IsPublish { get; set; } = EPublishState.Unpublished;
 
+    /// <summary>
+    ///发布时间
+    /// </summary>
+    [SugarColumn(ColumnDescription = "发布时间", IsNullable = true)]
+    public DateTime? PublishDate { get; set; }
+
     /// <summary>
     /// 办理状态--默认办理中,归档的时候更新为办理完成
     /// </summary>
@@ -241,6 +247,12 @@ public class DataOrder : CreationModificationEntity
     [SugarColumn(ColumnDescription = "实际办理意见", IsNullable = true)]
     public string? ActualOpinion { get; set; }
 
+    /// <summary>
+    /// 办结时间--归档的时间
+    /// </summary>
+    [SugarColumn(ColumnDescription = "办结时间--归档的时间", IsNullable = true)]
+    public DateTime? ActualHandleTime { get; set; }
+
     /// <summary>
     /// 整理标题
     /// </summary>
@@ -250,12 +262,12 @@ public class DataOrder : CreationModificationEntity
     /// <summary>
     /// 整理内容
     /// </summary>
-    [SugarColumn(ColumnDescription = "整理标题", IsNullable = true, ColumnDataType = "varchar(2000)")]
+    [SugarColumn(ColumnDescription = "整理内容", IsNullable = true, ColumnDataType = "varchar(2000)")]
     public string? ArrangeContent { get; set; }
 
     /// <summary>
     /// 整理结果
     /// </summary>
-    [SugarColumn(ColumnDescription = "整理标题", IsNullable = true, ColumnDataType = "varchar(2000)")]
+    [SugarColumn(ColumnDescription = "整理结果", IsNullable = true, ColumnDataType = "varchar(2000)")]
     public string? ArrangeOpinion { get; set; }
 }