public ActionResult GetTimeRuleSet(string timeSeriesGuid) { return(ActionUtils.Json(() => { var timeSeries = m_dbAdapter.TimeSeries.GetByGuid(timeSeriesGuid); TimeRuleViewModel timeRuleViewModel = GetTimeRuleDetail(timeSeries.Id); return ActionUtils.Success(timeRuleViewModel); })); }
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()); }
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(""); })); }
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); }
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); }
private void CheckTimeRuleParam(TimeRuleViewModel timeRule) { timeRule.PeriodSequenceList.ForEach(x => x.CheckParam()); timeRule.ConditionShiftList.ForEach(x => x.CheckParam()); timeRule.ShiftList.ForEach(x => x.CheckParam()); }
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); }
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; } } }