tangjiang 7 달 전
부모
커밋
6f94451470

+ 7 - 0
DataSharing.sln

@@ -35,6 +35,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ContingencyManagement.Sdk",
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataSharing.LuZhou", "src\DataSharing.LuZhou\DataSharing.LuZhou.csproj", "{595CE3B6-B40E-4C8F-9C3F-5E6D53D9B517}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotlineQuery.Sdk", "src\HotlineQuery.Sdk\HotlineQuery.Sdk.csproj", "{8FE8A2FF-CC2D-4291-8A11-DC419EE192B0}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -81,6 +83,10 @@ Global
 		{595CE3B6-B40E-4C8F-9C3F-5E6D53D9B517}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{595CE3B6-B40E-4C8F-9C3F-5E6D53D9B517}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{595CE3B6-B40E-4C8F-9C3F-5E6D53D9B517}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8FE8A2FF-CC2D-4291-8A11-DC419EE192B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8FE8A2FF-CC2D-4291-8A11-DC419EE192B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8FE8A2FF-CC2D-4291-8A11-DC419EE192B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8FE8A2FF-CC2D-4291-8A11-DC419EE192B0}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -100,6 +106,7 @@ Global
 		{ECCEFB84-E87A-4114-BAED-8B968A843EDD} = {E4B0553C-3284-481B-9E90-F5025D98C4AA}
 		{B71E1E63-FE37-42DF-9879-D1D2E11DB576} = {487B598E-9C72-45F0-8708-A532A4289EB6}
 		{595CE3B6-B40E-4C8F-9C3F-5E6D53D9B517} = {E4B0553C-3284-481B-9E90-F5025D98C4AA}
+		{8FE8A2FF-CC2D-4291-8A11-DC419EE192B0} = {487B598E-9C72-45F0-8708-A532A4289EB6}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {1866F49D-D504-4570-867E-2EF1A18B57FE}

+ 278 - 119
src/DataSharing.Host/Controllers/YiBin/ConvergenceMediaController.cs

@@ -1,5 +1,7 @@
-using DataSharing.FwDataExchange;
+using ContingencyManagement.Sdk;
+using DataSharing.FwDataExchange;
 using DataSharing.RawData;
+using DataSharing.Repository;
 using DataSharing.Share.Dtos;
 using DataSharing.Share.Dtos.HotlineSetting;
 using DataSharing.Share.Dtos.YiBin.ConvergenceMedia;
@@ -8,15 +10,18 @@ using DataSharing.YiBin.ConvergenceMedia;
 using DotNetCore.CAP;
 using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.Order;
+using HotlineQuery.Sdk;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
+using System.Threading;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
 using static Google.Protobuf.Reflection.FieldOptions.Types;
 using static System.Runtime.InteropServices.JavaScript.JSType;
+using FileDto = Hotline.Share.Dtos.File.FileDto;
 
 namespace DataSharing.Host.Controllers.YiBin
 {
@@ -36,6 +41,7 @@ namespace DataSharing.Host.Controllers.YiBin
         private readonly IRepository<DsBulletin> _bulletinRepository;
         private readonly FwClient _fwClient;
         private readonly IDsUserTokenInfoService _dsUserTokenInfoService;
+        private readonly ISqlSugarClient _db;
 
         /// <summary>
         /// 
@@ -50,6 +56,7 @@ namespace DataSharing.Host.Controllers.YiBin
         /// <param name="bulletinRepository"></param>
         /// <param name="fwClient"></param>
         /// <param name="dsUserTokenInfoService"></param>
+        /// <param name="serviceProvider"></param>
         public ConvergenceMediaController(IMapper mapper, IMediator mediator,
             ICapPublisher capPublisher,
             IChannelConfigurationManager channelConfigurationManager,
@@ -58,7 +65,8 @@ namespace DataSharing.Host.Controllers.YiBin
             IRepository<DsReceiveMediaData> dsReceiveMediaDataRepository,
             IRepository<DsBulletin> bulletinRepository,
             FwClient fwClient,
-            IDsUserTokenInfoService dsUserTokenInfoService)
+            IDsUserTokenInfoService dsUserTokenInfoService,
+            IServiceProvider serviceProvider)
         {
             _mapper = mapper;
             _mediator = mediator;
@@ -70,6 +78,7 @@ namespace DataSharing.Host.Controllers.YiBin
             _bulletinRepository = bulletinRepository;
             _fwClient = fwClient;
             _dsUserTokenInfoService = dsUserTokenInfoService;
+            _db = serviceProvider.GetRequiredService<ISugarUnitOfWork<HotlineDbContext>>().Db;
         }
         #endregion
 
@@ -284,29 +293,51 @@ namespace DataSharing.Host.Controllers.YiBin
 
             //数据查询
             RefAsync<int> total = 0;
-            var items = await _dataOrderRepository
-            .Queryable()
-            //.Where(p => p.Source == Hotline.Share.Enums.Order.ESource.ConvergenceMedia.ToString())
-           .Where(p => p.Source == accountDto.PlatformSource)
-            .WhereIF(!string.IsNullOrEmpty(dto.AcceptCode), p => p.OrderNo.Contains(dto.AcceptCode))
+
+            var items = await _db.Queryable<HotlineOrder>()
+             .Where(p => p.SourceChannelCode == GetChannelCode(accountDto.PlatformSource))
+            .WhereIF(!string.IsNullOrEmpty(dto.AcceptCode), p => p.No.Contains(dto.AcceptCode))
             .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
             .WhereIF(!string.IsNullOrEmpty(dto.Mobile), p => p.Contact.Contains(dto.Mobile))
