mirror of
https://github.com/teslamate-org/teslamate.git
synced 2026-01-24 21:06:08 +08:00
limit positions to set elevation for to last 10 days (#4228)
This commit is contained in:
+24
-14
@@ -173,25 +173,35 @@ defmodule TeslaMate.Log do
|
||||
def get_positions_without_elevation(min_id \\ 0, opts \\ []) do
|
||||
limit = Keyword.get(opts, :limit, 100)
|
||||
|
||||
date_earliest =
|
||||
cond do
|
||||
min_id == 0 ->
|
||||
DateTime.add(DateTime.utc_now(), -10, :day)
|
||||
|
||||
true ->
|
||||
DateTime.from_iso8601("2003-07-01T00:00:00Z")
|
||||
end
|
||||
|
||||
naive_date_earliest = DateTime.to_naive(date_earliest)
|
||||
|
||||
non_streamed_drives =
|
||||
Repo.all(
|
||||
from d in subquery(
|
||||
from p in Position,
|
||||
select: %{
|
||||
drive_id: p.drive_id,
|
||||
streamed_count:
|
||||
count()
|
||||
|> filter(not is_nil(p.odometer) and is_nil(p.ideal_battery_range_km))
|
||||
},
|
||||
where: not is_nil(p.drive_id),
|
||||
group_by: p.drive_id
|
||||
),
|
||||
select: d.drive_id,
|
||||
where: d.streamed_count == 0
|
||||
from p in Position,
|
||||
select: p.drive_id,
|
||||
inner_join: d in assoc(p, :drive),
|
||||
where: d.start_date > ^naive_date_earliest,
|
||||
having:
|
||||
count()
|
||||
|> filter(not is_nil(p.odometer) and is_nil(p.ideal_battery_range_km)) == 0,
|
||||
group_by: p.drive_id
|
||||
)
|
||||
|
||||
Position
|
||||
|> where([p], p.id > ^min_id and is_nil(p.elevation) and p.drive_id in ^non_streamed_drives)
|
||||
|> where(
|
||||
[p],
|
||||
p.id > ^min_id and is_nil(p.elevation) and p.drive_id in ^non_streamed_drives and
|
||||
p.date > ^naive_date_earliest
|
||||
)
|
||||
|> order_by(asc: :id)
|
||||
|> limit(^limit)
|
||||
|> Repo.all()
|
||||
|
||||
Reference in New Issue
Block a user