Browse Source

Merge branch 'release' of http://110.188.24.182:10023/Fengwo/hotline into release

xf 7 months ago
parent
commit
38ccdb385e

+ 26 - 9
src/Hotline.Api/Controllers/Bigscreen/SeatController.cs

@@ -1,4 +1,6 @@
 using Hotline.Application.Bigscreen;
 using Hotline.Application.Bigscreen;
+using Hotline.Caching.Interfaces;
+using Hotline.Settings;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.AspNetCore.Mvc;
 
 
@@ -7,16 +9,19 @@ namespace Hotline.Api.Controllers.Bigscreen
 	public class SeatController : BaseController
 	public class SeatController : BaseController
 	{
 	{
 		private readonly ISeatStateDataService _seatStateDataService;
 		private readonly ISeatStateDataService _seatStateDataService;
+		private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
 
-		public SeatController(ISeatStateDataService seatStateDataService) {
-			_seatStateDataService = seatStateDataService;
-		}
+        public SeatController(ISeatStateDataService seatStateDataService, ISystemSettingCacheManager systemSettingCacheManager)
+        {
+            _seatStateDataService = seatStateDataService;
+            _systemSettingCacheManager = systemSettingCacheManager;
+        }
 
 
-		/// <summary>
-		/// 首次进入大屏获取数据
-		/// </summary>
-		/// <returns></returns>
-		[AllowAnonymous]
+        /// <summary>
+        /// 首次进入大屏获取数据
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
 		[HttpGet("base_data")]
 		[HttpGet("base_data")]
 		public async Task<object> GetSeatStateData() {
 		public async Task<object> GetSeatStateData() {
 			var call24 = await _seatStateDataService.GetCall24(HttpContext.RequestAborted);
 			var call24 = await _seatStateDataService.GetCall24(HttpContext.RequestAborted);
@@ -25,5 +30,17 @@ namespace Hotline.Api.Controllers.Bigscreen
 			var callAverage = await _seatStateDataService.GetCallAverage(HttpContext.RequestAborted);
 			var callAverage = await _seatStateDataService.GetCallAverage(HttpContext.RequestAborted);
 			return new object[] { call24, callTop10, callList, callAverage };
 			return new object[] { call24, callTop10, callList, callAverage };
 		}
 		}
-	}
+
+        /// <summary>
+        /// 获取监听分机
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpGet("query-listentels")]
+        public async Task<object> GetListenTels()
+        {
+            var listenTels = _systemSettingCacheManager.GetSetting(SettingConstants.ListenTels)?.SettingValue;
+            return listenTels;
+        }
+    }
 }
 }

+ 205 - 0
src/Hotline.Api/Controllers/DataSharingController.cs

