重构初始化

This commit is contained in:
技术老胡
2026-04-15 11:45:46 +08:00
parent 72d72d735b
commit 7612026773
381 changed files with 28287 additions and 14717 deletions

View File

@@ -0,0 +1,58 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 业务订单模型。
* 表示商户业务侧原始订单,支付单和退款单都从这里展开。
*/
class BizOrder extends BaseModel
{
protected $table = 'ma_biz_order';
protected $fillable = [
'biz_no',
'trace_no',
'merchant_id',
'merchant_group_id',
'poll_group_id',
'merchant_order_no',
'subject',
'body',
'order_amount',
'paid_amount',
'refund_amount',
'status',
'active_pay_no',
'attempt_count',
'expire_at',
'paid_at',
'closed_at',
'failed_at',
'timeout_at',
'ext_json',
];
protected $casts = [
'merchant_id' => 'integer',
'merchant_group_id' => 'integer',
'poll_group_id' => 'integer',
'order_amount' => 'integer',
'paid_amount' => 'integer',
'refund_amount' => 'integer',
'status' => 'integer',
'attempt_count' => 'integer',
'expire_at' => 'datetime',
'paid_at' => 'datetime',
'closed_at' => 'datetime',
'failed_at' => 'datetime',
'timeout_at' => 'datetime',
'ext_json' => 'array',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,47 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 商户通知任务模型。
* 保存通知重试队列、最后一次响应和下一次重试时间。
*/
class NotifyTask extends BaseModel
{
protected $table = 'ma_notify_task';
protected $fillable = [
'notify_no',
'merchant_id',
'merchant_group_id',
'biz_no',
'pay_no',
'notify_url',
'notify_data',
'status',
'retry_count',
'next_retry_at',
'last_notify_at',
'last_response',
];
protected $hidden = [
'notify_data',
'last_response',
];
protected $casts = [
'merchant_id' => 'integer',
'merchant_group_id' => 'integer',
'status' => 'integer',
'retry_count' => 'integer',
'next_retry_at' => 'datetime',
'last_notify_at' => 'datetime',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,83 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 支付单模型。
* 表示一次具体支付尝试,包含通道、状态、手续费快照和回调状态。
*/
class PayOrder extends BaseModel
{
protected $table = 'ma_pay_order';
protected $fillable = [
'pay_no',
'biz_no',
'trace_no',
'merchant_id',
'merchant_group_id',
'poll_group_id',
'attempt_no',
'channel_id',
'pay_type_id',
'plugin_code',
'channel_type',
'channel_mode',
'pay_amount',
'fee_rate_bp_snapshot',
'split_rate_bp_snapshot',
'fee_estimated_amount',
'fee_actual_amount',
'status',
'fee_status',
'settlement_status',
'channel_request_no',
'channel_order_no',
'channel_trade_no',
'channel_error_code',
'channel_error_msg',
'request_at',
'paid_at',
'expire_at',
'closed_at',
'failed_at',
'timeout_at',
'callback_status',
'callback_times',
'ext_json',
];
protected $casts = [
'merchant_id' => 'integer',
'merchant_group_id' => 'integer',
'poll_group_id' => 'integer',
'attempt_no' => 'integer',
'channel_id' => 'integer',
'pay_type_id' => 'integer',
'channel_type' => 'integer',
'channel_mode' => 'integer',
'pay_amount' => 'integer',
'fee_rate_bp_snapshot' => 'integer',
'split_rate_bp_snapshot' => 'integer',
'fee_estimated_amount' => 'integer',
'fee_actual_amount' => 'integer',
'status' => 'integer',
'fee_status' => 'integer',
'settlement_status' => 'integer',
'request_at' => 'datetime',
'paid_at' => 'datetime',
'expire_at' => 'datetime',
'closed_at' => 'datetime',
'failed_at' => 'datetime',
'timeout_at' => 'datetime',
'callback_status' => 'integer',
'callback_times' => 'integer',
'ext_json' => 'array',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,51 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 支付通道模型。
* 承载通道成本、分成、限额、启停状态和通道模式。
*/
class PaymentChannel extends BaseModel
{
protected $table = 'ma_payment_channel';
protected $fillable = [
'merchant_id',
'name',
'split_rate_bp',
'cost_rate_bp',
'channel_mode',
'pay_type_id',
'plugin_code',
'api_config_id',
'daily_limit_amount',
'daily_limit_count',
'min_amount',
'max_amount',
'remark',
'status',
'sort_no',
];
protected $casts = [
'merchant_id' => 'integer',
'split_rate_bp' => 'integer',
'cost_rate_bp' => 'integer',
'channel_mode' => 'integer',
'pay_type_id' => 'integer',
'api_config_id' => 'integer',
'daily_limit_amount' => 'integer',
'daily_limit_count' => 'integer',
'min_amount' => 'integer',
'max_amount' => 'integer',
'status' => 'integer',
'sort_no' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,45 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 支付插件模型。
* 插件编码使用字符串主键 code负责描述第三方支付实现能力。
*/
class PaymentPlugin extends BaseModel
{
protected $table = 'ma_payment_plugin';
protected $primaryKey = 'code';
public $incrementing = false;
protected $keyType = 'string';
protected $fillable = [
'code',
'name',
'class_name',
'config_schema',
'pay_types',
'transfer_types',
'version',
'author',
'link',
'status',
'remark',
];
protected $casts = [
'config_schema' => 'array',
'pay_types' => 'array',
'transfer_types' => 'array',
'status' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,31 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 支付插件配置模型。
* 保存插件初始化参数和默认结算周期等配置。
*/
class PaymentPluginConf extends BaseModel
{
protected $table = 'ma_payment_plugin_conf';
protected $fillable = [
'plugin_code',
'config',
'settlement_cycle_type',
'settlement_cutoff_time',
'remark',
];
protected $casts = [
'config' => 'array',
'settlement_cycle_type' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,31 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 支付轮询组模型。
* 用于将支付方式映射到一组可路由通道。
*/
class PaymentPollGroup extends BaseModel
{
protected $table = 'ma_payment_poll_group';
protected $fillable = [
'group_name',
'pay_type_id',
'route_mode',
'status',
'remark',
];
protected $casts = [
'pay_type_id' => 'integer',
'route_mode' => 'integer',
'status' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,33 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 商户分组与轮询组绑定模型。
* 用于确定某商户分组在某支付方式下的默认路由组。
*/
class PaymentPollGroupBind extends BaseModel
{
protected $table = 'ma_payment_poll_group_bind';
protected $fillable = [
'merchant_group_id',
'pay_type_id',
'poll_group_id',
'status',
'remark',
];
protected $casts = [
'merchant_group_id' => 'integer',
'pay_type_id' => 'integer',
'poll_group_id' => 'integer',
'status' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,37 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 轮询组与通道编排模型。
* 定义组内通道顺序、权重和默认通道。
*/
class PaymentPollGroupChannel extends BaseModel
{
protected $table = 'ma_payment_poll_group_channel';
protected $fillable = [
'poll_group_id',
'channel_id',
'sort_no',
'weight',
'is_default',
'status',
'remark',
];
protected $casts = [
'poll_group_id' => 'integer',
'channel_id' => 'integer',
'sort_no' => 'integer',
'weight' => 'integer',
'is_default' => 'integer',
'status' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,32 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 支付方式字典模型。
* 用于维护支付方式编码、名称、排序和启停状态。
*/
class PaymentType extends BaseModel
{
protected $table = 'ma_payment_type';
protected $fillable = [
'code',
'name',
'icon',
'sort_no',
'status',
'remark',
];
protected $casts = [
'sort_no' => 'integer',
'status' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,57 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 退款单模型。
* 当前按整单全额退款设计,因此同一支付单只允许一张退款单。
*/
class RefundOrder extends BaseModel
{
protected $table = 'ma_refund_order';
protected $fillable = [
'refund_no',
'merchant_id',
'merchant_group_id',
'biz_no',
'trace_no',
'pay_no',
'merchant_refund_no',
'channel_id',
'refund_amount',
'fee_reverse_amount',
'status',
'channel_request_no',
'channel_refund_no',
'reason',
'request_at',
'processing_at',
'succeeded_at',
'failed_at',
'retry_count',
'last_error',
'ext_json',
];
protected $casts = [
'merchant_id' => 'integer',
'merchant_group_id' => 'integer',
'channel_id' => 'integer',
'refund_amount' => 'integer',
'fee_reverse_amount' => 'integer',
'status' => 'integer',
'request_at' => 'datetime',
'processing_at' => 'datetime',
'succeeded_at' => 'datetime',
'failed_at' => 'datetime',
'retry_count' => 'integer',
'ext_json' => 'array',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,45 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 清算明细模型。
* 用于记录清算单下每笔支付订单的入账结果。
*/
class SettlementItem extends BaseModel
{
protected $table = 'ma_settlement_item';
protected $fillable = [
'settle_no',
'merchant_id',
'merchant_group_id',
'channel_id',
'pay_no',
'refund_no',
'pay_amount',
'fee_amount',
'refund_amount',
'fee_reverse_amount',
'net_amount',
'item_status',
];
protected $casts = [
'merchant_id' => 'integer',
'merchant_group_id' => 'integer',
'channel_id' => 'integer',
'pay_amount' => 'integer',
'fee_amount' => 'integer',
'refund_amount' => 'integer',
'fee_reverse_amount' => 'integer',
'net_amount' => 'integer',
'item_status' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}

View File

@@ -0,0 +1,60 @@
<?php
namespace app\model\payment;
use app\common\base\BaseModel;
/**
* 清算单模型。
* 平台代收链路清算成功后将资金转入可提现余额。
*/
class SettlementOrder extends BaseModel
{
protected $table = 'ma_settlement_order';
protected $fillable = [
'settle_no',
'trace_no',
'merchant_id',
'merchant_group_id',
'channel_id',
'cycle_type',
'cycle_key',
'status',
'gross_amount',
'fee_amount',
'refund_amount',
'fee_reverse_amount',
'net_amount',
'accounted_amount',
'generated_at',
'accounted_at',
'completed_at',
'failed_at',
'fail_reason',
'ext_json',
];
protected $casts = [
'merchant_id' => 'integer',
'merchant_group_id' => 'integer',
'channel_id' => 'integer',
'cycle_type' => 'integer',
'status' => 'integer',
'gross_amount' => 'integer',
'fee_amount' => 'integer',
'refund_amount' => 'integer',
'fee_reverse_amount' => 'integer',
'net_amount' => 'integer',
'accounted_amount' => 'integer',
'generated_at' => 'datetime',
'accounted_at' => 'datetime',
'completed_at' => 'datetime',
'failed_at' => 'datetime',
'ext_json' => 'array',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}