Jelajahi Sumber

质检统计

田爽 3 bulan lalu
induk
melakukan
630178ea20

+ 24 - 0
src/Hotline.Api/Controllers/Bi/BiQualityController.cs

@@ -125,6 +125,30 @@ namespace Hotline.Api.Controllers.Bi
 
 		}
 
+		/// <summary>
+		/// 坐席质检分值分析
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("seats_quality_grade_analyse")]
+		public async Task<SeatsQualityGradeAnalyseDto> SeatsQualityGradeAnalyse([FromQuery] QualityWorkAnalysisRequest dto)
+		{
+			var items = await _qualityApplication.SeatsQualityGradeAnalyse(dto, HttpContext.RequestAborted).FirstAsync(HttpContext.RequestAborted);
+			return items;
+		}
+
+
+		/// <summary>
+		/// 质检分值分析/坐席质检工单分析
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("month_quality_grade")]
+		public async Task<object> MonthQualityGrade([FromQuery] QualityWorkAnalysisRequest dto)
+		{
+			var items = await _qualityApplication.MonthQualityGrade(dto, HttpContext.RequestAborted).ToListAsync(HttpContext.RequestAborted);
+			return items;
+		}
 		#endregion
 	}
 }

+ 3 - 0
src/Hotline.Application/Quality/IQualityApplication.cs

@@ -17,6 +17,9 @@ namespace Hotline.Application.Quality
 		ISugarQueryable<Hotline.Quality.Quality> SeatsQualityAnalyse(PagedKeywordRequest dto, CancellationToken cancellationToken);
 
 		ISugarQueryable<QualityOrderOverviewDto> QualityOrderOverview(QualityWorkAnalysisRequest dto, int allOrderNum, CancellationToken cancellationToken);
+		ISugarQueryable<SeatsQualityGradeAnalyseDto> SeatsQualityGradeAnalyse(QualityWorkAnalysisRequest dto, CancellationToken cancellationToken);
+
+		ISugarQueryable<object> MonthQualityGrade(QualityWorkAnalysisRequest dto, CancellationToken cancellationToken);
 
 	}
 }

+ 70 - 2
src/Hotline.Application/Quality/QualityApplication.cs

@@ -35,6 +35,8 @@ using System.Threading;
 using Hotline.Share.Requests;
 using Hotline.Repository.SqlSugar.TextSearch;
 using SqlSugar;
+using Hotline.Share.Enums.Order;
+using Hotline.Repository.SqlSugar;
 
 namespace Hotline.Application.Quality
 {
@@ -56,6 +58,8 @@ namespace Hotline.Application.Quality
 		private readonly IServiceProvider _serviceProvider;
 		private readonly IRepository<QualityItem> _qualiteyItem;
 		private readonly IRepository<QualityTransferRecords> _qualityTransferRecordsRepository;
+		protected ISugarUnitOfWork<HotlineDbContext> Uow { get; }
+		protected ISqlSugarClient Db { get; }
 
 		public QualityApplication(
             ISessionContext sessionContext,
@@ -73,7 +77,8 @@ namespace Hotline.Application.Quality
 			IServiceProvider serviceProvider,
 			IRepository<QualityItem> qualiteyItem,
 			IRepository<OrderWord> orderWordRepository,
-			IRepository<QualityTransferRecords> qualityTransferRecordsRepository)
+			IRepository<QualityTransferRecords> qualityTransferRecordsRepository,
+			ISugarUnitOfWork<HotlineDbContext> uow)
         {
             _sessionContext = sessionContext;
             _mapper = mapper;
@@ -91,6 +96,8 @@ namespace Hotline.Application.Quality
             _serviceProvider = serviceProvider;
 			_qualiteyItem = qualiteyItem;
             _qualityTransferRecordsRepository = qualityTransferRecordsRepository;
+			Uow = uow;
+			Db = uow.Db;
 		}
 
         /// <summary>
@@ -463,7 +470,8 @@ namespace Hotline.Application.Quality
 
             var query = _qualiteyDetail.Queryable()
                 .Includes(x => x.Quality)
