Files
stock/cron/em_reports.sh
2026-01-19 09:27:33 +08:00

112 lines
4.0 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -euo pipefail # 严格模式:错误立即退出,未定义变量报错,管道失败触发退出
# -------------------------- 颜色常量(美化输出) --------------------------
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 重置颜色
# -------------------------- 核心配置(可按需修改) --------------------------
# 工作目录执行Python脚本的目录
WORK_DIR="/root/projects/stock/"
# 日期配置文件路径读取默认begin日期
DATE_FILE="$WORK_DIR/cron/reports_curr.txt"
# DB环境变量值
DB_ENV="nas"
# Python脚本模块路径
PY_MODULE="src.em_reports.fetch"
# -------------------------- 日期处理工具函数 --------------------------
# 验证日期格式是否为 YYYY-MM-DD
validate_date() {
local date_str="$1"
# 使用date命令验证无效则返回非0
if date -d "$date_str" "+%Y-%m-%d" >/dev/null 2>&1; then
return 0
else
return 1
fi
}
# 计算日期差值(如 end_date - N天输出 YYYY-MM-DD 格式
calc_date_diff() {
local base_date="$1"
local days="$2"
date -d "$base_date - $days days" "+%Y-%m-%d"
}
# -------------------------- 主逻辑确定begin/end日期 --------------------------
# Step 1: 设置end日期固定为当前日期
END_DATE=$(date "+%Y-%m-%d")
echo -e "${BLUE}📅 自动获取end日期$END_DATE${NC}"
# Step 2: 处理begin日期优先级命令行参数 > u3c3.txt > end-7天
BEGIN_DATE=""
# 检查是否传入命令行参数(第一个参数)
if [[ $# -ge 1 && -n "$1" ]]; then
if validate_date "$1"; then
BEGIN_DATE="$1"
echo -e "${GREEN}✅ 从命令行获取begin日期$BEGIN_DATE${NC}"
else
echo -e "${RED}❌ 命令行传入的日期 '$1' 格式无效需为YYYY-MM-DD尝试读取配置文件...${NC}"
fi
fi
# Step 3: 若命令行参数无效/未传入读取u3c3.txt
if [[ -z "$BEGIN_DATE" ]]; then
if [[ -f "$DATE_FILE" ]]; then
# 读取文件内容(去除空白字符/换行)
FILE_DATE=$(cat "$DATE_FILE" | tr -d ' \n\r\t')
if validate_date "$FILE_DATE"; then
BEGIN_DATE="$FILE_DATE"
echo -e "${GREEN}✅ 从$DATE_FILE读取begin日期$BEGIN_DATE${NC}"
else
echo -e "${YELLOW}⚠️ $DATE_FILE中的日期 '$FILE_DATE' 格式无效,使用默认值...${NC}"
fi
else
echo -e "${YELLOW}⚠️ 未找到$DATE_FILE文件,使用默认值...${NC}"
fi
fi
# Step 4: 若以上都无使用end-7天作为默认值
if [[ -z "$BEGIN_DATE" ]]; then
BEGIN_DATE=$(calc_date_diff "$END_DATE" 7)
echo -e "${GREEN}✅ 使用默认begin日期end-7天$BEGIN_DATE${NC}"
fi
# -------------------------- 执行Python脚本 --------------------------
echo -e "\n${BLUE}🚀 开始执行em_reports脚本...${NC}"
echo -e "🔍 执行参数begin=$BEGIN_DATE, end=$END_DATE${NC}"
echo -e "=====================================${NC}"
# 进入工作目录
cd "$WORK_DIR" || {
echo -e "${RED}❌ 进入工作目录失败:$WORK_DIR${NC}"
exit 1
}
# 执行第一个命令mode=fetch
echo -e "\n${BLUE}👉 执行模式fetch${NC}"
export DB_ENV="$DB_ENV" && python3 -m "$PY_MODULE" --begin="$BEGIN_DATE" --end="$END_DATE" --mode=fetch
if [[ $? -ne 0 ]]; then
echo -e "${RED}❌ mode=fetch 执行失败!终止脚本${NC}"
exit 1
fi
echo -e "${GREEN}✅ mode=fetch 执行成功${NC}"
# 执行第二个命令mode=down
echo -e "\n${BLUE}👉 执行模式down${NC}"
export DB_ENV="$DB_ENV" && python3 -m "$PY_MODULE" --begin="$BEGIN_DATE" --end="$END_DATE" --mode=down
if [[ $? -ne 0 ]]; then
echo -e "${RED}❌ mode=down 执行失败!${NC}"
exit 1
fi
echo -e "${GREEN}✅ mode=down 执行成功${NC}"
# -------------------------- 执行完成处理 --------------------------
echo -e "\n${GREEN}🎉 所有脚本执行完成!${NC}"
# 可选将本次end日期写入reports_curr.txt供下次复用
echo "$END_DATE" > "$DATE_FILE"
echo -e "${GREEN}✅ 已将end日期 $END_DATE 写入$DATE_FILE${NC}"