Пример #1
0
        public ActionResult submitTest()
        {
            try
            {
                #region 验证参数
                string templateName = Request.Form["templateName"];

                if (string.IsNullOrEmpty(templateName))
                {
                    return(Json(new { Status = -9, Data = string.Empty, Msg = "参数不正确" }));
                }
                #endregion

                #region 生成订单
                DateTime       dtNow  = DateTime.Now;
                string         testNo = dtNow.Year.ToString().PadLeft(4, '0') + dtNow.Month.ToString().PadLeft(2, '0') + dtNow.Day.ToString().PadLeft(2, '0') + dtNow.Hour.ToString().PadLeft(2, '0') + dtNow.Minute.ToString().PadLeft(2, '0') + dtNow.Second.ToString().PadLeft(2, '0');
                HPN_TESTRESULT test   = new HPN_TESTRESULT();
                test.INPUTTIME   = dtNow;
                test.TESTNO      = testNo;
                test.OTHERTESTNO = string.Empty;
                UserInfo user = _user.GetCurrentUser();
                test.USERID       = user == null ? "0" : user.UserId;
                test.TEMPLATENAME = templateName;
                test.STATUS       = 1;
                test.IP           = StringExtension.getIPAddress();
                test.RESULT       = string.Empty;
                test.RESULT       = string.Empty;
                test.RESULTDETAIL = string.Empty;
                test.ID           = Guid.NewGuid().ToString();
                #endregion

                #region 保存明细
                List <HPN_TEMPLATEITEM> questions = templateService.getTemplateItemList(templateName).ToList();
                if (questions.Count <= 0)
                {
                    return(Json(new { Status = -8, Data = string.Empty, Msg = "模版关键字不正确" }));
                }

                List <HPN_TEMPLATEITEMOPTIONS> options     = templateService.getTemplateItemOptionsListByTemplateName(templateName);
                HPN_TESTRESULTDETAILS          detail      = new HPN_TESTRESULTDETAILS();
                List <HPN_TESTRESULTDETAILS>   testDetails = new List <HPN_TESTRESULTDETAILS>();
                foreach (HPN_TEMPLATEITEM item in questions)
                {
                    if (item.TAGTYPE == 4)
                    {
                        detail                  = new HPN_TESTRESULTDETAILS();
                        detail.INPUTTIME        = dtNow;
                        detail.TESTNO           = testNo;
                        detail.TEMPLATEITEMNAME = item.KWD;
                        HPN_TEMPLATEITEMOPTIONS option = options.Find(p => p.TEMPLATEITEMNAME == item.KWD && p.VALUE.Trim() == Request.Form[item.KWD].Trim());
                        detail.ITEMRESULTID = option.IDATTR;
                        detail.ITEMRESULT   = Request.Form[item.KWD];
                    }
                    else
                    {
                        //直接写
                        detail                  = new HPN_TESTRESULTDETAILS();
                        detail.INPUTTIME        = dtNow;
                        detail.TESTNO           = testNo;
                        detail.TEMPLATEITEMNAME = item.KWD;
                        detail.ITEMRESULTID     = item.KWD;
                        if ((templateName == "Psqi" && item.KWD == "psqi_1") || (templateName == "Psqi" && item.KWD == "psqi_3"))
                        {
                            string   val = Request.Form[item.KWD];
                            string[] arr = val.Split(':');
                            if (arr.Length == 2)
                            {
                                val = (arr[0].ToDouble(0) + arr[1].ToDouble(0) / 60).ToString();
                            }
                            detail.ITEMRESULT = val;
                        }
                        else
                        {
                            detail.ITEMRESULT = Request.Form[item.KWD];
                        }
                    }
                    detail.ID = Guid.NewGuid().ToString();
                    testDetails.Add(detail);
                }
                #endregion

                #region 计算分数
                TemplateService _tservice = new TemplateService(_db);
                test = _tservice.handleResult(test, testDetails);
                #endregion

                #region 保存结果
                _db.Set <HPN_TESTRESULT>().Add(test);
                _db.Set <HPN_TESTRESULTDETAILS>().AddRange(testDetails);
                _db.SaveChanges();
                #endregion

                return(Json(new { Status = 1, Data = string.Empty, Msg = "操作成功", Url = "/result/" + testNo }));
            }
            catch (Exception ex)
            {
                LogService.WriteErrorLog("HPNController[Post]", ex.ToString());
                return(Json(new { Status = -99, Data = string.Empty, Msg = ex.Message }));
            }
        }
