卡管信息接收接口完善
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCard.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCard.java
index 41dba29..02e6bf9 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCard.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCard.java
@@ -28,7 +28,7 @@
private String status; //normal/closed
@Column(name = "TRANS_STATUS", nullable = false, length = 20)
- private String transStatus; //normal/loss/frozen/locked
+ private String transStatus; //normal/loss/frozen/locked/abnormal/unuse
@Column(name = "EXPIREDATE", length = 20)
private String expiredate;
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index 4676ca5..1e026eb 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -8,12 +8,16 @@
* locked -- 锁定、冻结
* frozen -- 冻结
* lost -- 挂失
+ * unuse -- 未使用,未启用
+ * abnormal -- 异常
*/
public static final String STATUS_NORMAL = "normal";
public static final String STATUS_CLOSED = "closed";
public static final String STATUS_LOCKED = "locked";
public static final String STATUS_LOST = "lost";
public static final String STATUS_FROZEN = "frozen";
+ public static final String STATUS_UNUSE = "unuse";
+ public static final String STATUS_ABNORMAL = "abnormal";
public static final String STATUS_YES = "yes";
public static final String STATUS_NO = "no";
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index 2b19d6f..5eef7e5 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -8,6 +8,7 @@
class DaliDatasyncParam {
var app_id: String = ""
+ val trans_code: String = ""
var data: String = ""
var count: Int = 0
var timestamp: String = ""
@@ -18,6 +19,9 @@
if (StringUtil.isEmpty(app_id)) {
throw RequestParamCheckException("请求参数错误[应用ID为空]")
}
+ if(StringUtil.isEmpty(trans_code)){
+ throw RequestParamCheckException("请求参数错误[交易类型为空]")
+ }
if (StringUtil.isEmpty(data)) {
throw RequestParamCheckException("请求参数错误[业务参数报文为空]")
}
@@ -37,7 +41,7 @@
}
fun checkSign(key: String): Boolean {
- val signData = "app_id=$app_id&count=$count&data=$data×tamp=$timestamp"
+ val signData = "app_id=$app_id&count=$count&data=$data×tamp=$timestamp&trans_code=$trans_code"
return sign.equals(HmacUtil.HMACSHA256(signData, key), true)
}
@@ -60,6 +64,7 @@
var cardstatus: String = ""
var bankcardno: String? = null
var username: String = ""
+ var sex: String? = null
var idtype: String = ""
var idno: String = ""
var mobile: String? = null
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
index 248c831..80a9ca9 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
@@ -35,24 +35,27 @@
val deskey = systemUtilService.getSysparaValue(SysparaUtil.DLCARDMANAGER_DESKEY)
if (StringUtil.isEmpty(appid) || StringUtil.isEmpty(appkey) || StringUtil.isEmpty(deskey)) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .data("trans_code", param.trans_code)
.fail(1000, "系统参数未配置"))
} else if (appid != param.app_id) {
throw RequestParamCheckException("请求参数错误[应用ID错误]")
}
if (!param.checkSign(appkey)) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .data("trans_code", param.trans_code)
.fail(2001, "签名错误"))
}
val datalist = param.decData(deskey)
if (param.count != datalist.size) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .data("trans_code", param.trans_code)
.fail(2002, "请求参数错误[数据条数不匹配]"))
}
var errlist = ArrayList<DaliDatasyncErrorDetail>(0)
- datalist.forEach {detail->
+ datalist.forEach { detail ->
try {
detail.checkParam()
daliDatasyncService.doUpdateUserInfos(detail)
@@ -60,27 +63,29 @@
errlist.add(DaliDatasyncErrorDetail().apply {
cardno = detail.cardno
errcode = "2001"
- errmsg = e1.message?:"明细数据关键字段为空"
+ errmsg = e1.message ?: "明细数据关键字段为空"
})
- }catch (e2: Exception){
+ } catch (e2: Exception) {
errlist.add(DaliDatasyncErrorDetail().apply {
cardno = detail.cardno
errcode = "3000"
- errmsg = e2.message?:"明细处理错误"
+ errmsg = e2.message ?: "明细处理错误"
})
}
}
- return when(StringUtil.isEmpty(errlist)){
+ return when (StringUtil.isEmpty(errlist)) {
true -> ResponseEntity.ok(mapOf("retcode" to "0000", "retmsg" to "SUCCESS", "resultcode" to "0000", "resultmsg" to ""))
- false -> ResponseEntity.ok(mapOf("retcode" to "0000", "retmsg" to "请求成功接收", "resultcode" to "4000", "resultmsg" to "明细数据处理有错", "data" to Gson().toJson(errlist)))
+ false -> ResponseEntity.ok(mapOf("retcode" to "0000", "retmsg" to "请求成功接收", "resultcode" to "4000", "trans_code" to param.trans_code, "resultmsg" to "明细数据处理有错", "data" to Gson().toJson(errlist)))
}
} catch (ex: RequestParamCheckException) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .data("trans_code", param.trans_code)
.fail(2001, ex.message ?: "请求参数错误"))
} catch (e: Exception) {
e.printStackTrace()
return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .data("trans_code", param.trans_code)
.fail(4000, "系统处理错误"))
}
}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
index df5ed08..cc4cf56 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
@@ -8,6 +8,7 @@
import com.supwisdom.dlpay.api.domain.TCard
import com.supwisdom.dlpay.api.domain.TPerson
import com.supwisdom.dlpay.api.service.DaliDatasyncService
+import com.supwisdom.dlpay.api.types.IDTypes
import com.supwisdom.dlpay.exception.TransactionProcessException
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.tenant.TenantContext
@@ -32,20 +33,58 @@
val lowfreeLimit = systemUtilService.getSysparaValueAsDouble(SysparaUtil.NOPASS_LIMIT, SysparaUtil.DEFAULT_NOPASS_LIMIT)
val daylimit = systemUtilService.getSysparaValueAsDouble(SysparaUtil.DAY_PAY_LIMIT, SysparaUtil.DEFAULT_DAY_PAY_LIMIT)
+ //字典转换
+ val idType = when (bean.idtype.trim()) {
+ "0" -> IDTypes.IDCARD.data //身份证
+ "1" -> IDTypes.RESIDENCE_BOOKLET.data //户口簿
+ "2" -> IDTypes.PASSPORT.data //护照
+ "3" -> IDTypes.HK_MACAU_PASS.data //港澳居民来往内地通行证
+ "4" -> IDTypes.TAIWAN_PASS.data //台湾同胞来往内地通行证
+ "5" -> IDTypes.FOREIGNER_RESIDENCE_PERMIT.data //外国人居留证
+ "6" -> IDTypes.MILITARY_IDCARD.data //军官证
+ "7" -> IDTypes.SOLDIER_IDCARD.data //士兵证
+ else -> IDTypes.OTHERS.data //其他
+ }
+ val sex = bean.sex?.let {
+ when (it) {
+ "1" -> "male"
+ "2" -> "female"
+ else -> "unknown"
+ }
+ } ?: "unknown"
+ val cardStatus = when (bean.cardstatus) {
+ "0" -> TradeDict.STATUS_UNUSE //未启用
+ "1" -> TradeDict.STATUS_NORMAL //正常
+ "9" -> TradeDict.STATUS_CLOSED //注销
+ "2" -> TradeDict.STATUS_ABNORMAL //异常
+ else -> TradeDict.STATUS_ABNORMAL //异常
+ }
+
val systime = systemUtilService.sysdatetime
- var person = personDao.findByIdentity(bean.idtype.trim(), bean.idno.trim())
+ var person = personDao.findByIdentity(idType.toString(), bean.idno.trim())
if (null != person) {
+ //更新
+ var updateFlag = false
+ if (person.sex != sex) {
+ updateFlag = true
+ person.sex = sex
+ }
if (person.name != bean.username) {
+ updateFlag = true
person.name = bean.username
- person.lastsaved = systime.hostdatetime
- person = personDao.save(person)
accountDao.updateAccnameByUserid(person.name, person.userid)
}
+ if (updateFlag) {
+ person.lastsaved = systime.hostdatetime
+ person = personDao.save(person)
+ }
} else {
+ //修改
person = TPerson().apply {
name = bean.username
+ this.sex = sex
status = TradeDict.STATUS_NORMAL
- idtype = bean.idtype.trim()
+ idtype = idType.toString()
idno = bean.idno.trim()
email = bean.email
mobile = bean.mobile
@@ -79,19 +118,48 @@
var cityCard = cardDao.findCardByCardnoAndCardtype(bean.cardno.trim(), ConstantUtil.CARDTYPE_CITIZENCARD)
if (null != cityCard) {
//仅修改有效期和状态
+ var cardUpdateFlag = false
if (cityCard.expiredate != bean.expiredate.trim()) {
+ cardUpdateFlag = true
cityCard.expiredate = bean.expiredate.trim()
}
- //fixme: bean.cardstatus 判断修改状态
- cardDao.save(cityCard)
+ //fixme: bean.cardstatus 判断修改状态
+ if(TradeDict.STATUS_CLOSED == cardStatus){
+ //注销卡片
+ if(cityCard.status != TradeDict.STATUS_CLOSED){
+ cardUpdateFlag = true
+ cityCard.status = TradeDict.STATUS_CLOSED
+ }
+ }else{
+ //卡片的其他状态,代表交易状态
+ if(TradeDict.STATUS_NORMAL != cityCard.transStatus){
+ cardUpdateFlag = true
+ cityCard.status = TradeDict.STATUS_NORMAL
+ }
+ if(cardStatus != cityCard.transStatus){
+ cardUpdateFlag = true
+ cityCard.transStatus=cardStatus
+ }
+ }
+
+ if(cardUpdateFlag){
+ cityCard.lastsaved = systime.hostdatetime
+ cardDao.save(cityCard) //更新
+ }
} else {
cityCard = TCard().apply {
cardno = bean.cardno.trim()
cardtype = ConstantUtil.CARDTYPE_CITIZENCARD
cardphyid = bean.cardphyid.trim()
- status = TradeDict.STATUS_NORMAL // fixme: bean.cardstatus 判断
- transStatus = TradeDict.STATUS_NORMAL
+ status = when (TradeDict.STATUS_CLOSED == cardStatus) {
+ true -> TradeDict.STATUS_CLOSED
+ false -> TradeDict.STATUS_NORMAL
+ }
+ transStatus = when (TradeDict.STATUS_CLOSED == cardStatus) {
+ true -> TradeDict.STATUS_ABNORMAL
+ false -> cardStatus
+ }
expiredate = bean.expiredate.trim()
signed = false
userid = person.userid
@@ -107,18 +175,22 @@
bankCard = TCard().apply {
cardno = bean.bankcardno!!.trim()
cardtype = ConstantUtil.CARDTYPE_BANKCARD
- cardphyid = ""
- status = TradeDict.STATUS_NORMAL // fixme: bean.cardstatus 判断
+ cardphyid = bean.cardphyid.trim()
+ status = when (TradeDict.STATUS_CLOSED == cardStatus) {
+ true -> TradeDict.STATUS_CLOSED
+ false -> TradeDict.STATUS_NORMAL
+ }
transStatus = TradeDict.STATUS_NORMAL
expiredate = "21991231"
signed = false
userid = person.userid
lastsaved = systime.hostdatetime
}
- cardDao.closedBankcardStatusByUserid(bankCard.userid) //注销其他银行卡
+ if (TradeDict.STATUS_NORMAL == bankCard.status) {
+ cardDao.closedBankcardStatusByUserid(bankCard.userid) //注销其他银行卡
+ }
bankCard.tenantid = TenantContext.getTenantSchema()
cardDao.save(bankCard) //绑定新的银行卡
-
} else {
if (bankCard.userid != person.userid) {
throw TransactionProcessException(3000, "银行卡已被人绑定")
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 2bca5e2..da276c1 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -504,7 +504,20 @@
VALUES ('23', 'wechat', 'wechat.refund.certpwd', '微信退款证书密码', NULL, 'f', '{tenantid}');
INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
-VALUES (1, 'yes', 1, '20190514165658', '账户最大余额默认值', '元', '10001', '账户开户时的默认账户最大余额', 'amount', '{tenantid}');
+VALUES (1, 'yes', 1, '20190514165658', '账户最大余额默认值', '元', '10000.0', '账户开户时的默认账户最大余额', 'amount', '{tenantid}');
+INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
+VALUES (2, 'yes', 1, '20190514165658', '默认免密额度', '元', '100.0', '账户开户时的默认免密额度', 'amount', '{tenantid}');
+INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
+VALUES (3, 'yes', 1, '20190514165658', '默认日累计额度', '元', '200.0', '账户余额支付时默认的日累计额度', 'amount', '{tenantid}');
+INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
+VALUES (4, 'yes', 1, '20190514165658', '手机端用户过期时间', '秒', null, '手机端用户过期时间(秒)', 'decimal', '{tenantid}');
+
+VALUES (2019, 'yes', 1, '20190514165658', '与卡管系统对接的应用ID', null, null, '与卡管系统对接的app_id', 'string', '{tenantid}');
+INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
+VALUES (2020, 'yes', 1, '20190514165658', '与卡管系统对接的签名秘钥', null, null, '与卡管系统对接的appkey', 'string', '{tenantid}');
+INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
+VALUES (2021, 'yes', 1, '20190514165658', '与卡管系统对接的业务参数加密秘钥', null, null, '与卡管系统对接中业务参数加密的deskey', 'string', '{tenantid}');
+
INSERT INTO "tb_task_lock" ("taskcode", "remark", "taskstatus", "tasktime", "tenantid")
VALUES ('DAYENDSETTLETASK', '日终结算', '0', '20190619100600', '{tenantid}');
@@ -585,6 +598,8 @@
INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
VALUES (30, 'shopmarket', 'dtltypeList', '商超消费', '流水类型', '{tenantid}');
+
+
INSERT INTO TB_QRCODE_PATTERN(ID, PATTERN, SOURCETYPE, TENANTID)
VALUES(1, '28\d{16}', 'alipay', '{tenantid}');
INSERT INTO TB_QRCODE_PATTERN(ID, PATTERN, SOURCETYPE, TENANTID)