-                .GroupBy(x => x.Name)
+				.Where(x => x.Quality.Source == EQualitySource.Accepted && x.Quality.QualityTime >= dto.StartTime && x.Quality.QualityTime <= dto.EndTime && x.Quality.State == EQualityState.End)
+				.GroupBy(x => x.Name)
                 .Select(x => new QualityOrderOverviewDto
                 {
                     QualityItem = x.Name,
@@ -473,6 +481,66 @@ namespace Hotline.Application.Quality
             return query;
         }
 
+		public ISugarQueryable<SeatsQualityGradeAnalyseDto> SeatsQualityGradeAnalyse(QualityWorkAnalysisRequest dto,CancellationToken cancellationToken)
+		{
+
+			var query = _qualityRepository.Queryable()
+                .Includes(x=>x.Order)
+				.Where(x => x.Source == EQualitySource.Accepted && x.QualityTime >= dto.StartTime && x.QualityTime <= dto.EndTime && x.State == EQualityState.End)
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptorId),x=>x.Order.AcceptorId == dto.AcceptorId)
+				.Select(x => new SeatsQualityGradeAnalyseDto
+				{
+                    NinetyGrade = SqlFunc.AggregateSum(SqlFunc.IIF(x.Grade >= 90, 1, 0)),
+                    EightyGrade = SqlFunc.AggregateSum(SqlFunc.IIF(x.Grade >= 80 &&  x.Grade < 90, 1, 0)),
+					SeventyGrade = SqlFunc.AggregateSum(SqlFunc.IIF(x.Grade >= 70 && x.Grade < 80, 1, 0)),
+					SixtyGrade = SqlFunc.AggregateSum(SqlFunc.IIF(x.Grade >= 60 && x.Grade < 70, 1, 0)),
+					FiftyGrade = SqlFunc.AggregateSum(SqlFunc.IIF(x.Grade < 60, 1, 0))
+				});
+			return query;
+		}
+
+		public ISugarQueryable<object> MonthQualityGrade(QualityWorkAnalysisRequest dto, CancellationToken cancellationToken)
+		{
+            var queryList = Db.Reportable(ReportableDateType.MonthsInLast1years).ToQueryable<DateTime>();
+
+            var qualityList = _qualityRepository.Queryable()
+                .Where(x => x.Source == EQualitySource.Accepted && x.State == EQualityState.End)
+                .WhereIF(dto.MinGrade.HasValue && dto.MaxGrade.HasValue, x => x.Grade >= dto.MinGrade && x.Grade <= dto.MaxGrade)
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptorId), x => x.Order.AcceptorId == dto.AcceptorId);
+
+
+            var query = queryList.LeftJoin(qualityList, (x1, x2) => x2.QualityTime.Value.ToString("yyyy-MM") == x1.ColumnName.ToString("yyyy-MM"))
+                .GroupBy((x1, x2) => x1.ColumnName)
+                .Select((x1, x2) => new
+                {
+					Month = x1.ColumnName.ToString("MM"),
+                    Num = SqlFunc.AggregateDistinctCount(x2.OrderId)
+				});
+
+   //         dto.StartTime = DateTime.Parse(DateTime.Now.Year + "-01-01");
+   //dto.EndTime = DateTime.Parse((DateTime.Now.Year+1) + "-01-01");
+   //var query = _qualityRepository.Queryable()
+   //             .Includes(x => x.Order)
+   //             .Where(x => x.Source == EQualitySource.Accepted && x.QualityTime >= dto.StartTime && x.QualityTime < dto.EndTime && x.State == EQualityState.End)
+   //             .WhereIF(dto.MinGrade.HasValue && dto.MaxGrade.HasValue, x => x.Grade >= dto.MinGrade && x.Grade <= dto.MaxGrade)
+   //             .WhereIF(!string.IsNullOrEmpty(dto.AcceptorId), x => x.Order.AcceptorId == dto.AcceptorId)
+   //             .Select(x => new MonthQualityGradeDto
+   //             {
+   //                 JanuaryNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-01-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		FebruaryNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-02-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		MarchNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-03-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		AprilNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-04-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		MayNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-05-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		JuneNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-06-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		JulyNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-07-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		AugustNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-08-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		SeptemberNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-09-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		OctoberNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-10-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		NovemberNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-11-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //		DecemberNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.QualityTime >= DateTime.Parse(DateTime.Now.Year + "-12-01") && x.QualityTime < DateTime.Parse(DateTime.Now.Year + "-02-01"), 1, 0)),
+   //	});
+			return query;
+		}
 
 	}
 }

+ 65 - 0
src/Hotline.Share/Dtos/Quality/BiQualityDto.cs

@@ -86,5 +86,70 @@ namespace Hotline.Share.Dtos.Quality
 
 	public class SeatsQualityGradeAnalyseDto 
 	{
+		public int NinetyGrade { get; set; }
+
+		public int EightyGrade { get; set; }
+
+		public int SeventyGrade { get; set; }
+
+		public int SixtyGrade { get; set; }
+
+		public int FiftyGrade { get; set; }
 	}
+
+	public class MonthQualityGradeDto
+	{
+
+		/// <summary>
+		/// 一月
+		/// </summary>
+		public int JanuaryNum { get; set; }
+		/// <summary>
+		/// 二月
+		/// </summary>
+		public int FebruaryNum { get; set; }
+		/// <summary>
+		/// 三月
+		/// </summary>
+		public int MarchNum { get; set; }
+		/// <summary>
+		/// 四月
+		/// </summary>
+		public int AprilNum { get; set; }
+		/// <summary>
+		/// 五月
+		/// </summary>
+		public int MayNum { get; set; }
+		/// <summary>
+		/// 六月
+		/// </summary>
+		public int JuneNum { get; set; }
+		/// <summary>
+		/// 七月
+		/// </summary>
+		public int JulyNum { get; set; }
+		/// <summary>
+		/// 八月
+		/// </summary>
+		public int AugustNum { get; set; }
+		/// <summary>
+		/// 九月
+		/// </summary>
+		public int SeptemberNum { get; set; }
+		/// <summary>
+		/// 十月
+		/// </summary>
+		public int OctoberNum { get; set; }
+		/// <summary>
+		/// 十一月
+		/// </summary>
+		public int NovemberNum { get; set; }
+
+		/// <summary>
+		/// 十二月
+		/// </summary>
+		public int DecemberNum { get; set; }
+	}
+
+
 }