20 分钟跑通 i 茅台自动预约:campus-imaotai 部署与每日跑批上手记录
【免费下载链接】campus-imaotaii茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法)项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai
多人 i 茅台账号的每日申购,手动守着时间点切账号很容易漏单。campus-imaotai 把这件事做成了定时跑批:账号、门店、分钟配置一次落库,之后每天 9 点档由服务端自动发请求、自动回查结果,用 Docker Compose 一次拉起。下面是实测部署路径和日常操作记录。
项目定位
campus-imaotai 是一套 i 茅台每日自动预约后台:后端跑批 + Vue 管理界面,围绕多账号集中管理、门店自动匹配、申购结果回查三件事。适合想研究批量调度、接口自动化,或想管理多个 i 茅台账号的开发者。
| 你手动做 | 本项目自动做 |
|---|---|
| 9 点逐账号登录、选门店、提交申购 | 定时任务按分钟分组批量发起申购 |
| 翻多个 App 看申购结果 | 18:05 统一回查并写入日志表 |
| 手动查门店库存和经纬度 | 启动时自动拉取门店、商品列表并缓存 |
跑起来
运行前提:
- Linux 服务器(compose 里容器全部
network_mode: host,macOS 上端口和挂载路径行为不同) - Docker 20.10+、Docker Compose 2.0+
- 预先创建宿主机目录:
/docker/mysql/{data,conf,logs}、/docker/redis/{conf,data}、/docker/nginx/{html,cert,conf,log}、/docker/server/conf(挂载点不存在时容器会反复重启) - 可访问外网,首次启动需要拉取门店与商品数据
最小可运行步骤:
- 克隆仓库并进入部署目录。
git clone https://gitcode.com/GitHub_Trending/ca/campus-imaotai cd campus-imaotai/doc/docker- 创建 compose 引用的宿主机挂载目录。
mkdir -p /docker/mysql/{data,conf,logs} /docker/redis/{conf,data} /docker/nginx/{html,cert,conf,log} /docker/server/conf- 启动全部服务(MySQL 5.7、Redis、Nginx、后端镜像
campus/campus-imaotai:1.0.13,后端监听8160)。
docker-compose up -d- 确认容器状态与访问入口。
docker-compose ps怎么确认跑通了:4 个容器均为Up,浏览器访问服务器 80 端口,用初始化账号admin/admin登录后台,「i茅台 → 门店列表」页已自动列出全国门店数据(服务启动时会先执行一次数据刷新),即说明链路完整。
功能拆解(按工作流)
i 茅台账号接入与预约项目配置
首次部署后要先把账号接进来。两种方式:「添加账号」输入手机号点「发送验证码」,再填验证码登录,token、cookie、用户 ID 自动落库;「直接新增」适合手里已有 token 的场景。
- 登录成功后系统把
token、cookie 写入用户表,并记录约 30 天到期时间 - 「直接新增」时门店经纬度、省市从所选门店带出,不用手填
- 预约项目 code 支持用
@分隔多个商品,一次预约多个 - 门店类型二选一:1 选本市出货量最大的门店(本市无货则回退本省最近门店),2 直接按距离选最近门店
i 茅台每日自动预约执行与结果回查
日常使用基本零操作。CampusIMTTask在 9 点档每分钟执行一次,取出「预约分钟 = 当前分钟」的账号依次发申购请求,账号之间固定间隔 3 秒。
- 预约后延迟 10 秒领取申购耐力值,单独记一条日志
- 18:05 定时回查当日申购结果,成功记录会写进日志内容
- 「系统管理 → 操作日志」按模块、状态、时间筛选,能看到每次请求的返回内容
- 11 点档另有小茅运旅行奖励任务,逻辑独立于申购
多账号分钟打散与消息推送
账号多时需要分散请求节奏、及时知道结果。随机分钟开关打开后,系统每天 1:10 把随机账号的预约分钟重算一遍,避免所有账号挤在同一分钟。
- 账号数超过 60 个时自动改用均匀分布策略
- 用户表里填
pushPlusToken后,执行成功或失败都会经 PushPlus 推到手机 - 门店列表页点「刷新茅台商品列表」可手动重拉当日门店与商品,不必等定时任务
原理速览
整个链路是一条定时数据流:Spring 定时任务按分钟取账号 → 从 Redis 读门店列表与当日sessionId(启动时和每天 7:10/8:10 自动刷新)→ 门店选择策略算出shopId(出货量最大或 Haversine 最近距离)→ 请求体 AES-CBC 加密后调用 i 茅台申购接口 → 响应写入i_log并异步触发推送。
CampusIMTTask cron 触发:9点档预约 / 11点档旅行奖励 / 18:05结果回查 / 1:10分钟重排 IMTServiceImpl 签名、加密、请求构造、日志落库 IShopServiceImpl 门店/商品拉取、缓存、门店选择策略 vue_campus_admin 用户管理、门店列表、预约项目页面技术栈一行带过:Spring Boot + MyBatis-Plus + Redis + MySQL 5.7,前端 Vue 2 + Element UI,Docker Compose 部署。
避坑 & 常见问题
Q1:docker-compose up -d后 mysql 或 redis 容器起不来,反复重启?
compose 里的卷都是宿主机绝对路径,目录不存在时容器起不来。先执行上面第 2 步把 6 组目录建好再启动,或自行修改 docker-compose.yml 的挂载路径。
Q2:80 端口打开是空页面,后台登录页没有?
Nginx 容器只是空壳,静态文件要自己构建vue_campus_admin后,把dist产物放进/docker/nginx/html;接口经/prod-api代理到后端 8160 端口。
Q3:日志里出现「登录失败,本地错误日志已记录」或 token 失效类报错?
一般是验证码过期、deviceId 变更或 token 超期。重新走一遍「发送验证码 → 登录」,登录成功会自动刷新库里的 token 和 cookie。
Q4:点「预约」或跑批时提示「商品预约code为空」?
没配预约项目。到「预约项目」页拿当日商品 code 填到用户记录里,格式支持@分隔多个商品。
Q5:预约任务是不是全天随机执行?
不是。申购窗口固定在 9:00–9:59,按账号配置的分钟数分组触发;旅行奖励任务在 11 点档,别把两条任务的时间混为一谈。
合规与边界
- 项目仅限学习和研究用途,README 中的声明建议 24 小时内完成研究后删除部署与数据。
- 手机号、token、门店数据由使用者自行填写,真实性与合法性责任在使用侧。
- 接口签名与加密参数来自公开抓包,平台接口调整后逻辑可能整体失效,项目方不提供成品。
这套系统的价值在于把「每天 9 点盯 i 茅台申购」变成一条可拆解的定时链路:门店策略、分钟分组、请求构造都是独立方法,接口变更时改动面很小。下一步建议从 README 的声明部分读起,再进 campus-modular 业务包 对照CampusIMTTask与IMTServiceImpl看具体实现。
【免费下载链接】campus-imaotaii茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法)项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考