GreaterWMS/README_zh_Hans.md
2021-07-27 10:26:36 +08:00

19 KiB
Raw Permalink Blame History

聚商汇WMS--开源仓库管理系统


项目介绍:

完全开源仓储管理软件遵循Apache License 2.0协议前后端分离且完全开源API使用restful协议方便二次开发前端代码使用quasar进行构建后端使用Python Django3.1利用API可以支持多仓波次发货合并拣货Milk-Run等业务模型。

  • 软件著作权编号2018SR517685
  • GitHub地址GitHub
  • Gitee地址Gitee
  • 视频教程:B站(所有的教程都会更新在这里)
  • Demo地址DEMO(注册会获得初始化Demo数据)
  • 微信769373425
  • 邮箱elvis.shi@56yhz.com
  • CIMO-ADMIN(vue-quasar-manage): GitHub | Gitee

项目初衷:

我在供应链行业工作了15年发现在我们这个专业的领域没有一款高自由度、高自定义化的软件来深度支持我们企业的业务。大多数软件都是闭源的而且很难去做二次开发即使开发周期也是非常长开发失败的案例也是比比皆是。由于企业选择了一款软件后其二次开发也会被开发公司绑定至于二次开发费用只能说呵呵。所以我设计了这个聚商汇WMS为的是做到一款高自由度高自定义开发的仓库管理软件来深度支持企业的业务。

  • 愿景如果你从事着非IT行业的工作而你又热爱你的行业那就用科技去改变他。

生命周期

  • V 1.0.0 -- 2019年7月 ~ 2020年12月由于1.0.0版本的二次开发设计较为复杂故2.0重新编写)
  • V 2.0.0 -- 2020年12月 ~ 2021年3月重新编写业务逻辑原生自带API开发文档加入实时通信方便企业用户互相沟通
  • V 2.1.0 -- 2021年3月 ~ 2021年6月加入了客户与企业之间的实时互动增进企业与客户之间的业务联系实现VMI
  • V 2.2.0 -- 2020年6月 ~ 2021年9月加入了供应商与企业之间的实时互动增进企业与供应商之间的业务联系实现Milk-Run和看板拉动
  • V 2.3.0 -- 2021年9月 ~ 2021年12月库存管理雏形初步加入神经网络深度学习库存变化
  • V 3.0.0 -- 2021年12月 ~ 2022年3月完全植入神经网络让上下游企业可以以最低的成本运营整体的业务
  • V 3.1.0 -- 2022年3月 ~ 2022年6月区域仓库业务布局通过深度学习实现多仓运营成本最低化

开发环境:

  • Python 版本为 V 3.8.0 +

  • Django 版本为 V 3.1.0 +(该版本Django才原生支持异步实时通信)

  • Django-rest-framework 版本为 V 3.12.2 + (更高版本的Django-rest-Framework对Django3的兼容比较好)

  • Django-silk 版本为 V 4.1.0 (如果是部署上线请关闭silksilk仅为调试API接口速度用有可能会泄露用户信息)

  • Quasar 版本为 V1.7.2 + (可以查看Quasar官网来编辑GreaterWMS前端代码Quasar官网)

  • Vue 版本为 V 2.6.0 +尽量不要使用Vue3因为开发环境没有使用Vue3不知道会出现什么问题

  • API遵循 RESTful 架构


构建命令:

  • 下载代码:
git clone https://github.com/Singosgu/GreaterWMS.git
  • 安装Python库
pip install -r requirements.txt

注意:安装需要Twisted库这个库有时候会安装不上需要下载下来本地安装

pip install Twisted{你下载下来的版本名称}

注意:本地安装需要注意路径

  • 初始化数据库:
python manage.py makemigrations
  • 迁移数据库:
python manage.py migrate

创建数据库Django默认使用sqlite3作为数据库如果需要mysql数据库请在greaterwms/settings.py里面配置DATABASE

开发服务器运行:

  • 开发运行:
daphne -p 8008 greaterwms.asgi:application

生产服务器运行:

  • supervisor守护进程
pip install supervisor

