乐于分享
好东西不私藏

一个基于SaaS(软件即服务)模式的多租户会计与账单管理系统,面向中小企业提供在线会计、发票管理、账单处理、支付管理等财务服务

一个基于SaaS(软件即服务)模式的多租户会计与账单管理系统,面向中小企业提供在线会计、发票管理、账单处理、支付管理等财务服务

AccountGo SaaS 项目深度分析报告

1. 项目概述

项目名称: AccountGo SaaS - 会计与账单管理工具

项目用途: AccountGo 是一个基于SaaS(软件即服务)模式的多租户会计与账单管理系统,面向中小企业提供在线会计、发票管理、账单处理、支付管理等财务服务。系统支持超级管理员管理多个租户(公司),每个租户拥有独立的客户、供应商、发票、账单等数据。

技术栈:

  • 后端框架: Laravel 9.x (PHP 8.0.2+)

  • 认证系统: Laravel Fortify + Laravel Jetstream

  • 权限管理: Spatie Laravel Permission (角色/权限)

  • API认证: Laravel Sanctum

  • 数据库: MySQL (默认字符串长度191)

  • 前端: Blade模板引擎 + Tailwind CSS

  • 支付集成: Stripe, PayPal, Paystack, Flutterwave, Razorpay, Paytm, Mercado Pago, Mollie, Skrill, CoinGate, PaymentWall

  • 数据导入导出: Maatwebsite Excel (Laravel Excel)

  • 短信通知: Twilio

  • 云存储: AWS S3, Wasabi

  • 验证码: noCaptcha (Google reCAPTCHA)

  • 条形码: milon/barcode

  • 安装器: rachidlaasri/laravel-installer


2. 功能模块

2.1 仪表盘模块 (Dashboard)

  • 超级管理员仪表盘: 显示总用户数、付费用户数、总订单数、订单金额、计划统计、最热销计划、订单图表

  • 公司仪表盘: 显示最新收入/支出、收入/支出分类图表、收支柱状图/折线图、税率统计、分类统计、银行账户余额、发票/账单统计

2.2 发票管理模块 (Invoice)

  • 发票创建、编辑、删除、查看
  • 发票状态管理: Draft(草稿) → Sent(已发送) → Unpaid(未付) → Partially Paid(部分支付) → Paid(已付)
  • 发票产品/服务项管理
  • 发票支付记录与跟踪
  • 发票复制、发送邮件、付款提醒
  • 发票PDF生成与下载
  • 发票模板设置(10种模板: New York, Toronto, Rio, London, Istanbul, Mumbai, Hong Kong, Tokyo, Sydney, Paris)
  • 发票颜色自定义、导出(Excel)、运费显示设置、折扣应用

2.3 账单管理模块 (Bill)

  • 账单创建、编辑、删除、查看
  • 账单状态管理: Draft → Sent → Unpaid → Partially Paid → Paid
  • 账单产品项管理、支付记录、复制、发送邮件
  • 账单PDF生成与下载、模板设置、导出(Excel)

2.4 报价单管理模块 (Proposal)

  • 报价单创建、编辑、删除、状态变更
  • 报价单转换为发票、复制、发送邮件
  • 报价单PDF生成、模板设置、在线支付

2.5 预付金管理模块 (Retainer)

  • 预付金创建、编辑、删除、状态管理
  • 预付金转换为发票、支付记录
  • 预付金PDF生成、模板设置、在线支付

2.6 客户管理模块 (Customer)

  • 客户CRUD操作、账单信息(billing)与配送信息(shipping)
  • 客户对账单查看、密码重置、独立登录门户
  • 客户仪表盘(发票图表、进度统计)、导出/导入(Excel)、余额管理

2.7 供应商管理模块 (Vender)

  • 供应商CRUD操作、账单信息与配送信息
  • 供应商对账单查看、独立登录门户、仪表盘
  • 供应商导出/导入(Excel)、余额管理

2.8 收入管理模块 (Revenue)

  • 收入记录创建、编辑、删除
  • 收入按日期/分类/客户筛选、导出(Excel)

2.9 支出管理模块 (Payment/Expense)

  • 支出记录创建、编辑、删除
  • 支出按日期/分类/供应商筛选、导出(Excel)

