SisMaker преди 4 години
родител
ревизия
9ed3fcc87c
променени са 1 файла, в които са добавени 48 реда и са изтрити 50 реда
  1. +48
    -50
      src/utils/rumUtil.erl

+ 48
- 50
src/utils/rumUtil.erl Целия файл

@ -271,8 +271,7 @@ calcNextRotate([], Data, Time, NowDataTime) ->
Later = {Data, Time}, Later = {Data, Time},
calendar:datetime_to_gregorian_seconds(Later) - calendar:datetime_to_gregorian_seconds(NowDataTime); calendar:datetime_to_gregorian_seconds(Later) - calendar:datetime_to_gregorian_seconds(NowDataTime);
calcNextRotate([OneSpec | Spec], NDate, NTime, NowDataTime) -> calcNextRotate([OneSpec | Spec], NDate, NTime, NowDataTime) ->
{NHour, NMinute, _} = NTime,
{NYear, NMonth, NDay} = NDate,
{NYear, NMonth, NDay} = NDate, {NHour, NMinute, _} = NTime,
case OneSpec of case OneSpec of
{minute, SMinute} -> {minute, SMinute} ->
case NMinute < SMinute of case NMinute < SMinute of
@ -281,21 +280,21 @@ calcNextRotate([OneSpec | Spec], NDate, NTime, NowDataTime) ->
calcNextRotate(Spec, NDate, {NHour, SMinute, 0}, NowDataTime); calcNextRotate(Spec, NDate, {NHour, SMinute, 0}, NowDataTime);
_ -> _ ->
%% rotation is next hour %% rotation is next hour
NexSec = rumTime:lDateTimeToSec(NowDataTime) + 3600,
NexSec = rumTime:lDateTimeToSec({NDatean>, NTime}) + 3600,
{NNDate, NNTime} = rumTime:secToLDateTime(NexSec), {NNDate, NNTime} = rumTime:secToLDateTime(NexSec),
{NewHour, _, _} = NNTime, {NewHour, _, _} = NNTime,
calcNextRotate(Spec, NNDate, {NewHour, SMinute, 0}, NowDataTime)
calcNextRotate(Spec, NNDate, {NewHour, SMinute, 0}, NowDataTime)
end; end;
{hour, SHour} -> {hour, SHour} ->
case NHour < SHour of case NHour < SHour of
true -> true ->
%% rotation is today, sometime %% rotation is today, sometime
calcNextRotate(Spec, NDate, {SHour, 0, 0}, NowDataTime);
calcNextRotate(Spec, NDate, {SHour, NMinute, 0}, NowDataTime);
_ -> _ ->
%% rotation is not today %% rotation is not today
NexSec = rumTime:lDateTimeToSec(NowDataTime) + 86400,
NexSec = rumTime:lDateTimeToSec({NDatean>, NTime}) + 86400,
{NNDate, _NNTime} = rumTime:secToLDateTime(NexSec), {NNDate, _NNTime} = rumTime:secToLDateTime(NexSec),
calcNextRotate(Spec, NNDate, {SHour, 0, 0}, NowDataTime)
calcNextRotate(Spec, NNDate, {SHour, NMinute, 0}, NowDataTime)
end; end;
{day, SDay} -> {day, SDay} ->
CurDay = rumTime:weekDay(NDate), CurDay = rumTime:weekDay(NDate),
@ -303,64 +302,63 @@ calcNextRotate([OneSpec | Spec], NDate, NTime, NowDataTime) ->
if if
AdjustedDay > CurDay -> AdjustedDay > CurDay ->
PlusDays = AdjustedDay - CurDay, PlusDays = AdjustedDay - CurDay,
NexSec = rumTime:lDateTimeToSec(NowDataTime) + (86400 * PlusDays),
{NewDate, _} = rumTime:secToLDateTime(NexSec),
NewNow = {NewDate, {0, 0, 0}},
calcNextRotate(Spec, NewNow);
NexSec = rumTime:lDateTimeToSec({NDate, NTime}) + (86400 * PlusDays),
{NewNDate, NewNTime} = rumTime:secToLDateTime(NexSec),
calcNextRotate(Spec, NewNDate, NewNTime, NowDataTime);
AdjustedDay < CurDay -> AdjustedDay < CurDay ->
PlusDays = ((7 - CurDay) + AdjustedDay), PlusDays = ((7 - CurDay) + AdjustedDay),
NexSec = rumTime:lDateTimeToSec(NowDataTime) + (86400 * PlusDays),
{NewDate, _} = rumTime:secToLDateTime(NexSec),
NewNow = {NewDate, {0, 0, 0}},
calcNextRotate(Spec, NewNow);
NexSec = rumTime:lDateTimeToSec({NDate, NTime}) + (86400 * PlusDays),
{NewNDate, NewNTime} = rumTime:secToLDateTime(NexSec),
calcNextRotate(Spec, NewNDate, NewNTime, NowDataTime);
true -> true ->
case calcNextRotate(Spec, Now) of
{Date, _} = NewNow -> NewNow;
{NewDate, _} ->
%% rotation *isn't* today! rerun the calculation
NewNow = {NewDate, {0, 0, 0}},
calcNextRotate([{day, SDay} | Spec], NewNow)
case {NDate, NTime} > NowDataTime of
true ->
calcNextRotate(Spec, NDate, NTime, NowDataTime);
_ ->
NexSec = rumTime:lDateTimeToSec({NDate, NTime}) + (86400 * 7),
{NewNDate, NewNTime} = rumTime:secToLDateTime(NexSec),
calcNextRotate(Spec, NewNDate, NewNTime, NowDataTime)
end end
end; end;
{date, last} -> {date, last} ->
Last = rumTime:monthDay(NYear, NMonth),
case Last == Day of
true -> %% doing rotation today
case calcNextRotate(T, Now) of
{{Year, Month, Day}, _} = NewNow -> NewNow;
{NewDate, _} ->
%% rotation *isn't* today! rerun the calculation
NewNow = {NewDate, {0, 0, 0}},
calcNextRotate([{date, last} | T], NewNow)
LastDay = rumTime:monthDay(NYear, NMonth),
case LastDay == NDay of
true ->
case {NDate, NTime} > NowDataTime of
true ->
calcNextRotate(Spec, NDate, NTime, NowDataTime);
_ ->
NexSec = rumTime:lDateTimeToSec({NDate, {23, 59, 59}}) + 1, %% 1
{NewNDate, _NewNTime} = rumTime:secToLDateTime(NexSec),
{NewNYear, NewNMonth, _} = NewNDate,
NewNDay = rumTime:monthDay(NewNYear, NewNMonth),
calcNextRotate(Spec, {NewNYear, NewNMonth, NewNDay}, NTime, NowDataTime)
end; end;
false ->
NewNow = setelement(1, Now, {Year, Month, Last}),
calcNextRotate(T, NewNow)
_ ->
calcNextRotate(Spec, {NYear, NMonth, LastDay}, NTime, NowDataTime)
end; end;
{date, SDate} -> {date, SDate} ->
if if
SDate < NDay -> SDate < NDay ->
Last = calendar:last_day_of_the_month(Year, Month),
(Last - Day),
Seconds = calendar:datetime_to_gregorian_seconds(Now) + (86400 * PlusDays),
NewNow = calendar:gregorian_seconds_to_datetime(Seconds),
calcNextRotate(T, NewNow);
LastDay = rumTime:monthDay(NYear, NMonth),
NexSec = calendar:lDateTimeToSec({{NYear, NMonth, LastDay}, {23, 59, 59}}) + 1,
{NewNDate, _NewNTime} = rumTime:secToLDateTime(NexSec),
{NewNYear, NewNMonth, _} = NewNDate,
calcNextRotate(Spec, {NewNYear, NewNMonth, SDate}, NTime, NowDataTime);
SDate > NDay -> SDate > NDay ->
X - Day,
Seconds = calendar:datetime_to_gregorian_seconds(Now) + (86400 * PlusDays),
NewNow = calendar:gregorian_seconds_to_datetime(Seconds),
calcNextRotate(T, NewNow);
calcNextRotate(Spec, {NYear, NMonth, SDate}, NTime, NowDataTime);
true -> true ->
%% rotation is today
case calcNextRotate(T, Now) of
{{Year, Month, Date}, _} = NewNow -> NewNow;
{NewDate, _} ->
%% rotation *isn't* today! rerun the calculation
NewNow = setelement(1, Now, NewDate),
calcNextRotate([{date, Date} | T], NewNow)
case {NDate, NTime} > NowDataTime of
true ->
calcNextRotate(Spec, NDate, NTime, NowDataTime);
_ ->
LastDay = rumTime:monthDay(NYear, NMonth),
NexSec = calendar:lDateTimeToSec({{NYear, NMonth, LastDay}, {23, 59, 59}}) + 1,
{NewNDate, _NewNTime} = rumTime:secToLDateTime(NexSec),
{NewNYear, NewNMonth, _} = NewNDate,
calcNextRotate(Spec, {NewNYear, NewNMonth, SDate}, NTime, NowDataTime)
end end
end end
end. end.
-spec trace_filter(Query :: 'none' | [tuple()]) -> {ok, any()}. -spec trace_filter(Query :: 'none' | [tuple()]) -> {ok, any()}.

Зареждане…
Отказ
Запис