离线交易额度限制
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index cde67f4..4f90429 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -487,6 +487,11 @@
"lock" -> throw CardPayFailError("卡已锁定")
else -> throw CardPayFailError("卡状态:${whiteRecord.status}")
}
+
+ val payamt = pos.getTransdtlOfflineAmt(offRecord.transdate!!, offRecord.cardno!!, offRecord.cardphyid!!)
+ if ((payamt + offRecord.payamt) > sysRecord.maxDayOfflineAmt) {
+ throw CardPayFailError("已离线交易" + String.format("%.02f元", payamt / 100.0f))
+ }
}
private fun initTransdtlOffline() {
diff --git a/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
index cfc459c..d7ced8c 100644
--- a/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
@@ -3,7 +3,9 @@
import android.os.AsyncTask
import com.supwisdom.activities.SPApplication
import com.supwisdom.bean.BaseResp
+import com.supwisdom.exception.WhiteListError
import com.supwisdom.service.EpayApiImpl
+import com.supwisdom.utils.FileUtil
import com.supwisdom.utils.PublicDef
/**
@@ -53,16 +55,22 @@
private inner class ClearWhiteList : AsyncTask<Void, Int, BaseResp>() {
override fun onPostExecute(resp: BaseResp) {
if (resp.retcode == PublicDef.SUCCESS) {
- iManageView.showOperResult("黑名单更新成功", "")
+ iManageView.showOperResult("白名单更新成功", "")
} else {
- iManageView.showOperResult("黑名单更新失败", resp.retmsg!!)
+ iManageView.showOperResult("白名单更新失败", resp.retmsg!!)
}
}
override fun doInBackground(vararg params: Void): BaseResp {
+ if (!pos.clearWhiteList()) {
+ return BaseResp(PublicDef.ERROR, "清空白名单失败")
+ }
+ val dyRecord = pos.getDynamicPara()
+ dyRecord!!.cardverno = "0"
+ pos.replaceDynamicPara(dyRecord)
return try {
EpayApiImpl().downloadWhitelist("0")
- BaseResp(PublicDef.ERROR, "更新成功")
+ BaseResp(PublicDef.SUCCESS, "更新成功")
} catch (ex: Exception) {
BaseResp(PublicDef.ERROR, ex.message)
}
@@ -72,13 +80,14 @@
private inner class OutTransdtl : AsyncTask<Void, Int, BaseResp>() {
override fun doInBackground(vararg params: Void): BaseResp {
var num = 0
-// val bm1List = pos.getTransdtlBM1(null)
-// if (bm1List != null) {
-// num += bm1List!!.size
-// for (i in bm1List!!.indices) {
-// FileUtil.writeDtlFile(bm1List!!.get(i).toString())
-// }
-// }
+ pos.getTransdtlOnline().forEach {
+ num++
+ FileUtil.writeDtlFile(it.toString())
+ }
+ pos.getTransdtlOffline().forEach {
+ num++
+ FileUtil.writeDtlFile(it.toString())
+ }
return BaseResp(PublicDef.SUCCESS, "共导出" + num + "笔")
}
diff --git a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
index 6cf2a8e..ec0c647 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -58,16 +58,17 @@
// } else {
// kvMap[index++] = ControlParaRecord("长连接使能>>", "启用")
// }
- if (SPApplication.getInstance().isOnline()) {
- kvMap[index++] = ControlParaRecord("网络状态>>", "联机")
- } else {
- kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
- }
+// if (SPApplication.getInstance().isOnline()) {
+// kvMap[index++] = ControlParaRecord("网络状态>>", "联机")
+// } else {
+// kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
+// }
kvMap[index++] = ControlParaRecord("成功显时间>>", "${sysRecord.sucShowtime}s")
kvMap[index++] = ControlParaRecord("失败显时间>>", "${sysRecord.failShowtime}s")
kvMap[index++] = ControlParaRecord("联机流水号>>", pos.getTransdtlOnlineMaxSeqno().toString())
kvMap[index++] = ControlParaRecord("离线流水号>>", pos.getTransdtlOfflineMaxSeqno().toString())
kvMap[index++] = ControlParaRecord("未上传流水>>", pos.getTransdtlUnconfirmNum().toString())
+ kvMap[index++] = ControlParaRecord("当天离线最大金额>>", String.format("%.02f元", sysRecord.maxDayOfflineAmt / 100.0f))
kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "${sysRecord.fixpayGap}s")
kvMap[index++] = ControlParaRecord("心跳间隔>>", "${sysRecord.heatBeat}s")
}
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index a89d80e..5182e5f 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -11,6 +11,7 @@
heatBeat,
offlineEnable,
maxOfflineDays,
+ maxDayOfflineAmt,
mngpasswd,
fixpayGap,
consumeShowtime,
diff --git a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
index 3617287..d2fd01f 100644
--- a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
@@ -13,7 +13,7 @@
class DBParaHelper private constructor(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
companion object {
private val DB_NAME = "db_para"
- private val VERSION = 1
+ private val VERSION = 2
val TABLE_NAME_SYSPARA = "tb_syspara"
val TABLE_NAME_DYNAMICPARA = "tb_dynamicpara"
@@ -74,6 +74,7 @@
+ BeanPropEnum.Syspara.heatBeat + " integer, "
+ BeanPropEnum.Syspara.offlineEnable + " integer, "
+ BeanPropEnum.Syspara.maxOfflineDays + " integer, "
+ + BeanPropEnum.Syspara.maxDayOfflineAmt + " integer, "
+ BeanPropEnum.Syspara.mngpasswd + " char(6), "
+ BeanPropEnum.Syspara.fixpayGap + " integer, "
+ BeanPropEnum.Syspara.consumeShowtime + " integer, "
@@ -95,6 +96,9 @@
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
if (oldVersion < newVersion) {
+ if (oldVersion < 2 && newVersion >= 2) {
+ db.execSQL("alter table $TABLE_NAME_SYSPARA add column ${BeanPropEnum.Syspara.maxDayOfflineAmt} integer")
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index 0f36600..660f201 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -149,6 +149,15 @@
}
}
+ fun clearWhiteList(): Boolean {
+ try {
+ whiteListDao.getLock().lock()
+ return whiteListDao.clear()
+ } finally {
+ whiteListDao.getLock().unlock()
+ }
+ }
+
fun getTransdtlOnlineMaxSeqno(): Int {
if (onlMaxSeqno == 0) {
try {
@@ -170,6 +179,15 @@
}
}
+ fun getTransdtlOnline(): List<TransdtlOnlineRecord> {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.getAll()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
fun getTransdtlOnlineUnconfirm(): List<TransdtlOnlineRecord> {
try {
transdtlOnlineDao.getLock().lock()
@@ -248,6 +266,24 @@
}
}
+ fun getTransdtlOffline(): List<TransdtlOfflineRecord> {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.getAll()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlOfflineAmt(date: String, cardno: String, cardphyid: String): Int {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.getOfflineAmt(date,cardno,cardphyid)
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
fun getTransdtlOfflineLast(): TransdtlOfflineRecord? {
try {
transdtlOfflineDao.getLock().lock()
diff --git a/app/src/main/java/com/supwisdom/db/SysParaDao.kt b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
index 14872aa..50de288 100644
--- a/app/src/main/java/com/supwisdom/db/SysParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
@@ -47,7 +47,6 @@
} finally {
db.endTransaction()
}
- return false
}
fun get(): SysParaRecord? {
@@ -88,6 +87,7 @@
val enable = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.offlineEnable.toString()))
record.offlineEnable = enable == 1
record.maxOfflineDays = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxOfflineDays.toString()))
+ record.maxDayOfflineAmt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxDayOfflineAmt.toString()))
record.mngPasswd = cursor.getString(cursor.getColumnIndex(BeanPropEnum.Syspara.mngpasswd.toString()))
record.fixpayGap = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.fixpayGap.toString()))
record.sucShowtime = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeShowtime.toString()))
@@ -108,6 +108,7 @@
values.put(BeanPropEnum.Syspara.offlineEnable.toString(), 0)
}
values.put(BeanPropEnum.Syspara.maxOfflineDays.toString(), record.maxOfflineDays)
+ values.put(BeanPropEnum.Syspara.maxDayOfflineAmt.toString(), record.maxDayOfflineAmt)
values.put(BeanPropEnum.Syspara.mngpasswd.toString(), record.mngPasswd)
values.put(BeanPropEnum.Syspara.fixpayGap.toString(), record.fixpayGap)
values.put(BeanPropEnum.Syspara.consumeShowtime.toString(), record.sucShowtime)
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
index fb9d0c0..8669aa8 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -56,6 +56,61 @@
return false
}
+ fun getAll(): List<TransdtlOfflineRecord> {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val orderby = BeanPropEnum.TransdtlOffline.devseqno.toString() + " desc"
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, orderby)
+ val list = ArrayList<TransdtlOfflineRecord>()
+ while (cursor != null && cursor.moveToNext()) {
+ list.add(getRecord(cursor))
+ }
+ return list
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun getOfflineAmt(date: String, cardno: String, cardphyid: String): Int {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ var sql = ("select sum(${BeanPropEnum.TransdtlOffline.payamt}) as sumamt from $TABLE where "
+ + BeanPropEnum.TransdtlOffline.transdate.toString() + "='" + date + "' and "
+ + BeanPropEnum.TransdtlOffline.cardno.toString() + "='" + cardno + "' and "
+ + BeanPropEnum.TransdtlOffline.cardphyid.toString() + "='" + cardphyid + "' and "
+ + BeanPropEnum.TransdtlOffline.reversalflag.toString() + "='" + ReversalFlag.NONE.toString() + "' and "
+ + BeanPropEnum.TransdtlOffline.status.toString() + "='" + PayStatus.SUC.toString() + "'")
+ var sumamt = 0
+ try {
+ cursor = db.rawQuery(sql, null, null)
+ if (cursor != null && cursor.moveToNext()) {
+ sumamt = cursor.getInt(cursor.getColumnIndex("sumamt"))
+ }
+ } finally {
+ cursor?.close()
+ }
+
+ sql = ("select sum(${BeanPropEnum.TransdtlOffline.payamt}) as sumamt from $TABLE where "
+ + BeanPropEnum.TransdtlOffline.transdate.toString() + "='" + date + "' and "
+ + BeanPropEnum.TransdtlOffline.cardno.toString() + "='" + cardno + "' and "
+ + BeanPropEnum.TransdtlOffline.cardphyid.toString() + "='" + cardphyid + "' and "
+ + BeanPropEnum.TransdtlOffline.reversalflag.toString() + "<>'" + ReversalFlag.NONE.toString() + "' and "
+ + BeanPropEnum.TransdtlOffline.status.toString() + "='" + PayStatus.SUC.toString() + "'")
+ try {
+ cursor = db.rawQuery(sql, null, null)
+ if (cursor != null && cursor.moveToNext()) {
+ val reverse = cursor.getInt(cursor.getColumnIndex("sumamt"))
+ if (sumamt > reverse) {
+ return (sumamt - reverse)
+ }
+ }
+ } finally {
+ cursor?.close()
+ }
+ return 0
+ }
+
fun getUnconfirm(): List<TransdtlOfflineRecord> {
val db = dbHelper.readableDatabase
var cursor: Cursor? = null
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index 78a4328..0a76b2b 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -56,6 +56,22 @@
return false
}
+ fun getAll(): List<TransdtlOnlineRecord> {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val orderby = BeanPropEnum.TransdtlOnline.devseqno.toString() + " desc"
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, orderby)
+ val list = ArrayList<TransdtlOnlineRecord>()
+ while (cursor != null && cursor.moveToNext()) {
+ list.add(getRecord(cursor))
+ }
+ return list
+ } finally {
+ cursor?.close()
+ }
+ }
+
fun getUnconfirm(): List<TransdtlOnlineRecord> {
val db = dbHelper.readableDatabase
var cursor: Cursor? = null
diff --git a/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
index 65e1640..8829b75 100644
--- a/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
@@ -9,6 +9,7 @@
var heatBeat: Int = 0// 心跳间隔
var offlineEnable: Boolean = false // 脱机消费时限开关 false-关闭, true-开启
var maxOfflineDays: Int = 0// 最大脱机天数
+ var maxDayOfflineAmt: Int = 0//同卡当天离线交易最大金额
var mngPasswd: String? = null// 维护密码
var sucShowtime: Int = 0// 消费成功显示时间
var failShowtime: Int = 0 //消费失败显示时间
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
index 347d10a..a471c8f 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
@@ -27,4 +27,16 @@
val tmp = GsonUtil.GsonString(this)
return GsonUtil.GsonToBean(tmp, TransdtlOfflineRecord::class.java)
}
+
+ override fun toString(): String {
+ val sb = StringBuilder()
+ sb.append("离线流水:").append("devphyid=").append(devphyid).append(",transdate=").append(transdate)
+ .append(",transtime=").append(transtime).append(",seqno=").append(devseqno).append(",cardno=")
+ .append(cardno).append(",payamt=").append(payamt).append(",extraamt=").append(extraamt)
+ .append(",managefeetype=").append(managefeetype).append(",reversalflag=").append(reversalflag)
+ .append(",reversalseqno=").append(reversalseqno).append(",reversaltransdate=").append(reversaltransdate)
+ .append(",reversaltranstime=").append(reversaltranstime).append(",status=").append(status)
+ .append(",upflag=").append(upflag)
+ return sb.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
index 584e629..841ca3a 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -29,4 +29,16 @@
val tmp = GsonUtil.GsonString(this)
return GsonUtil.GsonToBean(tmp, TransdtlOnlineRecord::class.java)
}
+
+ override fun toString(): String {
+ val sb = StringBuilder()
+ sb.append("联机流水:").append("devphyid=").append(devphyid).append(",transdate=").append(transdate)
+ .append(",transtime=").append(transtime).append(",seqno=").append(devseqno).append(",cardno=")
+ .append(cardno).append(",code=").append(qrcode).append(",transtype=").append(transtype)
+ .append(",payamt=").append(payamt).append(",extraamt=").append(extraamt).append(",managefeetype")
+ .append(managefeetype).append(",username=").append(username).append(",billno=").append(billno)
+ .append(",reversalflag=").append(reversalflag).append(",reversalbillno=").append(reversalbillno)
+ .append(",status=").append(status).append(",upflag=").append(upflag)
+ return sb.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index 0cdffea..75a91ab 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -105,6 +105,7 @@
it.paraname == "manage_passwd" -> record.mngPasswd = it.paraval
it.paraname == "offline_flag" -> record.offlineEnable = it.paraval == "1"
it.paraname == "max_offline_days" -> record.maxOfflineDays = it.paraval!!.toInt()
+ it.paraname == "max_day_offline_amt" -> record.maxDayOfflineAmt = it.paraval!!.toInt()
it.paraname == "communicate_time" -> record.commTime = it.paraval!!.toInt()
}
}
@@ -120,6 +121,9 @@
if (record.commTime == 0) {
record.commTime = 3
}
+ if (record.maxDayOfflineAmt == 0) {
+ record.maxDayOfflineAmt = 10000
+ }
if (!pos.replaceSysPara(record)) {
throw SysParaError("保存参数失败")
}