-- ============================================================
-- 营运模块缺失表建表 SQL（远程库手动执行）
-- 前缀示例 wxapp_，执行前全部替换为线上真实前缀。
-- 安全：使用 CREATE TABLE IF NOT EXISTS，重复执行不报错。
-- 来源：public/install/install.sql 的规范定义。
-- 说明：sms 表 COLLATE 已统一为 utf8mb4 以兼容 MySQL 5.7+。
-- ============================================================

CREATE TABLE IF NOT EXISTS `wxapp_card` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL DEFAULT 0 COMMENT '兑换会员ID（0未兑换）',
  `batch_no` varchar(30) NOT NULL DEFAULT '' COMMENT '批量生成批次号',
  `cardno` varchar(100) NOT NULL DEFAULT '' COMMENT '卡号',
  `password` varchar(100) NOT NULL DEFAULT '' COMMENT '密码',
  `amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '面值',
  `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '状态 0未售1已售2已用',
  `use_time` int(11) NOT NULL DEFAULT 0 COMMENT '使用时间',
  `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
  `create_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  `update_at` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
  `delete_at` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
  PRIMARY KEY (`id`),
  KEY `idx_cardno` (`cardno`),
  KEY `idx_batch_no` (`batch_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='充值卡密';

CREATE TABLE IF NOT EXISTS `wxapp_prop` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(200) NOT NULL DEFAULT '' COMMENT '道具名称',
  `icon` varchar(255) NOT NULL DEFAULT '' COMMENT '图标',
  `price` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '价格',
  `description` text COMMENT '描述',
  `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态',
  `create_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  `update_at` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
  `delete_at` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='道具中心';

CREATE TABLE IF NOT EXISTS `wxapp_shop` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(200) NOT NULL DEFAULT '' COMMENT '商品名称',
  `price` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '价格',
  `stock` int(11) NOT NULL DEFAULT 0 COMMENT '库存',
  `description` text COMMENT '描述',
  `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态',
  `create_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  `update_at` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
  `delete_at` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='电子商务';

CREATE TABLE IF NOT EXISTS `wxapp_sms` (
  `id` int NOT NULL AUTO_INCREMENT,
  `mobile` varchar(20) NOT NULL COMMENT '手机号',
  `code` varchar(10) NOT NULL COMMENT '验证码',
  `event` varchar(20) DEFAULT 'login' COMMENT '类型 login:登录 register:注册',
  `times` int DEFAULT '0' COMMENT '验证次数',
  `ip` varchar(50) DEFAULT NULL COMMENT '发送IP',
  `create_at` int DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `idx_mobile` (`mobile`),
  KEY `idx_times` (`times`),
  KEY `idx_create_at` (`create_at`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='短信日志表';

CREATE TABLE IF NOT EXISTS `wxapp_task` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(200) NOT NULL DEFAULT '' COMMENT '任务标题',
  `description` text COMMENT '任务描述',
  `reward_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '奖励类型',
  `reward_num` int(11) NOT NULL DEFAULT 0 COMMENT '奖励数量/道具ID',
  `prop_num` int(11) NOT NULL DEFAULT 1 COMMENT '道具数量(奖励类型为道具时生效)',
  `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态',
  `create_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  `update_at` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
  `delete_at` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='站点任务';

CREATE TABLE IF NOT EXISTS `wxapp_member_prop` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
  `prop_id` int unsigned NOT NULL DEFAULT '0' COMMENT '道具ID',
  `num` int unsigned NOT NULL DEFAULT '1' COMMENT '数量',
  `create_at` int(11) NOT NULL DEFAULT '0' COMMENT '获得时间',
  PRIMARY KEY (`id`),
  KEY `idx_uid` (`uid`),
  KEY `idx_uid_prop` (`uid`,`prop_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户拥有道具';

CREATE TABLE IF NOT EXISTS `wxapp_member_task` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
  `task_id` int unsigned NOT NULL DEFAULT '0' COMMENT '任务ID',
  `reward_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '实际发放奖励类型',
  `reward_num` int(11) NOT NULL DEFAULT '0' COMMENT '实际发放数量',
  `create_at` int(11) NOT NULL DEFAULT '0' COMMENT '领取时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_uid_task` (`uid`,`task_id`),
  KEY `idx_uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户任务领取记录';

-- 以下两张已在原自愈覆盖（medal / score_log / score_rule），
-- 一并补上保证完整，IF NOT EXISTS 不会冲突。
CREATE TABLE IF NOT EXISTS `wxapp_medal` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(200) NOT NULL DEFAULT '' COMMENT '勋章名称',
  `image` varchar(255) NOT NULL DEFAULT '' COMMENT '图片',
  `description` text COMMENT '描述',
  `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态',
  `create_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  `update_at` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
  `delete_at` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='勋章中心';

CREATE TABLE IF NOT EXISTS `wxapp_member_medal` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
  `medal_id` int unsigned NOT NULL DEFAULT '0' COMMENT '勋章ID',
  `create_at` int(11) NOT NULL DEFAULT 0 COMMENT '获得时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_uid_medal` (`uid`,`medal_id`),
  KEY `idx_uid` (`uid`),
  KEY `idx_medal` (`medal_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户拥有勋章';

CREATE TABLE IF NOT EXISTS `wxapp_score_log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '用户ID',
  `rule_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '关联规则ID',
  `type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1收入2支出',
  `value` int(11) NOT NULL DEFAULT 0 COMMENT '变动值',
  `balance` int(11) NOT NULL DEFAULT 0 COMMENT '变动后余额',
  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
  `create_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_uid` (`uid`),
  KEY `idx_uid_create` (`uid`,`create_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分流水';

CREATE TABLE IF NOT EXISTS `wxapp_score_rule` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '规则名称',
  `action` varchar(50) NOT NULL DEFAULT '' COMMENT '触发动作标识(task_complete/signin/register等)',
  `type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1获取2消费',
  `value` int(11) NOT NULL DEFAULT 0 COMMENT '变动值',
  `status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '状态 0禁用1启用',
  `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
  `create_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  `update_at` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
  `delete_at` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
  PRIMARY KEY (`id`),
  KEY `idx_action` (`action`),
  KEY `idx_status_sort` (`status`,`sort`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分规则';
