text: ALTER TABLE `v2_server`
  ADD `last_check_at` int(11) NULL AFTER `rate`;
  
  ALTER TABLE `v2_server`
  ADD `network` varchar(11) COLLATE 'utf8_general_ci' NOT NULL AFTER `rate`;
  
  ALTER TABLE `v2_server`
  ADD `settings` text COLLATE 'utf8_general_ci' NULL AFTER `network`;
  
  ALTER TABLE `v2_server`
  ADD `show` tinyint(1) NOT NULL DEFAULT '0' AFTER `settings`;
  
  ALTER TABLE `v2_user`
  CHANGE `enable` `enable` tinyint(1) NOT NULL DEFAULT '1' AFTER `transfer_enable`;
  
  ALTER TABLE `v2_order`
  ADD `type` int(11) NOT NULL COMMENT '1新购2续费3升级' AFTER `plan_id`;
  
  ALTER TABLE `v2_user`
  ADD `commission_rate` int(11) NULL AFTER `password`;
  
  ALTER TABLE `v2_user`
  ADD `balance` int(11) NOT NULL DEFAULT '0' AFTER `password`;
  
  CREATE TABLE `v2_notice` (
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `title` varchar(255) NOT NULL,
    `content` text NOT NULL,
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL
  );
  
  ALTER TABLE `v2_notice`
  ADD `img_url` varchar(255) COLLATE 'utf8_general_ci' NULL AFTER `content`;
  
  CREATE TABLE `v2_ticket` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user_id` int(11) NOT NULL,
    `subject` varchar(255) NOT NULL,
    `level` tinyint(1) NOT NULL,
    `status` tinyint(1) NOT NULL DEFAULT '0',
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL,
    PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  
  CREATE TABLE `v2_ticket_message` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user_id` int(11) NOT NULL,
    `ticket_id` int(11) NOT NULL,
    `message` varchar(255) NOT NULL,
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL,
    PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  
  ALTER TABLE `v2_ticket`
  ADD `last_reply_user_id` int(11) NOT NULL AFTER `user_id`;
  
  ALTER TABLE `v2_user`
  CHANGE `last_login_at` `last_login_at` int(11) NULL AFTER `is_admin`;
  
  ALTER TABLE `v2_server_log`
  CHANGE `node_id` `server_id` int(11) NOT NULL AFTER `user_id`,
  CHANGE `u` `u` varchar(255) COLLATE 'utf8_general_ci' NOT NULL AFTER `server_id`,
  CHANGE `d` `d` varchar(255) COLLATE 'utf8_general_ci' NOT NULL AFTER `u`,
  CHANGE `rate` `rate` int(11) NOT NULL AFTER `d`;
  
  ALTER TABLE `v2_server`
  DROP `last_check_at`;
  
  ALTER TABLE `v2_server`
  CHANGE `name` `name` varchar(255) COLLATE 'utf8mb4_general_ci' NOT NULL AFTER `group_id`;
  
  ALTER TABLE `v2_plan`
  CHANGE `month_price` `month_price` int(11) NULL DEFAULT '0' AFTER `content`,
  CHANGE `quarter_price` `quarter_price` int(11) NULL DEFAULT '0' AFTER `month_price`,
  CHANGE `half_year_price` `half_year_price` int(11) NULL DEFAULT '0' AFTER `quarter_price`,
  CHANGE `year_price` `year_price` int(11) NULL DEFAULT '0' AFTER `half_year_price`;
  
  ALTER TABLE `v2_server`
  ADD `parent_id` int(11) NULL AFTER `group_id`;
  
  CREATE TABLE `v2_mail_log` (
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `email` varchar(64) NOT NULL,
    `subject` varchar(255) NOT NULL,
    `template_name` varchar(255) NOT NULL,
    `error` varchar(255) DEFAULT NULL,
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL
  );
  
  CREATE TABLE `v2_coupon` (
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `code` char(32) NOT NULL,
    `name` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
    `type` tinyint(1) NOT NULL,
    `value` int(11) NOT NULL,
    `limit_use` int(11) DEFAULT NULL,
    `started_at` int(11) NOT NULL,
    `ended_at` int(11) NOT NULL,
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL
  );
  
  ALTER TABLE `v2_order`
  ADD `discount_amount` int(11) NULL AFTER `total_amount`;
  
  CREATE TABLE `v2_tutorial` (
    `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `title` varchar(255) COLLATE 'utf8mb4_general_ci' NOT NULL,
    `description` varchar(255) COLLATE 'utf8mb4_general_ci' NOT NULL,
    `icon` varchar(255) COLLATE 'utf8mb4_general_ci' NOT NULL,
    `steps` text NULL,
    `show` tinyint(1) NOT NULL DEFAULT '0',
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL
  );
  
  ALTER TABLE `v2_server_log`
  CHANGE `rate` `rate` decimal(10,2) NOT NULL AFTER `d`;
  
  ALTER TABLE `v2_order`
  DROP `method`;
  
  ALTER TABLE `v2_invite_code`
  ADD `pv` int(11) NOT NULL DEFAULT '0' AFTER `status`;
  
  ALTER TABLE `v2_user`
  ADD `password_algo` char(10) COLLATE 'utf8_general_ci' NULL AFTER `password`;
  
  ALTER TABLE `v2_server`
  CHANGE `tls` `tls` tinyint(4) NOT NULL DEFAULT '0' AFTER `server_port`;
  
  ALTER TABLE `v2_server`
  ADD `rules` text COLLATE 'utf8_general_ci' NULL AFTER `settings`;
  
  CREATE TABLE `failed_jobs` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `connection` text COLLATE utf8mb4_unicode_ci NOT NULL,
    `queue` text COLLATE utf8mb4_unicode_ci NOT NULL,
    `payload` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
    `exception` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
    `failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  
  ALTER TABLE `v2_user`
  ADD `discount` int(11) NULL AFTER `balance`;
  
  ALTER TABLE `v2_order`
  ADD `surplus_amount` int(11) NULL COMMENT '剩余价值' AFTER `discount_amount`;
  
  ALTER TABLE `v2_order`
  ADD `refund_amount` int(11) NULL COMMENT '退款金额' AFTER `surplus_amount`;
  
  ALTER TABLE `v2_tutorial`
  ADD `category_id` int(11) NOT NULL AFTER `id`;
  
  ALTER TABLE `v2_tutorial`
  DROP `description`;
  
  ALTER TABLE `v2_plan`
  CHANGE `month_price` `month_price` int(11) NULL AFTER `content`,
  CHANGE `quarter_price` `quarter_price` int(11) NULL AFTER `month_price`,
  CHANGE `half_year_price` `half_year_price` int(11) NULL AFTER `quarter_price`,
  CHANGE `year_price` `year_price` int(11) NULL AFTER `half_year_price`,
  ADD `onetime_price` int(11) NULL AFTER `year_price`;
  
  ALTER TABLE `v2_user`
  DROP `enable`,
  ADD `banned` tinyint(1) NOT NULL DEFAULT '0' AFTER `transfer_enable`;
  
  ALTER TABLE `v2_user`
  CHANGE `expired_at` `expired_at` bigint(20) NULL DEFAULT '0' AFTER `token`;
  
  ALTER TABLE `v2_tutorial`
  DROP `icon`;
  
  ALTER TABLE `v2_server`
  CHANGE `settings` `networkSettings` text COLLATE 'utf8_general_ci' NULL AFTER `network`,
  CHANGE `rules` `ruleSettings` text COLLATE 'utf8_general_ci' NULL AFTER `networkSettings`;
  
  ALTER TABLE `v2_server`
  CHANGE `tags` `tags` varchar(255) COLLATE 'utf8_general_ci' NULL AFTER `server_port`,
  CHANGE `rate` `rate` varchar(11) COLLATE 'utf8_general_ci' NOT NULL AFTER `tags`,
  CHANGE `network` `network` varchar(11) COLLATE 'utf8_general_ci' NOT NULL AFTER `rate`,
  CHANGE `networkSettings` `networkSettings` text COLLATE 'utf8_general_ci' NULL AFTER `network`,
  CHANGE `tls` `tls` tinyint(4) NOT NULL DEFAULT '0' AFTER `networkSettings`,
  ADD `tlsSettings` text COLLATE 'utf8_general_ci' NULL AFTER `tls`;
  
  ALTER TABLE `v2_order`
  ADD `balance_amount` int(11) NULL COMMENT '使用余额' AFTER `refund_amount`;
  
  ALTER TABLE `v2_server`
  CHANGE `network` `network` text COLLATE 'utf8_general_ci' NOT NULL AFTER `rate`,
  ADD `dnsSettings` text COLLATE 'utf8_general_ci' NULL AFTER `ruleSettings`;
  
  ALTER TABLE `v2_order`
  ADD `surplus_order_ids` text NULL COMMENT '折抵订单' AFTER `balance_amount`;
  
  ALTER TABLE `v2_order`
  CHANGE `status` `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0待支付1开通中2已取消3已完成4已折抵' AFTER `surplus_order_ids`;
  
  CREATE TABLE `v2_server_stat` (
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `server_id` int(11) NOT NULL,
    `u` varchar(255) NOT NULL,
    `d` varchar(25) NOT NULL,
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL
  );
  
  ALTER TABLE `v2_tutorial`
  ADD `sort` int(11) NULL AFTER `show`;
  
  ALTER TABLE `v2_server`
  ADD `sort` int(11) NULL AFTER `show`;
  
  ALTER TABLE `v2_plan`
  ADD `sort` int(11) NULL AFTER `show`;
  
  ALTER TABLE `v2_plan`
  CHANGE `month_price` `month_price` int(11) NULL AFTER `content`,
  CHANGE `quarter_price` `quarter_price` int(11) NULL AFTER `month_price`,
  CHANGE `half_year_price` `half_year_price` int(11) NULL AFTER `quarter_price`,
  CHANGE `year_price` `year_price` int(11) NULL AFTER `half_year_price`,
  ADD `reset_price` int(11) NULL AFTER `onetime_price`;
  
  ALTER TABLE `v2_server_log`
  ADD `id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
  
  ALTER TABLE `v2_server_log`
  ADD `log_at` int(11) NOT NULL AFTER `rate`;
  
  ALTER TABLE `v2_mail_log`
  CHANGE `error` `error` text COLLATE 'utf8_general_ci' NULL AFTER `template_name`;
  
  ALTER TABLE `v2_plan`
  CHANGE `month_price` `month_price` int(11) NULL AFTER `content`,
  CHANGE `quarter_price` `quarter_price` int(11) NULL AFTER `month_price`,
  CHANGE `half_year_price` `half_year_price` int(11) NULL AFTER `quarter_price`,
  CHANGE `year_price` `year_price` int(11) NULL AFTER `half_year_price`;
  
  ALTER TABLE `v2_server_log`
  ADD INDEX log_at (`log_at`);
  
  ALTER TABLE `v2_user`
  ADD `telegram_id` bigint NULL AFTER `invite_user_id`;
  
  ALTER TABLE `v2_server_stat`
  ADD `online` int(11) NOT NULL AFTER `d`;
  
  ALTER TABLE `v2_server_stat`
  ADD INDEX `created_at` (`created_at`);
  
  CREATE TABLE `v2_server_trojan` (
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `group_id` varchar(255) NOT NULL,
    `tags` varchar(255) NULL,
    `name` varchar(255) NOT NULL,
    `host` varchar(255) NOT NULL,
    `port` int(11) NOT NULL,
    `show` tinyint(1) NOT NULL DEFAULT '0',
    `sort` int(11) NULL,
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL
  ) COMMENT='trojan伺服器表' COLLATE 'utf8mb4_general_ci';
  
  ALTER TABLE `v2_server_stat`
  CHANGE `d` `d` varchar(255) COLLATE 'utf8_general_ci' NOT NULL AFTER `u`,
  DROP `online`;
  
  ALTER TABLE `v2_user`
  CHANGE `v2ray_uuid` `uuid` varchar(36) COLLATE 'utf8_general_ci' NOT NULL AFTER `last_login_ip`;
  
  ALTER TABLE `v2_server_trojan`
  ADD `rate` varchar(11) COLLATE 'utf8mb4_general_ci' NOT NULL AFTER `name`;
  
  ALTER TABLE `v2_server_log`
  ADD `method` varchar(255) NOT NULL AFTER `rate`;
  
  ALTER TABLE `v2_coupon`
  ADD `limit_plan_ids` varchar(255) NULL AFTER `limit_use`;
  
  ALTER TABLE `v2_server_trojan`
  ADD `server_port` int(11) NOT NULL AFTER `port`;
  
  ALTER TABLE `v2_server_trojan`
  ADD `parent_id` int(11) NULL AFTER `group_id`;
  
  ALTER TABLE `v2_server_trojan`
  ADD `allow_insecure` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许不安全' AFTER `server_port`,
  CHANGE `show` `show` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否显示' AFTER `allow_insecure`;
  
  ALTER TABLE `v2_server_trojan`
  ADD `server_name` varchar(255) NULL AFTER `allow_insecure`;
  
  UPDATE `v2_server` SET
  `ruleSettings` = NULL
  WHERE `ruleSettings` = '{}';
  
  ALTER TABLE `v2_plan`
  ADD `two_year_price` int(11) NULL AFTER `year_price`,
  ADD `three_year_price` int(11) NULL AFTER `two_year_price`;
  
  ALTER TABLE `v2_user`
  ADD `is_staff` tinyint(1) NOT NULL DEFAULT '0' AFTER `is_admin`;
  
  CREATE TABLE `v2_server_shadowsocks` (
    `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `group_id` varchar(255) NOT NULL,
    `parent_id` int(11) NULL,
    `tags` varchar(255) NULL,
    `name` varchar(255) NOT NULL,
    `rate` varchar(11) NOT NULL,
    `host` varchar(255) NOT NULL,
    `port` int(11) NOT NULL,
    `server_port` int(11) NOT NULL,
    `cipher` varchar(255) NOT NULL,
    `show` tinyint NOT NULL DEFAULT '0',
    `sort` int(11) NULL,
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL
  ) COLLATE 'utf8mb4_general_ci';
  
  ALTER TABLE `v2_coupon`
  CHANGE `code` `code` varchar(255) COLLATE 'utf8_general_ci' NOT NULL AFTER `id`;
  
  CREATE TABLE `v2_knowledge` (
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `language` char(5) NOT NULL COMMENT '語言',
    `category` varchar(255) NOT NULL COMMENT '分類名',
    `title` varchar(255) NOT NULL COMMENT '標題',
    `body` text NOT NULL COMMENT '內容',
    `sort` int(11) NULL COMMENT '排序',
    `show` tinyint(1) NOT NULL DEFAULT '0' COMMENT '顯示',
    `created_at` int(11) NOT NULL COMMENT '創建時間',
    `updated_at` int(11) NOT NULL COMMENT '更新時間'
  ) COMMENT='知識庫' COLLATE 'utf8mb4_general_ci';
  
  ALTER TABLE `v2_order`
  ADD `coupon_id` int(11) NULL AFTER `plan_id`;
  
  ALTER TABLE `v2_server_stat`
  ADD `method` varchar(255) NOT NULL AFTER `server_id`;
  
  ALTER TABLE `v2_server`
  ADD `alter_id` int(11) NOT NULL DEFAULT '1' AFTER `network`;
  
  ALTER TABLE `v2_user`
  DROP `v2ray_alter_id`,
  DROP `v2ray_level`;
  
  DROP TABLE `v2_server_stat`;
  
  CREATE TABLE `v2_stat_server` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `server_id` int(11) NOT NULL COMMENT '节点id',
    `server_type` char(11) NOT NULL COMMENT '节点类型',
    `u` varchar(255) NOT NULL,
    `d` varchar(255) NOT NULL,
    `record_type` char(1) NOT NULL COMMENT 'd day m month',
    `record_at` int(11) NOT NULL COMMENT '记录时间',
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL,
    PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='节点数据统计';
  
  ALTER TABLE `v2_stat_server`
  ADD UNIQUE `server_id_server_type_record_at` (`server_id`, `server_type`, `record_at`);
  
  ALTER TABLE `v2_stat_server`
  ADD INDEX `record_at` (`record_at`),
  ADD INDEX `server_id` (`server_id`);
  
  CREATE TABLE `v2_stat_order` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `order_count` int(11) NOT NULL COMMENT '订单数量',
    `order_amount` int(11) NOT NULL COMMENT '订单合计',
    `commission_count` int(11) NOT NULL,
    `commission_amount` int(11) NOT NULL COMMENT '佣金合计',
    `record_type` char(1) NOT NULL,
    `record_at` int(11) NOT NULL,
    `created_at` int(11) NOT NULL,
    `updated_at` int(11) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `record_at` (`record_at`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单统计';
  
  ALTER TABLE `v2_user`
  DROP `enable`;
  
  ALTER TABLE `v2_user`
      ADD `remarks` text COLLATE 'utf8_general_ci' NULL AFTER `token`;
  