前言

最近在做公司的仓库管理系统,这个系统设计到商品出库、回仓、损耗等。系统在设计之初就一直到考虑仓库人员使用的方便性,提高他们的工作效率。但是不管我们怎样做,仓库那边的人员总说系统复杂,不会用。现在我们做的是只需要他们点击就可以完成,很少有要他们输入的地方,还觉得复杂,作为开发的我也觉得很无奈,我们的系统也确实存在问题,但是我想操作已经是经量简化了。上周分仓那边的说,忘记了自己的登录用户密码,密码都是123456,这样都能忘记,我还能说什么……,似乎扯远了。

扫码出库系统

我们应该都去超市购物过吧。不知道大家后没有注意一件事情:超市的收银人员,用条码枪扫码之后,商品信息就被录入进了电脑然后生成了我们的购物单。再再次体验这个之后,大致流程:收银人员,操作电脑新建购物单 –> 条码枪扫码添加商品(同一个商品扫码多次商品数量就是多少次,或者电脑输入,或者电脑删除) –> 扫码过程完成,开始结账 –> 结账完成,生成一个有效的购物单。如图:

我们的扫码出库系统,其实和这个基本一样,最大的却别是超市的收银的电脑和扫码枪是通过有线连接的,我们的扫码机是手机,电脑还是电脑,之前是没有连接的。为什么不用扫码枪了?仓库的自动化程度不高啊。大学时在日本的汽车配件厂上班时,那边的商品出库只需要条码枪扫码就OK,自动化程度很高了,出库人员只需要在PC端查看数据就好了。然而4年后,我们的小企业的仓库的自动化程度还没这么高。
那么数据怎么同步呢?

系统构建

1.PC端点击新建出库单,同时生成出库单二维码;
2.手机扫出库单二维码,开始添加商品;
3.手机端扫商品二维码,PC端就获取到了扫码的商品信息;(PC端也具备商品增加,删除,修改数量的功能);
4.PC端点击完成,生成一个有效的出库单,流程结束。

系统实现

其实整个这部分的系统难度在手机端扫码数据同步到PC端显示。这里我采用的socket。但是搞Python后台人员,实现不了socket服务,这下就尴尬了,他说使用ajax轮询,……。没办法,我只好用node.js写一个桥接了。
这部分桥接流程:
1.手机扫码,调用node.js的接口,
2.node.js调用Python接口,提交信息,同时获取出库单里的数据,(后台是用Python写的);
3.node.js服务,使用socket,向PC端发送数据;
4.PC端socke监听,获取数据,刷新页面。

这个流程在速度上面是没有有线方式快的,而且系统严重依赖网络,但是有一个优点–便宜,且可以解决问题。

具体操作

1.Node.js环境的搭建
由于Ubuntu系统中已经有node和npm只是版本比较老,我的是0.10.17,这个是不知js里面的严格模式。那么我们就升级:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

参考这里。
如果需要安装的可以百度,方法基本超不多Linux环境下NodeJS的安装配置(HelloWorld)
2.express的安装
这个基本百度一堆:
Mac下express的安装和新建项目;
安装4.x版本的express开发框架;
3.最后
上传代码到服务器,启动服务测试。

桥接部分技术栈

Node.js + request + socket.io。其实express可用可不用。

项目目录

1.express框架:
– 项目目录
– node_modules // 用到的模块
– bin // http配置
– public //
– routes // 路由目录
– socketio.js // 代码
– views // 视图文件
app.js //
package.json // 包管理json文件
实现代码:
socketio.js