-            .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.CaseTypeCode == AcceptTypeCode)
-            .WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CaseDate >= Convert.ToDateTime(dto.StartDate))
-            .WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CaseDate < Convert.ToDateTime(dto.EndDate).AddDays(1))
+            .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.AcceptTypeCode == AcceptTypeCode)
+            .WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CreationTime >= Convert.ToDateTime(dto.StartDate))
+            .WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CreationTime < Convert.ToDateTime(dto.EndDate).AddDays(1))
             .Select(it => new
             {
                 FlowID = it.Id,
-                RowID = SqlFunc.RowNumber($"{it.CaseDate} desc "),
-                Code = it.OrderNo,
+                RowID = SqlFunc.RowNumber($"{it.CreationTime} desc "),
+                Code = it.No,
                 it.Title,
-                AddDate = it.CaseDate,
-                FromName = it.CaseSource,
-                PurTypeName = it.CaseType,
-                ResultState = it.HandleState
+                AddDate = it.CreationTime,
+                FromName = it.SourceChannel,
+                PurTypeName = it.AcceptType,
+                ResultState = it.Status >= EOrderStatus.Filed ? "办理完成" : "办理中"
             })
               .ToPageListAsync(dto.CurrentPage, dto.PageSize, total);
 
+            // var items = await _dataOrderRepository
+            // .Queryable()
+            // //.Where(p => p.Source == Hotline.Share.Enums.Order.ESource.ConvergenceMedia.ToString())
+            //.Where(p => p.Source == accountDto.PlatformSource)
+            // .WhereIF(!string.IsNullOrEmpty(dto.AcceptCode), p => p.OrderNo.Contains(dto.AcceptCode))
+            // .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
+            // .WhereIF(!string.IsNullOrEmpty(dto.Mobile), p => p.Contact.Contains(dto.Mobile))
+            // .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.CaseTypeCode == AcceptTypeCode)
+            // .WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CaseDate >= Convert.ToDateTime(dto.StartDate))
+            // .WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CaseDate < Convert.ToDateTime(dto.EndDate).AddDays(1))
+            // .Select(it => new
+            // {
+            //     FlowID = it.Id,
+            //     RowID = SqlFunc.RowNumber($"{it.CaseDate} desc "),
+            //     Code = it.OrderNo,
+            //     it.Title,
+            //     AddDate = it.CaseDate,
+            //     FromName = it.CaseSource,
+            //     PurTypeName = it.CaseType,
+            //     ResultState = it.HandleState
+            // })
+            //   .ToPageListAsync(dto.CurrentPage, dto.PageSize, total);
+
             //计算总页数
             int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
 
@@ -351,31 +382,52 @@ namespace DataSharing.Host.Controllers.YiBin
             if (!string.IsNullOrEmpty(strResult))
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo(strResult), "0", "失败"));
 
-            //查询数据
-            var items = await _dataOrderRepository
-             .Queryable()
-             .Where(p => p.OrderNo == dto.AcceptCode)
-             .Where(p => p.Password == dto.AcceptPwd)
-             .Where(p => p.Source == accountDto.PlatformSource)
+            var items = await _db.Queryable<HotlineOrder>()
+               .Where(p => p.No == dto.AcceptCode)
+               .Where(p => p.Password == dto.AcceptPwd)
+               .Where(p => p.SourceChannelCode == GetChannelCode(accountDto.PlatformSource))
               .Select(it => new
               {
                   FlowID = it.Id,
-                  FlowCode = it.OrderNo,
+                  FlowCode = it.No,
                   FlowTitle = it.Title,
-                  FlowFromName = it.CaseSource,
-                  FlowPurTypeName = it.CaseType,
+                  FlowFromName = it.SourceChannel,
+                  FlowPurTypeName = it.AcceptType,
                   FlowConTypeName = it.HotspotName,
-                  FlowAddDate = it.CaseDate,
+                  FlowAddDate = it.CreationTime,
                   FlowLKName = it.FromName,
                   FlowBMName = it.ActualHandleOrgName,
-                  FlowRSFlagName = it.HandleState,
+                  FlowRSFlagName = it.Status >= EOrderStatus.Filed ? "办理完成" : "办理中",
                   FlowContent = it.Content,
                   FlowResult = it.ActualOpinion,
               })
               .ToListAsync();
 
+            ////查询数据
+            //var items = await _dataOrderRepository
+            // .Queryable()
+            // .Where(p => p.OrderNo == dto.AcceptCode)
+            // .Where(p => p.Password == dto.AcceptPwd)
+            // .Where(p => p.Source == accountDto.PlatformSource)
+            //  .Select(it => new
+            //  {
+            //      FlowID = it.Id,
+            //      FlowCode = it.OrderNo,
+            //      FlowTitle = it.Title,
+            //      FlowFromName = it.CaseSource,
+            //      FlowPurTypeName = it.CaseType,
+            //      FlowConTypeName = it.HotspotName,
+            //      FlowAddDate = it.CaseDate,
+            //      FlowLKName = it.FromName,
+            //      FlowBMName = it.ActualHandleOrgName,
+            //      FlowRSFlagName = it.HandleState,
+            //      FlowContent = it.Content,
+            //      FlowResult = it.ActualOpinion,
+            //  })
+            //  .ToListAsync();
+
             if (items == null || items.Count == 0)
-                return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo("信件受理中!"), "0", "失败"));
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo("编号或密码错误!"), "0", "失败"));
             else
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<MediaOrderDetailDataDto>>.Success(_mapper.Map<IReadOnlyList<MediaOrderDetailDataDto>>(items), "成功"));
 
@@ -404,25 +456,41 @@ namespace DataSharing.Host.Controllers.YiBin
 
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
             }
