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);
        }
Beispiel #2
0
        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);
        }