2.10 银行账户管理 (Bank Account)

  • 银行账户CRUD、账户余额管理

2.11 转账管理 (Transfer)

  • 银行账户间转账、转账记录查看

2.12 交易记录 (Transaction)

  • 所有交易流水查看、交易导出(Excel)

2.13 产品/服务管理 (Product Service)

  • 产品/服务CRUD、分类管理、单位管理
  • 产品库存管理(Product Stock)、导出/导入(Excel)

2.14 税务管理 (Tax)

  • 税率CRUD、多税率支持

2.15 信用票据 (Credit Note)

  • 发票信用票据创建、编辑、删除
  • 自定义信用票据、金额抵扣发票

2.16 借记票据 (Debit Note)

  • 账单借记票据创建、编辑、删除
  • 自定义借记票据、金额抵扣账单

2.17 会计科目表 (Chart of Account)

  • 会计科目CRUD、科目类型管理(资产、负债、权益、收入、支出)
  • 科目子类型管理、科目余额计算(借方/贷方/净额)

2.18 日记账分录 (Journal Entry)

  • 日记账分录创建、编辑、删除
  • 借方/贷方分录、分录账户管理、日记账编号格式化

2.19 合同管理 (Contract)

  • 合同CRUD、合同类型管理
  • 合同描述、附件、评论、笔记
  • 合同PDF生成与下载、电子签名(客户/公司)
  • 合同状态编辑、邮件发送、复制

2.20 预算规划 (Budget)

  • 预算CRUD、预算与实际对比

2.21 目标管理 (Goal)

  • 财务目标CRUD、目标进度跟踪

2.22 资产管理 (Asset)

  • 资产CRUD、资产跟踪

2.23 优惠券管理 (Coupon)

  • 优惠券CRUD、应用于计划购买、使用次数限制

2.24 报表模块 (Report)

  • 收入汇总报表、支出汇总报表、收支对比报表
  • 税务汇总报表、利润与损失报表
  • 发票汇总报表、账单汇总报表
  • 产品库存报表、发票报表
  • 账户对账单报表、资产负债表
  • 分类账、试算平衡表
  • 报表导出(Excel/PDF)

2.25 订阅计划管理 (Plan) - SaaS订阅

  • 计划CRUD(名称、价格、周期、最大用户数、最大客户数、最大供应商数)
  • 计划周期: Unlimited(无限期)、Monthly(月付)、Yearly(年付)
  • 计划购买与支付、计划请求模块(Plan Request)

2.26 订单管理 (Order)

  • 订单查看、订单统计(总订单数、总金额)

2.27 用户管理 (User)

  • 用户CRUD、用户类型: super admin(超级管理员)、company(公司/租户)、普通用户
  • 用户密码重置、语言切换、计划升级

2.28 角色权限管理 (Role & Permission)

  • 角色CRUD (Spatie Permission)、权限CRUD、基于角色的访问控制

2.29 系统设置 (Settings)

  • 公司设置(名称、地址、联系方式)
  • 邮件设置(SMTP配置)、支付设置(各支付网关配置)
  • 系统设置(货币、日期格式、时间格式)
  • Twilio短信设置、存储设置(本地/S3/Wasabi)
  • reCAPTCHA设置、GDPR Cookie设置、登录页设置

2.30 邮件模板 (Email Template)

  • 邮件模板CRUD、多语言邮件模板、模板启用/禁用

2.31 语言管理

  • 多语言支持、语言文件管理、语言创建/删除

2.32 自定义字段 (Custom Field)

  • 自定义字段CRUD、支持多种字段类型(text/textarea/select等)
  • 自定义字段值管理、按模块关联(customer/invoice/bill等)

2.33 着陆页管理 (Landing Page)

  • 着陆页区域管理(10个区域)
  • 区域内容编辑、排序

3. 项目结构