使用supervisor来守护Django进程再使用Nginx做反向代理至于superevisor的教程有很多这里不做讲解

  • Nginx支持

推荐使用Nginx进行部署部署的时候需要指定WebSocket链接如果不指定实时通信功能将报错

另需要修改从2.0.19版本以后优化了请求地址修改方式直接修改templates/dist/spa/statics/baseurl.js中的baseurl和wsurl就可以成功更改前端请求地址不再需要做下面的quasar build打包工作。

如果需要修改前端内容则还需要修改templates/public/statics/baseurl.js中的baseurl和wsurl然后重新使用quasar build进行打包里的ws_url

## 示例更改前
const baseurl = 'http://127.0.0.1:8008/'
const wsurl = 'ws://127.0.0.1:8008/'

## 示例更改后
const baseurl = 'https://你的域名/'
const wsurl = 'wss://你的域名/websocket/'

如果服务器启用了SSL请使用https和wss如果没有启用SSL则使用http和ws

修改后需要重新build前端代码


开发扩展:

因为使用的前后端分离的设计所以可以通过API开发更多的软件应用

物流智能AGV

  • AGV的项目也已经开源由于场地受限仅实现智能发货定点回库使用的循迹感应器超声波避障感应器红外避障感应器所有的指令通过网络传输AGV绑定MAC地址和IP地址保证了安全性前提是你需要有一个树莓派。

进销存

  • 可以直接当一个进销存系统使用,简化仓库库位设置等操作即可。

APP和小程序

  • Quasar原生可以直接打包成IOS APP和Android APP

  • 小程序的开发可以通过API开做二次开发但小程序不支持put请求所以需要自己再写一个请求接口。

  • API的组合可以达到100万种这样我们可以根据查询请求来获得实时报表和数据监控

供应链管理系统

  • 产品的数量,创建时间,最后使用时间是各方面统计的,所以可以方便采购计划和调拨计划进行库存的分析
  • V 2.3.0及其以后的版本,将自带深度学习分析,所以可以直接使用分析结果作为供应链管理系统工具使用

多仓管理

  • OPENID为用户的数据唯一标识数据组统一标识为APPID所以很方便可以实现多仓管理

波次拣货,发货

  • 可以设置固定时间向服务器发出请求,从而达到波次拣货的功能

  • 也可以直接使用任务工作通过API查询分析结果来实现推荐使用APScheduler

    pip install apscheduler
    

Milk-Run

  • V 2.2.0及其以上版本,将原生支持此功能
  • 如果现在就需要这个业务可以根据API调用库存消耗来实现此功能

VMI

  • V 2.1.0及其以上版本,将原生支持此功能
  • 如果现在就需要这个业务可以根据API调用库存消耗来实现此功能

拣货路线优化

  • 现在的拣货路线是按照库位排序
  • V 2.3.0以后版本将原生支持此功能
  • 如果现在需要这个业务可以根据每天的拣货明细调用API来实现此功能

开发指南:

baseurl

  • 是发起请求的基本网址,如果是本地调试,则默认为http://127.0.0.1:8008/ 如果部署在服务器则需要将其改为你的网站访问url

  • 修改方式为修改axios_request.js注意websocket的修改之前已经提到了

Django-silk

  • django-silk为开发时的调试工具可以统计每个接口的响应速度如果需要部署到生产环境请删除Django-silk相关配置因为会有泄露用户信息的风险或者直接修改Django-silk库让用户只能看到自己的请求数据

数据库存储

  • 数据库设计时考虑到数据迁移等问题所以只有users里面的user_id和Django自带的user_id做了外键其余所有字段全部没有使用外键方便数据备份和数据库迁移
  • 数据库是4段式设计
    1. 验证数据用户归属
    2. 验证数据安全性
    3. 验证数据是否可以存入数据库
    4. 存入数据库并返回Response

关于数据传输

  • 需要在所有的请求头headers里面加入token值这个值就是用户的数据唯一标识OPENID
  • 所有的数据传输需要设定content-type为application/json

OPENID

  • OPENID是注册用户数据的唯一标识当管理员直接注册时会有developer=1这个管理员标识。
  • 你可以根据developer标识来做自定义二次开发

