2个程序员1周拿下4万块小程序项目的技术要点
作者:互联网
本文给大家分享一个真实的商业项目,和其中的技术要点。这其中也体现了菜鸟程序员和有经验程序员所思考问题的区别。请认真看到底,应该可以学到很多书本和培训教程里学不到的东西。
这个项目规模不大,2个程序员,兼职1个星期完成,费用是4万块,但是其中涉及到多个要点。
1. 搞清楚痛点和需求
这是一个服装厂,年产值在1亿左右。
车间是一个非自动流水线,一框框货物,每个工人做一道工序,再传给下一个工人。
这里的重点是工人在传给下一个工人之前,要拿着框子里的一个条码,去电脑上录入产量。这样才能反映到生产进度上,这样才能给工人算工资。
公司面临的问题是,工人要站起来走到电脑上刷卡,这很麻烦,影响生产效率,工人也抱怨比较多。
工厂里基本都是夜以继日的赶订单,提高每天的产量是老板很看重的事情,所以老板也很想解决这个问题。
认清痛点,不忘初心,方得始终。搞不清楚需求是软件失败的最重要原因。
2. 技术选型
他们原本打算上一套硬件系统,包括磁卡,刷卡机,控制器。给每个工位安装刷卡机,工人可以在座位上直接刷卡。这一套预算估计在15万以上,要上很多硬件。
老程序员建议他们不要上这套,因为:
- 硬件维护成本比较高,设备经常出故障,需要维修。
- 可扩展性不好,多一个工人就要多安装一个刷卡器。
后来考虑要不开发一个App,但是App的问题是:
- 要同时支持iPhone和安卓。虽然这个问题可以用React Native等技术来解决,一套代码,两个平台上运行,但下面的问题很难解决。
- 厂里的人用的手机品牌,型号差异太大,App的兼容问题会很大。
- 要不断的随着手机操作系统的更新而更新App版本。
- 需要先安装才能使用。厂里很多老人,需要找人帮他们安装,实施成本很高。
老程序建议开发一个小程序,上面所有的问题都由微信来解决,技术团队只要做功能就行了。
大家也担心是不是所有人都安装了微信,于是做了一个调查:厂里三百多工人,只有3个年纪大的,手机没有安装微信。于是就决定做小程序了。
团队成员就两个人,一个做小程序开发,一个基于原有系统开发后台的接口,一个星期搞定了功能,进入了用户测试阶段。
做技术选型,只选对的,不选贵的。不能只考虑开发,还得考虑:
1.软件后续维护支持成本
2.软件的实施是否容易
软件最后是否能成功,这两点也许比开发本身更重要。
3. 功能设计
这个小程序真的非常简单,就是给员工刷条码,输入产量。
界面最上面一个巨大的“点击扫码”按钮,点击就可以刷卡:
大致流程是这样的:
-
小程序打开自动启动扫码界面,不需要思考,只需要扫码。
-
先扫工牌,识别你是谁;再扫工位,知道你在做什么;
这个过程只要做一次,小程序就记住了。以后只需要反复扫产量码。
如果扫码顺序不对,小程序会提示错误,让你继续扫。
-
扫产量码录入产量
支持连续扫,扫一下给一个提示音,并继续停留在扫码界面。团队做了测试,一分钟可以扫码50次以上,也就是说一个工人一天的工作量,扫码时间一分钟就够了。这个消耗可以说是极低了。
扫码的结果有3种情况:
- 扫码成功,继续扫码;
- 扫码失败,原因可能是重复扫码,后台故障等。
- 进一步选择,一个工位可能有多个工序,出现这种情况要求工人选择工序。
除了这个核心功能,还有一个功能对小程序的成功很重要,就是:产量查询功能。有了这个功能,工人有更大动力使用小程序,所以软件推行非常顺利。
工人非常关心他的产量是否成功输入到系统,因为这关系到他的工资。有了小程序,他们可以方便的查询产量,心里很踏实。
另外还有一个给车间主任查询一筐货的生产情况的界面。
以后可以考虑添加的功能:
1.查询工资
2.产量图表:通过自身每天产量对比,和同事产量对比,制造气氛,激励工人加油干,提高产量。
4. 技术栈
项目的技术栈比较简单:
- 最上面是微信小程序,使用小程序的技术
-
后台部署在阿里云上
-
使用Nginx做Web服务器
-
使用SpringBoot技术,其中包括Restful API,业务层等
-
数据库使用MySQL,使用MyBatis做数据库访问
-
API接口使用HTTPS,数字证书在阿里云免费申请
-
使用Postman测试API接口,用Swagger记录接口格式
下面进入重点部分,这个项目要成功有几个重点:
- 好用,好用,还是好用!
- 安全,安全,还是安全!
5. 用户体验
软件是给厂里的工人使用的,其中包括很多中老年人,所以好用是必须的。
在这个方面,项目考虑以下几个点:
1.不用登录,打开就能用。如果打开再登陆,估计一半的人会在这里遇到困难。
2.极简的界面:就几个大的按钮,核心操作就1个扫码。
3.打开小程序,马上就开始扫码,无脑操作。
4.语音提示:成功和失败有不同的提示音,不识字也没关系。
5.具体错误信息提示清晰直白。
除了扫码以外,还有2个功能激励用户:
- 产量查询功能,激励工人使用。
- 货物查询功能,激励车间主任。
这样,一个简单易用,又能给使用者带来额外好处的小程序就诞生了。
6. 安全问题
方便和安全基本上是对立的,你要方便就会牺牲安全,你要安全就没那么方便。
请记住,企业级的软件,安全比方便更重要。如果客户数据被盗取,或者有漏洞,工人可以多输入产量,这些损失都不是十万二十万能解决的。
为了安全,这个项目做了几件事情:
6.1 HTTPS和数字证书
使用HTTPS已经成为现在网站开发的标配,它可以确保客户端和服务器端的通信不会被中间人串改。
阿里云上可以购买数字证书,也可以申请免费的:
6.2 保证接口的幂等性,确保并发情况下同一张卡只能刷一次
数据库事务是必须的,除此之外,还有两个要点:
-
在写入产量前检查数据状态,已经刷过的卡不能被刷,也就是图中的步骤B。
-
在步骤C使用悲观锁,防止在极短的时间内,出现脏写和脏读的情况。
如果两个请求同时在步骤B检查了状态没问题,然后同时进入步骤C,就会造成一个请求覆盖了另外一个请求的问题,造成多次记录产量。使用悲观锁会让第二个请求失败,避免脏写。
6.3 使用加密的二维码替换条码。
他们原本有一套条码系统在用:
这个条码背后就是一串数字,表示某一框货物:
18000000372199
员工号也是一个类似的条码。
这样的条码很容易被伪造,被猜测。比如某个人的工牌条码是:0100428 他可以很容猜测出其他人的条码为429,430等,然后自己生成一个条码就可以假冒那个人刷卡,同样也可以猜测和伪造产量条码,自己本来只干了一筐货,结果刷了10框货物进去,自己给自己加工资。
解决方法就是使用一个加密的二维码:
首先使用二维码替换上面的条码,可以承载更大的信息量。
然后给二维码用256位的AES加密算法加密,这样二维码扫出来是这样一串:
uRTRJ9DL5kpvoQK/bGDEOQw8Nt79tgrIoILtHm6scEc=--wm3sFbUizqeRbH69g8PFFw==
如果没有秘钥,基本上打死也猜不出,有量子计算机的土豪除外。
本来这个小程序三天就能开发完,但是在这个加密上多花了一些时间,主要是后台Java加密和前台JS的加密对不上。
6.4 前台做验证,假冒的二维码到不了后台
小程序有密钥,直接在前台做加解密工作,无效的二维码小程序直接拒掉。
另外,二维码里有一定编码规则,不符合编码规则的,前台也直接拒掉。
刷卡顺序,数据完整性等也都是在前台做。这样既减轻了后台的压力,也把一些风险在早期排除掉。
7. 性能和压力测试
还有一个重要的点,就是要快,刷卡必须在毫秒级完成。
总时间 = 小程序处理时间 + 网络时间 + API处理时间。
最开始API的自己处理时间就超过了1秒,这肯定不行。
所以API在后台进行了一定的优化,主要包括:
- 在关键的查询列上添加索引。
- 适当做了数据冗余,减少多表查询。
这样后台API基本保持在100-500毫秒之间。整个刷卡稳稳的在1秒之内。
一次请求快,100个请求同时来了呢?
做成一个商业系统,必须估计用户的并发数量,并做一定的压力测试。
项目使用JMeter模拟100个线程,连续压测1个小时。测试过程平均的响应时间保持在1秒之内,没有出现失败请求的情况。
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
标签:万块,条码,扫码,Python,程序,程序员,拿下,工人,产量 来源: https://blog.csdn.net/m0_59235945/article/details/122813676