Exemple #1
0
        public ActionResult GetTimeRuleSet(string timeSeriesGuid)
        {
            return(ActionUtils.Json(() =>
            {
                var timeSeries = m_dbAdapter.TimeSeries.GetByGuid(timeSeriesGuid);
                TimeRuleViewModel timeRuleViewModel = GetTimeRuleDetail(timeSeries.Id);

                return ActionUtils.Success(timeRuleViewModel);
            }));
        }
Exemple #2
0
        private List <string> CalculateTimeByTimeRule(TimeRuleViewModel timeRule, TimeSeriesFactory timeSeries)
        {
            if (!timeRule.IsExistRule)
            {
                return(timeSeries.DateTimes.Select(x => Toolkit.DateToString(x)).ToList());
            }

            var order = 0;

            foreach (var item in timeRule.TimeRuleOrder)
            {
                order++;
                var timeRuleType = CommUtils.ParseEnum <TimeRuleType>(item);
                switch (timeRuleType)
                {
                case TimeRuleType.MoveAppointDate:
                    var shiftRule         = timeRule.ShiftList.Single(x => x.Ranking == order);
                    var shiftRuleUnitType = CommUtils.ParseEnum <TimeUnit>(shiftRule.ConditionUnitType);
                    var shiftRuleInterval = shiftRule.TimeMoveDirection == TimeMoveDirection.Minus.ToString()
                            ? shiftRule.Interval * -1 : shiftRule.Interval;

                    timeSeries.Apply(new RuleShift(shiftRuleInterval, shiftRuleUnitType));
                    break;

                case TimeRuleType.FindAppointDate:
                    var periodSequence         = timeRule.PeriodSequenceList.Single(x => x.Ranking == order);
                    var periodSequenceUnitType = CommUtils.ParseEnum <TimeUnit>(periodSequence.ConditionUnitType);
                    var periodType             = CommUtils.ParseEnum <PeriodType>(periodSequence.PeriodType);

                    timeSeries.Apply(new RulePeriodSequence(periodType, periodSequence.Interval, periodSequenceUnitType));
                    break;

                case TimeRuleType.ReplaceAppointDate:
                    var conditionShift         = timeRule.ConditionShiftList.Single(x => x.Ranking == order);
                    var conditionShiftUnitType = CommUtils.ParseEnum <TimeUnit>(conditionShift.ConditionUnitType);
                    var conditionShiftInterval = conditionShift.TimeMoveDirection == TimeMoveDirection.Minus.ToString()
                            ? conditionShift.Interval * -1 : conditionShift.Interval;
                    var conditionShiftDateType = CommUtils.ParseEnum <DateType>(conditionShift.DateType);

                    timeSeries.Apply(new RuleConditionShift(conditionShiftDateType, conditionShiftInterval, conditionShiftUnitType));
                    break;

                case TimeRuleType.RemoveRepeatDate:
                    timeSeries.Apply(new RuleDistinct());
                    break;

                default:
                    break;
                }
            }
            return(timeSeries.DateTimes.Select(x => Toolkit.DateToString(x)).ToList());
        }
Exemple #3
0
        public ActionResult SaveTimeRule(TimeRuleViewModel timeRuleViewModel)
        {
            return(ActionUtils.Json(() =>
            {
                if (timeRuleViewModel != null && timeRuleViewModel.IsExistRule)
                {
                    //检查timeRuleViewModel里的参数
                    CommUtils.AssertHasContent(timeRuleViewModel.TimeSeriesGuid, "TimeSeriesGuid不能为空");

                    CheckTimeRuleParam(timeRuleViewModel);

                    CreateTimeRuleAndDetailRule(timeRuleViewModel);
                }

                return ActionUtils.Success("");
            }));
        }