-
-            //数据查询
-            var list = await _dataOrderRepository.Queryable()
-                .Where(p => p.CaseDate >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))
-                .Where(p => p.CaseDate <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")))
+            var list = await _db.Queryable<HotlineOrder>()
+                 .Where(p => p.CreationTime >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))
+                .Where(p => p.CreationTime <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")))
                 .Select(it => new
                 {
-                    it.CaseType,
-                    it.CaseTypeCode
+                    it.AcceptType,
+                    it.AcceptTypeCode
                 })
                 .MergeTable()//将查询出来的结果合并成一个新表
-                 .GroupBy(it => new { it.CaseType, it.CaseTypeCode })//对新表进行分组
+                 .GroupBy(it => new { it.AcceptType, it.AcceptTypeCode })//对新表进行分组
                  .Select(it => new
                  {
-                     PurTypeName = it.CaseType,
-                     Count = SqlFunc.AggregateCount(it.CaseTypeCode)
+                     PurTypeName = it.AcceptType,
+                     Count = SqlFunc.AggregateCount(it.AcceptTypeCode)
                  })
                  .ToListAsync();
 
+            ////数据查询
+            //var list = await _dataOrderRepository.Queryable()
+            //    .Where(p => p.CaseDate >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))
+            //    .Where(p => p.CaseDate <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")))
+            //    .Select(it => new
+            //    {
+            //        it.CaseType,
+            //        it.CaseTypeCode
+            //    })
+            //    .MergeTable()//将查询出来的结果合并成一个新表
+            //     .GroupBy(it => new { it.CaseType, it.CaseTypeCode })//对新表进行分组
+            //     .Select(it => new
+            //     {
+            //         PurTypeName = it.CaseType,
+            //         Count = SqlFunc.AggregateCount(it.CaseTypeCode)
+            //     })
+            //     .ToListAsync();
+
             var listData = _mapper.Map<List<GetPurTypeReportDataDto>>(list);
             return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetPurTypeReportDataDto>>.Success(listData, "成功"));
         }
@@ -466,26 +534,47 @@ namespace DataSharing.Host.Controllers.YiBin
 
             //查询数据
             RefAsync<int> total = 0;
-            var items = await _dataOrderRepository
-            .Queryable()
-            .Where(p => p.IsPublish == EDsPublishState.Open)
-            .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
-            .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.CaseTypeCode == AcceptTypeCode)
-            .WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CaseDate >= Convert.ToDateTime(dto.StartDate).AddDays(-30))
-            .WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CaseDate < Convert.ToDateTime(dto.EndDate).AddDays(1))
-            .Select(it => new
-            {
-                FlowID = it.Id,
-                RowID = SqlFunc.RowNumber($"{it.CaseDate} desc "),
-                Code = it.OrderNo,
-                it.Title,
-                AddDate = it.CaseDate,
-                FromName = it.CaseSource,
-                PurTypeName = it.CaseType,
-                ResultState = it.HandleState
-            })
+
+            var items = await _db.Queryable<HotlineOrder>()
+                .LeftJoin<OrderPublish>((o, p) => o.Id == p.OrderId)
+                .Where((o, p) => p.PublishState == true)
+                .WhereIF(!string.IsNullOrEmpty(dto.Title), (o, p) => o.Title.Contains(dto.Title))
+                .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), (o, p) => o.AcceptTypeCode == AcceptTypeCode)
+                .WhereIF(!string.IsNullOrEmpty(dto.StartDate), (o, p) => o.CreationTime >= Convert.ToDateTime(dto.StartDate).AddDays(-30))
+                .WhereIF(!string.IsNullOrEmpty(dto.EndDate), (o, p) => o.CreationTime < Convert.ToDateTime(dto.EndDate).AddDays(1))
+                .Select((o, p) => new
+                {
+                    FlowID = o.Id,
+                    RowID = SqlFunc.RowNumber($"{o.CreationTime} desc "),
+                    Code = o.No,
+                    o.Title,
+                    AddDate = o.CreationTime,
+                    FromName = o.SourceChannel,
+                    PurTypeName = o.AcceptType,
+                    ResultState = o.Status >= EOrderStatus.Filed ? "办理完成" : "办理中"
+                })
               .ToPageListAsync(dto.CurrentPage, dto.PageSize, total);
 
+            //var items = await _dataOrderRepository
+            //.Queryable()
+            //.Where(p => p.IsPublish == EDsPublishState.Open)
+            //.WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
+            //.WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.CaseTypeCode == AcceptTypeCode)
+            //.WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CaseDate >= Convert.ToDateTime(dto.StartDate).AddDays(-30))
+            //.WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CaseDate < Convert.ToDateTime(dto.EndDate).AddDays(1))
+            //.Select(it => new
+            //{
+            //    FlowID = it.Id,
+            //    RowID = SqlFunc.RowNumber($"{it.CaseDate} desc "),
+            //    Code = it.OrderNo,
+            //    it.Title,
+            //    AddDate = it.CaseDate,
+            //    FromName = it.CaseSource,
+            //    PurTypeName = it.CaseType,
+            //    ResultState = it.HandleState
+            //})
+            //  .ToPageListAsync(dto.CurrentPage, dto.PageSize, total);
+
             //计算总页数
             int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
 
@@ -675,22 +764,39 @@ namespace DataSharing.Host.Controllers.YiBin
             }
 
             RefAsync<int> total = 0;
-            var items = await _bulletinRepository
-            .Queryable()
-            .Where(p => p.LoseEfficacyTime >= DateTime.Now)
-            .Where(p => p.BulletinTypeId == type)
-            .Where(p => SqlFunc.JsonListObjectAny(p.PushRanges, "Key", "2"))
-            .OrderByDescending(p => p.BulletinTime)
-            .Select(it => new
-            {
-                Page = SqlFunc.RowNumber($"{it.BulletinTime} desc "),
-                NoticeID = it.Id,
-                NoticeTypeName = it.BulletinTypeName,
-                NoticeTitle = it.Title,
-                NoticeBMName = it.SourceOrgName,
-                NoticeCreateDate = it.BulletinTime
-            })
-            .ToPageListAsync(nCurrentPage, nPageSize, total);
+            var items = await _db.Queryable<Bulletin>()
+                    .Where(p => p.LoseEfficacyTime >= DateTime.Now)
+                    .Where(p => p.BulletinTypeId == type)
+                    .Where(p => SqlFunc.JsonListObjectAny(p.PushRanges, "Key", "2"))
+                    .Where(p => p.IsArrive == true && p.BulletinState == EBulletinState.ReviewPass)
+                    .OrderByDescending(p => p.BulletinTime)
+                    .Select(it => new
+                    {
+                        Page = SqlFunc.RowNumber($"{it.BulletinTime} desc "),
+                        NoticeID = it.Id,
+                        NoticeTypeName = it.BulletinTypeName,
+                        NoticeTitle = it.Title,
+                        NoticeBMName = it.SourceOrgName,
+                        NoticeCreateDate = it.BulletinTime
+                    })
+                     .ToPageListAsync(nCurrentPage, nPageSize, total);
+
+            //var items = await _bulletinRepository
+            //.Queryable()
+            //.Where(p => p.LoseEfficacyTime >= DateTime.Now)
+            //.Where(p => p.BulletinTypeId == type)
+            //.Where(p => SqlFunc.JsonListObjectAny(p.PushRanges, "Key", "2"))
+            //.OrderByDescending(p => p.BulletinTime)
+            //.Select(it => new
+            //{
+            //    Page = SqlFunc.RowNumber($"{it.BulletinTime} desc "),
+            //    NoticeID = it.Id,
+            //    NoticeTypeName = it.BulletinTypeName,
+            //    NoticeTitle = it.Title,
+            //    NoticeBMName = it.SourceOrgName,
+            //    NoticeCreateDate = it.BulletinTime
+            //})
+            //.ToPageListAsync(nCurrentPage, nPageSize, total);
 
             //计算总页数
             int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / nPageSize));
