在年轻群体与家庭自驾出行日益普及的今天,自由行与结伴出游已成为主流生活方式。然而,行前的繁杂攻略搜集、行中不合理的绕路折返跑,以及行后多人垫付与 AA 记账的账目拉扯,往往令出游体验大打折扣。
本项目【AI 智能旅行路书与开销AA记账App】基于现代企业级 Vue 3.4 + Spring Boot 3 + 高德/百度 LBS 地图 + LLM 大语言模型 架构,打造涵盖 PC 团队旅行排期与路书定制工作台 (PC)、商业运营与同城生活服务总控中枢 (Admin) 与 手机随身记账与地图打卡微信小程序 (Mobile H5/小程序) 的三端一体化闭环实战平台。
一、 核心系统架构与三端技术选型
| 分层维度 | 核心技术与选型标准 | 实现特性与业务支撑 |
|---|---|---|
| 前端架构 | Vue 3.4 + Pinia + Vite 5 + Tailwind CSS + ECharts 5 | 明亮活力青草绿与暖阳天蓝,高密度组件化与毫秒级渲染 |
| 后端引擎 | Spring Boot 3.2 + Spring Cloud + MyBatis-Plus + Redis | 分布式高并发记账流水、离线缓存与防篡改账单审计 |
| AI与空间拓扑 | DeepSeek-V3 / Qwen-2.5 + 高德/百度 LBS Web API | 秒级输出时序路书,规避折返跑,最小转账次数平账算法 |
二、 三端一体化高保真系统功能与全屏实况
1. PC 电脑端:旅行团期排期与路书定制工作台
(1) AI 智能时序路书生成工作台 (PlannerView)
融合高德/百度经纬度拓扑,秒级排期,每日早中晚时序节点智能规划,彻底杜绝跨城反复折返跑与无效赶路。

(2) 多人结伴开销 AA 极速平账沙盘 (SettlementView)
采用图论“最小转账次数 (Min-Cash-Flow)”算法,将全队几百笔混乱垫付流水智能压缩为至多 N-1 笔极简清偿还款路径。

(3) 旅行开销监控与汇率对冲看板 (BudgetMonitorView)
穿透吃、住、行、游、娱五大类目预算进度,集成离岸多币种基准牌价实时折算,防范预算超支。

(4) 智能行前行李物料与出境证件备忘录 (LuggageChecklistView)
针对高原温差与户外特征自动生成高反医疗、保暖冲锋衣与数码摄影器材清单,全员协同打卡。

(5) 高清 A4 纸质与电子路书导出 (RoadbookPrintView)
一键导出矢量 A4 格式排版手账路书,集成紧急救援热线与离线时间轴,无网络区出行无忧。

(6) AI 智能出行黑卡特权会员中心 (MemberVipView)
尊享不限次 LLM 空间避坑路书生成、全球 140+ 机场 CIP 快速通道、24H 紧急救援与合作租车直减。

2. 运营管理后台 (Admin Super Console)
(1) 全网智能出行大数据监控中枢 (AdminDashboardView)
实时汇聚全国 32 省进行中团队、AI 调度并发峰值与结伴平账流水大盘,掌握全网出行态势。

(2) 高德/百度 POI 景点与地标打卡库 (ScenicLibraryView)
集中维护 100,000+ 经纬度地标、官方开放时段、海拔气象参数与人流饱和度预警。

(3) AI 旅行智能体规则与提示词中枢 (LlmPromptsView)
针对特种兵打卡、慢节奏深度游与高原自驾场景动态微调 LLM System Prompt 与温度参数。

(4) 向导地接与硬派租车车队管理 (MerchantServiceView)
签约入驻本地资深向导、越野四驱租赁车队与紧急保障中心,提供高品质落地交付保障。

(5) 账单存证审计与清算争议工单 (AuditLogsView)
全量留存结伴记账凭证、防篡改操作 SHA-256 哈希校验与平台调解记录。

3. 手机移动端与微信小程序随身出游端 (Mobile H5 / Mini-Program)
(1) 随身旅行极速首页 (MobileHomeView)
当日出游状态、预算结余、下一打卡点距离与队友实时定位同步。

