|
@@ -3,6 +3,7 @@ using Hotline.Application.Bulletin;
|
|
|
using Hotline.Application.Orders;
|
|
|
using Hotline.Article;
|
|
|
using Hotline.Caching.Interfaces;
|
|
|
+using Hotline.Configurations;
|
|
|
using Hotline.KnowledgeBase;
|
|
|
using Hotline.Orders;
|
|
|
using Hotline.Push.Notifies;
|
|
@@ -22,6 +23,7 @@ using MathNet.Numerics;
|
|
|
using MediatR;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
using SqlSugar;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Cache;
|
|
@@ -53,6 +55,7 @@ namespace Hotline.Api.Controllers
|
|
|
private readonly IRepository<KnowledgeType> _knowledgeTypeRepository;
|
|
|
private readonly IRepository<Knowledge> _knowledgeRepository;
|
|
|
private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
|
|
|
+ private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
|
|
|
|
|
|
public WebPortalController(IMapper mapper,
|
|
|
IMediator mediator,
|
|
@@ -74,7 +77,8 @@ namespace Hotline.Api.Controllers
|
|
|
IRepository<KnowledgeRelationType> knowledgeRelationTypeRepository,
|
|
|
IRepository<KnowledgeType> knowledgeTypeRepository,
|
|
|
IRepository<Knowledge> knowledgeRepository,
|
|
|
- ISystemDicDataCacheManager systemDicDataCacheManager
|
|
|
+ ISystemDicDataCacheManager systemDicDataCacheManager,
|
|
|
+ IOptionsSnapshot<AppConfiguration> appOptions
|
|
|
)
|
|
|
{
|
|
|
_mapper = mapper;
|
|
@@ -98,6 +102,7 @@ namespace Hotline.Api.Controllers
|
|
|
_knowledgeTypeRepository = knowledgeTypeRepository;
|
|
|
_knowledgeRepository = knowledgeRepository;
|
|
|
_systemDicDataCacheManager = systemDicDataCacheManager;
|
|
|
+ _appOptions = appOptions;
|
|
|
}
|
|
|
|
|
|
#region 通知
|
|
@@ -136,6 +141,7 @@ namespace Hotline.Api.Controllers
|
|
|
ArticleListDataDto dataDto = new()
|
|
|
{
|
|
|
PageCount = nPageCount,
|
|
|
+ Total = total,
|
|
|
data = _mapper.Map<IReadOnlyList<ArticleListDto>>(items)
|
|
|
};
|
|
|
|
|
@@ -212,6 +218,45 @@ namespace Hotline.Api.Controllers
|
|
|
return OpenResponse.Ok(WebPortalDeResponse<IReadOnlyList<ArticleDetailsDto>>.Success(dataDto));
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 根据分类获取详情
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [AllowAnonymous]
|
|
|
+ [HttpPost("getarticledetailsbytype")]
|
|
|
+ public async Task<OpenResponse> GetArticleDetailsByType([FromBody] ArticleIdByNumDto dto)
|
|
|
+ {
|
|
|
+ var items = await _bulletinRepository.Queryable()
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.BulletinTypeId), p => p.BulletinTypeId == dto.BulletinTypeId)
|
|
|
+ .OrderByDescending(p => p.CreationTime)
|
|
|
+ .Take(dto.Num)
|
|
|
+ .ToListAsync();
|
|
|
+ List<ArticleDetailsDto> dataDto = [];
|
|
|
+ if (items != null && items.Any())
|
|
|
+ {
|
|
|
+ foreach (var item in items)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(item.Content))
|
|
|
+ item.Content = _bulletinApplication.GetSiteUrls(item.Content);
|
|
|
+
|
|
|
+ dataDto.Add(new()
|
|
|
+ {
|
|
|
+ NoticeID = item.Id,
|
|
|
+ NoticeTypeName = item.BulletinTypeName,
|
|
|
+ NoticeTitle = item.Title,
|
|
|
+ NoticeBMName = item.SourceOrgName,
|
|
|
+ NoticeCreateDate = item.CreationTime,
|
|
|
+ NoticeRCount = item.ReadedNum,
|
|
|
+ WNED_VideoUrl = "",
|
|
|
+ NoticeContent = item.Content
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return OpenResponse.Ok(WebPortalDeResponse<IReadOnlyList<ArticleDetailsDto>>.Success(dataDto));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 上一条和下一条
|
|
|
/// </summary>
|
|
@@ -228,8 +273,16 @@ namespace Hotline.Api.Controllers
|
|
|
;
|
|
|
if (dto.FullSearch == "1")//全文搜索
|
|
|
{
|
|
|
- sugar.Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3" || p.BulletinTypeId == "4")
|
|
|
+ if (_appOptions.Value.IsYiBin)
|
|
|
+ {
|
|
|
+ sugar.Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3" || p.BulletinTypeId == "4")
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Content.Contains(dto.Condition) || p.Title.Contains(dto.Condition));
|
|
|
+ }
|
|
|
+ if (_appOptions.Value.IsZiGong)
|
|
|
+ {
|
|
|
+ sugar.Where(p => p.BulletinTypeId == "5013" || p.BulletinTypeId == "5016" || p.BulletinTypeId == "5011" || p.BulletinTypeId == "5015" || p.BulletinTypeId == "5017")
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Content.Contains(dto.Condition) || p.Title.Contains(dto.Condition));
|
|
|
+ }
|
|
|
}
|
|
|
else//指定分类
|
|
|
{
|
|
@@ -299,8 +352,9 @@ namespace Hotline.Api.Controllers
|
|
|
.Where(p => p.LoseEfficacyTime >= DateTime.Now)
|
|
|
.Where(p => p.IsArrive == true)
|
|
|
.Where(p => SqlFunc.JsonListObjectAny(p.PushRanges, "Key", "2"))
|
|
|
- .Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3" || p.BulletinTypeId == "4")
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Title.Contains(dto.Condition))
|
|
|
+ .WhereIF(_appOptions.Value.IsYiBin, p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3" || p.BulletinTypeId == "4")
|
|
|
+ .WhereIF(_appOptions.Value.IsZiGong, p => p.BulletinTypeId == "5013" || p.BulletinTypeId == "5016" || p.BulletinTypeId == "5011" || p.BulletinTypeId == "5015" || p.BulletinTypeId == "5017")
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Title.Contains(dto.Condition))
|
|
|
.OrderByDescending(p => p.CreationTime)
|
|
|
.Select(it => new
|
|
|
{
|
|
@@ -684,6 +738,7 @@ namespace Hotline.Api.Controllers
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FlowSDate), (p, op) => p.StartTime >= DateTime.Parse(DateTime.Parse(dto.FlowSDate).ToString("yyyy-MM-dd 00:00:00")))//dto.FlowSDate
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FlowEDate), (p, op) => p.StartTime <= DateTime.Parse(DateTime.Parse(dto.FlowEDate).ToString("yyyy-MM-dd 00:00:00")))// dto.FlowEDate
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FlowFrom), (p, op) => p.FromName.Contains(dto.FlowFrom))
|
|
|
+ .WhereIF(dto.IdentityType.HasValue, (p, op) => p.IdentityType == dto.IdentityType)
|
|
|
.OrderByDescending((p, op) => p.CreationTime)
|
|
|
.Select((p, op) => new OrderListDto
|
|
|
{
|
|
@@ -707,6 +762,7 @@ namespace Hotline.Api.Controllers
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FlowSDate), p => p.AcceptTime >= DateTime.Parse(DateTime.Parse(dto.FlowSDate).ToString("yyyy-MM-dd 00:00:00")))//dto.FlowSDate
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FlowEDate), p => p.AcceptTime <= DateTime.Parse(DateTime.Parse(dto.FlowEDate).ToString("yyyy-MM-dd 00:00:00")))// dto.FlowEDate
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FlowFrom), p => p.FromName.Contains(dto.FlowFrom))
|
|
|
+ .WhereIF(dto.IdentityType.HasValue, p => p.IdentityType == dto.IdentityType)
|
|
|
.OrderByDescending(p => p.PubDate)
|
|
|
.Select(p => new OrderListDto
|
|
|
{
|
|
@@ -885,7 +941,7 @@ namespace Hotline.Api.Controllers
|
|
|
}
|
|
|
data.ExternalId = Guid.NewGuid().ToString();
|
|
|
|
|
|
- data.IdentityType = EIdentityType.Citizen;
|
|
|
+ data.IdentityType = dto.IdentityType;
|
|
|
data.Transpond = false;
|
|
|
data.IsEnforcementOrder = false;
|
|
|
|
|
@@ -1135,7 +1191,7 @@ namespace Hotline.Api.Controllers
|
|
|
var rsp = new
|
|
|
{
|
|
|
KnowledgeType = item,
|
|
|
- KnowledgeBaseTags = item,
|
|
|
+ KnowledgeBaseTags = list,
|
|
|
};
|
|
|
return OpenResponse.Ok(WebPortalDeResponse<object>.Success(rsp));
|
|
|
}
|
|
@@ -1152,7 +1208,7 @@ namespace Hotline.Api.Controllers
|
|
|
var typeSpliceName = string.Empty;
|
|
|
if (!string.IsNullOrEmpty(dto.KnowledgeTypeId))
|
|
|
{
|
|
|
- var type = await _knowledgeTypeRepository.GetAsync(x => x.Id == dto.KnowledgeTypeId);
|
|
|
+ var type = await _knowledgeTypeRepository.GetAsync(x => x.Name == dto.KnowledgeTypeId);
|
|
|
typeSpliceName = type?.SpliceName;
|
|
|
}
|
|
|
|
|
@@ -1199,5 +1255,109 @@ namespace Hotline.Api.Controllers
|
|
|
List<KnowledgeInfoDto> dataDto = [detailsDto];
|
|
|
return OpenResponse.Ok(WebPortalDeResponse<IReadOnlyList<KnowledgeInfoDto>>.Success(dataDto));
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询受理类型----受理量
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("getacceptancetypestatisticsbymonth")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task<OpenResponse> GetAcceptanceTypeStatisticsByMonth([FromBody] OrderFormByMonthDto dto)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(dto.StartTime))
|
|
|
+ dto.StartTime = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(dto.EndTime))
|
|
|
+ dto.EndTime = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
|
|
|
+
|
|
|
+ //查询待
|
|
|
+ var listType = await _orderRepository.Queryable()
|
|
|
+ .Where(p => p.CreationTime >= Convert.ToDateTime(dto.StartTime) && p.CreationTime <= Convert.ToDateTime(dto.EndTime) && p.Status > EOrderStatus.WaitForAccept)
|
|
|
+ .Select(it => new
|
|
|
+ {
|
|
|
+ it.AcceptType,
|
|
|
+ it.AcceptTypeCode
|
|
|
+ })
|
|
|
+ .MergeTable()//将查询出来的结果合并成一个新表
|
|
|
+ .GroupBy(it => new { it.AcceptType, it.AcceptTypeCode })//对新表进行分组
|
|
|
+ .Select(it => new
|
|
|
+ {
|
|
|
+ name = it.AcceptType,
|
|
|
+ value = SqlFunc.AggregateCount(it.AcceptTypeCode)
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
+ var formAcceptanceCount = _mapper.Map<List<OrderFormCount>>(listType);
|
|
|
+
|
|
|
+ if (_appOptions.Value.IsZiGong)
|
|
|
+ {
|
|
|
+ List<OrderFormCount> orderForms = new List<OrderFormCount>();
|
|
|
+ List<string> fromName = ["咨询", "投诉", "求助", "建议", "举报", "表扬", "申报"];
|
|
|
+ foreach (var form in fromName)
|
|
|
+ {
|
|
|
+ var data = formAcceptanceCount.FirstOrDefault(p => p.name == form);
|
|
|
+ orderForms.Add(new OrderFormCount()
|
|
|
+ {
|
|
|
+ name = form,
|
|
|
+ value = data == null ? 0 : data.value
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return OpenResponse.Ok(WebPortalDeResponse<List<OrderFormCount>>.Success(orderForms));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return OpenResponse.Ok(WebPortalDeResponse<List<OrderFormCount>>.Success(formAcceptanceCount));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询受理类型---办结量
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("getacceptancetypestatisticsbymonthend")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task<OpenResponse> GetAcceptanceTypeStatisticsByMonthEnd([FromBody] OrderFormByMonthDto dto)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(dto.StartTime))
|
|
|
+ dto.StartTime = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(dto.EndTime))
|
|
|
+ dto.EndTime = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
|
|
|
+
|
|
|
+ //数据查询
|
|
|
+ var listFileType = await _orderRepository.Queryable()
|
|
|
+ .Where(p => p.FiledTime >= Convert.ToDateTime(dto.StartTime) && p.FiledTime <= Convert.ToDateTime(dto.EndTime) && p.Status >= EOrderStatus.Filed)
|
|
|
+ .Select(it => new
|
|
|
+ {
|
|
|
+ it.AcceptType,
|
|
|
+ it.AcceptTypeCode
|
|
|
+ })
|
|
|
+ .MergeTable()//将查询出来的结果合并成一个新表
|
|
|
+ .GroupBy(it => new { it.AcceptType, it.AcceptTypeCode })//对新表进行分组
|
|
|
+ .Select(it => new
|
|
|
+ {
|
|
|
+ name = it.AcceptType,
|
|
|
+ value = SqlFunc.AggregateCount(it.AcceptTypeCode)
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var formFileCount = _mapper.Map<IReadOnlyList<OrderFormCount>>(listFileType);
|
|
|
+ if (_appOptions.Value.IsZiGong)
|
|
|
+ {
|
|
|
+ List<OrderFormCount> orderForms = new List<OrderFormCount>();
|
|
|
+ List<string> fromName = ["咨询", "投诉", "求助", "建议", "举报", "表扬", "申报"];
|
|
|
+ foreach (var form in fromName)
|
|
|
+ {
|
|
|
+ var data = formFileCount.FirstOrDefault(p => p.name == form);
|
|
|
+ orderForms.Add(new OrderFormCount()
|
|
|
+ {
|
|
|
+ name = form,
|
|
|
+ value = data == null ? 0 : data.value
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return OpenResponse.Ok(WebPortalDeResponse<List<OrderFormCount>>.Success(orderForms));
|
|
|
+ }
|
|
|
+ return OpenResponse.Ok(WebPortalDeResponse<IReadOnlyList<OrderFormCount>>.Success(formFileCount));
|
|
|
+ }
|
|
|
}
|
|
|
}
|