From 56c2a8aedbaf199739cf8b90fe628b7bcf7b6cba Mon Sep 17 00:00:00 2001 From: xingc Date: Mon, 12 May 2025 12:01:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(pay):=20=E5=A2=9E=E5=8A=A0=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E7=8A=B6=E6=80=81`paid`=20=E5=B7=B2=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alembic/versions/b2d35cbc76bd_init.py | 1 + alembic/versions/bde4f21924c8_order_and_chat.py | 2 +- .../versions/e2a204afe670_new_add_support_platform.py | 4 ++-- core/base/schema.py | 1 + core/db/models.py | 4 ++-- core/routers/auth/services.py | 2 +- core/routers/pay/actions.py | 9 +++++++-- core/routers/pay/routes.py | 2 +- 8 files changed, 16 insertions(+), 9 deletions(-) diff --git a/alembic/versions/b2d35cbc76bd_init.py b/alembic/versions/b2d35cbc76bd_init.py index 71d4673..1e0592f 100644 --- a/alembic/versions/b2d35cbc76bd_init.py +++ b/alembic/versions/b2d35cbc76bd_init.py @@ -70,6 +70,7 @@ def upgrade() -> None: sa.UniqueConstraint('user_id', name='uniq_user_id'), comment='用户表' ) + op.execute("ALTER SEQUENCE system_users RESTART WITH 100000;") op.create_index('wechat_openid', 'system_users', ['wechat_openid'], unique=False) op.create_table('system_user_collections', sa.Column('user_id', sa.Integer(), nullable=False), diff --git a/alembic/versions/bde4f21924c8_order_and_chat.py b/alembic/versions/bde4f21924c8_order_and_chat.py index cb0c1b8..316e7c0 100644 --- a/alembic/versions/bde4f21924c8_order_and_chat.py +++ b/alembic/versions/bde4f21924c8_order_and_chat.py @@ -38,7 +38,7 @@ def upgrade() -> None: sa.Column('total_fee', sa.Integer(), nullable=True, comment='发起的总金额,单位为分'), sa.Column('notify_total_fee', sa.Integer(), nullable=True, comment='回调成功支付的总金额,单位为分'), sa.Column('pay_url', sa.String(length=255), nullable=True, comment='支付地址'), - sa.Column('status', sa.Enum('INIT', 'FAIL', 'OK', 'WAIT_PAYMENT', 'CANCEL', name='orderstatustype', inherit_schema=True), server_default='init', nullable=False, comment='订单状态,init:初始化 fail:失败 ok:完成 wait payment:待支付 cancel. 取消'), + sa.Column('status', sa.Enum('INIT', 'FAIL', 'OK', 'WAIT_PAYMENT', 'PAID', 'CANCEL', name='orderstatustype', inherit_schema=True), server_default='init', nullable=False, comment='订单状态,init:初始化 fail:失败 ok:完成 wait payment:待支付 cancel. 取消'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='自增id'), sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False, comment='创建时间'), sa.Column('updated_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False, comment='更新时间'), diff --git a/alembic/versions/e2a204afe670_new_add_support_platform.py b/alembic/versions/e2a204afe670_new_add_support_platform.py index 1ed7522..d49803f 100644 --- a/alembic/versions/e2a204afe670_new_add_support_platform.py +++ b/alembic/versions/e2a204afe670_new_add_support_platform.py @@ -38,11 +38,11 @@ def downgrade() -> None: op.alter_column('system_cards', 'source', existing_type=mysql.ENUM('PSA', 'BGS', 'CGC', 'GBTC', 'CCG', 'BCTC', 'OTHER'), comment='来源,PSA、BGS、CGC、GBTC、CCG、BCTC :采集 、OTHER:自定义', - existing_comment='来源,PSA、BGS、CGC、GBTC、CCG、BCTC、CIC :采集 、OTHER:自定义', + existing_comment='来源,PSA、BGS、CGC、GBTC、CCG、BCTC:采集 、OTHER:自定义', existing_nullable=False) op.alter_column('system_cache_cards', 'source', existing_type=mysql.ENUM('PSA', 'BGS', 'CGC', 'GBTC', 'CCG', 'BCTC'), comment='数据来源:PSA、BGS、CGC、GBTC、CCG、BCTC', - existing_comment='数据来源:PSA、BGS、CGC、GBTC、CCG、BCTC、CIC', + existing_comment='数据来源:PSA、BGS、CGC、GBTC、CCG、BCTC', existing_nullable=False) # ### end Alembic commands ### diff --git a/core/base/schema.py b/core/base/schema.py index 618616c..55a947c 100644 --- a/core/base/schema.py +++ b/core/base/schema.py @@ -74,4 +74,5 @@ class OrderStatusType(enum.Enum): FAIL = 'fail' OK = 'ok' WAIT_PAYMENT = 'wait_payment' + PAID = 'paid' CANCEL = 'cancel' diff --git a/core/db/models.py b/core/db/models.py index debcba9..290db60 100644 --- a/core/db/models.py +++ b/core/db/models.py @@ -244,10 +244,10 @@ class Order(BaseModel, DateModel): total_fee: Mapped[int] = mapped_column(Integer, nullable=True, comment='发起的总金额,单位为分') notify_total_fee: Mapped[int] = mapped_column(Integer, nullable=True, comment='回调成功支付的总金额,单位为分') pay_url: Mapped[str] = mapped_column(String(255), nullable=True, comment='支付地址') - status: Mapped[str] = mapped_column( + status: Mapped[base_schema.OrderStatusType] = mapped_column( Enum(base_schema.OrderStatusType, inherit_schema=True), server_default=base_schema.OrderStatusType.INIT.value, - comment='订单状态,init:初始化 fail:失败 ok:完成 wait payment:待支付 cancel. 取消' + comment='订单状态,init:初始化 fail:失败 ok:完成 wait payment:待支付 paid:已支付 cancel. 取消' ) ip_address: Mapped[str] = mapped_column(String(255), nullable=True, comment='操作ip') diff --git a/core/routers/auth/services.py b/core/routers/auth/services.py index 16c17f3..9a7c057 100644 --- a/core/routers/auth/services.py +++ b/core/routers/auth/services.py @@ -57,7 +57,7 @@ async def get_current_user( if user_id is None: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token") - keyname = generate_keyname(f'login_cache', use_today=True) + keyname = generate_keyname('login_cache', use_today=True) user_str = await redis_conn.hget(keyname, user_id) if user_str is None: user_model = await CRUD(db_session, User).get(filters={'user_id': user_id}) diff --git a/core/routers/pay/actions.py b/core/routers/pay/actions.py index 13bc912..6cb3309 100644 --- a/core/routers/pay/actions.py +++ b/core/routers/pay/actions.py @@ -7,12 +7,10 @@ import logging from datetime import timedelta, datetime -from fastapi import Depends from sqlalchemy.ext.asyncio import AsyncSession from core.base.schema import ProductCategory, ProductAction, OrderStatusType from core.db.crud import CRUD -from core.db.engine import get_async_session from core.db.models import User, Order, Product, PointsTransaction logger = logging.getLogger(__name__) @@ -54,6 +52,13 @@ async def actions_after_payment( ) await actions_handler(db_crud, gift_product, user) + record = { + 'order_id': notify_params['out_trade_no'], + 'transaction_id': notify_params['transaction_id'], + 'status': OrderStatusType.OK, + } + await db_crud.update(data=record, filters={'order_id': record['order_id']}) + except Exception as e: logger.error(f'Payment Actions Exception occurred -> {e}') logger.exception(e) diff --git a/core/routers/pay/routes.py b/core/routers/pay/routes.py index 029c059..64d0489 100644 --- a/core/routers/pay/routes.py +++ b/core/routers/pay/routes.py @@ -126,7 +126,7 @@ async def wechat_notify( if params['return_code'] == 'SUCCESS' and params['result_code'] == 'SUCCESS': record.update({ 'notify_total_fee': params['total_fee'], - 'status': base_schema.OrderStatusType.OK + 'status': base_schema.OrderStatusType.PAID }) result = {'status': 200, 'message': 'OK'} background_tasks.add_task(actions_after_payment, notify_params=params, db_session=db_session)