recycle_app_database.sql 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. -- ============================================
  2. -- 废品回收APP C端数据库设计
  3. -- 数据库名: recycle_app
  4. -- 创建时间: 2024
  5. -- ============================================
  6. -- 创建数据库
  7. CREATE DATABASE IF NOT EXISTS recycle_app DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  8. USE recycle_app;
  9. -- ============================================
  10. -- 1. 用户表 (users)
  11. -- 页面: 登录、注册、个人中心
  12. -- ============================================
  13. CREATE TABLE `users` (
  14. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  15. `phone` VARCHAR(20) NOT NULL COMMENT '手机号',
  16. `password` VARCHAR(255) NOT NULL COMMENT '密码(加密)',
  17. `nickname` VARCHAR(50) DEFAULT '环保达人' COMMENT '昵称',
  18. `avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
  19. `avatar_index` INT DEFAULT 1 COMMENT '头像索引(预设头像)',
  20. `level` INT DEFAULT 1 COMMENT '用户等级 1-10',
  21. `level_name` VARCHAR(50) DEFAULT 'LV1 环保新手' COMMENT '等级名称',
  22. `level_progress` INT DEFAULT 0 COMMENT '等级进度 0-100',
  23. `total_points` INT DEFAULT 0 COMMENT '累计积分',
  24. `available_points` INT DEFAULT 0 COMMENT '可用积分',
  25. `total_cash` DECIMAL(10,2) DEFAULT 0.00 COMMENT '累计现金收益',
  26. `available_cash` DECIMAL(10,2) DEFAULT 0.00 COMMENT '可提现现金',
  27. `total_carbon` DECIMAL(10,2) DEFAULT 0.00 COMMENT '累计碳减排量(kg)',
  28. `recycle_count` INT DEFAULT 0 COMMENT '回收次数',
  29. `invite_code` VARCHAR(20) DEFAULT NULL COMMENT '用户邀请码',
  30. `invited_by` BIGINT UNSIGNED DEFAULT NULL COMMENT '邀请人ID',
  31. `status` TINYINT DEFAULT 1 COMMENT '状态: 0禁用 1正常',
  32. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
  33. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  34. `last_login_at` DATETIME DEFAULT NULL COMMENT '最后登录时间',
  35. PRIMARY KEY (`id`),
  36. UNIQUE KEY `uk_phone` (`phone`),
  37. UNIQUE KEY `uk_invite_code` (`invite_code`),
  38. KEY `idx_invited_by` (`invited_by`),
  39. KEY `idx_created_at` (`created_at`)
  40. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
  41. -- ============================================
  42. -- 2. 用户地址表 (user_addresses)
  43. -- 页面: 地址管理、预约回收
  44. -- ============================================
  45. CREATE TABLE `user_addresses` (
  46. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '地址ID',
  47. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  48. `contact_name` VARCHAR(50) NOT NULL COMMENT '联系人姓名',
  49. `contact_phone` VARCHAR(20) NOT NULL COMMENT '联系电话',
  50. `province` VARCHAR(50) NOT NULL COMMENT '省份',
  51. `city` VARCHAR(50) NOT NULL COMMENT '城市',
  52. `district` VARCHAR(50) NOT NULL COMMENT '区县',
  53. `detail` VARCHAR(255) NOT NULL COMMENT '详细地址',
  54. `full_address` VARCHAR(500) DEFAULT NULL COMMENT '完整地址',
  55. `label` ENUM('home', 'company', 'school', 'other') DEFAULT NULL COMMENT '地址标签',
  56. `is_default` TINYINT DEFAULT 0 COMMENT '是否默认地址: 0否 1是',
  57. `longitude` DECIMAL(10,7) DEFAULT NULL COMMENT '经度',
  58. `latitude` DECIMAL(10,7) DEFAULT NULL COMMENT '纬度',
  59. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  60. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  61. PRIMARY KEY (`id`),
  62. KEY `idx_user_id` (`user_id`),
  63. KEY `idx_is_default` (`is_default`)
  64. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户地址表';
  65. -- ============================================
  66. -- 3. 废品分类表 (waste_categories)
  67. -- 页面: 预约回收、AR识别
  68. -- ============================================
  69. CREATE TABLE `waste_categories` (
  70. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分类ID',
  71. `name` VARCHAR(50) NOT NULL COMMENT '分类名称',
  72. `code` VARCHAR(30) NOT NULL COMMENT '分类编码',
  73. `icon` VARCHAR(100) DEFAULT NULL COMMENT '图标',
  74. `parent_id` BIGINT UNSIGNED DEFAULT 0 COMMENT '父分类ID',
  75. `price_per_kg` DECIMAL(10,2) DEFAULT 0.00 COMMENT '每公斤单价',
  76. `points_per_kg` INT DEFAULT 0 COMMENT '每公斤积分',
  77. `carbon_per_kg` DECIMAL(5,2) DEFAULT 0.00 COMMENT '每公斤碳减排量',
  78. `description` TEXT DEFAULT NULL COMMENT '描述',
  79. `tips` TEXT DEFAULT NULL COMMENT '回收提示(JSON)',
  80. `recycling_info` TEXT DEFAULT NULL COMMENT '回收信息(JSON)',
  81. `sort_order` INT DEFAULT 0 COMMENT '排序',
  82. `status` TINYINT DEFAULT 1 COMMENT '状态: 0禁用 1启用',
  83. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  84. PRIMARY KEY (`id`),
  85. UNIQUE KEY `uk_code` (`code`),
  86. KEY `idx_parent_id` (`parent_id`)
  87. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='废品分类表';
  88. -- ============================================
  89. -- 4. 回收员表 (collectors)
  90. -- 页面: 首页附近回收员、回收员列表
  91. -- ============================================
  92. CREATE TABLE `collectors` (
  93. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '回收员ID',
  94. `user_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联用户ID',
  95. `name` VARCHAR(50) NOT NULL COMMENT '姓名',
  96. `phone` VARCHAR(20) NOT NULL COMMENT '电话',
  97. `avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像',
  98. `id_card` VARCHAR(20) DEFAULT NULL COMMENT '身份证号',
  99. `rating` DECIMAL(2,1) DEFAULT 5.0 COMMENT '评分 1.0-5.0',
  100. `review_count` INT DEFAULT 0 COMMENT '评价数量',
  101. `completed_orders` INT DEFAULT 0 COMMENT '完成订单数',
  102. `experience` VARCHAR(50) DEFAULT NULL COMMENT '经验描述',
  103. `specialties` TEXT DEFAULT NULL COMMENT '擅长类目(JSON数组)',
  104. `service_area` VARCHAR(255) DEFAULT NULL COMMENT '服务区域',
  105. `working_hours` VARCHAR(50) DEFAULT NULL COMMENT '工作时间',
  106. `response_time` VARCHAR(50) DEFAULT NULL COMMENT '响应时间',
  107. `price_range` VARCHAR(100) DEFAULT NULL COMMENT '价格范围',
  108. `features` TEXT DEFAULT NULL COMMENT '服务特色(JSON数组)',
  109. `status` ENUM('online', 'busy', 'offline') DEFAULT 'offline' COMMENT '状态',
  110. `longitude` DECIMAL(10,7) DEFAULT NULL COMMENT '当前经度',
  111. `latitude` DECIMAL(10,7) DEFAULT NULL COMMENT '当前纬度',
  112. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  113. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  114. PRIMARY KEY (`id`),
  115. KEY `idx_user_id` (`user_id`),
  116. KEY `idx_status` (`status`),
  117. KEY `idx_rating` (`rating`)
  118. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='回收员表';
  119. -- ============================================
  120. -- 5. 投递点表 (drop_points)
  121. -- 页面: 首页投递点、投递点列表
  122. -- ============================================
  123. CREATE TABLE `drop_points` (
  124. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '投递点ID',
  125. `name` VARCHAR(100) NOT NULL COMMENT '名称',
  126. `address` VARCHAR(255) NOT NULL COMMENT '地址',
  127. `phone` VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
  128. `longitude` DECIMAL(10,7) NOT NULL COMMENT '经度',
  129. `latitude` DECIMAL(10,7) NOT NULL COMMENT '纬度',
  130. `rating` DECIMAL(2,1) DEFAULT 5.0 COMMENT '评分',
  131. `capacity` INT DEFAULT 100 COMMENT '容量百分比 0-100',
  132. `supported_types` TEXT DEFAULT NULL COMMENT '支持类型(JSON数组)',
  133. `working_hours` VARCHAR(50) DEFAULT NULL COMMENT '营业时间',
  134. `features` TEXT DEFAULT NULL COMMENT '特色服务(JSON数组)',
  135. `status` ENUM('open', 'busy', 'closed') DEFAULT 'open' COMMENT '状态',
  136. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  137. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  138. PRIMARY KEY (`id`),
  139. KEY `idx_status` (`status`),
  140. KEY `idx_location` (`longitude`, `latitude`)
  141. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='投递点表';
  142. -- ============================================
  143. -- 6. 回收订单表 (recycle_orders)
  144. -- 页面: 预约回收、我的订单、收益明细
  145. -- ============================================
  146. CREATE TABLE `recycle_orders` (
  147. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '订单ID',
  148. `order_no` VARCHAR(30) NOT NULL COMMENT '订单编号',
  149. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  150. `collector_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '回收员ID',
  151. `drop_point_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '投递点ID',
  152. `category_id` BIGINT UNSIGNED NOT NULL COMMENT '废品分类ID',
  153. `category_name` VARCHAR(50) DEFAULT NULL COMMENT '废品分类名称',
  154. `recycle_method` ENUM('pickup', 'dropoff') NOT NULL COMMENT '回收方式: pickup上门 dropoff自助',
  155. `weight` DECIMAL(10,2) DEFAULT 0.00 COMMENT '重量(kg)',
  156. `estimated_weight` DECIMAL(10,2) DEFAULT 0.00 COMMENT '预估重量(kg)',
  157. `price_per_kg` DECIMAL(10,2) DEFAULT 0.00 COMMENT '单价(元/kg)',
  158. `cash_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '现金金额',
  159. `points_amount` INT DEFAULT 0 COMMENT '积分金额',
  160. `carbon_reduction` DECIMAL(10,2) DEFAULT 0.00 COMMENT '碳减排量(kg)',
  161. `contact_name` VARCHAR(50) NOT NULL COMMENT '联系人',
  162. `contact_phone` VARCHAR(20) NOT NULL COMMENT '联系电话',
  163. `address` VARCHAR(500) NOT NULL COMMENT '地址',
  164. `scheduled_date` DATE DEFAULT NULL COMMENT '预约日期',
  165. `scheduled_time` VARCHAR(30) DEFAULT NULL COMMENT '预约时间段',
  166. `time_option` ENUM('immediate', 'scheduled') DEFAULT 'immediate' COMMENT '时间选项',
  167. `notes` TEXT DEFAULT NULL COMMENT '备注',
  168. `photos` TEXT DEFAULT NULL COMMENT '照片(JSON数组)',
  169. `additional_services` TEXT DEFAULT NULL COMMENT '附加服务(JSON数组)',
  170. `service_fee` DECIMAL(10,2) DEFAULT 0.00 COMMENT '服务费',
  171. `status` ENUM('pending', 'accepted', 'processing', 'completed', 'cancelled') DEFAULT 'pending' COMMENT '状态',
  172. `cancel_reason` VARCHAR(255) DEFAULT NULL COMMENT '取消原因',
  173. `completed_at` DATETIME DEFAULT NULL COMMENT '完成时间',
  174. `rated` TINYINT DEFAULT 0 COMMENT '是否已评价',
  175. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  176. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  177. PRIMARY KEY (`id`),
  178. UNIQUE KEY `uk_order_no` (`order_no`),
  179. KEY `idx_user_id` (`user_id`),
  180. KEY `idx_collector_id` (`collector_id`),
  181. KEY `idx_status` (`status`),
  182. KEY `idx_created_at` (`created_at`)
  183. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='回收订单表';
  184. -- ============================================
  185. -- 7. 收益记录表 (earnings)
  186. -- 页面: 收益明细
  187. -- ============================================
  188. CREATE TABLE `earnings` (
  189. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  190. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  191. `order_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联订单ID',
  192. `type` ENUM('recycle', 'invite', 'task', 'checkin', 'activity', 'withdraw', 'donation') NOT NULL COMMENT '类型',
  193. `cash_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '现金金额',
  194. `points_amount` INT DEFAULT 0 COMMENT '积分金额',
  195. `carbon_reduction` DECIMAL(10,2) DEFAULT 0.00 COMMENT '碳减排量',
  196. `category` VARCHAR(50) DEFAULT NULL COMMENT '回收类别',
  197. `description` VARCHAR(255) DEFAULT NULL COMMENT '描述',
  198. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  199. PRIMARY KEY (`id`),
  200. KEY `idx_user_id` (`user_id`),
  201. KEY `idx_order_id` (`order_id`),
  202. KEY `idx_type` (`type`),
  203. KEY `idx_created_at` (`created_at`)
  204. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收益记录表';
  205. -- ============================================
  206. -- 8. 积分记录表 (points_records)
  207. -- 页面: 积分商城、收益明细
  208. -- ============================================
  209. CREATE TABLE `points_records` (
  210. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  211. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  212. `type` ENUM('earn', 'spend', 'expire') NOT NULL COMMENT '类型: earn获得 spend消费 expire过期',
  213. `amount` INT NOT NULL COMMENT '积分数量(正为增加,负为减少)',
  214. `balance` INT DEFAULT 0 COMMENT '变动后余额',
  215. `source` VARCHAR(50) DEFAULT NULL COMMENT '来源: recycle/checkin/task/exchange/invite等',
  216. `reference_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联ID',
  217. `description` VARCHAR(255) DEFAULT NULL COMMENT '描述',
  218. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  219. PRIMARY KEY (`id`),
  220. KEY `idx_user_id` (`user_id`),
  221. KEY `idx_type` (`type`),
  222. KEY `idx_created_at` (`created_at`)
  223. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分记录表';
  224. -- ============================================
  225. -- 9. 商品表 (products)
  226. -- 页面: 积分商城
  227. -- ============================================
  228. CREATE TABLE `products` (
  229. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  230. `name` VARCHAR(100) NOT NULL COMMENT '商品名称',
  231. `category` VARCHAR(50) DEFAULT NULL COMMENT '分类: electronics/home/food等',
  232. `image` VARCHAR(255) DEFAULT NULL COMMENT '图片URL',
  233. `description` TEXT DEFAULT NULL COMMENT '描述',
  234. `points_price` INT NOT NULL COMMENT '积分价格',
  235. `cash_price` DECIMAL(10,2) DEFAULT 0.00 COMMENT '现金价格',
  236. `market_price` DECIMAL(10,2) DEFAULT 0.00 COMMENT '市场价格',
  237. `stock` INT DEFAULT 0 COMMENT '库存',
  238. `sales` INT DEFAULT 0 COMMENT '销量',
  239. `tag` VARCHAR(50) DEFAULT NULL COMMENT '标签: 热销/新品/限时',
  240. `sort_order` INT DEFAULT 0 COMMENT '排序',
  241. `status` TINYINT DEFAULT 1 COMMENT '状态: 0下架 1上架',
  242. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  243. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  244. PRIMARY KEY (`id`),
  245. KEY `idx_category` (`category`),
  246. KEY `idx_status` (`status`)
  247. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
  248. -- ============================================
  249. -- 10. 积分兑换记录表 (exchange_records)
  250. -- 页面: 积分商城
  251. -- ============================================
  252. CREATE TABLE `exchange_records` (
  253. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  254. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  255. `product_id` BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
  256. `product_name` VARCHAR(100) DEFAULT NULL COMMENT '商品名称',
  257. `points_cost` INT NOT NULL COMMENT '消耗积分',
  258. `quantity` INT DEFAULT 1 COMMENT '数量',
  259. `status` ENUM('pending', 'shipped', 'completed', 'cancelled') DEFAULT 'pending' COMMENT '状态',
  260. `shipping_address` VARCHAR(500) DEFAULT NULL COMMENT '收货地址',
  261. `shipping_no` VARCHAR(50) DEFAULT NULL COMMENT '快递单号',
  262. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  263. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  264. PRIMARY KEY (`id`),
  265. KEY `idx_user_id` (`user_id`),
  266. KEY `idx_product_id` (`product_id`),
  267. KEY `idx_status` (`status`)
  268. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分兑换记录表';
  269. -- ============================================
  270. -- 11. 通知表 (notifications)
  271. -- 页面: 消息通知
  272. -- ============================================
  273. CREATE TABLE `notifications` (
  274. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '通知ID',
  275. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  276. `type` ENUM('system', 'activity', 'reward', 'order') NOT NULL COMMENT '类型',
  277. `title` VARCHAR(100) NOT NULL COMMENT '标题',
  278. `message` TEXT NOT NULL COMMENT '内容',
  279. `icon` VARCHAR(50) DEFAULT 'notification' COMMENT '图标',
  280. `reference_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联ID',
  281. `is_read` TINYINT DEFAULT 0 COMMENT '是否已读: 0未读 1已读',
  282. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  283. PRIMARY KEY (`id`),
  284. KEY `idx_user_id` (`user_id`),
  285. KEY `idx_type` (`type`),
  286. KEY `idx_is_read` (`is_read`),
  287. KEY `idx_created_at` (`created_at`)
  288. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知表';
  289. -- ============================================
  290. -- 12. 活动表 (activities)
  291. -- 页面: 首页活动、积分商城活动
  292. -- ============================================
  293. CREATE TABLE `activities` (
  294. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '活动ID',
  295. `title` VARCHAR(100) NOT NULL COMMENT '活动标题',
  296. `description` TEXT DEFAULT NULL COMMENT '活动描述',
  297. `content` LONGTEXT DEFAULT NULL COMMENT '活动详情(富文本)',
  298. `image` VARCHAR(255) DEFAULT NULL COMMENT '活动图片',
  299. `tag` VARCHAR(50) DEFAULT NULL COMMENT '标签: 限时/热门/每日',
  300. `type` ENUM('announcement', 'event', 'promotion') DEFAULT 'event' COMMENT '类型',
  301. `start_time` DATETIME DEFAULT NULL COMMENT '开始时间',
  302. `end_time` DATETIME DEFAULT NULL COMMENT '结束时间',
  303. `reward_points` INT DEFAULT 0 COMMENT '奖励积分',
  304. `reward_cash` DECIMAL(10,2) DEFAULT 0.00 COMMENT '奖励现金',
  305. `sort_order` INT DEFAULT 0 COMMENT '排序',
  306. `status` TINYINT DEFAULT 1 COMMENT '状态: 0禁用 1启用',
  307. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  308. PRIMARY KEY (`id`),
  309. KEY `idx_type` (`type`),
  310. KEY `idx_status` (`status`),
  311. KEY `idx_start_time` (`start_time`)
  312. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动表';
  313. -- ============================================
  314. -- 13. 邀请记录表 (invite_records)
  315. -- 页面: 邀请好友
  316. -- ============================================
  317. CREATE TABLE `invite_records` (
  318. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  319. `inviter_id` BIGINT UNSIGNED NOT NULL COMMENT '邀请人ID',
  320. `invitee_id` BIGINT UNSIGNED NOT NULL COMMENT '被邀请人ID',
  321. `invitee_nickname` VARCHAR(50) DEFAULT NULL COMMENT '被邀请人昵称',
  322. `invitee_avatar` VARCHAR(255) DEFAULT NULL COMMENT '被邀请人头像',
  323. `status` ENUM('pending', 'success', 'expired') DEFAULT 'pending' COMMENT '状态',
  324. `reward_points` INT DEFAULT 0 COMMENT '奖励积分',
  325. `completed_orders` INT DEFAULT 0 COMMENT '被邀请人完成订单数',
  326. `invite_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '邀请时间',
  327. `success_time` DATETIME DEFAULT NULL COMMENT '成功时间(首次回收)',
  328. PRIMARY KEY (`id`),
  329. KEY `idx_inviter_id` (`inviter_id`),
  330. KEY `idx_invitee_id` (`invitee_id`),
  331. KEY `idx_status` (`status`)
  332. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='邀请记录表';
  333. -- ============================================
  334. -- 14. 签到记录表 (checkin_records)
  335. -- 页面: 积分商城签到
  336. -- ============================================
  337. CREATE TABLE `checkin_records` (
  338. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  339. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  340. `checkin_date` DATE NOT NULL COMMENT '签到日期',
  341. `continuous_days` INT DEFAULT 1 COMMENT '连续签到天数',
  342. `reward_points` INT DEFAULT 10 COMMENT '奖励积分',
  343. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  344. PRIMARY KEY (`id`),
  345. UNIQUE KEY `uk_user_date` (`user_id`, `checkin_date`),
  346. KEY `idx_user_id` (`user_id`),
  347. KEY `idx_checkin_date` (`checkin_date`)
  348. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='签到记录表';
  349. -- ============================================
  350. -- 15. 任务表 (tasks)
  351. -- 页面: 积分商城任务
  352. -- ============================================
  353. CREATE TABLE `tasks` (
  354. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '任务ID',
  355. `name` VARCHAR(100) NOT NULL COMMENT '任务名称',
  356. `description` VARCHAR(255) DEFAULT NULL COMMENT '任务描述',
  357. `type` ENUM('daily', 'weekly', 'once') DEFAULT 'daily' COMMENT '类型',
  358. `icon` VARCHAR(50) DEFAULT NULL COMMENT '图标',
  359. `reward_points` INT DEFAULT 0 COMMENT '奖励积分',
  360. `target_count` INT DEFAULT 1 COMMENT '目标次数',
  361. `action` VARCHAR(50) DEFAULT NULL COMMENT '关联动作: checkin/recycle/invite/share',
  362. `sort_order` INT DEFAULT 0 COMMENT '排序',
  363. `status` TINYINT DEFAULT 1 COMMENT '状态: 0禁用 1启用',
  364. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  365. PRIMARY KEY (`id`),
  366. KEY `idx_type` (`type`),
  367. KEY `idx_status` (`status`)
  368. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务表';
  369. -- ============================================
  370. -- 16. 用户任务进度表 (user_tasks)
  371. -- 页面: 积分商城任务
  372. -- ============================================
  373. CREATE TABLE `user_tasks` (
  374. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  375. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  376. `task_id` BIGINT UNSIGNED NOT NULL COMMENT '任务ID',
  377. `progress` INT DEFAULT 0 COMMENT '当前进度',
  378. `completed` TINYINT DEFAULT 0 COMMENT '是否完成: 0未完成 1已完成',
  379. `reward_claimed` TINYINT DEFAULT 0 COMMENT '是否领取奖励',
  380. `reset_date` DATE DEFAULT NULL COMMENT '重置日期(每日任务)',
  381. `completed_at` DATETIME DEFAULT NULL COMMENT '完成时间',
  382. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  383. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  384. PRIMARY KEY (`id`),
  385. UNIQUE KEY `uk_user_task_date` (`user_id`, `task_id`, `reset_date`),
  386. KEY `idx_user_id` (`user_id`),
  387. KEY `idx_task_id` (`task_id`)
  388. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户任务进度表';
  389. -- ============================================
  390. -- 17. 提现记录表 (withdraw_records)
  391. -- 页面: 收益提现
  392. -- ============================================
  393. CREATE TABLE `withdraw_records` (
  394. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  395. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  396. `amount` DECIMAL(10,2) NOT NULL COMMENT '提现金额',
  397. `method` ENUM('wechat', 'alipay', 'bank') NOT NULL COMMENT '提现方式',
  398. `account` VARCHAR(100) DEFAULT NULL COMMENT '提现账号',
  399. `status` ENUM('pending', 'processing', 'success', 'failed') DEFAULT 'pending' COMMENT '状态',
  400. `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
  401. `processed_at` DATETIME DEFAULT NULL COMMENT '处理时间',
  402. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  403. PRIMARY KEY (`id`),
  404. KEY `idx_user_id` (`user_id`),
  405. KEY `idx_status` (`status`),
  406. KEY `idx_created_at` (`created_at`)
  407. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提现记录表';
  408. -- ============================================
  409. -- 18. 捐赠记录表 (donation_records)
  410. -- 页面: 收益捐赠
  411. -- ============================================
  412. CREATE TABLE `donation_records` (
  413. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  414. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  415. `project_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '捐赠项目ID',
  416. `project_name` VARCHAR(100) DEFAULT NULL COMMENT '项目名称',
  417. `amount` DECIMAL(10,2) NOT NULL COMMENT '捐赠金额',
  418. `reward_points` INT DEFAULT 0 COMMENT '获得积分',
  419. `reward_carbon` DECIMAL(10,2) DEFAULT 0.00 COMMENT '获得碳减排量',
  420. `status` ENUM('pending', 'success', 'failed') DEFAULT 'pending' COMMENT '状态',
  421. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  422. PRIMARY KEY (`id`),
  423. KEY `idx_user_id` (`user_id`),
  424. KEY `idx_project_id` (`project_id`)
  425. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='捐赠记录表';
  426. -- ============================================
  427. -- 19. 捐赠项目表 (donation_projects)
  428. -- 页面: 收益捐赠
  429. -- ============================================
  430. CREATE TABLE `donation_projects` (
  431. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '项目ID',
  432. `name` VARCHAR(100) NOT NULL COMMENT '项目名称',
  433. `description` TEXT DEFAULT NULL COMMENT '项目描述',
  434. `image` VARCHAR(255) DEFAULT NULL COMMENT '项目图片',
  435. `target_amount` DECIMAL(12,2) DEFAULT 0.00 COMMENT '目标金额',
  436. `current_amount` DECIMAL(12,2) DEFAULT 0.00 COMMENT '当前金额',
  437. `donor_count` INT DEFAULT 0 COMMENT '捐赠人数',
  438. `status` TINYINT DEFAULT 1 COMMENT '状态: 0禁用 1启用',
  439. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  440. PRIMARY KEY (`id`),
  441. KEY `idx_status` (`status`)
  442. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='捐赠项目表';
  443. -- ============================================
  444. -- 20. AR扫描记录表 (scan_history)
  445. -- 页面: AR识别
  446. -- ============================================
  447. CREATE TABLE `scan_history` (
  448. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  449. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  450. `detected_class` VARCHAR(50) NOT NULL COMMENT '识别类别(英文)',
  451. `item_name` VARCHAR(100) DEFAULT NULL COMMENT '物品名称(中文)',
  452. `category` VARCHAR(50) DEFAULT NULL COMMENT '垃圾分类',
  453. `confidence` INT DEFAULT 0 COMMENT '置信度 0-100',
  454. `points` INT DEFAULT 0 COMMENT '获得积分',
  455. `image` VARCHAR(255) DEFAULT NULL COMMENT '图片',
  456. `bbox` VARCHAR(100) DEFAULT NULL COMMENT '边界框坐标',
  457. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '扫描时间',
  458. PRIMARY KEY (`id`),
  459. KEY `idx_user_id` (`user_id`),
  460. KEY `idx_created_at` (`created_at`)
  461. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AR扫描记录表';
  462. -- ============================================
  463. -- 21. 收藏表 (favorites)
  464. -- 页面: 我的收藏
  465. -- ============================================
  466. CREATE TABLE `favorites` (
  467. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  468. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  469. `type` ENUM('collector', 'drop_point', 'product', 'article') NOT NULL COMMENT '收藏类型',
  470. `target_id` BIGINT UNSIGNED NOT NULL COMMENT '目标ID',
  471. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  472. PRIMARY KEY (`id`),
  473. UNIQUE KEY `uk_user_type_target` (`user_id`, `type`, `target_id`),
  474. KEY `idx_user_id` (`user_id`)
  475. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收藏表';
  476. -- ============================================
  477. -- 22. 订单评价表 (order_reviews)
  478. -- 页面: 订单评价
  479. -- ============================================
  480. CREATE TABLE `order_reviews` (
  481. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '评价ID',
  482. `order_id` BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
  483. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  484. `collector_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '回收员ID',
  485. `rating` INT NOT NULL COMMENT '评分 1-5',
  486. `content` TEXT DEFAULT NULL COMMENT '评价内容',
  487. `images` TEXT DEFAULT NULL COMMENT '评价图片(JSON数组)',
  488. `tags` TEXT DEFAULT NULL COMMENT '评价标签(JSON数组)',
  489. `is_anonymous` TINYINT DEFAULT 0 COMMENT '是否匿名',
  490. `reply` TEXT DEFAULT NULL COMMENT '回复内容',
  491. `reply_time` DATETIME DEFAULT NULL COMMENT '回复时间',
  492. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  493. PRIMARY KEY (`id`),
  494. KEY `idx_order_id` (`order_id`),
  495. KEY `idx_user_id` (`user_id`),
  496. KEY `idx_collector_id` (`collector_id`)
  497. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单评价表';
  498. -- ============================================
  499. -- 23. 用户成就/徽章表 (user_badges)
  500. -- 页面: 个人中心成就
  501. -- ============================================
  502. CREATE TABLE `user_badges` (
  503. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  504. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  505. `badge_id` BIGINT UNSIGNED NOT NULL COMMENT '徽章ID',
  506. `unlocked_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '解锁时间',
  507. PRIMARY KEY (`id`),
  508. UNIQUE KEY `uk_user_badge` (`user_id`, `badge_id`),
  509. KEY `idx_user_id` (`user_id`)
  510. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户成就徽章表';
  511. -- ============================================
  512. -- 24. 徽章定义表 (badges)
  513. -- 页面: 个人中心成就
  514. -- ============================================
  515. CREATE TABLE `badges` (
  516. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '徽章ID',
  517. `name` VARCHAR(50) NOT NULL COMMENT '徽章名称',
  518. `description` VARCHAR(255) DEFAULT NULL COMMENT '描述',
  519. `icon` VARCHAR(100) DEFAULT NULL COMMENT '图标',
  520. `condition_type` VARCHAR(50) DEFAULT NULL COMMENT '条件类型',
  521. `condition_value` INT DEFAULT 0 COMMENT '条件值',
  522. `reward_points` INT DEFAULT 0 COMMENT '奖励积分',
  523. `sort_order` INT DEFAULT 0 COMMENT '排序',
  524. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  525. PRIMARY KEY (`id`)
  526. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='徽章定义表';
  527. -- ============================================
  528. -- 25. 客服会话表 (customer_service_sessions)
  529. -- 页面: 客服
  530. -- ============================================
  531. CREATE TABLE `customer_service_sessions` (
  532. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '会话ID',
  533. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  534. `status` ENUM('open', 'closed') DEFAULT 'open' COMMENT '状态',
  535. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  536. `closed_at` DATETIME DEFAULT NULL COMMENT '关闭时间',
  537. PRIMARY KEY (`id`),
  538. KEY `idx_user_id` (`user_id`),
  539. KEY `idx_status` (`status`)
  540. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客服会话表';
  541. -- ============================================
  542. -- 26. 客服消息表 (customer_service_messages)
  543. -- 页面: 客服
  544. -- ============================================
  545. CREATE TABLE `customer_service_messages` (
  546. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '消息ID',
  547. `session_id` BIGINT UNSIGNED NOT NULL COMMENT '会话ID',
  548. `sender_type` ENUM('user', 'service', 'system') NOT NULL COMMENT '发送者类型',
  549. `sender_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '发送者ID',
  550. `content` TEXT NOT NULL COMMENT '消息内容',
  551. `content_type` ENUM('text', 'image', 'file') DEFAULT 'text' COMMENT '内容类型',
  552. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  553. PRIMARY KEY (`id`),
  554. KEY `idx_session_id` (`session_id`),
  555. KEY `idx_created_at` (`created_at`)
  556. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客服消息表';
  557. -- ============================================
  558. -- 初始化基础数据
  559. -- ============================================
  560. -- 插入废品分类数据
  561. INSERT INTO `waste_categories` (`name`, `code`, `icon`, `price_per_kg`, `points_per_kg`, `carbon_per_kg`, `tips`, `sort_order`) VALUES
  562. ('纸类', 'paper', 'fas fa-newspaper', 2.50, 5, 0.10, '["请清洗干净后投放","保持干燥","去除塑料封面"]', 1),
  563. ('塑料', 'plastic', 'fas fa-recycle', 3.00, 6, 0.15, '["请清洗干净","建议压扁后投放","分类投放更环保"]', 2),
  564. ('玻璃', 'glass', 'fas fa-wine-bottle', 1.50, 3, 0.08, '["请小心破碎","分颜色投放效果更好"]', 3),
  565. ('电子产品', 'electronic', 'fas fa-mobile-alt', 8.00, 50, 0.50, '["含有贵重金属","建议专业回收","请取出电池"]', 4),
  566. ('纺织品', 'textile', 'fas fa-tshirt', 2.00, 4, 0.12, '["保持干燥清洁","可捐赠再利用"]', 5),
  567. ('金属', 'metal', 'fas fa-wrench', 5.00, 10, 0.30, '["分类回收效果更好","注意锋利边缘"]', 6),
  568. ('家具', 'furniture', 'fas fa-chair', 3.00, 8, 0.20, '["大件需预约上门","可拆解后投放"]', 7),
  569. ('其他', 'other', 'fas fa-cube', 1.00, 2, 0.05, '["请确认物品类别","如不确定请咨询客服"]', 8);
  570. -- 插入任务数据
  571. INSERT INTO `tasks` (`name`, `description`, `type`, `icon`, `reward_points`, `target_count`, `action`, `sort_order`) VALUES
  572. ('每日签到', '连续签到获得积分奖励', 'daily', 'fas fa-calendar-check', 10, 1, 'checkin', 1),
  573. ('完成回收', '完成一次废品回收', 'daily', 'fas fa-recycle', 50, 1, 'recycle', 2),
  574. ('邀请好友', '邀请好友注册使用', 'once', 'fas fa-user-friends', 100, 3, 'invite', 3),
  575. ('分享应用', '分享应用给朋友', 'daily', 'fas fa-share-alt', 20, 1, 'share', 4);
  576. -- 插入捐赠项目
  577. INSERT INTO `donation_projects` (`name`, `description`, `target_amount`) VALUES
  578. ('绿色地球计划', '支持全球环保项目,减少碳排放', 100000.00),
  579. ('海洋清洁行动', '清理海洋垃圾,保护海洋生态', 50000.00),
  580. ('森林保护基金', '保护森林资源,维护生态平衡', 80000.00);
  581. -- 插入徽章数据
  582. INSERT INTO `badges` (`name`, `description`, `condition_type`, `condition_value`, `reward_points`, `sort_order`) VALUES
  583. ('环保新手', '完成首次回收', 'recycle_count', 1, 10, 1),
  584. ('回收达人', '完成10次回收', 'recycle_count', 10, 50, 2),
  585. ('环保先锋', '完成50次回收', 'recycle_count', 50, 200, 3),
  586. ('碳中和战士', '累计碳减排100kg', 'carbon_total', 100, 100, 4),
  587. ('签到达人', '连续签到7天', 'checkin_days', 7, 30, 5),
  588. ('社交达人', '成功邀请5位好友', 'invite_count', 5, 150, 6);
  589. -- ============================================
  590. -- 完成
  591. -- ============================================