/// <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)))); } }
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); } }