public IHttpActionResult TotalProfitByMovie(StatisticsParameters statisticsParameters)
        {
            var      fltTechTypes = new List <int>();
            var      CinemaID     = statisticsParameters.CinemaID;
            var      TechTypeID   = statisticsParameters.TechTypeID;
            DateTime DateTimeFrom = statisticsParameters.DateTimeFrom;
            DateTime DateTimeTo   = statisticsParameters.DateTimeTo;

            fltTechTypes.AddRange((TechTypeID == 0) ? principal.TechnologyTypes.Select(x => x.TechnologyTypeID).ToList() : principal.TechnologyTypes.Where(x => x.TechnologyTypeID == TechTypeID).Select(x => x.TechnologyTypeID).ToList());

            var profitByMovie = (from T in principal.Tickets
                                 join P in principal.Projections on T.ProjectionID equals P.ProjectionID
                                 join M in principal.Movies on P.MovieID equals M.MovieID
                                 join TT in principal.TechnologyTypes on P.TechnologyTypeID equals TT.TechnologyTypeID
                                 join CHS in principal.CinemaHalls on P.CinemaHallID equals CHS.CinemaHallID
                                 join CS in principal.Cinemas on CHS.CinemaID equals CS.CinemaID
                                 where P.DateTimeStart >= DateTimeFrom &&
                                 P.DateTimeStart <= DateTimeTo &&
                                 fltTechTypes.Contains(TT.TechnologyTypeID) &&
                                 CS.CinemaID == CinemaID
                                 group T by T.Projections.Movies into Tgroup
                                 orderby Tgroup.Sum(x => x.TicketPrice) descending
                                 select new
            {
                MovieName = Tgroup.Key.Name,
                SumOfTicketPrice = Tgroup.Sum(x => x.TicketPrice)
            }).ToDictionary(t => t.MovieName, t => t.SumOfTicketPrice);

            if (profitByMovie.Count == 0)
            {
                return(NotFound());
            }
            return(Ok(profitByMovie));
        }
