public void ShouldGetRangeRight(decimal input, BloodSugarState expected) { // arrange var evt = new BloodSugarEvent { BloodSugarLevel = input }; // act var result = SugarStateFinder.Get(evt); // assert result.Should().Be(expected); }
/// <summary> /// 获取血糖状态结果 /// </summary> /// <param name="envir">血糖监视环境</param> /// <param name="bloodGlucose">血糖值</param> /// <returns></returns> public BloodSugarState GetBloodSugarState(int envir, double bloodGlucose) { BloodSugarState bloodSugarState = BloodSugarState.NotSet; var httpClient = new OAuthHttpClient(OAuthToken) { BaseAddress = new Uri(string.Format("{0}/ATM/GetBloodSugarState?envir={1}&bloodGlucose={2}", "http://rempapi.e24health.com/Screen", envir, bloodGlucose)) }; var response = httpClient.GetAsync("").Result; if (response.StatusCode == HttpStatusCode.OK) { var subResult = response.Content.ReadAsStringAsync().Result; if (subResult != null) { subResult = subResult.Substring(1, subResult.Length - 2); var obj = JsonConvert.DeserializeObject <M_APIReturnMsg>(subResult).ReturnData; bloodSugarState = (BloodSugarState)Enum.Parse(typeof(BloodSugarState), obj.ToString()); } } return(bloodSugarState); }
//加载 private void ThahResult_Load(object sender, EventArgs e) { try { M_QuestionnaireUserDetail questionnaireUserDetail = ClientInfo.GetQuestionnaireByCode(QuestionnaireCode.Thah); //如果本地问卷记录为空,则从数据库取数据 if (questionnaireUserDetail == null) { questionnaireUserDetail = screenWebapiClient.GetQuestionnaireUserDetailById(Properties.Settings.Default.QuestionnaireRecodId); if (questionnaireUserDetail != null) { questionnaireUserDetail.Questions = screenWebapiClient.GetQuestionnaireResultDetails(questionnaireUserDetail.QuestionnaireRecodId); } } //问卷答题时间 answerTime = questionnaireUserDetail != null ? questionnaireUserDetail.AnswerTime : DateTime.Now; //将游客的结果保存为xml if (LoginInfo.GetInstance().Name.Equals("")) { if (questionnaireUserDetail != null && questionnaireUserDetail.Questions != null && questionnaireUserDetail.Questions.Any()) { string number = Properties.Settings.Default.ScreenNumber.ToString(); switch (number.Length) { case 1: number = "000" + number; break; case 2: number = "00" + number; break; case 3: number = "0" + number; break; } SaveXml saveXml = new SaveXml(); saveXml.AddXmlElement(number, questionnaireUserDetail.Questions); //显示游客编号 lblVisitor.Text += number; lblVisitor.Visible = true; } } //将登录人与活动关联 if (!LoginInfo.GetInstance().Name.Equals("")) { new CottageActivityManager().AddPToCActivity(); } //将本次问卷的得分更新 if (questionnaireUserDetail != null && !string.IsNullOrEmpty(LoginInfo.GetInstance().Name)) { ClientInfo.UpdateQuestionnaireStatusScoreAndMemberFeatures(questionnaireUserDetail, 0, new List <int> { int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedPrehypertension")), int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedFirstStageHypertension")), int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedSecondStageHypertension")), int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedPrediabetes")), int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedDiabetes")), int.Parse(ConfigHelper.GetAppsettings("ThahHigherBloodSugar")) }); } //分析结果 //***************************************血压结果*********************************************** int? sex = null; int? age = null; short?height = null; //收缩压 int?sbpValue = null; //舒张压 int?dbpValue = null; //第1题的性别:0 男、 1 女 string answer1 = ClientInfo.GetAnswerByCode(QuestionnaireCode.Thah, QuestionnaireCode.Thah + ".1"); if (answer1.Contains("A")) { //男 sex = 0; } if (answer1.Contains("B")) { //女 sex = 1; } //第2题的年龄 string answer2 = ClientInfo.GetAnswerByCode(QuestionnaireCode.Thah, QuestionnaireCode.Thah + ".2"); if (!string.IsNullOrEmpty(answer2)) { age = int.Parse(answer2.Substring(0, answer2.Length - 1)); } //第3题的身高 string answer3 = ClientInfo.GetAnswerByCode(QuestionnaireCode.Thah, QuestionnaireCode.Thah + ".3"); if (!string.IsNullOrEmpty(answer3)) { height = short.Parse(answer3.Substring(0, answer3.Length - 1)); } //第六题,收缩压和舒张压 string answer6 = ClientInfo.GetAnswerByCode(QuestionnaireCode.Thah, QuestionnaireCode.Thah + ".6"); if (!string.IsNullOrEmpty(answer6)) { string[] strs6 = answer6.Substring(0, answer6.Length - 1).Split(','); if (!string.IsNullOrEmpty(strs6[0])) { sbpValue = int.Parse(strs6[0]); } if (!string.IsNullOrEmpty(strs6[1])) { dbpValue = int.Parse(strs6[1]); } } //分析结果 if (sex.HasValue && age.HasValue && height.HasValue && sbpValue.HasValue && dbpValue.HasValue) { BloodPressureState bloodPressureState = screenWebapiClient.GetBloodPressureResult(sex.Value, age.Value, height.Value, sbpValue.Value, dbpValue.Value); //血压状态正常 if (bloodPressureState == BloodPressureState.Normal) { lblResult.Text += "您本次测定的血压为:" + sbpValue + "/" + dbpValue + " mmHg,<P90th 初步定义为正常血压。(收缩压:" + sbpValue + "和舒张压:" + dbpValue + "小于P90th)\r\n"; printResult = "您本次测定的血压为:" + sbpValue + "/" + dbpValue + " mmHg,<\r\n" + "P90th。初步定义为正常血压。(收缩压\r\n" + ":" + sbpValue + "和舒张压:" + dbpValue + "小于P90th)\r\n"; lblAppraise.Text = "您目前血压正常,配合良好的睡眠、健康的饮食和适当的体育锻炼有助于维持健康血压水平。\r\n"; printAppraise.Append(@"您目前血压正常,配合良好的睡眠、健康 的饮食和适当的体育锻炼有助于维持健康 血压水平。" + "\r\n"); } //疑似高血压前期 else if (bloodPressureState == BloodPressureState.EarlyStage) { lblResult.Text += "您本次测定的血压为:" + sbpValue + "/" + dbpValue + " mmHg,≥ P90th 且 <P95th疑似高血压前期,需进一步确诊。(收缩压:" + sbpValue + "或舒张压" + dbpValue + "≥ P90th,且收缩压:" + sbpValue + "和舒张压" + dbpValue + "<P95th)\r\n"; printResult = "您本次测定的血压为:" + sbpValue + "/" + dbpValue + " mmHg,≥\r\n" + "P90th 且 <P95th疑似高血压前期,需进\r\n" + "一步确诊。(收缩压:" + sbpValue + "或舒张压" + dbpValue + "≥\r\n" + "P90th,且收缩压:" + sbpValue + "和舒张压" + dbpValue + "<\r\nP95th)\r\n"; lblAppraise.Text = "青少年高血压前期可通过非药物治疗的健康管理方式进行调节,如不及早进行干预,易进一步转化。建议您咨询专科医生,并在医院作进一步检查,提早预知疾病风险并及时进行健康管理。\r\n"; printAppraise.Append(@"青少年高血压前期可通过非药物治疗的健 康管理方式进行调节,如不及早进行干预 ,易进一步转化。建议您咨询专科医生, 并在医院作进一步检查,提早预知疾病风 险并及时进行健康管理。" + "\r\n"); //给用户打标签 if (!LoginInfo.GetInstance().Name.Equals("")) { new PatientRecordsManager().UpdatePatientAllRecords( int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedPrehypertension")), "疑似高血压前期"); } } //疑似一级高血压 else if (bloodPressureState == BloodPressureState.Primary) { lblResult.Text += "您本次测定的血压为:" + sbpValue + "/" + dbpValue + " mmHg,≥ P95th 且 <P99th+5 mmHg 疑似一级高血压,需进一步确诊。(收缩压:" + sbpValue + "或舒张压:" + dbpValue + "≥ P95th,且收缩压:" + sbpValue + "和舒张压" + dbpValue + "< P99th+5 mmHg)\r\n"; printResult = "您本次测定的血压为:" + sbpValue + "/" + dbpValue + " mmHg,≥\r\n" + "P95th 且 <P99th+5 mmHg 疑似一级高血\r\n压," + "需进一步确诊。(收缩压:" + sbpValue + "或舒张\r\n压:" + "" + dbpValue + "≥ P95th,且收缩压:" + sbpValue + "和舒张压" + dbpValue + "\r\n" + "< P99th+5 mmHg)\r\n"; lblAppraise.Text = "青少年一级高血压可通过非药物治疗的健康管理方式进行调节,如不及早进行干预,易进一步转化。建议您咨询专科医生,并在医院作进一步检查,提早预知疾病风险并及时进行健康管理。\r\n"; printAppraise.Append(@"青少年一级高血压可通过非药物治疗的健 康管理方式进行调节,如不及早进行干预 ,易进一步转化。建议您咨询专科医生, 并在医院作进一步检查,提早预知疾病风 险并及时进行健康管理。" + "\r\n"); //给用户打标签 if (!LoginInfo.GetInstance().Name.Equals("")) { new PatientRecordsManager().UpdatePatientAllRecords( int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedFirstStageHypertension")), "疑似一级高血压"); } } //疑似二级高血压 else if (bloodPressureState == BloodPressureState.TwoStage) { lblResult.Text += "您本次测定的血压为:" + sbpValue + "/" + dbpValue + " mmHg,≥ P99th+5 mmHg 疑似二级高血压,需进一步确诊。(收缩压:" + sbpValue + "或舒张压:" + dbpValue + "≥ P99th+5 mmHg)\r\n"; printResult = "您本次测定的血压为:" + sbpValue + "/" + dbpValue + " mmHg,≥\r\n" + "P99th+5 mmHg 疑似二级高血压,需进一步\r\n" + "确诊。(收缩压:" + sbpValue + "或舒张压:" + dbpValue + "≥\r\n" + "P99th+5 mmHg)\r\n"; lblAppraise.Text = "您血压的初步筛查结果为二级高血压,建议您及早咨询专科医生,并在医院作进一步检查。必要时需采用药物治疗并配合健康管理方式进行血压控制。" + "\r\n"; printAppraise.Append(@"您血压的初步筛查结果为二级高血压,建 议您及早咨询专科医生,并在医院作进一 步检查。必要时需采用药物治疗并配合健 康管理方式进行血压控制。" + "\r\n"); //给用户打标签 if (!LoginInfo.GetInstance().Name.Equals("")) { new PatientRecordsManager().UpdatePatientAllRecords( int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedSecondStageHypertension")), "疑似二级高血压"); } } //***************************************血糖结果*********************************************** //第七题 int? envir = null; double?bloodGlucose = null; string answer7 = ClientInfo.GetAnswerByCode(QuestionnaireCode.Thah, QuestionnaireCode.Thah + ".7"); if (!string.IsNullOrEmpty(answer7)) { string[] strs = answer7.Substring(0, answer7.Length - 1).Split(','); //空腹 if (strs[0].Contains("A")) { envir = (int)BloodSugarEnvir.Kongfu; } //餐后2小时 if (strs[0].Contains("B")) { envir = (int)BloodSugarEnvir.Canhou; } //随机血糖 if (strs[0].Contains("C")) { envir = (int)BloodSugarEnvir.Suiji; } //填写的数值 if (!string.IsNullOrEmpty(strs[1])) { bloodGlucose = double.Parse(strs[1]); } if (envir.HasValue && bloodGlucose.HasValue) { BloodSugarState bloodSugarState = screenWebapiClient.GetBloodSugarState(envir.Value, bloodGlucose.Value); if (strs[0].Contains("A")) { //正常血糖值 if (bloodSugarState == BloodSugarState.Normal) { lblResult.Text += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,<5.6 mmol/L 初步定义为正常血糖值。\r\n"; printResult += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,<\r\n" + "5.6 mmol/L 初步定义为正常血糖值。\r\n"; lblAppraise.Text += "您目前血糖正常,配合良好的睡眠、健康的饮食和适当的体育锻炼有助于维持健康血糖水平。\r\n"; printAppraise.Append(@"您目前血糖正常,配合良好的睡眠、健康 的饮食和适当的体育锻炼有助于维持健康 血糖水平。" + "\r\n"); } //疑似糖尿病前期 else if (bloodSugarState == BloodSugarState.EarlyStage) { lblResult.Text += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥5.6 mmol/L 且<7 mmol/L,疑似糖尿病前期,需进一步确诊。\r\n"; printResult += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥\r\n" + "5.6 mmol/L 且<7 mmol/L,疑似糖尿病\r\n" + "前期,需进一步确诊。\r\n"; lblAppraise.Text += "您疑似糖尿病前期,为从正常过渡到糖尿病的过渡阶段,必要时采用药物治疗并配合健康管理方式进行血糖控制,有可能使血糖恢复正常。建议您及早咨询专科医生,并在医院作进一步检查。\r\n"; printAppraise.Append(@"您疑似糖尿病前期,为从正常过渡到糖尿 病的过渡阶段,必要时采用药物治疗并配 合健康管理方式进行血糖控制,有可能使 血糖恢复正常。建议您及早咨询专科医生 ,并在医院作进一步检查。" + "\r\n"); //给用户打标签 if (!LoginInfo.GetInstance().Name.Equals("")) { new PatientRecordsManager().UpdatePatientAllRecords( int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedPrediabetes")), "疑似糖尿病前期"); } } //疑似糖尿病 else if (bloodSugarState == BloodSugarState.SuspectedDiabetes) { lblResult.Text += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥7 mmol/L,疑似糖尿病,需进一步确诊。\r\n"; printResult += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥\r\n" + "7 mmol/L,疑似糖尿病,需进一步确\r\n" + "诊。\r\n"; lblAppraise.Text += "依据您的血糖水平,疑似为糖尿病,建议您及早咨询专科医生,并在医院作进一步检查。必要时需采用药物治疗并配合健康管理方式进行血糖控制。\r\n"; printAppraise.Append(@"依据您的血糖水平,疑似为糖尿病,建议 您及早咨询专科医生,并在医院作进一步 检查。必要时需采用药物治疗并配合健康 管理方式进行血糖控制。" + "\r\n"); //给用户打标签 if (!LoginInfo.GetInstance().Name.Equals("")) { new PatientRecordsManager().UpdatePatientAllRecords( int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedDiabetes")), "疑似糖尿病"); } } } else if (strs[0].Contains("B")) { if (bloodSugarState == BloodSugarState.Normal) { lblResult.Text += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,<7.8 mmol/L 初步定义为正常血糖值。\r\n"; printResult += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,<\r\n" + "7.8 mmol/L 初步定义为正常血糖\r\n" + "值。\r\n"; lblAppraise.Text += "您目前血糖正常,配合良好的睡眠、健康的饮食和适当的体育锻炼有助于维持健康血糖水平。\r\n"; printAppraise.Append(@"您目前血糖正常,配合良好的睡眠、健康 的饮食和适当的体育锻炼有助于维持健康 血糖水平。" + "\r\n"); } //疑似糖尿病前期 else if (bloodSugarState == BloodSugarState.EarlyStage) { lblResult.Text += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥7.8 mmol/L 且<11.1 mmol/L,疑似糖尿病前期,需进一步确诊。\r\n"; printResult += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥\r\n" + "7.8 mmol/L 且<11.1 mmol/L,疑似糖\r\n" + "尿病前期,需进一步确诊。\r\n"; lblAppraise.Text += "您疑似糖尿病前期,为从正常过渡到糖尿病的过渡阶段,必要时采用药物治疗并配合健康管理方式进行血糖控制,有可能使血糖恢复正常。建议您及早咨询专科医生,并在医院作进一步检查。\r\n"; printAppraise.Append(@"您疑似糖尿病前期,为从正常过渡到糖尿 病的过渡阶段,必要时采用药物治疗并配 合健康管理方式进行血糖控制,有可能使 血糖恢复正常。建议您及早咨询专科医生 ,并在医院作进一步检查。" + "\r\n"); //给用户打标签 if (!LoginInfo.GetInstance().Name.Equals("")) { new PatientRecordsManager().UpdatePatientAllRecords( int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedPrediabetes")), "疑似糖尿病前期"); } } //疑似糖尿病 else if (bloodSugarState == BloodSugarState.SuspectedDiabetes) { lblResult.Text += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥11.1 mmol/L,疑似糖尿病,需进一步确诊。\r\n"; printResult += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥\r\n" + "11.1 mmol/L,疑似糖尿病,需进一步确\r\n" + "诊。\r\n"; lblAppraise.Text += "依据您的血糖水平,疑似为糖尿病,建议您及早咨询专科医生,并在医院作进一步检查。必要时需采用药物治疗并配合健康管理方式进行血糖控制。\r\n"; printAppraise.Append(@"依据您的血糖水平,疑似为糖尿病,建议 您及早咨询专科医生,并在医院作进一步 检查。必要时需采用药物治疗并配合健康 管理方式进行血糖控制。" + "\r\n"); //给用户打标签 if (!LoginInfo.GetInstance().Name.Equals("")) { new PatientRecordsManager().UpdatePatientAllRecords( int.Parse(ConfigHelper.GetAppsettings("ThahSuspectedDiabetes")), "疑似糖尿病"); } } } else if (strs[0].Contains("C")) { //正常随机血糖 if (bloodSugarState == BloodSugarState.NormalSuijiBloodSugar) { lblResult.Text += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,<10 mmol/L 初步定义为正常随机血糖值,需进一步确诊。\r\n"; printResult += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,<\r\n" + "10 mmol/L 初步定义为正常随机血糖值\r\n" + ",需进一步确诊。\r\n"; lblAppraise.Text += "由于您所测量为随机血糖值,初步定义为正常血糖值,但仍需进一步确诊,建议您再次进行“空腹”或“餐后2小时”的血糖测量。\r\n"; printAppraise.Append(@"由于您所测量为随机血糖值,初步定义为 正常血糖值,但仍需进一步确诊,建议您 再次进行“空腹”或“餐后2小时”的血糖测 量。" + "\r\n"); } //血糖值偏高 else if (bloodSugarState == BloodSugarState.High) { lblResult.Text += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥10 mmol/L 初步定义为血糖值偏高,需进一步确诊。\r\n"; printResult += "您本次测量的血糖值为:" + bloodGlucose + " mmol/L,≥\r\n" + "10 mmol/L 初步定义为血糖值偏高,需\r\n" + "进一步确诊。\r\n"; lblAppraise.Text += "由于您所测量为随机血糖值,初步定义为血糖值偏高,但仍需进一步确诊,建议您再次进行“空腹”或“餐后2小时”的血糖测量。\r\n"; printAppraise.Append(@"由于您所测量为随机血糖值,初步定义为 血糖值偏高,但仍需进一步确诊,建议您 再次进行“空腹”或“餐后2小时”的血糖测 量。" + "\r\n"); //给用户打标签 if (!LoginInfo.GetInstance().Name.Equals("")) { new PatientRecordsManager().UpdatePatientAllRecords( int.Parse(ConfigHelper.GetAppsettings("ThahHigherBloodSugar")), "血糖值偏高"); } } } } } //***************************************高危因素结果*********************************************** //第八题及第九题,≥1个,选择了B、C、D StringBuilder sb = new StringBuilder(); StringBuilder sbText = new StringBuilder(); string answer8 = ClientInfo.GetAnswerByCode(QuestionnaireCode.Thah, QuestionnaireCode.Thah + ".8"); string answer9 = ClientInfo.GetAnswerByCode(QuestionnaireCode.Thah, QuestionnaireCode.Thah + ".9"); if (answer8.Contains("B") || answer8.Contains("C") || answer8.Contains("D") || answer9.Contains("B") || answer9.Contains("C") || answer9.Contains("D")) { sb.Append("\r\n高危因素" + "\r\n"); } if (answer8.Contains("B") || answer8.Contains("C") || answer8.Contains("D")) { sb.Append("高血压家族史" + "\r\n"); sbText.Append("高血压家族史" + "\r\n"); } if (answer9.Contains("B") || answer9.Contains("C") || answer9.Contains("D")) { sb.Append("糖尿病家族史" + "\r\n"); sbText.Append("糖尿病家族史" + "\r\n"); } //第五题,bmi decimal?bmi = null; string answer5 = ClientInfo.GetAnswerByCode(QuestionnaireCode.Thah, QuestionnaireCode.Thah + ".5"); if (!string.IsNullOrEmpty(answer5)) { bmi = decimal.Parse(answer5.Substring(0, answer5.Length - 1)); } if (sex.HasValue && age.HasValue && bmi.HasValue) { //获取bmi结果 WeightStandardState weightStandardState = screenWebapiClient.GetBmiResult(sex.Value, age.Value, bmi.Value); if (weightStandardState == WeightStandardState.Overweight) { if (!sb.ToString().Contains("高危因素")) { sb.Insert(0, "\r\n高危因素" + "\r\n"); } sb.Append("超重" + "\r\n"); sbText.Append("超重" + "\r\n"); } else if (weightStandardState == WeightStandardState.Obesity) { if (!sb.ToString().Contains("高危因素")) { sb.Insert(0, "\r\n高危因素" + "\r\n"); } sb.Append("肥胖" + "\r\n"); sbText.Append("肥胖" + "\r\n"); } } if (string.IsNullOrEmpty(sbText.ToString())) { sbText.Append("无" + "\r\n"); } if (!string.IsNullOrEmpty(sb.ToString())) { printResult += sb.ToString(); } lblDangerReason.Text = sbText.ToString(); } } catch (Exception ex) { screenWebapiClient.AddErrorLog(new M_LogForAtm { Title = "筛查机客户端错误", Content = ex.ToString(), Description = "青少年二高筛查问卷" }); } }