一、项目背景与痛点
企事业单位、集团公司、园区办公场景中,电脑、打印机、办公桌椅、仪器设备、安防器材等固定资产数量庞大,是企业重要的有形资产。目前多数中小企业仍采用纸质台账、Excel表格管理固定资产,随着资产数量增加、人员流动、设备频繁调动,传统管理模式暴露出大量问题,核心痛点如下:
- 资产档案零散,信息追溯困难:纸质台账易破损、丢失,Excel多文件分散存储,无法快速查询资产型号、采购时间、存放位置、使用人等基础信息;
- 领用归还流程混乱:员工借用资产仅做口头登记,无标准化流程,资产去向不明,离职时难以追回设备;
- 资产折旧无法量化:办公设备、仪器存在使用损耗,传统方式无法自动计算资产折旧、剩余价值,财务核算缺少精准数据;
- 日常巡检缺失:设备故障、老化无法及时发现,故障资产继续使用易引发安全隐患,也无统一巡检记录;
- 报废流程不规范:资产达到使用年限或彻底损坏后,无线上审批流程,随意报废造成资产流失;
- 人工盘点效率极低:定期盘点依靠人工逐一核对,耗时久、误差大,盘点结果无法自动生成台账报表;
- 权限划分模糊:普通员工可随意修改资产数据,核心资产信息存在被误改、篡改风险。
针对传统固定资产管理的各类弊端,本次基于Python+Django4.2+MySQL+资产折旧算法+二维码生成搭建轻量化企业固定资产管理系统,实现资产分类建档、人员领用、归还登记、日常巡检、自动折旧、报废审批、定期盘点、台账导出、数据统计全套闭环能力。本项目开辟企业行政资产管控全新赛道,和日志、天气、智能在线考试、智能图书、网盘、考勤、会议室、问卷、招聘、二手、美食、进销存、租赁等往期所有项目业务、功能、代码完全无重复。
二、核心目标与定位
本项目核心目标:搭建固定资产全生命周期数字化管理平台,实现资产分类建档→信息录入→人员领用/归还→日常巡检维护→自动计提折旧→线上报废审批→定期盘点核对→台账报表导出→资产数据分析完整闭环,彻底替代纸质台账与Excel,实现企业固定资产可查、可管、可追溯、可核算。
项目精准定位:面向政企单位、中小企业、园区的行政类管理系统,采用Django原生MVT架构,部署简单、服务器资源占用低;划分超级管理员、资产管理员、普通员工三类权限角色,数据与操作权限严格隔离;适配行政部、财务部、技术部联合使用场景,主打流程标准化、数据精准化、全链路可追溯、报表自动化。
核心设计理念:资产档案标准化、领用流程规范化、折旧计算自动化、报废审批流程化、盘点数据可视化,解决传统资产管理混乱、核算不准、盘点低效的核心问题。
三、整体技术方案
项目基于Django原生MVT分层架构开发,MySQL存储资产、分类、领用、巡检、折旧、报废全量业务数据,后端封装固定资产折旧算法,集成二维码生成能力用于现场盘点,自定义状态枚举管控资产全生命周期,借助ORM聚合查询+ECharts实现数据统计与可视化,自定义中间件完成角色权限拦截。整体分层架构流程图如下:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 资产建档层 │────▶│ 领用归还层 │────▶│ 日常巡检层 │────▶│ 资产折旧层 │
│ 分类管理、资产信息录入、二维码生成 │ 员工申请、管理员审核、归还登记 │ 故障上报、维修记录、状态更新 │ 按年限自动计算折旧与剩余价值 │
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 报废审批层 │────▶│ 定期盘点层 │────▶│ 台账导出层 │
│ 报废申请、多级审批、资产注销 │ 现场盘点、数据核对、差异标记 │ 盘点台账、资产报表Excel导出 │
│ │ │
▼ ▼
┌─────────────┐
│ 数据统计层 │
│ 资产总量、品类占比、折旧汇总图表统计 │
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 底层技术底座 │
│ – 后端框架:Python3.11 + Django4.2 原生MVT架构 │
│ – 数据存储:MySQL 存储资产全生命周期所有业务数据 │
│ – 算法能力:直线折旧法实现固定资产价值计算 │
│ – 工具集成:二维码生成库,生成资产唯一标识用于现场盘点 │
│ – 状态管理:自定义枚举,管控资产在用/闲置/维修/报废全状态 │
│ – 权限体系:多角色中间件,区分管理员与员工操作权限 │
│ – 文件导出:openpyxl实现资产台账、盘点报表Excel导出 │
│ – 数据可视化:ECharts 展示资产品类、折旧、占用占比图表 │
└─────────────────────────────────────────────────────────────────────────
完整技术栈清单:
- Web后端:Python 3.11、Django 4.2 原生MVT轻量化架构
- 数据库:MySQL 8.0,结构化存储资产、人员、流程、报表数据
- 算法模块:直线折旧算法,自动计算资产月折旧额、剩余价值
- 二维码生成:第三方库生成资产专属二维码,适配线下盘点
- 状态管控:自定义枚举类,管理资产全生命周期状态
- 权限控制:自定义中间件,实现三级角色权限隔离
- 报表导出:openpyxl库,生成Excel资产台账与盘点报表
- 数据可视化:ECharts 完成资产分布、折旧数据图表展示
四、核心能力模块详解
1. 资产分类与档案管理模块
搭建标准化资产体系,完成基础信息建档,为全流程管理提供数据支撑:
- 多级分类:按照办公设备、电子数码、家具家电、仪器器材、安防设备划分一级/二级分类;
- 完整档案:记录资产名称、型号、规格、采购价格、采购日期、使用年限、存放地点;
- 唯一标识:每台资产生成独立编号+专属二维码,线下扫码快速查询档案;
- 资产状态:区分闲置、在用、维修、报废四大基础状态。
2. 资产领用与归还模块(核心亮点)
标准化线上流程,解决资产去向不明、借用无记录的问题:
- 领用申请:员工选择资产、填写使用事由、申请借用时长,提交线上申请;
- 多级审核:资产管理员审核申请,通过后方可领取设备;
- 归还登记:使用完毕后线上提交归还记录,管理员核验并更新资产状态;
- 领用台账:每笔借用、归还记录永久留存,人员离职可快速核对资产。
3. 日常巡检与维修模块
建立定期巡检机制,及时发现故障资产,延长设备使用寿命:
- 巡检计划:管理员制定月度/季度巡检任务,分配巡检人员;
- 故障上报:巡检中发现设备故障,在线填报故障类型、故障描述;
- 维修登记:记录维修人员、维修时长、维修费用、修复结果;
- 状态联动:维修完成后自动将资产从“维修”切换为“在用/闲置”状态。
4. 资产折旧计算模块
基于财务直线折旧法,自动核算资产损耗,支撑财务成本核算:
- 折旧规则:根据采购价、规定使用年限,自动计算月折旧金额;
- 动态计算:按月更新资产当前剩余价值,无需人工核算;
- 折旧台账:单独汇总所有资产折旧明细,可按部门、分类筛选;
- 到期提醒:资产达到规定使用年限时,自动高亮提醒。
5. 资产报废审批模块
规范资产报废流程,杜绝随意处置固定资产:
- 报废申请:针对老化、损坏无维修价值的资产,提交报废申请与原因;
- 多级审批:资产管理员+财务人员逐级审核,审批通过方可执行报废;
- 资产注销:审批完成后,资产状态变更为报废,不再参与领用、盘点;
- 报废台账:统一归档所有报废资产记录,便于财务对账。
6. 定期盘点管理模块
替代人工盘点,提升核对效率,自动标记账实差异:
- 盘点任务:管理员发起盘点任务,划定盘点范围与时间;
- 扫码盘点:结合资产二维码,线下扫码快速核对实物与系统数据;
- 差异标记:系统自动比对账面数量与实物数量,标记盘盈、盘亏资产;
- 盘点归档:盘点结果永久保存,形成完整盘点报告。
7. 台账与报表导出模块
满足行政、财务办公归档需求,一键生成标准化报表:
- 资产总台账:导出全单位所有资产明细,包含价格、状态、使用人;
- 领用/报废报表:单独导出借用记录、报废审批单据;
- 折旧报表:导出月度/年度资产折旧汇总表;
- 盘点报告:自动生成盘点差异报告,支持离线打印归档。
8. 数据统计分析模块
多维度可视化分析,为资产采购、运维提供决策依据:
- 总量统计:统计资产总数、在用数、闲置数、维修数、报废数;
- 品类占比:饼图展示各类资产数量、价值占比;
- 部门分布:统计各部门领用资产规模;
- 折旧趋势:按月展示整体资产折旧金额变化。
五、创新价值与亮点
六、应用前景与落地场景
- 中小型企业行政管控:企业办公电脑、家具、设备统一管理,适配行政+财务联合办公;
- 机关/事业单位:单位国有固定资产规范化管理,满足审计、盘点要求;
- 产业园区/写字楼
- :园区公共设备、配套资产集中管控;
- 科研实验室:实验仪器、精密设备建档、巡检、折旧管理;
- 毕业设计/求职项目:政企行政类管理系统,业务场景专业,差异化优势显著。
七、完整代码结构示例
1. 项目整体目录结构
django–assets–manage/
├── manage.py
├── assets_project/ # 项目全局配置
│ ├── settings.py # 数据库、折旧规则、二维码、导出配置
│ ├── urls.py # 全局路由分发
│ └── middleware.py # 角色权限拦截中间件
├── apps/ # 模块化业务拆分
│ ├── user_role/ # 用户、角色、部门权限模块
│ ├── assets_category/ # 资产多级分类模块
│ ├── assets_base/ # 资产建档、二维码生成模块
│ ├── assets_borrow/ # 领用、归还、审批模块
│ ├── assets_check/ # 巡检、维修登记模块
│ ├── assets_depreciate/ # 资产折旧计算模块
│ ├── assets_scrap/ # 报废申请、多级审批模块
│ ├── assets_inventory/ # 定期盘点、差异核对模块
│ └── report_export/ # 各类台账、报表导出模块
├── core/ # 公共工具类
│ ├── depreciate_calc.py # 直线折旧算法工具
│ ├── qr_code_gen.py # 资产二维码生成工具
│ ├── excel_export.py # Excel报表生成工具
│ └── status_check.py # 资产状态校验工具
├── static/ # 样式、ECharts、前端脚本
├── templates/ # 前后台页面模板
├── media/ # 二维码、资产图片存储目录
├── requirements.txt # 项目依赖包
└── readme.md # 部署、使用文档
</pre>
### 2. 核心可运行代码片段
#### 示例1:资产分类、资产主模型、领用记录模型
```python
from django.db import models
from django.contrib.auth.models
# 资产状态枚举
ASSETS_STATUS = (
("idle", "闲置"),
("using", "在用"),
("repair", "维修中"),
("scrap", "已报废"),
)
# 领用状态枚举
BORROW_STATUS = (
("apply", "待审核"),
("pass", "领用中"),
("back", "已归还"),
("reject", "申请驳回"),
)
class AssetsCategory(models.Model):
"""资产分类模型"""
cat_name = models.CharField(max=50, verbose_name="分类名称")
parent_cat = models.ForeignKey("self", null=True, blank=True, on_delete=models.SET_NULL, verbose_name="父分类")
create_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.cat_name
class AssetsInfo(models.Model):
"""固定资产主模型"""
assets_code = models.CharField(max=32, unique=True, verbose_name="资产编号")
category = models.ForeignKey(AssetsCategory, on_delete=models.CASCADE, verbose_name="所属分类")
assets_name = models.CharField(max=100, verbose_name="资产名称")
model = models.CharField(max=80, blank=True, verbose_name="型号规格")
buy_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="采购单价")
buy_date = models.DateField(verbose_name="采购日期")
use_years = models.IntegerField(verbose_name="规定使用年限(年)")
location = models.CharField(max=100, verbose_name="存放地点")
status = models.CharField(max=10, choices=ASSETS_STATUS, default="idle", verbose_name="资产状态")
residual_value = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name="当前剩余价值")
create_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.assets_code} – {self.assets_name}"
class AssetsBorrow(models.Model):
"""资产领用归还记录"""
assets = models.ForeignKey(AssetsInfo, on_delete=models.CASCADE, verbose_name="关联资产")
borrow_user = models.ForeignKey(User, related="borrow_user", on_delete=models.CASCADE, verbose_name="领用人")
borrow_reason = models.TextField(verbose_name="领用事由")
borrow_time = models.DateTime(verbose_name="领用时间")
expect_back_time = models.DateTime(verbose_name="预计归还时间")
audit_user = models.ForeignKey(User, related="audit_user", null=True, blank=True, on_delete=models.SET_NULL, verbose_name="审核人")
borrow_status = models.CharField(max=10, choices=BORROW_STATUS, default="apply", verbose_name="领用状态")
back_time = models.DateTime(null=True, blank=True, verbose_name="实际归还时间")
create_time = models.DateTime(auto_now_add=True)
示例2:直线折旧算法工具类(core/depreciate_calc.py)
from datetime import datetime
from django.db.models import F
class DepreciateCalc:
"""固定资产直线折旧计算工具"""
@classmethod
def calc_month_depreciate(cls, buy_price, use_years):
"""计算月折旧额"""
total_month = use_years * 12
if total_month == 0:
return 0
return round(float(buy_price) / total_month, 2)
@classmethod
def auto_update_residual(cls, assets_obj):
"""自动更新资产剩余价值"""
buy_dt = assets.buy_date
now_dt = datetime.now().date()
# 计算已使用月份
use_month = (now_dt.year – buy_dt.year) * 12 + (now_dt.month – buy_dt.month)
month_dep = cls.calc_month_depreciate(assets.buy_price, assets.use_years)
total_dep = round(use_month * month_dep, 2)
new_residual = round(float(assets.buy_price) – total_dep, 2)
# 剩余价值最低为0
if new_residual < 0:
new_residual = 0
# 数据库更新
assets_obj.residual_value = new_residual
assets_obj.save()
return new_residual
示例3:资产领用申请核心视图
from django.views import View
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.shortcuts import redirect
from django.contrib import messages
from apps.assets_base.models import AssetsInfo
from apps.assets_borrow.models import AssetsBorrow
@method_decorator(login_required, name="dispatch")
class AssetsBorrowView(View):
def post(self, request):
assets_id = request.POST.get("assets_id")
borrow_reason = request.POST.get("borrow_reason")
borrow_time = request.POST.get("borrow_time")
expect_back = request.POST.get("expect_back_time")
# 校验资产是否存在且闲置
try:
assets = AssetsInfo.objects.get(id=assets_id, status="idle")
except Assets.DoesNotExist:
messages.error("资产不存在或当前不可领用!")
return redirect("assets_list")
# 新增领用申请
AssetsBorrow.objects.create(
assets=assets,
borrow_user=request.user,
borrow_reason=borrow_reason,
borrow_time=borrow_time,
expect_back_time=expect_back
)
messages.success("领用申请提交成功,请等待管理员审核!")
return redirect("borrow_list")
八、总结与展望
本篇博客聚焦政企固定资产全生命周期管理全新赛道,基于Python+Django搭建专业资产管控系统,和日志、天气、在线考试、智能图书、网盘、考勤、会议室、问卷、招聘、二手、美食、进销存、租赁等所有往期项目完全独立。项目核心融合直线折旧算法、二维码生成、多级审批、盘点核对、Excel报表导出等技术,贴合企业、机关、实验室真实行政与财务办公场景,业务专业性强,代码落地价值高。
系统覆盖资产建档、领用、巡检、折旧、报废、盘点、报表全流程,既可以作为学习Django算法集成、流程审批、文件导出的优质案例,也是毕业设计、求职简历中辨识度极高的政企类实战项目。




