黄鹏宇
发布于 2025-05-02 / 39 阅读
0
0

手把手教你用Flutter / java打造AI记账App前后端🚀

一、前言

大家好,前不久和朋友一起做了个多人记账软件。功能比较完整,已经上架了应用市场。不过这类软件太卷了,运营起来比较麻烦,所以决定开源出来,分享下我的开发过程,供大家参考学习,希望有所帮助。

整个教程包括前后端,会做成一个合集,逐步更新,欢迎关注。

好,首先说一下技术选型。
考虑到多端开发成本,前端用的flutter,后端用的java,数据库用的mysql和redis,ai调的coze

来看看整体的功能吧

好了,第一集先到这,下一集开始搭建项目。

二、项目整体框架


这节课做三个事,讲一下整体项目、叠甲、带大家跑起来

1. 整体架构

是个很简单的项目,但是还比较好玩,功能实现也比较完整

  1. 前后端鉴权:jwt
  2. 缓存:redis
  3. 数据库:mysql
  4. 前端:flutter、dart、vue(落地页)
  5. 后端:java springboot,单体
  6. 负载均衡:nginx
  7. 文件存储:腾讯云cos
  8. 前端状态管理:getx
  9. 前端ui框架:tdesign

2. 功能模块

1. 登录

  1. 手机验证码登录
  2. 苹果登录
  3. 微信登录

2. 记账

  1. 手动输入记账
  2. 语音记账
  3. 快捷记账

3. 账单列表

  1. 查询账单列表

4. 账本

  1. 多人账本

5. 与coze交互

6. 数据可视化

附录:相关资源

落地页代码

https://e.coding.net/suyu-cool/journal/landpage.git

前端代码

https://e.coding.net/suyu-cool/journal/flutter.git

后端代码

https://e.coding.net/suyu-cool/journal/java.git

接口文档

https://apifox.com/apidoc/shared-afaa09d9-608f-427f-98d8-bdc78289cd18

设计稿

https://www.figma.com/design/WiM2w7SHiPul1yVlJCO3Lk/%E5%A5%BD%E4%BA%AB%E8%AE%B0%E8%B4%A6?node-id=0-1&t=gXcvVgmrQYuHVRBX-1

数据库结构

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user_log
-- ----------------------------
DROP TABLE IF EXISTS `user_log`;
CREATE TABLE `user_log` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `duration` int DEFAULT NULL,
  `http_method` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'INSERT,SELECT,UPDATE,DELETE',
  `params` varchar(600) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `function_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `ip` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=890117 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Table structure for expense
-- ----------------------------
DROP TABLE IF EXISTS `expense`;
CREATE TABLE `expense` (
  `id` int NOT NULL AUTO_INCREMENT,
  `expense_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `price` decimal(20,2) NOT NULL,
  `label` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `user_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `activity_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `positive` tinyint(1) DEFAULT '0' COMMENT '正向1是收入,反向0是支出',
  `expense_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_ex_id` (`expense_id`),
  KEY `index_ac_user` (`user_id`,`activity_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1202 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `avatar_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'https://cdn.uuorb.com/blog/suyu_LOGO_Full.png',
  `openid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `unionid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `telephone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `vip` tinyint(1) NOT NULL DEFAULT '0',
  `vip_expire_time` datetime DEFAULT NULL,
  `last_login_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `current_activity_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `opening_statement` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '开场白',
  `salutation` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '你好' COMMENT '称呼:比如哥哥',
  `relationship` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '财务管家' COMMENT '关系',
  `personality` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '正经' COMMENT '性格',
  `ai_avatar_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `union_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `apple_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `user_id_UNIQUE` (`user_id`),
  UNIQUE KEY `openid_UNIQUE` (`openid`)
) ENGINE=InnoDB AUTO_INCREMENT=160 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ----------------------------
-- Table structure for activity
-- ----------------------------
DROP TABLE IF EXISTS `activity`;
CREATE TABLE `activity` (
  `id` int NOT NULL AUTO_INCREMENT,
  `activity_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '活动ID',
  `activity_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '活动名称',
  `budget` decimal(20,2) DEFAULT '0.00' COMMENT '预算,0为不限',
  `user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `remaining_budget` decimal(20,2) DEFAULT NULL COMMENT '预算余额',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `activated` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否为当前活跃的',
  PRIMARY KEY (`id`),
  UNIQUE KEY `activity_id_UNIQUE` (`activity_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1061 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ----------------------------
-- Table structure for activity_user_rel
-- ----------------------------
DROP TABLE IF EXISTS `activity_user_rel`;
CREATE TABLE `activity_user_rel` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `activity_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=166 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ----------------------------
-- Table structure for system_config
-- ----------------------------
DROP TABLE IF EXISTS `system_config`;
CREATE TABLE `system_config` (
  `id` int NOT NULL AUTO_INCREMENT,
  `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `value` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `user_id` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uniq_index` (`key`,`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

SET FOREIGN_KEY_CHECKS = 1;


评论