| | |
| | | import com.example.firstapp.database.entity.Msg |
| | | import com.example.firstapp.model.CourierStat |
| | | import com.example.firstapp.model.DailyStat |
| | | import com.example.firstapp.model.HeatmapStat |
| | | import com.example.firstapp.model.StationGroup |
| | | import io.reactivex.Completable |
| | | import kotlinx.coroutines.flow.Flow |
| | | |
| | |
| | | @Query("DELETE FROM Code where id=:id") |
| | | fun delete(id: Long) |
| | | |
| | | @Query("DELETE FROM Code") |
| | | fun deleteAll(): Completable |
| | | |
| | | |
| | | @Query("SELECT * FROM Code WHERE id = :id LIMIT 1") |
| | | fun getCodeById(id: Long): Code? |
| | |
| | | @Query("SELECT * FROM Code") |
| | | fun getAllCodes(): List<Code> |
| | | |
| | | @Query("SELECT * FROM Code WHERE type = :type") |
| | | @Query("SELECT * FROM Code WHERE oneLevel = :type") |
| | | fun getCodesByType(type: String): List<Code> |
| | | |
| | | |
| | |
| | | |
| | | @Query(""" |
| | | SELECT * FROM Code |
| | | WHERE type LIKE '%' || :keyword || '%' |
| | | WHERE oneLevel LIKE '%' || :keyword || '%' |
| | | AND pickup = '0' |
| | | ORDER BY time DESC |
| | | ORDER BY createTime DESC |
| | | """) |
| | | fun getByKeyword(keyword: String): List<Code> |
| | | |
| | | @Query("SELECT * FROM Code WHERE type = :content and code= :code and createtime = :dateString LIMIT 1") |
| | | fun queryByTypeAndCodeAndDate(content: String, code: String, dateString: String): Code |
| | | @Query(""" |
| | | SELECT * FROM Code |
| | | WHERE category = :category |
| | | AND code = :code |
| | | AND substr(createTime, 1, 10) = substr(:dateString, 1, 10) |
| | | ORDER BY createTime DESC |
| | | LIMIT 1 |
| | | """) |
| | | fun queryByTypeAndCodeAndDate(category: String, code: String, dateString: String): Code? |
| | | |
| | | |
| | | @Query("update Code set pickup = '1' , pickuptime = CURRENT_TIMESTAMP where id=:id") |
| | | fun pickup(id: Long) |
| | | |
| | | //查询当天包裹信息 |
| | | @Query("SELECT * FROM code WHERE date(createtime) = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createtime DESC") |
| | | @Query("SELECT * FROM code WHERE date(createTime) = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createTime DESC") |
| | | fun getNewPackagesByDay(date: Long): List<Code> |
| | | |
| | | @Query(""" |
| | | SELECT * FROM code |
| | | WHERE substr(createtime, 1, 10) = |
| | | date(:date/1000, 'unixepoch', 'localtime') |
| | | ORDER BY createtime DESC |
| | | WHERE substr(createTime, 1, 10) = |
| | | date(:date/1000, 'unixepoch', 'localtime') |
| | | ORDER BY createTime DESC |
| | | """) |
| | | fun getPackagesByDay(date: Long): Flow<List<Code>> |
| | | |
| | | @Query(""" |
| | | SELECT type as courierName, COUNT(*) as count |
| | | SELECT * FROM code |
| | | WHERE substr(createTime, 1, 10) = |
| | | date(:date/1000, 'unixepoch', 'localtime') and pickup = 1 and category='快递' |
| | | ORDER BY createTime DESC |
| | | """) |
| | | fun getPackagesByDayReaded(date: Long): Flow<List<Code>> |
| | | |
| | | @Query(""" |
| | | SELECT oneLevel as courierName, COUNT(*) as count |
| | | FROM code |
| | | WHERE strftime('%Y-%W', substr(createtime, 1, 10)) = |
| | | strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime')) |
| | | GROUP BY type |
| | | WHERE strftime('%Y-%W', substr(createTime, 1, 10)) = |
| | | strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime')) and category='快递' |
| | | GROUP BY oneLevel |
| | | ORDER BY count DESC |
| | | """) |
| | | fun getCourierStatsByWeek(date: Long): Flow<List<CourierStat>> |
| | | |
| | | @Query(""" |
| | | WITH RECURSIVE weeks(week_start, week_end) AS ( |
| | | -- 从选定的日期开始计算周 |
| | | SELECT |
| | | date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 1', '-28 days') as week_start, |
| | | date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '-28 days') as week_end |
| | | UNION ALL |
| | | SELECT |
| | | date(week_start, '+7 days'), |
| | | date(week_end, '+7 days') |
| | | FROM weeks |
| | | WHERE date(week_start) <= date(datetime(:date/1000, 'unixepoch', 'localtime')) |
| | | LIMIT 5 |
| | | ) |
| | | SELECT |
| | | CAST(strftime('%W', week_start) AS INTEGER) as date, |
| | | COUNT(code.id) as count, |
| | | week_start as week_start |
| | | FROM weeks |
| | | LEFT JOIN code ON datetime(code.createtime) BETWEEN datetime(weeks.week_start) |
| | | AND datetime(weeks.week_end, '+23 hours', '+59 minutes', '+59 seconds') |
| | | GROUP BY weeks.week_start |
| | | ORDER BY weeks.week_start ASC |
| | | """) |
| | | fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>> |
| | | WITH RECURSIVE dates(date_value) AS ( |
| | | SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '-21 days') as date_value |
| | | UNION ALL |
| | | SELECT date(date_value, '+7 days') |
| | | FROM dates |
| | | WHERE date_value < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '+14 days') |
| | | ) |
| | | SELECT |
| | | strftime('%Y-%m-%d', date_value) as date, |
| | | COUNT(c.id) as count, |
| | | strftime('%Y-%m-%d', date_value) as weekStart |
| | | FROM dates d |
| | | LEFT JOIN code c ON strftime('%Y-%m-%d', c.createTime) BETWEEN |
| | | strftime('%Y-%m-%d', d.date_value) |
| | | AND strftime('%Y-%m-%d', date(d.date_value, '+6 days')) |
| | | GROUP BY d.date_value |
| | | ORDER BY d.date_value ASC |
| | | LIMIT :weekCount |
| | | """) |
| | | fun getWeeklyStats(date: Long, weekCount: Int): Flow<List<DailyStat>> |
| | | |
| | | @Query(""" |
| | | SELECT * FROM code |
| | | WHERE substr(createtime, 1, 10) = |
| | | WHERE substr(createTime, 1, 10) = |
| | | date(:date/1000, 'unixepoch', 'localtime') |
| | | ORDER BY createtime DESC |
| | | ORDER BY createTime DESC |
| | | """) |
| | | fun getPackagesByWeek(date: Long): Flow<List<Code>> |
| | | |
| | | @Query(""" |
| | | SELECT oneLevel as courierName, COUNT(*) as count |
| | | FROM code |
| | | WHERE strftime('%Y-%m', substr(createTime, 1, 10)) = |
| | | strftime('%Y-%m', datetime(:date/1000, 'unixepoch', 'localtime')) and category='快递' |
| | | GROUP BY oneLevel |
| | | ORDER BY count DESC |
| | | """) |
| | | fun getCourierStatsByMonth(date: Long): Flow<List<CourierStat>> |
| | | |
| | | @Query(""" |
| | | SELECT oneLevel as courierName, COUNT(*) as count |
| | | FROM code |
| | | WHERE strftime('%Y', substr(createTime, 1, 10)) = |
| | | strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) and category='快递' |
| | | GROUP BY oneLevel |
| | | ORDER BY count DESC |
| | | """) |
| | | fun getCourierStatsByYear(date: Long): Flow<List<CourierStat>> |
| | | |
| | | // @Query(""" |
| | | // WITH RECURSIVE months(month_start) AS ( |
| | | // SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month', '-11 months') |
| | | // UNION ALL |
| | | // SELECT date(month_start, '+1 month') |
| | | // FROM months |
| | | // WHERE date(month_start) < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month') |
| | | // ) |
| | | // SELECT |
| | | // strftime('%m', month_start) as date, |
| | | // COUNT(code.id) as count, |
| | | // month_start as week_start |
| | | // FROM months |
| | | // LEFT JOIN code ON strftime('%Y-%m', code.createTime) = strftime('%Y-%m', months.month_start) |
| | | // GROUP BY months.month_start |
| | | // ORDER BY months.month_start ASC |
| | | // """) |
| | | // fun getMonthlyStats(date: Long): Flow<List<DailyStat>> |
| | | |
| | | @Query(""" |
| | | WITH RECURSIVE years(year_start) AS ( |
| | | SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year', '-4 years') |
| | | UNION ALL |
| | | SELECT date(year_start, '+1 year') |
| | | FROM years |
| | | WHERE date(year_start) < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year') |
| | | ) |
| | | SELECT |
| | | strftime('%Y', year_start) as date, |
| | | COUNT(code.id) as count, |
| | | strftime('%Y-%m-%d', year_start) as weekStart |
| | | FROM years |
| | | LEFT JOIN code ON strftime('%Y', code.createTime) = strftime('%Y', years.year_start) |
| | | GROUP BY years.year_start |
| | | ORDER BY years.year_start ASC |
| | | """) |
| | | fun getYearlyStats(date: Long): Flow<List<DailyStat>> |
| | | |
| | | @Query(""" |
| | | WITH RECURSIVE dates(date) AS ( |
| | | SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year') |
| | | UNION ALL |
| | | SELECT date(date, '+1 day') |
| | | FROM dates |
| | | WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year', '+1 year', '-1 day') |
| | | ) |
| | | SELECT |
| | | CAST(strftime('%w', dates.date) AS INTEGER) as dayOfWeek, |
| | | CAST(strftime('%W', dates.date) AS INTEGER) as weekOfYear, |
| | | COUNT(code.id) as count |
| | | FROM dates |
| | | LEFT JOIN code ON date(code.createTime) = dates.date and code.category='快递' |
| | | GROUP BY dates.date |
| | | ORDER BY dates.date |
| | | """) |
| | | fun getYearlyHeatmap(date: Long): Flow<List<HeatmapStat>> |
| | | |
| | | @Query(""" |
| | | WITH RECURSIVE days(date) AS ( |
| | | SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month') |
| | | UNION ALL |
| | | SELECT date(date, '+1 day') |
| | | FROM days |
| | | WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month', '+1 month', '-1 day') |
| | | ) |
| | | SELECT |
| | | strftime('%d', days.date) || '' as date, |
| | | COUNT(code.id) as count, |
| | | strftime('%Y-%m-%d', days.date) as weekStart |
| | | FROM days |
| | | LEFT JOIN code ON date(code.createTime) = days.date |
| | | GROUP BY days.date |
| | | ORDER BY days.date ASC |
| | | """) |
| | | fun getMonthlyStats(date: Long): Flow<List<DailyStat>> |
| | | |
| | | @Query(""" |
| | | WITH RECURSIVE months(month_start) AS ( |
| | | SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year') as month_start |
| | | UNION ALL |
| | | SELECT date(month_start, '+1 month') |
| | | FROM months |
| | | WHERE strftime('%m', month_start) < '12' |
| | | ) |
| | | SELECT |
| | | strftime('%m', month_start) as date, |
| | | COUNT(c.id) as count, |
| | | strftime('%Y-%m-%d', month_start) as weekStart |
| | | FROM months m |
| | | LEFT JOIN code c ON strftime('%Y-%m', c.createTime) = strftime('%Y-%m', m.month_start) and c.category='快递' |
| | | GROUP BY m.month_start |
| | | ORDER BY m.month_start ASC |
| | | """) |
| | | fun getYearMonthlyStats(date: Long): Flow<List<DailyStat>> |
| | | |
| | | |
| | | // 新增当前周统计方法 |
| | | @Query(""" |
| | | WITH RECURSIVE days(date) AS ( |
| | | SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0') as date |
| | | UNION ALL |
| | | SELECT date(date, '+1 day') |
| | | FROM days |
| | | WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 6') |
| | | ) |
| | | SELECT |
| | | strftime('%Y-%m-%d', days.date) as date, |
| | | COUNT(code.id) as count, |
| | | strftime('%Y-%m-%d', days.date) as weekStart |
| | | FROM days |
| | | LEFT JOIN code ON date(code.createTime) = days.date |
| | | GROUP BY days.date |
| | | ORDER BY days.date ASC |
| | | """) |
| | | fun getCurrentWeekStats(date: Long): Flow<List<DailyStat>> |
| | | |
| | | // 新增当前年统计方法 |
| | | @Query(""" |
| | | SELECT |
| | | strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) as date, |
| | | COUNT(id) as count, |
| | | strftime('%Y-%m-%d', datetime(:date/1000, 'unixepoch', 'localtime')) as weekStart |
| | | FROM code |
| | | WHERE strftime('%Y', createTime) = strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) |
| | | """) |
| | | fun getCurrentYearStats(date: Long): Flow<List<DailyStat>> |
| | | |
| | | @Query(""" |
| | | SELECT oneLevel as stationName, COUNT(*) as count |
| | | FROM Code |
| | | WHERE category = :type AND pickup = '0' |
| | | GROUP BY oneLevel |
| | | ORDER BY createTime DESC |
| | | """) |
| | | fun getStationsByType(type: String): List<StationGroup> |
| | | |
| | | @Query(""" |
| | | SELECT * FROM Code |
| | | WHERE category = :type AND pickup = '0' |
| | | AND oneLevel = :stationName |
| | | ORDER BY createTime DESC |
| | | """) |
| | | fun getPackagesByTypeAndStation(type: String, stationName: String): List<Code> |
| | | |
| | | |
| | | @Query(""" |
| | | SELECT COUNT(1) |
| | | FROM code |
| | | WHERE date(createTime) BETWEEN date(:startDateCur) AND date(:endDateCur) |
| | | """) |
| | | fun getCurrentWeekStats2(startDateCur: String, endDateCur: String): Flow<Long> |
| | | |
| | | // @Query(""" |
| | | // WITH RECURSIVE dates(date_value) AS ( |
| | | // SELECT date('now', 'weekday 1', '-7 days') |
| | | // UNION ALL |
| | | // SELECT date(date_value, '+1 day') |
| | | // FROM dates |
| | | // WHERE date_value < date('now', 'weekday 1', '-7 days', '+6 days') |
| | | // ) |
| | | // SELECT |
| | | // strftime('%d', date_value) AS date, |
| | | // COUNT(c.id) AS count, |
| | | // '' as weekStart |
| | | // FROM dates d |
| | | // LEFT JOIN code c ON date(c.createTime) = d.date_value |
| | | // GROUP BY d.date_value |
| | | // ORDER BY d.date_value ASC |
| | | // |
| | | // """) |
| | | |
| | | @Query(""" |
| | | WITH RECURSIVE dates(date_value) AS ( |
| | | SELECT date(:startDateCur) |
| | | UNION ALL |
| | | SELECT date(date_value, '+1 day') |
| | | FROM dates |
| | | WHERE date_value < date(:endDateCur) |
| | | ) |
| | | SELECT |
| | | strftime('%d', date_value) AS date, |
| | | COUNT(c.id) AS count, |
| | | '' AS weekStart |
| | | FROM dates d |
| | | LEFT JOIN code c ON date(c.createTime) = d.date_value and c.category='快递' |
| | | GROUP BY d.date_value |
| | | ORDER BY d.date_value ASC |
| | | """) |
| | | fun getWeeklyStatsChart(startDateCur: String, endDateCur: String): Flow<List<DailyStat>> |
| | | |
| | | |
| | | @Query(""" |
| | | SELECT COUNT(1) |
| | | FROM code |
| | | WHERE date(createTime) BETWEEN date(:startDateCur) AND date(:endDateCur) and category =:type |
| | | """) |
| | | fun getDateStatsByType(startDateCur: String, endDateCur: String,type: String): Flow<Long> |
| | | } |