// +---------------------------------------------------------------------- declare(strict_types=1); namespace app\appmall\model; use app\appmall\library\AppmallSchema; use ywxapp\model\BaseModel; /** * 插件订单(中心站) * 表:appmall_addon_orders * @mixin \think\Model */ class AddonOrder extends BaseModel { protected function getOptions(): array { return [ 'strict' => true, 'name' => 'appmall_addon_orders', 'autoWriteTimestamp' => 'int', 'readonly' => ['uid'], 'createTime' => 'create_at', 'updateTime' => 'update_at', ]; } /** * 表结构自愈:缺表建表(事实源 app/appmall/install.sql)。 */ public static function ensureSchema(): void { AppmallSchema::ensureTable('appmall_addon_orders', [ 'type' => "tinyint NOT NULL DEFAULT '0' COMMENT '订单类型:0=新购 1=续费 2=大版本升级 3=增加座席'", 'major' => "smallint unsigned NOT NULL DEFAULT 0 COMMENT '涉及的大版本(type=2 时为目标大版本)'", ]); } /** 订单类型:首次购买 */ const TYPE_NEW = 0; /** 订单类型:订阅续费 */ const TYPE_RENEW = 1; /** 订单类型:跨大版本升级 */ const TYPE_UPGRADE = 2; /** 订单类型:增加站点座席 */ const TYPE_SEAT = 3; /** * 订单类型名称(后台/账单展示用) */ public static function typeName(int $type): string { return [ self::TYPE_NEW => '首次购买', self::TYPE_RENEW => '订阅续费', self::TYPE_UPGRADE => '版本升级', self::TYPE_SEAT => '增加站点', ][$type] ?? '其他'; } /** * 模型一被使用(含静态查询)就先兜底建表,任何入口都不会再撞 1146。 */ protected function initialize() { parent::initialize(); self::ensureSchema(); } }