Exemple #4
0
        private List <string> GetTimeListByTimeRuleOrigin(TimeRuleViewModel timeRule, TimeOriginViewModel timeOrigin)
        {
            var timeOriginType = CommUtils.ParseEnum <TimeOriginType>(timeOrigin.TimeOriginType);
            TimeSeriesFactory timeSeriesFactory;
            var result = new List <string>();

            if (timeOriginType == TimeOriginType.CustomInput)
            {
                var customTimeList = CommUtils.Split(timeOrigin.CustomInput.CustomTimeList).Select(x => DateTime.Parse(x));
                timeSeriesFactory = new TimeSeriesFactory(customTimeList);
                result            = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }

            if (timeOriginType == TimeOriginType.Loop)
            {
                var startTime    = DateTime.Parse(timeOrigin.Loop.BeginTime);
                var endTime      = DateTime.Parse(timeOrigin.Loop.EndTime);
                var ruleUnitType = CommUtils.ParseEnum <TimeUnit>(timeOrigin.Loop.RuleUnitType);

                timeSeriesFactory = new TimeSeriesFactory(
                    new DateTime(startTime.Year, startTime.Month, startTime.Day),
                    new TimeStep {
                    Interval = timeOrigin.Loop.Interval, Unit = ruleUnitType
                },
                    new DateTime(endTime.Year, endTime.Month, endTime.Day));
                result = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }

            if (timeOriginType == TimeOriginType.MetaTask)
            {
                result = GetTimeListByPrevMetaTask(timeRule, timeOrigin.PrevMetaTask.MetaTaskGuid, timeOrigin.PrevMetaTask.MetaTaskTimeType);
            }

            if (timeOriginType == TimeOriginType.TaskSelfTime)
            {
                var timeSeries     = m_dbAdapter.TimeSeries.GetByGuid(timeOrigin.TaskSelfTime.TimeSeriesGuid);
                var CurrTimeRule   = GetTimeRuleDetail(timeSeries.Id);
                var CurrTimeOrigin = GetTimeOriginDetail(timeSeries.Guid, timeSeries.Id);
                var timeList       = GetTimeListByTimeRuleOrigin(CurrTimeRule, CurrTimeOrigin).Select(x => DateTime.Parse(x));
                timeSeriesFactory = new TimeSeriesFactory(timeList);
                result            = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }
            return(result);
        }
Exemple #5
0
        private List <string> GetTimeListByPrevMetaTask(TimeRuleViewModel timeRule, string metaTaskGuid, string metaTaskTimeType)
        {
            var metaTask = m_dbAdapter.MetaTask.GetByGuid(metaTaskGuid);
            var timeType = CommUtils.ParseEnum <MetaTaskTimeType>(metaTaskTimeType);
            var result   = new List <string>();
            TimeSeriesFactory timeSeriesFactory;

            if (timeType == MetaTaskTimeType.StartTime)
            {
                if (!metaTask.StartTimeSeriesId.HasValue || metaTask.StartTimeSeriesId.Value == 0)
                {
                    return(null);
                }
                var timeSeries       = m_dbAdapter.TimeSeries.GetById(metaTask.StartTimeSeriesId.Value);
                var timeRuleDetail   = GetTimeRuleDetail(timeSeries.Id);
                var timeOriginDetail = GetTimeOriginDetail(timeSeries.Guid, timeSeries.Id);

                var timeStrList = GetTimeListByTimeRuleOrigin(timeRuleDetail, timeOriginDetail);
                var timeList    = timeStrList.ConvertAll(x => DateTime.Parse(x));
                timeSeriesFactory = new TimeSeriesFactory(timeList);
                result            = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }

            if (timeType == MetaTaskTimeType.EndTime)
            {
                var timeSeries       = m_dbAdapter.TimeSeries.GetById(metaTask.EndTimeSeriesId);
                var timeRuleDetail   = GetTimeRuleDetail(timeSeries.Id);
                var timeOriginDetail = GetTimeOriginDetail(timeSeries.Guid, timeSeries.Id);

                var timeStrList = GetTimeListByTimeRuleOrigin(timeRuleDetail, timeOriginDetail);
                var timeList    = timeStrList.ConvertAll(x => DateTime.Parse(x));
                timeSeriesFactory = new TimeSeriesFactory(timeList);
                result            = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }
            return(result);
        }
