• Android POS开发


    如何开发出一个POS收款应用

    一、初始化数据

    初始化数据一般是在欢迎页面,也就是WelcomeActivity。不管是不是POS应用,都会有都会有所谓的欢迎页面。

    欢迎页面的主要作用是为了初始化基础数据和获取权限。

    在POS应用中欢迎页面主要是初始化以下数据:

    款台号、机构号、是否绑定、ip地址。

    像这些数据一般是从共享内存中获取出来SharePrefences的,但有些数据可以设置成死的数据,例如ip地址。

    如何还有其他需要初始化的数据也是在这里初始化,初始化的数据一般是全局变量。

    创建一个类叫Variable,主要通过它保存全局变量,例如:

    /**

    全局变量

    **/

    public class Variable{

    public static String posNo;//款台号

    public static String shopId;//机构号

    }

    除了Variable用来保存变量外,我们还需要Constants类来保存静态的数据和全局参数类Global。

    Constants一般是用来保存地址、支付方式id等基本不变的数据,例如如下所示:

    /**

    静态数据

    **/

    public class Constants{

    public staitc final WECHAT_PAY_URL = "crmp/pay/wechat";

    public static final int WECHAT_PATY = 1;

    }

    而Global类是用来保存全局参数的,主要是当前的订单、退货单、支付方式等。

    代码如下:

    public class Global{

    public static Global instance;

    private Order order;//订单

    private Order refundOrder;//退货单

    private List<Payment> payments;//支付方式

    public static Global getInstance(){

    if(instance == null){

    synchronized(Global.class){

    if(instance == null){

    instance = new Global();

    }

    }

    }

    }

    }

    处理完数据后,开始跳转到登录页面,即LoginActivity。

    二、登录页面

    在登录页面也需要初始化一些数据,例如:

    Variable.model = android.os.Build.MODEL;//设备型号

    Variable.LocalIp;//本地ip,一般会区分wifi和电话卡

    Varialbe.version;//版本号

    Varialbe.terminalNo;//终端号

    下面是登录的流程:

    点击登录按钮——》检查版本——》登录和绑定——》登录成功并跳转页面

    1.检查版本

    当前版本不是最新版本时,就下载并安装最新的版本,如何是最新的版本,那么就开始登录和绑定。

    步骤如下:

    (1)调用获取当前最新版本的信息

    (2)判断返回的版本号是否大于当前版本号,如果大于就下载并更新,否则调用登录并绑定接口

    2.登录与绑定

    步骤如下:

    (1)发送参数

    一般一个收款员会绑定一个收款台,那么登录的时候肯定需要款台号,登录需要的参数有以下数据:

    账号、密码、本地ip、终端号、款台号、机构号、租户id。

    本地ip:是为了限制用户在某个特定的场所使用或电话卡使用,例如大大降低了不法分子的攻击。

    终端号:每个款台号都会有一个唯一的终端号,类似于出厂时设置的设备id

    机构号:也就是门店id,就是你所在的门店

    租户id:租户的id

    (2)返回参数

    接口调用成功后,一般会返回以下参数:

    flag:成功标识

    payIp:支付地址

    saleIp:销售地址

    wxUrl:微信地址

    sercet:安全码

    shopId:机构号

    tenantId:租户id

    payments:支付方式列表

    posId:款台号

    posNum:款台数量

    ckbbqx:查看班表权限

    storeId:商户id

    copies:打印份数

    ifAll:是否统收

    ifReturn:退货权限

    xpName小票头部名称

    ifDiscount:前台折扣

    ifFigure:抹零标记

    storeName:店铺名

    ghNo:

    ifQr:是否可以领积分

    wxpayAccount:微信支付账号

    wxpayAccountName:微信支付账号名称

    wxShop:微信门店编号

    mChid:微信支付商户号

    alipayAccoountName:支付宝商户名

    alipayAppid:支付宝appid

    alipayAccount:支付包账号

    koubeiShopid:口碑

    获取成功后,更新这些数据。

    登录成功后开始跳转到购物车页面ShoppingCatActivity

    三、购物车页面

    进入到购车页面后,才是一个订单开始,需要实例化订单类Order,并把订单对象Order保存到全局参数类Global中。

    订单号有几种生成方式,一种是调用接口去数据库获取查询最新的流水号,并加1。另一种是通过时间和款台号的拼接,例如 posNo+dateString

    订单的数据一般有

    订单编号、订单总额、已支付金额、剩余金额、折扣金额、优惠劵折扣金额、优惠卷折率、总优惠卷金额、满减金额、会员折扣金额、订单应付金额、

    收款员账号、收款员姓名、管理卡卡号、管理员、收款台、机构号、机构名称、旧款台号、旧流水号、参与折扣的优惠卷号码、参与折扣的优惠卷规则、

    交易参考号、会员积分、发票链接、已退金额、扣除金额、支付方式列表、商品列表、所赠优惠卷、所用劵、银行卡记录。

    订单状态有:未创建、未支付、部分支付、待上传、已完成。

    创建订单时就初始化以下数据:

    款台号、订单号、收款员账号、收款员名称、机构号、机构名称

    一般购物车页面有,选择商品和结算这两个功能。

    1.选择商品

    收款员账号有统收和非统收之分,统收的账号选择商品时需要输入金额,非统收的不需要输入金额。这个统收的标识数据在登录时就已经获取到数据了。

    步骤如下:

    (1)点击选择按钮,进入到选择商品页面

    (2)判断是否是统收,是就获取商品列表

    商品的属性如下:

    id:商品编号

    count:商品数量

    finalAmount:折后价

    originalAmount:商品原总价

    originalPrice:原单价

    finalPrice:折后单价

    discountAmount:折扣总额

    disPrice:折扣

    cAmount:优惠分摊单价

    cPrice:优惠分摊单价

    mjRuleid:满减规则id

    mjDis:满减金额

    mjPrice:满减金额

    mjRate:蛮近折扣率

    disRuleId:折扣规则

    disNum:享受打折的数量

    disRate:均价折扣率

    vipDisRule:会员折扣规则

    vipDisPrice:会员折扣金额

    vipDiscountRate:会员折扣率

    vipDisType:折扣类型

    vipScoreAmount:会员积分金额

    vipScoreTimes:会员积分倍数

    vipScoreRatio:会员积分比

    vipScore:会员积分

    vipScoreRule:会员积分规则

    integral:商品积分

    code:商品代码

    barcode:商品条码

    unit:单位

    name:商品名称

    vipprice:会员价

    disctype:折扣类型

    ifvip:同时会员折扣

    salenum:已销售数量

    num:限量数额

    disvalue:折扣值

    startdate:开始日期

    enddate:结算日期

    iftime:特殊时段

    conNo:合同号

    ifzj:正价码

    ifzjName:正价码

    seq:商品序号

    htSeq:合同序号

    refundedCount:已退金额

    paytype:支付类型

    (3)点击商品,并输入价格加入购物车,good信息加入order列表

    (4)调用order的计算方法计算金额

    步骤:

    订单和商品都要calculate方法分别是计算订单或商品的价格

    商品的calculate方法:

    商品的calculate有非会员折扣和会员折扣,

    非会员折扣的计算方法不用算出折扣,原单价就是最终价格originalPrice,总价格就是count乘以originalPrice

    而会员折扣,通过原单价和会员折扣比例的乘积计算金额。

    订单的calculate方法:

    遍历商品,并执行商品的calculate方法计算出订单的总原价、总折扣、vip折扣等数据。

    遍历完后,计算订单的应付金额、剩余金额,应付金额=原订单总额-总折扣

    (5)刷新页面

     2.结算

    步骤:

    设置订单为未支付状态,设置收款员、时间、款台号、合同号

    商品合同号要记录:不同商品的合同号可能相同,记录每个合同号的商品数量。

    计算订单要支付的金额,要支付的金额等于应付金额。

    保存订单到本地缓存。

    跳转到支付页面

    四、支付页面

    进入支付页面要初始化以下数据:

    (1)要支付的订单order,这个订单一般是保存到本地缓存中

    (2)展示支付列表

    支付方式的属性有以下:

    name:支付方式名称

    amount:支付金额

    oAmount:溢余金额

    change:找零金额

    code:支付类型

    couponcode:优惠卷代码

    reAmount:已退金额

    fxRate:外汇

    ifintegral:是否积分

    ifchange:是否找零

    fxrate:外币汇率

    showName:展示名称

    (3)点击支付

    支付方式有:

    (1)支付宝

    获取到支付宝的串码后,调用支付宝的支付接口,需要以下参数:

    串码、订单编号、等数据。

    调用成功后,执行查询支付宝查询接口,查询是否支付成功。

    一般分为三种状态,等待支付、支付成功、支付失败

    等待支付,需要每隔5秒查询一次持续10次,直到查询接口返回支付成功或失败为止

    支付成功剩余金额为0后,上传支付结果,然后更新订单金额并保存订单信息到本地

    接下是核销优惠卷。

    调用上传接口:

    获取设备时间,然后调用保存订单接口,最后调用赠送优惠卷接口。

    (2)微信

    (3)vip积分

    (4)优惠卷

    (5)现金

    五、订单列表

    订单有五种状态,0未创建,1未支付,2部分支付,3待上传,4已完成

    订单列表显示的数据主要有:

    本地保存的:部分支付、或上传失败的订单。

    已完成支付的订单,通过接口获取。

  • 相关阅读:
    Ubuntu下SSH安装
    ubuntu 12.04网络配置之设置静态iP
    解决JavaFTP上传文件假死问题
    解决Spring配置文件不显示design和source, namespace 问题
    JMeter出现“the target server failed to respond“的解决办法
    appium无ID、name定位处理【转】
    安装github for windows问题解决
    adb devices 找不到设备
    接口测试总结
    Jmeter之逻辑控制器(Logic Controller)【转】
  • 原文地址:https://www.cnblogs.com/riyueqian/p/15562618.html
Copyright © 2020-2023  润新知