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已完成

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

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

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

原文地址:https://www.cnblogs.com/riyueqian/p/15562618.html