Exemple #6
0
 private void CheckTimeRuleParam(TimeRuleViewModel timeRule)
 {
     timeRule.PeriodSequenceList.ForEach(x => x.CheckParam());
     timeRule.ConditionShiftList.ForEach(x => x.CheckParam());
     timeRule.ShiftList.ForEach(x => x.CheckParam());
 }
Exemple #7
0
        private TimeRuleViewModel GetTimeRuleDetail(int timeSeriesId)
        {
            var timeRules = m_dbAdapter.TimeRule.GetTimeRulesByTimeSeriesId(timeSeriesId);

            timeRules.OrderBy(x => x.TimeRuleOrder);

            var timeRuleViewModel = new TimeRuleViewModel();

            if (timeRules.Count > 0)
            {
                timeRuleViewModel.IsExistRule = true;
            }

            int ranking = 0;

            foreach (var timeRule in timeRules)
            {
                timeRuleViewModel.TimeRuleOrder.Add(timeRule.TimeRuleType.ToString());
                ranking++;
                switch (timeRule.TimeRuleType)
                {
                case TimeRuleType.MoveAppointDate:
                    var timeRuleShift = m_dbAdapter.TimeRuleShift.GetById(timeRule.TimeRuleInstanceId);
                    var shift         = new Shift();
                    shift.ConditionUnitType = timeRuleShift.TimeRuleUnitType;
                    shift.Interval          = Math.Abs(timeRuleShift.TimeInterval);
                    shift.TimeMoveDirection = timeRuleShift.TimeInterval > 0 ? TimeMoveDirection.Plus.ToString() : TimeMoveDirection.Minus.ToString();
                    shift.Ranking           = ranking;
                    timeRuleViewModel.ShiftList.Add(shift);
                    break;

                case TimeRuleType.FindAppointDate:
                    var timeRulePeriodSequence = m_dbAdapter.TimeRulePeriodSequence.GetById(timeRule.TimeRuleInstanceId);
                    var periodSequence         = new PeriodSequence();
                    periodSequence.PeriodType        = timeRulePeriodSequence.TimeRulePeriodType;
                    periodSequence.Interval          = timeRulePeriodSequence.Sequence;
                    periodSequence.ConditionUnitType = timeRulePeriodSequence.TimeRuleUnitType;
                    periodSequence.Ranking           = ranking;
                    timeRuleViewModel.PeriodSequenceList.Add(periodSequence);
                    break;

                case TimeRuleType.ReplaceAppointDate:
                    var timeRuleConditionShift = m_dbAdapter.TimeRuleConditionShift.GetById(timeRule.TimeRuleInstanceId);
                    var conditionShift         = new ConditionShift();
                    conditionShift.ConditionUnitType = timeRuleConditionShift.TimeRuleUnitType;
                    conditionShift.Interval          = Math.Abs(timeRuleConditionShift.TimeInterval);
                    conditionShift.DateType          = timeRuleConditionShift.TimeRuleDateType;
                    conditionShift.TimeMoveDirection = timeRuleConditionShift.TimeInterval > 0 ? TimeMoveDirection.Plus.ToString() : TimeMoveDirection.Minus.ToString();
                    conditionShift.Ranking           = ranking;
                    timeRuleViewModel.ConditionShiftList.Add(conditionShift);
                    break;

                case TimeRuleType.RemoveRepeatDate:
                    var removeRepeatDate = new RemoveRepeatDate();
                    removeRepeatDate.IsRemoveRepeatDate = true;
                    removeRepeatDate.Ranking            = ranking;
                    timeRuleViewModel.RemoveRepeatDateList.Add(removeRepeatDate);
                    break;

                default:
                    break;
                }
            }

            return(timeRuleViewModel);
        }
