news 2026/10/19 1:34:43

20 分钟跑通 i 茅台自动预约:campus-imaotai 部署与每日跑批上手记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
20 分钟跑通 i 茅台自动预约:campus-imaotai 部署与每日跑批上手记录

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(挂载点不存在时容器会反复重启)
  • 可访问外网,首次启动需要拉取门店与商品数据

最小可运行步骤:

  1. 克隆仓库并进入部署目录。
git clone https://gitcode.com/GitHub_Trending/ca/campus-imaotai cd campus-imaotai/doc/docker
  1. 创建 compose 引用的宿主机挂载目录。
mkdir -p /docker/mysql/{data,conf,logs} /docker/redis/{conf,data} /docker/nginx/{html,cert,conf,log} /docker/server/conf
  1. 启动全部服务(MySQL 5.7、Redis、Nginx、后端镜像campus/campus-imaotai:1.0.13,后端监听8160)。
docker-compose up -d
  1. 确认容器状态与访问入口。
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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 1:30:34

树莓派4B ROS Melodic完整版镜像:开箱即用的机器人开发环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/19 1:30:25

ESP32+MFRC522实现MIFARE Classic刷卡全链路解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/19 1:29:34

AI传感器+掌控板:中小学物联网教学的具身实践方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/19 1:29:30

STM32上电启动流程全解析:复位向量、BOOT模式到main函数

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华