Files
wxapp-guantong/backend/queries/price_inquiries.sql
T
2026-09-22 22:51:19 +08:00

76 lines
3.1 KiB
SQL

-- name: UpsertPriceInquiry :one
INSERT INTO price_inquiries (
id, user_id, phone, province, city, district, project_name, status,
last_submitted_at, created_at, updated_at
)
VALUES (
?, ?, ?, ?, ?, ?, ?, ?,
STRFTIME('%Y-%m-%d %H:%M:%f', 'now', '+8 hours'),
STRFTIME('%Y-%m-%d %H:%M:%f', 'now', '+8 hours'),
STRFTIME('%Y-%m-%d %H:%M:%f', 'now', '+8 hours')
)
ON CONFLICT(phone) DO UPDATE SET
last_submitted_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'now', '+8 hours'),
updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'now', '+8 hours')
RETURNING id, user_id, phone, province, city, district, project_name, status, remark, last_submitted_at, created_at, updated_at;
-- name: ListPriceInquiries :many
SELECT id, user_id, phone, province, city, district, project_name, status, remark, last_submitted_at, created_at, updated_at FROM price_inquiries
WHERE (
sqlc.arg(area) = ''
OR province LIKE '%' || sqlc.arg(area) || '%'
OR city LIKE '%' || sqlc.arg(area) || '%'
OR district LIKE '%' || sqlc.arg(area) || '%'
)
AND (sqlc.arg(phone) = '' OR phone LIKE '%' || sqlc.arg(phone) || '%')
AND (sqlc.arg(status) = '' OR status = sqlc.arg(status))
AND (
(sqlc.arg(time_from) = '' AND sqlc.arg(time_to) = '')
OR (
(sqlc.arg(time_from) = '' OR created_at >= sqlc.arg(time_from) || ' 00:00:00')
AND (sqlc.arg(time_to) = '' OR created_at <= sqlc.arg(time_to) || ' 23:59:59')
)
OR (
(sqlc.arg(time_from) = '' OR updated_at >= sqlc.arg(time_from) || ' 00:00:00')
AND (sqlc.arg(time_to) = '' OR updated_at <= sqlc.arg(time_to) || ' 23:59:59')
)
OR (
(sqlc.arg(time_from) = '' OR last_submitted_at >= sqlc.arg(time_from) || ' 00:00:00')
AND (sqlc.arg(time_to) = '' OR last_submitted_at <= sqlc.arg(time_to) || ' 23:59:59')
)
)
ORDER BY last_submitted_at DESC, updated_at DESC, created_at DESC
LIMIT sqlc.arg(limit) OFFSET sqlc.arg(offset);
-- name: CountPriceInquiries :one
SELECT COUNT(*) FROM price_inquiries
WHERE (
sqlc.arg(area) = ''
OR province LIKE '%' || sqlc.arg(area) || '%'
OR city LIKE '%' || sqlc.arg(area) || '%'
OR district LIKE '%' || sqlc.arg(area) || '%'
)
AND (sqlc.arg(phone) = '' OR phone LIKE '%' || sqlc.arg(phone) || '%')
AND (sqlc.arg(status) = '' OR status = sqlc.arg(status))
AND (
(sqlc.arg(time_from) = '' AND sqlc.arg(time_to) = '')
OR (
(sqlc.arg(time_from) = '' OR created_at >= sqlc.arg(time_from) || ' 00:00:00')
AND (sqlc.arg(time_to) = '' OR created_at <= sqlc.arg(time_to) || ' 23:59:59')
)
OR (
(sqlc.arg(time_from) = '' OR updated_at >= sqlc.arg(time_from) || ' 00:00:00')
AND (sqlc.arg(time_to) = '' OR updated_at <= sqlc.arg(time_to) || ' 23:59:59')
)
OR (
(sqlc.arg(time_from) = '' OR last_submitted_at >= sqlc.arg(time_from) || ' 00:00:00')
AND (sqlc.arg(time_to) = '' OR last_submitted_at <= sqlc.arg(time_to) || ' 23:59:59')
)
);
-- name: UpdatePriceInquiry :one
UPDATE price_inquiries
SET status = ?, remark = ?, updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'now', '+8 hours')
WHERE id = ?
RETURNING id, user_id, phone, province, city, district, project_name, status, remark, last_submitted_at, created_at, updated_at;