main_file/
├── app/                          # 应用核心代码
│   ├── Actions/                   # Fortify/Jetstream动作类
│   │   ├── Fortify/               # Fortify认证动作
│   │   └── Jetstream/             # Jetstream用户管理动作
│   ├── Console/                   # Artisan命令
│   ├── Exceptions/                # 异常处理
│   ├── Exports/                   # Excel导出类(发票/账单/客户等)
│   ├── Http/                      # HTTP层
│   │   ├── Controllers/           # 控制器(50+个)
│   │   │   ├── Auth/              # 认证控制器(注册/登录/验证)
│   │   │   │   └── Auth-----------/ # 旧版认证控制器(备份)
│   │   │   ├── Middleware/         # 中间件(XSS/认证/CSRF等)
│   │   │   └── Requests/          # 表单验证请求类
│   │   └── Kernel.php             # HTTP内核(中间件注册)
│   ├── Imports/                   # Excel导入类(客户/供应商/产品)
│   ├── Mail/                      # 邮件类
│   ├── Models/                    # Eloquent模型(40+个)
│   ├── Providers/                 # 服务提供者
│   │   ├── AppServiceProvider.php # 应用服务提供者
│   │   ├── AuthServiceProvider.php# 认证服务提供者
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   └── RouteServiceProvider.php# 路由服务提供者
│   └── View/                      # 视图组件
├── bootstrap/                     # 启动文件
├── config/                        # 配置文件
│   ├── app.php                    # 应用配置
│   ├── auth.php                   # 认证配置(多guard: web/customer/vender)
│   ├── database.php               # 数据库配置
│   ├── fortify.php                # Fortify配置
│   ├── jetstream.php              # Jetstream配置
│   ├── permission.php             # Spatie权限配置
│   └── ...                        # 其他配置
├── database/                      # 数据库
│   ├── migrations/                # 迁移文件(77个)
│   └── seeders/                   # 数据填充
├── lang/                          # Laravel 9语言文件(en)
├── public/                        # 公共资源
│   ├── assets/                    # 前端资源(CSS/JS/图片)
│   │   ├── css/                   # 样式文件
│   │   ├── images/                # 图片资源
│   │   └── js/                    # JavaScript文件
│   └── index.php                  # 入口文件
├── resources/                     # 前端资源
│   ├── lang/                      # 语言文件(多语言)
│   │   ├── en/                    # 英语(PHP文件)
│   │   ├── en.json                # 英语翻译(JSON)
│   │   └── ...                    # 其他语言
│   └── views/                     # Blade视图
│       ├── auth/                  # 认证视图(登录/注册)
│       ├── contract/              # 合同视图
│       ├── customer/              # 客户视图
│       ├── invoice/               # 发票视图
│       ├── bill/                  # 账单视图
│       ├── proposal/              # 报价单视图
│       ├── retainer/              # 预付金视图
│       ├── report/                # 报表视图
│       ├── settings/              # 设置视图
│       ├── layouts/               # 布局视图
│       └── ...                    # 其他视图
├── routes/                        # 路由
│   ├── web.php                    # Web路由(1008行)
│   └── auth.php                   # 认证路由
├── storage/                       # 存储目录
├── stubs/                         # 模型存根
├── tests/                         # 测试
├── vendor/                        # Composer依赖
├── composer.json                  # Composer配置
└── package.json                   # NPM配置

4. 核心业务逻辑

4.1 发票业务流程

  1. 创建报价单(Proposal) → 客户确认 → 转换为发票(Invoice)

  2. 直接创建发票 → 添加产品/服务项 → 计算税额和折扣

  3. 发票状态流转: Draft(0) → Sent(1) → Unpaid(2) → Partially Paid(3) → Paid(4)

  4. 发票支付: 手动记录付款 / 在线支付(Stripe/PayPal等)

  5. 信用票据: 发票金额调整,创建Credit Note抵扣

  6. 发票PDF: 根据模板和颜色生成PDF,支持邮件发送

4.2 账单业务流程

  1. 创建账单(Bill) → 添加产品项 → 关联供应商

  2. 账单状态流转: Draft(0) → Sent(1) → Unpaid(2) → Partially Paid(3) → Paid(4)

  3. 账单支付: 手动记录付款到银行账户

  4. 借记票据: 账单金额调整,创建Debit Note抵扣

