using DocumentFormat.OpenXml.Wordprocessing;
using Hotline.Application.Bulletin;
using Hotline.Article;
using Hotline.Caching.Interfaces;
using Hotline.FlowEngine.Workflows;
using Hotline.Orders;
using Hotline.Push.Notifies;
using Hotline.Repository.SqlSugar.Extensions;
using Hotline.Settings;
using Hotline.Settings.Hotspots;
using Hotline.Share.Dtos;
using Hotline.Share.Dtos.Article;
using Hotline.Share.Dtos.DataSharingSearch;
using Hotline.Share.Dtos.FlowEngine.Workflow;
using Hotline.Share.Dtos.Order;
using Hotline.Share.Enums.Article;
using Hotline.Share.Enums.FlowEngine;
using Hotline.Share.Enums.Order;
using Hotline.Share.Enums.Push;
using Hotline.WebPortal;
using MapsterMapper;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System.Threading;
using XF.Domain.Exceptions;
using XF.Domain.Repository;
namespace Hotline.Api.Controllers
{
///
/// 提供给DS查询数据用
///
public class DataSharingController : BaseController
{
private readonly IMapper _mapper;
private readonly IOrderRepository _orderRepository;
private readonly IRepository _bulletinRepository;
private readonly IBulletinApplication _bulletinApplication;
private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
private readonly IRepository _workflowTraceRepository;
private readonly IRepository _hotspotTypeRepository;
private readonly IMediator _mediator;
private readonly IRepository _oldPublicDataRepository;
///
///
///
///
///
///
///
///
///
///
///
///
public DataSharingController(IMapper mapper,
IOrderRepository orderRepository,
IRepository bulletinRepository,
IBulletinApplication bulletinApplication,
ISystemDicDataCacheManager sysDicDataCacheManager,
IRepository workflowTraceRepository,
IRepository hotspotTypeRepository,
IMediator mediator,
IRepository oldPublicDataRepository)
{
_mapper = mapper;
_orderRepository = orderRepository;
_bulletinRepository = bulletinRepository;
_bulletinApplication = bulletinApplication;
_sysDicDataCacheManager = sysDicDataCacheManager;
_workflowTraceRepository = workflowTraceRepository;
_hotspotTypeRepository = hotspotTypeRepository;
_mediator = mediator;
_oldPublicDataRepository = oldPublicDataRepository;
}
///
/// 查询受理类型
///
///
[HttpPost("get_accept_type_list")]
[AllowAnonymous]
public async Task> GetAcceptTypeList()
{
//查询数据
var data = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType);
List acceptTypeList = new List();
if (data != null && data.Count > 0)
{
foreach (var item in data)
{
acceptTypeList.Add(new AcceptTypeList()
{
Name = item.DicDataName,
Value = item.DicDataValue
});
}
}
return acceptTypeList;
}
///
/// 根据工单编号和密码查询信件详情
///
///
///
[AllowAnonymous]
[HttpPost("get_order_detail_by_no_pwd")]
public async Task GetOrderDetail([FromBody] GetOrderNoPwdDto dto)
{
var order = await _orderRepository.Queryable()
.Where(p => p.No == dto.No && p.Password == dto.Password)
.WhereIF(!string.IsNullOrEmpty(dto.SourceChannelCode), p => p.SourceChannelCode == dto.SourceChannelCode)
.FirstAsync();
return _mapper.Map(order);
}
///
/// 根据工单编号查询信件详情
///
///
///
[AllowAnonymous]
[HttpPost("get_order_detail_by_no")]
public async Task GetOrderDetailByNo([FromBody] GetOrderDetailDto dto)
{
var order = await _orderRepository.Queryable()
.Where(p => p.No == dto.No)
.FirstAsync();
return _mapper.Map(order);
}
///
/// 根据工单Id查询信件详情
///
///
///
[AllowAnonymous]
[HttpPost("get_order_detail_by_id")]
public async Task GetOrderDetailById([FromBody] GetOrderDetailDto dto)
{
var order = await _orderRepository.Queryable()
.Includes(d => d.OrderPublish)
.Where(p => p.Id == dto.Id)
.FirstAsync();
return _mapper.Map(order);
}
///
/// 平台查询自己写入的工单
///
///
///
[HttpPost("get_order_list_own")]
[AllowAnonymous]
public async Task> GetOrderByList([FromBody] GetOrderList dto)
{
var (total, items) = await _orderRepository.Queryable()
.Where(p => p.SourceChannelCode == dto.SourceChannelCode)
.WhereIF(!string.IsNullOrEmpty(dto.No), p => p.No == dto.No)
.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(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
.WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
.WhereIF(dto.EndTime.HasValue, p => p.CreationTime < dto.EndTime)
.WhereIF(dto.HandleStateCode == "1", p => p.Status < EOrderStatus.Filed)
.WhereIF(dto.HandleStateCode == "2", p => p.Status >= EOrderStatus.Filed)
.OrderByDescending(p => p.CreationTime)
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
return new PagedDto(total, _mapper.Map>(items));
}
///
/// 查询工单发布后公开的数据
///
///
///
[HttpPost("get_order_list_publish")]
[AllowAnonymous]
public async Task> GetOrderByListOpen([FromBody] GetOrderList dto)
{
var (total, items) = await _orderRepository.Queryable()
.Where(p => p.IsPublicity == true)
.WhereIF(!string.IsNullOrEmpty(dto.No), p => p.No == dto.No)
.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(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
.WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
.WhereIF(dto.EndTime.HasValue, p => p.CreationTime < dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), p => p.AreaCode == dto.AreaCode)
.OrderByDescending(p => p.CreationTime)
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
return new PagedDto(total, _mapper.Map>(items));
}
///
/// 查询工单发布后公开的数据
///
///
///
[HttpPost("get_order_list_publish_all")]
[AllowAnonymous]
public async Task> GetOrderByListAllOpen([FromBody] GetOrderList dto)
{
var queryNew = _orderRepository.Queryable()
.Where(p => p.IsPublicity == true)
.WhereIF(!string.IsNullOrEmpty(dto.No), p => p.No == dto.No)
.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(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
.WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
.WhereIF(dto.EndTime.HasValue, p => p.CreationTime < dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), p => p.AreaCode == dto.AreaCode)
.OrderByDescending(p => p.CreationTime)
.Select(p => new PublishOrderAllDto
{
OrderId = p.Id,
FromName = p.FromName,
Contact = p.Contact,
OrderNo = p.No,
Title = p.Title,
SourceChannel = p.SourceChannel,
SourceChannelCode = p.SourceChannelCode,
AcceptType = p.AcceptType,
AcceptTypeCode = p.AcceptTypeCode,
HotspotName = p.HotspotName,
Content = p.Content,
State = p.Status >= EOrderStatus.Filed ? "办理完成" : "办理中",
ActualOpinion = p.ActualOpinion,
AcceptTime = p.CreationTime,
PubDate = p.OrderPublish.CreationTime,
FiledTime = p.FiledTime
});
var queryold = _oldPublicDataRepository.Queryable()
.WhereIF(!string.IsNullOrEmpty(dto.No), p => p.OrderNo == dto.No)
.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(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
.WhereIF(dto.StartTime.HasValue, p => p.PubDate >= dto.StartTime)
.WhereIF(dto.EndTime.HasValue, p => p.PubDate < dto.EndTime)
.OrderByDescending(p => p.PubDate)
.Select(p => new PublishOrderAllDto
{
OrderId = p.OrderId,
FromName = p.FromName,
Contact = p.Contact,
OrderNo = p.OrderNo,
Title = p.Title,
SourceChannel = p.SourceChannel,
SourceChannelCode = p.SourceChannelCode,
AcceptType = p.AcceptType,
AcceptTypeCode = p.AcceptTypeCode,
HotspotName = p.HotspotName,
Content = p.Content,
State = p.State == "1" ? "办理完成" : "办理中",
ActualOpinion = p.ActualOpinion,
AcceptTime = p.CreationTime,
PubDate = p.PubDate,
FiledTime = p.FiledTime
});
var (total, items) = await _orderRepository.UnionAll(queryNew, queryold)
.OrderByDescending(p => p.PubDate)
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
return new PagedDto(total, items);
}
///
/// 根据工单编号和密码查询流程
///
///
///
[HttpPost("get_workflow_by_no_pwd")]
[AllowAnonymous]
public async Task> GetWorkflowByNoPwd([FromBody] GetOrderNoPwdDto dto)
{
var order = await _orderRepository.Queryable()
.Where(p => p.No == dto.No && p.Password == dto.Password)
.WhereIF(!string.IsNullOrEmpty(dto.SourceChannelCode), p => p.SourceChannelCode == dto.SourceChannelCode)
.FirstAsync();
List workflow = new();
if (order == null)
return workflow;
var data = await _workflowTraceRepository.Queryable()
.Where(p => p.ExternalId == order.Id && p.ModuleCode == "OrderHandle" && p.Status == EWorkflowStepStatus.Handled && p.TraceState == EWorkflowTraceState.Normal)
.OrderBy(p => p.CreationTime)
.ToListAsync();
workflow = _mapper.Map>(data);
return workflow;
}
///
/// 查询公告列表
///
///
///
[HttpPost("query_bulletin_list")]
[AllowAnonymous]
public async Task> QueryBulletinList([FromBody] GetBulletinListDto dto)
{
var (total, items) = await _bulletinRepository.Queryable()
.Where(p => p.LoseEfficacyTime >= DateTime.Now)
.Where(p => SqlFunc.JsonListObjectAny(p.PushRanges, "Key", dto.PushRanges))
.Where(p => p.IsArrive == true && p.BulletinState == EBulletinState.ReviewPass)
.WhereIF(!string.IsNullOrEmpty(dto.BulletinTypeId), d => d.BulletinTypeId == dto.BulletinTypeId)
.OrderByDescending(p => p.BulletinTime)
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
return new PagedDto(total, _mapper.Map>(items));
}
///
/// 公告详情
///
///
///
[HttpPost("get_bulletin_detail")]
[AllowAnonymous]
public async Task GetBulletinEntity([FromBody] GetOrderDetailDto dto)
{
var model = await _bulletinRepository.Queryable()
.Includes(x => x.ExaminMan)
.FirstAsync(x => x.Id == dto.Id && x.IsArrive == true && x.BulletinState == EBulletinState.ReviewPass, HttpContext.RequestAborted);
if (model != null)
{
model.ReadedNum = model.ReadedNum++;
await _bulletinRepository.UpdateAsync(model, HttpContext.RequestAborted);
}
if (model != null && !string.IsNullOrEmpty(model.Content))
model.Content = _bulletinApplication.GetSiteUrls(model.Content);
return _mapper.Map(model);
}
///
/// 今日受理分类统计
///
///
[HttpPost("get_pur_type_report")]
[AllowAnonymous]
public async Task