orc-order-v2/app/cli/excel_cli.py

138 lines
3.7 KiB
Python
Raw 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.

"""
Excel处理命令行工具
---------------
提供Excel处理相关的命令行接口。
"""
import os
import sys
import argparse
from typing import List, Optional
from ..config.settings import ConfigManager
from ..core.utils.log_utils import get_logger, close_logger
from ..services.order_service import OrderService
logger = get_logger(__name__)
def create_parser() -> argparse.ArgumentParser:
"""
创建命令行参数解析器
Returns:
参数解析器
"""
parser = argparse.ArgumentParser(description='Excel处理工具')
# 通用选项
parser.add_argument('--config', type=str, help='配置文件路径')
# 子命令
subparsers = parser.add_subparsers(dest='command', help='子命令')
# 处理Excel命令
process_parser = subparsers.add_parser('process', help='处理Excel文件')
process_parser.add_argument('--input', type=str, help='输入Excel文件路径如果不指定则处理最新的文件')
# 查看命令
list_parser = subparsers.add_parser('list', help='获取最新的Excel文件')
return parser
def process_excel(order_service: OrderService, input_file: Optional[str] = None) -> bool:
"""
处理Excel文件
Args:
order_service: 订单服务
input_file: 输入文件路径如果为None则处理最新的文件
Returns:
处理是否成功
"""
if input_file:
if not os.path.exists(input_file):
logger.error(f"输入文件不存在: {input_file}")
return False
result = order_service.process_excel(input_file)
else:
latest_file = order_service.get_latest_excel()
if not latest_file:
logger.warning("未找到可处理的Excel文件")
return False
logger.info(f"处理最新的Excel文件: {latest_file}")
result = order_service.process_excel(latest_file)
if result:
logger.info(f"处理成功,输出文件: {result}")
return True
else:
logger.error("处理失败")
return False
def list_latest_excel(order_service: OrderService) -> bool:
"""
获取最新的Excel文件
Args:
order_service: 订单服务
Returns:
是否找到Excel文件
"""
latest_file = order_service.get_latest_excel()
if latest_file:
logger.info(f"最新的Excel文件: {latest_file}")
return True
else:
logger.info("未找到Excel文件")
return False
def main(args: Optional[List[str]] = None) -> int:
"""
Excel处理命令行主函数
Args:
args: 命令行参数如果为None则使用sys.argv
Returns:
退出状态码
"""
parser = create_parser()
parsed_args = parser.parse_args(args)
if parsed_args.command is None:
parser.print_help()
return 1
try:
# 创建配置管理器
config = ConfigManager(parsed_args.config) if parsed_args.config else ConfigManager()
# 创建订单服务
order_service = OrderService(config)
# 根据命令执行不同功能
if parsed_args.command == 'process':
success = process_excel(order_service, parsed_args.input)
elif parsed_args.command == 'list':
success = list_latest_excel(order_service)
else:
parser.print_help()
return 1
return 0 if success else 1
except Exception as e:
logger.error(f"执行过程中发生错误: {e}")
return 1
finally:
# 关闭日志
close_logger(__name__)
if __name__ == '__main__':
sys.exit(main())