4.3 会计核算流程

  1. 会计科目设置: 创建科目类型(资产/负债/权益/收入/支出) → 子类型 → 具体科目

  2. 日记账分录: 每笔业务创建借贷分录 → 关联会计科目

  3. 自动分录: 发票/账单/收入/支出/支付等操作自动生成交易记录

  4. 报表生成:

    • 试算平衡表: 汇总各科目借贷余额
    • 资产负债表: 资产=负债+所有者权益
    • 利润与损失表: 收入-费用=利润
    • 分类账: 按科目查看明细

4.4 SaaS订阅流程

  1. 管理员创建计划(Plan): 设置价格、周期、用户限制

  2. 用户选择计划 → 使用优惠券(可选) → 选择支付方式

  3. 支付成功 → 订单创建(Order) → 用户计划激活

  4. 计划到期 → 降级或续费 → 计划请求(Plan Request)

4.5 多租户数据隔离

  • 所有业务表通过 created_by 字段关联到创建者(用户/公司)

  • 查询时自动过滤 created_by = 当前用户ID 或 created_by = 公司管理员ID

  • 超级管理员可查看所有数据,公司用户只能查看自己创建的数据

5. 核心代码

5.1 关键模型

模型
文件
说明
User
app/Models/User.php (2166行)
核心用户模型,包含多租户逻辑、设置管理、工具方法
Invoice
app/Models/Invoice.php (160行)
发票模型,关联客户、产品、支付
Bill
app/Models/Bill.php (172行)
账单模型,关联供应商、产品、支付
Customer
app/Models/Customer.php (296行)
客户模型,独立认证guard
Proposal
app/Models/Proposal.php (164行)
报价单模型,可转换为发票
Retainer
app/Models/Retainer.php (178行)
预付金模型,可转换为发票
Contract
app/Models/Contract.php (86行)
合同模型,含签名、附件、评论
ChartOfAccount
app/Models/ChartOfAccount.php (45行)
会计科目模型
JournalEntry
app/Models/JournalEntry.php (47行)
日记账分录模型
Transaction
app/Models/Transaction.php (83行)
交易记录模型
Payment
app/Models/Payment.php (90行)
付款模型
Revenue
app/Models/Revenue.php (87行)
收入模型
ProductService
app/Models/ProductService.php (109行)
产品/服务模型
Plan
app/Models/Plan.php (48行)
订阅计划模型

5.2 关键控制器

控制器
行数
说明
ReportController
1661行
报表核心逻辑(13种报表)
InvoiceController
1423行
发票完整CRUD+支付+PDF
BillController
1219行
账单完整CRUD+支付+PDF
RetainerController
1282行
预付金完整CRUD+支付+PDF
SystemController
1153行
系统设置(公司/邮件/支付/存储)
ProposalController
926行
报价单CRUD+转换+支付
CustomerController
743行
客户CRUD+仪表盘+导入导出
VenderController
593行
供应商CRUD+仪表盘+导入导出
UserController
532行
用户管理+计划升级
AuthenticatedSessionController
519行
多角色登录(Admin/Customer/Vender)
PaypalController
697行
PayPal支付集成
StripePaymentController
592行
Stripe支付集成

5.3 关键中间件

中间件
说明
XSS
过滤所有输入中的XSS攻击,清理script标签
revalidate
设置HTTP头禁止缓存,防止后退查看敏感页面
Authenticate
认证检查
VerifyCsrfToken
CSRF保护
RedirectIfAuthenticated
已认证用户重定向

5.4 认证Guard配置

系统配置了3个独立的认证Guard:

  • web: 管理员和公司用户登录

  • customer: 客户独立登录门户

  • vender: 供应商独立登录门户


6. 数据库设计

6.1 核心表及关系

users (用户/租户)
  ├── created_by → 多租户隔离
  ├── plan → plans (订阅计划)
  └── type: super admin / company

customers (客户)          venders (供应商)
  ├── created_by              ├── created_by
  ├── balance                 ├── balance         ├── balance
  └── guard: customer         └── guard: vender

invoices (发票)            bills (账单)
  ├── customer_id            ├── vender_id
  ├── status: 0-4            ├── status: 0-4
  └── created_by             └── created_by

invoice_products           bill_products
  ├── invoice_id             ├── bill_id
  └── product_id             └── product_id

