ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Campus-iMaoTai部署教程:六步跑通i茅台自动预约系统

Campus-iMaoTai部署教程:六步跑通i茅台自动预约系统

Campus-iMaoTai部署教程:六步跑通i茅台自动预约系统

【免费下载链接】campus-imaotaii茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法)项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai

i茅台的每日申购是典型的「定点拼手速」:每天早上申购窗口短暂开启,手动刷新、点击、选门店都是重复动作。账号一多就更麻烦——每个账号的登录态、门店偏好、预约时间都要单独盯,很容易漏掉一个。「i茅台自动预约」的本质,就是把这些动作交给系统按时执行,人只负责配置和看结果。

Campus-iMaoTai 是一个基于 Java 的 i茅台自动预约系统,支持多账号管理与定时自动预约,可通过 Docker 一键部署,适合希望把 i茅台每日申购流程自动化的个人用户,以及想学习预约类系统全流程的开发者。

部署完成后,你在管理页面用「手机号 + 短信验证码」绑定 i茅台账号,设定预约分钟与门店策略,系统在每天的固定时段自动完成预约、领耐力值、查结果,并把每一步写进操作日志。整个过程不需要在早上九点守着手机。

项目速览:技术栈与部署方式一览

项说明
定位i茅台 app 自动预约:账号绑定、定时申购、门店选择、结果查询、日志追踪
后端Spring Boot + MyBatis-Plus,Spring 定时任务驱动每日流程
前端Vue + Element UI 管理后台(RuoYi 风格界面)
存储MySQL 5.7 + Redis 6.2
部署Docker Compose 一键启动 MySQL、Redis、Nginx、后端四个容器
适合谁需要统一管理多个 i茅台账号的用户;学习全栈管理与定时任务实现的开发者

提前说明一点:项目描述明确写着「使用的是已淘汰的算法」,即 i茅台侧的接口策略可能已更新,当前线上环境未必能跑通申购。把它当作学习和研究对象使用更稳妥,这一点在文末的适用场景部分还会再提。

最短路径跑起来:六步启动四容器

环境要求

组件版本建议用途
Docker最新稳定版运行四个容器
Docker Compose最新稳定版批量编排
服务器内存建议 ≥ 4GBMySQL、Redis、Java 后端同时常驻

启动六步

  1. 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ca/campus-imaotai
  1. 启动全部服务(编排文件为 doc/docker/docker-compose.yml,会自动建库 campus_imaotai):
cd campus-imaotai/doc/docker docker-compose up -d
  1. 导入表结构与初始数据(doc/sql/campus_imaotai-1.0.5.sql,包含 i_user、i_shop、i_item、i_log 四张业务表及系统管理表):
cd campus-imaotai/doc/sql mysql -h localhost -u root -p campus_imaotai < campus_imaotai-1.0.5.sql
  1. 验证基础设施(分别确认容器、缓存、数据库都可用):
docker ps # 四个容器均处于 Up 状态 redis-cli ping # 返回 PONG mysql -h localhost -u root -p -e "SHOW DATABASES;" # 能看到 campus_imaotai
  1. 登录管理后台:浏览器打开http://localhost(Nginx 监听 80 端口,/prod-api/反向代理到 8160),用内置账号 admin / admin123 登录,进入后先改密码。

  2. 验证业务链路:进入「门店列表」能看到门店数据、在「用户管理」能正常新增账号,说明后端、数据库与 i茅台接口三者都通了,部署即完成。

各服务端口参考:

服务端口
Nginx(前端 + 反向代理)80
Campus 后端 API8160
MySQL3306
Redis6379

核心能力拆解:从账号绑定到结果推送

多账号管理:手机号 + 验证码绑定账号

绑定流程是「手机号 + 短信验证码」两步:输入手机号后系统调用 i茅台注册接口发送验证码,填入验证码后系统代为登录,把返回的 token、cookie、deviceId 存进 i_user 表,账号即绑定完成。

  • 支持添加多个账号,彼此独立、互不影响
  • 「直接新增」方式可手工录入已知信息,适合学习数据结构
  • 绑定成功后,列表中能看到 i茅台 userId、token、省市区、预约项目与到期时间

图:添加账号弹窗,输入手机号并发送验证码后,系统自动完成登录与账号落库

用户列表:多条件搜索与批量操作

用户列表是全部预约动作的入口:可按手机号、userId、省份、城市组合筛选;每行展示预约项目 code(多个项目用 @ 分隔)、门店策略类型(1 为本市出货量最大门店,2 为位置附近门店)、预约分钟、token 到期时间。