(2) 今日时序路书与打卡 (MobileTodayTimelineView)
早中晚时间轴节点清晰呈现,一键直达高德导航与现场打卡。

(3) 闪电记账与多人分摊 (MobileQuickExpenseView)
3秒极速记账,支持单人垫付与全队按比例均摊,全员秒级同步。

(4) 结伴平账与微信还款 (MobileAaSummaryView)
个人净应付/净应收一览无余,支持一键调起微信零钱转账还款。

三、 核心结伴开销 AA 最小转账次数算法实现
// Spring Boot 3.2 结伴出游开销 AA 记账与图论最小转账次数 (Min-Cash-Flow) 算法服务
package com.aitravel.service;
import com.aitravel.model.ExpenseRecord;
import com.aitravel.model.ClearanceTransfer;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
@Service
public class GroupSettlementService {
/**
* 基于贪心收支平衡图论算法计算多人结伴最小转账链路
* 将 N*(N-1)/2 笔混乱转账压缩至至多 N-1 笔极简清算
*/
public List calculateMinCashFlow(List expenses, List memberIds) {
Map<String, BigDecimal> netAmounts = new HashMap<>();
for (String m : memberIds) netAmounts.put(m, BigDecimal.ZERO);
// 1. 汇总每位成员的净收支(总垫付 - 总应摊)
for (ExpenseRecord exp : expenses) {
String payer = exp.getPayerId();
BigDecimal amount = exp.getAmount();
List splitMembers = exp.getSplitMemberIds();
BigDecimal perShare = amount.divide(new BigDecimal(splitMembers.size()), 2, RoundingMode.HALF_UP);
netAmounts.put(payer, netAmounts.get(payer).add(amount));
for (String sm : splitMembers) {
netAmounts.put(sm, netAmounts.get(sm).subtract(perShare));
}
}
List transfers = new ArrayList<>();
settleMinTransfers(netAmounts, transfers);
return transfers;
}
private void settleMinTransfers(Map<String, BigDecimal> netAmounts, List result) {
// 寻找最大债权人 (Max Credit) 与最大债务人 (Max Debit)
String maxCreditUser = null, maxDebitUser = null;
BigDecimal maxCredit = BigDecimal.ZERO, maxDebit = BigDecimal.ZERO;
for (Map.Entry<String, BigDecimal> entry : netAmounts.entrySet()) {
if (entry.getValue().compareTo(maxCredit) > 0) {
maxCredit = entry.getValue();
maxCreditUser = entry.getKey();
}
if (entry.getValue().compareTo(maxDebit) < 0) {
maxDebit = entry.getValue();
maxDebitUser = entry.getKey();
}
}
if (maxCreditUser == null || maxDebitUser == null) return;
if (maxCredit.compareTo(BigDecimal.ZERO) == 0 && maxDebit.compareTo(BigDecimal.ZERO) == 0) return;
// 清偿两者绝对值的较小者
BigDecimal settleAmount = maxCredit.min(maxDebit.abs());
netAmounts.put(maxCreditUser, maxCredit.subtract(settleAmount));
netAmounts.put(maxDebitUser, maxDebit.add(settleAmount));
result.add(new ClearanceTransfer(maxDebitUser, maxCreditUser, settleAmount, "待还款"));
// 递归平账直到全员净额归零
settleMinTransfers(netAmounts, result);
}
}
四、 常见问题解答 (FAQ)
Q1: 如果遇到境外无网络或山区弱信号,手机端记账与路书会丢失吗?
A: 不会。系统移动端内置本地 IndexedDB/LocalStorage 离线沙盒缓存,即使完全离线也能查看全部排期与离线地图。离线状态下录入的账单流水将在设备重新接入互联网后自动后台静默同步到全队账本。
Q2: 前端工程如何运行与二次开发?
A: 项目采用现代标准的 Vue 3.4 + Pinia + Vite 5 脚手架,解压源码后在终端运行 npm install 与 npm run dev 即可毫秒级启动。预置完整多设备时序路书、图论平账沙盘及全套 15 张 4K 截图,开箱即用!