@@ -728,14 +834,11 @@ namespace DataSharing.Host.Controllers.YiBin
 
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
             }
-
-            var data = await _bulletinRepository.GetAsync(p => p.Id == dto.NoticeID, HttpContext.RequestAborted);
+            var data = await _db.Queryable<Bulletin>().Where(p => p.Id == dto.NoticeID).FirstAsync(HttpContext.RequestAborted);
+            //  var data = await _bulletinRepository.GetAsync(p => p.Id == dto.NoticeID, HttpContext.RequestAborted);
             MediaArticleDetailsDto detailsDto = new();
             if (data != null)
             {
-                data.ReadedNum = data.ReadedNum++;
-                await _bulletinRepository.UpdateAsync(data, HttpContext.RequestAborted);
-
                 detailsDto.NoticeID = data.Id;
                 detailsDto.NoticeTypeName = data.BulletinTypeName;
                 detailsDto.NoticeTitle = data.Title;
@@ -772,11 +875,11 @@ namespace DataSharing.Host.Controllers.YiBin
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
             }
             //数据查询
-            var dayTrandCount = await _dataOrderRepository.Queryable().Where(p => p.CaseDate >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")) &&
-            p.CaseDate <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")) &&
-            p.HandleState != "办理中").CountAsync();
-            var dayCount = await _dataOrderRepository.Queryable().Where(p => p.CaseDate >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")) &&
-            p.CaseDate <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"))).CountAsync();
+            var dayTrandCount = await _db.Queryable<HotlineOrder>().Where(p => p.CreationTime >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")) &&
+            p.CreationTime <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")) &&
+            p.Status >= EOrderStatus.Filed).CountAsync();
+            var dayCount = await _db.Queryable<HotlineOrder>().Where(p => p.CreationTime >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")) &&
+            p.CreationTime <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"))).CountAsync();
             List<GetDayCountResponse> listdata =
             [
                 new GetDayCountResponse()
@@ -817,28 +920,51 @@ namespace DataSharing.Host.Controllers.YiBin
             if (!string.IsNullOrEmpty(strResult))
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo(strResult), "0", "失败"));
 
-            //查询数据
-            var items = await _dataOrderRepository
-             .Queryable()
-             .Where(p => p.OrderNo == dto.AcceptCode)
-             .Where(p => p.Id == dto.FlowID)
-              .Select(it => new
-              {
-                  FlowID = it.Id,
-                  FlowCode = it.OrderNo,
-                  FlowTitle = it.Title,
-                  FlowFromName = it.CaseSource,
-                  FlowPurTypeName = it.CaseType,
-                  FlowConTypeName = it.HotspotName,
-                  FlowAddDate = it.CaseDate,
-                  FlowLKName = it.FromName,
-                  FlowBMName = it.ActualHandleOrgName,
-                  FlowRSFlagName = it.HandleState,
-                  FlowContent = it.Content,
-                  FlowResult = it.ActualOpinion,
-                  PubDate = it.PublishDate
-              })
-              .ToListAsync();
+
+            var items = await _db.Queryable<HotlineOrder>()
+                .LeftJoin<OrderPublish>((p, o) => p.Id == o.OrderId)
+              .Where((p, o) => p.No == dto.AcceptCode)
+              .Where((p, o) => p.Id == dto.FlowID)
+             .Select((p, o) => new
+             {
+                 FlowID = p.Id,
+                 FlowCode = p.No,
+                 FlowTitle = p.Title,
+                 FlowFromName = p.SourceChannel,
+                 FlowPurTypeName = p.AcceptType,
+                 FlowConTypeName = p.HotspotName,
+                 FlowAddDate = p.CreationTime,
+                 FlowLKName = p.FromName,
+                 FlowBMName = p.ActualHandleOrgName,
+                 FlowRSFlagName = p.Status >= EOrderStatus.Filed ? "办理完成" : "办理中",
+                 FlowContent = p.Content,
+                 FlowResult = p.ActualOpinion,
+                 PubDate = o.CreationTime
+             })
+             .ToListAsync();
+
+            ////查询数据
+            //var items = await _dataOrderRepository
+            // .Queryable()
+            // .Where(p => p.OrderNo == dto.AcceptCode)
+            // .Where(p => p.Id == dto.FlowID)
+            //  .Select(it => new
+            //  {
+            //      FlowID = it.Id,
+            //      FlowCode = it.OrderNo,
+            //      FlowTitle = it.Title,
+            //      FlowFromName = it.CaseSource,
+            //      FlowPurTypeName = it.CaseType,
+            //      FlowConTypeName = it.HotspotName,
+            //      FlowAddDate = it.CaseDate,
+            //      FlowLKName = it.FromName,
+            //      FlowBMName = it.ActualHandleOrgName,
+            //      FlowRSFlagName = it.HandleState,
+            //      FlowContent = it.Content,
+            //      FlowResult = it.ActualOpinion,
+            //      PubDate = it.PublishDate
+            //  })
+            //  .ToListAsync();
 
             if (items == null || items.Count == 0)
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo("编号、密码错误!"), "0", "失败"));
@@ -875,25 +1001,42 @@ namespace DataSharing.Host.Controllers.YiBin
             if (!string.IsNullOrEmpty(strResult))
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo(strResult), "0", "失败"));
 
