中国邮政物流管理系统开发文档
1. 项目概述
1.1 项目简介
中国邮政物流管理系统是一个基于Django框架开发的Web应用,旨在提供全面的物流业务管理功能。该系统支持运单管理、车辆调度、物流跟踪、财务结算等核心业务流程,适用于邮政企业的物流业务管理场景。
1.2 项目背景
随着电子商务的快速发展,物流行业面临着巨大的机遇与挑战。中国邮政作为国家重要的物流服务提供商,需要一个现代化、高效的物流管理系统来提升运营效率,优化资源配置,提高客户满意度。本系统正是为满足这一需求而设计开发的。
1.3 系统目标
- 提供全面的运单管理功能,支持运单创建、跟踪、查询和统计
- 实现车辆调度和物流路径优化,提高物流效率
- 支持多部门协同工作,明确权责划分
- 提供客户管理和积分系统,提升客户忠诚度
- 提供财务管理功能,支持代收款、部门结算等业务
- 生成丰富的业务报表,支持决策分析
2. 系统架构
2.1 技术架构
本系统采用Python Django框架开发,采用MVC架构模式:
- 前端:HTML, CSS, JavaScript, Bootstrap, jQuery
- 后端:Python 3.x, Django
- 数据库:MySQL (Django ORM支持多种数据库)
- 开发环境:使用Django自带的开发服务器
2.2 系统架构图
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 浏览器 │ <--> │ Web服务器 │ <--> │ Django应用 │
│ (Browser) │ │ (Nginx) │ │ (uWSGI) │
└─────────────┘ └─────────────┘ └─────┬───────┘
│
┌──────┴───────┐
│ 数据库 │
│ (MySQL等) │
└──────────────┘
2.3 目录结构
项目主要目录结构:
wuliu/ # 应用主目录
├── migrations/ # 数据库迁移文件
├── templates/ # HTML模板文件
│ └── wuliu/ # 应用相关模板
│ ├── _js/ # JavaScript模板
│ ├── waybill/ # 运单相关模板
│ ├── transport_out/ # 发车管理模板
│ └── ... # 其他功能模块模板
├── __init__.py # 包初始化文件
├── admin.py # Django管理后台配置
├── apps.py # 应用配置
├── forms.py # 表单定义
├── models.py # 数据模型
├── urls.py # URL路由配置
├── views.py # 视图函数
├── apis.py # API接口
└── common.py # 公共工具函数
3. 数据库设计
3.1 数据库模型概览
系统使用了以下主要数据模型:
- Settings - 系统全局设置
- PermissionGroup - 权限组
- Permission - 权限
- Department - 部门
- User - 用户
- Customer - 客户
- Waybill - 运单
- Truck - 车辆
- TransportOut - 发车/运输
- WaybillRouting - 运单路由
- DepartmentPayment - 部门支付
- CargoPricePayment - 货物代收款
- CustomerScoreLog - 客户积分记录
3.2 数据库关系图
┌───────────┐ ┌───────────┐ ┌───────────┐
│ User │ │ Department│ │ Permission│
└───────────┘ └───────────┘ └───────────┘
│ │ │
│ │ │
v v v
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Waybill │<--->│TransportOut│ │PermissionGroup
└───────────┘ └───────────┘ └───────────┘
│ │
│ │
v v
┌───────────┐ ┌───────────┐ ┌───────────┐
│WaybillRouting │ Truck │ │ Customer │
└───────────┘ └───────────┘ └───────────┘
│ │
│ │
v v
┌───────────┐ ┌───────────┐
│DepartmentPayment │CustomerScoreLog
└───────────┘ └───────────┘
│
│
v
┌───────────┐
│CargoPricePayment
└───────────┘
3.3 主要数据模型详解
3.3.1 Settings (全局设置)
python
class Settings(models.Model):
company_name = models.CharField("公司名称", max_length=32)
handling_fee_ratio = models.FloatField("手续费比例(向上取整)", validators=[_validate_handling_fee_ratio, ])
customer_score_ratio = models.FloatField("客户积分比例(向上取整)", validators=[_validate_customer_score_ratio, ])
3.3.2 Department (部门)
python
class Department(models.Model):
name = models.CharField("部门名称", max_length=32, unique=True)
father_department = models.ForeignKey("self", verbose_name="上级部门", on_delete=models.SET_NULL, null=True, blank=True)
unit_price = models.FloatField("单价 (元/千克/立方米)", validators=[MinValueValidator(0), ], db_index=True)
enable_src = models.BooleanField("允许收货", default=False)
enable_dst = models.BooleanField("允许到货", default=False)
enable_cargo_price = models.BooleanField("允许代收", default=False)
is_branch_group = models.BooleanField("分支机构分组", default=False)
3.3.3 User (用户)
python
class User(models.Model):
name = models.CharField("用户名", max_length=32, unique=True)
password = models.CharField("密码", max_length=128)
enabled = models.BooleanField("启用", default=True, db_index=True)
administrator = models.BooleanField("管理员", default=False)
department = models.ForeignKey(Department, verbose_name="所属部门", on_delete=models.PROTECT)
create_time = models.DateTimeField("创建时间", auto_now_add=True)
permission = models.ManyToManyField(Permission, verbose_name="权限")
class Types(models.TextChoices):
Administrator = "管理员"
Company = "公司"
Branch = "分支机构"
GoodsYard = "货场"
3.3.4 Waybill (运单)
python
class Waybill(models.Model):
# 运单状态定义
class Statuses(models.IntegerChoices):
Created = 0, "已开票"
Loaded = 1, "已配载"
Departed = 2, "已发车"
GoodsYardArrived = 3, "货场入库"
GoodsYardLoaded = 4, "货场配载"
GoodsYardDeparted = 5, "货场发车"
Arrived = 6, "到站待提"
SignedFor = 7, "客户签收"
Returned = 8, "已退货"
Dropped = 9, "已作废"
# 运费类型定义
class FeeTypes(models.IntegerChoices):
SignFor = 0, "提付"
Now = 1, "现付"
Deduction = 2, "扣付"
# 代收款状态定义
class CargoPriceStatuses(models.IntegerChoices):
No = 0, "无代收"
NotPaid = 1, "未支付"
Paid = 2, "已支付"
create_time = models.DateTimeField("创建日期", auto_now_add=True, db_index=True)
arrival_time = models.DateTimeField("到货日期", null=True, blank=True, db_index=True)
sign_for_time = models.DateTimeField("提货日期", null=True, blank=True, db_index=True)
# 发货和收货部门
src_department = models.ForeignKey(Department, verbose_name="发货部门", on_delete=models.PROTECT, related_name="wb_src_department")
dst_department = models.ForeignKey(Department, verbose_name="到达部门", on_delete=models.PROTECT, related_name="wb_dst_department")
# 发货和收货客户信息
src_customer = models.ForeignKey(Customer, verbose_name="发货客户", null=True, blank=True, on_delete=models.SET_NULL, related_name="src_customer")
src_customer_name = models.CharField("发货人", max_length=32)
src_customer_phone = models.CharField("发货人电话", max_length=16)
src_customer_credential_num = models.CharField("发货人身份证号码", max_length=32, blank=True)
src_customer_address = models.CharField("发货人地址", max_length=64, blank=True)
dst_customer = models.ForeignKey(Customer, verbose_name="收货客户", null=True, blank=True, on_delete=models.SET_NULL, related_name="dst_customer")
dst_customer_name = models.CharField("收货人", max_length=32)
dst_customer_phone = models.CharField("收货人电话", max_length=16)
dst_customer_credential_num = models.CharField("收货人身份证号码", max_length=32, blank=True)
dst_customer_address = models.CharField("收货人地址", max_length=64, blank=True)
# 货物信息
cargo_name = models.CharField("货物名称", max_length=16)
cargo_num = models.PositiveIntegerField("件数", validators=[MinValueValidator(1), ])
cargo_volume = models.FloatField("体积", validators=[MinValueValidator(0.01), ])
cargo_weight = models.FloatField("重量", validators=[MinValueValidator(0.1), ])
cargo_price = models.PositiveIntegerField("货款", default=0)
cargo_handling_fee = models.PositiveIntegerField("手续费", default=0)
# 运费信息
fee = models.PositiveIntegerField("运费", validators=[MinValueValidator(1), ])
fee_type = models.SmallIntegerField("运费类型", choices=FeeTypes.choices, db_index=True)
# 备注信息
customer_remark = models.CharField("客户备注", max_length=64, blank=True)
company_remark = models.CharField("公司备注", max_length=64, blank=True)
# 签收信息
sign_for_customer_name = models.CharField("签收人", max_length=32, blank=True)
sign_for_customer_credential_num = models.CharField("签收人身份证号码", max_length=32, blank=True)
# 状态信息
status = models.SmallIntegerField("状态", default=Statuses.Created.value, choices=Statuses.choices, db_index=True)
drop_reason = models.CharField("作废原因", max_length=64, blank=True)
# 退货和代收款关联
return_waybill = models.OneToOneField("self", verbose_name="退货原运单", on_delete=models.SET_NULL, null=True, blank=True)
cargo_price_payment = models.ForeignKey(CargoPricePayment, verbose_name="代收款转账单", on_delete=models.SET_NULL, null=True, blank=True)
cargo_price_status = models.SmallIntegerField("代收款状态", choices=CargoPriceStatuses.choices, db_index=True)
3.3.5 TransportOut (发车/运输)
python
class TransportOut(models.Model):
class Statuses(models.IntegerChoices):
Ready = 0, "货物配载"
OnTheWay = 1, "车次在途"
Arrived = 2, "车次到车"
truck = models.ForeignKey(Truck, verbose_name="车辆", on_delete=models.PROTECT)
driver_name = models.CharField("驾驶员姓名", max_length=32)
driver_phone = models.CharField("驾驶员电话号码", max_length=16)
create_time = models.DateTimeField("创建时间", auto_now_add=True, db_index=True)
start_time = models.DateTimeField("发车时间", null=True, db_index=True)
end_time = models.DateTimeField("到达时间", null=True)
src_department = models.ForeignKey(Department, verbose_name="发车部门", on_delete=models.PROTECT, related_name="tn_src_department")
dst_department = models.ForeignKey(Department, verbose_name="到达部门", on_delete=models.PROTECT, related_name="tn_dst_department")
waybills = models.ManyToManyField(Waybill, verbose_name="配载运单")
status = models.SmallIntegerField("状态", choices=Statuses.choices, default=Statuses.Ready.value, db_index=True)
4. 功能模块
4.1 用户管理
4.1.1 用户登录/注册
- 支持用户注册,可选择所属部门和是否为管理员
- 用户登录验证,支持会话管理
- 密码修改功能
4.1.2 权限管理
- 管理员可为用户分配权限
- 权限按功能模块分组
- 支持批量编辑用户权限
4.2 运单管理
4.2.1 运单创建与编辑
- 支持创建新运单,自动计算运费
- 编辑已创建但未发车的运单
- 运单详情查看
- 运单检索和筛选
4.2.2 运单状态管理
- 支持运单作废操作
- 支持运单退货处理
- 运单状态跟踪和历史记录
4.3 物流运输管理
4.3.1 发车管理
- 创建发车单,选择车辆和配载运单
- 编辑未发车的发车单
- 确认发车操作
- 查询发车记录
4.3.2 到货管理
- 确认车次到达
- 查询待到货的车次
- 自动更新运单状态
4.3.3 签收管理
- 客户签收确认
- 签收记录查询
- 自动更新运单状态为"客户签收"
4.4 财务管理
4.4.1 部门结算
- 创建部门回款单
- 部门回款状态跟踪
- 审核、回款和结算流程
4.4.2 代收款管理
- 创建代收款转账单
- 代收款审核和支付流程
- 代收款状态跟踪
4.4.3 客户积分管理
- 客户积分自动计算
- 手动调整客户积分
- 积分变更记录查询
4.5 报表统计
系统提供多种报表功能:
- 发货部门运单报表
- 库存运单报表
- 到货部门运单报表
- 到站库存运单报表
- 签收运单报表
4.6 数据可视化
系统首页提供多种数据可视化图表:
- 运单数量和运费趋势图
- 热门运输路线地图
- 货物类型统计
- 运单状态分布
- 客户统计分析
- 按小时创建运单统计
5. 部署指南
5.1 开发环境部署
-
安装Python 3.x和pip
-
安装依赖包:
pip install django django-crispy-forms pillow
-
初始化数据库:
python manage.py makemigrations python manage.py migrate
-
创建超级用户:
python manage.py createsuperuser
-
启动开发服务器:
python manage.py runserver
5.2 生产环境部署
5.2.1 Linux服务器部署
-
安装必要的系统包:
apt-get update apt-get install python3 python3-pip nginx supervisor
-
安装Python依赖:
pip3 install django gunicorn django-crispy-forms pillow
-
配置Nginx:
nginxserver { listen 80; server_name your_domain.com; location /static/ { alias /path/to/your/static/files/; } location /media/ { alias /path/to/your/media/files/; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
-
配置Supervisor:
ini[program:wuliu] command=/usr/local/bin/gunicorn project.wsgi:application -w 4 -b 127.0.0.1:8000 directory=/path/to/your/project user=www-data autostart=true autorestart=true redirect_stderr=true
-
收集静态文件:
python manage.py collectstatic
-
启动服务:
supervisorctl reread supervisorctl update supervisorctl start wuliu service nginx restart
5.3 数据备份
定期备份数据库是确保系统数据安全的关键措施:
-
SQLite数据库备份:
cp db.sqlite3 db.sqlite3.bak
-
MySQL数据库备份:
mysqldump -u username -p database_name > backup.sql
-
PostgreSQL数据库备份:
pg_dump -U username database_name > backup.sql
6. 系统特性与优势
- 全流程管理:覆盖从开票、装车、运输、到达、签收的全过程
- 多角色支持:适应管理员、公司职员、分支机构、货场等不同角色
- 权限精细控制:通过权限系统控制不同用户的操作权限
- 财务流程完整:支持运费结算、代收款管理、客户积分等财务功能
- 数据可视化:通过图表直观展示业务数据和统计信息
- 报表丰富:提供多种业务报表,便于管理决策
7. 未来扩展计划
- 移动端适配:开发响应式界面或专用APP,支持移动设备访问
- 客户自助服务:开发客户端,允许客户自助查询物流状态
- 路径优化算法:引入智能算法优化物流路径,降低运输成本
- 集成第三方物流API:与其他物流系统对接,实现信息互通
- 大数据分析:应用大数据技术分析物流数据,提供决策支持
8. 技术支持与维护
- 系统使用Django框架开发,维护和升级便捷
- 模块化设计便于功能扩展
- 完善的数据模型设计保证数据一致性和完整性
- 代码注释详细,便于后续开发人员理解和维护
测试数据账号密码如下:
用户名 密码 用户类型
csshd 666666 收货点
csfgs 666666 分公司(到货点)
kj_1 666666 会计(财务部)
zxg_1 666666 货物装卸工1(货台)
zxg_2 666666 货物装卸工2(货台)
123123 123123 管理员
B站视频:https://www.bilibili.com/video/BV1badhYmEKZ/
联系方式:vx:1837620622
b/咸鱼:万能程序员