对单行可以手动触发预约、修改、删除;token 到期后「到期时间」会提示失效,重新走一遍验证码绑定即可。前端页面源码在 vue_campus_admin/src/views/imt/,四个页面(用户、预约项目、门店、日志)与后端一一对应。

图:用户管理列表,支持手机号、用户ID、省份、城市多条件搜索与逐行操作

定时预约:固定时段 + 随机分钟

每日流程由定时任务驱动,源码见 CampusIMTTask:

时间任务
01:10批量更新各账号的预约分钟(随机分钟模式下重新取随机值)
7、8 点(10 分 / 55 分)刷新 i茅台版本号、门店列表、预约商品列表
09:00–09:59每分钟检查一次,触发「预约分钟」命中的账号执行申购
11:00–11:59批量领取小茅运旅行奖励
18:05查询申购结果,写入日志并推送

每个账号的预约分钟可固定、也可设为随机,多个账号就不会挤在同一秒提交。

门店智能选择:按出货量与距离两种策略

申购前先选门店。系统按账号的门店策略(shopType)决定:

  • 类型 1:优先选本市出货量(库存)最大的门店;本市无货时退化为省内距离最近的门店
  • 类型 2:按账号填写的经纬度,用 Haversine 公式算出距离,选省内最近门店

门店与商品数据每天从 i茅台的公开静态接口拉取,写入 i_shop、i_item 两张表,Redis 缓存列表减少重复请求。「门店列表」页面可按商品 ID、省份、城市、地区过滤,也可点击按钮手动刷新。

图:门店列表页面,展示商品ID、省市区、经纬度与公司名称,支持一键刷新

操作日志:预约过程可追溯

每一次申购、领奖励、查结果都会落一条 i_log 记录,包含账号、动作、结果与时间。日志页面支持按系统模块、操作人员、状态、时间范围筛选,支持批量删除与清空。

若给账号配置了 PushPlus token,预约成功或失败还会即时推送到手机(见 PushPlusApi),不用守着页面等结果。

图:操作日志页面,逐条记录i茅台预约动作、日志内容与成功失败状态

用得更好:调优与排错清单

调优建议

  • 不同账号错开门店策略与预约项目,避免多账号争抢同一家门店
  • 开启「随机分钟」模式,把 9 点窗口的提交时间打散
  • 预约后系统会自动延迟领取申购耐力值,结果由 18:05 任务统一查询记录,无需人工跟进
  • 保证服务器到 i茅台域名的网络延迟低且稳定,提交环节对时延敏感

常见排错

现象排查方向
容器起不来3306 / 6379 / 80 / 8160 端口被占用,先释放再重启
数据库连不上docker ps看 mysql 容器状态;root 密码需与 compose 中的 123456789 一致
Redis 异常检查挂载的 /docker/redis/conf/redis.conf 是否存在且有效
前端打不开检查 Nginx 配置挂载路径 /docker/nginx/conf/nginx.conf 与页面目录
预约任务不触发确认账号预约分钟在 1–59 之间,且服务器时区为 Asia/Shanghai
申购全部失败先看账号 token 是否过期(列表「到期时间」),再看门店列表是否有当日数据

需要覆盖内置的数据库或 Redis 连接参数时,在/docker/server/conf/下创建 application-prod.yml,compose 已通过spring.config.additional-location参数加载该文件,说明见 doc/docker/server/conf/README.md。

谁适合用与上手建议

适合的场景

  • 个人用户:统一维护一个或多个 i茅台账号的登录态与预约流程,或想弄清楚「定时自动化系统」从账号、调度、存储到通知的完整做法
  • 开发者:Spring Boot + MyBatis-Plus + Vue 后台是完整样例,定时任务(CampusIMTTask)、日志追踪(IMTLogFactory)、消息推送等模块都可以拆出来二次开发
  • 学习研究:接口签名、参数加密、门店选择策略都有可读源码,适合作为预约类流程的剖析对象

不适合的场景:期望「部署即能抢到」的用户。项目说明已声明算法淘汰,i茅台侧策略更新后线上功能可能不可用。

落地建议

  1. 先读 README 的声明部分:数据真实性与使用合规由使用者自行承担
  2. 登录后立即修改 admin 默认密码,不要把 80 端口直接暴露到公网
  3. 定期备份/docker/mysql/data/数据目录,账号与日志数据只存在这里
  4. 想深入阅读时,从 campus-modular 业务包 入手,按 CampusIMTTask → IMTServiceImpl 的顺序跟一遍即可看懂主流程

部署完成后,用一个真实账号走完整链路验证:添加账号、等待 9 点自动申购、在操作日志里核对结果。接口当前是否仍可用,跑完这一轮就能得到答案,这也是进入这套系统最快的方式。

【免费下载链接】campus-imaotaii茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法)项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进