与农商行前置对接
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
index ba5e113..2ed95c0 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
@@ -9,9 +9,9 @@
private String message;
private String transdate;
private String transtime;
- private String bankjourno;
- private String captcha;
- private String status;
+ private String bankjourno; //银行流水号
+ private String captcha; //验证码
+ private String status; //0-成功;1-失败;2-已退款;3-部分退款
private String filename;
@XmlElement(name = "CODE")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java
index d6d7b9f..e2ef84f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java
@@ -5,18 +5,26 @@
public class YnrccUtil {
- private static final String BANKCARD_BIND_TRANSCODE = "BC5510";
- private static final String BANKCARD_SIGN_TRANSCODE = "BC5511";
- private static final String BANKCARD_PAY_TRANSCODE = "BC5512";
- private static final String BANKCARD_PAYREFUND_TRANSCODE = "BC5513";
- private static final String BANKCARD_QUERYRESULT_TRANSCODE = "BC5514";
- private static final String BANKCARD_CHKFILE_TRANSCODE = "BC5515";
+ public static final String BANKCARD_BIND_TRANSCODE = "BC5510";
+ public static final String BANKCARD_SIGN_TRANSCODE = "BC5511";
+ public static final String BANKCARD_PAY_TRANSCODE = "BC5512";
+ public static final String BANKCARD_PAYREFUND_TRANSCODE = "BC5513";
+ public static final String BANKCARD_QUERYRESULT_TRANSCODE = "BC5514";
+ public static final String BANKCARD_CHKFILE_TRANSCODE = "BC5515";
public static final String DLPAY_CATEGORIE = "C001"; //消费类别
public static final String YNRCC_ANGENT_URL = "ynrcc.agent.url"; //农商行前置url
- public static final String YNRCC_SIGNTYPE = "ynrcc.agent.signtype"; //农商行前置signtype
public static final String YNRCC_SIGNKEY = "ynrcc.agent.signkey"; //农商行前置md5key
+ public static final String YNRCC_MERCHANT_BANKCARDNO = "merchant.bankcardno";
+ public static final String YNRCC_MERCHANT_BANKACCNAME = "merchant.bankaccname";
+
+ public static final String PARAM_CONFIG_ERROR = "90000"; // 参数未配置
+ public static final String PARAM_VALUE_ERROR = "90001"; // 参数值错误
+
+ public static final int AGENT_CONNECT_TIMEOUT = 20;
+ public static final String TRANSTYPE_SIGNCARD = "1"; //签约
+ public static final String TRANSTYPE_UNSIGNCARD = "2"; //解约
public static final Map<String, String> errcode = new HashMap<>(0);
static {
@@ -28,17 +36,26 @@
errcode.put("0105", "户名不符");
errcode.put("0106", "卡状态异常");
errcode.put("0107", "无此卡号");
+ errcode.put("0108", "已存在签约信息,与签约证件号码不符");
+ errcode.put("0109", "已存在签约信息,与签约证件类型不符");
+ errcode.put("0110", "已存在签约信息,与签约户名不符");
+ errcode.put("0111", "已存在签约信息,与签约手机号不符");
+
errcode.put("0201", "未进行银行卡绑定");
errcode.put("0202", "无效的交易类型");
errcode.put("0301", "未签约");
errcode.put("0302", "余额不足");
errcode.put("0303", "MD5校验失败");
+ errcode.put("0304", "该卡号已经解约,不允许重复解约");
errcode.put("0401", "原始流水不存在");
errcode.put("0402", "原始流水未成功");
errcode.put("0403", "原始流水已退款");
errcode.put("4004", "商户账户余额不足");
errcode.put("0405", "不在退款时间范围内");
errcode.put("0406", "当日无交易明细");
+ errcode.put("0407", "非大理市民卡,不允许交易");
+ errcode.put("0408", "同一请求流水号不允许重复提交");
+ errcode.put("4444", "其他错误");
}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
index b85342f..8b378e8 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
@@ -1,6 +1,7 @@
package com.supwisdom.dlpay.api.service
import com.supwisdom.dlpay.api.bean.DaliDatasyncDetail
+import com.supwisdom.dlpay.api.domain.TCard
import org.springframework.transaction.annotation.Propagation
import org.springframework.transaction.annotation.Transactional
@@ -9,4 +10,7 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
fun doUpdateUserInfos(bean: DaliDatasyncDetail): Boolean
+ @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
+ fun getBankcardByUserid(userid: String): TCard?
+
}
\ No newline at end of file
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 be69c42..d345330 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
@@ -130,5 +130,7 @@
}
-
+ override fun getBankcardByUserid(userid: String): TCard? {
+ return cardDao.findCardByUseridAndCardtype(userid, ConstantUtil.CARDTYPE_BANKCARD)
+ }
}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt
index 7faf4d7..5da1116 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt
@@ -1,8 +1,18 @@
package com.supwisdom.dlpay.citizencard.service
import com.supwisdom.dlpay.api.bean.DlpayResp
+import com.supwisdom.dlpay.api.domain.TPerson
interface CitizencardPayService {
- fun bindCard(bankcardno: String, idtype: String, idno: String, phone: String): DlpayResp
+ fun bindCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String): DlpayResp
+
+ fun signCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String, transtype: String): DlpayResp
+
+ fun cardPay(shopaccno: String, person: TPerson, amount: Int, refno: String): DlpayResp
+
+ fun cardPayRefund(refno: String, orignRefno: String, amount: Int): DlpayResp
+
+ fun queryResult(refno: String, orignRefno: String): DlpayResp
+
}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt
index b29a084..5785262 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt
@@ -1,12 +1,303 @@
package com.supwisdom.dlpay.citizencard.service.impl
+import com.google.gson.Gson
+import com.sun.jersey.api.client.Client
+import com.sun.jersey.api.client.ClientResponse
import com.supwisdom.dlpay.api.bean.DlpayResp
+import com.supwisdom.dlpay.api.domain.TPerson
+import com.supwisdom.dlpay.api.service.DaliDatasyncService
+import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.api.types.IDTypes
import com.supwisdom.dlpay.citizencard.service.CitizencardPayService
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.util.YnrccUtil
+import mu.KotlinLogging
+import org.springframework.beans.factory.annotation.Autowired
+import javax.ws.rs.core.MediaType
class CitizencardPayServiceImpl : CitizencardPayService {
+ @Autowired
+ lateinit var sourceTypeService: SourceTypeService
+ @Autowired
+ lateinit var systemUtilService: SystemUtilService
+ @Autowired
+ lateinit var daliDatasyncService: DaliDatasyncService
- override fun bindCard(bankcardno: String, idtype: String, idno: String, phone: String): DlpayResp {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ private val logger = KotlinLogging.logger { }
+
+ private fun checkCitizencardConfig(config: Map<String, String?>, resp: DlpayResp): Boolean {
+ val agentUrl = config[YnrccUtil.YNRCC_ANGENT_URL]
+ val signKey = config[YnrccUtil.YNRCC_SIGNKEY]
+ if (agentUrl.isNullOrEmpty()) {
+ resp.code = YnrccUtil.PARAM_CONFIG_ERROR
+ resp.message = "系统参数未配置[农商行前置地址前缀]"
+ logger.error(resp.message)
+ return false
+ }
+ if (signKey.isNullOrEmpty()) {
+ resp.code = YnrccUtil.PARAM_CONFIG_ERROR
+ resp.message = "系统参数未配置[农商行前置签名秘钥]"
+ logger.error(resp.message)
+ return false
+ }
+ return true
}
+ override fun bindCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String): DlpayResp {
+ var resp = DlpayResp()
+ val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+ if (!checkCitizencardConfig(config, resp)) {
+ return resp
+ }
+ val idType = IDTypes.findByValue(idtype)
+ if (idType < 0) {
+ resp.code = YnrccUtil.PARAM_VALUE_ERROR
+ resp.message = "证件类型未识别[$idtype]"
+ logger.error(resp.message)
+ return resp
+ }
+ val systime = systemUtilService.sysdatetime
+ val refno = systemUtilService.refno
+ val params = hashMapOf<String, String>()
+ params.plus(mapOf(
+ "transcode" to YnrccUtil.BANKCARD_BIND_TRANSCODE,
+ "transdate" to systime.hostdate,
+ "transtime" to systime.hosttime,
+ "refno" to refno,
+ "bankcardno" to bankcardno,
+ "username" to username,
+ "idtype" to idType,
+ "idno" to idno,
+ "phone" to phone,
+ "sign_type" to "MD5"
+ ))
+ val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+ params["sign"] = sign
+ val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/bindcard"
+ logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+ val client = Client.create()
+ client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
+ return if (200 == respClient.status) {
+ resp = respClient.getEntity(DlpayResp::class.java)
+ logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ resp
+ } else {
+ resp.code = "99"
+ resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+ logger.error(resp.message)
+ resp
+ }
+ }
+
+ override fun signCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String, transtype: String): DlpayResp {
+ var resp = DlpayResp()
+ val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+ if (!checkCitizencardConfig(config, resp)) {
+ return resp
+ }
+ val idType = IDTypes.findByValue(idtype)
+ if (idType < 0) {
+ resp.code = YnrccUtil.PARAM_VALUE_ERROR
+ resp.message = "证件类型未识别[$idtype]"
+ logger.error(resp.message)
+ return resp
+ }
+ if (YnrccUtil.TRANSTYPE_SIGNCARD != transtype && YnrccUtil.TRANSTYPE_UNSIGNCARD != transtype) {
+ resp.code = YnrccUtil.PARAM_VALUE_ERROR
+ resp.message = "签约类型错误[$transtype]"
+ logger.error(resp.message)
+ return resp
+ }
+
+ val systime = systemUtilService.sysdatetime
+ val refno = systemUtilService.refno
+ val params = hashMapOf<String, String>()
+ params.plus(mapOf(
+ "transcode" to YnrccUtil.BANKCARD_SIGN_TRANSCODE,
+ "transdate" to systime.hostdate,
+ "transtime" to systime.hosttime,
+ "refno" to refno,
+ "categorie" to YnrccUtil.DLPAY_CATEGORIE,
+ "transtype" to transtype,
+ "bankcardno" to bankcardno,
+ "username" to username,
+ "idtype" to idType,
+ "idno" to idno,
+ "phone" to phone,
+ "sign_type" to "MD5"
+ ))
+ val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+ params["sign"] = sign
+ val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/signcard"
+ logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+ val client = Client.create()
+ client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
+ return if (200 == respClient.status) {
+ resp = respClient.getEntity(DlpayResp::class.java)
+ logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ resp
+ } else {
+ resp.code = "99"
+ resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+ logger.error(resp.message)
+ resp
+ }
+ }
+
+ override fun cardPay(shopaccno: String, person: TPerson, amount: Int, refno: String): DlpayResp {
+ var resp = DlpayResp()
+ val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, shopaccno, false, false)
+ if (!checkCitizencardConfig(config, resp)) {
+ return resp
+ }
+ val merchantBankcardno = config[YnrccUtil.YNRCC_MERCHANT_BANKCARDNO]
+ val merchantBankaccname = config[YnrccUtil.YNRCC_MERCHANT_BANKACCNAME]
+ if (StringUtil.isEmpty(merchantBankcardno) || StringUtil.isEmpty(merchantBankaccname)) {
+ resp.code = YnrccUtil.PARAM_CONFIG_ERROR
+ resp.message = "系统参数未配置[商户收款银行账号]"
+ logger.error(resp.message)
+ return resp
+ }
+ val idType = IDTypes.findByValue(person.idtype)
+ if (idType < 0) {
+ resp.code = YnrccUtil.PARAM_VALUE_ERROR
+ resp.message = "证件类型未识别[${person.idtype}]"
+ logger.error(resp.message)
+ return resp
+ }
+ val userBankcard = daliDatasyncService.getBankcardByUserid(person.userid)
+ if (null == userBankcard) {
+ resp.code = "99"
+ resp.message = "用户[${person.userid}]未绑定银行卡"
+ logger.error(resp.message)
+ return resp
+ } else if (TradeDict.STATUS_NORMAL != userBankcard.status) {
+ resp.code = "99"
+ resp.message = "用户[${person.userid}]绑定银行卡状态异常"
+ logger.error(resp.message)
+ return resp
+ } else if (!userBankcard.signed) {
+ resp.code = "99"
+ resp.message = "用户[${person.userid}]绑定银行卡未签约"
+ logger.error(resp.message)
+ return resp
+ }
+ val bankcardno = userBankcard.cardno
+
+ val systime = systemUtilService.sysdatetime
+ val params = hashMapOf<String, String>()
+ params.plus(mapOf(
+ "transcode" to YnrccUtil.BANKCARD_PAY_TRANSCODE,
+ "transdate" to systime.hostdate,
+ "transtime" to systime.hosttime,
+ "refno" to refno,
+ "categorie" to YnrccUtil.DLPAY_CATEGORIE,
+ "bankcardno" to bankcardno,
+ "username" to person.name,
+ "idtype" to idType,
+ "idno" to person.idno,
+ "merchant_bankcardno" to merchantBankcardno,
+ "merchant_bankaccname" to merchantBankaccname,
+ "amount" to amount,
+ "description" to "市民卡代扣消费",
+ "sign_type" to "MD5"
+ ))
+ val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+ params["sign"] = sign
+ val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/cardpay"
+ logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+ val client = Client.create()
+ client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
+ return if (200 == respClient.status) {
+ resp = respClient.getEntity(DlpayResp::class.java)
+ logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ resp
+ } else {
+ resp.code = "99"
+ resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+ logger.error(resp.message)
+ resp
+ }
+ }
+
+ override fun cardPayRefund(refno: String, orignRefno: String, amount: Int): DlpayResp {
+ var resp = DlpayResp()
+ val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+ if (!checkCitizencardConfig(config, resp)) {
+ return resp
+ }
+
+ val systime = systemUtilService.sysdatetime
+ val params = hashMapOf<String, String>()
+ params.plus(mapOf(
+ "transcode" to YnrccUtil.BANKCARD_PAYREFUND_TRANSCODE,
+ "transdate" to systime.hostdate,
+ "transtime" to systime.hosttime,
+ "refno" to refno,
+ "refund_refno" to orignRefno,
+ "amount" to amount,
+ "description" to "市民卡代扣消费退款",
+ "sign_type" to "MD5"
+ ))
+ val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+ params["sign"] = sign
+ val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/cardpayrefund"
+ logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+ val client = Client.create()
+ client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
+ return if (200 == respClient.status) {
+ resp = respClient.getEntity(DlpayResp::class.java)
+ logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ resp
+ } else {
+ resp.code = "99"
+ resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+ logger.error(resp.message)
+ resp
+ }
+ }
+
+ override fun queryResult(refno: String, orignRefno: String): DlpayResp {
+ var resp = DlpayResp()
+ val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+ if (!checkCitizencardConfig(config, resp)) {
+ return resp
+ }
+
+ val systime = systemUtilService.sysdatetime
+ val params = hashMapOf<String, String>()
+ params.plus(mapOf(
+ "transcode" to YnrccUtil.BANKCARD_PAYREFUND_TRANSCODE,
+ "transdate" to systime.hostdate,
+ "transtime" to systime.hosttime,
+ "refno" to refno,
+ "orign_refno" to orignRefno,
+ "sign_type" to "MD5"
+ ))
+ val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+ params["sign"] = sign
+ val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/queryresult"
+ logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+ val client = Client.create()
+ client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
+ return if (200 == respClient.status) {
+ resp = respClient.getEntity(DlpayResp::class.java)
+ logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ resp
+ } else {
+ resp.code = "99"
+ resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+ logger.error(resp.message)
+ resp
+ }
+
+ }
+
+
}
\ No newline at end of file
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index b201022..610e4fd 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -485,13 +485,11 @@
INSERT INTO TB_SOURCETYPE_CONFIG (ID, SOURCETYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
VALUES ('13', 'citizenCard', 'ynrcc.agent.url', '农商行前置地址前缀', NULL, 't', '{tenantid}');
INSERT INTO TB_SOURCETYPE_CONFIG (ID, SOURCETYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
-VALUES ('14', 'citizenCard', 'ynrcc.agent.signtype', '农商行前置签名方式', 'MD5', 't', '{tenantid}');
-INSERT INTO TB_SOURCETYPE_CONFIG (ID, SOURCETYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
VALUES ('15', 'citizenCard', 'ynrcc.agent.signkey', '农商行前置签名秘钥', NULL, 't', '{tenantid}');
INSERT INTO TB_SOURCETYPE_CONFIG (ID, SOURCETYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
-VALUES ('16', 'citizenCard', 'bankcardno', '商户银行卡号', NULL, 'f', '{tenantid}');
+VALUES ('16', 'citizenCard', 'merchant.bankcardno', '商户银行卡号', NULL, 'f', '{tenantid}');
INSERT INTO TB_SOURCETYPE_CONFIG (ID, SOURCETYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
-VALUES ('17', 'citizenCard', 'bankaccname', '银行开户名', NULL, 'f', '{tenantid}');
+VALUES ('17', 'citizenCard', 'merchant.bankaccname', '银行开户名', 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}');