/// <summary> /// 取得情感資訊 /// </summary> public IOTProjectMoctionViewModel <IOTProjectAvgDataResponse> GetMotionData(string circleKey) { var sensors = mqttDeviceService.GetDeviceSensors(Convert.ToInt64(DeviceEnum.EMotion).ToString(), accessKey).Result; var avgResponse = SetCourseStatusInitData(); var circleMemberRoleService = new Service.Backend.CircleMemberService(); var circleMemberDatas = circleMemberRoleService.GetCircleMemberRoleListByCircleKey(circleKey.ToLower()); var memberCount = circleMemberDatas.FirstOrDefault() != null?circleMemberDatas.Count() : 0; var voteService = new VoteService(); var list = voteService.GetList(circleKey); if (list != null) { var index = 0; var avgPresentCount = 0; var avgParticipateCount = 0; var itemList = voteService.GetItemListByCircleKey(circleKey); //計算參與平均數 foreach (var vote in list) { avgPresentCount += vote.PresentCount.HasValue ? vote.PresentCount.Value : 0; var items = itemList.Where(t => t.ActVoteId == vote.VoteId).ToList(); foreach (var item in items) { avgParticipateCount += item.ChooseCount; } index++; } avgPresentCount = avgPresentCount / index; avgParticipateCount = avgParticipateCount / index; avgResponse.ParticipateCount = avgParticipateCount; avgResponse.PresentCount = avgPresentCount; //計算參與率 avgResponse.ParticipateRate = (avgParticipateCount != 0 && avgPresentCount != 0) ? Math.Round((Convert.ToDouble(avgParticipateCount) / Convert.ToDouble(avgPresentCount)) * 100, 0) : 0; } foreach (var sensor in sensors) { //情緒平均資料 if (sensor.Id == "FeelingAvg") { var sensorData = sensor.Value.FirstOrDefault(); if (sensorData == null || sensorData.Count() <= 0) { continue; } try { var apiData = JsonConvert.DeserializeObject <IOTProjectViewModel <IOTProjectAverageData> >(sensorData); var statusIndex = 0; var sensorMemberCount = 0.00; foreach (var data in apiData.Data) { var _data = new IOTProjectAvgDataResponse() { StatusCountAvg = Math.Round(data.ChooseCountAvg, 0), StatusID = data.ChooseID }; sensorMemberCount += _data.StatusCountAvg; avgResponse.Status[statusIndex] = _data; statusIndex++; } foreach (var responseData in avgResponse.Status) { responseData.Percentage = Math.Round((responseData.StatusCountAvg / sensorMemberCount) * 100, 0); } avgResponse.RecordTime = apiData.RecordTime; } catch (Exception ex) { return(avgResponse); } } } return(avgResponse); }