Exemple #8
0
        private void CreateTimeRuleAndDetailRule(TimeRuleViewModel timeRuleViewModel)
        {
            var timeSeries = m_dbAdapter.TimeSeries.GetByGuid(timeRuleViewModel.TimeSeriesGuid);

            //for{创建规则TimeRule详情,然后创建对应的TimeRule}
            var timeRuleOrder = timeRuleViewModel.TimeRuleOrder;
            int ruleOrder     = 0;

            foreach (var item in timeRuleOrder)
            {
                ruleOrder++;
                var timeRuleType     = CommUtils.ParseEnum <TimeRuleType>(item);
                var timeRuleDetailId = 0;
                switch (timeRuleType)
                {
                case TimeRuleType.MoveAppointDate:
                    var timeRuleShiftViewModels = timeRuleViewModel.ShiftList;
                    foreach (var timeRuleShiftViewModel in timeRuleShiftViewModels)
                    {
                        if (timeRuleShiftViewModel.Ranking == ruleOrder)
                        {
                            var timeMoveDirection = CommUtils.ParseEnum <TimeMoveDirection>(timeRuleShiftViewModel.TimeMoveDirection);
                            var timeRuleShift     = new TimeRuleShift();
                            timeRuleShift.TimeSeriesId     = timeSeries.Id;
                            timeRuleShift.TimeInterval     = timeMoveDirection == TimeMoveDirection.Minus ? timeRuleShiftViewModel.Interval * -1 : timeRuleShiftViewModel.Interval;
                            timeRuleShift.TimeRuleUnitType = timeRuleShiftViewModel.ConditionUnitType;

                            timeRuleDetailId = m_dbAdapter.TimeRuleShift.New(timeRuleShift).Id;

                            CreateTimeRule(timeSeries.Id, ruleOrder, timeRuleType, timeRuleDetailId);
                            break;
                        }
                    }
                    break;

                case TimeRuleType.FindAppointDate:
                    var periodSequenceViewModels = timeRuleViewModel.PeriodSequenceList;
                    foreach (var periodSequenceViewModel in periodSequenceViewModels)
                    {
                        if (periodSequenceViewModel.Ranking == ruleOrder)
                        {
                            var periodSequence = new TimeRulePeriodSequence();
                            periodSequence.TimeSeriesId       = timeSeries.Id;
                            periodSequence.TimeRulePeriodType = periodSequenceViewModel.PeriodType;
                            periodSequence.Sequence           = periodSequenceViewModel.Interval;
                            periodSequence.TimeRuleUnitType   = periodSequenceViewModel.ConditionUnitType;

                            timeRuleDetailId = m_dbAdapter.TimeRulePeriodSequence.New(periodSequence).Id;

                            CreateTimeRule(timeSeries.Id, ruleOrder, timeRuleType, timeRuleDetailId);
                            break;
                        }
                    }
                    break;

                case TimeRuleType.ReplaceAppointDate:
                    var ConditionShiftViewModels = timeRuleViewModel.ConditionShiftList;
                    foreach (var ConditionShiftViewModel in ConditionShiftViewModels)
                    {
                        if (ConditionShiftViewModel.Ranking == ruleOrder)
                        {
                            var timeMoveDirection      = CommUtils.ParseEnum <TimeMoveDirection>(ConditionShiftViewModel.TimeMoveDirection);
                            var timeRuleConditionShift = new TimeRuleConditionShift();
                            timeRuleConditionShift.TimeSeriesId     = timeSeries.Id;
                            timeRuleConditionShift.TimeRuleDateType = ConditionShiftViewModel.DateType;
                            timeRuleConditionShift.TimeInterval     = timeMoveDirection == TimeMoveDirection.Minus ? ConditionShiftViewModel.Interval * -1 : ConditionShiftViewModel.Interval;
                            timeRuleConditionShift.TimeRuleUnitType = ConditionShiftViewModel.ConditionUnitType;

                            timeRuleDetailId = m_dbAdapter.TimeRuleConditionShift.New(timeRuleConditionShift).Id;

                            CreateTimeRule(timeSeries.Id, ruleOrder, timeRuleType, timeRuleDetailId);
                            break;
                        }
                    }
                    break;

                case TimeRuleType.RemoveRepeatDate:
                    CreateTimeRule(timeSeries.Id, ruleOrder, timeRuleType, 0);
                    break;

                default:
                    break;
                }
            }
        }