#!/usr/bin/env python
"""
批量更新订单的忽略采购状态
"""
import asyncio
import logging
from datetime import datetime
from sqlalchemy import update, select
from sqlalchemy.ext.asyncio import AsyncSession

from app.core.database import get_db
from app.models.procurement_orders import ProcurementOrder

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 需要更新的订单号列表
ORDER_NUMBERS = [
    "4711228239973600444",
    "4710928753390840707",
    "2902450875789139453",
    "4710397140582246700",
    "4710244285253500804",
    "2902486549961748158",
    "4710094454635302616",
    "4710230281241181944",
    "2902358787798404960",
    "2902362783212450160",
    "2902361919321450160",
    "2902527372658597266",
    "4710074294279748011",
    "4710058562409322845",
    "2902426610593507066",
    "4710238887237048741",
    "4710323088131422103",
    "4710309516289181944",
    "4710169153615322845",
    "4710170449201322845",
    "2902481652182507066",
    "4710215127095322845",
    "2902424377283507066",
    "4710125845401963144",
    "4709984582834109212",
    "4710164583501799805",
    "4710104965718276414",
    "2902369009446225579",
    "4710150507640521032",
    "4709964206673277915",
    "4710094525780068828",
    "4710234348710638719",
    "2902408248552692165",
    "4710231540591006439",
    "4710219732351144128",
    "4710229272060886131",
    "4709951138630662431",
    "2902231743964539690",
    "2902401192025876581",
    "4710130563446840707",
    "2902323902882009256",
    "2902342333905676158"
]

async def update_ignore_purchase_status(db: AsyncSession):
    """
    更新忽略采购状态
    """
    try:
        # 统计信息
        procurement_updated = 0
        not_found = []
        updated_orders = []
        
        for order_number in ORDER_NUMBERS:
            # 更新待采购订单表 (procurement_orders)
            result = await db.execute(
                update(ProcurementOrder)
                .where(ProcurementOrder.原始订单编号 == order_number)
                .values(
                    忽略采购=True,
                    更新时间=datetime.now(),
                    procurement_notes="批量设置忽略采购 - " + datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                )
            )
            
            if result.rowcount > 0:
                procurement_updated += result.rowcount
                updated_orders.append(order_number)
                logger.info(f"✅ 更新待采购订单 {order_number}: 忽略采购=True")
            else:
                not_found.append(order_number)
                logger.info(f"⏭️ 订单 {order_number} 不在待采购列表中，跳过")
        
        # 提交事务
        await db.commit()
        
        # 输出统计结果
        logger.info("=" * 60)
        logger.info("批量更新完成！")
        logger.info(f"总订单数: {len(ORDER_NUMBERS)}")
        logger.info(f"成功更新: {procurement_updated} 条")
        logger.info(f"不在待采购列表: {len(not_found)} 条")
        logger.info("=" * 60)
        
        return {
            "total": len(ORDER_NUMBERS),
            "procurement_updated": procurement_updated,
            "not_found": len(not_found),
            "updated_orders": updated_orders,
            "not_found_orders": not_found
        }
        
    except Exception as e:
        logger.error(f"更新失败: {e}")
        await db.rollback()
        raise

async def main():
    """主函数"""
    async for db in get_db():
        try:
            result = await update_ignore_purchase_status(db)
            return result
        finally:
            await db.close()
            break

if __name__ == "__main__":
    result = asyncio.run(main())
    print("\n更新结果:", result)