单线程,多核有点头痛哈,线程不安全,通过static变量也控制不住,本来打算用文件锁来控制的,结果也扑街了哈,因为是通过网页接口获取信息的,所以最后考虑在PHP接口中控制单线程,要做的东西其实很简单的,就是远程获取最新的没有打印的订单,返回给安装设备,然后安卓设备再通知单到小票机打印即可,原先的流程设计有点奇葩了,这几天一直反馈重复打印好几张小票的bug,然后下了血本要解决到这个bug。

先来说说需求,多台收银安卓平板,一个小票机,小票机通过蓝牙连接了一台收银安卓平板A,小票打印都要靠A,我们需要 A有本机订单的时候直接打印小票,然后还要做个定时器,定时去找最新付款的订单,打印小票。

找最新付款的订单的时候我犯了一个错误,我获取最新订单的时候没有给记录行加锁,导致了后续一系列的错误,数据库里有个字段来控制这个订单有没有打印小票,原先的流程是这样子的,接口B获取最新付款的订单信息,没有给记录加锁;接口C修改订单信息为已打印,打印成功之后调用,这里也是一个错误,成功就提交一次,太浪费资源了哈。

改进后的流程是接口D获取最新付款的订单信息并设定订单为已打印,这里的一系列操作都要放到事务里,通过for update给记录行上锁,也同时处理android端的单线程问题,保证不会打印同一张小票;接口E修改订单信息为未打印,如果打印失败,需要调用这个接口。

程序员思路很重要哈,千万别盲目写代码,到头来写好了又不想丢,缝缝补补最后还不能用就尴尬了哈。

本文链接:http://www.20m8.com/120.html

热门文章

android studio Gradle Build Running特别慢解决方案

查看全文 hehu158 于 2021-03-06 13:04 发表在 APP ( 阅读:3904 )

Could not resolve com.github.licheedev.SomeLibrary:myutils:0.02解决方案

Could not resolve com.github.licheedev.SomeLibrary:myutils:0.02.其实就是原作者弃用了这个库包。

查看全文 hehu158 于 2021-06-17 09:47 发表在 APP ( 阅读:3253 )

android studio 4.2.1 新装提示Failed to load JVM DLL

android studio4.2.1报错不要慌,管理员权限开启试试,特别是新装的windows10系统

查看全文 hehu158 于 2021-06-03 12:33 发表在 APP ( 阅读:2387 )

Hbuilder APP开发修改

查看全文 hehu158 于 2018-11-06 13:55 发表在 APP ( 阅读:2200 )

Android平板原生APP对接扫码枪丢首位数字

Android平板链接扫码枪,扫码枪扫码老是丢首位数字,后来发现是谷歌输入法的问题

查看全文 hehu158 于 2020-07-24 09:47 发表在 APP ( 阅读:2009 )

Could not determine java version from '11.0.8'.

针对我们的老项目,不建议升级ide,今天升级了下Android studio,结果就报错了Could not determine java version from '11.0.8'.不用怕搞不定我们直接把Android studio降级就行了哈。

查看全文 hehu158 于 2021-06-05 15:41 发表在 APP ( 阅读:1999 )

Android原生开发单线程解决方案

Android原生开发单线程解决方案,解决不了我们就换个思路,通过接口来保证单线程,先想后写才是一个程序员大佬的正确打开方式哈。

查看全文 hehu158 于 2020-10-16 10:45 发表在 APP ( 阅读:1783 )

AJ-Captcha for UNI-APP VUE3 VITE实例

为大家分享一款开源又免费的行为验证码

查看全文 hehu158 于 2023-01-03 13:57 发表在 APP ( 阅读:1004 )