|
@@ -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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|