Merge branch 'main' into dev
This commit is contained in:
+33
-7
@@ -7,8 +7,8 @@ set -Eeuo pipefail
|
||||
#
|
||||
# 它把以前散落在文档里的脚本步骤串成一条可重复执行的流水线:
|
||||
# ① 存量订单项收入回填 revenue:backfill
|
||||
# ② 渠道/商品由管道处理(无需回填)
|
||||
# ③ 财务历史重建(分窗口) finance:rebuild-cutover
|
||||
# ② 订单级收单核销补投 voucher:backfill-order-received
|
||||
# ③ 财务历史重建(分窗口) finance:rebuild-derived
|
||||
# ④ 上线验收(只读 SQL) scripts/verify-finance-launch.sql
|
||||
#
|
||||
# 设计原则:
|
||||
@@ -40,6 +40,7 @@ WINDOW_DAYS="${WINDOW_DAYS:-30}"
|
||||
BATCH_SIZE="${BATCH_SIZE:-5000}"
|
||||
MAX_BATCHES="${MAX_BATCHES:-1000}"
|
||||
MAX_BACKFILL_ROUNDS="${MAX_BACKFILL_ROUNDS:-5}"
|
||||
VOUCHER_BACKFILL_DAYS="${VOUCHER_BACKFILL_DAYS:-7}"
|
||||
|
||||
DRY_RUN=false
|
||||
SKIP_BACKFILL=false
|
||||
@@ -81,6 +82,7 @@ usage() {
|
||||
POST_DEPLOY_COMPOSE_FILE 指定 compose 文件(默认 docker-compose.yml)
|
||||
TOOLS_IMAGE 工具镜像名(默认 order-site/tools:latest)
|
||||
WINDOW_DAYS / BATCH_SIZE / MAX_BATCHES 同上对应选项的默认值
|
||||
VOUCHER_BACKFILL_DAYS 订单级收单核销补投回看天数(默认 7)
|
||||
|
||||
首次上线顺序(避免商品未归一先同步产生大量异常):
|
||||
① bash deploy/post-deploy.sh --only=backfill
|
||||
@@ -147,6 +149,7 @@ validate_integer "--window-days" "$WINDOW_DAYS" 1 400
|
||||
validate_integer "--batch-size" "$BATCH_SIZE" 1 50000
|
||||
validate_integer "--max-batches" "$MAX_BATCHES" 1 10000
|
||||
validate_integer "MAX_BACKFILL_ROUNDS" "$MAX_BACKFILL_ROUNDS" 1 100
|
||||
validate_integer "VOUCHER_BACKFILL_DAYS" "$VOUCHER_BACKFILL_DAYS" 1 90
|
||||
|
||||
should_run() {
|
||||
[[ -z "$ONLY" || "$ONLY" == "$1" ]]
|
||||
@@ -343,7 +346,7 @@ preflight() {
|
||||
fi
|
||||
|
||||
PENDING_REVENUE="$(psql_scalar "SELECT count(*) FROM order_items WHERE revenue_basis = 'unknown'" | tr -d '[:space:]')"
|
||||
PENDING_FULFILLMENT="$(psql_scalar "SELECT count(*) FROM order_items WHERE fulfillment_status = 'pending'" | tr -d '[:space:]')"
|
||||
PENDING_FULFILLMENT="$(psql_scalar "SELECT count(*) FROM fulfillments WHERE status = 'pending'" | tr -d '[:space:]')"
|
||||
|
||||
log " postgres 运行中 / 迁移 103–106 已应用"
|
||||
log " 待回填收入项:${PENDING_REVENUE} 行;待回填履约方式:${PENDING_FULFILLMENT} 行"
|
||||
@@ -362,7 +365,20 @@ step_backfill() {
|
||||
run_backfill revenue:backfill --batchSize="$BATCH_SIZE" --maxBatches="$MAX_BATCHES"
|
||||
fi
|
||||
|
||||
log "② 渠道判定与商品归一出管道负责,无需手工回填"
|
||||
log "② 补投订单级收单核销任务(最近 ${VOUCHER_BACKFILL_DAYS} 天)"
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
if docker image inspect "$TOOLS_IMAGE" >/dev/null 2>&1; then
|
||||
run_tool voucher:backfill-order-received --days="$VOUCHER_BACKFILL_DAYS" ||
|
||||
warn "订单级核销补投 dry-run 预览失败(不影响后续)"
|
||||
else
|
||||
log " [dry-run] 跳过执行(工具镜像未构建)"
|
||||
fi
|
||||
else
|
||||
run_tool voucher:backfill-order-received \
|
||||
--days="$VOUCHER_BACKFILL_DAYS" \
|
||||
--execute \
|
||||
--confirm=ENQUEUE_ORDER_RECEIVED
|
||||
fi
|
||||
|
||||
if [[ "$DRY_RUN" != true ]]; then
|
||||
refresh_stats
|
||||
@@ -388,17 +404,18 @@ step_sync() {
|
||||
if [[ "$products" == "0" ]]; then
|
||||
warn "商品目录为空:财务重建会生成大量 product_mapping_missing 异常;建议先完成商品初始化再跑 --only=sync"
|
||||
fi
|
||||
log "③ 财务历史重建(finance:rebuild-cutover),区间 ${from} → ${to},每窗 ${WINDOW_DAYS} 天"
|
||||
log "③ 财务派生数据重建(finance:rebuild-derived),区间 ${from} → ${to},每窗 ${WINDOW_DAYS} 天"
|
||||
while :; do
|
||||
win_to="$(date_add_days "$from" $((WINDOW_DAYS - 1)))"
|
||||
if [[ "$win_to" > "$to" ]]; then
|
||||
win_to="$to"
|
||||
fi
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
log " [dry-run] npm run finance:rebuild-cutover -- --date-from=${from} --date-to=${win_to}"
|
||||
log " [dry-run] npm run finance:rebuild-derived -- --date-from=${from} --date-to=${win_to} --execute --confirm=REBUILD_DERIVED"
|
||||
else
|
||||
log " 窗口 ${from} → ${win_to}"
|
||||
run_tool finance:rebuild-cutover --date-from="$from" --date-to="$win_to"
|
||||
run_tool finance:rebuild-derived --date-from="$from" --date-to="$win_to" \
|
||||
--execute --confirm=REBUILD_DERIVED
|
||||
fi
|
||||
[[ "$win_to" == "$to" ]] && break
|
||||
from="$(date_add_days "$win_to" 1)"
|
||||
@@ -418,6 +435,15 @@ step_verify() {
|
||||
warn "验收未通过(psql 退出码 ${code}):按上面 FAIL 项的「处理建议」逐条处理后,重跑 --only=verify"
|
||||
return 1
|
||||
fi
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
log " [dry-run] npm run audit:finance -- --strict"
|
||||
else
|
||||
ensure_tools_image
|
||||
if ! run_tool audit:finance -- --strict; then
|
||||
warn "财务审计未通过:修复销售范围/事实/总账差异后重跑 --only=verify"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
log "验收全部通过"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user