Skip to content

alonglyn/MIS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

大三系统分析与设计大作业

实现传统农业企业的信息管理系统, 也就是产销存系统 具体文档, 当结束后补充。

系统使用方法。

python==3.6

linux==Ubuntu16.04LTS

package==requirment.txt

mysql >= 5.7

假设你已经创建好python3的虚拟环境, 或者使用pycharm创建了虚拟环境, 或者你头铁使用default的环境

source ./venv/bin/activate  # 如果使用了虚拟环境, 先切换
pip install -r requirements.txt
python manage.py runserver runserver 127.0.0.1:8000  # 或者sudo sh ./start.sh

体验地址 账户:guest 密码:qwerasdf

实习周实验报告

本次为时两周的实验。小组根据要求开发了一个农业企业的产销存系统。

系统功能需求初步

需求大体上分为两点

  • 快捷财务
  • 节约物资
  • 管理公司事务
    • 财务
    • 物资出入库
    • 基本信息管理
    • 统计报表
  • 批发中心
    • 管理顾客
    • 蔬菜的销售管理
    • 蔬菜的库存管理(出入库)
  • 生产基地
    • 组织生产, 指导种植, 物资管理
      • 需要有生产基地的品种、 产量等信息
      • 提供报表来指导生产,决策支持系统

系统设计初步

很明显, 这个企业想通过信息化, 将传统的农产品生产、物资的发放、 财务使用信息系统来管理和维护, 达到节约成本、提高效率、优化决策的目的。

模块结构设计

  • 产销存

思考一下这个公司的需求, 虽然整个公司分为了, 公司、生产基地 、 代购点、批发中心、 四个子系统, 但实际上由于整个公司各个系统的业务都包括了产销存三个方面, 所以其实按照业务来设计系统(而不是机构)更加地简洁方便。减少冗余。

  • 机构隔离

然后在权限设计的时候, 把各个机构点隔离开来。

  • 统计报表

针对销售和收购生成统计报表, 在整个系统的业务流程完成后, 再针对销售和收购两个业务加上统计报表的模块

  • 导入导出和备份。

设置导入导出模块 和 全局备份

  • 查询筛选模块

    还好xadmin有自带的queryset模型以及一系列的查询筛选组件, 不然为每一张表加上一个专属的原生sql语句真的会死人的。

实体关系模型

根据业务来设计系统, 就设计到我这个系统的四个模块

  • 公司基本信息

    包括各种单位, 公司维护的顾客、 农户、 产品、 物资、 机构, 等静态信息

  • 生产

    生产指的是生产计划, 从需求来看, 一直从公司->生产基地->代购点->农户->具体生产计划

    是一个树状结构 ,跟公司组织的结构类似, 需要一级一级地将任务细分

  • 物资库存发放

  • 产品库存销售

    上面两个模块是一致的, 只不过业务的终点前者是发放到农户, 后者是销售给顾客,

    所以再设计的时候, 可以直接编写共同的模块。

以上、 生产是一个树状结构, 也是一种一对多的关系。

然后公司的基本信息里的实体, 也都是其他模块的外键,

最后到物资库存和产品库存, 产品库存和物资库存都是, 产品\物资 和 机构之间的多对多联系。

, 然后出入库、 盘存 都是与库存的一个多对一联系。

数据库表设计

根据E-R图, 来编写django的model即可。注意好E-R图里的外键关系即可。

输入输出设计

其实就是界面设计啊。 因为我用了xadmin, 所以不用考虑这个问题了。

代码设计

其实就是编码的设计, 竟然叫代码设计, 真的很无语啊。

编码就很简单, 有要求的按照要求来, 没要求的根据中文缩写加上有前导0的流水号

('%05d' % self.id)来自动生成编码。

流程图设计

其实这个系统没有做上面流程设计,(因为现在已经实现的功能在后台管理系统的整个流程上非常简单) 主要是在查询库存以及填写出入库单, 销售单。开始还准备添加采购单、 以及订单的模块, 来丰富流程, 但是由于时间原因没有继续完善。

