예제 #1
0
        public async Task <IActionResult> GetAppointmentPersonTimeStatisticsAsync([FromQuery] GetAppointmentPersonTimeStatisticsRequestDto requestDto)
        {
            requestDto.HospitalGuid = UserID;
            var result = await new DoctorAppointmentBiz().GetAppointmentPersonTimeStatisticsAsync(requestDto);

            return(Success(result));
        }
예제 #2
0
        /// <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);
        }