Пример #2
0
        public override double calculateResult(HPN_TESTRESULT testResult, List <HPN_TESTRESULTDETAILS> testDetails)
        {
            //计算分数,并且把结果保存到HPN_TestResult的Remark字段,本函数返回分数
            double score = 0, subscore = 0;
            Dictionary <string, string> dic = new Dictionary <string, string>();
            string testNo = testDetails.First().TESTNO;

            StringBuilder sb = new StringBuilder("<div class='panel-group' id='Scl' style='margin-bottom:2rem;'>");

            #region A睡眠质量
            HPN_TESTRESULTDETAILS testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_6");
            subscore = testResultDetail.ITEMRESULT.ToDouble(0);
            score   += subscore;
            sb.Append("<div class='panel panel-default'>");
            sb.Append("<div class='panel-heading'>");
            sb.Append("<h4 class='panel-title'>");
            sb.Append("<a data-toggle='collapse' style='text-decoration:none; width: 100 %; display: block; '>");
            sb.AppendFormat("{0}<span class='pull-right'>{1}</span>", "睡眠质量", subscore + "分");
            sb.Append("</a>");
            sb.Append("</h4>");
            sb.Append("</div>");
            sb.Append("</div>");
            subscore = 0;
            #endregion

            #region B入睡时间
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_2");
            double d = testResultDetail.ITEMRESULT.ToDouble(0);
            if (d >= 16 && d <= 30)
            {
                subscore += 1;
            }
            else if (d >= 31 && d < 60)
            {
                subscore += 2;
            }
            else if (d >= 60)
            {
                subscore += 3;
            }
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_a");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            if (subscore >= 1 && subscore <= 2)
            {
                subscore = 1;
            }
            else if (subscore >= 3 && subscore <= 4)
            {
                subscore = 2;
            }
            else if (subscore >= 5)
            {
                subscore = 3;
            }
            score += subscore;
            sb.Append("<div class='panel panel-default'>");
            sb.Append("<div class='panel-heading'>");
            sb.Append("<h4 class='panel-title'>");
            sb.Append("<a data-toggle='collapse' style='text-decoration:none; width: 100 %; display: block; '>");
            sb.AppendFormat("{0}<span class='pull-right'>{1}</span>", "入睡时间", subscore + "分");
            sb.Append("</a>");
            sb.Append("</h4>");
            sb.Append("</div>");
            sb.Append("</div>");
            subscore = 0;
            #endregion

            #region C睡眠时间
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_4");
            d = testResultDetail.ITEMRESULT.ToDouble(0);
            if (d < 5)
            {
                subscore = 3;
            }
            else if (d >= 5 && d < 6)
            {
                subscore = 2;
            }
            else if (d >= 6 && d < 7)
            {
                subscore = 1;
            }
            score += subscore;
            sb.Append("<div class='panel panel-default'>");
            sb.Append("<div class='panel-heading'>");
            sb.Append("<h4 class='panel-title'>");
            sb.Append("<a data-toggle='collapse' style='text-decoration:none; width: 100 %; display: block; '>");
            sb.AppendFormat("{0}<span class='pull-right'>{1}</span>", "睡眠时间", subscore + "分");
            sb.Append("</a>");
            sb.Append("</h4>");
            sb.Append("</div>");
            sb.Append("</div>");
            subscore = 0;
            #endregion

            #region D睡眠效率
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_3");
            HPN_TESTRESULTDETAILS tempResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_1");
            double time1 = testResultDetail.ITEMRESULT.ToDouble(0) + 24 - tempResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_4");
            double persent = testResultDetail.ITEMRESULT.ToDouble(0) / time1 * 100;
            if (persent < 65)
            {
                subscore = 3;
            }
            else if (persent >= 65 && persent < 75)
            {
                subscore = 2;
            }
            else if (persent >= 75 && persent < 85)
            {
                subscore = 1;
            }
            score += subscore;
            sb.Append("<div class='panel panel-default'>");
            sb.Append("<div class='panel-heading'>");
            sb.Append("<h4 class='panel-title'>");
            sb.Append("<a data-toggle='collapse' style='text-decoration:none; width: 100 %; display: block; '>");
            sb.AppendFormat("{0}<span class='pull-right'>{1}</span>", "睡眠效率", subscore + "分");
            sb.Append("</a>");
            sb.Append("</h4>");
            sb.Append("</div>");
            sb.Append("</div>");
            subscore = 0;
            #endregion

            #region E睡眠障碍
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_b");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_c");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_d");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_e");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_f");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_g");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_h");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_i");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_5_j");
            subscore        += testResultDetail.ITEMRESULT.ToDouble(0);
            if (subscore >= 19)
            {
                subscore = 3;
            }
            else if (subscore >= 10 && subscore < 19)
            {
                subscore = 2;
            }
            else if (subscore >= 1 && subscore < 10)
            {
                subscore = 1;
            }
            score += subscore;
            sb.Append("<div class='panel panel-default'>");
            sb.Append("<div class='panel-heading'>");
            sb.Append("<h4 class='panel-title'>");
            sb.Append("<a data-toggle='collapse' style='text-decoration:none; width: 100 %; display: block; '>");
            sb.AppendFormat("{0}<span class='pull-right'>{1}</span>", "睡眠障碍", subscore + "分");
            sb.Append("</a>");
            sb.Append("</h4>");
            sb.Append("</div>");
            sb.Append("</div>");
            subscore = 0;
            #endregion

            #region F催眠药物
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_7");
            subscore         = testResultDetail.ITEMRESULT.ToDouble(0);
            score           += subscore;
            sb.Append("<div class='panel panel-default'>");
            sb.Append("<div class='panel-heading'>");
            sb.Append("<h4 class='panel-title'>");
            sb.Append("<a data-toggle='collapse' style='text-decoration:none; width: 100 %; display: block; '>");
            sb.AppendFormat("{0}<span class='pull-right'>{1}</span>", "催眠药物", subscore + "分");
            sb.Append("</a>");
            sb.Append("</h4>");
            sb.Append("</div>");
            sb.Append("</div>");
            subscore = 0;
            #endregion

            #region G日间功能障碍
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_8");
            subscore         = testResultDetail.ITEMRESULT.ToDouble(0);
            testResultDetail = testDetails.Find(p => p.TEMPLATEITEMNAME == "psqi_9");
            subscore         = testResultDetail.ITEMRESULT.ToDouble(0);
            if (subscore >= 5)
            {
                subscore = 3;
            }
            else if (subscore >= 3 && subscore <= 4)
            {
                subscore = 2;
            }
            else if (subscore >= 1 && subscore <= 2)
            {
                subscore = 1;
            }
            score += subscore;
            sb.Append("<div class='panel panel-default'>");
            sb.Append("<div class='panel-heading'>");
            sb.Append("<h4 class='panel-title'>");
            sb.Append("<a data-toggle='collapse' style='text-decoration:none; width: 100 %; display: block; '>");
            sb.AppendFormat("{0}<span class='pull-right'>{1}</span>", "日间功能障碍", subscore + "分");
            sb.Append("</a>");
            sb.Append("</h4>");
            sb.Append("</div>");
            sb.Append("</div>");
            subscore = 0;
            #endregion

            sb.Append("</div>");

            testResult.RESULTDETAIL = string.Format("测试结果为:{0}分", score);
            testResult.TESTRESULT   = sb.ToString();
            return(score);
        }