invoice_payments           bill_payments
  ├── invoice_id             ├── bill_id
  ├── account_id             ├── account_id
  └── payment_method         └── payment_method

proposals (报价单)         retainers (预付金)
  ├── customer_id            ├── customer_id
  ├── converted_invoice_id   ├── converted_invoice_id
  └── is_convert             └── is_convert

contracts (合同)
  ├── customer
  ├── type → contract_types
  ├── contract_attachments
  ├── contract_comments
  └── contract_notes

chart_of_accounts (会计科目)
  ├── type → chart_of_account_types
  └── sub_type → chart_of_account_sub_types

journal_entries (日记账)
  └── journal_items
       ├── account → chart_of_accounts
       ├── debit (借方)
       └── credit (贷方)

transactions (交易记录)
  ├── user_id + user_type (多态)
  ├── account → bank_accounts
  └── type: Credit/Debit

bank_accounts (银行账户)
  └── opening_balance

product_services (产品/服务)
  ├── category_id → product_service_categories
  ├── unit_id → product_service_units
  └── tax_id → taxes

settings (系统设置)
  ├── name + created_by (联合唯一)
  └── value (text类型)

plans (订阅计划)
  ├── duration: Monthly/Yearly/Unlimited
  └── max_users, max_customers, max_venders

6.2 数据库总表数: 67张

  • 核心业务表: 40+
  • 权限相关表: 5 (roles, permissions, model_has_roles, model_has_permissions, role_has_permissions)
  • 设置表: 3 (settings, admin_payment_settings, company_payment_settings)
  • 系统表: 3 (migrations, password_resets, failed_jobs)

7. 支付网关集成

系统集成了11种支付网关,每种都支持3种场景: 计划购买、发票支付、预付金支付。

支付网关
控制器
说明
Stripe
StripePaymentController (592行)
信用卡支付,最常用
PayPal
PaypalController (697行)
全球支付
Paystack
PaystackPaymentController (478行)
非洲市场
Flutterwave
FlutterwavePaymentController (478行)
非洲市场
Razorpay
RazorpayPaymentController (430行)
印度市场
Paytm
PaytmPaymentController (503行)
印度市场
Mercado Pago
MercadoPaymentController (682行)
拉美市场
Mollie
MolliePaymentController (520行)
欧洲市场
Skrill
SkrillPaymentController (637行)
全球支付
CoinGate
CoingatePaymentController (492行)
加密货币支付
PaymentWall
PaymentWallPaymentController (506行)
全球支付

每种支付网关的流程:

  1. 用户点击支付按钮 → 创建支付请求
  2. 跳转到支付网关页面 → 用户完成支付
  3. 支付网关回调 → 更新支付状态 → 创建交易记录

8. 多租户SaaS架构

8.1 架构模式

采用共享数据库、共享Schema的多租户模式,通过 created_by 字段实现数据隔离。

8.2 租户层级

超级管理员 (type=super admin, created_by=0)
  └── 公司/租户 (type=company, created_by=超级管理员ID)
       └── 普通用户 (type=company, created_by=公司管理员ID)

8.3 数据隔离实现

  1. created_by字段: 所有业务表都有 created_by 字段,记录创建者ID

  2. 查询过滤: 控制器中通过 created_by 过滤数据

  3. User模型的currentUserId(): 获取当前用户ID用于数据过滤

  4. Settings表: 通过 name + created_by 联合唯一键实现每租户独立设置

8.4 租户功能限制

  • Plan模型: 定义最大用户数(max_users)、最大客户数(max_customers)、最大供应商数(max_venders)

  • 计划到期: plan_expire_date字段控制计划有效期

  • 功能限制: 根据计划等级限制可用功能

8.5 三大门户

  1. 管理门户 (/): 管理员和公司用户登录,管理所有业务

  2. 客户门户 (/customer/): 客户独立登录,查看发票、合同、付款

  3. 供应商门户 (/vender/): 供应商独立登录,查看账单、付款

8.6 认证隔离

  • 3个独立Guard: web, customer, vender
  • 各门户独立登录/注册/密码重置
  • Session隔离,互不干扰