中国邮政物流管理系统(Django+mysql)

中国邮政物流管理系统开发文档

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 数据库模型概览

系统使用了以下主要数据模型:

  1. Settings - 系统全局设置
  2. PermissionGroup - 权限组
  3. Permission - 权限
  4. Department - 部门
  5. User - 用户
  6. Customer - 客户
  7. Waybill - 运单
  8. Truck - 车辆
  9. TransportOut - 发车/运输
  10. WaybillRouting - 运单路由
  11. DepartmentPayment - 部门支付
  12. CargoPricePayment - 货物代收款
  13. 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 开发环境部署

  1. 安装Python 3.x和pip

  2. 安装依赖包:

    复制代码
    pip install django django-crispy-forms pillow
  3. 初始化数据库:

    复制代码
    python manage.py makemigrations
    python manage.py migrate
  4. 创建超级用户:

    复制代码
    python manage.py createsuperuser
  5. 启动开发服务器:

    复制代码
    python manage.py runserver

5.2 生产环境部署

5.2.1 Linux服务器部署
  1. 安装必要的系统包:

    复制代码
    apt-get update
    apt-get install python3 python3-pip nginx supervisor
  2. 安装Python依赖:

    复制代码
    pip3 install django gunicorn django-crispy-forms pillow
  3. 配置Nginx:

    nginx 复制代码
    server {
        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;
        }
    }
  4. 配置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
  5. 收集静态文件:

    复制代码
    python manage.py collectstatic
  6. 启动服务:

    复制代码
    supervisorctl reread
    supervisorctl update
    supervisorctl start wuliu
    service nginx restart

5.3 数据备份

定期备份数据库是确保系统数据安全的关键措施:

  1. SQLite数据库备份:

    复制代码
    cp db.sqlite3 db.sqlite3.bak
  2. MySQL数据库备份:

    复制代码
    mysqldump -u username -p database_name > backup.sql
  3. PostgreSQL数据库备份:

    复制代码
    pg_dump -U username database_name > backup.sql

6. 系统特性与优势

  1. 全流程管理:覆盖从开票、装车、运输、到达、签收的全过程
  2. 多角色支持:适应管理员、公司职员、分支机构、货场等不同角色
  3. 权限精细控制:通过权限系统控制不同用户的操作权限
  4. 财务流程完整:支持运费结算、代收款管理、客户积分等财务功能
  5. 数据可视化:通过图表直观展示业务数据和统计信息
  6. 报表丰富:提供多种业务报表,便于管理决策

7. 未来扩展计划

  1. 移动端适配:开发响应式界面或专用APP,支持移动设备访问
  2. 客户自助服务:开发客户端,允许客户自助查询物流状态
  3. 路径优化算法:引入智能算法优化物流路径,降低运输成本
  4. 集成第三方物流API:与其他物流系统对接,实现信息互通
  5. 大数据分析:应用大数据技术分析物流数据,提供决策支持

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/咸鱼:万能程序员

相关推荐
满怀101525 分钟前
【LangChain全栈开发指南】从LLM集成到智能体系统构建
人工智能·python·langchain·ai编程·智能体开发
撸码到无法自拔1 小时前
加速LLM大模型推理,KV缓存技术详解与PyTorch实现
人工智能·pytorch·python·深度学习·缓存
韩先超1 小时前
2025年3月,韩先超对国网宁夏进行Python线下培训
python·ai·云原生·kubernetes·devops
yz1.2 小时前
[sklearn] 特征工程
python·机器学习·sklearn
hello_ejb34 小时前
聊聊Spring AI Alibaba的SentenceSplitter
人工智能·python·spring
新辞旧梦5 小时前
企业微信自建消息推送应用
服务器·python·企业微信
虎头金猫5 小时前
如何解决 403 错误:请求被拒绝,无法连接到服务器
运维·服务器·python·ubuntu·chatgpt·centos·bug
gadiaola5 小时前
MySQL从入门到精通(三):MySQL数据类型、SQL语言—DDL
数据库·sql·mysql·database
dqsh068 小时前
树莓派5+Ubuntu24.04 LTS串口通信 保姆级教程
人工智能·python·物联网·ubuntu·机器人
sunshineine9 小时前
jupyter notebook运行简单程序
linux·windows·python