-            //查询数据
-            var items = await _dataOrderRepository
-             .Queryable()
-             .Where(p => p.OrderNo == dto.AcceptCode)
-              .Select(it => new
+            var items = await _db.Queryable<HotlineOrder>()
+                 .Where(p => p.No == dto.AcceptCode)
+              .Select(p => new
               {
-                  FlowID = it.Id,
-                  FlowCode = it.OrderNo,
-                  FlowTitle = it.Title,
-                  FlowAddDate = it.CaseDate,
-                  FlowPurTypeName = it.CaseType,
-                  FlowConTypeName = it.HotspotName,
-                  FlowRSFlagName = it.HandleState,
-                  FlowLKName = it.FromName,
-                  FlowContent = it.Content,
-                  Address = it.FullAddress
+                  FlowID = p.Id,
+                  FlowCode = p.No,
+                  FlowTitle = p.Title,
+                  FlowAddDate = p.CreationTime,
+                  FlowPurTypeName = p.AcceptType,
+                  FlowConTypeName = p.HotspotName,
+                  FlowRSFlagName = p.Status >= EOrderStatus.Filed ? "办理完成" : "办理中",
+                  FlowLKName = p.FromName,
+                  FlowContent = p.Content,
+                  Address = p.FullAddress
               })
               .ToListAsync();
 
+            ////查询数据
+            //var items = await _dataOrderRepository
+            // .Queryable()
+            // .Where(p => p.OrderNo == dto.AcceptCode)
+            //  .Select(it => new
+            //  {
+            //      FlowID = it.Id,
+            //      FlowCode = it.OrderNo,
+            //      FlowTitle = it.Title,
+            //      FlowAddDate = it.CaseDate,
+            //      FlowPurTypeName = it.CaseType,
+            //      FlowConTypeName = it.HotspotName,
+            //      FlowRSFlagName = it.HandleState,
+            //      FlowLKName = it.FromName,
+            //      FlowContent = it.Content,
+            //      Address = it.FullAddress
+            //  })
+            //  .ToListAsync();
+
             if (items == null || items.Count == 0)
                 return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo("编号、密码错误!"), "0", "失败"));
             else
@@ -1068,6 +1211,22 @@ namespace DataSharing.Host.Controllers.YiBin
         }
 
         #region 私有方法-将文件转化为文件流
+        private string GetChannelCode(string platformSource)
+        {
+            var sourceChannelCode = "";
+            switch (platformSource)
+            {
+                case "ConvergenceMedia":
+                    sourceChannelCode = "YBRMT";
+                    break;
+                case "IYIBIN":
+                    sourceChannelCode = "IYB";
+                    break;
+                default:
+                    break;
+            }
+            return sourceChannelCode;
+        }
 
         /// <summary>
         /// 将文件流上传到附件服务器    

+ 3 - 0
src/DataSharing.Host/Controllers/ZiGong/TianQueController.cs

@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc;
 using XF.Domain.Filters;
 using DataSharing.YiBin.ConvergenceMedia;
 using XF.Domain.Repository;
+using Microsoft.AspNetCore.Authorization;
 
 namespace DataSharing.Host.Controllers.ZiGong
 {
@@ -39,6 +40,8 @@ namespace DataSharing.Host.Controllers.ZiGong
             _dsReceiveMediaDataRepository = dsReceiveMediaDataRepository;
         }
 
+        [HttpPost("WriteResult")]
+        [AllowAnonymous]
         public async Task<OpenResponse> WriteResult([FromBody] OrderResultDto dto)
         {
             //写入原始数据

+ 1 - 0
src/DataSharing.Host/DataSharing.Host.csproj

@@ -24,6 +24,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\DataSharing.Application\DataSharing.Application.csproj" />
+    <ProjectReference Include="..\HotlineQuery.Sdk\HotlineQuery.Sdk.csproj" />
   </ItemGroup>
 
 </Project>

+ 3 - 0
src/DataSharing.Host/StartupExtensions.cs

@@ -40,6 +40,9 @@ internal static class StartupExtensions
         services.Configure<IdentityConfiguration>(d => configuration.GetSection(nameof(IdentityConfiguration)).Bind(d));
         services.Configure<ChannelConfiguration>(d => configuration.GetSection(nameof(ChannelConfiguration)).Bind(d));
         services.Configure<SharingConfiguration>(d => configuration.GetSection(nameof(SharingConfiguration)).Bind(d));
+        var channelConfiguration = configuration.GetSection("ChannelConfiguration").Get<ChannelConfiguration>();
+        if (channelConfiguration != null)
+            services.AddHotline(channelConfiguration.HotlineDbContext);
 
         //根据市州编码判断属于哪个市州,启用对应的推送服务
         var sharingConfig = configuration.GetSection("SharingConfiguration").Get<SharingConfiguration>();

+ 1 - 1
src/DataSharing.Host/config/appsettings.Development.json

@@ -81,7 +81,7 @@
 
     //hotline数据库
     "HotlineDbContext": {
-      "DbConnectionString": "server=110.188.24.182;Database=yb_12345;Uid=dev;Pwd=fengwo11!!"
+      "DbConnectionString": "PORT=5432;DATABASE=hotline;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
     },
 
     //业务系统附件上传配置

+ 4 - 1
src/DataSharing.Host/config/appsettings.json

@@ -84,7 +84,10 @@
       //"AddressUrl": "http://110.188.24.28:50300/"
       "AddressUrl": "http://open.hotline.12345lm.cn/"
     },
