import pymssql

def update_epr_reg_info(db_host='localhost',
                        db_user='sa',
                        db_password='password',
                        db_database='vat',
                        db_port=1433,
                        status=None,
                        push_error_msg=None,
                        epr_reg_info_id=None):  # UUID 字符串，例如 '550e8400-e29b-41d4-a716-446655440000'
    """
    更新 EPRRegInfo 表的推送状态和错误信息

    :param db_host:         数据库地址
    :param db_user:         数据库用户名
    :param db_password:     数据库密码
    :param db_database:     数据库名称
    :param db_port:         数据库端口
    :param status:          推送状态 (PushTaxBureauStatus)
    :param push_error_msg:  推送错误信息 (Remarks)
    :param epr_reg_info_id: EPRRegInfo 表主键 ID，UUID 字符串类型
    :return:                成功返回影响行数，失败返回 None
    """
    # 参数校验
    if status is None or epr_reg_info_id is None:
        print("错误：status 和 epr_reg_info_id 为必填参数")
        return None

    if not isinstance(epr_reg_info_id, str) or not epr_reg_info_id.strip():
        print("错误：epr_reg_info_id 必须是非空字符串（UUID格式）")
        return None

    connection = None
    try:
        connection = pymssql.connect(
            server=db_host,
            user=db_user,
            password=db_password,
            database=db_database,
            port=db_port,
            charset='utf8',
            as_dict=True
        )

        cursor = connection.cursor()

        print("\n===== 执行更新 =====")
        update_sql = """
            UPDATE EPRRegInfo
            SET
                PushTaxBureauStatus = %s,
                Remarks             = %s
            WHERE ID = %s
        """

        params = (status, push_error_msg, epr_reg_info_id)

        # 调试信息 - ID 是字符串需加引号
        debug_sql = update_sql.replace('%s', '{}', 1).replace('%s', '{}', 1).replace('%s', '{}', 1).format(
            f"'{status}'",
            f"'{push_error_msg}'" if push_error_msg is not None else 'NULL',
            f"'{epr_reg_info_id}'"  # UUID 字符串加引号
        )
        print("=== 更新SQL ===")
        print(debug_sql)
        print("===============")

        cursor.execute(update_sql, params)
        affected_rows = cursor.rowcount

        connection.commit()

        print(f"更新成功，影响行数：{affected_rows}")
        cursor.close()
        return affected_rows

    except pymssql.Error as e:
        print(f"连接或更新数据库时出错: {e}")
        if connection:
            connection.rollback()
        return None
    except Exception as e:
        print(f"处理过程中出错: {e}")
        if connection:
            connection.rollback()
        return None
    finally:
        if connection:
            connection.close()
