public async Task <IActionResult> GetAppointmentPersonTimeStatisticsAsync([FromQuery] GetAppointmentPersonTimeStatisticsRequestDto requestDto) { requestDto.HospitalGuid = UserID; var result = await new DoctorAppointmentBiz().GetAppointmentPersonTimeStatisticsAsync(requestDto); return(Success(result)); }
/// <summary> /// 获取诊所挂号趋势统计数据 /// </summary> /// <param name="requestDto"></param> /// <returns></returns> public async Task <GetAppointmentPersonTimeStatisticsResponseDto> GetAppointmentPersonTimeStatisticsAsync(GetAppointmentPersonTimeStatisticsRequestDto requestDto) { requestDto.StartDate = requestDto.StartDate.Date; requestDto.EndDate = requestDto.EndDate.Date.AddDays(1).AddSeconds(-1); var sql = @"SELECT DATE_FORMAT( appointment_time, '%Y-%m-%d' ) AS appointment_date, count( appointment_guid ) AS appointment_quantity FROM t_consumer_doctor_appointment WHERE hospital_guid = @HospitalGuid AND `status` <>'Cancel' AND appointment_time BETWEEN @StartDate AND @EndDate GROUP BY appointment_date ORDER BY appointment_date" ; var dailyStatistics = new List <GetAppointmentPersonTimeStatisticsDto>(); using (var conn = MySqlHelper.GetConnection()) { dailyStatistics = (await conn.QueryAsync <GetAppointmentPersonTimeStatisticsDto>(sql, requestDto)).ToList(); } var dates = new List <string>(); var startDate = requestDto.StartDate; while (startDate <= requestDto.EndDate.Date) { dates.Add(startDate.ToString("yyyy-MM-dd")); startDate = startDate.AddDays(1).Date; } //连续日期左连接预约统计数据,得到连续日期的预约统计数据,无数据设置为0 var consecutiveDates = dates.GroupJoin(dailyStatistics, d => d, s => s.AppointmentDate, (d, gs) => new GetAppointmentPersonTimeStatisticsDto { AppointmentDate = d, AppointmentQuantity = (gs.FirstOrDefault()?.AppointmentQuantity) ?? 0 }).OrderBy(a => a.AppointmentDate).ToList(); var result = new GetAppointmentPersonTimeStatisticsResponseDto { AppointmentDates = dates, StatisticsDatas = consecutiveDates }; return(result); }