-
+    //hotline数据库
+    "HotlineDbContext": {
+      "DbConnectionString": "PORT=5432;DATABASE=hotline;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
+    },
     //业务系统附件上传配置
     "BusinessFile": {
       "BaseUrl": "http://open.fs.12345lm.cn/",

+ 29 - 0
src/DataSharing.Repository/Extensions/HotlineQueryDbExtensions.cs

@@ -0,0 +1,29 @@
+using Microsoft.Extensions.DependencyInjection;
+using SqlSugar;
+
+namespace DataSharing.Repository.Extensions
+{
+    public static class HotlineQueryDbExtensions
+    {
+        public static void AddHotline(this IServiceCollection services, HotlineConfiguration hotlineConfiguration)
+        {
+            SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig()
+            {
+                DbType = DbType.PostgreSQL,
+                ConnectionString = hotlineConfiguration.DbConnectionString,
+                IsAutoCloseConnection = true,
+                MoreSettings = new ConnMoreSettings
+                {
+                    PgSqlIsAutoToLower = false,//增删查改支持驼峰表
+                    PgSqlIsAutoToLowerCodeFirst = false, // 建表建驼峰表。5.1.3.30 
+                }
+            },
+                 db => { }
+             );
+
+            ISugarUnitOfWork<HotlineDbContext> context = new SugarUnitOfWork<HotlineDbContext>(sqlSugar);
+            services.AddSingleton(context);
+            //   return services;
+        }
+    }
+}

+ 8 - 0
src/DataSharing.Repository/HotlineDbContext.cs

@@ -0,0 +1,8 @@
+using SqlSugar;
+
+namespace DataSharing.Repository
+{
+    public class HotlineDbContext : SugarUnitOfWork
+    {
+    }
+}

+ 4 - 0
src/DataSharing/ChannelConfiguration.cs

@@ -22,6 +22,10 @@
         /// </summary>
         public ConfigurationProvince Province { get; set; }
 
+        /// <summary>
+        /// hotline查询
+        /// </summary>
+        public HotlineConfiguration HotlineDbContext {  get; set; }
     }
 
     /// <summary>

+ 9 - 0
src/DataSharing/ChannelConfigurationManager.cs

@@ -54,6 +54,15 @@ namespace DataSharing
         {
             return _channelOption.Value.Province;
         }
+
+        /// <summary>
+        /// hotline查询
+        /// </summary>
+        /// <returns></returns>
+        public HotlineConfiguration GetHotlineConfiguration()
+        {
+            return _channelOption.Value.HotlineDbContext;
+        }
     }
 
 

+ 6 - 0
src/DataSharing/IChannelConfigurationManager.cs

@@ -25,5 +25,11 @@
         /// </summary>
         /// <returns></returns>
         ConfigurationProvince GetConfigurationProvince();
+
+        /// <summary>
+        /// hotline查询
+        /// </summary>
+        /// <returns></returns>
+        HotlineConfiguration GetHotlineConfiguration();
     }
 }

+ 0 - 4
src/DataSharing/SharingConfiguration.cs

@@ -81,10 +81,6 @@
         /// </summary>
         public YingJiGuanLiJuConfiguration YingJiGuanLiJu { get; set; }
 
-        /// <summary>
-        /// hotline配置
-        /// </summary>
-        public HotlineConfiguration HotlineDbContext { get; set; }
     }
 
     /// <summary>

+ 129 - 0
src/HotlineQuery.Sdk/Bulletin.cs