Пример #2
0
        private void btn_beginProgress_Click(object sender, EventArgs e)
        {
            if (txt_WorkUnit.Text == "")
            {
                return;
            }
            //要统计的条件
            StatisticsParameters mnStatisticsParameters = new StatisticsParameters();

            mnStatisticsParameters.startDate = datePicker_startDate.Value;
            lab_endDate.Text = datePicker_startDate.Value.AddYears(1).ToString();
            mnStatisticsParameters.endDate  = datePicker_startDate.Value.AddYears(1);
            mnStatisticsParameters.workunit = txt_WorkUnit.Text.ToString();

            //禁用界面上面所有按钮
            btn_beginProgress.Enabled    = false;
            btn_selectSavePath.Enabled   = false;
            datePicker_startDate.Enabled = false;
            //文件的存储路径
            String FilePath = txtbox_FilePath.Text;

            Excel.Application myExcel = new Excel.Application();
            myExcel.Visible = false;
            //存储统计结果
            Excel.Workbook  myWorkbook  = myExcel.Workbooks.Add(true);
            Excel.Worksheet myWorkSheet = myWorkbook.Worksheets[1];

            //存储主要的疾病的ICD诊断号码的Excel
            Excel.Workbook  ICDWorkbook  = myExcel.Workbooks.Add(true);
            Excel.Worksheet ICDWorksheet = ICDWorkbook.Worksheets[1];

            //全部疾病诊断列表名称
            Dictionary <string, string> Dic_DiseaseList = new Dictionary <string, string>();
            DiseaseList myDiseaseList = new DiseaseList();

            //读取列表
            myDiseaseList.Initialize(AppDomain.CurrentDomain.BaseDirectory + @"Resource\2014ICD2217.xlsx", out Dic_DiseaseList);

            //DiseaseList myDiseaseList = new DiseaseList();
            //myDiseaseList.Initialize("", out List_Disease);

            //所有疾病的查询字典
            Dic myDic = new Dic();

            //进行统计
            processStatistics.Text = "统计开始";
            ServiceStatistics myStatistics = new ServiceStatistics();

            processStatistics.Text = myStatistics.statistics(ref myDic, mnStatisticsParameters);
            //进行输出结果
            processOutputExcel.Text = "输出Excel开始";
            ServiceOutputExcel myOutputExcel = new ServiceOutputExcel();

            processOutputExcel.Text = myOutputExcel.OutputExcel(FilePath, myDic, Dic_DiseaseList);
        }
        public IHttpActionResult TotalTicketsSold(StatisticsParameters statisticsParameters)
        {
            var CinemaID   = statisticsParameters.CinemaID;
            var TechTypeID = statisticsParameters.TechTypeID;
            var MovieID    = statisticsParameters.MovieID;

            var fltMovies    = new List <int>();
            var fltTechTypes = new List <int>();



            fltMovies.AddRange((MovieID == 0) ? principal.Movies.Select(x => x.MovieID).ToList() : principal.Movies.Where(x => x.MovieID == MovieID).Select(x => x.MovieID).ToList());
            fltTechTypes.AddRange((TechTypeID == 0) ? principal.TechnologyTypes.Select(x => x.TechnologyTypeID).ToList() : principal.TechnologyTypes.Where(x => x.TechnologyTypeID == TechTypeID).Select(x => x.TechnologyTypeID).ToList());

            DateTime DateTimeFrom = statisticsParameters.DateTimeFrom;
            DateTime DateTimeTo   = statisticsParameters.DateTimeTo;



            var countTickets = (from T in principal.Tickets
                                join P in principal.Projections on T.ProjectionID equals P.ProjectionID
                                join M in principal.Movies on P.MovieID equals M.MovieID
                                join TT in principal.TechnologyTypes on P.TechnologyTypeID equals TT.TechnologyTypeID
                                join CHS in principal.CinemaHalls on P.CinemaHallID equals CHS.CinemaHallID
                                join CS in principal.Cinemas on CHS.CinemaID equals CS.CinemaID
                                where P.DateTimeStart >= DateTimeFrom &&
                                P.DateTimeStart <= DateTimeTo &&
                                fltMovies.Contains(M.MovieID) &&
                                fltTechTypes.Contains(TT.TechnologyTypeID) &&
                                CS.CinemaID == CinemaID
                                group T by new
            {
                T.Projections.DateTimeStart.Day,
                T.Projections.DateTimeStart.Month,
                T.Projections.DateTimeStart.Year
            } into Tgroup
                                orderby Tgroup.Key.Day
                                select new
            {
                DayMonth = Tgroup.Key.Day.ToString() + "." + Tgroup.Key.Month.ToString(),
                SumOfTicketPrice = Tgroup.Count()
            }).ToDictionary(t => t.DayMonth, t => t.SumOfTicketPrice);

            if (countTickets.Count == 0)
            {
                return(NotFound());
            }
            return(Ok(countTickets));
        }
        public IHttpActionResult Top10SeatReservationFrequency(StatisticsParameters statisticsParameters)
        {
            var CinemaID   = statisticsParameters.CinemaID;
            var TechTypeID = statisticsParameters.TechTypeID;
            var MovieID    = statisticsParameters.MovieID;

            var fltMovies    = new List <int>();
            var fltTechTypes = new List <int>();



            fltMovies.AddRange((MovieID == 0) ? principal.Movies.Select(x => x.MovieID).ToList() : principal.Movies.Where(x => x.MovieID == MovieID).Select(x => x.MovieID).ToList());
            fltTechTypes.AddRange((TechTypeID == 0) ? principal.TechnologyTypes.Select(x => x.TechnologyTypeID).ToList() : principal.TechnologyTypes.Where(x => x.TechnologyTypeID == TechTypeID).Select(x => x.TechnologyTypeID).ToList());

            DateTime DateTimeFrom = statisticsParameters.DateTimeFrom;
            DateTime DateTimeTo   = statisticsParameters.DateTimeTo;



            var Frequency = (from T in principal.Tickets
                             join P in principal.Projections on T.ProjectionID equals P.ProjectionID
                             join M in principal.Movies on P.MovieID equals M.MovieID
                             join G in principal.Genres on M.GenreID equals G.GenreID
                             join TT in principal.TechnologyTypes on P.TechnologyTypeID equals TT.TechnologyTypeID
                             join CHS in principal.CinemaHalls on P.CinemaHallID equals CHS.CinemaHallID
                             join CS in principal.Cinemas on CHS.CinemaID equals CS.CinemaID
                             where P.DateTimeStart >= DateTimeFrom &&
                             P.DateTimeStart <= DateTimeTo &&
                             fltMovies.Contains(M.MovieID) &&
                             fltTechTypes.Contains(TT.TechnologyTypeID) &&
                             CS.CinemaID == CinemaID

                             group T by T.Seats into SeatGroup
                             orderby SeatGroup.Count() descending
                             select new
            {
                SeatLbl = SeatGroup.Key.CinemaHalls.Name + " - seat " + SeatGroup.Key.SeatRows.SeatRowLbl + SeatGroup.Key.SeatColumns.SeatColumnLbl.ToString(),
                SeatFreq = SeatGroup.Count()
            }).Take(10).ToDictionary(t => t.SeatLbl, t => t.SeatFreq);

            if (Frequency.Count == 0)
            {
                return(NotFound());
            }
            return(Ok(Frequency));
        }
        //统计
        public string statistics(ref Dic myDic, StatisticsParameters mnStatisticsParameters)
        {
            //全部疾病诊断列表名称
            Dictionary <string, string> List_Disease = new Dictionary <string, string>();

            DiseaseList myDiseaseList = new DiseaseList();

            //读取默认的ICD列表
            //myDiseaseList.Initialize(@"c:\C:\Users\win7x64_20150617\Desktop\20150721PatientAnalyse\ICD.xls", out List_Disease);

            //实际统计的人数,把年龄为零的人排除在外
            myDic.NumAll = 0;
            //查询数据库
            medbase201511Entities1 myMedBaseEntities = new medbase201511Entities1();

            //查询所有的待查询时间段内检查的患者
            //查询条件  a0704 任职级别 01 副市级 02 正局级 03 副局级 04 正高 05 副高 14 院士
            //查询条件  a6405 在职情况
            //全部包括  (s1.a0704 == "01" || s1.a0704 == "02" || s1.a0704 == "03" || s1.a0704 == "04" || s1.a0704 == "05" || s1.a0704 == "14" || s1.a6405 == "02")
            //副市级  s1.a0704 == "01"
            //正局级  s1.a0704 == "02"
            //副局级  s1.a0704 == "03"
            //高级知识分子  (s1.a0704 == "04" || s1.a0704 == "05" || s1.a0704 == "14")
            //离休  s1.a6405 == "02"
            //离休 解决与上面重复问题 (s1.a0704 != "01" && s1.a0704 != "02" && s1.a0704 != "03" && s1.a0704 != "04" && s1.a0704 != "05" && s1.a0704 != "14" && s1.a6405 == "02")
            //var ExportResult = from s1 in myMedBaseEntities.hcheckmemb
            //                   where s1.checkdate < mnStatisticsParameters.endDate && s1.checkdate > mnStatisticsParameters.startDate && (s1.a0704 == "04" || s1.a0704 == "05" || s1.a0704 == "14")
            //                   select s1;

            string[] lotsWorkUnit = { "0022", "0023", "0024", "0025", "0026", "0027", "0028", "0029", "0030", "0031", "0032", "0033", "0034", "0035", "0036", "0037", "0038", "0039", "0040", "0041", "0042", "0043", "0044", "0045", "0046", "0047", "0048", "0049", "0050", "0051", "0052", "0053", "0054", "0055", "0056", "0057", "0098", "0099", "0100", "0234", "0248", "0317", "0326", "0347", "0720" };
            string   workUnit     = mnStatisticsParameters.workunit;

            System.Linq.IQueryable <PatientDataExport.Data.hcheckmemb> ExportResult = from s2 in myMedBaseEntities.hcheckmemb
                                                                                      where s2.b0110 == workUnit && s2.checkdate <mnStatisticsParameters.endDate && s2.checkdate> mnStatisticsParameters.startDate
                                                                                      select s2;

            if (ExportResult == null)
            {
                return("没有查询到相应的患者");
            }

            //所有的性别分布范围
            //string eachPersonSex = "";
            //所有的年龄性别分布范围
            string eachPersonAgeSexRange = "";
            //每位患者的所有疾病
            List <string> tempPersonAllDisese = new List <string>();

            //遍历所有的患者
            foreach (var checkpatient in ExportResult)
            {
                if (checkpatient.age == null)
                {
                    continue;
                }
                //此人的年龄范围
                string patientAgeRange = AgeSeprate(checkpatient.age.ToString());
                //把年龄为零和空白的都排除在外
                if (patientAgeRange == "0" || patientAgeRange == "空白")
                {
                    continue;
                }
                //真正进入统计的人数
                myDic.NumAll++;

                //区分每个人,使用Checkcode
                string eachPerson = checkpatient.checkcode.ToString();

                //统计不同年龄范围内的人群
                if (myDic.NumAge.ContainsKey(patientAgeRange))
                {
                    //将此年龄范围的人数加1
                    myDic.NumAge[patientAgeRange]++;
                }
                else
                {
                    //向统计的词典中增加此年龄范围
                    myDic.NumAge.Add(patientAgeRange, 1);
                }
                //每个病人的性别
                string patientSex = checkpatient.a0107.ToString();


                //统计不同性别的人群
                if (myDic.NumSex.ContainsKey(patientSex))
                {
                    //将此性别的人数加1
                    myDic.NumSex[patientSex]++;
                }
                else
                {
                    //第一次统计此性别
                    myDic.NumSex.Add(patientSex, 1);
                }

                //统计不同性别的年龄分布
                eachPersonAgeSexRange = patientSex + "," + patientAgeRange;

                if (myDic.NumSexAge.ContainsKey(eachPersonAgeSexRange))
                {
                    myDic.NumSexAge[eachPersonAgeSexRange]++;
                }
                else
                {
                    myDic.NumSexAge.Add(eachPersonAgeSexRange, 1);
                }

                //所有的疾病
                try
                {
                    var diseaseResult = from s5 in myMedBaseEntities.hdatadiag where checkpatient.checkcode == s5.checkcode select s5;
                    //此病人检查无任何诊断
                    if (diseaseResult == null)
                    {
                        //跳过此人的循环
                        continue;
                    }
                    else
                    {
                        //此病人有诊断
                        foreach (var eachDisease in diseaseResult)
                        {
                            //存储此人的所有疾病
                            tempPersonAllDisese.Clear();

                            //不论有没有确定的ICD值,都要增加总的疾病数量
                            myDic.DiseaseNum++;
                            //诊断有确定ICD值,相应的疾病ICD值加1
                            if (eachDisease.diagcode != null)
                            {
                                //一次增加四个统计
                                AddDic(ref myDic, eachDisease.diagcode, patientSex, patientAgeRange);

                                //有确定的ICD值,那每个人的ICD确定诊断数目加1
                                myDic.ICDDiseaseNum++;
                            }
                            //诊断没有确定的ICD值
                            else
                            {
                                //没有确定的ICD值,那此人的ICD不确定诊断数目加1
                                myDic.NotICDDiseaseNum++;
                                NotICDAdd(eachDisease.diagname, ref myDic, patientSex, patientAgeRange);
                            }
                        } //循环每个人的所有疾病结束
                    }     //确定此人有诊断else结束
                }         //try 查找此人的所有诊断结束
                catch
                {
                    System.Windows.Forms.MessageBox.Show("遍历查询到的患者时出现错误");
                }
            } //Foreach查询到的所有患者循环
            return("成功执行统计");
        }     //结束public string statistics(DateTime startDate, DateTime endDate)
        public IHttpActionResult TotalProfitByMovieGenre(StatisticsParameters statisticsParameters)
        {
            var fltTechTypes = new List <int>();
            var CinemaID     = statisticsParameters.CinemaID;
            var TechTypeID   = statisticsParameters.TechTypeID;
            var GenreID      = statisticsParameters.GenreID;

            DateTime DateTimeFrom = statisticsParameters.DateTimeFrom;
            DateTime DateTimeTo   = statisticsParameters.DateTimeTo;


            fltTechTypes.AddRange((TechTypeID == 0) ? principal.TechnologyTypes.Select(x => x.TechnologyTypeID).ToList() : principal.TechnologyTypes.Where(x => x.TechnologyTypeID == TechTypeID).Select(x => x.TechnologyTypeID).ToList());

            var profitGenres = (from T in principal.Tickets
                                join P in principal.Projections on T.ProjectionID equals P.ProjectionID
                                join M in principal.Movies on P.MovieID equals M.MovieID
                                join G in principal.Genres on M.GenreID equals G.GenreID
                                join TT in principal.TechnologyTypes on P.TechnologyTypeID equals TT.TechnologyTypeID
                                join CHS in principal.CinemaHalls on P.CinemaHallID equals CHS.CinemaHallID
                                join CS in principal.Cinemas on CHS.CinemaID equals CS.CinemaID
                                where P.DateTimeStart >= DateTimeFrom &&
                                P.DateTimeStart <= DateTimeTo &&
                                fltTechTypes.Contains(TT.TechnologyTypeID) &&
                                CS.CinemaID == CinemaID &&
                                G.GenreID == GenreID
                                group T by new
            {
                T.Projections.DateTimeStart.Day,
                T.Projections.DateTimeStart.Month,
                T.Projections.DateTimeStart.Year
            } into Tgroup
                                orderby Tgroup.Key.Day
                                select new
            {
                DayMonth = Tgroup.Key.Day.ToString() + "." + Tgroup.Key.Month.ToString() + "." + Tgroup.Key.Year.ToString(),
                SumOfTicketPrice = Tgroup.Sum(x => x.TicketPrice)
            }).ToDictionary(t => t.DayMonth, t => t.SumOfTicketPrice);

            Dictionary <DateTime, decimal> profitFinalConvert = new Dictionary <DateTime, decimal>();

            foreach (var item in profitGenres)
            {
                string[] dayMonthYear = item.Key.Split('.');
                string   temp         = String.Empty;
                foreach (var s in dayMonthYear)
                {
                    if (s.Length == 1)
                    {
                        temp += "0" + s + ".";
                    }
                    else
                    {
                        temp += s + ".";
                    }
                }
                string Final = temp.Substring(0, 10);
                profitFinalConvert.Add(DateTime.ParseExact(Final, "dd.MM.yyyy", CultureInfo.InvariantCulture), item.Value);
            }

            if (profitFinalConvert.Count == 0)
            {
                return(NotFound());
            }
            return(Ok(profitFinalConvert));
        }