APPID

  • APPID是用户数据组唯一标识
  • 如果需要多公司运营或者多仓运营可以通过APPID做统一链接来实现多公司多仓操作

用户权限

  • 未对用户权限做过多限制,请根据自身的业务需要,做二次开发限制

业务流程:

管理员

  • 点击注册,可以注册成为管理员账号,从而实现初始化程序设置
  • 注册后会得到2个ID和1个开发者标识OPENID是用户数据组唯一标识通过OPENID绑定此OPENID下所有的数据APPID是用户组数据唯一标识通过APPID来实现多公司多仓库功能Developer标识是个布尔值True代表这是个管理员账号
  • 用户登入分2种
    1. 使用OPENID和员工名称直接登入
    2. 管理员使用账号和密码登入
  • 登入后前端会存储登入信息
  • 可以通过查看我的OPENID来查看用户数据组的OPENID
  • 如果需要多公司多仓库操作注意需要更改OPENID
  • 更多管理员权限,请自行开发

员工管理

  • 注册管理员后,新建一个员工
  • 员工有2个字段Staff_name用于员工登入Staff_type员工类型来控制员工的权限
  • 系统没有对员工权限做任何限制如果需要员工权限请根据企业业务模型自行修改Templates
  • 点击Edit可以修改员工信息
  • 点击Delete可以删除员工信息系统后台会将Is_delete调成True
  • 点击Contact
    1. 可以直接和员工实时聊天,但是不可以和自己聊天
    2. 可以新建一个备忘录员工,这样做其实是当成备忘录使用
    3. 在个人中心,可以查看最近的联系人
    4. Message标识会提醒你现在有多少未读消息

司机管理

  • 司机管理只会在发货流程中用到
  • 你需要知道货物是哪个司机提货取走的

仓库设置

  • Warehouse
    1. 仓库的创建只可以创建一个仓库,现在可以创建多个,但是只有第一个会起作用
    2. 如果需要多仓处理可以通过APPID进行二次开发也可以直接重新创建一个管理员账号
    3. 仓库的城市一定要填写,这是用来计算运费的
  • Bin_Property
    1. 库位属性决定了仓库中货物属于什么属性的货物
    2. 4种属性破损Damage)锁定Holding质检Inspection正常Normal
    3. Beta版中属性可以修改和删除正式版将无法删除和修改
    4. 所有的发货都只会匹配Normal库位的货物
    5. 收货上架和移库,都会根据库位属性,直接修改库存数量,仓库的库存数量不会出现负数
  • Bin_Size
    1. 库位的尺寸是帮助操作人员查看货物是否可以放入库位
    2. 现行的版本没有对上架和移库尺寸做检查,将来会加入自动检查
  • Bin_Set
    1. 库位设置是必须的通常库位设置是横纵横纵比如A010101即A横01纵01横01纵
    2. 库位的设置需要设置库位属性和尺寸,属性很重要,他决定了此库位的货物是否为正常货物

基础设置

  • Company
    1. 公司基本信息的创建只可以创建一个公司,现在可以创建多个,但是只有第一个会起作用
    2. 如果需要多公司处理可以通过APPID进行二次开发也可以直接重新创建一个管理员账号
    3. 公司的城市一定要填写,这是用来显示在收发货单上的
  • Supplier
    1. 供应商的基础信息
    2. 供应商的城市一定要填写,这是用来显示在收货单上的,并且也是要自动计算运费的
  • Customer
    1. 客户的基础信息
    2. 客户的城市一定要填写,这是用来显示在发货单上的,并且也是要自动计算运费的

商品管理

  • Unit
    1. 商品的单位,系统会初始化创建一些,但可以自己添加和修改
  • Class
    1. 商品的类型,可以自己添加和修改
  • Color
    1. 商品的颜色,系统会初始化创建一些,但可以自己添加和修改
  • Brand
    1. 商品的品牌,可以自己添加和修改
  • Shape
    1. 商品的形状,系统会初始化创建一些,但可以自己添加和修改
  • Specs
    1. 商品的规格,可以自己添加和修改
  • Origin
    1. 商品的产地,可以自己添加和修改
  • Goods List
    1. 商品的列表

