fix(cycle): 사이클 종료를 strict less than 으로 — 마감 시각 정각부터는 다음 사이클
이전: O.regdate <= sale_end_date (마감 시각 정각도 이번 사이클로 포함) 변경: O.regdate < sale_end_date (마감 시각 직전까지 = 17:59:59 까지) 예) 월요일 18:00 마감: · 17:59:59 발주 → 이번 사이클 (이번주 월요일 마감) 합산 · 18:00:00 발주 → 다음 사이클 (다음주 월요일 마감 또는 화요일 마감) 자정 정각(00:00) 입력은 '그날 종일 마감' 으로 해석해 다음날 00:00 직전까지 포함. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -194,11 +194,11 @@ export async function POST(req: NextRequest) {
|
|||||||
date_trunc('day', I.sale_end_date) - INTERVAL '7 days')
|
date_trunc('day', I.sale_end_date) - INTERVAL '7 days')
|
||||||
END
|
END
|
||||||
)
|
)
|
||||||
AND O.regdate <= (
|
AND O.regdate < (
|
||||||
CASE
|
CASE
|
||||||
WHEN I.sale_end_date = date_trunc('day', I.sale_end_date)
|
WHEN I.sale_end_date = date_trunc('day', I.sale_end_date)
|
||||||
THEN I.sale_end_date + INTERVAL '1 day' - INTERVAL '1 second'
|
THEN I.sale_end_date + INTERVAL '1 day' -- 자정 입력 = 그날 종일 마감
|
||||||
ELSE I.sale_end_date
|
ELSE I.sale_end_date -- 시간 명시 = 그 시각 직전까지
|
||||||
END
|
END
|
||||||
)
|
)
|
||||||
), 0) AS "RESERVED_QTY",
|
), 0) AS "RESERVED_QTY",
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
// 마감 사이클 기반 한정 수량(limit_qty) 누적 합산 계산.
|
// 마감 사이클 기반 한정 수량(limit_qty) 누적 합산 계산.
|
||||||
//
|
//
|
||||||
// 사이클 정의 (sale_end_date 요일 기준, PG DOW: 0=일, 1=월, 2=화):
|
// 사이클 정의 (sale_end_date 요일 기준, PG DOW: 0=일, 1=월, 2=화):
|
||||||
// · 월요일 마감(1): 저번주 금/토/일 + 이번주 월요일 마감 시각까지 (= 마감일 -3일 00:00 ~ 마감일)
|
// · 월요일 마감(1): 저번주 금/토/일 + 이번주 월요일 마감 시각 직전까지 (= 마감일 -3일 00:00 ~ 마감 시각 직전)
|
||||||
// · 화요일 마감(2): 저번주 금/토/일 + 이번주 월/화요일 마감 시각까지 (= 마감일 -4일 00:00 ~ 마감일)
|
// · 화요일 마감(2): 저번주 금/토/일 + 이번주 월/화요일 마감 시각 직전까지 (= 마감일 -4일 00:00 ~ 마감 시각 직전)
|
||||||
// · 그 외 요일: sale_start_date ~ sale_end_date (fallback)
|
// · 그 외 요일: sale_start_date ~ sale_end_date 직전 (fallback)
|
||||||
//
|
//
|
||||||
|
// 종료 시점은 **반열림(strict less than)** — "월요일 18:00 마감" 이면 17:59:59 까지 포함, 18:00:00 정각부터는 다음 사이클.
|
||||||
|
// 자정 정각(00:00) 으로 입력된 마감은 "그날 종일 마감" 으로 해석해 다음날 00:00 직전까지 포함한다.
|
||||||
// 마감 시각은 sale_end_date 의 시각 부분 그대로 사용 (관리자가 품목 마스터에서 분 단위로 지정).
|
// 마감 시각은 sale_end_date 의 시각 부분 그대로 사용 (관리자가 품목 마스터에서 분 단위로 지정).
|
||||||
// limit_qty 가 null 또는 0 이면 한정 의미 없음 — 호출자가 검증 자체를 skip 해야 한다.
|
// limit_qty 가 null 또는 0 이면 한정 의미 없음 — 호출자가 검증 자체를 skip 해야 한다.
|
||||||
//
|
//
|
||||||
@@ -36,11 +38,11 @@ export async function getReservedQty(itemObjid: string, client?: PoolClient): Pr
|
|||||||
date_trunc('day', I.sale_end_date) - INTERVAL '7 days')
|
date_trunc('day', I.sale_end_date) - INTERVAL '7 days')
|
||||||
END
|
END
|
||||||
)
|
)
|
||||||
AND O.regdate <= (
|
AND O.regdate < (
|
||||||
CASE
|
CASE
|
||||||
WHEN I.sale_end_date = date_trunc('day', I.sale_end_date)
|
WHEN I.sale_end_date = date_trunc('day', I.sale_end_date)
|
||||||
THEN I.sale_end_date + INTERVAL '1 day' - INTERVAL '1 second'
|
THEN I.sale_end_date + INTERVAL '1 day' -- 자정 입력 = 그날 종일 마감 → 다음날 00:00 직전까지
|
||||||
ELSE I.sale_end_date
|
ELSE I.sale_end_date -- 시간 명시 = 그 시각 직전까지 (마감 시각 정각은 마감)
|
||||||
END
|
END
|
||||||
)`,
|
)`,
|
||||||
[itemObjid]
|
[itemObjid]
|
||||||
|
|||||||
Reference in New Issue
Block a user