/// <summary>
 /// 根据请求参数类型计算均值
 /// </summary>
 /// <param name="request"></param>
 /// <param name="total"></param>
 /// <returns></returns>
 int GetAvgByType(GetHospitaHistoricalDoctorRequestDto request, int total)
 {
     if (request.Type == 0)
     {
         return(total);
     }
     else if (request.Type == 1)
     {
         return(Convert.ToInt32(Math.Ceiling((decimal)total / 7)));
     }
     else
     {
         var day = ((request.EndDate.Value - request.BeginDate.Value).Days);
         return(Convert.ToInt32(Math.Ceiling((decimal)total / (day + 1))));
     }
 }
Example #2
0
        public async Task <IActionResult> GetHospitalDoctorConsultRank([FromQuery]
                                                                       GetHospitaHistoricalDoctorRequestDto requestDto)
        {
            if (requestDto.Type < 0 || requestDto.Type > 2)
            {
                return(Failed(ErrorCode.Empty, "请求参数不正确"));
            }

            if (requestDto.Type == 2)
            {
                if (!requestDto.BeginDate.HasValue || !requestDto.EndDate.HasValue)
                {
                    return(Success(ErrorCode.Empty, "开始日期或结束日期为空"));
                }
            }

            requestDto.HospitalGuid = UserID;

            var hospitalBiz = new HospitalManagerBiz();

            var response = await hospitalBiz.GetHospitalDoctorConsultRank(requestDto);

            return(Success(response));
        }
        /// <summary>
        /// 获取医院上线医生历史统计
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <GetHospitaHistoricalOnlineDoctorResponseDto> GetHospitaHistoricalOnlineDoctorNumber(GetHospitaHistoricalDoctorRequestDto request)
        {
            var response = new GetHospitaHistoricalOnlineDoctorResponseDto();

            using (var conn = MySqlHelper.GetConnection())
            {
                #region 查询医生在线
                var sql = @"SELECT 
	                    IFNULL(SUM(o.online_number),0) AS online_number,
                        IFNULL(SUM(o.total_number),0) AS total_number
                    FROM t_doctor_historical_online_statistic AS o
                    WHERE o.hospital_guid = @hospitalGuid ";

                sql = SqlWhere(request.Type, sql);

                var online = (await conn.QueryFirstOrDefaultAsync <HospitalOnline>(sql, new
                {
                    request.HospitalGuid,
                    beginDate = request.BeginDate?.ToString("yyyy-MM-dd"),
                    endDate = request.EndDate?.ToString("yyyy-MM-dd")
                }));
                #endregion

                #region 查询用户咨询
                sql = @"SELECT 
	                    IFNULL(SUM( o.number),0) AS number
                    FROM t_doctor_historical_consult_statistic AS o
                    WHERE o.hospital_guid = @hospitalGuid ";

                sql = SqlWhere(request.Type, sql);

                var consultTotal = (await conn.QueryFirstOrDefaultAsync <int>(sql, new
                {
                    request.HospitalGuid,
                    beginDate = request.BeginDate?.ToString("yyyy-MM-dd"),
                    endDate = request.EndDate?.ToString("yyyy-MM-dd")
                }));
                #endregion

                //统计医生上线
                response.OnlineTotal = online.OnlineNumber;
                response.AvgOnline   = GetAvgByType(request, online.OnlineNumber);

                //统计用户咨询
                response.ConsultTotal = consultTotal;
                response.AvgConsult   = GetAvgByType(request, response.ConsultTotal);

                //统计医生上线比例
                if (response.OnlineTotal > 0)
                {
                    response.OnlineRatio = Math.Round((decimal)online.OnlineNumber / online.TotalNumber, 4) * 100;
                }
            }
            return(response);
        }
        /// <summary>
        /// 获取医院医生解答问题排行榜
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <List <GetHospitalDoctorAnswerQuestionRankResponseDto> > GetHospitalDoctorAnswerQuestionRank(GetHospitaHistoricalDoctorRequestDto request)
        {
            using (var conn = MySqlHelper.GetConnection())
            {
                var sql = $@"SELECT 
				                u.user_name as `name`,
							   (
                                    SELECT 
                                        IFNULL(SUM(o.times),0) 
                                    FROM      t_doctor_answer_question_statistic as o 
                                    WHERE o.doctor_guid = u.user_guid {SqlWhere(request.Type, string.Empty)}
                               ) AS times
						   FROM t_utility_user as u
								INNER JOIN t_doctor as d ON d.doctor_guid = u.user_guid
						   WHERE d.`status` = 'approved' AND d.`enable` = 1 
                           AND d.hospital_guid = @hospitalGuid ";

                var rankings = (await conn.QueryAsync <GetHospitalDoctorAnswerQuestionRankResponseDto>
                                    (sql, new
                {
                    request.HospitalGuid,
                    beginDate = request.BeginDate?.ToString("yyyy-MM-dd"),
                    endDate = request.EndDate?.ToString("yyyy-MM-dd")
                }))
                               .OrderByDescending(d => d.Times)
                               .GroupBy(x => x.Times)
                               .SelectMany((g, i) => g.Select(e => new GetHospitalDoctorAnswerQuestionRankResponseDto()
                {
                    Name  = e.Name,
                    Times = e.Times,
                    Rank  = i + 1
                })).ToList();

                return(rankings);
            }
        }