系统开发任务初步

开发人员要求

试用django开发

全面了解Admin的设计模式

程序设计优先级

业务逻辑完成、 报表模块完成

导入导出excel、 数据库备份

系统布置初步

系统布置在自己再阿里云上使用学生身份 购买的优惠服务器,

首先把项目所依赖的包导出到requirement.txt, 然后编写简单的运行服务脚本, 再使用git部署到github的远程仓库中。

然后登录阿里云服务器,clone github上的项目, 安装python3 mysql 以及相应的依赖包。

最后运行start.sh脚本就完成了服务器配置, 当然生产环境中最好使用nginx 以及 uswig 配合来作为web服务器。

任务进度

12-27 周四

开始设计公司信息表格。 白天的任务, 完成公司表格的设计(包括简单的用户管理设置)

表格需求

上午

基本信息

  • 产品
  • 物资
  • 农户
  • 顾客

部门信息

  • 机构
    • 生产基地
    • 代购点
    • 批发中心

产销存业务

  • 生产计划
  • 产品库存管理
  • 物资库存管理

系统信息

  • 用户管理
  • 权限管理

下午

阅读django的字段文档。

12-28 周五

上午

一直再思考如何用django 的 model 来实现实时库存的查询。

2种实现

  • 基于数据库的触发器处理, 维护实时库存
  • 基于前台的逻辑处理, 不维护库存, 而是实时计算查询库存

第一种触发器说实话不会

第二种的话写起来很方便,只要重载model或者modeladmin 里的save函数即可

想了很久, 最后完成了构思。

首先建立一个库存(仓库)模型。 库存跟入库单、出库单、 盘存单是一个一对多的关系。

一个仓库维护属于他的入库单、 出库单、盘存单(销售)。

然后仓库显示的字段是一个计算库存的函数就行了。同时还能支持一个时期内的库存变化查询

下午

完成了盘存的编写, 参考了一个开源项目Django-ERP的业务设计, 同时看到了刘江的django实践项目,学会了

  • 关联对象的访问, 实现库存的查询
  • save_model的重写。 实现一些默认字段的添加, 比如操作人员, 操作时间等日志。

晚上

刘江的教程非常不错啊, 比复杂的官方文档简洁明了多了。

发现自己不知道python的装饰器是干嘛的。 所以去补习了一下, 简单来说就是给一个函数, 或者一个类, 套一个马甲, 马甲上可以写一些诸如验证、 日志的操作, 非常的方便, 适用于函数的复用。

12-29 周六

上午

睡觉了

下午

  • 完成产品库存

  • 添加采购单和物资入库单之间的一对一联系。

  • 添加生产计划和入库单之间的一对一联系。

  • 一对一联系, 实现填写出库单,联系的生产计划状态变为运输中, 填写入库单, 联系的生产计划变为完成。

  • 完成销售和顾客之间的联系

  • 其他人, 完成代码的注释, 和代码设计的编写。

晚上

重构了一下公司的机构, 像把他分成独立的部门, 不过后来放弃了, 因为重构后虽然能独立的管理、方便实现逻辑, 但是其他代码写起来就更加冗余了,

接着完成了下午的任务, 使用了时间筛选插件, 修改了后台样式

12-30 周日

玩了一天的雪

12-31 周一

睡觉、和地下室的朋友们在外面玩了一晚上

1-1 周二

主要还是休息和

转入学习xadmin。

1-2 周三

全天

  • 将所有admin后台代码迁移到xadmin上,xadmin是中间发现的一个开源的后台框架, 使用了bootstrap3的ui, 重写了admin的template。 更加得符合我们开发的需求
  • 编写筛选器和权限、思考如何写统计报表功能,
  • 初步自己测试系统, 修改bug, 和重构系统的运行流程和整理文件结构。

1-3 周四

上午

  • 完成基于机构的, 职员权限的编写, 配合django自带的权限控制。
  • 完善筛选报表的任务