@@ -0,0 +1,205 @@
+using Hotline.Article;
+using Hotline.Orders;
+using Hotline.Repository.SqlSugar.Extensions;
+using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.Article;
+using Hotline.Share.Dtos.DataSharingSearch;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Article;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace Hotline.Api.Controllers
+{
+    /// <summary>
+    /// 提供给DS查询数据用
+    /// </summary>
+    public class DataSharingController : BaseController
+    {
+        private readonly IMapper _mapper;
+        private readonly IOrderRepository _orderRepository;
+        private readonly IRepository<Bulletin> _bulletinRepository;
+
+        public DataSharingController(IMapper mapper,
+            IOrderRepository orderRepository,
+            IRepository<Bulletin> bulletinRepository)
+        {
+            _mapper = mapper;
+            _orderRepository = orderRepository;
+            _bulletinRepository = bulletinRepository;
+        }
+
+        /// <summary>
+        /// 根据工单编号和密码查询信件详情
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("get_order_detail_by_no_pwd")]
+        public async Task<OrderDto> 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<OrderDto>(order);
+        }
+
+        /// <summary>
+        /// 根据工单Id查询信件详情
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("get_order_detail_by_id")]
+        public async Task<OrderDto> GetOrderDetailById([FromBody] GetOrderDetailDto dto)
+        {
+            var order = await _orderRepository.Queryable()
+                .Where(p => p.Id == dto.Id)
+                  .WhereIF(!string.IsNullOrEmpty(dto.No), p => p.No == dto.No)
+                  .FirstAsync();
+            return _mapper.Map<OrderDto>(order);
+        }
+
+        /// <summary>
+        /// 平台查询自己写入的工单
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("get_order_list_own")]
+        [AllowAnonymous]
+        public async Task<PagedDto<OrderDto>> 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)
+                .OrderByDescending(p => p.CreationTime)
+                .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+
+            return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+        }
+
+        /// <summary>
+        /// 查询工单发布后公开的数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("get_order_list_publish")]
+        [AllowAnonymous]
+        public async Task<PagedDto<OrderDto>> GetOrderByListOpen([FromBody] GetOrderList dto)
+        {
+            var (total, items) = await _orderRepository.Queryable()
+                .Includes(d => d.OrderPublish)
+                .Where(p => p.OrderPublish.PublishState == 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<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+        }
+
+        /// <summary>
+        /// 查询公告列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("query_bulletin_list")]
+        [AllowAnonymous]
+        public async Task<PagedDto<BulletinDto>> QueryBulletinList([FromQuery] 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<BulletinDto>(total, _mapper.Map<IReadOnlyList<BulletinDto>>(items));
+        }
+
+        /// <summary>
+        /// 公告详情
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("get_bulletin_detail")]
+        [AllowAnonymous]
+        public async Task<BulletinDto> 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);
+            }
+            return _mapper.Map<BulletinDto>(model);
+        }
+
+        /// <summary>
+        /// 今日受理分类统计
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("get_pur_type_report")]
+        [AllowAnonymous]
+        public async Task<object> GetPurTypeReport()
+        {
+            var list = await _orderRepository.Queryable()
+                 .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.AcceptType,
+                    it.AcceptTypeCode
+                })
+                .MergeTable()//将查询出来的结果合并成一个新表
+                 .GroupBy(it => new { it.AcceptType, it.AcceptTypeCode })//对新表进行分组
+                 .Select(it => new
+                 {
+                     PurTypeName = it.AcceptType,
+                     Count = SqlFunc.AggregateCount(it.AcceptTypeCode)
+                 })
+                 .ToListAsync();
+            return list;
+        }
+
+        /// <summary>
+        /// 今日统计
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("get_day_count")]
+        public async Task<object> GetDayCount()
+        {
+            //今日已办结
+            var dayTrandCount = await _orderRepository.Queryable().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 _orderRepository.Queryable().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();
+
+            return new { DayTrandCount = dayTrandCount, DayCount = dayCount };
+
+        }
+    }
+}

+ 8 - 8
src/Hotline.Application/Orders/OrderApplication.cs