固定资产

  • Capital
    1. 固定资产创建,没有做过多拓展,只是记录使用
    2. 可以统计托盘账目等

库存管理

  • Stock List
    1. 在库的货物总的库存数据量
    2. Onhand_stock现有的库存数量
    3. Can Order可以用于下单发货的库存数量因为有些货物已经被下了订单虽然有现有库存但是不可以再被订货
    4. Ordered Stock已经被下单的货物数量
    5. ASN Stock已经下了到货通知书但还没有确认到货通知书的货物数量
    6. DN Stock已被下单但是还没有确认订单数量
    7. Pre Load预计到货货物数量
    8. Pre Sort已经到货卸货完成等待分拣的货物数量
    9. Sorted Stock货物分拣完成等待上架的货物数量
    10. Pick Stock发货单生成了拣货单等待拣货的货物数量
    11. Picked Stock已经拣货完成等待和司机交接的货物数量
    12. Back Order Stock欠货订单数量
  • Bin Stock
    1. Total Stock这个库位该产品的所有库存数量
    2. Pick Stock这个库位需要拣货的数量
    3. Picked Stock这个库位拣货完成的数量
    4. Move To Bin 移库,移库后,会根据库位属性,直接更新库存数量,如果库位全部移空,则该库位会更新为空库位
  • Empty Bin
    1. 空库位明细
  • Occupied Bin
    1. 非空库位明细

收货管理

  • ASN到货通知书状态
    1. ASN Status = 1, ASN到货通知书创建完成状态1是唯一可以删除和修改ASN信息的状态他会显示在Pre Delivery中即有了到货通知书但是还没有到货点击Confirm Delivery即确认货物已经到达ASN Status更新到2此时已经无法再修改ASN信息
    2. ASN Status = 2, 拓展开发为司机到货排队如果我们有很多司机到货这可以做成一个排队系统同时也可以让采购和销售看到到货信息减少不必要的邮件和电话沟通点击Finish Loading即确认货物已经卸货完成ASN Status更新到3,货物信息会出现在Sorting此时的ASN状态表示货物已卸到仓库等待分拣
    3. ASN Status = 3, 货物分拣是必须的一个流程没有货物分拣货物是无法上架的上架的原则就是货物整理好摆放到相对应的库位上点击Confirm SortedASN Status更新到4即确认分拣完成等待上架
    4. 此时移动Sorted页面会出现需要上架的货物明细点击Move To Bin上架完成当然系统会根据上架后的库位属性自动更新商品库存数量信息

发货管理

  • DN发货单状态
    1. DN Status = 1, DN发货单创建完成此时订单还是可以修改状态且系统中的库存数量不会发生任何改变点击Confirm OrderDN Status更新到2即订单已经被确认且无法更改同时系统中的货物库存数量会自动更新比如Can Order数量和Ordered数量
    2. DN Status = 2, 这是订单被确认等待生成拣货单的过程你可以点击单条订单Order Release来生成一个订单的拣货单你也可以点击Release All Order来将所有订单生成拣货单如果是所有订单Release那么会根据时间的先后进行库存匹配库存不足时会生成Back Order即欠货订单在这个过程中DN单号是会发生改变的如一家客户的多张订单会被统一到一张订单中进行拣货如客户订单无法满足会将未满足部分生成欠货订单欠货订单如果仍未得到匹配库存满足将不再生成新的订单DN Status会更新到3即等待拣货的过程已确认的订单和欠货订单都时Status为2的状态
    3. DN Status = 3, 直接拣货此功能会出现在Beta5更新
    4. DN Status = 4, 发货交接此功能会出现在Beta6更新
    5. DN Status = 5, 客户签收此功能会出现在Beta7更新
    6. DN Status = 6, 对账结束订单关闭此功能会出现在Beta7更新

退货管理

  • RO退货订单 此功能将会出现在正式版中

运费管理

  • Transportation Fee API已经完成前端暂未更新入口如果想要使用可以直接调用Payment下的Transportation Fee API进行使用运费自动计算模块已经做进收发货流程中

界面截图