下午

  • 组织组员完成了大部分功能的测试
  • 修改代码的bug
  • 修改系统逻辑上的bug

晚上

  • 查看所有TODO, 删除已经完成的, 保留可以改进的。
  • 编写服务器配置以及布置方案,并将项目开源到github上, 然后从服务器上clone项目, 并且使用命令行部署。

1-4 周五

上午

  • 再测试了一些bug
  • 添加了一些测试数据用以展示报表图

下午

  • 瞎写了两个小的按钮, 使用mysqldump完成数据库简单备份和还原

  • 验收

系统不足

验收的时候发现的bug

  • 虽然整个系统不会允许删除用户, 只允许标记员工为解雇状态, 因为删除用户后, 会级联删除所有的操作。 但是再点击删除用户表的时候, 会抛出保护异常并且没有做异常处理。

  • 没有做系统的使用文档, 系统的很多功能被安全控制了, 但是并没有很好地限制用户进行某些非安全操作,(比如出入库单的一对一选择, 如果一个出入库单意境完成配对, 那么员工就不应该能够查询到这些完成了的记录) 虽然这种操作在底层被限制了。 所以如果用户不熟悉系统, 很容易产生一些无法完成正常操作的情况。

  • 没有进一步完成财务流程的设计

    财务流的报表由于自己无法单独完成需求的分析和设计, 所以也无法开发出来

  • 没有产品的追溯设计, 我思考过如果要完成产品的追溯, 那么就需要添加一个产品实例表, 即一个产品对象类,需要有产品实例, 这样一个仓库的库存不再是维护一个产品的数量了, 而是该产品库存的所有的对象实例。

    这样库存的转移, 就要变成, 产品实例之间的转移, 而不仅仅是数量的转移。

    这样就跟我系统中的生产计划设计模式(详细的看apps/product/models.py)很像, 写报告的事后思考了一下, 确实可以这样联系起来,当时开发的时候没有这样想(这确实也是没有做好需求设计的坏处) 希望能有学弟学妹们完成吧。

技术上的不足

作为一个兼职开发人员

也想过自己造轮子, 甚至再第二次实验小作业的时候也造了一些导入导出、备份还原、浏览、筛选、增删改的轮子。 但是真的时间有限, 并且只有我一个人造轮子,造出来的残次品的概率很高,再所以还是放弃了, 乖乖地使用xadmin的后台框架, clone一下, 看源码写一些插件。完成需求就好了。

阅读xadmin源码的过程中发现,设计者在用设计的时候留了挺多基于后端的插件接口, 很多插件plugin也是通过后端来添加的。

但是现在web的流行趋势是前后端分离,xadmin的原作者也抛弃了django的这种模板系统, 不再更新xadmin的纯后端版本了。

所以初步了解了一下前后端分离, 真的是一个很好的模式, 不仅逻辑清楚, 还易于开发人员分工和专精。 后端提供数据获取的api, 前端去提取就行了。 实际使用应该还涉及网络信息的验证和加密吧。 总之这种设计模式很清晰啊。

就算是一个人包揽前后端的开发, 这种设计模式也能很舒服的开发, 相比与传统的开发方式。

还有一个重要的问题就是如何处理并发, 和高并发的时候服务器的负载均衡(真是书到用时方恨少)

要开始认真复习, 把基础补牢固了先 。 这种面向搜索引擎的开发真得很折磨人。效率低下、收获也少得可怜。(复制粘贴快捷键都要按坏了)

学习笔记

系统开发设计

系统设计文章

以MVP思维,解析最小可行的进销存产品 | 人人都是产品经理

软工毕设

Django笔记

理解关系数据库中的多对多关系 加深

模型字段

字段参数

还有各种模型的常用API

Django插件

xadmin

完整的web设计需要了解

vue.js

nginx

django

github

开源项目地址

https://github.com/alonglyn/MIS

About

信息系统设计大作业-产销存系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors