好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 lilanyu 于 2026-9-18 16:07 编辑
分享一套 AI 辅助开发的车辆管理系统源码。 很早之前就想找一套合适的车辆管理系统,翻了一圈发现相关开源项目很少,比较冷门。我本人没有编程基础,没法自己手写开发。 前后花了两个月的Moderato 额度,全程靠 AI 生成、调试代码,反复修改打磨,最终做出这套基本能满足我实际使用需求的车辆管理系统。 今天把源码公开分享出来,大家可以直接拿去测试、使用。 受限于我没有编程功底,代码结构、逻辑肯定有不少缺陷,欢迎各位大佬审阅,有任何问题、BUG、优化思路都可以留言,恳请大家多多指点!
车辆管理系统.zip
(180.82 KB, 下载次数: 13)
1.多户底层
该程序适配一个公司多家分公司单独核算,企业之间数据完全隔离。系统内置超级管理员后台,可以新增、停用企业租户;给每个企业设置套餐配额,限制车辆最大数量、设置账号到期时间。到期后企业账号自动锁定,无法新增车辆和录入业务数据。
2.车辆档案管理
支持燃油车、新能源车档案录入;记录车架号、车牌号、车辆类型、购置信息。支持为每台车生成独立二维码,打印后贴在车上,司机扫码直接进入移动端 H5 页面;支持二维码重置。实时展示车辆在用 / 维修 / 闲置 / 报废状态。
3.保险台账管理
交强险、商业险分开记录,保存保单号、承保公司、起止日期。系统自动识别临期保单,页面标红预警;配合定时任务,到期前自动发送邮件提醒负责人续保。
4.年检管理
录入年检有效期,自动计算下次年检时间,同样支持临期标红 + 邮件提醒,避免漏检产生罚款。
5.保养记录模块
保养台账支持两种预警规则:按到期日期 或者 按里程阈值**双维度提醒。记录保养项目、费用、服务商信息,留存保养单据照片。
6.司机移动端 H5(扫码使用,无需安装 APP)
司机扫车辆二维码进入 H5 页面,系统自动区分燃油车 / 新能源车,菜单自动分流:
①燃油车:加油记录上报,上传加油票据照片,填写加油量、金额、里程
②新能源车:充电记录上报,区分满电充电、零散补电、外部快充,录入充电度数、费用
所有上报记录实时同步到企业后台,管理员在线审核。
7.数据可视化
前端本地化引入 Chart.js,后台统计车辆数量、能耗、维保费用、保险支出,生成统计图表,直观查看车队运营成本。
[SQL] 纯文本查看 复制代码 -- ============================================================
-- 车辆管理系统(SaaS 多租户版)数据库初始化脚本
-- 适用:MySQL 5.7+ / MariaDB 10.x
-- 使用:在 phpMyAdmin 中新建数据库 vehicle_mgr(utf8mb4),然后导入本文件
-- 说明:多租户采用「共享库 + tenant_id 隔离」,
-- 超级管理员(role=super, tenant_id=0)在后台开通企业,
-- 每个企业的数据通过 tenant_id 完全隔离。
-- ============================================================
CREATE DATABASE IF NOT EXISTS `vehicle_mgr` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `vehicle_mgr`;
SET NAMES utf8mb4;
-- ---------- 租户(企业)表 ----------
CREATE TABLE IF NOT EXISTS `tenants` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL COMMENT '企业名称',
`contact_name` VARCHAR(50) DEFAULT '' COMMENT '联系人',
`contact_phone` VARCHAR(30) DEFAULT '' COMMENT '联系电话',
`plan_name` VARCHAR(30) NOT NULL DEFAULT '试用版' COMMENT '套餐名称',
`max_vehicles` INT NOT NULL DEFAULT 5 COMMENT '车辆数上限(0=不限)',
`expires_at` DATE DEFAULT NULL COMMENT '到期日(NULL=长期有效)',
`status` ENUM('正常','停用') NOT NULL DEFAULT '正常',
`remark` VARCHAR(255) DEFAULT '' COMMENT '备注',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户(企业)';
-- 默认租户:id=1,新装系统的第一个企业
INSERT IGNORE INTO `tenants` (`id`,`name`,`plan_name`,`max_vehicles`,`expires_at`,`status`) VALUES
(1,'我的企业','正式版',0,NULL,'正常');
-- ---------- 用户表 ----------
CREATE TABLE IF NOT EXISTS `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户(0=平台超级管理员)',
`username` VARCHAR(50) NOT NULL COMMENT '登录名(全平台唯一)',
`password` VARCHAR(255) NOT NULL COMMENT '密码哈希',
`name` VARCHAR(50) NOT NULL COMMENT '姓名',
`role` ENUM('super','admin','boss','finance') NOT NULL DEFAULT 'finance' COMMENT '角色:超管/管理员/老板/财务',
`email` VARCHAR(100) DEFAULT '' COMMENT '邮箱(接收提醒)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_tenant` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户';
-- 平台超级管理员:superadmin / super123(登录后请立即修改)
-- 默认企业管理员:admin / admin123(登录后请立即修改)
-- 使用 INSERT IGNORE:重复导入本脚本时不会因账号已存在而中断
INSERT IGNORE INTO `users` (`tenant_id`,`username`,`password`,`name`,`role`,`email`) VALUES
(0,'superadmin','$2y$10$tLyXaL7pyJywvRHLyX1Z3.WP7tTr0Hom/0DYb4Zz6rzLn1G0y8SBu','平台超管','super',''),
(1,'admin','$2y$10$PMswHtGZybwEASfmj27wvOpEvmOAPeXEICgoPlRAT0Nc1ytzOi66K','系统管理员','admin','');
-- ---------- 车辆表 ----------
CREATE TABLE IF NOT EXISTS `vehicles` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`plate_no` VARCHAR(20) NOT NULL COMMENT '车牌号',
`brand` VARCHAR(50) DEFAULT '' COMMENT '品牌',
`model` VARCHAR(50) DEFAULT '' COMMENT '型号',
`color` VARCHAR(20) DEFAULT '' COMMENT '颜色',
`vin` VARCHAR(30) DEFAULT '' COMMENT '车架号',
`engine_no` VARCHAR(30) DEFAULT '' COMMENT '发动机号',
`fuel_type` VARCHAR(20) DEFAULT '汽油' COMMENT '燃油类型',
`energy_consumption` DECIMAL(6,2) DEFAULT NULL COMMENT '百公里电耗(kWh/100km,新能源车型)',
`register_date` DATE DEFAULT NULL COMMENT '注册登记日期',
`purchase_date` DATE DEFAULT NULL COMMENT '购置日期',
`current_mileage` INT NOT NULL DEFAULT 0 COMMENT '当前里程(km)',
`status` ENUM('在用','停用','维修中') NOT NULL DEFAULT '在用',
`upload_token` CHAR(32) NOT NULL COMMENT '司机扫码上传令牌',
`remark` VARCHAR(255) DEFAULT '',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_plate` (`tenant_id`,`plate_no`),
UNIQUE KEY `uk_token` (`upload_token`),
KEY `idx_tenant` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车辆档案';
-- ---------- 保险记录 ----------
CREATE TABLE IF NOT EXISTS `insurance_records` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`vehicle_id` INT UNSIGNED NOT NULL,
`ins_type` ENUM('交强险','商业险','承运人责任险','其他') NOT NULL DEFAULT '交强险',
`company` VARCHAR(100) DEFAULT '' COMMENT '保险公司',
`policy_no` VARCHAR(60) DEFAULT '' COMMENT '保单号',
`start_date` DATE NOT NULL COMMENT '保险起期',
`end_date` DATE NOT NULL COMMENT '保险止期',
`amount` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '保费(元)',
`remark` VARCHAR(255) DEFAULT '',
`created_by` INT UNSIGNED DEFAULT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_vehicle` (`vehicle_id`),
KEY `idx_end_date` (`end_date`),
CONSTRAINT `fk_ins_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保险记录';
-- ---------- 检车(年检)记录 ----------
CREATE TABLE IF NOT EXISTS `inspection_records` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`vehicle_id` INT UNSIGNED NOT NULL,
`inspect_date` DATE NOT NULL COMMENT '检车日期',
`next_due_date` DATE NOT NULL COMMENT '下次检车到期日',
`result` ENUM('合格','不合格') NOT NULL DEFAULT '合格',
`station` VARCHAR(100) DEFAULT '' COMMENT '检测站',
`amount` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '费用(元)',
`remark` VARCHAR(255) DEFAULT '',
`created_by` INT UNSIGNED DEFAULT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_vehicle` (`vehicle_id`),
KEY `idx_due` (`next_due_date`),
CONSTRAINT `fk_insp_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='检车记录';
-- ---------- 保养记录 ----------
CREATE TABLE IF NOT EXISTS `maintenance_records` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`vehicle_id` INT UNSIGNED NOT NULL,
`mt_date` DATE NOT NULL COMMENT '保养日期',
`mileage` INT NOT NULL DEFAULT 0 COMMENT '保养时里程(km)',
`items` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '保养项目',
`cost` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '费用(元)',
`vendor` VARCHAR(100) DEFAULT '' COMMENT '保养单位',
`next_date` DATE DEFAULT NULL COMMENT '下次保养日期',
`next_mileage` INT DEFAULT NULL COMMENT '下次保养里程(km)',
`remark` VARCHAR(255) DEFAULT '',
`created_by` INT UNSIGNED DEFAULT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_vehicle` (`vehicle_id`),
KEY `idx_next_date` (`next_date`),
CONSTRAINT `fk_mt_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保养记录';
-- ---------- 加油记录 ----------
CREATE TABLE IF NOT EXISTS `fuel_records` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`vehicle_id` INT UNSIGNED NOT NULL,
`fuel_date` DATETIME NOT NULL COMMENT '加油时间',
`mileage` INT NOT NULL DEFAULT 0 COMMENT '加油时仪表里程(km)',
`amount` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '加油金额(元)',
`price` DECIMAL(6,2) DEFAULT NULL COMMENT '单价(元/升)',
`liters` DECIMAL(8,2) DEFAULT NULL COMMENT '加油量(升)',
`station` VARCHAR(100) DEFAULT '' COMMENT '加油站',
`receipt_photo` VARCHAR(255) DEFAULT '' COMMENT '金额小票照片',
`mileage_photo` VARCHAR(255) DEFAULT '' COMMENT '仪表里程照片',
`source` ENUM('admin','driver') NOT NULL DEFAULT 'admin' COMMENT '录入来源',
`driver_name` VARCHAR(50) DEFAULT '' COMMENT '司机姓名',
`remark` VARCHAR(255) DEFAULT '',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_vehicle` (`vehicle_id`),
KEY `idx_date` (`fuel_date`),
CONSTRAINT `fk_fuel_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='加油记录';
-- ---------- 充电记录(新能源) ----------
CREATE TABLE IF NOT EXISTS `charge_records` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`vehicle_id` INT UNSIGNED NOT NULL,
`charge_time` DATETIME NOT NULL COMMENT '充电时间',
`charge_type` ENUM('满电','零散补电','外部快充') NOT NULL COMMENT '充电类型',
`mileage` INT NOT NULL DEFAULT 0 COMMENT '充电时仪表里程(km)',
`kwh` DECIMAL(8,2) DEFAULT NULL COMMENT '真实度数(外部快充,按电表)',
`price` DECIMAL(6,2) DEFAULT NULL COMMENT '单价(元/度)',
`amount` DECIMAL(10,2) DEFAULT NULL COMMENT '金额(元,外部快充)',
`station` VARCHAR(100) DEFAULT '' COMMENT '充电站/充电点',
`receipt_photo` VARCHAR(255) DEFAULT '' COMMENT '凭证照片',
`mileage_photo` VARCHAR(255) DEFAULT '' COMMENT '仪表里程照片',
`source` ENUM('admin','driver') NOT NULL DEFAULT 'admin' COMMENT '录入来源',
`driver_name` VARCHAR(50) DEFAULT '' COMMENT '司机姓名',
`remark` VARCHAR(255) DEFAULT '',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_vehicle` (`vehicle_id`),
KEY `idx_time` (`charge_time`),
KEY `idx_type` (`charge_type`),
CONSTRAINT `fk_charge_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='充电记录';
-- ---------- 满电周期核算(方案1:整车累计里程分段核算) ----------
CREATE TABLE IF NOT EXISTS `charge_cycles` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`vehicle_id` INT UNSIGNED NOT NULL,
`start_record_id` INT UNSIGNED NOT NULL COMMENT '周期起点满电记录',
`end_record_id` INT UNSIGNED NOT NULL COMMENT '周期终点满电记录',
`start_mileage` INT NOT NULL COMMENT '满电里程M1',
`end_mileage` INT NOT NULL COMMENT '满电里程M2',
`distance` INT NOT NULL COMMENT '周期行驶里程 M2-M1',
`est_kwh` DECIMAL(10,2) DEFAULT NULL COMMENT '周期估算总电量(度)',
`ext_kwh` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '周期内外部快充真实度数',
`slow_kwh` DECIMAL(10,2) DEFAULT NULL COMMENT '厂区慢充估算度数=est-ext',
`slow_price` DECIMAL(6,2) DEFAULT NULL COMMENT '核算时慢充电价(元/度)',
`slow_cost` DECIMAL(10,2) DEFAULT NULL COMMENT '厂区慢充电费(元)',
`start_time` DATETIME NOT NULL,
`end_time` DATETIME NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_end_record` (`end_record_id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_vehicle` (`vehicle_id`),
CONSTRAINT `fk_cycle_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='满电周期核算';
-- ---------- 维修记录 ----------
CREATE TABLE IF NOT EXISTS `repair_records` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`vehicle_id` INT UNSIGNED NOT NULL,
`report_date` DATE NOT NULL COMMENT '报修日期',
`repair_date` DATE DEFAULT NULL COMMENT '维修完成日期',
`mileage` INT DEFAULT NULL COMMENT '维修时里程(km)',
`title` VARCHAR(120) NOT NULL DEFAULT '' COMMENT '维修项目',
`description` TEXT COMMENT '故障描述',
`cost` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '维修费用(元)',
`vendor` VARCHAR(100) DEFAULT '' COMMENT '维修厂',
`status` ENUM('待处理','维修中','已完成') NOT NULL DEFAULT '待处理',
`remark` VARCHAR(255) DEFAULT '',
`created_by` INT UNSIGNED DEFAULT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_vehicle` (`vehicle_id`),
KEY `idx_status` (`status`),
CONSTRAINT `fk_repair_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维修记录';
-- ---------- 系统设置(按租户隔离) ----------
CREATE TABLE IF NOT EXISTS `settings` (
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`skey` VARCHAR(50) NOT NULL,
`svalue` TEXT,
PRIMARY KEY (`tenant_id`,`skey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统设置';
INSERT IGNORE INTO `settings` (`tenant_id`,`skey`,`svalue`) VALUES
(1,'remind_days_insurance','30'),
(1,'remind_days_inspection','30'),
(1,'remind_days_maintenance','15'),
(1,'remind_km_maintenance','500'),
(1,'slow_charge_price','0.80'),
(1,'notify_emails',''),
(1,'site_name','车辆管理系统');
-- ---------- 提醒发送日志(防重复发送) ----------
CREATE TABLE IF NOT EXISTS `reminder_log` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`rtype` VARCHAR(20) NOT NULL COMMENT 'insurance/inspection/maintenance/tenant_expire',
`ref_id` INT UNSIGNED NOT NULL COMMENT '记录ID',
`due_key` VARCHAR(20) NOT NULL COMMENT '到期日标识',
`sent_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_once` (`tenant_id`,`rtype`,`ref_id`,`due_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提醒发送日志';
-- 操作日志(司机上传 / 后台补录 / AI 识别等;老库升级无需执行,程序会自动建表)
CREATE TABLE IF NOT EXISTS `op_logs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '所属租户',
`ltype` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '日志类型',
`actor` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '操作人',
`action` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '操作',
`detail` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '详情',
`ip` VARCHAR(45) NOT NULL DEFAULT '',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`,`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志';
链接: https://pan.baidu.com/s/1dJSYh_bIBjUSA_JO4JuLTQ?pwd=1rwd 提取码: 1rwd
|
|