@@ -0,0 +1,129 @@
+using SqlSugar;
+using System.ComponentModel;
+
+namespace HotlineQuery.Sdk
+{
+    /// <summary>
+    /// 公告
+    /// </summary>
+    [SugarTable("bulletin")]
+    public class Bulletin
+    {
+        [SugarColumn(IsPrimaryKey = true)]
+        public string Id { get; set; }
+
+        public string Title { get; set; }
+
+        public string Content { get; set; }
+
+        public string BulletinTypeId { get; set; }
+
+        public string BulletinTypeName { get; set; }
+
+        /// <summary>
+        /// 阅读量
+        /// </summary>
+        public int ReadedNum { get; set; }
+
+        /// <summary>
+        /// 通知时间
+        /// </summary>
+        public DateTime? BulletinTime { get; set; }
+
+        /// <summary>
+        /// 失效时间
+        /// </summary>
+        public DateTime LoseEfficacyTime { get; set; }
+
+        /// <summary>
+        /// 公告状态
+        /// </summary>
+        public EBulletinState BulletinState { get; set; }
+
+        /// <summary>
+        /// 发布范围(多选) 位枚举  EPushRange
+        /// </summary>
+        [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+        public List<Kv>? PushRanges { get; set; }
+
+        /// <summary>
+        /// 来源单位ID
+        /// </summary>
+        public string SourceOrgId { get; set; }
+
+        /// <summary>
+        /// 来源单位名称
+        /// </summary>
+        public string SourceOrgName { get; set; }
+
+        /// <summary>
+        /// 提交时间
+        /// </summary>
+        public DateTime? CommitTime { get; set; }
+
+        /// <summary>
+        /// 审核意见
+        /// </summary>
+        public string? ExaminOpinion { get; set; }
+
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        public string? ExaminManId { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? ExaminTime { get; set; }
+
+        /// <summary>
+        /// 是否上架
+        /// </summary>
+        public bool? IsArrive { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+    }
+    public enum EBulletinState
+    {
+        /// <summary>
+        /// 草稿
+        /// </summary>
+        [Description("草稿")]
+        Draft = 0,
+        /// <summary>
+        /// 审批中
+        /// </summary>
+        [Description("审批中")]
+        InReview = 1,
+        /// <summary>
+        /// 审批通过
+        /// </summary>
+        [Description("审批通过")]
+        ReviewPass = 2,
+        /// <summary>
+        /// 审批驳回
+        /// </summary>
+        [Description("审批驳回")]
+        ReviewNoPass = 3,
+    }
+
+    public class Kv
+    {
+        public Kv()
+        {
+        }
+
+        public Kv(string key, string value)
+        {
+            Key = key;
+            Value = value;
+        }
+
+        public string Key { get; set; }
+        public string Value { get; set; }
+    }
+}

+ 477 - 0
src/HotlineQuery.Sdk/HotlineOrder.cs

@@ -0,0 +1,477 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotlineQuery.Sdk
+{
+    /// <summary>
+    /// 公告
+    /// </summary>
+    [SugarTable("order")]
+    public class HotlineOrder
+    {
+        [SugarColumn(IsPrimaryKey = true)]
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptType { get; set; }
+
+        public string? AcceptTypeCode { get; set; }
+
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 来源渠道(电话、网站、APP等)
+        /// </summary>
+        public string? SourceChannel { get; set; }
+
+        public string? SourceChannelCode { get; set; }
+
+        /// <summary>
+        /// 来电号码
+        /// </summary>
+        public string? FromPhone { get; set; }
+
+        /// <summary>
+        /// 来电/信人姓名
+        /// </summary>
+        public string? FromName { get; set; }
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        public string? Contact { get; set; }
+
+        public string? ContactMask { get; set; }
+
+        /// <summary>
+        /// 是否保密
+        /// </summary>
+        public bool IsSecret { get; set; }
+
+        /// <summary>
+        /// 热点
+        /// </summary>
+        public string? HotspotId { get; set; }
+
+        public string? HotspotName { get; set; }
+
+        public string? HotspotSpliceName { get; set; }
+
+        /// <summary>
+        /// 外部数据(为前端提供级联功能)
+        /// </summary>
+        public string? HotspotExternal { get; set; }
+
+        /// <summary>
+        /// 诉求内容
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(8000)")]
+        public string Content { get; set; }
+
+        /// <summary>
+        /// 同步省工单编号和省上传下来的工单都用这个字段
+        /// </summary>
+        public string? ProvinceNo { get; set; }
+
+        /// <summary>
+        /// 外部工单唯一标识
+        /// </summary>
+        public string? ExternalId { get; set; }
+
+        /// <summary>
+        /// 工单状态
+        /// </summary>
+        public EOrderStatus Status { get; set; }
+
+        /// <summary>
+        /// 来源,区分省平台或110等其他平台同步过来的工单
+        /// </summary>
+        public ESource Source { get; set; }
+
+        /// <summary>
+        /// 工单编码(20220101000001)
+        /// </summary>
+        public string? No { get; set; }
+
+        /// <summary>
+        /// 是否已撤销
+        /// </summary>
+        public bool IsCancel { get; set; }
+
+        /// <summary>
+        /// 市民查询密码
+        /// </summary>
+        public string? Password { get; set; }
+
+        /// <summary>
+        /// 企业名称
+        /// </summary>
+        public string? EnterpriseName { get; set; }
+
+        /// <summary>
+        /// 完整地址
+        /// </summary>
+        public string? FullAddress { get; set; }
+
+        /// <summary>
+        /// 企业Code
+        /// </summary>
+        public string? EnterpriseCode { get; set; }
+
+
+        /// <summary>
+        /// 专班名称
+        /// </summary>
+        public string? ZhuanBanMingCheng { get; set; }
+
+        /// <summary>
+        /// 专班Code
+        /// </summary>
+        public string? ZhuanBanCode { get; set; }
+
+        /// <summary>
+        /// 工单开始时间(受理/接办时间=流程开启时间)
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+
+        /// <summary>
+        /// 超期时间(期满时间)
+        /// </summary>
+        public DateTime? ExpiredTime { get; set; }
+
+        /// <summary>
+        /// 即将超期时间
+        /// </summary>
+        public DateTime? NearlyExpiredTime { get; set; }
+
+        /// <summary>
+        /// 归档时间(暂为流程结束时间,因流程结束自动归档)
+        /// </summary>
+        public DateTime? FiledTime { get; set; }
+
+        /// <summary>
+        /// 实际办理节点签收时间
+        /// </summary>
+        public DateTime? ActualHandleStepAcceptTime { get; set; }
+
+        /// <summary>
+        /// 实际办理时间
+        /// </summary>
+        public DateTime? ActualHandleTime { get; set; }
+
+        /// <summary>
+        /// 实际办理人id
+        /// </summary>
+        public string? ActualHandlerId { get; set; }
+
+        /// <summary>
+        /// 实际办理人名称
+        /// </summary>
+        public string? ActualHandlerName { get; set; }
+
+        /// <summary>
+        /// 实际办理部门名称
+        /// </summary>
+        public string? ActualHandleOrgName { get; set; }
+
+        /// <summary>
+        /// 实际办理部门编码
+        /// </summary>
+        public string? ActualHandleOrgCode { get; set; }
+
+        /// <summary>
+        /// 实际办理部门行政区划编码
+        /// </summary>
+        public string? ActualHandleOrgAreaCode { get; set; }
+
+        /// <summary>
+        /// 实际办理部门行政区划名称
+        /// </summary>
+        public string? ActualHandleOrgAreaName { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+        /// <summary>
+        /// 实际办理意见(办理中...or 最终办理意见)
+        /// </summary>
+        public string ActualOpinion { get; set; } = "办理中...";
+
+        /// <summary>
+        /// 附件
+        /// </summary>
+        public List<FileDto>? Additions { get; set; } = new();
+
+    }
+    public enum EOrderStatus
+    {
+        /// <summary>
+        /// 待受理
+        /// </summary>
+        [Description("待受理")]
+        WaitForAccept = 0,
+
+        /// <summary>
+        /// 已开启流程,退回到开始节点
+        /// 待受理,可编辑
+        /// </summary>
+        [Description("退回待受理")]
+        BackToUnAccept = 1,
+
+        /// <summary>
+        /// 已开启流程,特提到开始节点
+        /// 待受理,可编辑
+        /// </summary>
+        [Description("特提待受理")]
+        SpecialToUnAccept = 2,
+
+        /// <summary>
+        /// 已开启流程,移交开始节点
+        /// 待受理,可编辑
+        /// </summary>
+        [Description("移交待受理")]
+        HandOverToUnAccept = 3,
+
+        /// <summary>
+        /// 退回省平台(锁定,不可操作)
+        /// </summary>
+        [Description("退回省平台")]
+        BackToProvince = 9,
+
+        /// <summary>
+        /// 办理中
+        /// </summary>
+        [Description("办理中")]
+        Handling = 100,
+
+        /// <summary>
+        /// 特提信件
+        /// </summary>
+        [Description("特提信件")]
+        Special = 101,
+
+        /// <summary>
+        /// 退回信件
+        /// </summary>
+        [Description("退回信件")]
+        SendBack = 102,
+
+        /// <summary>
+        /// 移交信件
+        /// </summary>
+        [Description("移交信件")]
+        HandOver = 103,
+
+        /// <summary>
+        /// 特提审批中
+        /// </summary>
+        [Description("特提审批中")]
+        SpecialAudit = 104,
+
+        /// <summary>
+        /// 退回审批中
+        /// </summary>
+        [Description("退回审批中")]
+        SendBackAudit = 105,
+
+        /// <summary>
+        /// 会签中
+        /// </summary>
+        [Description("会签中")]
+        Countersigning = 200,
+
+        /// <summary>
+        /// 已归档
+        /// </summary>
+        [Description("已归档")]
+        Filed = 300,
+
+        /// <summary>
+        /// 已发布
+        /// </summary>
+        [Description("已发布")]
+        Published = 400,
+
+        /// <summary>
+        /// 已回访
+        /// </summary>
+        [Description("已回访")]
+        Visited = 500,
+    }
+
+    public enum ESource
+    {
+        /// <summary>
+        /// 热线平台工单
+        /// </summary>
+        Hotline = 0,
+
+        /// <summary>
+        /// 门户网站
+        /// </summary>
+        WebPortal = 2,
+
+        /// <summary>
+        /// 热线平台导入工单
+        /// </summary>
+        HotlineImport = 1,
+
+        /// <summary>
+        /// 省平台直派
+        /// </summary>
+        ProvinceStraight = 100,
+
+        /// <summary>
+        /// 110同步工单
+        /// </summary>
+        Police110 = 200,
+
+        /// <summary>
+        /// 市州互转--泸州 
+        /// </summary>
+        CityDataExchangeLz = 300,
+
+        /// <summary>
+        /// 市州互转--宜宾
+        /// </summary>
+        CityDataExchangeYB = 301,
+
+        /// <summary>
+        /// 市州互转--自贡
+        /// </summary>
+        CityDataExchangeZG = 302,
+
+        /// <summary>
+        /// 市州互转--内江
+        /// </summary>
+        CityDataExchangeNJ = 303,
+
+        /// <summary>
+        /// 宜宾融媒体
+        /// </summary>
+        ConvergenceMedia = 400,
+
+        /// <summary>
+        /// i宜宾
+        /// </summary>
+        IYIBIN = 401,
+
+        /// <summary>
+        /// 智慧宜宾
+        /// </summary>
+        ZHYB = 402,
+
+        /// <summary>
+        /// 综治平台
+        /// </summary>
+        ZZPT = 403,
+
+        /// <summary>
+        /// 网络理政—市民中心大厅
+        /// </summary>
+        WLLZ = 404,
+
+        #region 导入类型(>=500  <530为导入来源)
+        /// <summary>
+        /// 麻辣社区导入
+        /// </summary>
+        [Description("麻辣社区")]
+        MLSQ = 500,
+
+        /// <summary>
+        /// 人民网
+        /// </summary>
+        [Description("人民网")]
+        RMW = 501,
+
+        /// <summary>
+        /// 省长信箱
+        /// </summary>
+        [Description("省长信箱")]
+        SZXX = 502,
+
+        /// <summary>
+        /// 问政四川
+        /// </summary>
+        [Description("问政四川")]
+        WZSC = 529,
+        #endregion
+    }
+
+    public class FileDto
+    {
+        /// <summary>
+		/// 附件名称
+		/// </summary>
+		public string? Name { get; set; }
+
+        /// <summary>
+        /// 附件KEY
+        /// </summary>
+        public string? Key { get; set; }
+
+
+        /// <summary>
+        /// 附件流程KEY
+        /// </summary>
+        public string? FlowKey { get; set; }
+
+
+        /// <summary>
+        /// 附件类型
+        /// </summary>
+        public string? Type { get; set; }
+
+        /// <summary>
+        /// 部门ID
+        /// </summary>
+        public string? OrgId { get; set; }
+
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string? OrgName { get; set; }
+
+        /// <summary>
+        /// 上传人Id
+        /// </summary>
+        public string? UserId { get; set; }
+
+        /// <summary>
+        /// 上传人名称
+        /// </summary>
+        public string? UserName { get; set; }
+
+
+        /// <summary>
+        /// 是否公开
+        /// </summary>
+        public int? Publicity { get; set; }
+
+
+        /// <summary>
+        /// 附件分类
+        /// </summary>
+        public string? Classify { get; set; }
+
+        /// <summary>
+        /// 附件
+        /// </summary>
+        public string? Additions { get; set; }
+
+        /// <summary>
+        /// 附件路径
+        /// </summary>
+        public string? Path { get; set; }
+
+    }
+}

+ 13 - 0
src/HotlineQuery.Sdk/HotlineQuery.Sdk.csproj

@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="SqlSugarCore" Version="5.1.4.166" />
+  </ItemGroup>
+
+</Project>

+ 51 - 0
src/HotlineQuery.Sdk/OrderPublish.cs

@@ -0,0 +1,51 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotlineQuery.Sdk
+{
+    /// <summary>
+    /// 发布
+    /// </summary>
+    [SugarTable("order_publish")]
+    public class OrderPublish
+    {
+        [SugarColumn(IsPrimaryKey = true)]
+        public string Id { get; set; }
+
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 工单编码(冗余)
+        /// </summary>
+        public string No { get; set; }
+
+        /// <summary>
+        /// 发布范围
+        /// </summary>
+        public bool PublishState { get; set; }
+
+        /// <summary>
+        /// 整理标题
+        /// </summary>
+        public string ArrangeTitle { get; set; }
+
+        /// <summary>
+        /// 整理内容
+        /// </summary>
+        public string ArrangeContent { get; set; }
+
+        /// <summary>
+        /// 整理结果
+        /// </summary>
+        public string ArrangeOpinion { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+    }
+}