单线程,多核有点头痛哈,线程不安全,通过static变量也控制不住,本来打算用文件锁来控制的,结果也扑街了哈,因为是通过网页接口获取信息的,所以最后考虑在PHP接口中控制单线程,要做的东西其实很简单的,就是远程获取最新的没有打印的订单,返回给安装设备,然后安卓设备再通知单到小票机打印即可,原先的流程设计有点奇葩了,这几天一直反馈重复打印好几张小票的bug,然后下了血本要解决到这个bug。
先来说说需求,多台收银安卓平板,一个小票机,小票机通过蓝牙连接了一台收银安卓平板A,小票打印都要靠A,我们需要 A有本机订单的时候直接打印小票,然后还要做个定时器,定时去找最新付款的订单,打印小票。
找最新付款的订单的时候我犯了一个错误,我获取最新订单的时候没有给记录行加锁,导致了后续一系列的错误,数据库里有个字段来控制这个订单有没有打印小票,原先的流程是这样子的,接口B获取最新付款的订单信息,没有给记录加锁;接口C修改订单信息为已打印,打印成功之后调用,这里也是一个错误,成功就提交一次,太浪费资源了哈。
改进后的流程是接口D获取最新付款的订单信息并设定订单为已打印,这里的一系列操作都要放到事务里,通过for update给记录行上锁,也同时处理android端的单线程问题,保证不会打印同一张小票;接口E修改订单信息为未打印,如果打印失败,需要调用这个接口。
程序员思路很重要哈,千万别盲目写代码,到头来写好了又不想丢,缝缝补补最后还不能用就尴尬了哈。
热门文章
Could not resolve com.github.licheedev.SomeLibrary:myutils:0.02.其实就是原作者弃用了这个库包。
android studio4.2.1报错不要慌,管理员权限开启试试,特别是新装的windows10系统
Android平板链接扫码枪,扫码枪扫码老是丢首位数字,后来发现是谷歌输入法的问题
针对我们的老项目,不建议升级ide,今天升级了下Android studio,结果就报错了Could not determine java version from '11.0.8'.不用怕搞不定我们直接把Android studio降级就行了哈。
Android原生开发单线程解决方案,解决不了我们就换个思路,通过接口来保证单线程,先想后写才是一个程序员大佬的正确打开方式哈。
为大家分享一款开源又免费的行为验证码