@@ -2015,14 +2015,14 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             {
             {
                 EmpId = x.EmployeeId,
                 EmpId = x.EmployeeId,
                 EmpName = x.Employee.Name,
                 EmpName = x.Employee.Name,
-                OrgJudeCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgJudge.HasValue, 1, 0)), //部门扭转总件
-                OrgJudeApprovalingCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgJudge.HasValue && x.JudgeState == EJudgeState.Judging, 1, 0)),
-                OrgJudeSuccessCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgJudge.HasValue && x.JudgeState == EJudgeState.Agreed, 1, 0)),
-                OrgJudeFailCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgJudge.HasValue && x.JudgeState == EJudgeState.UnAgreed, 1, 0)),
-                SeatJudeCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatJudge.HasValue, 1, 0)),
-                SeatJudeApprovalingCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatJudge.HasValue && x.JudgeState == EJudgeState.Judging, 1, 0)),
-                SeatJudeSuccessCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatJudge.HasValue && x.JudgeState == EJudgeState.Agreed, 1, 0)),
-                SeatJudeFailCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatJudge.HasValue && x.JudgeState == EJudgeState.UnAgreed, 1, 0))
+                OrgJudeCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgJudge.HasValue && x.OrgJudge == true && x.JudgeState !=null, 1, 0)), //部门扭转总件
+                OrgJudeApprovalingCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgJudge.HasValue && x.OrgJudge == true && x.JudgeState == EJudgeState.Judging, 1, 0)),
+                OrgJudeSuccessCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgJudge.HasValue && x.OrgJudge== true && x.JudgeState == EJudgeState.Agreed, 1, 0)),
+                OrgJudeFailCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgJudge.HasValue && x.OrgJudge == true && x.JudgeState == EJudgeState.UnAgreed, 1, 0)),
+                SeatJudeCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatJudge.HasValue && x.SeatJudge == true && x.JudgeState!=null, 1, 0)),
+                SeatJudeApprovalingCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatJudge.HasValue && x.SeatJudge == true && x.JudgeState == EJudgeState.Judging, 1, 0)),
+                SeatJudeSuccessCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatJudge.HasValue && x.SeatJudge == true && x.JudgeState == EJudgeState.Agreed, 1, 0)),
+                SeatJudeFailCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatJudge.HasValue && x.SeatJudge == true && x.JudgeState == EJudgeState.UnAgreed, 1, 0))
             });
             });
     }
     }
 
 

+ 17 - 0
src/Hotline.Share/Dtos/DataSharingSearch/GetBulletinListDto.cs

@@ -0,0 +1,17 @@
+using Hotline.Share.Requests;
+
+namespace Hotline.Share.Dtos.DataSharingSearch
+{
+    public record GetBulletinListDto : PagedRequest
+    {
+        /// <summary>
+        /// 发布范围
+        /// </summary>
+        public string PushRanges { get; set; } = "2";
+
+        /// <summary>
+        /// 公告类型
+        /// </summary>
+        public string? BulletinTypeId { get; set; }
+    }
+}

+ 56 - 0
src/Hotline.Share/Dtos/DataSharingSearch/GetOrderDetailDto.cs

@@ -0,0 +1,56 @@
+using Hotline.Share.Requests;
+
+namespace Hotline.Share.Dtos.DataSharingSearch
+{
+    public class GetOrderDetailDto
+    {
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string? No { get; set; }
+    }
+
+    public record GetOrderList : PagedRequest
+    {
+        /// <summary>
+        /// 平台名称
+        /// </summary>
+        public string? SourceChannelCode { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string? No { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// 手机号
+        /// </summary>
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 受理类型编码
+        /// </summary>
+        public string AcceptTypeCode { get; set; }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        /// <summary>
+        /// 区域ID
+        /// </summary>
+        public string? AreaCode { get; set; }
+    }
+}

+ 26 - 0
src/Hotline.Share/Dtos/DataSharingSearch/GetOrderNoPwdDto.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.DataSharingSearch
+{
+    public class GetOrderNoPwdDto
+    {
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public string No {  get; set; }
+
+        /// <summary>
+        /// 密码
+        /// </summary>
+        public string Password {  get; set; }
+
+        /// <summary>
+        /// 平台名称
+        /// </summary>
+        public string? SourceChannelCode {  get; set; }
+    }
+}

+ 1 - 1
src/Hotline.Share/Hotline.Share.csproj

@@ -7,7 +7,7 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.94</Version>
+    <Version>1.0.96</Version>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 5 - 0
src/Hotline/Settings/SettingConstants.cs

@@ -469,5 +469,10 @@ namespace Hotline.Settings
         /// 企业专席配置	
         /// 企业专席配置	
         /// </summary>
         /// </summary>
         public const string EnterpriseSeats = "EnterpriseSeats";
         public const string EnterpriseSeats = "EnterpriseSeats";
+
+        /// <summary>
+        /// 监听分机号
+        /// </summary>
+        public const string ListenTels = "ListenTels";
     }
     }
 }
 }