var express = require('express');
var router = express.Router();
var socket_io = require('socket.io');
var request = require('request');var socket_global = null;router.all('/reptile', function(req, res, next) {var param = req.query || req.params; var sku_code = param.sku_code;if (sku_code == null || sku_code == '') {var data = {};  // 返回的json数据data.msg = '请传入参数';data.status = '101';res.end(JSON.stringify(data));return;}setTimeout(function(){var urlStr = 'Python后台接口地址';request(urlStr, function (error, response, body) {if (!error && response.statusCode == 200) {// socket向PC端发送数据socket_global.emit('message', body);res.end(body);}else{var data = {};  // 返回的json数据data.msg = '操作失败';data.status = '102';res.end(JSON.stringify(data));}})  },30);// 不加延时  socket_global.emit('message', body);  这里会报错 服务启动不了
});router.prepareSocketIO = function (server) {var io = socket_io.listen(server);io.sockets.on('connection', function (socket) {socket_global = socket;socket_global.emit('message', '启动服务了');
//      socket_global.on('login', function (obj) {//              console.log('接收到的消息:' + obj);
//          socket_global.emit('login', '登录成功');
//      });
//      socket_global.on('message', function (msg) {//              console.log("客户端发送来的消息:" + msg);
//          socket_global.emit('message', msg);
//      });});
};module.exports = router;

socketio.js

var scoketio = require('./routes/scoketio');
// 路由
app.use('/', scoketio);app.ready=function(server){scoketio.prepareSocketIO(server);
};

bin/www

app.ready(server); //添加这句

2.无express框架:
– 项目目录
– node_modules // 用到的模块
socketio.js // 代码
package.json // 包管理json文件
这里的package.json文件我们可以直接复制上面的就可以了,把不需要的模块去掉就OK。
实现代码:

var http = require('http');
var request = require('request');var socket_global = null;var hostname = 'localhost';
var port = 3003;var server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader("Content-Type", "application/json;charset=utf-8");res.setHeader("Access-Control-Allow-Origin", "http://192.168.168.176:8080");res.setHeader("Access-Control-Allow-Credentials", true);res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");res.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");res.setHeader("X-Powered-By", ' 4.2.1');var urls = req.url.split('=');var sku_code = urls[1];var sku_str = urls[0];if (sku_str == '/reptile?sku_code') {var urlStr = 'Python后台接口地址';request(urlStr, function (error, response, body) {if (!error && response.statusCode == 200) {socket_global.emit('message', body);res.end(body);}else{var data = {};  // 返回的json数据data.msg = '操作失败';data.status = '103';res.end(JSON.stringify(data));}})  }
});
var io = require('socket.io')(server);
io.on('connection', function(client){socket_global = client;socket_global.emit("link",'link');socket_global.on('message', function(data){socket_global.emit("message",data);});socket_global.on('login', function(data){console.log(data);});
});
server.listen(port, hostname, () => {console.log(`服务器运行在 http://${hostname}:${port}/`);
});

总结

代码部分并没有什么难点。难点在业务上面我们需要仔细分析需求,然后拆分系统的构建,使用什么技术栈实现。在这个过程中,这个方式是我提出的,实现思路也是我提出的,最后系统的实现,前端和后台node.js的桥接部分也是我做的,似乎做的很多,但是其实系统还是很简陋的,只能说是实现功能。但是在这个过程中需要学习的,解决问题的思路,怎么分析需求,拆分需求,使用什么技术解决什么问题。同时也学习了在linux上面安装node和express。但是这个还有一个问题就是没有实现https请求。这个等明天拿到了证书再做,之前做过在windows server 2012上node环境的证书的设置Node.js配置支持https和http。

一种仓库扫码出库系统的实现相关推荐

  1. [附源码]计算机毕业设计springboot疫苗药品批量扫码识别追溯系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  2. java毕业生设计疫苗药品批量扫码识别追溯系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计疫苗药品批量扫码识别追溯系统计算机源码+系统+mysql+调试部署+lw java毕业生设计疫苗药品批量扫码识别追溯系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: ...

  3. 基于JAVA疫苗药品批量扫码识别追溯系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA疫苗药品批量扫码识别追溯系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA疫苗药品批量扫码识别追溯系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目 ...

  4. 计算机毕业设计PHP疫苗药品批量扫码识别追溯系统(源码+程序+VUE+lw+部署)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: phpStudy+ Vscode +Mysql5.7 + HBuilderX+Navicat11+Vue ...

  5. node.js+Express计算机毕业设计疫苗药品批量扫码识别追溯系统(程序+LW+部署)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode +Mysql5.7 + HBuilderX+Navicat11+Vue+ ...

  6. [附源码]Python计算机毕业设计Django疫苗药品批量扫码识别追溯系统

    项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...

  7. java计算机毕业设计疫苗药品批量扫码识别追溯系统源码+数据库+系统+lw文档+部署

    java计算机毕业设计疫苗药品批量扫码识别追溯系统源码+数据库+系统+lw文档+部署 java计算机毕业设计疫苗药品批量扫码识别追溯系统源码+数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B ...

  8. 手机点餐系统概述_疫情之下,无接触点餐模式再成热搜,扫码点餐系统能不能普及?...

    近期,广东省逐步恢复堂食,提倡隔桌就餐!宁波.成都等地餐饮店也在慢慢复工,倡导隔桌就餐,间距至少1.5米.随着复工复产政策的执行,这类情况也正在其他各地重演. 受疫情影响,餐饮行业面临巨大改革,其中线 ...

  9. 计算机毕业设计Java疫苗药品批量扫码识别追溯系统(系统+源码+mysql数据库+Lw文档)

    计算机毕业设计Java疫苗药品批量扫码识别追溯系统(系统+源码+mysql数据库+Lw文档) 计算机毕业设计Java疫苗药品批量扫码识别追溯系统(系统+源码+mysql数据库+Lw文档) 本源码技术栈 ...

最新文章

  1. 让 PM 全面理解深度学习
  2. python 内存中的文件操作 StringIO cStringIO 简介
  3. MySQL实验四数据库的查询_MySQL数据库实验四:嵌套查询
  4. 巡逻机器人用应用的pc端车牌识别
  5. idea展示runDashboard的窗口
  6. 取消对 null 指针“l”的引用。_彻底理解链表中为何使用二级指针或者一级指针的引用...
  7. 消息(5)——WSE增强的web服务套件,MTOM附件
  8. 了解计算机中的信息编码教案,《信息编码》教学设计
  9. 包管理conda操作,常用conda命令
  10. PDF文件点击打印按钮没反应
  11. ant如何形成时间轴和图库_弯弓新媒体创始人梅波:企业如何构建私域流量
  12. 分体式水晶头_六类水晶头的接线方法(分体式安装图解)
  13. Idea一不小心把Main menu头部菜单关闭还原的解决办法
  14. Android图片轮播控件 如果对你有帮助请star哦!
  15. 怎么在电脑上创建一个虚拟机
  16. 【编译原理复习】第六章---- 属性文法和语法制导翻译
  17. 【转】-ECshop数据库表结构
  18. 方向导数、梯度、等高线、数量场与向量场
  19. 5G射频芯片中的半导体
  20. shell脚本的编写

热门文章

  1. 计算机图形学:曲线曲面基本理论
  2. WLAN工作过程——第一阶段AP上线
  3. CNN基础知识 || softmax与交叉熵
  4. ubuntu20.04使用浙大开源包lidar_IMU_calib
  5. 如何使用VBA实现将工作簿中全部表格转换为区域
  6. CAN302电商技术 个人笔记
  7. 牛逼了!90后小哥,只用了5年时间就成为了Python技术大牛
  8. 20230402英语学习
  9. led屏背后线路安装图解_推荐厂家:肇庆LED透明屏安装欢迎来电咨询
  10. 录制badboy脚本的时候弹出脚本错误