コード例 #1
0
ファイル: FilterHelperTests.cs プロジェクト: TGHGH/MesDemo
        public void GetExpressionTest()
        {
            IQueryable<TestEntity> source = Entities.AsQueryable();

            //空条件
            Expression<Func<TestEntity, bool>> predicate = FilterHelper.GetExpression<TestEntity>();
            Assert.IsTrue(source.Where(predicate).SequenceEqual(source));

            //单条件,属性不存在
            FilterRule rule = new FilterRule("Name1", "5", FilterOperate.EndsWith);
            FilterRule rule1 = rule;
            ExceptionAssert.IsException<MesException>(() => FilterHelper.GetExpression<TestEntity>(rule1));

            //单条件
            rule = new FilterRule("Name", "5", FilterOperate.EndsWith);
            predicate = FilterHelper.GetExpression<TestEntity>(rule);
            Assert.IsTrue(source.Where(predicate).SequenceEqual(source.Where(m => m.Name.EndsWith("5"))));

            //二级条件
            rule = new FilterRule("Name.Length", 5, FilterOperate.Greater);
            predicate = FilterHelper.GetExpression<TestEntity>(rule);
            Assert.IsTrue(source.Where(predicate).SequenceEqual(source.Where(m => m.Name.Length > 5)));

            //多条件,异常
            ExceptionAssert.IsException<MesException>(() => new FilterGroup
            {
                Rules = new List<FilterRule> { rule, new FilterRule("IsDeleted", true) },
                Operate = FilterOperate.Equal
            });

            //多条件
            FilterGroup group = new FilterGroup
            {
                Rules = new List<FilterRule> { rule, new FilterRule("IsDeleted", true) },
                Operate = FilterOperate.And
            };
            predicate = FilterHelper.GetExpression<TestEntity>(group);
            Assert.IsTrue(source.Where(predicate).SequenceEqual(source.Where(m => m.Name.Length > 5 && m.IsDeleted)));

            //条件组嵌套
            DateTime dt = DateTime.Now;
            group = new FilterGroup
            {
                Rules = new List<FilterRule>
                {
                    new FilterRule("AddDate", dt, FilterOperate.Greater)
                },
                Groups = new List<FilterGroup> { group },
                Operate = FilterOperate.Or
            };
            predicate = FilterHelper.GetExpression<TestEntity>(group);
            Assert.IsTrue(source.Where(predicate).SequenceEqual(source.Where(m => m.AddDate > dt || m.Name.Length > 5 && m.IsDeleted)));
        }
コード例 #2
0
ファイル: ProblemController.cs プロジェクト: TGHGH/MesDemo
        public void CreateExcel2(string fromDate, string endDate)
        {
            const string problemTime = "ProblemTime";
            const string isDeleted = "IsDeleted";
            fromDate.CheckNotNullOrEmpty("fromDate");
            endDate.CheckNotNullOrEmpty("endDate");

            DateTime beginTime = Conv.ToDate(fromDate);
            DateTime endTime = Conv.ToDate(endDate);

            FilterGroup group = new FilterGroup
            {
                Rules = new List<FilterRule>
                {
                    new FilterRule(problemTime, beginTime, FilterOperate.GreaterOrEqual),
                    new FilterRule(problemTime, endTime.AddDays(1), FilterOperate.LessOrEqual),
                    new FilterRule(isDeleted, false, FilterOperate.Equal)
                },
                Operate = FilterOperate.And
            };
            Expression<Func<Problem, bool>> predicate = FilterHelper.GetExpression<Problem>(@group);
            var cpks = SiteManagementContract.Problems.Where(predicate).Select(m => new
            {
                m.ProblemTime,
                m.Department,
                m.Factory,
                m.QuestionFrom,
                m.Detail,
                m.Reason,
                m.Solution,
                m.IsComplete,
                m.IsPeople,
                m.Workers,
                m.Suggestion,
                m.Remark,
                m.Type,
                m.CreatedTime
            });
            Excel(cpks, "Problem" + DateTime.Now.ToString("yyyyMMddhhmmss"));
        }
コード例 #3
0
ファイル: ProblemController.cs プロジェクト: TGHGH/MesDemo
        private object Data(string fromDate,string endDate,string groupByFiled)
        {
            const string problemTime = "ProblemTime";
            const string isDeleted = "IsDeleted";
            fromDate.CheckNotNullOrEmpty("fromDate");
            endDate.CheckNotNullOrEmpty("endDate");
              //  DateTime date = Conv.ToDate(fromDate);
            DateTime beginTime=Conv.ToDate(fromDate);
            DateTime endTime = Conv.ToDate(endDate);
            //if (date.DayOfWeek != 0)
            //{
            //    beginTime = date.AddDays((double)(1 - date.DayOfWeek));
            //    endTime = date.AddDays((double)(8 - date.DayOfWeek));
            //}
            //else
            //{
            //    endTime = date;
            //    beginTime = date.AddDays(-6);
            //}

            var xAxisdata = new ArrayList();
            //部门辅助开关
            var legenddata = new ArrayList();
            //标题
            const string titletext = "异常统计";
            //子标题
            var titlesubtext = beginTime.ToString("yyyyMMdd") + "-" + endTime.ToString("yyyyMMdd");
            for (int i = 0; i < endTime.DayOfYear - beginTime.DayOfYear+1; i++)
            {
                xAxisdata.Add(beginTime.AddDays(i).ToDateString());
            }

            FilterGroup group = new FilterGroup
            {
                Rules = new List<FilterRule>
                {
                    new FilterRule(problemTime, beginTime, FilterOperate.GreaterOrEqual),
                    new FilterRule(problemTime, endTime.AddDays(1), FilterOperate.LessOrEqual),
                    new FilterRule(isDeleted, false, FilterOperate.Equal)
                },
                Operate = FilterOperate.And
            };
            Expression<Func<Problem, bool>> predicate = FilterHelper.GetExpression<Problem>(@group);
            var delayTimes = SiteManagementContract.Problems.Where(predicate).ToList();
            IEnumerable<IGrouping<string, Problem>> dutyGroupList;
            //分组
            if (groupByFiled=="workers")
                dutyGroupList = delayTimes.GroupBy(g => g.Workers);
            else
                dutyGroupList = delayTimes.GroupBy(g => g.Department);

            var seriesList = new ArrayList();
            foreach (var dutyGroup in dutyGroupList)
            {
                legenddata.Add(dutyGroup.Key);
                var dutyhourlist = new ArrayList();

                for (int i = 0; i < endTime.DayOfYear - beginTime.DayOfYear + 1; i++)
                {
                    int b = dutyGroup.AsQueryable().Count(g => g.ProblemTime.ToDateString() == beginTime.AddDays(i).ToDateString());
                    dutyhourlist.Add(b);
                }
                var markPointData1 = new { type = "max", name = "最大值" };
                var markPointData2 = new { type = "min", name = "最小值" };
                var markPointList = new ArrayList() { markPointData1, markPointData2 };
                var markPoint = new { data = markPointList };

                var markLineData1 = new { type = "average", name = "平均值" };
                var markLineList = new ArrayList() { markLineData1 };
                var markLine = new { data = markLineList };
                var seriestest1 = new { name = dutyGroup.Key, type = "line", data = dutyhourlist, markPoint, markLine };

                seriesList.Add(seriestest1);
            }

            var data = new { seriesList, xAxisdata, legenddata, titletext, titlesubtext };
            return data;
        }