public void InitiAverageStateTable(HttpContext context) { var grID = Convert.ToInt32(Common.GetRequest("grID")); lus = context.Session["UserDimensionScore_Autistic"] as List <UserDimensionScoreModel <string> >; if (lus == null) { lus = GetUsersDimensionScore(grID);//得到用户各维度分数(可能会含有四则运算的表达式) context.Session["UserDimensionScore_Autistic"] = lus; } List <UserDimensionScoreModel <string> > tranUsersDimensionScore = new List <UserDimensionScoreModel <string> >(); //声明使用四则运算的算法转化后的用户维度分数 Dictionary <string, string> dimensionName = new Dictionary <string, string>(); //维度Code和维度名称 Dictionary <string, string> explainName = null; //维度Code和维度解释 Dictionary <string, string> dimensionAverage = new Dictionary <string, string>(); //维度分数平均分 Dictionary <string, string> dimensionMaxNum = new Dictionary <string, string>(); //维度分数最大值 Dictionary <string, string> dimensionMinNum = new Dictionary <string, string>(); //维度分数最小值 Dictionary <string, string> dimensionStandardMinus = new Dictionary <string, string>(); //维度分数标准差 Calculate cal = new Calculate(); StringBuilder sb = new StringBuilder();//拼接维度Code字符串 sb.Append("("); //获取维度Code和维度名称----维度Code和维度介绍字典项 foreach (var item in lus[0].DimensionAndScore) { dimensionName.Add(item.Key, lus[0].DimensionName[item.Key]); sb.Append("'"); sb.Append(item); sb.Append("'"); sb.Append(","); } sb.Remove(sb.Length - 1, 1); sb.Append(")"); explainName = MgrServices.GroupReportService.GetNormExplainByDimensionCodeList(sb.ToString()); //将用户维度分数使用四则运算进行转化 for (int i = 0; i < lus.Count; i++) { UserDimensionScoreModel <string> tranDimensionScoreModel = new UserDimensionScoreModel <string>(); Dictionary <string, string> tranDimensionScore = new Dictionary <string, string>(); foreach (var item in lus[i].DimensionAndScore) { decimal result; Queue <string> qs = cal.SplitExpress(item.Value); List <string> ls = cal.InorderToPostorder(qs); cal.IsResult(ls, out result); //瑞文量表代码 //if (amountCode == "LB_14814373314360") //{ // var tempTable = MgrServices.StatisticalService.GetAnalyBaseTemp("TSLBRW"); // var referString = tempTable.Rows[0]["AnalyBaseMark"].ToString(); // var referTable = JsonConvert.DeserializeObject<List<RWModel>>(referString); // for (int j = 0; j < referTable.Count; j++) // { // if(lus[i].UserAge>=17) // { // var tempReferList = referTable.Where(m=>m.ZZB==lus[i].UserAge).ToList(); // for (int k = 0; k < tempReferList.Count; k++) // { // } // } // } //} if (amountCode == "LB_14809953564280" || amountCode == "LB_14809270976120" || amountCode == "LB_14810979035220") { tranDimensionScore.Add(item.Key, Math.Floor(result).ToString()); } else { tranDimensionScore.Add(item.Key, Math.Round(result, 2).ToString()); } } tranDimensionScoreModel.DimensionAndScore = tranDimensionScore; tranDimensionScoreModel.UserID = lus[i].UserID; tranUsersDimensionScore.Add(tranDimensionScoreModel); } //求平均值、最大值、最小值 foreach (var item in tranUsersDimensionScore[0].DimensionAndScore) { decimal average = 0; decimal maxNum = Convert.ToDecimal(item.Value); decimal minNum = Convert.ToDecimal(item.Value); decimal totalScore = Convert.ToDecimal(item.Value); for (int i = 1; i < tranUsersDimensionScore.Count; i++) { foreach (var itemK in tranUsersDimensionScore[i].DimensionAndScore) { if (item.Key == itemK.Key) { totalScore += Convert.ToDecimal(itemK.Value); if (maxNum < Convert.ToDecimal(itemK.Value)) { maxNum = Convert.ToDecimal(itemK.Value); } if (minNum > Convert.ToDecimal(itemK.Value)) { minNum = Convert.ToDecimal(itemK.Value); } } } } average = Math.Round((decimal)totalScore / tranUsersDimensionScore.Count, 2, MidpointRounding.AwayFromZero); dimensionAverage.Add(item.Key, average.ToString()); dimensionMaxNum.Add(item.Key, maxNum.ToString()); dimensionMinNum.Add(item.Key, minNum.ToString()); } //求标准差 foreach (var item in dimensionAverage) { decimal scoreCount = 0; decimal standardMinus = 0; for (int i = 0; i < tranUsersDimensionScore.Count; i++) { foreach (var itemK in tranUsersDimensionScore[i].DimensionAndScore) { if (item.Key == itemK.Key) { scoreCount += (Convert.ToDecimal(item.Value) - Convert.ToDecimal(itemK.Value)) * (Convert.ToDecimal(item.Value) - Convert.ToDecimal(itemK.Value)); } } } double result = Convert.ToDouble(scoreCount / tranUsersDimensionScore.Count); standardMinus = Math.Round(Convert.ToDecimal(Math.Sqrt(result)), 2, MidpointRounding.AwayFromZero); dimensionStandardMinus.Add(item.Key, standardMinus.ToString()); } var htmlContent = ""; List <string> detailTable = new List <string>(); foreach (var item in dimensionName) { detailTable.Add(item.Value); detailTable.Add(dimensionAverage[item.Key]); detailTable.Add(dimensionStandardMinus[item.Key]); detailTable.Add(dimensionMaxNum[item.Key]); detailTable.Add(dimensionMinNum[item.Key]); htmlContent += "<tr><td>" + item.Value + "</td><td>" + dimensionAverage[item.Key] + "</td><td>" + dimensionStandardMinus[item.Key] + "</td><td>" + dimensionMaxNum[item.Key] + "</td><td>" + dimensionMinNum[item.Key] + "</td></tr>"; } context.Session["DetailTable"] = detailTable; //AverageState;Model am = new AverageStateModel() //{ // DimensionAverage = dimensionAverage, // DimensionMaxNum = dimensionMaxNum, // DimensionMinNum = dimensionMinNum, // DimensionName = dimensionName, // DimensionStandardMinus = dimensionStandardMinus, // ExplainName = explainName, // GrgodicCount =dimensionAverage.Count //}; var signCount = 0; string strCate = ""; foreach (var item in dimensionName) { signCount++; if (signCount == dimensionName.Count) { strCate += item.Value; } else { strCate += item.Value + ","; } } List <Decimal> ld = new List <decimal>(); foreach (var item in dimensionAverage) { ld.Add(Convert.ToDecimal(item.Value)); } AverageScoreChartModel asc = new AverageScoreChartModel(); asc.name = strCate; asc.data = ld; context.Session["DimensionName"] = dimensionName; context.Session["AverageScoreChartModel"] = asc; context.Response.Write(htmlContent); }
public void InitiAverageStateTable(HttpContext context) { var lus = GetUsersDimensionScore(context); //得到用户各维度分数(可能会含有四则运算的表达式) Dictionary <string, string> dimensionName = new Dictionary <string, string>(); //维度Code和维度名称 Dictionary <string, string> explainName = new Dictionary <string, string>(); //维度Code和维度解释 Dictionary <string, string> dimensionAverage = new Dictionary <string, string>(); //维度分数平均分 Dictionary <string, string> dimensionMaxNum = new Dictionary <string, string>(); //维度分数最大值 Dictionary <string, string> dimensionMinNum = new Dictionary <string, string>(); //维度分数最小值 Dictionary <string, string> dimensionStandardMinus = new Dictionary <string, string>(); //维度分数标准差 Calculate cal = new Calculate(); //获取维度Code和维度名称----维度Code和维度介绍字典项 for (int i = 0; i < 1; i++) { foreach (var item in lus[0].DimensionAndScore) { dimensionName.Add(item.Key, MgrServices.GroupReportService.GetDimensionName(item.Key)); } } //求平均值、最大值、最小值 foreach (var item in lus[0].DimensionAndScore) { decimal average = 0; decimal maxNum = Convert.ToDecimal(item.Value); decimal minNum = Convert.ToDecimal(item.Value); decimal totalScore = Convert.ToDecimal(item.Value); for (int i = 1; i < lus.Count; i++) { foreach (var itemK in lus[i].DimensionAndScore) { if (item.Key == itemK.Key) { totalScore += Convert.ToDecimal(itemK.Value); if (maxNum < Convert.ToDecimal(itemK.Value)) { maxNum = Convert.ToDecimal(itemK.Value); } if (minNum > Convert.ToDecimal(itemK.Value)) { minNum = Convert.ToDecimal(itemK.Value); } } } } average = Math.Round((decimal)totalScore / lus.Count, 2, MidpointRounding.AwayFromZero); dimensionAverage.Add(item.Key, average.ToString()); dimensionMaxNum.Add(item.Key, maxNum.ToString()); dimensionMinNum.Add(item.Key, minNum.ToString()); } //求标准差 foreach (var item in dimensionAverage) { decimal scoreCount = 0; decimal standardMinus = 0; for (int i = 0; i < lus.Count; i++) { foreach (var itemK in lus[i].DimensionAndScore) { if (item.Key == itemK.Key) { scoreCount += (Convert.ToDecimal(item.Value) - Convert.ToDecimal(itemK.Value)) * (Convert.ToDecimal(item.Value) - Convert.ToDecimal(itemK.Value)); } } } double result = Convert.ToDouble(scoreCount / lus.Count); standardMinus = Math.Round(Convert.ToDecimal(Math.Sqrt(result)), 2, MidpointRounding.AwayFromZero); dimensionStandardMinus.Add(item.Key, standardMinus.ToString()); } var htmlContent = ""; List <string> detailTable = new List <string>(); foreach (var item in dimensionName) { detailTable.Add(item.Value); detailTable.Add(dimensionAverage[item.Key]); detailTable.Add(dimensionStandardMinus[item.Key]); detailTable.Add(dimensionMaxNum[item.Key]); detailTable.Add(dimensionMinNum[item.Key]); htmlContent += "<tr><td>" + item.Value + "</td><td>" + dimensionAverage[item.Key] + "</td><td>" + dimensionStandardMinus[item.Key] + "</td><td>" + dimensionMaxNum[item.Key] + "</td><td>" + dimensionMinNum[item.Key] + "</td></tr>"; } context.Session["DetailTable"] = detailTable; //AverageState;Model am = new AverageStateModel() //{ // DimensionAverage = dimensionAverage, // DimensionMaxNum = dimensionMaxNum, // DimensionMinNum = dimensionMinNum, // DimensionName = dimensionName, // DimensionStandardMinus = dimensionStandardMinus, // ExplainName = explainName, // GrgodicCount =dimensionAverage.Count //}; var signCount = 0; string strCate = ""; foreach (var item in dimensionName) { signCount++; if (signCount == dimensionName.Count) { strCate += item.Value; } else { strCate += item.Value + ","; } } List <Decimal> ld = new List <decimal>(); foreach (var item in dimensionAverage) { ld.Add(Convert.ToDecimal(item.Value)); } AverageScoreChartModel asc = new AverageScoreChartModel(); asc.name = strCate; asc.data = ld; context.Session["AverageScoreChartModel"] = asc; context.Response.Write(htmlContent); }